# Развёртывание cadpoint1998 на продакшене ## 📋 Архитектура ```txt ┌─────────────────────────────────────────────────────────┐ │ Хост (продакшен) │ ├─────────────────────────────────────────────────────────┤ │ │ │ Внешний 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. Подготовка на локальной машине ```bash # Убедись, что коммиты в `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) А. Создать папку для проекта (замените `<папка-прилолжений>` и `<прилолжение>` на свои значения): ```bash # На продакшене (как e-serg или sudo) mkdir -p ~/<папка-прилолжений>/<прилолжение> cd ~/<папка-прилолжений>/<прилолжение> ``` Б. Создайте в ней каталог для конфигурационных файлов nginx: ```bash 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 (или скопируй его): ```bash sudo ln -s <полный-путь-к-home>/<папка-прилолжений>/<прилолжение>/config/nginx/cadpoint1998--external-nginx.conf /etc/nginx/sites-enabled ``` Проверь, что конфиг корректный и nginx может его загрузить: ```bash sudo nginx -t ``` Если ошибок нет и все `ok` перезапусти сервис nginx: ```bash sudo systemctl reload nginx ``` Проверь, что сайт отвечает по адресу `http://1998.cadpoint.ru` (не забудь настроить DNS): ```bash curl -v http://1998.cadpoint.ru/index.htm ``` ### 5. Настройка сертификата SSL (если нужен) ``` sudo certbot --nginx -d 1998.cadpoint.ru ``` ## 🔄 Обновление сайта Когда ты создашь и запушишь новый тег в репозиторий: ```bash 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):** ```bash cd ~/<папка-прилолжений>/<прилолжение> sudo docker compose pull sudo docker compose up -d ``` ## ⚠️ Важно про конфиги При каждом запуске контейнера он копирует конфиги из образа на хост: 1. **Первый запуск**: оба конфига копируются - `.sample` (свежий из контейнера, для справки) - основной (для использования в nginx) 2. **Последующие запуски**: только `.sample` обновляется - Основной конфиг НЕ перезаписывается - Это защищает ручные правки (например, после certbot) ## 📊 Мониторинг ```bash # Логи контейнера 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 ```