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

76 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 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)