Установка бесплатного SSL-сертификата Let's Encrypt с автоматическим продлением, для домена на проекте CRYSTAL v1.0
add: 25 февраля
upd: 4 июля
Содержание:
Перед работой с данной инструкцией, необходимо подключить домен.
1. Изменение файла .env.prodDomain в frontend части, для работы через протокол - 'https', и сборка проекта для домена.
Измените примерный текст на название вашего домена и введите команду:
cd /var/www/crystal/frontend && rm -vr ./env/.env.prodDomain && echo VITE_API_BASE_URL=https://ВашДомен/api > ./env/.env.prodDomain && npm run buildProdDomain
Пример:
cd /var/www/crystal/frontend && rm -vr ./env/.env.prodDomain && echo VITE_API_BASE_URL=https://crysty.ru/api > ./env/.env.prodDomain && npm run buildProdDomain
2. Изменение файла .env.prodDomain в backend части проекта.
Введите команду:
cd /var/www/crystal/backend && nano env/.env.prodDomain
В открывшимся окне, измените значение переменной - 'CORS_ORIGIN', с 'http://ВашДомен' на 'https://ВашДомен':
Далее, добавьте переменную - 'COOKIE_SECURE_STATUS':
COOKIE_SECURE_STATUS=true
После добавления кода, нажмите последовательно - 'ctrl + x', 'y', 'Enter'.
* При значении - 'Secure: true', куки отправляются только через HTTPS, что обеспечивает шифрование всего содержимого запроса, включая авторизационный JWT. Это защищает токен от перехвата в открытых или небезопасных сетях, например общественный Wi-Fi, где злоумышленники могут анализировать незашифрованный трафик. Также это предотвращает атаки - MITM, когда атакующий встраивается между клиентом и сервером и перехватывает или подменяет данные, если соединение идёт не по HTTPS.
Введите команду:
systemctl restart nginx && pm2 restart 0
3. Установка certbot.
Введите команду:
apt-get install certbot && apt install python3-certbot-nginx
4. Генерация SSL-сертификата Let's Encrypt.
Введите команду и замените примерный текст на ваш домен:
certbot --nginx -d ВашДомен -d www.ВашДомен
пример:
certbot --nginx -d crysty.ru -d www.crysty.ru
Далее, введите адрес вашей электронной почты. После ввода email, необходимо прочитать вопросы и дать некоторые согласия.
* Если во время генерации будет ошибка:
An unexpected error occurred:
AttributeError: can't set attribute
Введите команду - 'certbot --nginx -d ВашДомен -d www.ВашДомен', заново.
Когда сертификат будет готов, вы увидите подобный текст в консоли:
Successfully received certificate.
Nginx перезагрузится с новыми настройками.
Два раза в день, таймер - certbot, будет проверять статус сертификата, и автоматически продлит сертификат, если подходит время его окончания.
Можно убедиться в наличии таймера, введя команду:
systemctl status certbot.timer
После ввода команды, должно быть подобное сообщение:
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; preset: enabled) Active: active (waiting) since Tue 2024-01-23 04:50:45 UTC; 1h 23min ago Trigger: Tue 2024-01-23 20:06:16 UTC; 13h left Triggers: ● certbot.service Jan 23 04:50:45 crystal-vm-1 systemd[1]: Started certbot.timer - Run certbot twice daily.
5. Перезапуск certbot таймера, после перезагрузки ВМ.
Введите команду:
systemctl enable --now certbot.timer
Откройте сайт проекта с вашем доменом, через протокол - 'https', SSL-сертификат должен работать.
Примечание: Для более удобного восприятия и быстрой установки, эта инструкция является упрощённой. При выполнении команды, для проверки конфигурации веб-сервера:
nginx -t
может появиться предупреждение:
[warn] 1672995#1672995: conflicting server name "www.ВашДомен" on 0.0.0.0:443, ignored
Это не является ошибкой и не влияет на работу сайта. Сервер продолжит функционировать корректно, а SSL-сертификат будет работать и обновляться автоматически.
Вы можете сделать сайт быстрее и безопаснее, включив поддеркжу протокола HTTP/2, следуя данной инструкции.
Поделиться
BTC (Network BTC) - 1C2EWWeEXVhg93hJA9KovpkSd3Rn3BkcYm
Ethereum (Network ERC20) - 0x05037ecbd8bcd15631d780c95c3799861182e6b8
Прокомментировать в