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:
65
README.md
65
README.md
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user