Files
1998-cad-cadpoint/DEPLOYMENT.md
erjemin e7dfd04c96
All checks were successful
Build and Push CadPoint1998-site / build-and-push (push) Successful in 27s
mod: убрал запуск nginx из Dockerfile
2026-03-28 18:16:48 +03:00

153 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Развёртывание cadpoint1998 на продакшене
## 📋 Архитектура
```txt
┌─────────────────────────────────────────────────────────┐
│ Хост (продакшен) │
├─────────────────────────────────────────────────────────┤
│ │
│ Внешний nginx (на хосте или в контейнере) │
│ ├─ Прослушивает: 0.0.0.0:80 (public) │
│ ├─ Обслуживает: tmp.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 ~/<папка-прилолжений>/<прилолжение>/config/nginx/cadpoint1998--external-nginx.conf /etc/nginx/sites-enabled
```
Проверь, что конфиг корректный и nginx может его загрузить:
```bash
sudo nginx -t
```
Если ошибок нет и все `ok` перезапусти сервис nginx:
```bash
sudo systemctl reload nginx
```
Проверь, что сайт отвечает по адресу `http://tmp.cadpoint.ru` (не забудь настроить DNS):
```bash
curl -v http://tmp.cadpoint.ru/index.htm
```
### 5. Настройка сертификата SSL (если нужен)
```
sudo certbot --nginx -d tmp.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: tmp.cadpoint.ru' http://localhost
```