Поднимаем Битрикс на VDS на связке CentOS 7, nginx, php-fpm, MariaDB

23.10.2015

Если лень париться и что-то настраивать, у битриксоидов есть специальный скрипт установки веб-окружения для Linux-систем. Заявлена поддержка Fedora 12-15 (i386, x86_64), CentOS 6 (i386, x86_64), CentOS 7.3, Red Hat Enterprise Linux 5/6 (i386, x86_64). Запускается вот так:

wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh 
# chmod +x bitrix-env.sh 
# ./bitrix-env.sh
Вот тут Волошин пишет про установку новой виртуальной машины версии 7: приключения с переходом от виртуальной машины 4.х и 5.х на новую 7.х.

Если охота немного поработать, то читаем дальше.

Итак у нас есть VDS на каком-нибудь хостинге: Timeweb, Hetzner, Vscale. В общем неважно где.
На VDS хостером предустановлена CentOS 7 (может быть и ниже версия).
У выделенного вам сервера будет иметься IP-адрес, по которому он доступен извне.
Все команды выполняем под рутом, поэтому "sudo" я не пишу.
Перед началом установки софта можно обновить операционку командой:
yum update

Устанавливаем nginx

yum install nginx
systemctl start nginx
systemctl enable nginx
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
Всё, сервер nginx запущен, прописан в автозагрузку и для него в фаерволе открыты порты http и https наружу.
Убедиться что сервер работает можно открыв в браузере адрес: http://IP_адрес_вашего_сервера/
Должны увидеть нечто подобное:

Установка MariaDB

MariaDB - тот же MySQL, только круче :) Подробности тут.

Хотя, ребята из ITSumma рекомендуют ставить Percona.

Ставим MariaDB:
yum -y install mariadb-server mariadb
systemctl start mariadb
systemctl enable mariadb
Затем запускаем скрипт первоначальной установки настроек безопасности:
/usr/bin/mysql_secure_installation
При запуске этого скрипта будет запрошен пароль для root пользователя и будут заданы другие вопросы безопасности на которые нужно отвечать Y или n. После этого запускаем входим в консоль mysql под root-пользователем:
mysql -uroot -p'ВАШ_ROOT_ПАРОЛЬ'
Создаем базу данных для Битрикс-сайта:
CREATE DATABASE `site_db` CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'site_db_user'@'localhost' IDENTIFIED BY 'site_db_password';
GRANT ALL PRIVILEGES ON site_db.* TO 'site_db_user'@'localhost';
Этим мы создали базу данных site_db в кодировке UTF-8 с пользователем site_db_user и паролем site_db_password.
Если планируется использование движка InnoDB, то нужно в файле /etc/my.cnf прописать настройку в секцию [mysqld]:
innodb_flush_log_at_trx_commit=2
Иначе показатели записи и обновления будут ниже плинтуса. После изменения my.cnf сервер mariadb нужно перезапустить.

Ставим PHP и PHP-FPM

Тут все аналогично.
yum -y install php php-fpm php-common
systemctl start  php-fpm
systemctl enable php-fpm
Открываем файл /etc/php-fpm.d/www.conf и вместо
listen = 127.0.0.1:9000
user = apache
group = apache
;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0660
пишем
listen = /var/run/php-fpm/php-fpm.sock
user = nginx
group = nginx

listen.owner = nginx
listen.group = nginx
listen.mode = 0660
И перезапускаем сервис php-fpm
systemctl restart php-fpm

Добавляем хост

Создаём директорию и задаем её владельца
mkdir -p /home/www/newsite.com/www
chown -R nginx:nginx /home/www/newsite.com/www
Создаём файл настроек виртуалхоста /etc/nginx/conf.d/newsite.com.conf:
server {
    server_name .newsite.com;
    access_log /var/log/nginx/newsite.com-access.log;
    error_log /var/log/nginx/newsite.com-error.log;
    root /home/www/newsite.com/www;

    location / {
        index index.html index.htm index.php;
    }

    location ~ .php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  unix:/var/run/php-fpm/php-fpm.sock;;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /home/www/newsite.com/www$fastcgi_script_name;
    }
}
Это упрощенный вариант для теста. Для битрикса рабочий конфиг можно взять тут: https://yadi.sk/d/WHXAS5GRjxg5S. На продакшен-сервере рекомендуется отключать access_log и error_log.
Проверяем конфигурацию nginx
nginx -t
Должно выдаться что-то типа "syntax is ok". Перезапускаем сервис
systemctl restart  nginx
Всё, сервер к приему запросов на домен newsite.com готов. Только теперь нужно сообщить миру, что по имени newsite.com должен открываться именно ваш VDS. Для этого в админке управления доменом вашего регистратора нужно изменить A-запись. Например у GoDaddy это выглядит так:

Вместо 99.99.99.99 указываете IP вашего сервера. После изменения A-записи нужно подождать некоторое время. Иногда обновление DNS занимает несколько часов.
Пока прописывается DNS создаем в корне сайта (/home/www/newsite.com/www) файл index.php c таким содержимым:
< ?php phpinfo(); ? >
После открытия в браузере адреса http://newsite.com/ вы должны увидеть привычную страницу информации о версии PHP и подключенных модулях:

Если вместо этого выводится "403 Forbidden", поздравляю! Вы столкнулись с SELinux. Что это за зверь можно почитать на хабре. Чтобы не было с ним проблем пишем команду:
chcon -Rv --type=httpd_sys_content_t /home/www
Итак, PHP у нас заработал. Далее нужно проверить хостинг на требования Битрикса. Для этого закачиваем в корень скрипт диагностики bitrix_server_test.php и запускаем его из браузера.
Если скрипт ругается на настройки PHP, то их можно подправить в файле /etc/php.ini.
Тут не забываем прописать в настройках php.ini mbstring.func_overload=2 и mbstring.internal_encoding=UTF-8. Иначе Битрикс будет ругаться при установке сайта в кодировке UTF-8.
Там же нужно установить временную зону по-умолчанию. Например: date.timezone = Europe/Moscow.
Настраиваем права на папку для хранения сессий:
chown -R nginx:nginx /var/lib/php/session
chcon -Rv --type=httpd_sys_content_t /var/lib/php/session
Чтобы работала отправка писем из PHP нужно установить sendmail:
yum install sendmail
systemctl start sendmail 
systemctl enable sendmail
Если почта уходит ужасно медленно, то вероятней всего есть проблема с DNS. Для решения смотрим какое имя хоста у нас прописано в /etc/hostname. Открываем /etc/hosts на редактирование и прописываем туда примерно следующее:
127.0.0.1 localhost localhost.localdomain hostname hostname.localdomain localhost.forsendmail hostname.forsendmail
Где hostname - имя вашего хоста из /etc/hostname. Чтобы проверить, что все со скоростью отправки нормально, выполняем команду:
time echo test | sendmail your@mail.ru
Время отправки должно быть не больше секунды.
Для битрикса нужен какой-нибудь акселератор, например XCache. Ставим:
yum -y install php-xcache xcache-admin
systemctl restart php-fpm
Чтобы кэш будущего сайта работал быстро, нужно установить memcache.
Всё, площадка под Битрикс готова. Дальше удаляем все файлы в корне сайта и закачиваем туда bitrixsetup.php. Запускаем этот скрипт из браузера и следуем по шагам мастера установки.

← Вернуться к списку заметок