Adapt deployment for Dokploy

Replace the Gitea Actions SSH deploy with a Docker image
(serversideup/php fpm-nginx) and docker-compose setup. Store the
SQLite database inside the persistent storage volume, trust the
reverse proxy, and move admin credentials into config so they work
with cached configuration.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 15:39:41 +03:00
parent c5580833f6
commit e639968a46
10 changed files with 156 additions and 109 deletions

View File

@@ -1,33 +1,58 @@
## Repo for site https://back2.iro.kosipov.ru
### Autodeploy (Gitea Actions)
### Deploy (Dokploy)
Workflow file: `.gitea/workflows/deploy.yml`
Проект собирается в Docker-образ на базе `serversideup/php:8.4-fpm-nginx` (nginx + php-fpm, порт `8080`).
Deploy starts automatically on every push to `main`.
Файлы:
Required repository secrets in Gitea:
- `Dockerfile` — сборка ассетов Vite, установка composer-зависимостей, итоговый образ
- `docker-compose.yml` — сервис `app` с томом для `storage`
- `docker/entrypoint.d/10-prepare-storage.sh` — создаёт структуру `storage` и файл SQLite при пустом томе
- `DEPLOY_HOST` - host of the production server (example: `back2.iro.kosipov.ru`)
- `DEPLOY_USER` - SSH user for deploy
- `DEPLOY_PATH` - absolute path to Laravel project on server
- `DEPLOY_SSH_KEY` - private SSH key content (for `DEPLOY_USER`)
- `DEPLOY_PORT` - optional, defaults to `22`
При каждом старте контейнера автоматически выполняются `migrate --force`, `storage:link` и `optimize` (`AUTORUN_ENABLED=true`).
What deployment does:
#### Вариант 1: Application (Dockerfile)
- updates project to `origin/main`
- runs `composer install --no-dev --optimize-autoloader`
- enables maintenance mode (`php artisan down`)
- clears stale caches, runs migrations, recreates Laravel caches
- restarts queue workers (`php artisan queue:restart`)
- disables maintenance mode (`php artisan up`)
1. Create Service → Application, источник — этот репозиторий, ветка `main`
2. Build Type: `Dockerfile`
3. Environment: переменные из списка ниже
4. Advanced → Volumes: Volume Mount, имя `iro2-storage`, путь в контейнере `/var/www/html/storage`
5. Domains: `back2.iro.kosipov.ru`, Container Port `8080`, HTTPS + Let's Encrypt
Server prerequisites:
#### Вариант 2: Docker Compose
- `php`, `composer`, `git`, `bash` available in PATH
- deploy user has permissions for project files and artisan commands
1. Create Service → Compose, источник — этот репозиторий, путь `docker-compose.yml`
2. Environment: переменные из списка ниже (Dokploy запишет их в `.env`)
3. Domains: сервис `app`, порт `8080`
#### Переменные окружения
Обязательные:
```
APP_KEY=base64:... # php artisan key:generate --show
APP_URL=https://back2.iro.kosipov.ru
ADMIN_USER=...
ADMIN_PASS=...
```
Уже заданы в образе (можно переопределить): `APP_ENV=production`, `APP_DEBUG=false`, `LOG_CHANNEL=stderr`,
`DB_CONNECTION=sqlite`, `DB_DATABASE=/var/www/html/storage/database/database.sqlite`.
Загрузка файлов:
```
FILE_LINKS_ENABLED=true
FILE_LINKS_UPLOAD_USER_1=...
FILE_LINKS_UPLOAD_PASSWORD_1=...
FILE_LINKS_UPLOAD_USER_2=...
FILE_LINKS_UPLOAD_PASSWORD_2=...
```
База SQLite и загруженные файлы хранятся в томе `storage` — не удаляйте его при пересоздании сервиса.
Для переноса существующих данных скопируйте старый `database/database.sqlite` в
`storage/database/database.sqlite` внутри тома.
### File Upload Basic Auth