Быстрая установка сервера на сборке 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.ru
nano /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
Свежие комментарии