Скрипт сетапа вебхостинга
Итак, скрипт нашел неожиданно положительный отклик у сообщества, видимо, инструкции по тонкой настройке - быть.
Дисклеймер: скрипт полностью рабочий, конфиги - выстраданы годами и проверены сотнями впс и дедиков. Автор сам ежедневно пользуется ими. Но много зависит от вашего хостера, его конфигов и прочих внешних, не зависящих факторов. Пожалуйста, проверяйте работоспособность перед запуском в продакшн!
Информация
Что делает.
Полностью автоматически настривает с 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. Он расположен в дирreктории /etc/nginx. И редактируем его:
Было
Добавляем строку include conf.d/*.conf; . Стало
И перезагружаем конфиг через консоль:
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_nossl.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 и задача создана.
На этом, собственно, все. Это несложно и каждый может сделать такое для себя, чтобы спать спокойно!

