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

