diff --git a/srcs/requirements/mariadb/Dockerfile b/srcs/requirements/mariadb/Dockerfile index 856b7dd..43a5afe 100644 --- a/srcs/requirements/mariadb/Dockerfile +++ b/srcs/requirements/mariadb/Dockerfile @@ -1,16 +1,12 @@ FROM debian:12.5-slim RUN apt-get update && apt-get install -y mariadb-server && rm -rf /var/lib/apt/lists/* -RUN mkdir -p /run/mysqld && chown -R mysql:mysql /var/lib/mysql /run/mysqld -COPY tools/init.sh /init.sh +COPY ./conf/50-server.cnf /etc/mysql/my.cnf +COPY ./conf/50-server.cnf /etc/my.cnf +COPY ./tools/init.sh /init.sh RUN chmod +x /init.sh -ENV MYSQL_ROOT_PASSWORD=rootpassword -ENV MYSQL_DATABASE=wordpress -ENV MYSQL_USER=yantoine -ENV MYSQL_PASSWORD=password - EXPOSE 3306 CMD ["/init.sh"] diff --git a/srcs/requirements/mariadb/conf/50-server.cnf b/srcs/requirements/mariadb/conf/50-server.cnf new file mode 100644 index 0000000..437357b --- /dev/null +++ b/srcs/requirements/mariadb/conf/50-server.cnf @@ -0,0 +1,133 @@ +# +#These groups are read by MariaDB server. +#Use it for options that only the server (but not clients) should see +# +#See the examples of server my.cnf files in /usr/share/mysql + +#this is read by the standalone daemon and embedded servers +[server] + +#this is only for the mysqld standalone daemon +[mysqld] + +# +# * Basic Settings +# +user = mysql +pid-file = /run/mysqld/mysqld.pid +socket = /run/mysqld/mysqld.sock +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +tmpdir = /tmp +lc-messages-dir = /usr/share/mysql +#skip-external-locking + +#Instead of skip-networking the default is now to listen only on +#localhost which is more compatible and is not less secure. +bind-address = 0.0.0.0 + +# +# * Fine Tuning +# +#key_buffer_size = 16M +#max_allowed_packet = 16M +#thread_stack = 192K +#thread_cache_size = 8 +# This replaces the startup script and checks MyISAM tables if needed +# the first time they are touched +#myisam_recover_options = BACKUP +#max_connections = 100 +#table_cache = 64 +#thread_concurrency = 10 + +# +# * Query Cache Configuration +# +#query_cache_limit = 1M +query_cache_size = 16M + +# +# * Logging and Replication +# +# Both location gets rotated by the cronjob. +# Be aware that this log type is a performance killer. +# As of 5.1 you can enable the log at runtime! +#general_log_file = /var/log/mysql/mysql.log +#general_log = 1 +# +# Error log - should be very few entries. +# +log_error = /var/log/mysql/error.log +# +# Enable the slow query log to see queries with especially long duration +#slow_query_log_file = /var/log/mysql/mariadb-slow.log +#long_query_time = 10 +#log_slow_rate_limit = 1000 +#log_slow_verbosity = query_plan +#log-queries-not-using-indexes +# +# The following can be used as easy to replay backup logs or for replication. +# note: if you are setting up a replication slave, see README.Debian about +# other settings you may need to change. +#server-id = 1 +#log_bin = /var/log/mysql/mysql-bin.log +expire_logs_days = 10 +#max_binlog_size = 100M +#binlog_do_db = include_database_name +#binlog_ignore_db = exclude_database_name + +# +# * Security Features +# +# Read the manual, too, if you want chroot! +#chroot = /var/lib/mysql/ +# +# For generating SSL certificates you can use for example the GUI tool "tinyca". +# +#ssl-ca = /etc/mysql/cacert.pem +#ssl-cert = /etc/mysql/server-cert.pem +#ssl-key = /etc/mysql/server-key.pem +# +# Accept only connections using the latest and most secure TLS protocol version. +# ..when MariaDB is compiled with OpenSSL: +#ssl-cipher = TLSv1.2 +# ..when MariaDB is compiled with YaSSL (default in Debian): +#ssl = on + +# +# * Character sets +# +# MySQL/MariaDB default is Latin1, but in Debian we rather default to the full +# utf8 4-byte character set. See also client.cnf +# +character-set-server = utf8mb4 +collation-server = utf8mb4_general_ci + +# +# * InnoDB +# +# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. +# Read the manual for more InnoDB related options. There are many! + +# +# * Unix socket authentication plugin is built-in since 10.0.22-6 +# +# Needed so the root database user can authenticate without a password but +# only when running as the unix root user. +# +# Also available for other users if required. +# See https://mariadb.com/kb/en/unix_socket-authentication-plugin/ + +# this is only for embedded server +[embedded] + +# This group is only read by MariaDB servers, not by MySQL. +# If you use the same .cnf file for MySQL and MariaDB, +# you can put MariaDB-only options here +[mariadb] + +# This group is only read by MariaDB-10.3 servers. +# If you use the same .cnf file for MariaDB of different versions, +# use this group for options that older servers don't understand +[mariadb-10.3] diff --git a/srcs/requirements/mariadb/tools/init.sh b/srcs/requirements/mariadb/tools/init.sh index 3596eb9..9ba1d7a 100644 --- a/srcs/requirements/mariadb/tools/init.sh +++ b/srcs/requirements/mariadb/tools/init.sh @@ -1,21 +1,20 @@ -#!/bin/sh +#!/bin/bash -# Initialisation de la base de données si elle n'existe pas -if [ ! -d "/var/lib/mysql/mysql" ]; then - echo "Initialisation de la base de données..." - - mysqld --user=mysql --bootstrap << EOF -FLUSH PRIVILEGES; -ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}'; -CREATE DATABASE IF NOT EXISTS ${MYSQL_DATABASE}; -CREATE USER '${MYSQL_USER}'@'%' IDENTIFIED BY '${MYSQL_PASSWORD}'; -GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE}.* TO '${MYSQL_USER}'@'%'; -FLUSH PRIVILEGES; -EOF +chown -R mysql: /var/lib/mysql +chmod 777 /var/lib/mysql +if [ ! -d "/var/lib/mysql/$MYSQL_DATABASE" ]; then + rm -f /db1.sql + echo "CREATE DATABASE IF NOT EXISTS $MYSQL_DATABASE ;" > /db1.sql + echo "CREATE USER IF NOT EXISTS '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD' ;" >> /db1.sql + echo "GRANT ALL PRIVILEGES ON $MYSQL_DATABASE.* TO '$MYSQL_USER'@'%' WITH GRANT OPTION;" >> /db1.sql + echo "GRANT ALL PRIVILEGES ON $MYSQL_DATABASE.* TO '$MYSQL_USER'@'localhost' WITH GRANT OPTION;" >> /db1.sql + echo "FLUSH PRIVILEGES;" >> /db1.sql + echo "DROP USER 'root'@'localhost';" >> /db1.sql + echo "CREATE USER 'root'@'localhost' IDENTIFIED BY '$MYSQL_ROOT_PASSWORD';" >> /db1.sql + echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" >> /db1.sql + echo "FLUSH PRIVILEGES;" >> /db1.sql + mariadbd-safe --init-file=/db1.sql > /dev/null 2>&1 else - echo "Base de données déjà initialisée." + mariadbd-safe >/dev/null 2>&1 fi - -exec mysqld_safe --user=mysql -