Files
1998-cad-cadpoint/DEPLOYMENT.md

6.4 KiB
Raw Permalink Blame History

Развёртывание 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

Автоматически происходит:

  1. Gitea запускает workflow (docker-publish.yaml)
  2. Собирается новый образ и пушится в реестр как v1.0.1 и latest
  3. На сервере Watchtower каждые 30 минут проверяет реестр
  4. Находит новый образ и автоматически:
    • Pulls новый образ
    • Стопит старый контейнер
    • Запускает новый контейнер
    • Копирует конфиги (если это первый запуск)

Ручной pull (если не хочешь ждать Watchtower):

cd  ~/<папка-прилолжений>/<прилолжение>
sudo docker compose pull
sudo docker compose up -d

⚠️ Важно про конфиги

При каждом запуске контейнера он копирует конфиги из образа на хост:

  1. Первый запуск: оба конфига копируются

    • .sample (свежий из контейнера, для справки)
    • основной (для использования в nginx)
  2. Последующие запуски: только .sample обновляется

    • Основной конфиг НЕ перезаписывается
    • Это защищает ручные правки (например, после certbot)

📊 Мониторинг

# Логи контейнера
sudo docker compose logs -f cadpoint1998-site | tail -100

# Логи Watchtower
sudo docker compose logs -f cadpoint1998-watchtower | tail -50

# Проверка доступности (с хоста)
curl -v http://127.0.0.1:8030/index.htm

# Проверка через внешний nginx
curl -v -H 'Host: 1998.cadpoint.ru' http://localhost