Итак, скрипт нашел неожиданно положительный отклик у сообщества, видимо, инструкции по тонкой настройке - быть.

Дисклеймер: скрипт полностью рабочий, конфиги - выстраданы годами и проверены сотнями впс и дедиков. Автор сам ежедневно пользуется ими. Но много зависит от вашего хостера, его конфигов и прочих внешних, не зависящих факторов. Пожалуйста, проверяйте работоспособность перед запуском в продакшн!

Информация#

Что делает#

Полностью автоматически настраивает с 0 впс или дедик для работы веб-сервера.

Ставит:

  • Nginx
  • PHP-FPM версий 7.4 и 8.2 (переключается в конфиге)
  • MariaDB

В чем польза#

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

Что за универсальный конфиг?#

Это конфиг веб-сервера, который АВТОМАТИЧЕСКИ определит на какой домен пришел запрос и перенаправит его в нужную директорию. Вам нужно лишь создать папку в /var/www/ с названием домена (например /var/www/google.com), залить туда файлы и оно автоматически заработает! Без каких-либо дополнительных манипуляций и кликов.

Базовое использование#

ВАЖНО! Скрипт 100% корректно работает на Rocky 9, с вероятностью 99,99% корректно сработает на Centos 9. Нежелательно, но допускается использование Rocky 8 или Centos 8.

ТОЛЬКО ЧИСТЫЙ СЕРВЕР! НИКАКИХ LAMPов и прочих сборок. ТОЛЬКО ГОЛАЯ ОС! Требуйте чистую ОС у своего хостера!

curl -s https://repo.privateflare.com/webhostscript/webhostscript.bash | bash

…и через пару минут ваш сервер будет готов. Можете заходить по SFTP с помощью FileZilla, WinSCP, Transmit и заливать свои лендинги, сайты и прочее.

Проверить работоспособность можете привязав любой домен на ип сервера и открыть его. Предварительно создайте информационный файл:

echo "<? phpinfo();" > /var/www/noroot/index.php

Не забудьте его удалить после проверки!

rm -f /var/www/noroot/index.php

Расширенное использование#

Все манипуляции производятся по SFTP с помощью FileZilla (win), WinSCP (win, рекомендуется), Transmit (macOS).

Использование индивидуальных конфигов для доменов#

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

В таком случае, первым делом редактируем основной конфиг Nginx. Он расположен в директории /etc/nginx. И редактируем его:

Было

image

Добавляем строку include conf.d/*.conf;. Стало

image

И перезагружаем конфиг через консоль:

nginx -t && nginx -s reload

Далее, из болванки копируем нужный конфиг. Копируем из host_nossl.conf_ (в данном примере используем конфиг без SSL сертификатов и https) в google.com.conf.

Открываем новый файл google.com.conf и первым делом меняем массовой заменой VHOST на наш домен (google.com). Далее, меняем по своему вкусу. Например, для WordPress он будет выглядеть вот так:

server {
    listen 80;
    server_name google.com; # <-- изменили

    #access_log off;
    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log main;

    root /var/www/google.com; # <-- изменили
    index index.php index.html;

    location ~ /.well-known {
        root /var/www/noroot;
    }

    location / {
        try_files $uri $uri/ /index.php?$args; # <-- изменили
    }

    location ~ \.php$ {
        index index.php;
        include php82.conf; # <-- изменили
    }
}

Сохраняем и перезагружаем конфиги:

nginx -t && nginx -s reload

Уже сейчас ваш блог должен заработать.

Использование SSL (TLS) сертификатов#

Это может быть полезно, если вы хотите использовать хостинг напрямую, без PrivateFlare или Cloudflare.

Генерируем сертификат.

ВАЖНО! LetsEncrypt иногда не с первого раза делает сертификаты в силу тех работ, не полного обновления NS записей или других причин. Мы не имеем отношения к организации и не можем повлиять на работоспособность. В случае неполадок - проверьте A записи и попробуйте позже.

# в этом примере google.com - ваш домен, замените его на свой
# user@gmail.com - ваша почта, так же, замените на свою
certbot certonly -d google.com -n --email user@gmail.com --agree-tos --webroot -w /var/www/noroot

Если сертификат успешно сгенерировался, вы увидите примерно такое сообщение:

Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/api.param.me/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/api.param.me/privkey.pem
   Your cert will expire on 2019-06-27. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"

Далее, делаем все то же самое, но используем шаблон host_ssl.conf_. Итоговый конфиг будет выглядеть так:

server {
    listen 80;
    server_name google.com; # <-- изменили

    #access_log off;
    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log main;

    location ~ /.well-known {
        root /var/www/noroot;
    }

    location / {
        # try_files $uri $uri/ /index.php?$args;
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl;
    http2 on;
    server_name google.com; # <-- изменили

    client_max_body_size 32m;

    root /var/www/google.com;
    index index.php index.html;

    ssl_certificate     /etc/letsencrypt/live/google.com/fullchain.pem; # <-- изменили
    ssl_certificate_key /etc/letsencrypt/live/google.com/privkey.pem; # <-- изменили
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_stapling on;
    ssl_stapling_verify on;

    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log main;

    location / {
        try_files $uri $uri/ /index.php?$args; # <-- изменили
    }

    location ~ \.php$ {
        index index.php;
        include php82.conf;
    }
}

Создаем крон задачу для обновления сертификатов.

Пишем в консоль команду:

export EDITOR=nano && crontab -e

и вписываем туда строку:

0 0 1 * * /usr/bin/certbot renew --post-hook "systemctl reload nginx" > /var/log/renewals.log

Нажимаем Control+x, соглашаемся с сохранением нажатием кнопки y и задача создана.

На этом, собственно, все. Это несложно и каждый может сделать такое для себя, чтобы спать спокойно!