feat: CI/CD, per-domain HTTPS, backup, config generator
- sites.yml — единый источник истины для всех сайтов - generate-configs.sh — генератор nginx конфигов, certbot domains.txt, .env - nginx: per-domain HTTPS (вместо all-or-nothing switch-config) - certbot: единый renew-all.sh, динамический init (без 5 дублирующих скриптов) - backup: контейнер с pg_dump + rclone (Яндекс.Диск), ежедневно в 3AM - Gitea + Gitea Runner в docker-compose (self-hosted Git + CI/CD) - .gitea/workflows/deploy.yml — CI/CD pipeline: push → авто-деплой - Makefile: generate-configs, reconfig, deploy, backup, restore, gitea, help
This commit is contained in:
@@ -1 +1 @@
|
||||
0 0 * * * root /opt/checkRenewCerts.sh > /proc/1/fd/1 2>&1
|
||||
0 0 * * * /opt/renew-all.sh > /proc/1/fd/1 2>&1
|
||||
|
||||
@@ -1,69 +1,32 @@
|
||||
#!/bin/sh
|
||||
# init-certbot.sh — точка входа certbot контейнера
|
||||
set -e
|
||||
|
||||
# Проверяем наличие сертификатов для yalarba.ru
|
||||
if [ ! -d "/etc/letsencrypt/live/yalarba.ru" ]; then
|
||||
echo "Получаем новые сертификаты yalarba.ru ..."
|
||||
certbot certonly --webroot \
|
||||
--config /etc/letsencrypt/config/certbot.ini \
|
||||
-w /var/www/certbot \
|
||||
-d ${DOMAINS_yalarba}
|
||||
fi
|
||||
echo "=== Certbot init ==="
|
||||
|
||||
echo "сertificates for ${DOMAINS_yalarba} is ready"
|
||||
# Получаем сертификаты для всех доменов из DOMAINS_* env
|
||||
env | grep '^DOMAINS_' | grep -v '^ALL_DOMAINS' | sort | while IFS='=' read -r var_name domains; do
|
||||
primary_domain=$(echo "$domains" | cut -d, -f1)
|
||||
|
||||
# Проверяем наличие сертификатов для valitovgaziz.ru
|
||||
if [ ! -d "/etc/letsencrypt/live/valitovgaziz.ru" ]; then
|
||||
echo "Получаем новые сертификаты valitovgaziz ..."
|
||||
certbot certonly --webroot \
|
||||
--config /etc/letsencrypt/config/certbot.ini \
|
||||
-w /var/www/certbot \
|
||||
-d ${DOMAINS_valitovgaziz}
|
||||
fi
|
||||
if [ ! -d "/etc/letsencrypt/live/$primary_domain" ]; then
|
||||
echo "→ Получаем сертификат для $primary_domain"
|
||||
certbot certonly --webroot \
|
||||
--config /etc/letsencrypt/config/certbot.ini \
|
||||
-w /var/www/certbot \
|
||||
-d "$domains"
|
||||
echo "✓ Сертификат для $primary_domain получен"
|
||||
else
|
||||
echo "✓ Сертификат для $primary_domain уже существует"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "сertificates for ${DOMAINS_valitovgaziz} is ready"
|
||||
|
||||
# Проверяем наличие сертификатов для easysite102.ru
|
||||
if [ ! -d "/etc/letsencrypt/live/easysite102.ru" ]; then
|
||||
echo "Получаем новые сертификаты easysite102.ru ..."
|
||||
certbot certonly --webroot \
|
||||
--config /etc/letsencrypt/config/certbot.ini \
|
||||
-w /var/www/certbot \
|
||||
-d ${DOMAINS_easysite102}
|
||||
fi
|
||||
|
||||
echo "сertificates for ${DOMAINS_easysite102} is ready"
|
||||
|
||||
# Проверяем наличие сертификатов для бегущийбашкир.рф
|
||||
if [ ! -d "/etc/letsencrypt/live/xn--80abahjtcfl5d0a8di.xn--p1ai" ]; then
|
||||
echo "Получаем новые сертификаты xn--80abahjtcfl5d0a8di.xn--p1ai(бегущийбашкир.рф) ..."
|
||||
certbot certonly --webroot \
|
||||
--config /etc/letsencrypt/config/certbot.ini \
|
||||
-w /var/www/certbot \
|
||||
-d ${DOMAINS_begushiybashkir}
|
||||
fi
|
||||
|
||||
echo "сertificates for ${DOMAINS_begushiybashkir} is ready"
|
||||
|
||||
# Проверяем наличие сертификатов для begushiybashkir.ru
|
||||
if [ ! -d "/etc/letsencrypt/live/begushiybashkir.ru" ]; then
|
||||
echo "Получаем новые сертификаты begushiybashkir.ru ..."
|
||||
certbot certonly --webroot \
|
||||
--config /etc/letsencrypt/config/certbot.ini \
|
||||
-w /var/www/certbot \
|
||||
-d ${DOMAINS_begushiybashkir_latin}
|
||||
fi
|
||||
|
||||
echo "сertificates for ${DOMAINS_begushiybashkir_latin} is ready"
|
||||
|
||||
set -e # Завершаем работу, если любая команда вернёт ошибку
|
||||
|
||||
# Активируем сервис cron
|
||||
/usr/sbin/crond -f &
|
||||
crond -f &
|
||||
|
||||
# Копируем нашу собственную crontab таблицу
|
||||
# Настраиваем cron для ежедневного обновления
|
||||
cp /opt/crontab.txt /etc/crontabs/root
|
||||
|
||||
# Оставляем контейнер открытым
|
||||
tail -f /dev/null
|
||||
# Запускаем crond в фоне
|
||||
crond -b
|
||||
|
||||
echo "=== Init завершён, контейнер работает ==="
|
||||
|
||||
# Держим контейнер живым
|
||||
tail -f /dev/null
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
# renew-all.sh — единый скрипт обновления всех сертификатов
|
||||
set -e
|
||||
|
||||
echo "=== Certbot renewal ==="
|
||||
|
||||
# Обновляем все сертификаты
|
||||
certbot renew --webroot -w /var/www/certbot
|
||||
|
||||
# Перезагружаем nginx чтобы он подхватил новые сертификаты
|
||||
if command -v docker > /dev/null 2>&1; then
|
||||
echo "→ Перезагружаем nginx..."
|
||||
docker exec nginx nginx -s reload 2>/dev/null || \
|
||||
echo " (nginx reload не удался, возможно контейнер не запущен)"
|
||||
fi
|
||||
|
||||
echo "=== Renewal завершён ==="
|
||||
Reference in New Issue
Block a user