Fix db host-port collision: separate DB_HOST_PORT from the internal port
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>
This commit is contained in:
@@ -34,18 +34,19 @@ DEFAULT_URI=https://dmtools.fvandenberg.nl
|
|||||||
###> doctrine/doctrine-bundle ###
|
###> doctrine/doctrine-bundle ###
|
||||||
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
|
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
|
||||||
#
|
#
|
||||||
# In Docker (servers) the host is the `database` service and these parts come
|
# In Docker (servers) php talks to the `database` service on its own port
|
||||||
# from docker-compose.yml / .env.local. On the dev box, point DATABASE_URL at
|
# 3306 - always. The host-published port (for a DB client on the server) is
|
||||||
# your local MariaDB in .env.local, e.g.:
|
# a separate thing: docker-compose.yml uses ${DB_HOST_PORT:-3310}, override
|
||||||
# DATABASE_URL="mysql://root:@127.0.0.1:3306/dmtools?serverVersion=10.10.2-MariaDB&charset=utf8mb4"
|
# it in .env.local if 3310 is taken.
|
||||||
DB_HOST=database
|
#
|
||||||
DB_PORT=3306
|
# On the dev box, point DATABASE_URL at your local MariaDB in .env.local:
|
||||||
|
# DATABASE_URL="mysql://root:@127.0.0.1:3307/dmtools?serverVersion=10.10.2-MariaDB&charset=utf8mb4"
|
||||||
DB_NAME=dmtools
|
DB_NAME=dmtools
|
||||||
DB_USER=dmtools
|
DB_USER=dmtools
|
||||||
DB_PASSWORD=ChangeMe
|
DB_PASSWORD=ChangeMe
|
||||||
DB_ROOT_PASSWORD=ChangeMeRoot
|
DB_ROOT_PASSWORD=ChangeMeRoot
|
||||||
DB_SERVER_VERSION=mariadb-12.3.2
|
DB_SERVER_VERSION=mariadb-12.3.2
|
||||||
DATABASE_URL="mysql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?serverVersion=${DB_SERVER_VERSION}&charset=utf8mb4"
|
DATABASE_URL="mysql://${DB_USER}:${DB_PASSWORD}@database:3306/${DB_NAME}?serverVersion=${DB_SERVER_VERSION}&charset=utf8mb4"
|
||||||
###< doctrine/doctrine-bundle ###
|
###< doctrine/doctrine-bundle ###
|
||||||
|
|
||||||
###> symfony/messenger ###
|
###> symfony/messenger ###
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ MariaDB/MySQL (WAMP is fine). `.php-version` pins this directory to PHP 8.5.
|
|||||||
cp .env .env.local
|
cp .env .env.local
|
||||||
# then edit .env.local:
|
# then edit .env.local:
|
||||||
# APP_ENV=dev
|
# APP_ENV=dev
|
||||||
# DATABASE_URL="mysql://root:@127.0.0.1:3306/dmtools?serverVersion=10.10.2-MariaDB&charset=utf8mb4"
|
# DATABASE_URL="mysql://root:@127.0.0.1:3307/dmtools?serverVersion=10.10.2-MariaDB&charset=utf8mb4"
|
||||||
|
|
||||||
# 2. Install and build
|
# 2. Install and build
|
||||||
symfony composer install
|
symfony composer install
|
||||||
@@ -51,7 +51,7 @@ Docker only. `docker/setup.sh` pins the compose project name to `dmtools`
|
|||||||
git pull
|
git pull
|
||||||
cp .env .env.local # first time only
|
cp .env .env.local # first time only
|
||||||
# edit .env.local: real APP_SECRET (or let setup.sh generate it),
|
# edit .env.local: real APP_SECRET (or let setup.sh generate it),
|
||||||
# DB_PASSWORD, DB_ROOT_PASSWORD, and NGINX_PORT / DB_PORT if 8085 / 3310 clash
|
# DB_PASSWORD, DB_ROOT_PASSWORD, and NGINX_PORT / DB_HOST_PORT if 8085 / 3310 clash
|
||||||
./docker/setup.sh
|
./docker/setup.sh
|
||||||
docker compose -p dmtools exec php php bin/console app:user:create you@example.com --admin
|
docker compose -p dmtools exec php php bin/console app:user:create you@example.com --admin
|
||||||
```
|
```
|
||||||
|
|||||||
+1
-1
@@ -52,7 +52,7 @@ services:
|
|||||||
- --character-set-server=utf8mb4
|
- --character-set-server=utf8mb4
|
||||||
- --collation-server=utf8mb4_unicode_ci
|
- --collation-server=utf8mb4_unicode_ci
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:${DB_PORT:-3310}:3306"
|
- "127.0.0.1:${DB_HOST_PORT:-3310}:3306"
|
||||||
volumes:
|
volumes:
|
||||||
- database_data:/var/lib/mysql
|
- database_data:/var/lib/mysql
|
||||||
healthcheck:
|
healthcheck:
|
||||||
|
|||||||
+2
-2
@@ -16,12 +16,12 @@ set -euo pipefail
|
|||||||
# ./docker/setup.sh --down # stop and remove containers
|
# ./docker/setup.sh --down # stop and remove containers
|
||||||
#
|
#
|
||||||
# NGINX_PORT=8086 ./docker/setup.sh # if 8085 is already taken on this host
|
# NGINX_PORT=8086 ./docker/setup.sh # if 8085 is already taken on this host
|
||||||
# (or set NGINX_PORT / DB_PORT once in .env.local and every run picks it up)
|
# (or set NGINX_PORT / DB_HOST_PORT once in .env.local and every run picks it up)
|
||||||
|
|
||||||
ROOT_DIR=$(cd "$(dirname "$0")"/.. && pwd)
|
ROOT_DIR=$(cd "$(dirname "$0")"/.. && pwd)
|
||||||
PROJECT=dmtools
|
PROJECT=dmtools
|
||||||
|
|
||||||
for var in NGINX_PORT DB_PORT; do
|
for var in NGINX_PORT DB_HOST_PORT; do
|
||||||
if [ -z "${!var:-}" ] && grep -q "^${var}=" "$ROOT_DIR/.env.local" 2>/dev/null; then
|
if [ -z "${!var:-}" ] && grep -q "^${var}=" "$ROOT_DIR/.env.local" 2>/dev/null; then
|
||||||
export "$var=$(grep "^${var}=" "$ROOT_DIR/.env.local" | tail -1 | cut -d= -f2-)"
|
export "$var=$(grep "^${var}=" "$ROOT_DIR/.env.local" | tail -1 | cut -d= -f2-)"
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user