Предупреждение: эта статья не является инструкцией к действиям, является лишь дневником моей последней настройки сервера и может уничтожить ваш сервер и карьеру. Стоит учесть, что при каждой настройке возникают какие-то неожиданные проблемы даже если следовать одной и той же инструкции. Это необъяснимо, но факт. Просьба не писать, что у вас что-то не получается, но если есть чем дополнить, то добро пожаловать в комментарии в конце страницы.
Подготовка
Имеем сервер с Centos 6.9 и root-доступ.
Если временная зона установлена неверно, сразу устанавливаем МСК:
rm /etc/localtime
ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Создаем пользователя "для чтения", под которым будет работать nginx:
useradd -m webmaster -s /bin/bash
passwd webmaster
Создаем пользователя сайта и добавляем в его группу пользователя "для чтения":
useradd -s /bin/bash siteuser
passwd siteuser
usermod -a -G siteuser webmaster
chmod 750 /home/siteuser
Таким образом с учетом прав 750 webmaster сможет читать файлы всех сайтов, но siteuser сможет читать и писать только свои файлы.
Отключаем SELinux, открываем /etc/selinux/config и устанавливаем:
SELINUX=disabled
Перезапускаем систему
reboot
В iptables открываем порты 80 и 443:
iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 5 -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
service iptables save
service iptables restart
Устанавливаем пакеты, которые могут понадобиться в будущем:
yum install gcc gcc-c++ make nano zip unzip wget mc bzip2 curl nginx memcached yum-utils yum-plugin-replace
MySQL
Устанавливаем MySQL:
yum install http://repo.webtatic.com/yum/el6/x86_64/webtatic-release-6-9.noarch.rpm
yum replace mysql-libs --replace-with mysql55w-libs
yum install mysql55w-server
В /etc/my.cnf добавляем/заменяем:
[mysqld]
max_allowed_packet = 192M
key_buffer = 32M
query_cache_size = 64M
query_cache_limit = 2M
thread_cache_size = 16
table_open_cache = 512
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_buffer_pool_size = 192M
innodb_additional_mem_pool_size = 16M
transaction-isolation = READ-COMMITTED
[mysqldump]
max_allowed_packet = 192M
PHP
Устанавливаем php 5.6:
yum install http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum-config-manager --enable remi-php56
yum install php php-mcrypt php-devel php-gd php-mbstring php-mysql php-pdo php-xml php-pecl-memcache
Настраиваем php, в /etc/php.ini изменяем:
short_open_tag = On
realpath_cache_size = 4096k
max_input_vars = 10000
memory_limit = 512M
post_max_size = 16M
cgi.fix_pathinfo=0
upload_max_filesize = 16M
max_file_uploads = 100
date.timezone = "Europe/Moscow"
mbstring.internal_encoding = UTF-8
mbstring.func_overload = 2
Apache
Устанавливаем nginx и httpd-itk:
yum install nginx httpd-itk
В /etc/httpd/conf.d/php.conf добавляем:
<IfModule itk.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule mod_setenvif.c>
SetEnvIf x-forwarded-proto https HTTPS=on
</IfModule>
В /etc/sysconfig/httpd добавляем:
HTTPD=/usr/sbin/httpd.itk
Изменения в /etc/httpd/conf/httpd.conf:
User webmaster
Group webmaster
ServerName localhost
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
AllowOverride All
Создаём файл /etc/httpd/conf.d/vhosts.conf с конфигом серверов:
Listen 127.0.0.1:8888
<VirtualHost *:8888>
ServerName site.ru
DocumentRoot /home/siteuser/site.ru/
AssignUserId user user
php_value session.save_path "/var/lib/php/session_siteru"
</VirtualHost>
Соответственно папку для сессий нужно создать и дать права на неё группе пользователя сайта:
mkdir /var/lib/php/session_siteru
chown root:siteuser session_siteru
chmod 770 /var/lib/php/session_siteru
NGINX
Настраиваем NGINX. В /etc/nginx/nginx.conf:
user webmaster;
worker_processes 8; # количество потоков процессора или auto
В блоке http добавляем/обновляем:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
gzip on;
gzip_types text/css application/x-javascript;
proxy_buffering off;
client_max_body_size 100m;
client_body_buffer_size 16M;
В /etc/nginx/ создаем папку ssl и кидаем туда сертификат и ключ SSL.
В /etc/nginx/conf.d создаём файл.conf с конфигом сайта:
server {
listen 80;
listen 443 ssl;
server_name site.ru;
root /home/siteuser/site.ru/;
index index.php index.html index.htm;
ssl_certificate ssl/site.crt;
ssl_certificate_key ssl/site.key;
include /etc/nginx/default.d/*.conf;
location / {
try_files $uri $uri/ @apache;
}
location ~ \.php$ {
proxy_pass http://127.0.0.1:8888;
}
location @apache {
proxy_pass http://127.0.0.1:8888;
}
location ~ (/\.ht|/\.git|/bitrix/modules|/bitrix/php_interface) {
deny all;
}
error_page 404 /404.php;
error_page 500 502 503 504 /500.html;
}
Запуск сервисов
Добавляем все сервисы в автозапуск и запускаем:
chkconfig --level 345 nginx on
chkconfig --level 345 httpd on
chkconfig --level 345 mysqld on
service nginx start
service httpd start
service mysqld start
Настройка MySQL и создание БД
Настраиваем MYSQL, для начала устанавливаем пароль root-пользователя:
mysqladmin -u root password 'PASSWORD7'
Создаём базу данных и пользователя БД под сайт:
mysql -u root -p
mysql> create database sitedb;
mysql> grant usage on *.* to dbuser@localhost identified by 'PASSWORD9';
mysql> grant all privileges on sitedb.* to dbuser@localhost;
mysql> flush privileges;
mysql> exit
Полезные команды
Для переноса сайта с другого сервера могут пригодиться следующие команды:
Дамп БД в файл:
mysqldump -u DBUSER -p -f DBNAME > dump.sql
Восстановление БД из файла:
mysql -u DBUSER -p -f DBNAME < dump.sql
Скачивание /path/to/download/ с удаленного сервера через ssh [email protected] в папку /path/to/upload/:
rsync -avz --exclude 'dir/*' --exclude 'dir/' [email protected]:/path/to/download/ /path/to/upload/
Создание и распаковка tar.gz:
tar -cvfz archive.tar.gz dir #создание архива gzip
tar xvfz archive.tar.gz -C /folder/to/unpack/ #распаковка
Копирование файлов с FTP-сервера (на крайний случай):
wget -r --user=FTPUSER --password=FTPPASSWD ftp://ftp-server.ru