6.4 KiB
Развёртывание cadpoint1998 на продакшене
📋 Архитектура
┌─────────────────────────────────────────────────────────┐
│ Хост (продакшен) │
├─────────────────────────────────────────────────────────┤
│ │
│ Внешний nginx (на хосте или в контейнере) │
│ ├─ Прослушивает: 0.0.0.0:80 (public) │
│ ├─ Обслуживает: 1998.cadpoint.ru │
│ └─ Проксирует → 127.0.0.1:8030 │
│ ↓ │
│ Docker контейнер cadpoint1998 │
│ ├─ Прослушивает: 0.0.0.0:8030 (internal) │
│ ├─ Обслуживает: статический HTML (KOI8-R) + gzip │
│ └─ Watchtower следит за обновлениями │
│ │
└─────────────────────────────────────────────────────────┘
🚀 Шаги развёртывания
1. Подготовка на локальной машине
# Убедись, что коммиты в `main`
git add .
git commit -m "Add external nginx config and deployment script"
git push origin main
# Создаёшь тег для деплоя
git tag v1.0.0
git push origin v1.0.0
# Gitea Workflow запустится автоматически и соберёт образ
2. Подготовка сервера (вход по SSH)
А. Создать папку для проекта (замените <папка-прилолжений> и <прилолжение> на свои значения):
# На продакшене (как e-serg или sudo)
mkdir -p ~/<папка-прилолжений>/<прилолжение>
cd ~/<папка-прилолжений>/<прилолжение>
Б. Создайте в ней каталог для конфигурационных файлов nginx:
mkdir -p config/nginx
В. Создать файл docker-compose.yml, поместите в нее содержимое из docker-compose.prod.yml (копи-паст из репозитрия).
Г. Создайте файл для переменных окружения проекта .env и заполните его (см. образец файла .env.example в репозитории).
3. Запуск контейнера на сервере
Запусти контейнер (конфиги nginx скопируются автоматически)
sudo docker compose up -d
Контейнер выведет при запуске:
- 📋 Копирование внешнего nginx конфига на хост...
- ✅ Пример nginx-конфика создан в ./config/nginx/cadpoint1998--external-nginx.conf.sample
- ✅ Боевой nginx-конфиг создан в ./config/nginx/cadpoint1998--external-nginx.conf
4. Настройка внешнего nginx на хосте
Сделай символическую ссылку на конфиг в папке nginx (или скопируй его):
sudo ln -s <полный-путь-к-home>/<папка-прилолжений>/<прилолжение>/config/nginx/cadpoint1998--external-nginx.conf /etc/nginx/sites-enabled
Проверь, что конфиг корректный и nginx может его загрузить:
sudo nginx -t
Если ошибок нет и все ok перезапусти сервис nginx:
sudo systemctl reload nginx
Проверь, что сайт отвечает по адресу http://1998.cadpoint.ru (не забудь настроить DNS):
curl -v http://1998.cadpoint.ru/index.htm
5. Настройка сертификата SSL (если нужен)
sudo certbot --nginx -d 1998.cadpoint.ru
🔄 Обновление сайта
Когда ты создашь и запушишь новый тег в репозиторий:
git tag v1.0.1
git push origin v1.0.1
Автоматически происходит:
- Gitea запускает workflow (docker-publish.yaml)
- Собирается новый образ и пушится в реестр как
v1.0.1иlatest - На сервере Watchtower каждые 30 минут проверяет реестр
- Находит новый образ и автоматически:
- Pulls новый образ
- Стопит старый контейнер
- Запускает новый контейнер
- Копирует конфиги (если это первый запуск)
Ручной pull (если не хочешь ждать Watchtower):
cd ~/<папка-прилолжений>/<прилолжение>
sudo docker compose pull
sudo docker compose up -d
⚠️ Важно про конфиги
При каждом запуске контейнера он копирует конфиги из образа на хост:
-
Первый запуск: оба конфига копируются
.sample(свежий из контейнера, для справки)- основной (для использования в nginx)
-
Последующие запуски: только
.sampleобновляется- Основной конфиг НЕ перезаписывается
- Это защищает ручные правки (например, после certbot)
📊 Мониторинг
# Логи контейнера
sudo docker logs cadpoint1998-site | tail -100
# Логи Watchtower
sudo docker logs cadpoint1998-watchtower | tail -50
# Проверка доступности (с хоста)
curl -v http://127.0.0.1:8030/index.htm
# Проверка через внешний nginx
curl -v -H 'Host: 1998.cadpoint.ru' http://localhost