Сегодня, на базе Debian 11, установим LEMP Stack - это связка Linux, Nginx, MariaDB и PHP
Nginx - бесплатный, open-source web сервер который позволяет использовать HTTP, proxy, caching и load-balancing функционал. Отличная альтернатива Apache2, легок в установке и настройке.
sudo apt update && sudo apt -y upgrade
sudo apt install -y nginx curl wget gnupg2 ca-certificates lsb-release
Запустим сервис Nginx и добавим его в автозагрузку.
sudo systemctl enable --now nginx
Перейдём в веб браузер и наберём в адресной строке:
Должны получить следующее приглашение.
В Debian 11, корневая директория хостов Nginx по умолчанию /usr/share/nginx/html/, а файлы конфигураций - /etc/nginx/.
Установим СУБД MariaDB.
sudo apt install -y mariadb-server mariadb-client
Добавим сервис в автозагрузку и проверим статус.
sudo systemctl enable --now mariadb
Зададим пароль для root СУБД:
sudo mysqladmin -u root password
Дважды вводим пароль
Подготовим базу для WordPress
mysql -u root -p
Воодим пароль
CREATE DATABASE wpdb;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'СложныйПароль';
GRANT ALL PRIVILEGES ON wpdb.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
QUIT;
Установим php с необходимыми расширениями.
sudo apt install -y php php-{fpm,pear,cgi,common,zip,mbstring,net-socket,gd,xml,xml-util,mysql,bcmath,cli,curl}
Теперь создадим виртуальный хост, для проверки нашего вебсервера.
Имя сервера будет wp.home.local, создадим одноименную директорию, будем использовать стандартную директорию для создания сайтов /var/www/html:
sudo mkdir /var/www/html/home
Переназначим права для nginx
sudo chown -R www-data:www-data /var/www/html
Далее создадим конфигурационный файл хоста:
sudo nano /etc/nginx/conf.d/home.conf
Добавим следующее содержимое
server {
listen 80;
root /var/www/html/home;
server_name wp.home.local;
access_log /var/log/nginx/wp_access.log;
error_log /var/log/nginx/wp_error.log;
location / {
index index.php index.html;
try_files $uri $uri/ /index.php?$args;
}
# Specify a charset
charset utf-8;
# GZIP
gzip off;
# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
# Prevents hidden files (beginning with a period) from being served
location ~ /\. {
access_log off;
log_not_found off;
deny all;
}
# SEND EXPIRES HEADERS AND TURN OFF 404 LOGGING
location ~* ^.+.(xml|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
access_log off;
log_not_found off;
expires max;
}
# Pass all .php files onto a php-fpm or php-cgi server
location ~ \.php$ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_read_timeout 3600s;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 128k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_index index.php;
}
# ROBOTS
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# RESTRICTIONS
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
}
Проверим настройки
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Перзагрим Nginx
sudo systemctl restart nginx
Создадим файл в корне сайта:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/home/phpinfo.php
Пришло время проверить работоспособность сайта. Открываем браузер и переходим по ссылке http://wp.home.local/phpinfo.php
Должна отобразиться следующая страница:
Если вы увидели данную страницу, значит сайт работает/
Устанавим Wordpress на наш сайт.
wget https://wordpress.org/latest.tar.gz
tar xvf latest.tar.gz
sudo mv wordpress/* /var/www/html/home
cd /var/www/html/home
sudo cp wp-config-sample.php wp-config.php
Внесём актуальные данные в конфиг
sudo nano wp-config.php
define('DB_NAME', 'wpdb');
define('DB_USER', 'wpuser');
define('DB_PASSWORD', 'СложныйПароль');
переназначим права для Nginx
sudo chown -R www-data:www-data /var/www/html/home
Перейдём в браузер и набираем адрес нашего сайта
Следуем инструкции
Далее нас интересуют пока только первые 11 строк, все остальное появится при установке SSL сертификата с помощью CertBot
server {
server_name home.local;
location /
{
proxy_pass http://10.20.30.40:80; # Здесь должнен быть IP адрес на который будут пробрасываться запросы
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/pavlovesky.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/pavlovesky.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = pavlovesky.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name pavlovesky.com;
return 404; # managed by Certbot
Так же необходимо довить несколько строк в файл wp-config.php
sudo mcedit /var/www/html/home/wp-config.php
Добавляем это:
/** For HTTPS behind the proxy_pass. */
if($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'){
$_SERVER['HTTPS'] = 'on';
$_SERVER['SERVER_PORT'] = 443;
}
Важно, добавляем эти строки сразу после этих:
/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');
Должно получиться, что то вроде: