mod: все для deployment
This commit is contained in:
152
DEPLOYMENT.md
Normal file
152
DEPLOYMENT.md
Normal file
@@ -0,0 +1,152 @@
|
||||
# Развёртывание 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
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user