Итак, предположим что у вас уже установлена чистая CentOS 7 (минимальная конфигурация). У меня 64-битная, все дальнейшие инструкции будут вестись с учетом того, что и у вас такая же.
Добавление жизненно-необходимых системе репозиториев
Для начала выполним следующие команды:
# обновляемся yum -y update # устанавливаем редактор nano (терпеть не могу vim) yum -y install nano # смотрим наш список репозиториев yum repolist # устанавливаем репозиторий RPMForge yum -Uhv http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm # устанавливаем репозиторий remi yum -Uhv http://rpms.famillecollet.com/enterprise/remi-release-7.rpm # устанавливаем репозиторий nginx yum -Uhv http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
Репозиторий REMI устанавливается отключенным. Для его подключения в файле /etc/yum.repos.d/remi.repo необходимо поменять значение переменной enabled в секции [remi] c 0 на 1.
На этом подключение дополнительных репозиториев в CentOS 7 можно считать завершенным.
Однако, дополнительно рекомендуется установить и настроить плагин yum: yum-priorities. Применение данного плагина обусловлено тем, что в подключенных дополнительных репозиториях могут содержаться пакеты обновляющие такие из официальных репозиториев, что часто может вызвать проблемы, к примеру несовместимость версии php и вашей CMS. Плагин yum-priorities применяется для упорядочивания приоритетов репозиториев. Пакеты из репозиторя с более низким приоритетом не будут обновлять пакеты, установленные из репозиториев, имеющих более высокий приоритет. Также приоритеты используются и при установке новых пакетов – в том случае, если пакет находится в двух или более репозиториях, он будет установлен из того репозитория, который имеет наивысший приоритет.
yum install -y yum-priorities
После установки плагина добавляем строку priority=10 в первую секцию каждого репо-файла:
/etc/yum.repos.d/rpmforge.repo /etc/yum.repos.d/remi.repo /etc/yum.repos.d/nginx.repo
Запускаем еще раз обновление
yum -y update
Немного защитим свой сервер
Меняем стандартный порт SSH на нестандартный.
Для этого откроем файл /etc/ssh/sshd_config и поменяем значение параметра Port 22 на какой вам угодно. В моей конфигурации системы эта строка была закоментирована, если хотим менять значение этого параметра – соответственно мы должны раскоментировать ее.
Устанавливаем фаерволл
yum -y update yum -y install firewalld
Запускаем фаерволл и добавляем в автозагрузку
systemctl start firewalld systemctl enable firewalld
Будьте осторожны, фаерволл сразу же будет работать после перезагрузки системы, поэтому не перезагружайте сервер если не уверены что все необходимые порты открыты для управления вашим сервером, например порт SSH, как мы помним, мы его меняли, поэтому не удивляйтесь в случае чего :).
Открываем необходимые порты для доступа из вне
# порт 80 - http сервер firewall-cmd --permanent --add-port=80/tcp # порт 1234 - наш порт SSH (в вашем случае это может быть какой угодно порт) firewall-cmd --permanent --add-port=1234/tcp # можем добавить также порт 443, в этом случае запросы по https будут проходить на ваш сервер firewall-cmd --permanent --add-port=443/tcp
Установка и настройка NGINX
Выполним несколько команд:
# установка самого nginx, так как мы уже добавили нужный репозиторий, то нам тут не надо много действий yum -y install nginx # запускаем сервис nginx systemctl start nginx # добавляем в автозагрузку systemctl enable nginx # для того чтобы проверить текущую конфигурацию nginx на синтаксические ошибки - выполним (и на будущее тоже) nginx -t
Если все ОК – идем дальше, если нет – читайте мануал, настраивайте.
Итак, конфигурация сервера и хостов по умолчанию находится по адресу /etc/nginx/nginx.conf, именно этот файл загружается в память первым, а далее – все то, что в нем прописано. Откроем этот файл и посмотрим откуда виртуальные хосты грузятся: отсюда – /etc/nginx/conf.d/*.conf, то есть, все файлы в этой директории с расширением conf загрузятся. Мы к этому еще вернемся, а пока…
Создадим первый хост
mkdir /www # в этой директории мы будем хранить все файлы наших хостов, # будьто это один хост, или несколько...сотен... cd /www # параметр -p - создаст все папки и подпапки укзанные в пути, # следующей командой мы создаем 3 папки: test.com, а в ней logs и public mkdir -p test.com/logs test.com/public # с установкой nginx у нас должен был создаться новый пользователь с именем nginx, # ему и назначаем все права в этой директории и на все подпапки, # заметьте точку в конце команды, она означает текущую папку chown -R nginx:nginx .
Всё необходимое для хранения файлов у нас готово, теперь приступим к конфигурации nginx
# заходим в папку с виртуальными хостами nginx cd /etc/nginx/conf.d/ # создаем новый файл для нашего хоста test.com nano test.com.conf
В этом файле прописываем следующую конфигурцию:
server { listen 80; # точка в начале означает, что данная конфигурация хоста будет # также актуальна и для всех алиасов/субдоменов test.com server_name .test.com; root /www/test.com/public; # Include phpmyadmin include /etc/nginx/phpmyadmin.conf; # Logs access_log /www/test.com/logs/access.log main; error_log /www/test.com/logs/error.log; # Default location settings, должен сказать что данный конфиг # был разработан для сайтов на wordpress location / { index index.html index.htm index.php; try_files $uri $uri/ /index.php?$args; rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last; rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last; } # Redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } #error_page 404 /404.html; # Pass the PHP scripts to FastCGI server (locally with unix: param to avoid network overhead) location ~ \.php$ { # Prevent Zero-day exploit try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; #NOTE: You should have cgi.fix_pathinfo = 0; in php.ini fastcgi_pass unix:/www/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } # Deny access to .htaccess files, if Apache's document root location ~ /\.ht { deny all; } # Exclude favicon from the logs to avoid bloating when it's not available location /favicon.ico { log_not_found off; access_log off; } }
Как вы заметили, есть строки в этом конфиге, которые надо пока закоментировать, пока мы не настроили PHP-FPM. Коментировать можно с помощью символа # в начале каждой строки, которую хотите закоментировать.
Кстати, в директории /etc/nginx/conf.d также есть файл под названием default.conf, а также example_ssl.conf, проверьте нет ли в этих файлов ничего такого, что может помешать нам в будущем. У меня в example_ssl.conf все строки закоментированы, а default.conf выглядит так:
server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
То есть, минимум настроек и ничего лишнего. Всё остальное вы с легкостью сможете добавить сюда позже, обязательно проверив каждое изменение командой nginx -t, и применив настройки командой nginx -s reload без перезагрузки сервера nginx.
На данном этапе, если в директории /www/test.com/public будет лежать файл index.html с каким либо содержимым – он должен быть отображен в вашем браузере.
Установка Mariadb
Пожалуй самый легкий пункт в данной статье:
yum -y update # установка mariadb yum -y install mariadb-server mariadb # запускаем сервис и добавляем в автозагрузку systemctl start mariadb systemctl enable mariadb # запускаем скрипт настройки для Mariadb mysql_secure_installation
Следуем инструкциям (обычно выбирая предложенный вариант), помним, что у нас пока еще нет никакого пароля для root пользователя, поэтому на запрос ввода пароля для root – просто жмемь ENTER.
Установка PHP-FPM
Оговорю сразу, что настравивать php-fpm мы будем через unix сокеты (unix://socket). Есть мнение что именно через сокеты php-fpm будет работать быстрее, чем через tcp/ip протокол (по умолчанию на 9000 порту). Сам я тесты не проводил, поэтому поверим на слово “бывалых”.
yum -y update # установка php-fpm yum -y install php-fpm
Настройка PHP-FPM
Первым делом надо открыть файл /etc/php-fpm.d/www.conf и поправить в нем несколько строк:
nano /etc/php-fpm.d/www.conf
Ищем строку listen… заменяем ее на:
listen = /www/php-fpm.sock
Раскоментируем строки listen. и укажем имя пользователя, с помощью и правами которого будет создан файл сокета, при первом обращении к нему:
listen.owner = nginx listen.group = nginx listen.mode = 0660
Аналогично устанавливаем пользователя в строках:
user = nginx group = nginx
А также укажем путь к директории, где PHP-FPM будет хранить файлы сессии (на самом деле, данными командами мы просто перекрываем конфигурации из файла /etc/php.ini):
php_value[session.save_handler] = files php_value[session.save_path] = /www/php-fpm-session
Для того, чтобы вышеописанные настройки работали правильно, создадим файл соккета (по идее, он должен создасться сам при первом дергании php-fpm, но мы все же создадим его на всякий случай):
touch /www/php-fpm.sock # назначим правильные права chown nginx:nginx /www/php-fpm.sock chmod 600 /www/php-fpm.sock
Далее создадим директорию для PHP сессий и назначим ей правильные права:
mkdir /www/php-fpm-session chown -R nginx:nginx /www/php-fpm-session chmod -R 777 /www/php-fpm-session
Правим /etc/php.ini как вам угодно, но обязательно меняем значение 1 на 0 в строке:
cgi.fix_pathinfo = 0;
В своем php.ini я также установил временную зону:
date.timezone = Europe/Kiev
Пробуем запустить PHP-FPM и добавим в автозагрузку:
systemctl start php-fpm systemctl enable php-fpm
P.S. для того чтобы перезапустить севрис PHP-FPM выполните команду:
systemctl restart php-fpm
Если все прошло успешно – радуемся, если нет – ищем ответы в гугле, или пишем комментарии сюда :), чем смогу тем помогу.
Для того, чтобы проверить, что у нас PHP работает как надо, раскоментируем (или добавим, если их там нет) строки в файле /etc/nginx/conf.d/test.com:
# cекция "location / {" # Default location settings location / { index index.html index.htm index.php; try_files $uri $uri/ /index.php?$args; rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last; rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last; } # секция location ~ \.php$ { location ~ \.php$ { # Prevent Zero-day exploit try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini fastcgi_pass unix:/www/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; }
и скормим последние изменения в nginx без перезапуска самого nginx:
nginx -s reload
А также создадим файл /www/test.com/public/index.php с таким вот содержимым:
<?php phpinfo(); ?>
Заходим из браузера по адресу test.com. Понятно, что доменное имя может быть каким угодно, каким вы его настроили, а если же у вас нет никакого доменного имени, то вы можете просто прописать DNS алиасы в своем hosts файле. Как настроить hosts в своей системе – ищите в гугле, или комментарий ниже.
Установка и настройка PhpMyAdmin
Выполним несколько воманд:
yum -y update yum -y install phpmyadmin
Далее создаем include файл для nginx (на самом деле хост файл) с конфигурациями phpmyadmin – /etc/nginx/phpmyadmin.conf
location /phpmyadmin/ { alias /usr/share/phpMyAdmin/; index index.php; } location ~ ^/phpmyadmin/(.+\.php)$ { alias /usr/share/phpMyAdmin/$1; fastcgi_pass unix:/www/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; # From fastcgi_params fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT /usr/share/phpMyAdmin; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param REDIRECT_STATUS 200; }
Я бы также рекомендовал переименовать location /phpmyadmin/ например в location /pma/ или что угодно другое.
Далее мы должны раскоментировать строки в основном хост файле nginx (/etc/nginx/conf.d/test.com.conf):
# Include phpmyadmin include /etc/nginx/phpmyadmin.conf;
Сохраняем и релоадим nginx…
nginx -s reload
Если все прошло успешно – пробуем зайти в phpmyadmin по настроенному пути – http://test.com/phpmyadmin/
И последний шаг (в нашей статье, но далеко не в реальных условиях конфигурации production сервера) – добавление пользователя admin в систему для того, чтобы можно было править файлы сайта (хостов) по SFTP (не путать с FTPS, это разные протоколы, более подробно – в гугле)
Пользователи…
Введение
При создании сервера на Linux, добавление и удаление пользователей – одна из первых задач, с которой вам придется столкнуться. При первом запуске вы получаете только пользователя под именем root
. Конечно он открывает вам полный доступ к системе, но использование такого пользователя всегда – не самая разумная идея, так как этот пользователь намного больше подвержен к атакам по безопасности, чем любой другой пользователь. Причиной тому является тот факт, что в таком случае все команды исполняются с правами администратора.
Хорошей практикой считается создание пользователя с ограниченным набором прав. Для каждого нового пользователя лучше создавать дополнительный аккаунт на вашем сервере, таким образом вы сможете легко отслеживать действия каждого пользователя. Тем не менее каждому пользователю вы можете открыть права администратора, которые будут доступны для него через команду sudo
.
Добавление пользователей
Если вы находитесь в системе под пользователем root
, то создать нового пользователя можно следующей командой:
adduser username
Если же вы авторизованны как другой пользователь, имеющий sudo
права, то тогда используйте следующую команду:
sudo adduser username
Теперь следует назначить пользователю пароль:
passwd username
Вы должны будете дважды ввести пароль. Новый пользователь создан и готов к использованию. Вы можете теперь войти под новым пользователем при помощи только что созданного пароля.
Добавление sudo прав пользователю
Если вашему пользователю необходимо выполнять команды с администраторскими правами, то ему необходимо открыть доступ к команде sudo
.
Можно добавить пользователя в группу wheel
(каждый её член автоматически получает доступ к sudo
) при помощи команды
gpasswd
. Такой подход является самым безопасным и простым для управления доступа к sudo
.
Наберите следующую команду если находитесь под пользователем root
:
gpasswd -a username wheel
Если вы под другим пользователем, то выполните следующее:
sudo gpasswd -a username wheel
Теперь новому пользователю открыт доступ к sudo
и он может выполнять команды от роли администратора. Для этого просто добавьте
sudo
перед командой:
sudo some_command
Вам потребуется ввести пароль к вашему обычному аккаунту. Команда будет выполнена с правами администратора как только пароль будет введен.
Управление пользователями с правами sudo
Команда gpasswd
позволяет вам добавлять и удалять пользователей из групп (например wheel
), но она не покажет вам членов определенной группы. Чтобы получить список пользователей, принадлежащих к группе wheel
(то есть увидеть пользователей с правами sudo
), вам понадобится команда lid
. По-умолчанию, эта команда выводит список групп, к которым принадлежит пользователь, но при помощи ключа -g
вы можете увидеть список членов какой-либо группы.
sudo lid -g wheel
Вы получите имена пользователей и соответствующие UID
пользователей группы wheel
. Таким образом вы легко сможете проверить были ли предыдущие команды выполнены успешно и получил лм ваш новый пользователь необходимые права.
Удаление пользователей
Если у вас есть ненужные пользователи, то их аккаунты следует удалить. Вы можете это сделать несколькими способами, выбор которого, конечно, зависит от текущей ситуации на вашем сервере.
Если вы хотите удалить пользователя, оставив нетронутыми его файлы, выполните следующую команду под пользователем root
:
userdel username
Если вам необходимо удалить и пользователя, и созданные им файлы в его домашней директории, то воспользуйтесь следующей командой:
userdel -r username
Обе команды автоматически удаляют пользователя из всех групп, к которым он принадлежал, включая группу wheel
. Если в дальнейшем вы создадите одноименного пользователя, то его снова придется добавить вгруппу wheel
, чтобы тот получил sudo
права.
Заключение
Таким образом, мы установили всё необходимое для нашего веб-сервера, удачи!
1 comment for “Установка и настройка nginx + php-fpm + MariaDB + phpmyadmin на CentOS 7”