2
Deploy
s.zotov edited this page 2026-04-13 12:25:01 +05:00
Деплой
Сервер
| Параметр | Значение |
|---|---|
| IP | 147.45.109.108 |
| OS | Ubuntu 24.04 |
| Docker | 29.2, Compose 5.1 |
| RAM | 2 GB |
| Диск | 38 GB SSD |
| Домены | app.aspekter.ru, coins.aspekter.ru |
Структура на сервере
/opt/aspekter/ # Основная папка (git repo)
├── z51-pug-builder/
│ ├── data/ # Docker volume — данные проектов
│ ├── src/ # Docker volume — исходники (live reload)
│ └── vite.config.js # Docker volume — API
├── email-gen/ # Email шаблоны
├── data/images/ # Локальное хранение картинок
├── coin-scout/data/ # SQLite для Coin Scout
└── docker-compose*.yml
/etc/nginx/sites-enabled/
├── emailbro.conf # app.aspekter.ru → 127.0.0.1:5175
└── coins.conf # coins.aspekter.ru → 127.0.0.1:5180
/etc/letsencrypt/live/
├── app.aspekter.ru/ # SSL сертификат
└── coins.aspekter.ru/ # SSL сертификат
Docker Compose
Три файла:
docker-compose.yml— базовые сервисы (builder, email-gen-api)docker-compose.dev.yml— dev: порт 5174, data-dev/, coin-scoutdocker-compose.prod.yml— prod: порт 5175 на 127.0.0.1, volume mounts для src и vite.config.js
Prod запуск:
cd /opt/aspekter
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build
Volume mounts в prod позволяют обновлять код без пересборки контейнера:
volumes:
- ./z51-pug-builder/data:/app/data
- ./z51-pug-builder/vite.config.js:/app/vite.config.js
- ./z51-pug-builder/src:/app/src
- ./data/images:/app/data/images
SSL сертификаты
Let's Encrypt через certbot (standalone mode):
systemctl stop nginx # освободить порт 80
certbot certonly --standalone -d app.aspekter.ru --agree-tos --email admin@aspekter.ru
certbot certonly --standalone -d coins.aspekter.ru --agree-tos --email admin@aspekter.ru
systemctl start nginx
Автообновление настроено через certbot systemd timer.
Обновление кода
cd /opt/aspekter
git pull origin main
# Если изменился только код (src, vite.config.js) — перезапуск не нужен (live reload)
# Если изменился Dockerfile или package.json:
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build
DNS
systemd-resolved может перезаписывать /etc/resolv.conf при перезапуске docker. Постоянный фикс:
mkdir -p /etc/systemd/resolved.conf.d
cat > /etc/systemd/resolved.conf.d/dns.conf << EOF
[Resolve]
DNS=8.8.8.8 1.1.1.1
FallbackDNS=8.8.4.4
EOF
systemctl restart systemd-resolved
Хранение картинок
Два режима (настраивается per-project в Настройки → Интеграции):
| Режим | Где хранятся | Публичный URL |
|---|---|---|
| FTP/SFTP | Внешний сервер | Настраивается в ftpConfig.baseUrl |
| Локально | /opt/aspekter/data/images/{project}/{folder}/ | https://app.aspekter.ru/images/{project}/{folder}/file.png |
Nginx раздаёт локальные картинки статикой (expires 30d, Cache-Control immutable).
Мониторинг
docker ps # статус контейнеров
docker logs aspekter-builder # логи приложения
docker logs aspekter-email-gen-api # логи рендерера