153 lines
6.4 KiB
Markdown
153 lines
6.4 KiB
Markdown
# Развёртывание 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) │
|
||
│ └─ 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
|
||
```
|
||
|