Быстрая установка сервера на сборке LEMP (Linux, NGINX, MySQL, PHP) на новом сервере (Debian, Ubuntu) и сайта (WordPress для примера).
- Если сервера ещё нет, переходим к регистрации нового сервера.
- Если сервер уже есть, переходим к установке LEMP (NGINX, MySQL, PHP).
- Когда сервер уже настроен, возвращаемся в начало статьи в раздел Установка сайта.
Установка сайта WordPress
Этот алгоритм проходится каждый раз, как только нам нужно добавить новый сайт на сервер.
Если сервера пока ещё нет, переходим ниже в следующие разделы к регистрации и настройке до конца, а затем возвращаемся сюда.
Для примера, будет использоваться домен
sheensay.ru, его меняем на свой.
-
Копируем файл конфигурации хоста NGINX (допустим, новый сайт
sheensay.ru):cp -R -u -p /etc/nginx/vhosts/example.com /etc/nginx/vhosts/sheensay.ru
-
После копирования нужно изменить файл конфигурации, заменив
example.comнаsheensay.runano /etc/nginx/vhosts/sheensay.ru
-
Создаём каталоги для файлов, логов сайта и задаём нужные права:
mkdir -p /var/www/sheensay.ru/www && mkdir /var/www/sheensay.ru/log && chown -R www-data:www-data /var/www/sheensay.ru
-
Создаём базы данных и пользователя с нужными правами. Логин и база данных для примера
sheensayru, пароль для примера —fJASOTFj4fJASOTFj4.
Открываем консоль mysql:mysql
Затем создаём базу данных и пользователя с нужными правами:
CREATE DATABASE sheensayru CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
CREATE USER 'sheensayru'@'localhost' IDENTIFIED BY 'fJASOTFj4fJASOTFj4';
GRANT ALL PRIVILEGES ON sheensayru.* TO 'sheensayru'@'localhost';
utf8mb4_unicode_520_ciпоявился только с версии MySQL 5.6, поэтому если возникнут проблемы, замените COLLATE наutf8mb4_unicode_ciв конце выход из консоли управления mysql:
exit
Либо Ctrl+C.
-
Переходим в каталог для файлов сайта:
cd /var/www/sheensay.ru/www
Для работы с WordPress используется WP-CLI
Скачиваем ядро WordPress:
wp core download --locale=ru_RU --allow-root
Настраиваем подключение к базе данных:
wp config create --dbname=sheensayru --dbuser=sheensayru --dbpass=fJASOTFj4fJASOTFj4 --dbcharset=utf8mb4 --allow-root
Прописываем верные права на файлы и каталоги:
chown -R www-data:www-data ./
Перезагружаем NGINX:
nginx -s reload
Теперь, нужно связать DNS доменного имени с IP сервера. Проще всего это сделать через CloudFlare либо прописать доменное имя в Windows:
notepad %windir%\system32\drivers\etc\hosts
Затем можно открывать сайт и устанавливать первоначальные настройки и данные для авторизации админа.
Регистрация сервера
Установка NGINX
apt-get install nginx
nginx.confиexample.comобязательны, остальные опциональны (но рекомендуемы к использованию).example.comменяем (копируем, дублируем) под свои сайты.
nginx.conf
Конфигурация nginx.conf сервера.
Файл конфигурации: /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
worker_rlimit_nofile 65535;
# Определяем, куда писать лог ошибок и уровень логирования
error_log /var/log/nginx/error.log warn;
events {
use epoll;
worker_connections 4096;
multi_accept on;
}
http {
# Логи
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format wpmu '$remote_addr [$time_local] $status $host "$request" "$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
# Куда писать лог ошибок и уровень логирования
access_log /var/log/nginx/access.log main;
# Для нормального ответа 304 Not Modified;
if_modified_since before;
# Заголовки. Требует дополнительного модуля HttpHeadersMoreModule
#more_set_headers "Server: Bender";
# Позволяет увидеть реальные IP юзеров за нсами CloudFlare
# https://support.cloudflare.com/hc/en-us/articles/200170706-How-do-I-restore-original-visitor-IP-with-Nginx-
include /etc/nginx/cloudflare.conf;
# Пишем реальные IP в логи
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;
##
# Основные настройки
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Настройки SSL
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Настройки Gzip
##
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
#gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
include /etc/nginx/vhosts/*;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
example.com
Настройки конкретного сайта.
Файл конфигурации: /etc/nginx/vhosts/example/example.com
1 раз нужно создать дефолтный набор каталогов:
mkdir -p /var/www/example.com/www && mkdir /var/www/example.com/log && chown -R www-data:www-data /var/www/example.com
#user 'example.com' virtual host 'example.com' configuration file
server {
server_name example.com www.example.com;
charset UTF-8;
index index.php;
root /var/www/example.com/www;
access_log /var/www/example.com/log/access.log ;
error_log /var/www/example.com/log/error.log notice;
### IP сервера. Меняем на своё значение
listen 80;
# Обработка 404 ошибки. Перенаправляем 301 на главную. Опционально.
error_page 404 = @gotomain;
location @gotomain {
return 301 /;
}
# Ограничение к панели админа. Опционально. Для работы требует файлов ниже
include /etc/nginx/wp-admin-ip.conf;
# Основной конфиг с обработкой статики и настройкой под WP Super Cache
include /etc/nginx/wpsc.conf;
# Обработка PHP
location @php {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
}
wpsc.conf
Файл конфигурации: /etc/nginx/wpsc.conf
# Let's Encrypt
location ~ /\.well-known {
allow all;
}
# Запрещаем доступ к файлам и каталогам с точкой в начале названия, например, .htaccess, .git
location ~ /\. {
deny all;
}
# Запрещаем доступ к файлам с расширением .php в каталогах загрузок, например, /wp-content/uploads
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
# Устанавливаем новую переменную $cache_uri, которой присваиваем запрос из предустановленной переменной $request_uri
set $cache_uri $request_uri;
set $no_cache 0;
# POST запросы не кешируются
if ($request_method = POST) {
set $cache_uri 'null cache';
set $no_cache 1;
}
# Запросы с параметрами в URL не кешируются
if ($query_string != "") {
set $cache_uri 'null cache';
set $no_cache 1;
}
# Не кешировать запросы URL, содержащие следующие части (как правило, админка и служебные, sitemap yoast)
if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
set $cache_uri 'null cache';
set $no_cache 1;
}
# Не использовать кеш для авторизованных пользователей и последних комментаторов
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") {
set $cache_uri 'null cache';
set $no_cache 1;
}
#fastcgi_cache wpcache;
##fastcgi_cache_min_uses 1;
#fastcgi_cache_valid 200 301 302 304 1h;
#fastcgi_cache_key "$request_method|$host|$request_uri";
#fastcgi_cache_use_stale updating;
#fastcgi_cache_bypass $no_cache;
#fastcgi_no_cache $no_cache;
#fastcgi_ignore_headers "Cache-Control" "Expires" "Set-Cookie";
# фавикон не логировать
location = /favicon.ico { log_not_found off; access_log off; }
# robots может генерироваться WP
location = /robots.txt { try_files $uri /index.php; }
set $wpsc /wp-content/cache/supercache/${http_host}${cache_uri}/index.html;
# Если у вас сайт на SSL/TLS, то есть, работает по HTTPS, то вместо index.html у вас будут генерироваться index-https.html
set $wpsc_https /wp-content/cache/supercache/${http_host}${cache_uri}/index-https.html;
if ( $scheme = 'https' ) {
set $wpsc /wp-content/cache/supercache/${http_host}${cache_uri}/index-https.html;
}
# Можно отлавливать переменные в заголовках. Подробнее http://sheensay.ru/nginx
# add_header X-uri "$uri" always;
# add_header X-cache-uri "$cache_uri" always;
# add_header X-$http_host "$http_host" always;
#add_header X-wpsc $wpsc_https always;
### Переходим к работе с кешем ###
# Статичные файлы не логируем, выставляем http заголовок Expires на год
location ~* ^.+\.(jpe?g|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|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)$ {
expires 365d; log_not_found off; access_log off;
}
# Основной запрос, в котором мы пытаемся сначала получить закешированную версию страницы
# Если кеша нет, тогда отправляемся к WordPress, чтобы он его нам создал
location / {
try_files $wpsc_https $wpsc $uri $uri/ /index.php?$args ;
}
wp-admin-ip.conf
Файл конфигурации: /etc/nginx/wp-admin-ip.conf
### https://sheensay.ru/?p=408
################################
location = /wp-admin/admin-ajax.php { # Открываем доступ к admin-ajax.php. Это нужно, чтобы проходили ajax запросы в WordPress
try_files $uri/ @php ;
}
location = /adminer.php { # Закрываем Adminer, если он есть
try_files /does_not_exists @deny ;
}
location = /wp-login.php { # Закрываем /wp-login.php
try_files /does_not_exists @deny ;
}
location ~* /wp-admin/.+\.php$ { # Закрываем каталог /wp-admin/
try_files /does_not_exists @deny ;
}
location @deny { # В этом location мы определяем правила, какие IP пропускать, а какие забанить
allow 1.2.3.4/8 ;# IP или диапазоны разрешённых для входа в админку IP
deny all ; # Закрываем доступ всем, кто не попал в белый список
try_files /does_not_exists @php; # Отправляем на обработку php в бекенд
}
location ~ \.php$ { ### Файлы PHP обрабатываем в location @php
try_files /does_not_exist @php;
}
cloudflare.conf
/etc/nginx/cloudflare.conf
set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; set_real_ip_from 103.31.4.0/22; set_real_ip_from 104.16.0.0/12; set_real_ip_from 108.162.192.0/18; set_real_ip_from 131.0.72.0/22; set_real_ip_from 141.101.64.0/18; set_real_ip_from 162.158.0.0/15; set_real_ip_from 172.64.0.0/13; set_real_ip_from 173.245.48.0/20; set_real_ip_from 188.114.96.0/20; set_real_ip_from 190.93.240.0/20; set_real_ip_from 197.234.240.0/22; set_real_ip_from 198.41.128.0/17; set_real_ip_from 2400:cb00::/32; set_real_ip_from 2606:4700::/32; set_real_ip_from 2803:f800::/32; set_real_ip_from 2405:b500::/32; set_real_ip_from 2405:8100::/32; set_real_ip_from 2c0f:f248::/32; set_real_ip_from 2a06:98c0::/29;
MySQL, MariaDB
Установка сервера MariaDB:
apt-get install mariadb-server
После проверка установки и текущий статус:
systemctl status mariadb
PHP
apt-get install php-fpm php-mysql
Правим конфиг PHP-FPM:
nano /etc/php/7.0/fpm/php.ini
Прописываем cgi.fix_pathinfo=0:
cgi.fix_pathinfo=0
И применяем изменения:
service php7.0-fpm restart


Свежие комментарии