commit 7d1791f7af1cd45a1bc282f917b841efe4d819e2 Author: allen.yan Date: Thu Sep 18 14:32:24 2025 +0800 v0.0.0 diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..97f20d1 Binary files /dev/null and b/.DS_Store differ diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..294464e --- /dev/null +++ b/.env.example @@ -0,0 +1,11 @@ +MariaDB__MYSQL_ROOT_PASSWORD=MyRootPass +MariaDB__MYSQL_DATABASE=gitea +MariaDB__MYSQL_USER=gitea +MariaDB__MYSQL_PASSWORD=MyPass +MariaDB__CLUSTER_NAME=mariadb_cluster +MariaDB__CLUSTER_ADDRESS=gcomm://192.168.1.101,192.168.1.102,192.168.1.103 +MariaDB__NODE_NAME=SVR01 +MariaDB__NODE_ADDRESS=192.168.1.101 + +# 初次啟動 Bootstrap +MariaDB__BOOTSTRAP=false \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..7f300e2 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,15 @@ +# 所有 Shell 腳本用 LF +*.sh text eol=lf + +# Docker 設定與腳本 +Dockerfile text eol=lf +*.yaml text eol=lf +*.yml text eol=lf + +# Laravel & PHP 設定檔 +*.conf text eol=lf +*.ini text eol=lf +.env* text eol=lf + +# 其他你專案內的自定義目錄內腳本 +docker/** text eol=lf \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a26d3a6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +data +*.cnf +.env \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ce32030 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM mariadb:latest + +RUN apt-get update && apt-get install -y gettext-base netcat-openbsd && rm -rf /var/lib/apt/lists/* + +COPY conf.d/galera.cnf.template /etc/mysql/conf.d/galera.cnf.template +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] +CMD ["mariadbd"] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/conf.d/galera.cnf.template b/conf.d/galera.cnf.template new file mode 100644 index 0000000..7e4931b --- /dev/null +++ b/conf.d/galera.cnf.template @@ -0,0 +1,20 @@ +[mysqld] +# 基本設定 +bind-address=0.0.0.0 +binlog_format=ROW +default_storage_engine=InnoDB +innodb_autoinc_lock_mode=2 +innodb_flush_log_at_trx_commit=0 +query_cache_size=0 +query_cache_type=0 + +# Galera Cluster +wsrep_on=ON +wsrep_provider=/usr/lib/galera/libgalera_smm.so +wsrep_node_name="${MariaDB__NODE_NAME}" +wsrep_node_address="${MariaDB__NODE_ADDRESS}" +wsrep_cluster_name="${MariaDB__CLUSTER_NAME}" +wsrep_cluster_address="${MariaDB__CLUSTER_ADDRESS}" + +# SST (State Snapshot Transfer) +wsrep_sst_method=rsync \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..12417bd --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,32 @@ +services: + mariadb: + build: + context: . + dockerfile: Dockerfile + container_name: ${MariaDB__NODE_NAME} + restart: unless-stopped + environment: + MARIADB_ROOT_PASSWORD: ${MariaDB__MYSQL_ROOT_PASSWORD} + MARIADB_DATABASE: ${MariaDB__MYSQL_DATABASE} + MARIADB_USER: ${MariaDB__MYSQL_USER} + MARIADB_PASSWORD: ${MariaDB__MYSQL_PASSWORD} + MariaDB__BOOTSTRAP: ${MariaDB__BOOTSTRAP} + MariaDB__NODE_NAME: ${MariaDB__NODE_NAME} + MariaDB__NODE_ADDRESS: ${MariaDB__NODE_ADDRESS} + MariaDB__CLUSTER_NAME: ${MariaDB__CLUSTER_NAME} + MariaDB__CLUSTER_ADDRESS: ${MariaDB__CLUSTER_ADDRESS} + volumes: + - ./data:/var/lib/mysql + - ./conf.d:/etc/mysql/conf.d + ports: + - "3306:3306" + - "4567:4567" + - "4567:4567/udp" + - "4568:4568" + - "4444:4444" + networks: + default: + +networks: + default: + name: mariadb_net \ No newline at end of file diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..b826d9b --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,14 @@ +#!/bin/bash +set -e + +# 生成最終的 galera.cnf +# 只替換指定變數 +envsubst '${MariaDB__NODE_NAME} ${MariaDB__NODE_ADDRESS} ${MariaDB__CLUSTER_NAME} ${MariaDB__CLUSTER_ADDRESS}' \ + < /etc/mysql/conf.d/galera.cnf.template > /etc/mysql/conf.d/galera.cnf + +if [ "${MariaDB__BOOTSTRAP}" = "true" ]; then + echo "[INFO] Bootstrapping Galera cluster..." + exec docker-entrypoint.sh mariadbd --wsrep-new-cluster +else + exec docker-entrypoint.sh "$@" +fi \ No newline at end of file