Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Делаю сайт
Форум Точек.нет - общение без границ ! > Техномир > Программирование
Страницы: 1, 2
indеx
Выяснилось, что совет по сохранению конфигурации iptables, описанный в сообщении http://tochek.net/index.php?showtopic=5999...t&p=2436477, а также в конце сообщения http://tochek.net/index.php?showtopic=5999...t&p=2441008, не всегда работает. То есть, новые настройки после перезагрузки не восстанавливаются. Попробовал найти решение самостоятельно и нашёл способ, который сработал.
В каталоге /etc/iptables есть файл rules.v4, в котором прописаны правила iptables. И по всей видимости, именно этот файл используется при восстановлении настроек после перезагрузки. Пробуем сохранить наши настройки в этот файл:
Код
iptables-save > /etc/iptables/rules.v4
а файл 0000-iptables.bash, созданный нами ранее в каталоге /etc/network/if-up.d, удаляем из этого каталога, как не прошедший проверку на надёжность.
Перезагружаем сервер:
Код
reboot now
и смотрим, восстановились ли правила:
Код
iptables -L -n --line-numbers
Да, все правила восстановились. Но вдруг они восстанавливаются не из этого файла, а откуда-нибудь ещё? Чтобы проверить это, давайте удалим переместим этот файл в другое место и перезагрузим сервер. После перезагрузки смотрим — правила не восстановились без этого файла. Значит, это точно тот самый файл. Возвращаем его на своё место /etc/iptables/rules.v4, перезагружаем сервер, проверяем правила и снова видим, что правила восстановились. Берём этот способ на вооружение.
indеx
Таким образом получается, что у нас в памяти сервера работают несколько процессов PHP — для каждого сайта свой процесс. Или даже не один? Хм, интересно, а сколько? Давайте посмотрим...
Есть одна команда:
Код
ps aux --sort -rss
которая выводит на экран список всех процессов:
» Кликните сюда для просмотра оффтоп текста.. «
И в этом списке мы можем видеть количество процессов, сколько они занимают памяти и на сколько загружают процессор. Этот список, по всей видимости, упорядочен по объёму занимаемой памяти. И самый большой объём, как мы видим, занимает наша СУБД MySQL20% оперативки. Всего на сервере 1 Гб памяти, значит MySQL занимает 200 МБ. Также мы видим, что для одного сайта выделено от 3 до 6 процессов PHP. Это как раз те значения, что мы прописывали в файлах в каталоге /etc/php/7.0/fpm/pool.d. Этот список неполный, там ниже есть ещё процессы, которые занимают меньше памяти. Но сколько же памяти занимают все процессы вместе? Им вообще хватает одного гигабайта, или мало? Давайте узнаем... Есть такая команда:
Код
free
которая выводит на экран кратко:
Код
              total        used        free      shared  buff/cache   available
Mem:        1016028      364904      131664       49552      519460      413600
Swap:             0           0           0
Где мы видим, что всего — 1016028, а используется 364904. Но свободно почему-то всего-лишь 131664. А доступно почему-то 413600. Видимо, доступное уже не считается свободным. А кроме того, есть ещё слово Swap, по всей видимости означающее, что бывает файл подкачки, но на данный момент он не используется (размер 0).
А давайте, чтобы не рисковать переполнением памяти, попробуем подключить к оперативке ещё и файл подкачки. Сколько у нас там свободного места на диске? Проверяем командой:
Код
df
Смотрим на экран:
Код
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              487848       0    487848   0% /dev
tmpfs             101604   10756     90848  11% /run
/dev/vda1       10286264 4727292   5018428  49% /
tmpfs             508012       0    508012   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs             508012       0    508012   0% /sys/fs/cgroup
tmpfs             101604       0    101604   0% /run/user/1000
То есть, из 10 Гигабайт на диске, у нас свободно половина — 5 Гб. Отлично, тогда давайте к 1 Гб оперативки подключим ещё 1 Гб файлом подкачки, что увеличит память в 2 раза. Вводим команду создания файла:
Код
fallocate -l 1G /swapfile
Проверяем — в корне должен появиться файл swapfile. Теперь превращаем этот файл в файл подкачки... Сначала отрубаем к нему доступ всем пользователям, кроме root:
Код
chmod 600 /swapfile
Теперь внутри этого файла создаём файловую систему, используемую специально для файлов подкачки:
Код
mkswap /swapfile
И теперь, собственно, включаем его как файл подкачки:
Код
swapon /swapfile
Проверяем, что изменилось у нас со свободным местом:
Код
free
Видим явные изменения:
Код
              total        used        free      shared  buff/cache   available
Mem:        1016028      367328      125272       50016      523428      410668
Swap:       1048572           0     1048572
Теперь наш файл используется в системе для расширения оперативной памяти. Но если оставить так, то это дело будет работать только до перезагрузки сервера. А чтобы работало и после перезагрузки, нужно в конец файла /etc/fstab добавить одну строку:
Код
/swapfile none swap sw 0 0
И сохранить файл.
После этого мы перезагружаем сервер, убеждаемся, что после перезагрузки файл подкачки тоже используется, и радуемся, что теперь-то у нас точно хватит памяти для всех процессов на сервере.

Продолжение следует...
indеx
Небольшая заметка.

По умолчанию PHP обрабатывает скрипты только в таких вставках:
Код
<?php ... ?>

Но для удобства и для эстетики лично мне хочется использовать вставки вот такие:
Код
<? ... ?>
Чтобы такие вставки работали, нужно в файле php.ini найти строку:
Код
short_open_tag = Off
и заменить её на:
Код
short_open_tag = On
Само собой, после этого нужно перезапустить PHP:
Код
systemctl restart php7.0-fpm
indеx
Компьютерная техника обычно работает чётко, строго по инструкциям и программам. Но всё-таки иногда случаются непредвиденные ситуации, в результате которых информация на сервере может частично пропасть. Особенно ценной является информация, хранящаяся в базе данных сайта. Например, все наши сообщения на этом форуме хранятся в базе данных сайта tochek.net. И если часть сообщений однажды вдруг пропадёт, то это будет очень печально. Такое, кстати, однажды было на этом форуме. В разделе "Непознанное -> Прочие религии и учения" модератор Сладкая Смерть случайно удалила все темы. ag.gif А потом заполняла этот раздел вновь созданными с нуля темами. ab.gif Чтобы такого не происходило, системные администраторы сайтов регулярно делают так называемые дампы базы данных. То есть, сохраняют всю информацию из базы данных в файл, чтобы потом её можно было восстановить из этого файла. База данных коммерческого сайта, хранящая записи о движении денежных средств, ещё более ценна, поэтому её сохраняют обычно каждый день. Мы можем делать это вручную с помощью программы MySQL Workbench, как уже было описано выше, но гораздо удобнее, чтобы это делалось автоматически. А для этого нужна командная строка. Ещё один минус сохранения базы данных через программу Workbench заключается в том, что я подключаюсь ей через SSH-туннель, который из-за своей шифровки сильно снижает скорость передачи данных по сети, и большая база данных будет сохраняться таким способом очень долго. В командной же строке сохранение идёт не через сеть, а в пределах этого же сервера — из базы данных в файл, что проходит намного быстрее при сохранении больших объёмов информации.
Короче говоря, нам нужно уметь делать в командной строке две операции: 1) сохранение БД в файл, 2) восстановление БД из файла.

Сохранение базы данных в файл.
В командной строке сервера пишем:
Код
mysqldump -R -u admin -p dbname > dump.sql
  • где:
    -R — параметр, указывающий, что в файл нужно сохранять не только таблицы и view, но и хранимые программы (процедуры и функции);
    admin — имя пользователя СУБД MySQL, имеющего права администратора, ибо только он имеет право читать содержимое хранимых функций и процедур (иначе хранимые программы не сохранятся в файл);
    dbname — имя базы данных, которую мы сохраняем в файл;
    dump.sql — имя файла, куда мы сохраняем базу данных (файл с этим именем будет создан в текущем каталоге).
затем нажимаем Enter, вводим пароль пользователя username и ещё раз Enter.
Ждём пару секунд и видим, что база данных dbname сохранилась в файле dump.sql. Файл текстовый, его можно открыть и увидеть, что он написан на языке SQL. Размер этого файла получается большой, поэтому его обычно архивируют.


Восстановление базы данных из файла.
Если сохранение БД выполняется одной командой, то для восстановления необходимо сначала войти в командную строку mysql. Для этого в командной строке сервера пишем:
Код
mysql -u admin -p
затем нажимаем Enter, вводим пароль пользователя admin (имеющего права администратора) и ещё раз Enter.
Это мы вошли в командную строку mysql.
Сначала выбираем базу данных, в которую мы будем восстанавливать данные из файла:
Код
use dbname2
и нажимаем Enter. СУБД ответит ниже: Database changed.
А теперь, собственно, восстанавливаем:
Код
source dump.sql
По экрану побегут строчки, мы дожидаемся окончания их бега и всё, база данных восстановлена.
Но это всё равно вручную. А для автоматизации нужно использовать программу Cron, работа с которой описана выше. Только пароль в этом случае вручную уже не введёшь, и его придётся прописывать в файле, а это потенциально опасно, если сервер физически находится не у меня. И это дилемма. Если автоматизированно, то могут пароли из файлов достать. Если вручную изредка, то можно потерять новые данные из-за какого-нибудь сбоя. Если вручную каждый день, то это лень. ca.gif В общем, пока сохраняю вручную изредка, а дальше видно будет...
indеx
Настройка NGINX. Белый список расширений файлов. Запуск только из корня.

Сразу к делу.
Содержимое сайта находится в двух местах:
а) в базе данных (в нашем случае это MySQL),
б) в файлах.
О базе данных мы поговорим в другой раз, а сейчас рассмотрим файлы.
С точки зрения безопасности, все файлы сайта можно разделить на три части:
    1. Статические файлы. Это файлы, которые скачиваются браузером. Готовые HTML-страницы, CSS-файлы, JS-файлы, картинки, иконки, MP3 и другие. Название этих файлов и их содержимое не является секретом, а значит этими файлами можно делиться с окружающим миром.

    2. Динамические файлы. Это по сути программы (скрипты), которые не скачиваются, а запускаются браузером. У нас это только PHP-файлы. Название этих файлов также не является секретом, т.к. по названию происходит их запуск. А вот содержимое этих файлов по-хорошему должно быть секретом, чтобы злоумышленники не знали, как устроен сайт изнутри, и соответственно, не смогли подобрать ключик к нашему сайту.

    3. Секретные материалы. Это файлы, доступ к которым нельзя давать даже по названию. Файлы конфигурации сервера, логи, статистика, скрипты операционной системы, служебные PHP-файлы, запускаемые только изнутри сервера, и другие. Первая опасность — это утечка информации. Вторая опасность — это запуск программы, которая не должна быть запущена, из-за чего может встать не только данный сайт, но и весь сервер.
Так вот, управлением доступа к файлам занимается веб-сервер, в нашем случае это NGINX.
Соответственно, нам нужно в настройках NGINX (для каждого сайта) описать правила доступа для каждого типа файлов.

1. Сначала опишем статику:
Код
    location ~* \.(htm|html|css|js|ico|jpg|jpeg|png|gif|mp3|msi)$ {
        try_files $uri $uri/ =404;
        }
Здесь мы с помощью регулярного выражения как раз перечисляем, с какими расширениями файлы будут доступны для скачивания браузером (что такое "регулярные выражения", читаем в Интернете, очень полезная вещь). Причём, доступны они будут из любых подкаталогов сайта.

2. Теперь опишем динамику:
Код
    location ~* ^/(\w|-|\.)+\.php$ {
        limit_req zone=max burst=5;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/site1.ru.sock;
        }
Здесь мы также с помощью регулярки описываем, какое должно быть имя файла. А именно, оно должно начинаться со слеша /. Затем могут идти латинские буквы, знаки подчёркивания, дефисы и точки в любом порядке и сколько угодно, но хотя бы один такой символ. И в конце обязательно .php
То есть, это любые PHP-файлы, но обязательно из корня сайта, ибо второй слеш в этом регулярном выражении не допускается. Я сделал так специально, чтобы PHP-файлы нельзя было вызвать из подкаталогов сайта, поскольку там у меня лежат PHP-файлы только для внутреннего пользования, не предназначенные для вызова извне.

Однако, на моём сайте в одном из подкаталогов всё-таки есть PHP-файлы, вызываемые извне. И чтобы эти файлы были доступны для вызова, для них надо составить другое регулярное выражение, вот такое:
Код
^/catalog/directory/file.php$

Но блок обработки файла должен быть тот же. Не другой такой же, а один общий. То есть, у нас должно получиться два блока регулярных выражений и один блок обработки. Соответственно, из каждого блока регулярных выражений файл должен отправляться в блок обработки. Делаем сначала блок обработки:
Код
    location @php {
        limit_req zone=max burst=5;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/site1.ru.sock;
        }
Этот блок называется именованным, т.к. имеет имя @php. По этому имени мы и сможем к нему обращаться.
Теперь делаем два блока регулярных выражений:
Код
    location ~* ^/(\w|-|\.)+\.php$ {
        error_page 480 = @php;
        return 480;
        }
    location ~ ^/catalog/directory/file.php$ {
        error_page 480 = @php;
        return 480;
        }
Как видите, мы использовали это имя блока обработки. Отправка файлов в именованный блок делается именно так.

Теперь нам нужно обработать ситуацию, когда пользователь зашёл на сайт без указания файла. То есть, просто написал в браузере "site1.ru" или "site1.ru/" (без слеша и со слешем в конце). Здесь ведь нет расширения файла .php, значит, нам нужно сделать ещё одно регулярное выражение для этих двух случаев, вот такое:
Код
(^$|^/$)
И блок у нас получится, соответственно:
Код
    location ~* (^$|^/$) {
        error_page 480 = @php;
        return 480;
        }
Который тоже будет отправлять файл в блок обработки. Но возникает закономерный вопрос: Какой файл будет отправлен в обработку, если в адресной строке не указано никакого файла? Ответ прост: Файл по умолчанию, указанный в файле snippets/fastcgi-php.conf (в блоке обработки этот файл подключается к конфигурации). И какой же там указан файл по умолчанию? Смотрим в файл /etc/nginx/snippets/fastcgi-php.conf и видим строку:
Код
fastcgi_index index.php
То есть, тот файл, который обычно и используется по умолчанию. Значит, если пользователь не укажет никакой файл, то будет использоваться файл index.php, и это как раз то, что нам нужно.
В результате, динамическая часть у нас получается следующая:
Код
    location ~* (^$|^/$) {
        error_page 480 = @php;
        return 480;
        }
    location ~* ^/(\w|-|\.)+\.php$ {
        error_page 480 = @php;
        return 480;
        }
    location ~ ^/catalog/directory/file.php$ {
        error_page 480 = @php;
        return 480;
        }
    location @php {
        limit_req zone=max burst=5;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/site1.ru.sock;
        }


3. А теперь опишем секретные файлы.
Код
    location / {
        deny all;
        }
Что означает "Запретить всё!". А так как блок без регулярных выражений обрабатывается после блоков с регулярными выражениями, то это означает "Запретить всё остальное!". То есть, в блоках с регулярными выражениями мы описываем так называемый "белый список" разрешённых запросов к сайту (статика и динамика), а все остальные запросы тупо запрещаем. В результате, всё это мы собираем вместе, вставляем в файл конфигурации сайта site1.ru, и у нас получается следующий файл конфигурации:
» Кликните сюда для просмотра оффтоп текста.. «
Который обеспечивает нам безопасность запросов к веб-серверу. rs.gif
indеx
Свободное место на диске

Заметил, что свободное место на жёстком диске сервера как-то очень быстро кончается.
Вот в этом сообщении видно, что места свободного было 4 гига, а теперь осталось:
Код
root@ez:/# df -t ext4
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/vda1       10286264 9116100    629620  94% /
Всего 630 мегабайт.

Разбираемся, какие папки в корне занимают больше всего места...
» Кликните сюда для просмотра оффтоп текста.. «
Самая тяжёлая папка /lib, лезем в неё...
» Кликните сюда для просмотра оффтоп текста.. «
Здесь самая тяжёлая папка /lib/modules, лезем в неё...
» Кликните сюда для просмотра оффтоп текста.. «
Чё эт тут такое? Одинаковые почти по размеру папки...
Оказывается, это модули для ядра соответствующей версии. Они обновляются автоматически (надо будет узнать, как отключить это дело; не люблю, когда без моего ведома что-то само обновляется, тем более на сервере).
Узнаём, какая версия ядра используется сейчас:
Код
root@ez:/# uname -r
4.4.0-101-generic
Ага, значит все остальные папки можно поудалять ab.gif ai.gif Или нет?
В Интернете пишут, что можно поудалять, но лучше не вручную, а воспользоваться командой:
Код
sudo apt-get autoremove
Пробуем...
Код
root@ez:/# apt autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  linux-headers-4.4.0-87 linux-headers-4.4.0-87-generic linux-headers-4.4.0-89 linux-headers-4.4.0-89-generic
  linux-headers-4.4.0-91 linux-headers-4.4.0-91-generic linux-headers-4.4.0-92 linux-headers-4.4.0-92-generic
  linux-headers-4.4.0-93 linux-headers-4.4.0-93-generic linux-headers-4.4.0-96 linux-headers-4.4.0-96-generic
  linux-headers-4.4.0-97 linux-headers-4.4.0-97-generic linux-headers-4.4.0-98 linux-headers-4.4.0-98-generic
  linux-image-4.4.0-87-generic linux-image-4.4.0-89-generic linux-image-4.4.0-91-generic
  linux-image-4.4.0-92-generic linux-image-4.4.0-93-generic linux-image-4.4.0-96-generic
  linux-image-4.4.0-97-generic linux-image-4.4.0-98-generic linux-image-extra-4.4.0-87-generic
  linux-image-extra-4.4.0-89-generic linux-image-extra-4.4.0-91-generic linux-image-extra-4.4.0-92-generic
  linux-image-extra-4.4.0-93-generic linux-image-extra-4.4.0-96-generic linux-image-extra-4.4.0-97-generic
  linux-image-extra-4.4.0-98-generic
0 upgraded, 0 newly installed, 32 to remove and 83 not upgraded.
After this operation, 2,379 MB disk space will be freed.
Do you want to continue? [Y/n]
Хмм... bw.gif

Ладно, удаляем, была-не-была! ag.gif
» Кликните сюда для просмотра оффтоп текста.. «
Ого! А я ещё хотел вручную что-то там сделать.
Так, сайт работает, форум работает, уже хорошо ag.gif
Анука, смотрим теперь, сколько места...
Код
root@ez:/# df -t ext4
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/vda1       10286264 5984440   3761280  62% /
Вооот, другое дело! Освободилось более 3 гигов.
Теперь надо поставить эту команду на Крон, чтобы каждый день освобождалось, не накапливалось:
Код
45 07 * * * apt autoremove -y
То есть, каждый день в 7:45 будет удаляться всё ненужное.
Вот так. А то ишь!
indеx
Создание поддомена

Когда наш сайт уже работает, но при этом мы занимаемся его развитием, совершенствованием, очень часто возникает ситуация, когда нам нужно протестировать обновление, но мы боимся, а вдруг оно не заработает и всё испортит. Для этой цели можно, конечно, зарегистрировать у регистратора доменных имён ещё один домен, например "mytest1234.ru", создать для него отдельный сайт на сервере и тестировать на нём наше обновление. Но за регистрацию нового домена нам придётся заплатить деньги. Вместо этого лучше к нашему рабочему домену "site1.ru" зарегистрировать поддомен, который будет выглядеть, например, так: "test.site1.ru". То есть, к имени сайта слева через точку добавляется ещё одно имя, и всё это вместе будет являться именем нового сайта. Но в отличии от нового домена, новый поддомен можно зарегистрировать бесплатно на хостинге, где у нас размещён сайт. Например, хостинг spaceweb.ru предоставляет такую возможность. Чтобы создать поддомен для домена, нужно в панели управления зайти в раздел "DNS":
» Кликните сюда для просмотра оффтоп текста.. «


Затем нужно: 1) выбрать домен, для которого мы хотим сделать поддомен, и 2) зайти на вкладку "Записи поддоменов".
» Кликните сюда для просмотра оффтоп текста.. «


После этого, как показано на рисунке ниже: 1) ввести имя нового поддомена, 2) ввести IP-адрес сервера, на котором этот сайт будет расположен, 3) нажать кнопку "Добавить".
» Кликните сюда для просмотра оффтоп текста.. «


Выше появится запись с названием "test".
Если нам нужно, чтобы сайт откликался не только на "test.site1.ru", но и на "www.test.site1.ru", то для этого предусмотрена формочка ниже, в которой в начале написано "www." Вписываем туда всё то же самое, что и в формочку ниже, и нажимаем кнопку "Добавить". После этого выше появится ещё одна запись с названием "www.test".
Это будет означать, что регистрация поддомена началась, и он заработает через некоторое время (несколько часов или сутки), когда обновятся записи на DNS-серверах провайдеров, через узлы которых пакеты проходят до нашего сервера.

Только SSL-сертификат, полученный для домена site1.ru через бесплатную службу letsencrypt, не будет работать для поддомена. Поэтому для поддомена нужно будет получить свой сертификат, как для обычного домена, по инструкции, описанной в одном из предыдущих сообщений.
indеx
Оказывается...
PHP может работать на сервере в двух режимах:
    1) FPM (FastCGI Process Manager)
    2) CLI (Command Line Interface)
В первом режиме PHP висит в памяти, как служба, на готове, и в режиме шлюза ждёт команд, например, от веб-сервера NGINX. А во втором режиме PHP не висит в памяти, а запускается только когда его вызовут через командную строку операционной системы. Соответственно, первый режим не может обрабатывать вызовы из командной строки, а второй режим не может работать в режиме шлюза.

Для каждого из этих двух вариантов существует своя версия установки.
1) PHP-FPM устанавливается так
Код
apt install php7.0-fpm

2) PHP-CLI устанавливается так
Код
apt install php7.0-cli

То есть, если мы планируем использовать PHP только в режиме шлюза с NGINX, и не собираемся вызывать его из командной строки, то нам достаточно установить первый вариант. А если, например, у нас два сервера, на первом из которых находится сайт, а второй сервер используется для вспомогательной работы, то на втором сервере мы можем установить PHP только в режиме CLI, чтобы запускать скрипты только из командной строки. Если же нам нужны оба варианта, на одном сервере, то и устанавливаем их оба по очереди в любом порядке.

Расширения PHP можно устанавливать после основной установки как для первого варианта, так и для второго:
Код
apt install php7.0-mbstring php7.0-mcrypt php7.0-curl php-memcache
indеx
Настройка сервера без сайтов

Когда нагрузка на сервере начинает доходить до максимума, то конечно, в первую очередь нужно заняться всевозможной оптимизацией. Оптимизацией структуры базы данных, оптимизацией запросов к базе данных, оптимизацией скриптов PHP, и так далее. Но когда уже не знаешь, что ещё можно оптимизировать, а нагрузка всё равно приближается к максимальной, нужно брать второй сервер и переносить на него часть нагрузки.

У меня так получилось, что примерно половину нагрузки создавали скрипты PHP, запускающиеся из командной строки. Именно их нужно было перенести на второй сервер, а на первом сервере оставить всё остальное. То есть, на втором сервере не будет ни сайтов, ни баз данных, только голый PHP, который будет брать данные из Интернета, обрабатывать их и помещать в базу данных на первый сервер. Эдакий вспомогательный сервер, подносящий патроны основному боевому серверу. Соответственно, этот вспомогательный сервер нужно настроить. В принципе, его можно настроить точно так же, как я настраивал основной сервер на всех этих 6 страницах темы. Но некоторые программы не понадобятся на втором сервере совсем, поэтому устанавливать и настраивать их я не буду. Кроме того, я не буду и растягивать описание настроек на ещё 6 страниц, а опишу их как краткую инструкцию, что нужно сделать для настройки.

» Кликните сюда для просмотра оффтоп текста.. «
Лиса)
indеx а я очень хочу стать верстальщиком, сейчас смотрю ролики на ютюбе, но как-то результатов маловато. Может можете посоветовать толковые курсы по изучению верстки?
Фарит
Цитата(Лиса) @ 8.06.2018 - 16:51) *
indеx а я очень хочу стать верстальщиком, сейчас смотрю ролики на ютюбе, но как-то результатов маловато. Может можете посоветовать толковые курсы по изучению верстки?

А что курсы indexa тебя не устраивают? Помоему это готовые курсы для желающих учится и познавать.
indеx
Цитата(Лиса) @ 8.06.2018 - 16:51) *
indеx а я очень хочу стать верстальщиком, сейчас смотрю ролики на ютюбе, но как-то результатов маловато. Может можете посоветовать толковые курсы по изучению верстки?
Если коротко ответить, то нет, не могу ag.gif Потому что сам никогда не смотрел курсы. Хорошо это или плохо, я не знаю, просто мне так было удобнее — я брал и просто начинал делать сначала просто странички на HTML, потом постепенно добавлял туда CSS, потом постепенно добавлял PHP-обработку, и вот скоро начну учиться добавлять JS. Откуда я брал информацию о том, что именно нужно писать? Из сайтов-справочников в Интернете. Вот, например...

Справочник по HTML+CSS: https://webref.ru/
Справочник по PHP: http://php.net/manual/ru/

Но просто брать справочники и начинать их читать — безсмысленное занятие, потому что в голове от этого получится каша.
Вместо этого я бы посоветовал самому себе ставить конкретные задачи. Например: 1) "Сверстать страничку резюме с фотографией", 2) сверстать страничку с таблицей, и так далее.

Вопрос: "Что изучать сначала, а что потом?".
У меня ответ однозначный — нужно изучать языки в следующем порядке:
1) HTML,
2) CSS,
3) PHP,
4) JavaScript.
То есть, сначала взять язык HTML и научиться верстать странички только на нём. Потом добавить CSS и научиться верстать на HTML+CSS. Ну, и так далее.

А чтобы было нескучно, можете создать в этом разделе форума свою тему и вести её как дневник. Обещаю — буду подсказывать ab.gif
indеx
Чтобы сразу увидеть результат и порадоваться первому успеху ag.gif , можно сделать следующее:

1) создать текстовый файл с названием "index.html".
2) открыть его в любом текстовом редакторе, например, в Блокноте, и написать там следующий текст:
Код
<!DOCTYPE html>
<html>
<head>
    <title>Моя первая страничка</title>
</head>
<body>
    <h1>Всем привет, я Лиса)</h1>
</body>
</html>

3) Сохранить изменения в файле.
4) Запустить этот файл "index.html", он должен открыться в Вашем браузере и показать Вашу первую страничку.

А затем в эту страничку уже можно добавлять и другие элементы.
indеx
Бывают случаи, когда сайт выдаёт сообщение:
Цитата
MYSQL connection failed: Too many connections
Это означает дословно:
Цитата
Подключение к MYSQL не удалось. Слишком много подключений

Возникает такая ситуация обычно, когда у Вас на сайте увеличивается количество пользователей. Как решить эту проблему?
Дело в том, что изначально в MySQL задано ограничение на максимальное количество подключение к серверу. Чтобы узнать, какое значение установлено в качестве ограничения, нужно выполнить следующий SQL-запрос:
Код
SHOW VARIABLES WHERE `variable_name`='max_connections';

Сервер выдаст Вам текущее значение, например, 151. Но если Вы знаете, что Ваш сервер мощный и выдержит больше подключений, то это значение можно увеличить. Для этого необходимо:

1) в папке /etc/mysql/conf.d создать файл max_connections.cnf
2) в созданном файле написать следующий текст:
Код
[mysqld]
  max_connections = 500

3) сохранить изменения в файле
4) в папке /etc/systemd/system создать папку mysql.service.d
5) внутри созданной папки создать файл limits.conf
6) в созданном файле написать следующий текст:
Код
[Service]
  LimitNOFILE = 65535

7) сохранить изменения в файле
8) в системной командной строке выполнить две команды:
Код
systemctl daemon-reload

Код
systemctl restart mysqld

После этого необходимо убедиться, что новое значение вступило в силу. То есть, снова выполнить тот же самый SQL-запрос. Если всё прошло нормально, то сервер выдаст значение 500. Если же новое значение 500 Вас не устраивает, и Вы хотите увеличить его, например, до 1000, то выполните заново пункты 2 и 3 со значением 1000 вместо 500. Все 8 пунктов заново выполнять не нужно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2026 IPS, Inc.