From 7d1791f7af1cd45a1bc282f917b841efe4d819e2 Mon Sep 17 00:00:00 2001 From: "allen.yan" Date: Thu, 18 Sep 2025 14:32:24 +0800 Subject: [PATCH] v0.0.0 --- .DS_Store | Bin 0 -> 8196 bytes .env.example | 11 +++++++++++ .gitattributes | 15 +++++++++++++++ .gitignore | 3 +++ Dockerfile | 10 ++++++++++ README.md | 0 conf.d/galera.cnf.template | 20 ++++++++++++++++++++ docker-compose.yml | 32 ++++++++++++++++++++++++++++++++ entrypoint.sh | 14 ++++++++++++++ 9 files changed, 105 insertions(+) create mode 100644 .DS_Store create mode 100644 .env.example create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 conf.d/galera.cnf.template create mode 100644 docker-compose.yml create mode 100644 entrypoint.sh diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..97f20d1cb591c5efb40121e95b2849646330fb3a GIT binary patch literal 8196 zcmeHMU2GIp6u#fIlo>kE0g4ptgoQ#7vXqt%TPXU1f+tO_*EW0}c9hlCPo!J&B zjg5&f{28A#{`;hn$b$hTzF?vPn)squ?ohRNS7y-QmXDzJiT{~D?-rYDM9{>RWmI;KN_mTIxhccav%Z6&>15K|WmuX$)NJQ0&GCKX zTp>!LlvFB)hga3tMk95#D@US{;ngc@qLKQ#RU;#kIIC*;+8xP*X1`@0=V2gt6|kuV zVVx+9$=qKX&)EF~ciD}J*>nb5_&1B9cs}N@^D#?PO693)SE9Q|?oBE)1}V7q0oSlC zXQ!TZNG6pshmx={V_Vy@x~K2T*k-QZa+1pQOv=pU%#^D)nP%KLs#9N?lgZkqxy^PA zZhf-8faE$FZ|+i$7RWQF4yHL#MHfLA{kmbP@(l={c6)6_|Gm>Fl)G^AMmSlh-e+pm@>(`U>qm*pPHw&fc83_aU9WN2<*cgo4=mS$M{y9N!%NSk_xmFm~0 zBPvN(%PQu~eYjFpCo)as(#D~j;T}<{MA4rkGGCQ@HCo&jTk~eol=C8uL$fcMud2H| zO-oj%S_>SOELG(Whhk7tfnoJ>S?)MUFi{+D3FKN=FRPtqDy^G}Ch>V1SIcVGAkV+@ zM9{guTvikGock$6C+KTxR@FV;w3}0o+diOMw4^J++>ep2$LULD_4XlxY0$fgdi_UA z{hm{sX1KPmq-<=ZD7wAjnl#OiVQ$5oGBvJtipu9AJtD&zG>97XSUE$)s{Es=iY?{0 zRUf1|5dB0;Rk51DL}V&k!CKj7wwGnuFgwMbXJ^aSTu6I8NdePUAVej92j*UdLN_2j_4e z@8Tk^;1hg`FK`{-;d}gmTlfvX#=&&#v4kdmE582zy5@m874try4(MIwwci8mL^ zOGKiIQo@_j%4(6wsR({kuC1(-h=NKHZ$>K{BvAoxtdZAAL`J2UH&r<%Nec5Dl`WNR zA`wav|1P9oW7pXY_A|RpNS}t8sK8>>5WXM925cpSd-(3e9wd=M8XEdxVE~5+>&GyH zCozhraDuRY8qeTaynq++5?;X@c$4sc25%GE-@^sGj}P$?F5z;3`)>&KH}O+|*gTTA zj72hjDMWI=-P#&_>=r+}aq+~>^_QE*+h~7jGtl?v8`NMtYnisSpT^FwZS2zSt5w9k zD!lW5+r;1h?`!PPDa=5afd?Z4C~l3nHq%-sdbfCI?Fe0a>GFzaH_D~&LY03UC+Q!@ mN#6OxknSU7>iNV1Im#vVQ2EzC1pE^}x5NEE-2Wf2{r?a3ueYZF literal 0 HcmV?d00001 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