- Shell 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .forgejo/workflows | ||
| .env.example | ||
| .gitignore | ||
| compose.yaml | ||
| deploy.sh | ||
| README.md | ||
postilga-deploy
Прод-конфиг Postilga: compose.yaml, deploy.sh, шаблон .env.
Код приложений живёт в отдельных репозиториях (postilga-backend, postilga-frontend) и подтягивается скриптом деплоя в соседние каталоги backend/ и frontend/.
Структура на хосте
Каталог /home/vladimir/apps/postilga — это clone этого репозитория:
~/apps/postilga/ ← postilga-deploy
compose.yaml
deploy.sh
.env ← только на хосте, не в git
.env.example
backend/ ← clone postilga-backend (gitignore)
frontend/ ← clone postilga-frontend (gitignore)
backups/ ← локальные бэкапы (gitignore)
Данные Postgres и загруженные файлы — в Docker volumes (postilga-postgres-data, postilga-uploads), переживают пересборку контейнеров.
Первичная установка / миграция
Если сейчас ~/apps/postilga — просто папка с compose.yaml на хосте:
cd ~/apps
mv postilga postilga.bak
git clone ssh://git@89.223.49.50:2222/vladimir/postilga-deploy.git postilga
cd postilga
# секреты
cp .env.example .env
# перенеси значения из postilga.bak/.env (или создай заново)
# код (или перенеси каталоги из бэкапа)
# mv ../postilga.bak/backend ./backend
# mv ../postilga.bak/frontend ./frontend
chmod +x deploy.sh
./deploy.sh
Named volume postilga-postgres-data сохранится: имя проекта compose останется postilga, если деплой идёт из того же каталога ~/apps/postilga.
Деплой
deploy.sh:
- lock (
flock), чтобы не было параллельных деплоев; git pullbackend и frontend;- бэкап Postgres в
backups/; docker compose build+up -d;- HTTP healthcheck frontend (
:4010) и backend (:4011).
Вручную:
cd ~/apps/postilga
git pull --ff-only
./deploy.sh
Через Forgejo Actions (workflow_dispatch): runner на хосте делает git pull этого репо и запускает ./deploy.sh.
Uploads
Картинки/видео пишутся в volume postilga-uploads → /app/uploads в контейнере backend. Без этого volume файлы пропадали после каждого деплоя.