From 0fd31b8d368a4e4a267b5e83d608bc088bb13b4d Mon Sep 17 00:00:00 2001 From: Kevin Morris Date: Wed, 8 Sep 2021 17:14:55 -0700 Subject: [PATCH] refactor(docker): New mariadb_init service Provides a single source of truth for mariadb database initialization. Previously, php-fpm and fastapi were racing against each other; while this wasn't an issue, it was very messy. Signed-off-by: Kevin Morris --- docker-compose.yml | 45 +++++++++++++------------------ docker/fastapi-entrypoint.sh | 19 ++++++++----- docker/mariadb-entrypoint.sh | 2 -- docker/mariadb-init-entrypoint.sh | 20 ++++++++++++++ docker/php-entrypoint.sh | 18 +++++++++---- 5 files changed, 64 insertions(+), 40 deletions(-) create mode 100755 docker/mariadb-init-entrypoint.sh diff --git a/docker-compose.yml b/docker-compose.yml index e4eccb12..309e95fe 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -49,8 +49,6 @@ services: mariadb: image: aurweb:latest init: true - environment: - - DB_HOST="%" entrypoint: /docker/mariadb-entrypoint.sh command: /usr/bin/mysqld_safe --datadir=/var/lib/mysql ports: @@ -63,11 +61,23 @@ services: healthcheck: test: "bash /docker/health/mariadb.sh" + mariadb_init: + image: aurweb:latest + init: true + environment: + - DB_HOST=mariadb + entrypoint: /docker/mariadb-init-entrypoint.sh + command: echo "MariaDB tables initialized." + depends_on: + mariadb: + condition: service_healthy + git: image: aurweb:latest init: true environment: - AUR_CONFIG=/aurweb/conf/config + - DB_HOST=mariadb entrypoint: /docker/git-entrypoint.sh command: /docker/scripts/run-sshd.sh ports: @@ -75,11 +85,9 @@ services: healthcheck: test: "bash /docker/health/sshd.sh" depends_on: - mariadb: - condition: service_healthy + mariadb_init: + condition: service_started volumes: - - mariadb_run:/var/run/mysqld - - mariadb_data:/var/lib/mysql - git_data:/aurweb/aur.git - ./cache:/cache @@ -96,8 +104,6 @@ services: mariadb: condition: service_healthy volumes: - - mariadb_run:/var/run/mysqld - - mariadb_data:/var/lib/mysql - git_data:/aurweb/aur.git - ./cache:/cache - smartgit_run:/var/run/smartgit @@ -114,8 +120,6 @@ services: depends_on: git: condition: service_healthy - php-fpm: - condition: service_healthy volumes: - git_data:/aurweb/aur.git @@ -131,8 +135,6 @@ services: depends_on: git: condition: service_healthy - fastapi: - condition: service_healthy volumes: - git_data:/aurweb/aur.git @@ -151,13 +153,9 @@ services: condition: service_started git: condition: service_healthy - mariadb: - condition: service_healthy memcached: condition: service_healthy volumes: - - mariadb_run:/var/run/mysqld # Bind socket in this volume. - - mariadb_data:/var/lib/mysql - ./cache:/cache - ./aurweb:/aurweb/aurweb - ./migrations:/aurweb/migrations @@ -186,11 +184,7 @@ services: condition: service_healthy redis: condition: service_healthy - mariadb: - condition: service_healthy volumes: - - mariadb_run:/var/run/mysqld # Bind socket in this volume. - - mariadb_data:/var/lib/mysql - ./cache:/cache - ./aurweb:/aurweb/aurweb - ./migrations:/aurweb/migrations @@ -268,10 +262,9 @@ services: stdin_open: true tty: true depends_on: - mariadb: - condition: service_healthy + mariadb_init: + condition: service_started volumes: - - mariadb_run:/var/run/mysqld - git_data:/aurweb/aur.git - ./cache:/cache - ./aurweb:/aurweb/aurweb @@ -292,7 +285,6 @@ services: stdin_open: true tty: true volumes: - - mariadb_run:/var/run/mysqld - git_data:/aurweb/aur.git - ./cache:/cache - ./aurweb:/aurweb/aurweb @@ -314,10 +306,9 @@ services: stdin_open: true tty: true depends_on: - mariadb: - condition: service_healthy + mariadb_init: + condition: service_started volumes: - - mariadb_run:/var/run/mysqld - git_data:/aurweb/aur.git - ./cache:/cache - ./aurweb:/aurweb/aurweb diff --git a/docker/fastapi-entrypoint.sh b/docker/fastapi-entrypoint.sh index 83a2cda8..3829b0bf 100755 --- a/docker/fastapi-entrypoint.sh +++ b/docker/fastapi-entrypoint.sh @@ -1,11 +1,21 @@ #!/bin/bash set -eou pipefail -dir="$(dirname $0)" -bash $dir/test-mysql-entrypoint.sh +[[ -z "$DB_HOST" ]] && echo 'Error: $DB_HOST required but missing.' && exit 1 + +DB_NAME="aurweb" +DB_USER="aur" +DB_PASS="aur" + +# Setup a config for our mysql db. +cp -vf conf/config.dev conf/config +sed -i "s;YOUR_AUR_ROOT;$(pwd);g" conf/config +sed -ri "s/^(name) = .+/\1 = ${DB_NAME}/" conf/config +sed -ri "s/^(host) = .+/\1 = ${DB_HOST}/" conf/config +sed -ri "s/^(user) = .+/\1 = ${DB_USER}/" conf/config +sed -ri "s/^;?(password) = .+/\1 = ${DB_PASS}/" conf/config sed -ri "s;^(aur_location) = .+;\1 = https://localhost:8444;" conf/config -sed -ri 's/^(name) = .+/\1 = aurweb/' conf/config # Setup Redis for FastAPI. sed -ri 's/^(cache) = .+/\1 = redis/' conf/config @@ -14,7 +24,4 @@ sed -ri 's|^(redis_address) = .+|\1 = redis://redis|' conf/config sed -ri "s|^(git_clone_uri_anon) = .+|\1 = https://localhost:8444/%s.git|" conf/config.defaults sed -ri "s|^(git_clone_uri_priv) = .+|\1 = ssh://aur@localhost:2222/%s.git|" conf/config.defaults -# Initialize the new database; ignore errors. -python -m aurweb.initdb 2>/dev/null || /bin/true - exec "$@" diff --git a/docker/mariadb-entrypoint.sh b/docker/mariadb-entrypoint.sh index 945a4b82..e1ebfa6a 100755 --- a/docker/mariadb-entrypoint.sh +++ b/docker/mariadb-entrypoint.sh @@ -3,8 +3,6 @@ set -eou pipefail MYSQL_DATA=/var/lib/mysql -[[ -z "$DB_HOST" ]] && DB_HOST="localhost" - mariadb-install-db --user=mysql --basedir=/usr --datadir=$MYSQL_DATA # Start it up. diff --git a/docker/mariadb-init-entrypoint.sh b/docker/mariadb-init-entrypoint.sh new file mode 100755 index 00000000..4cd6f46c --- /dev/null +++ b/docker/mariadb-init-entrypoint.sh @@ -0,0 +1,20 @@ +#!/bin/bash +set -eou pipefail + +[[ -z "$DB_HOST" ]] && echo 'Error: $DB_HOST required but missing.' && exit 1 + +DB_NAME="aurweb" +DB_USER="aur" +DB_PASS="aur" + +# Setup a config for our mysql db. +cp -vf conf/config.dev conf/config +sed -i "s;YOUR_AUR_ROOT;$(pwd);g" conf/config +sed -ri "s/^(name) = .+/\1 = ${DB_NAME}/" conf/config +sed -ri "s/^(host) = .+/\1 = ${DB_HOST}/" conf/config +sed -ri "s/^(user) = .+/\1 = ${DB_USER}/" conf/config +sed -ri "s/^;?(password) = .+/\1 = ${DB_PASS}/" conf/config + +python -m aurweb.initdb 2>/dev/null || /bin/true + +exec "$@" diff --git a/docker/php-entrypoint.sh b/docker/php-entrypoint.sh index 1f3ed82b..8fda1830 100755 --- a/docker/php-entrypoint.sh +++ b/docker/php-entrypoint.sh @@ -1,11 +1,21 @@ #!/bin/bash set -eou pipefail -dir="$(dirname $0)" -bash $dir/test-mysql-entrypoint.sh +[[ -z "$DB_HOST" ]] && echo 'Error: $DB_HOST required but missing.' && exit 1 + +DB_NAME="aurweb" +DB_USER="aur" +DB_PASS="aur" + +# Setup a config for our mysql db. +cp -vf conf/config.dev conf/config +sed -i "s;YOUR_AUR_ROOT;$(pwd);g" conf/config +sed -ri "s/^(name) = .+/\1 = ${DB_NAME}/" conf/config +sed -ri "s/^(host) = .+/\1 = ${DB_HOST}/" conf/config +sed -ri "s/^(user) = .+/\1 = ${DB_USER}/" conf/config +sed -ri "s/^;?(password) = .+/\1 = ${DB_PASS}/" conf/config sed -ri "s;^(aur_location) = .+;\1 = https://localhost:8443;" conf/config -sed -ri 's/^(name) = .+/\1 = aurweb/' conf/config # Enable memcached. sed -ri 's/^(cache) = .+$/\1 = memcache/' conf/config @@ -27,6 +37,4 @@ sed -ri 's/^;?(open_basedir).*$/\1 = \//' /etc/php/php.ini # Use the sqlite3 extension line for memcached. sed -ri 's/^;(extension)=sqlite3$/\1=memcached/' /etc/php/php.ini -python -m aurweb.initdb 2>/dev/null || /bin/true - exec "$@"