# Setup ## Prerequisites - Docker + Docker Compose - Last.fm API key - A unique `APP_SECRET` value in your environment (for prod builds) ## 1) Start the stack ```bash docker compose up -d --build ``` App: `http://localhost:8085` Health: `http://localhost:8085/healthz` ## 2) Create an admin ```bash docker compose exec tonehaus php bin/console app:promote-admin you@example.com ``` ## 3) Configure Last.fm - Preferred: open `/admin/settings` and enter your Last.fm API key (stored in DB) - Env fallback (in `.env` or your shell): ```bash LASTFM_API_KEY=your_api_key ``` ## 4) JWT auth keys - API login endpoint: `POST /api/v1/auth/login` - JWT keys are generated automatically on container start into `config/jwt/`. - Set `JWT_PASSPHRASE` in `.env` to your production secret. ## 5) (Optional) Seed demo data ```bash docker compose exec tonehaus php bin/console app:seed-demo-users --count=50 docker compose exec tonehaus php bin/console app:seed-demo-albums --count=40 --attach-users docker compose exec tonehaus php bin/console app:seed-demo-reviews --cover-percent=70 --max-per-album=8 ``` ## Database drivers - SQLite (default): set `DATABASE_DRIVER=sqlite` (default) — data stored at `var/data/database.sqlite` - Postgres: set `DATABASE_DRIVER=postgres` and provide `DATABASE_URL` - If you enable the commented `db` service in `docker-compose.yml`, a typical URL is: ``` postgresql://symfony:symfony@db:5432/symfony?serverVersion=16&charset=utf8 ``` ## Environment variables - `APP_ENV=dev|prod` - `APP_SECRET=` - `LASTFM_API_KEY` - `JWT_PASSPHRASE=` - `APP_ALLOW_REGISTRATION=1|0` (env can override DB setting) - `DATABASE_DRIVER=sqlite|postgres` - `DATABASE_SQLITE_PATH` (optional) - `RUN_MIGRATIONS_ON_START=1|0` (default 1) ## Useful commands ```bash # Symfony cache docker compose exec tonehaus php bin/console cache:clear # Inspect routes docker compose exec tonehaus php bin/console debug:router # Promote moderator docker compose exec tonehaus php bin/console app:promote-moderator mod@example.com ```