DB_PORT was doing double duty - the container-internal port baked into
DATABASE_URL (must be 3306) and the host-published port in
docker-compose.yml. Setting it to 3306 for the URL made compose try to
publish host :3306, which collides with another stack's MySQL.
DATABASE_URL now hardcodes database:3306 (always correct inside the
compose network); the host publish uses ${DB_HOST_PORT:-3310}.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
86 lines
2.9 KiB
Markdown
86 lines
2.9 KiB
Markdown
# dmtools
|
|
|
|
DM tools for the Monday-evening D&D campaign.
|
|
|
|
Symfony 8 (PHP 8.5) web app with a Bootstrap 5 + DataTables front end served
|
|
through Symfony AssetMapper (no Node build step). Behind a form-login gate; there
|
|
is no self-registration.
|
|
|
|
- **Not** run in Docker locally (Windows dev box uses the Symfony CLI + local
|
|
MariaDB).
|
|
- **Is** Dockerized on the testing and live servers, behind the shared Nginx
|
|
Proxy Manager at `https://dmtools.fvandenberg.nl`.
|
|
|
|
Repo: <https://gitea.fvandenberg.nl/Frank/dmtools.git>
|
|
|
|
---
|
|
|
|
## Local development (dev box)
|
|
|
|
Prerequisites: PHP 8.5 at `C:\php` (on `PATH` so the Symfony CLI discovers it —
|
|
`symfony local:php:list` should show 8.5), the Symfony CLI, Composer, and a local
|
|
MariaDB/MySQL (WAMP is fine). `.php-version` pins this directory to PHP 8.5.
|
|
|
|
```bash
|
|
# 1. Point the app at your local database + dev mode
|
|
cp .env .env.local
|
|
# then edit .env.local:
|
|
# APP_ENV=dev
|
|
# DATABASE_URL="mysql://root:@127.0.0.1:3307/dmtools?serverVersion=10.10.2-MariaDB&charset=utf8mb4"
|
|
|
|
# 2. Install and build
|
|
symfony composer install
|
|
symfony console doctrine:database:create
|
|
symfony console doctrine:migrations:migrate -n
|
|
symfony console importmap:install
|
|
|
|
# 3. First user, then run
|
|
symfony console app:user:create you@example.com --admin
|
|
symfony serve -d
|
|
symfony open:local
|
|
```
|
|
|
|
`serverVersion` must match your local engine (`SELECT VERSION();`).
|
|
|
|
## Servers (testing + live)
|
|
|
|
Docker only. `docker/setup.sh` pins the compose project name to `dmtools`
|
|
(containers `dmtools-php`, `dmtools-nginx`, `dmtools-db`).
|
|
|
|
```bash
|
|
git pull
|
|
cp .env .env.local # first time only
|
|
# edit .env.local: real APP_SECRET (or let setup.sh generate it),
|
|
# DB_PASSWORD, DB_ROOT_PASSWORD, and NGINX_PORT / DB_HOST_PORT if 8085 / 3310 clash
|
|
./docker/setup.sh
|
|
docker compose -p dmtools exec php php bin/console app:user:create you@example.com --admin
|
|
```
|
|
|
|
Ports (bound to `127.0.0.1` on the host): nginx `8085` → `:80`, db `3310` → `:3306`.
|
|
|
|
### Reverse proxy (Nginx Proxy Manager)
|
|
|
|
Add a proxy host: `dmtools.fvandenberg.nl` → forward to host `dmtools-nginx`,
|
|
port `80`, scheme `http`; request a Let's Encrypt certificate. NPM and
|
|
`dmtools-nginx` must share the external `docker_default` Docker network (the
|
|
compose file attaches nginx to it as `proxy`).
|
|
|
|
### Common commands
|
|
|
|
```bash
|
|
docker compose -p dmtools logs -f php
|
|
docker compose -p dmtools exec php bash
|
|
docker compose -p dmtools exec php php bin/console doctrine:migrations:migrate
|
|
./docker/restart.sh # full down + bring-up (no rebuild)
|
|
./docker/setup.sh --down # stop the stack
|
|
```
|
|
|
|
## Layout notes
|
|
|
|
- `table.datatable` in any Twig template is auto-initialised as a DataTable
|
|
(`assets/app.js`). Opt out with `data-datatable="false"`; pass options as JSON
|
|
in `data-datatable-options`.
|
|
- `assets/vendor/` and `public/assets/` are generated (git-ignored);
|
|
`importmap:install` on the server re-downloads vendored packages, so the
|
|
servers need outbound HTTPS to jsDelivr at deploy time.
|