ITСooky

IT-рецепты съедобные и не очень!

Запускаем новый WordPress сайт на VPS с nginx, MySQL, Letsencypt!

дата 10.09.2020

Для начала надо купить домен(имя.ру — имя домен второго уровня в зоне ру) у любого Регистратора Доменов, не посредника, а воспользовавшись услугами которого вы будут администратором домена! Раньше во времена диких доменных сквотэров, лучшие имяна уже были разобраны и за них вымагались деньги. Но эти темные времена закончились теперь тем же самым официально занимаются регистраторы доменов — все лучшие имяна уже захвачены, и при попытке их купить говорят что это или вип домен или аукционный — что значит его продадут только когда заплатишь кучу денег, а так у всех доменных имен второго уровня стабильная цена покупки и продления, в разных зонах разная.

Так же надо купить VPS, именно сервер на Linux где вы тоже будете сами системным администратором! Как настраивается VPS с нуля я уже писал тут Переезд сайта на WordPress, с форумом phpBB на новый хостинг RUVDS со всеми плюшками letsencrypt, http2!. В это статье я предполагаю что VPS уже настроен(nginx(c http2), php-fpm, MySQL, Let’s Encrypt), надо только добавить новый сайт в него!

Настраиваем доменное имя
И так домен купил у Регистратора. От всех дополнительных предложений отказались — паркинг, SSL сертификаты, защита от сглаза и порчи домена. Единственное надо согласиться на DNS от регистратора домена — и в нем отредактировать MX записи. Делается это через личный кабинет администратора домена на сайте регистратора домена.

Добавляем A записи в которых указываем IP вашего VPS сервера и свой домен — у меня artmundo.ru

artmundo.ru.	A				195.133.197.61

Это запись значит что если у DNS спросят дай artmundo.ru он его пошлет на IP нашего VPS.
А вот если спросят да www.artmundo.ru — никуда не пошлет, для его надо добавить

www.artmundo.ru.	A				195.133.197.61

Может пройти 24 часа пока все DNS серверы воспримут эту информацию! А может и за час!

Первичная настройка сайта в nginx
Заходим на свой VPS по SSH

В папку где у меня конфиги nginx делаю такой файл
vi /etc/nginx/conf/conf.d/newsite.conf
с текстом

server {
    listen       80;
    server_name artmundo.ru www.artmundo.ru;
    location / {
        root   /usr/local/www/artmundo.ru;
        index  index.php index.html index.htm;
    }
 
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/local/www/artmundo.ru;
    }
 
 
    location ~ \.php$ {
        root           /usr/local/www/artmundo.ru;
        fastcgi_pass   unix:/var/run/php.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
 
    location ~ /\.ht {
        deny  all;
    }
}

В этой строке прописываем на какие имяна будет откликаться сайт

server_name artmundo.ru www.artmundo.ru;

И везде прописан путь к папке с его файлами

Создаем папку
mkdir /usr/local/www/artmundo.ru
кладем туда файл из примеров nginx — index.html

Перегружаем nginx
service nginx restart
хотя можно было бы и просто перечитать конфиг, но когда рестар лучше ошибки показываются
service nginx reload

Идем в Chrome и пытаемся открыть наш сайт. Можно пытаться в FireFox но у него дикое кэширование, кэширует даже ошибки CTRL-F не помогает — так что он не для тестов.

Если все ок видим

Все хорошо, но веббраузер пометил сайт как «Not secure» — всех без IT бэкграунда это настораживает, а тех у кого он есть так просто пугает!

Установка SSL сертификаты Let’s Encrypt и https
Полезная штука, все IT гиганты уже начали дискриминировать вебсайты за её отсутствие, а вот в качестве бесплатного стандартного сервиса никто из великих его не предложил. Больше спасибо что есть Let’s Encrypt

Все нужное для Let’s Encrypt уже установлено так что запускаю

В команду можно давить почту, чтобы на неё приходили предупреждения что пора обновить сертификат
--email meganus@itcooky.com
я делаю без этого

/usr/local/src/certbot-auto certonly --webroot --agree-tos -w /usr/local/www/artmundo.ru -d www.artmundo.ru -d artmundo.ru
В команде указаны два адреса, эт важно
artmundo.ru www.artmundo.ru

Получаем в ответ

 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/artmundo.ru/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/artmundo.ru/privkey.pem
   Your cert will expire on 2020-12-06. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Все ок, я даже им донатнул когда деньги были!

Теперь надо сдлеать новые кофиги для nginx. SSL сертификаты нам обеспечивают доступ к сайт по обезопасенному протоколу https

Первый конфиг, кидает всех кто пришел по http на https, так же он кидает все кто обратился на сайт без www на www
В папку где у меня конфиги nginx делаю такой файл
vi /etc/nginx/conf/conf.d/newsite.conf
с текстом

server {
    listen 80;
    server_name artmundo.ru www.artmundo.ru;
    return 301 https://www.artmundo.ru$request_uri;
access_log  off;
}

Второй конфиг уже дает https на 443 порту на который теперь все перенаправляется
В папку где у меня конфиги nginx делаю такой файл
vi /etc/nginx/conf/conf.d/newsitehttps.conf
с текстом

server {
listen       443 ssl http2;
    server_name www.artmundo.ru artmundo.ru;
    ssl_certificate /etc/letsencrypt/live/artmundo.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/artmundo.ru/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/artmundo.ru/chain.pem;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8;
    add_header Strict-Transport-Security "max-age=31536000";
    add_header Content-Security-Policy "img-src https: data:; upgrade-insecure-requests";

 
access_log  off;

root   /usr/local/www/artmundo.ru;


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

error_page 404 /404.html;
error_page 500 /500.html;
error_page 502 /502.html;
error_page 503 /503.html;
error_page 504 /504.html;  

location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php.sock; 
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
        include        fastcgi_params;
}

location ~ .(gif|png|jpeg|jpg|svg)$ {
     valid_referers none blocked ~.google. ~.bing. ~.yahoo. ~.yandex. artmundo.ru *.artmundo.ru;
     if ($invalid_referer) {
        return   403;
    }
}

location ~ /\.ht {
        deny  all;
    }
}

Перечитываем конфиг nginx и смотрим
service nginx reload

Результат есть, ничего на сайте мы не делали, сайт лучше не стал — но Chrome нам уже доверяет, и все остальные браузеры тоже!

Сертификаты Let’s Encrypt выдаются на 90 дней, обновляются за 30 дней до окончания! Этот процесс надо автоматизировать, будем пару раз в месяц запрашивать обновление

в планировщик добавляем
crontab -e
строку

37 18 4,13,22 * * /usr/local/src/certbot-auto renew -q&&/usr/sbin/service nginx reload

Полезные настройки конфига nginx
Здесь можно указать какую страницу будет показывать nginx при разных ошибках. Можно создать свои красивые страницы с ошибками!

error_page 404 /404.html;

Это не позволяет делать hotlink на картинки на нашем сайте. Полезно, чтобы снизить нагрузку.
Тут надо перечислить какие сайты могут ссылаться — например google чтобо поиск по картинкам работал, ну и свой сайт тоже надо указать, а то сам себе не даст!

location ~ .(gif|png|jpeg|jpg|svg)$ {
     valid_referers none blocked ~.google. ~.bing. ~.yahoo. ~.yandex. artmundo.ru *.artmundo.ru;
     if ($invalid_referer) {
        return   403;
    }
}

Запрещает по внешним запросам выдавать файлы начинающие с .ht например htaccess, htpassword — пожалуй устарело но полезно

location ~ /\.ht {
        deny  all;
    }

Некоторые php скрипты нуждаются в перенаправленние URL — это становится понятно когда выдается ошибка 404 а ссылка вродебы нормальная.
Это можно исправив конкретно указвав кому куда

location /phpbb/app.php {
                try_files $uri $uri/ /phpbb/app.php?$query_string;
        }

Устанавливаем WordPress
Качаем WordPress
wget https://wordpress.org/latest.tar.gz
разархивируем
tar -xvf latest.tar.gz
и кладем все что в папке wordpress сюда /usr/local/www/artmundo.ru

Меняем права на папках и файлах
chmod -R 755 /usr/local/www/artmundo.ru/wp-content
chown -R nginx:nginx /usr/local/www/artmundo.ru/

Идем в майскл
mysql -u root -p
Делаем юзера, базу, задаем пароль — у меня иямна все wpartmun
CREATE DATABASE wpartmun;
CREATE USER 'wpartmun'@'localhost' IDENTIFIED BY 'QWErty123!';
GRANT ALL PRIVILEGES ON wpartmun.* TO 'wpartmun'@'localhost';
ALTER USER 'wpartmun'@'localhost' IDENTIFIED WITH mysql_native_password BY 'QWErty123!@#';
exit

Теперь идем на сайт

При заходе появляется установчное окно и там надо ввести имя базы, пользовтеля, пароль. Он выдасть файл с настройками, сам записать не сможет надо создать файл
vi /usr/local/www/artmundo.ru/wp-config.pfp
с текстом этого конфига, ну и далее имя пароль админа как положено

Заходить в админ панель надо по адресу
www.artmundo.ru/wp-admin/

Полезные плагины для WordPress
Classic Editor
В пятом WP инновационный шикарный редактор постов. Если вы к нему так и не привыкли, а к нему невозможно привыкнуть, можно этим плагином вернуть все как было раньше!

Site Kit от Google
Официальный плагин от Google чтобы смотреть всю Google статистику на своем сайте, и больше никуда не лазить!

reCaptcha by BestWebSoft
Защита от спамеров — вродебы работает, 99% спом комментов не проходят с ним!

Auto Post Thumbnail
Автоматически брать картинку поста из первой картинки, если она вручную не установлена

Yet Another Related Posts Plugin (YARPP)
Добавлять к посту спсиок похожих постов, более мнеее релеватно работает — лучше других

С WordPress идут три темы, новые можно найти тут же не выходят из личного кабинета, как и плагины

Ну все теперь автор может свой сайт наполнять содержанием!


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *