Настройка VPS для хостинга phpBB, на примере phpBB.info

Настройка и администрирование серверов
Ответить
admin
Администратор
Сообщения: 7
Зарегистрирован: 15 июн 2019, 23:25

Настройка VPS для хостинга phpBB, на примере phpBB.info

Сообщение admin » 16 июн 2019, 16:57

Все нижеперечисленное актуально для CentOS 7.x.

Логинимся root-ом и обновляем пакеты.

Код: Выделить всё

yum update
Подключаем репозиторий epel, так как в стандартном нет nginx.

Код: Выделить всё

yum install epel-release
Настраиваем hostname.

Код: Выделить всё

vi /etc/sysconfig/network
HOSTNAME=phpbb.info
Применяем изменения без перезагрузки.

Код: Выделить всё

hostnamectl set-hostname phpbb.info
Устанавливаем nginx.

Код: Выделить всё

yum install nginx
systemctl start nginx
systemctl enable nginx
Открываем в firewall 80 и 443 порты.

Код: Выделить всё

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
firewall-cmd --list-all
Устанавливаем mariaDB (клон MySQL).

Код: Выделить всё

yum install mariadb mariadb-server
systemctl start mariadb
systemctl enable mariadb
Настраиваем секьюрность.

Код: Выделить всё

mysql_secure_installation
Устанавливаем certbot для получения сертификатов Let's Encrypt.

Код: Выделить всё

yum install certbot
Подключаем репозиторий remi, так как в стандартном очень старый php.

Код: Выделить всё

yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm 
Устанавливаем php.

Код: Выделить всё

yum --enablerepo=remi,remi-php72 install php-fpm php-common php-mbstring php-xmlrpc php-gd php-xml php-mysql php-cli php-zip php-curl
Готовим папки и создаем пользователя для нашего форума.

Код: Выделить всё

mkdir /var/www
mkdir /var/www/phpbb
adduser -m phpbb -d /var/www/phpbb/data
cmod 755 /var/www/phpbb/data
Настраиваем php-fpm.

Код: Выделить всё

vi /etc/php-fpm.d/phpbb.conf
[phpbb]
pm = dynamic
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_children = 5
pm.max_spare_servers = 5
php_admin_value[display_errors] = stderr
php_admin_value[log_errors] = On
listen = /var/www/php-fpm/phpbb.sock
listen.mode = 0660
listen.owner = phpbb
listen.group = nginx
user = phpbb
group = phpbb
chdir = /
php_admin_value[upload_tmp_dir] = /var/www/phpbb/data/mod-tmp
php_admin_value[session.save_path] = /var/www/phpbb/data/mod-tmp
Создаем структуру папок для нашего сайта.

Код: Выделить всё

mkdir /var/www/php-fpm
chown phpbb:nginx /var/www/php-fpm

Код: Выделить всё

mkdir /var/www/phpbb/data/www
chown phpbb:phpbb /var/www/phpbb/data/www

Код: Выделить всё

mkdir /var/www/phpbb/data/logs
chown phpbb:phpbb /var/www/phpbb/data/logs

Код: Выделить всё

mkdir /var/www/phpbb/data/mod-tmp
chown phpbb:phpbb /var/www/phpbb/data/mod-tmp

Код: Выделить всё

mkdir /var/www/phpbb/data/www/phpbb.info
chown phpbb:phpbb /var/www/phpbb/data/www/phpbb.info
Запускаем php-fpm и добавляем в автозагрузку.

Код: Выделить всё

systemctl start php-fpm
systemctl enable php-fpm
Отключаем SELinux

Код: Выделить всё

setenforce 0
vi /etc/selinux/config
set SELINUX=disabled
Настраиваем виртуальные хосты phpbb.info и www.phpbb.info в nginx

Код: Выделить всё

vi /etc/nginx/conf.d/phpbb.info.conf
server {
listen 80;
server_name phpbb.info www.phpbb.info;

root /var/www/phpbb/data/www/phpbb.info;
index index.html index.php;
error_log /var/www/phpbb/data/logs/phpbb.info.error.log;
access_log /var/www/phpbb/data/logs/phpbb.info.access.log;

location / {
try_files $uri $uri/ =404;
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/www/php-fpm/phpbb.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Создаем папку для phpMyAdmin.

Код: Выделить всё

mkdir /var/www/phpbb/data/www/pma.phpbb.info
chown phpbb:phpbb /var/www/phpbb/data/www/pma.phpbb.info
Настраиваем виртуальный хост pma.phpbb.info в nginx
vi /etc/nginx/conf.d/pma.phpbb.info.conf
server {
listen 80;
server_name pma.phpbb.info;

root /var/www/phpbb/data/www/pma.phpbb.info;
index index.html index.php;
error_log /var/www/phpbb/data/logs/pma.phpbb.info.error.log;
access_log /var/www/phpbb/data/logs/pma.phpbb.info.access.log;

location / {
try_files $uri $uri/ =404;
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/www/php-fpm/phpbb.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Перезапускаем nginx.

Код: Выделить всё

systemctl restart nginx
Получаем SSL сертификаты.

Код: Выделить всё

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
certbot certonly --webroot -w /var/www/phpbb/data/www/phpbb.info -d phpbb.info
certbot certonly --webroot -w /var/www/phpbb/data/www/phpbb.info -d www.phpbb.info
certbot certonly --webroot -w /var/www/phpbb/data/www/pma.phpbb.info -d pma.phpbb.info
Удаляем старый и создаем новый конфиг nginx для хостов phpbb.info и www.phpbb.info с поддержкой SSL.

Код: Выделить всё

rm /etc/nginx/conf.d/phpbb.info.conf
vi /etc/nginx/conf.d/phpbb.info.conf
server {
listen 443 ssl;
server_name phpbb.info;

ssl_certificate /etc/letsencrypt/live/phpbb.info/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/phpbb.info/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_dhparam /etc/ssl/certs/dhparam.pem;

root /var/www/phpbb/data/www/phpbb.info;
index index.html index.php;

location / {
# phpBB uses index.htm
index index.php index.html index.htm;
try_files $uri $uri/ @rewriteapp;
}

location @rewriteapp {
rewrite ^(.*)$ /app.php/$1 last;
}

# Deny access to internal phpbb files.
location ~ /(config\.php|common\.php|cache|files|images/avatars/upload|includes|(?<!ext/)phpbb|store|vendor) {
deny all;
# deny was ignored before 0.8.40 for connections over IPv6.
# Use internal directive to prohibit access on older versions.
internal;
}

# Pass the php scripts to fastcgi server specified in upstream declaration.
location ~ \.php(/|$) {
# Unmodified fastcgi_params from nginx distribution.
include fastcgi_params;
# Necessary for php.
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
try_files $uri $uri/ /app.php$is_args$args;
fastcgi_pass unix:/var/www/php-fpm/phpbb.sock;
}

# Correctly pass scripts for installer
location /install/ {
# phpBB uses index.htm
try_files $uri $uri/ @rewrite_installapp;

# Pass the php scripts to fastcgi server specified in upstream declaration.
location ~ \.php(/|$) {
# Unmodified fastcgi_params from nginx distribution.
include fastcgi_params;
# Necessary for php.
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
try_files $uri $uri/ /install/app.php$is_args$args;
fastcgi_pass unix:/var/www/php-fpm/phpbb.sock;
}
}

location @rewrite_installapp {
rewrite ^(.*)$ /install/app.php/$1 last;
}

error_log /var/www/phpbb/data/logs/phpbb.info.error.log;
access_log /var/www/phpbb/data/logs/phpbb.info.access.log;
}

server {
listen 443 ssl;
server_name www.phpbb.info;
ssl_certificate /etc/letsencrypt/live/www.phpbb.info/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.phpbb.info/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
return 301 https://phpbb.info$request_uri;
}

server {
server_name phpbb.info www.phpbb.info;
return 301 https://phpbb.info$request_uri;
}
Удаляем старый и создаем новый конфиг nginx для хоста pma.phpbb.info с поддержкой SSL.

Код: Выделить всё

rm /etc/nginx/conf.d/pma.phpbb.info.conf
vi /etc/nginx/conf.d/pma.phpbb.info.conf
server {
listen 443 ssl;
server_name pma.phpbb.info;

ssl_certificate /etc/letsencrypt/live/pma.phpbb.info/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pma.phpbb.info/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_dhparam /etc/ssl/certs/dhparam.pem;

root /var/www/phpbb/data/www/pma.phpbb.info;
index index.html index.php;

location / {
try_files $uri $uri/ =404;
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/www/php-fpm/phpbb.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
error_log /var/www/phpbb/data/logs/pma.phpbb.info.error.log;
access_log /var/www/phpbb/data/logs/pma.phpbb.info.access.log;
}

server {
server_name pma.phpbb.info;
return 301 https://pma.phpbb.info$request_uri;
}
Перезапускаем nginx

Код: Выделить всё

systemctl restart nginx
Настраиваем автопродление SSL сертификатов.

Код: Выделить всё

crontab -e 
15 4 * * 1 /usr/bin/certbot renew --quiet
18 4 * * 1 /usr/bin/systemctl reload nginx
Перезапускаем cron.

Код: Выделить всё

systemctl restart crond

Ответить