From a1d2d83f60257be6d03b37a5577b7d5d043f9eb0 Mon Sep 17 00:00:00 2001 From: mcolonna Date: Fri, 20 Jun 2025 12:33:59 +0200 Subject: [PATCH] dev: mariadb users * other things also --- Makefile | 10 ++-- env_template | 1 + srcs/docker-compose.yml | 3 ++ srcs/requirements/mariadb/Dockerfile | 8 +-- .../mariadb/conf/mariadb-server.cnf | 6 +-- srcs/requirements/mariadb/healthcheck.sh | 5 ++ srcs/requirements/mariadb/ismariadbrunning.sh | 5 ++ srcs/requirements/mariadb/run.sh | 53 +++++++++++++++---- srcs/requirements/nginx/Dockerfile | 2 +- .../wordpress/conf/wwwmore/wp-config.php | 6 +-- srcs/requirements/wordpress/run.sh | 8 ++- 11 files changed, 79 insertions(+), 28 deletions(-) create mode 100755 srcs/requirements/mariadb/healthcheck.sh create mode 100755 srcs/requirements/mariadb/ismariadbrunning.sh diff --git a/Makefile b/Makefile index e1e2d98..7e8193a 100644 --- a/Makefile +++ b/Makefile @@ -4,9 +4,11 @@ DOCKER=docker MKTEMP=mktemp include .env +export DATABASE_PWD +export DATABASE_PWD_ROOT +export VOLUMES_PATH SRC_COMPOSE=srcs/ -SRC_WWW_MORE=srcs/www/ CERT_PATH=srcs/__cert/ CERT_PATH_FILES=$(addprefix $(CERT_PATH), ca.pem cert.key cert.crt ) @@ -33,7 +35,7 @@ run : $(CERT_PATH_FILES) cd -- $(SRC_COMPOSE) mkdir -p $(VOLUMES_PATH)/www mkdir -p $(VOLUMES_PATH)/db - DATABASE_PWD="$(DATABASE_PWD)" VOLUMES_PATH="$(VOLUMES_PATH)" $(DOCKER) compose up --build + $(DOCKER) compose up --build >/dev/null cd - @@ -41,7 +43,9 @@ run : $(CERT_PATH_FILES) reset : @$(_ECHO) - echoo "Removing all data..." + echoo "Resetting data..." + rm -f $(VOLUMES_PATH)/www/.installed + rm -f $(VOLUMES_PATH)/db/.installed cd -- $(SRC_COMPOSE) docker compose down -v >/dev/null cd - diff --git a/env_template b/env_template index 2257a17..8c039c1 100644 --- a/env_template +++ b/env_template @@ -1,3 +1,4 @@ DOMAIN=mcolonna.42.fr DATABASE_PWD=[insert_cool_password_here] +DATABASE_PWD_ROOT=[insert_other_cool_password_here] VOLUMES_PATH=[insert_absolute_path] diff --git a/srcs/docker-compose.yml b/srcs/docker-compose.yml index d9e9bd7..af5d6e2 100644 --- a/srcs/docker-compose.yml +++ b/srcs/docker-compose.yml @@ -34,6 +34,7 @@ services: - db:/db:rw secrets: - database-pwd + - database-pwd-root networks: - network restart: always @@ -55,6 +56,8 @@ volumes: secrets: database-pwd: environment: "DATABASE_PWD" + database-pwd-root: + environment: "DATABASE_PWD_ROOT" networks: network: diff --git a/srcs/requirements/mariadb/Dockerfile b/srcs/requirements/mariadb/Dockerfile index fb783e6..2a38d29 100644 --- a/srcs/requirements/mariadb/Dockerfile +++ b/srcs/requirements/mariadb/Dockerfile @@ -1,15 +1,17 @@ FROM alpine:3.21.3 RUN apk update -RUN apk add mariadb +RUN apk add mariadb mariadb-client RUN apk fix RUN rm -rf /etc/my.cnf.d/ RUN mkdir -p /etc/my.cnf.d/ COPY conf/mariadb-server.cnf /etc/my.cnf.d/mariadb-server.cnf COPY run.sh /run.sh +COPY ismariadbrunning.sh /ismariadbrunning.sh +COPY healthcheck.sh /healthcheck.sh -RUN addgroup -S www && adduser -S www www +RUN addgroup -S db && adduser -S db db RUN mkdir /db RUN chmod -R 666 /db @@ -18,4 +20,4 @@ EXPOSE 3306 # start CMD ["/run.sh"] -HEALTHCHECK --interval=1s --timeout=10s --start-period=600s --retries=1 CMD [ "sh", "-c", "! [ -z \"$(netstat -tuln | grep :3306)\" ]" ] +HEALTHCHECK --interval=1s --timeout=10s --start-period=600s --retries=1 CMD [ "/healthcheck.sh" ] diff --git a/srcs/requirements/mariadb/conf/mariadb-server.cnf b/srcs/requirements/mariadb/conf/mariadb-server.cnf index ce6f9a1..dfef44e 100644 --- a/srcs/requirements/mariadb/conf/mariadb-server.cnf +++ b/srcs/requirements/mariadb/conf/mariadb-server.cnf @@ -1,10 +1,6 @@ [client-server] -socket=/tmp/mysql.sock +socket=/run/mysql.sock port=3306 -[mysqld] -# fix from https://stackoverflow.com/questions/75696472/aborted-connection-3-to-db-unconnected-user-unauthenticated-host-172-21 -skip-grant-tables - [mariadb] datadir=/db diff --git a/srcs/requirements/mariadb/healthcheck.sh b/srcs/requirements/mariadb/healthcheck.sh new file mode 100755 index 0000000..4902823 --- /dev/null +++ b/srcs/requirements/mariadb/healthcheck.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -e + +/ismariadbrunning.sh && [ -f /db/.dockerhealthcheck ] +exit $? diff --git a/srcs/requirements/mariadb/ismariadbrunning.sh b/srcs/requirements/mariadb/ismariadbrunning.sh new file mode 100755 index 0000000..575a58d --- /dev/null +++ b/srcs/requirements/mariadb/ismariadbrunning.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -e + +! [ -z "$(netstat -tuln | grep :3306)" ] +exit $? diff --git a/srcs/requirements/mariadb/run.sh b/srcs/requirements/mariadb/run.sh index 0ca41d3..4f514bb 100755 --- a/srcs/requirements/mariadb/run.sh +++ b/srcs/requirements/mariadb/run.sh @@ -1,29 +1,59 @@ #!/bin/sh set -e -echo - -dirisempty() +sql_quote() { - [ -z "$( ls -A "$1" )" ] + echo "SELECT QUOTE(FROM_BASE64('$( echo -n "$1" | base64 )'));" | mariadb -u root -N } +rm -f /db/.dockerhealthcheck + +echo + # install database if doesn't exist -if dirisempty /db +if ! [ -f /db/.installed ] then - echo "database doesn't exist. creating it..." + echo "database doesn't exist." echo + + echo ">>> clean..." + rm -rf -- $(find /db -mindepth 1 -maxdepth 1) + + echo ">>> creating database..." chmod -R 777 /db - mariadb-install-db --user=www --datadir=/db - echo "creating database..." + mariadb-install-db --user=db --datadir=/db + echo + + echo ">>> running mariadbd..." DATABASE_PWD="$(cat /run/secrets/database-pwd)" - echo ' + DATABASE_PWD_ROOT="$(cat /run/secrets/database-pwd-root)" + # run mariadbd and wait for it to be working + mariadbd -u root & + while ! /ismariadbrunning.sh && kill -0 $! + do sleep 1; done + if ! kill -0 $! + then + echo + echo "failed when running mariadbd :(" + exit 1 + fi + echo + + echo ">>> configure..." + echo " FLUSH PRIVILEGES; CREATE DATABASE wp; - GRANT ALL PRIVILEGES ON wp.* TO www IDENTIFIED BY FROM_BASE64("'$(echo $DATABASE_PWD | base64)'"); + GRANT ALL PRIVILEGES ON wp.* TO db IDENTIFIED BY $( sql_quote "$DATABASE_PWD" ); + ALTER USER root@localhost IDENTIFIED BY $( sql_quote "$DATABASE_PWD_ROOT" ); FLUSH PRIVILEGES; - ' | mariadbd -u root --bootstrap + " | mariadb -u root + kill $! echo + + echo ">>> kill mariadbd..." + >/db/.installed echo "if this file exists, that means the database is entirely installed." + echo + echo "database created!" echo fi @@ -32,4 +62,5 @@ echo "to recreate a new database, remove the db volume of this compose." echo # run mariadb +touch /db/.dockerhealthcheck mariadbd -u root diff --git a/srcs/requirements/nginx/Dockerfile b/srcs/requirements/nginx/Dockerfile index a427065..b29e436 100644 --- a/srcs/requirements/nginx/Dockerfile +++ b/srcs/requirements/nginx/Dockerfile @@ -27,4 +27,4 @@ COPY conf/ /etc/nginx/ # start CMD ["nginx", "-g", "daemon off;"] -HEALTHCHECK --interval=1s --timeout=10s --start-period=60s --retries=1 CMD [ "sh", "-c", "! [ -z \"$(netstat -tuln | grep :443)\" ]" ] +HEALTHCHECK --interval=1s --timeout=10s --start-period=60s --retries=1 CMD [ "/ismariarunning.sh" ] diff --git a/srcs/requirements/wordpress/conf/wwwmore/wp-config.php b/srcs/requirements/wordpress/conf/wwwmore/wp-config.php index 57431bf..1b4379b 100644 --- a/srcs/requirements/wordpress/conf/wwwmore/wp-config.php +++ b/srcs/requirements/wordpress/conf/wwwmore/wp-config.php @@ -23,10 +23,10 @@ define( 'DB_NAME', 'wp' ); /** Database username */ -define( 'DB_USER', 'www' ); +define( 'DB_USER', 'db' ); # TODO /** Database password */ -define( 'DB_PASSWORD', `cat /run/secrets/database-pwd` ); +define( 'DB_PASSWORD', `cat /run/secrets/database-pwd` ); # TODO /** Database hostname */ define( 'DB_HOST', 'mariadb:3306' ); @@ -85,7 +85,7 @@ $table_prefix = 'wp_'; * * @link https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/ */ -define( 'WP_DEBUG', false ); +define( 'WP_DEBUG', true ); # TODO /* Add any custom values between this line and the "stop editing" line. */ diff --git a/srcs/requirements/wordpress/run.sh b/srcs/requirements/wordpress/run.sh index 87345ce..95d29b6 100755 --- a/srcs/requirements/wordpress/run.sh +++ b/srcs/requirements/wordpress/run.sh @@ -8,10 +8,13 @@ dirisempty() [ -z "$( ls -A "$1" )" ] } -if dirisempty /www +if ! [ -f /www/.installed ] then - echo "download and uncompress wordpress release..." + echo "clean..." + rm -rf -- $(find /www -mindepth 1 -maxdepth 1) echo + + echo "download and uncompress wordpress release..." apk add curl apk fix rm -rf /build @@ -24,6 +27,7 @@ then echo "add files from /conf/wwwmore/" echo cp -r /conf/wwwmore/. /www + >/www/.installed echo "if this file exists, that means the database is entirely installed." echo "www directory created!" echo fi