Files
iro2-back-lecture/README.md
kosipov e639968a46 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>
2026-09-15 15:39:41 +03:00

2.9 KiB
Raw Blame History

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 с томом для storage
  • docker/entrypoint.d/10-prepare-storage.sh — создаёт структуру storage и файл SQLite при пустом томе

При каждом старте контейнера автоматически выполняются migrate --force, storage:link и optimize (AUTORUN_ENABLED=true).

Вариант 1: Application (Dockerfile)

  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

Вариант 2: Docker Compose

  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

Upload endpoints and upload page are protected by HTTP Basic Auth with 2 users from .env:

  • FILE_LINKS_UPLOAD_USER_1
  • FILE_LINKS_UPLOAD_PASSWORD_1
  • FILE_LINKS_UPLOAD_USER_2
  • FILE_LINKS_UPLOAD_PASSWORD_2

Protected routes:

  • GET /files
  • POST /files
  • POST /api/files/upload

Download routes stay accessible by signed link:

  • GET /files/download/{path} (signed URL)
  • GET /api/files/download/{path} (signed URL)