Отже, скрипт знайшов несподівано позитивний відгук у спільноти, видимо, інструкції з тонкого налаштування — бути.

Дисклеймер: скрипт повністю робочий, конфіги — вистраждані роками та перевірені сотнями впс та дедіків. Автор сам щоденно користується ними. Але багато залежить від вашого хостера, його конфігів та інших зовнішніх, незалежних факторів. Будь ласка, перевіряйте працездатність перед запуском у продакшн!

Інформація#

Що робить#

Повністю автоматично налаштовує з 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 і завдання створено.

На цьому, власне, все. Це нескладно і кожен може зробити таке для себе, щоб спати спокійно!