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>
2.9 KiB
Repo for site https://back2.iro.kosipov.ru
Deploy (Dokploy)
Проект собирается в Docker-образ на базе serversideup/php:8.4-fpm-nginx (nginx + php-fpm, порт 8080).
Файлы:
Dockerfile— сборка ассетов Vite, установка composer-зависимостей, итоговый образdocker-compose.yml— сервисappс томом дляstoragedocker/entrypoint.d/10-prepare-storage.sh— создаёт структуруstorageи файл SQLite при пустом томе
При каждом старте контейнера автоматически выполняются migrate --force, storage:link и optimize (AUTORUN_ENABLED=true).
Вариант 1: Application (Dockerfile)
- Create Service → Application, источник — этот репозиторий, ветка
main - Build Type:
Dockerfile - Environment: переменные из списка ниже
- Advanced → Volumes: Volume Mount, имя
iro2-storage, путь в контейнере/var/www/html/storage - Domains:
back2.iro.kosipov.ru, Container Port8080, HTTPS + Let's Encrypt
Вариант 2: Docker Compose
- Create Service → Compose, источник — этот репозиторий, путь
docker-compose.yml - Environment: переменные из списка ниже (Dokploy запишет их в
.env) - 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
Upload endpoints and upload page are protected by HTTP Basic Auth with 2 users from .env:
FILE_LINKS_UPLOAD_USER_1FILE_LINKS_UPLOAD_PASSWORD_1FILE_LINKS_UPLOAD_USER_2FILE_LINKS_UPLOAD_PASSWORD_2
Protected routes:
GET /filesPOST /filesPOST /api/files/upload
Download routes stay accessible by signed link:
GET /files/download/{path}(signed URL)GET /api/files/download/{path}(signed URL)