This commit is contained in:
2025-09-18 14:32:24 +08:00
commit 7d1791f7af
9 changed files with 105 additions and 0 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

11
.env.example Normal file
View File

@@ -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

15
.gitattributes vendored Normal file
View File

@@ -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

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
data
*.cnf
.env

10
Dockerfile Normal file
View File

@@ -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"]

0
README.md Normal file
View File

View File

@@ -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

32
docker-compose.yml Normal file
View File

@@ -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

14
entrypoint.sh Normal file
View File

@@ -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