This commit is contained in:
2025-11-01 21:18:29 +08:00
parent 35478d43d6
commit a607719b46
119 changed files with 815 additions and 1221 deletions

View File

@@ -1,11 +0,0 @@
# 构建 alpine 镜像
## 导入文件
- 本机时区 /etc/localtime
## 定制
- 使用 Asia/Shanghai 时区
- 修改软件源,开启 edge
- 安装 bash curl coreutils iproute2
- 默认语言 en_US.UTF-8

View File

@@ -1,69 +0,0 @@
#!/bin/bash
#=========================================
# Author : colben
#=========================================
set -euo pipefail
export LANG=en_US.UTF-8
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
ROOT_DIR="$(cd $(dirname $0) && pwd)"
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:3.12"
if [ -t 0 ]; then
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
function Warn { echo -e "\033[36;1m$(date +'[%F %T]')\033[33;1m $*\033[0m"; }
function Error { echo -e "\033[36;1m$(date +'[%F %T]')\033[31;1m $*\033[0m"; exit 1; }
else
function Print { echo -e "$(date +'[%F %T INFO]') $*"; }
function Warn { echo -e "$(date +'[%F %T WARN]') $*"; }
function Error { echo -e "$(date +'[%F %T ERROR]') $*"; exit 1; }
fi
function Quit {
local exitCode=$?
[ 0 -ne $exitCode ] && Error Failed to build or push image!
[ -z "${END:-}" ] && echo && Error Interrupted manually!
Print Succeeded to build and push image.
}
function YesOrNo {
Warn $*
local sw=
while :; do
read -p '(Yes/No/Quit) ' -n1 sw
[[ "$sw" =~ ^Y|y$ ]] && echo && return 0
[[ "$sw" =~ ^N|n$ ]] && echo && return 1
[[ "$sw" =~ ^Q|q$ ]] && echo && exit 0
[ -n "$sw" ] && echo
done
}
function Update {
Warn Preparing localtime ...
cd $ROOT_DIR
cp -f /etc/localtime ADD/
}
function Build {
local yn
cd $ROOT_DIR
docker images --format='{{.Repository}}:{{.Tag}}' | grep "^$IMAGE$" \
&& Warn Removing image $IMAGE ... \
&& docker rmi $IMAGE
Warn Building image: $IMAGE ...
docker build --force-rm -t $IMAGE .
YesOrNo Push image: $IMAGE? && docker push $IMAGE
}
function Main {
trap Quit EXIT
Update
Build
END=1
}
# Start here
Main

View File

@@ -1,11 +0,0 @@
# 构建 alpine 镜像
## 导入文件
- 本机时区 /etc/localtime
## 定制
- 使用 Asia/Shanghai 时区
- 修改软件源,开启 edge
- 安装 bash curl coreutils iproute2
- 默认语言 en_US.UTF-8

View File

@@ -1,69 +0,0 @@
#!/bin/bash
#=========================================
# Author : colben
#=========================================
set -euo pipefail
export LANG=en_US.UTF-8
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
ROOT_DIR="$(cd $(dirname $0) && pwd)"
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:3.15"
if [ -t 0 ]; then
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
function Warn { echo -e "\033[36;1m$(date +'[%F %T]')\033[33;1m $*\033[0m"; }
function Error { echo -e "\033[36;1m$(date +'[%F %T]')\033[31;1m $*\033[0m"; exit 1; }
else
function Print { echo -e "$(date +'[%F %T INFO]') $*"; }
function Warn { echo -e "$(date +'[%F %T WARN]') $*"; }
function Error { echo -e "$(date +'[%F %T ERROR]') $*"; exit 1; }
fi
function Quit {
local exitCode=$?
[ 0 -ne $exitCode ] && Error Failed to build or push image!
[ -z "${END:-}" ] && echo && Error Interrupted manually!
Print Succeeded to build and push image.
}
function YesOrNo {
Warn $*
local sw=
while :; do
read -p '(Yes/No/Quit) ' -n1 sw
[[ "$sw" =~ ^Y|y$ ]] && echo && return 0
[[ "$sw" =~ ^N|n$ ]] && echo && return 1
[[ "$sw" =~ ^Q|q$ ]] && echo && exit 0
[ -n "$sw" ] && echo
done
}
function Update {
Warn Preparing localtime ...
cd $ROOT_DIR
cp -f /etc/localtime ADD/
}
function Build {
local yn
cd $ROOT_DIR
docker images --format='{{.Repository}}:{{.Tag}}' | grep "^$IMAGE$" \
&& Warn Removing image $IMAGE ... \
&& docker rmi $IMAGE
Warn Building image: $IMAGE ...
docker build --force-rm -t $IMAGE .
YesOrNo Push image: $IMAGE? && docker push $IMAGE
}
function Main {
trap Quit EXIT
Update
Build
END=1
}
# Start here
Main

View File

@@ -1,5 +1,5 @@
ARG ARCH ARG ARCH
FROM harbor.colben.cn/general/alpine$ARCH FROM harbor.colben.cn/general/alpine$ARCH:3.20
MAINTAINER Colben colbenlee@gmail.com MAINTAINER Colben colbenlee@gmail.com
RUN apk update \ RUN apk update \
&& apk add --no-cache linux-headers libc-dev gcc python3 python3-dev py3-pip \ && apk add --no-cache linux-headers libc-dev gcc python3 python3-dev py3-pip \

14
alpine/Dockerfile-3.17 Normal file
View File

@@ -0,0 +1,14 @@
FROM alpine:3.17
MAINTAINER Colben colbenlee@gmail.com
ADD --chown=root:root /ADD/ /etc/
RUN echo -e 'https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.17/main\n\
https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.17/community\n\
' > /etc/apk/repositories \
&& apk update \
&& apk add --no-cache bash curl coreutils iproute2 \
&& echo "alias ls='ls --color=auto'" >> /root/.bashrc \
&& rm -rf /var/cache/apk/*
ENV PS1='\[\e[33;1;1m\][\[\e[0m\]\[\e[35;1m\]\u\[\e[0m\]\[\e[33;1;1m\]@\[\e[0m\]\[\e[31;1;1m\]docker\[\e[0m\]\[\e[32;1;1m\](\h)\[\e[0m\]\[\e[33;1;1m\]:\[\e[0m\]\[\e[32m\]\w\[\e[0m\]\[\e[33;1;1m\]]\[\e[0m\]\[\e[36m\]\$\[\e[0m\] '
ENV PS2='\[\e[36m\]>\[\e[0m\] '
ENV LANG=en_US.UTF-8

View File

@@ -9,7 +9,8 @@ export LANG=en_US.UTF-8
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)" [ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
ROOT_DIR="$(cd $(dirname $0) && pwd)" ROOT_DIR="$(cd $(dirname $0) && pwd)"
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:latest" TAG=$1
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:$TAG"
if [ -t 0 ]; then if [ -t 0 ]; then
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; } function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
@@ -53,7 +54,7 @@ function Build {
&& Warn Removing image $IMAGE ... \ && Warn Removing image $IMAGE ... \
&& docker rmi $IMAGE && docker rmi $IMAGE
Warn Building image: $IMAGE ... Warn Building image: $IMAGE ...
docker build --force-rm -t $IMAGE . docker build --force-rm -t $IMAGE -f Dockerfile-$TAG .
YesOrNo Push image: $IMAGE? && docker push $IMAGE YesOrNo Push image: $IMAGE? && docker push $IMAGE
} }

View File

@@ -12,8 +12,10 @@ trap Quit EXIT
PIDS= PIDS=
GOT_SIGTERM= GOT_SIGTERM=
LOG_DIR='/var/log/cloudreve' LOG_DIR=/var/log/cloudreve
DATA_DIR='/var/lib/cloudreve' DATA_DIR=/var/lib/cloudreve
SOCK_FILE=/sock/cloudreve
CONF_FILE=$DATA_DIR/cloudreve.ini
function Print { function Print {
local file=/dev/null local file=/dev/null
@@ -32,9 +34,8 @@ function Quit {
} }
function ModifyConf { function ModifyConf {
[ -e $DATA_DIR/cloudreve.ini ] && return 0 Print Generating $CONF_FILE ...
Print Generating cloudreve.ini ... cat > $CONF_FILE <<-EOF
cat > $DATA_DIR/cloudreve.ini <<-EOF
[System] [System]
Debug = false Debug = false
Mode = master Mode = master
@@ -43,7 +44,8 @@ SessionSecret = $(date +%F | sha256sum | cut -c -64)
HashIDSalt = $(date +%T | sha256sum | cut -c -64) HashIDSalt = $(date +%T | sha256sum | cut -c -64)
#[UnixSocket] #[UnixSocket]
#Listen = /socket/cloudreve #Listen = $SOCK_FILE
#Perm = 0666
[Database] [Database]
DBFile = $DATA_DIR/cloudreve.db DBFile = $DATA_DIR/cloudreve.db
@@ -71,15 +73,17 @@ EOF
function StartProc { function StartProc {
Print Starting cloudreve ... Print Starting cloudreve ...
rm -f /socket/cloudreve cd $DATA_DIR
/opt/cloudreve -c $DATA_DIR/cloudreve.ini &>> $LOG_DIR/cloudreve.out & /opt/cloudreve -c cloudreve.ini &>> $LOG_DIR/cloudreve.out &
PIDS="$PIDS $!" PIDS="$PIDS $!"
sleep 8
[ -e $SOCK_FILE ] && chmod 0666 $SOCK_FILE
Print Cloudreve started. Print Cloudreve started.
} }
function Main { function Main {
local pid= local pid=
ModifyConf [ -e $CONF_FILE ] || ModifyConf
StartProc StartProc
trap "GOT_SIGTERM=1; Print Got SIGTERM ..." SIGTERM trap "GOT_SIGTERM=1; Print Got SIGTERM ..." SIGTERM
while [ -z "$GOT_SIGTERM" ] && sleep 2; do while [ -z "$GOT_SIGTERM" ] && sleep 2; do

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
rsync: rsync:
image: harbor.colben.cn/general/cloudreve image: harbor.boyachain.cn:20443/general/cloudreve
container_name: cloudreve container_name: cloudreve
restart: "on-failure" restart: "on-failure"
stop_grace_period: 1m stop_grace_period: 1m

View File

@@ -2,6 +2,7 @@ ARG ARCH
FROM harbor.colben.cn/general/photon$ARCH:4 FROM harbor.colben.cn/general/photon$ARCH:4
MAINTAINER Colben colbenlee@gmail.com MAINTAINER Colben colbenlee@gmail.com
ADD --chown=root:root /ADD/ /opt/ ADD --chown=root:root /ADD/ /opt/
RUN mkdir -p /var/{log,lib}/cloudreve RUN mkdir -p /var/{log,lib}/cloudreve /sock
ENV GIN_MODE=release
CMD ["/opt/ccmd"] CMD ["/opt/ccmd"]

View File

@@ -43,13 +43,6 @@ function YesOrNo {
function Update { function Update {
Warn Preparing cloudreve ... Warn Preparing cloudreve ...
cd $ROOT_DIR/ADD cd $ROOT_DIR/ADD
if [ -z "$ARCH" ]; then
tar zxf $(ls /release/RUNTIME/cloudreve_*_linux_amd64.tar.gz|tail -1)
elif [ 'aarch64' == "$ARCH" ]; then
tar zxf $(ls /release/RUNTIME/cloudreve_*_linux_arm64.tar.gz|tail -1)
else
Error Not supported arch: $ARCH!
fi
chmod 0755 cloudreve chmod 0755 cloudreve
} }

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
datax1: datax1:
image: harbor.colben.cn/general/datax image: harbor.boyachain.cn:20443/general/datax
container_name: datax1 container_name: datax1
restart: "no" restart: "no"
stop_grace_period: 1m stop_grace_period: 1m
@@ -22,7 +22,7 @@ services:
target: /opt/datax/log_perf target: /opt/datax/log_perf
datax2: datax2:
image: harbor.colben.cn/general/datax image: harbor.boyachain.cn:20443/general/datax
container_name: datax2 container_name: datax2
restart: "no" restart: "no"
stop_grace_period: 1m stop_grace_period: 1m

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
datax: datax:
image: harbor.colben.cn/general/datax image: harbor.boyachain.cn:20443/general/datax
container_name: datax container_name: datax
restart: "no" restart: "no"
stop_grace_period: 1m stop_grace_period: 1m

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
es: es:
image: harbor.colben.cn/general/elasticsearch:6 image: harbor.boyachain.cn:20443/general/elasticsearch:6
container_name: es container_name: es
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
es1: es1:
image: harbor.colben.cn/general/elasticsearch:6 image: harbor.boyachain.cn:20443/general/elasticsearch:6
container_name: es1 container_name: es1
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m
@@ -37,7 +37,7 @@ services:
target: /opt/es/offline-plugins target: /opt/es/offline-plugins
es2: es2:
image: harbor.colben.cn/general/elasticsearch:6 image: harbor.boyachain.cn:20443/general/elasticsearch:6
container_name: es2 container_name: es2
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m
@@ -72,7 +72,7 @@ services:
target: /opt/es/offline-plugins target: /opt/es/offline-plugins
es3: es3:
image: harbor.colben.cn/general/elasticsearch:6 image: harbor.boyachain.cn:20443/general/elasticsearch:6
container_name: es3 container_name: es3
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
es-master1: es-master1:
image: harbor.colben.cn/general/elasticsearch:7 image: harbor.boyachain.cn:20443/general/elasticsearch:7
container_name: es-master1 container_name: es-master1
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m
@@ -48,7 +48,7 @@ services:
target: /opt/es/offline-plugins target: /opt/es/offline-plugins
es-master2: es-master2:
image: harbor.colben.cn/general/elasticsearch:7 image: harbor.boyachain.cn:20443/general/elasticsearch:7
container_name: es-master2 container_name: es-master2
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m
@@ -93,7 +93,7 @@ services:
target: /opt/es/offline-plugins target: /opt/es/offline-plugins
es-data1: es-data1:
image: harbor.colben.cn/general/elasticsearch:7 image: harbor.boyachain.cn:20443/general/elasticsearch:7
container_name: es-data1 container_name: es-data1
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m
@@ -138,7 +138,7 @@ services:
target: /opt/es/offline-plugins target: /opt/es/offline-plugins
es-data2: es-data2:
image: harbor.colben.cn/general/elasticsearch:7 image: harbor.boyachain.cn:20443/general/elasticsearch:7
container_name: es-data2 container_name: es-data2
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m
@@ -183,7 +183,7 @@ services:
target: /opt/es/offline-plugins target: /opt/es/offline-plugins
es-data3: es-data3:
image: harbor.colben.cn/general/elasticsearch:7 image: harbor.boyachain.cn:20443/general/elasticsearch:7
container_name: es-data3 container_name: es-data3
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
es: es:
image: harbor.colben.cn/general/elasticsearch:7 image: harbor.boyachain.cn:20443/general/elasticsearch:7
container_name: es container_name: es
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
es1: es1:
image: harbor.colben.cn/general/elasticsearch:7 image: harbor.boyachain.cn:20443/general/elasticsearch:7
container_name: es1 container_name: es1
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m
@@ -47,7 +47,7 @@ services:
target: /opt/es/offline-plugins target: /opt/es/offline-plugins
es2: es2:
image: harbor.colben.cn/general/elasticsearch:7 image: harbor.boyachain.cn:20443/general/elasticsearch:7
container_name: es2 container_name: es2
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m
@@ -91,7 +91,7 @@ services:
target: /opt/es/offline-plugins target: /opt/es/offline-plugins
es3: es3:
image: harbor.colben.cn/general/elasticsearch:7 image: harbor.boyachain.cn:20443/general/elasticsearch:7
container_name: es3 container_name: es3
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
gitea: gitea:
image: harbor.colben.cn/general/gitea image: harbor.boyachain.cn:20443/general/gitea
container_name: gitea container_name: gitea
restart: on-failure restart: on-failure
stop_grace_period: 1m stop_grace_period: 1m
@@ -23,7 +23,7 @@ services:
target: /socket target: /socket
nginx: nginx:
image: harbor.colben.cn/general/nginx image: harbor.boyachain.cn:20443/general/nginx
container_name: nginx container_name: nginx
restart: on-failure restart: on-failure
stop_grace_period: 1m stop_grace_period: 1m

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
gitea: gitea:
image: harbor.colben.cn/general/gitea image: harbor.boyachain.cn:20443/general/gitea
container_name: gitea container_name: gitea
restart: "on-failure" restart: "on-failure"
stop_grace_period: 1m stop_grace_period: 1m

View File

@@ -9,8 +9,7 @@ export LANG=en_US.UTF-8
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)" [ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
ROOT_DIR="$(cd $(dirname $0) && pwd)" ROOT_DIR="$(cd $(dirname $0) && pwd)"
VERSION=$1 IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:latest"
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:$VERSION"
if [ -t 0 ]; then if [ -t 0 ]; then
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; } function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
@@ -43,7 +42,6 @@ function YesOrNo {
function Update { function Update {
cd $ROOT_DIR cd $ROOT_DIR
cp -f ADD/gitea-$VERSION ADD/gitea
chmod 0755 ADD/gitea chmod 0755 ADD/gitea
} }

View File

@@ -31,10 +31,10 @@ function Print {
} }
function Quit { function Quit {
Print killing greatsql ... Print killing greatsqld ...
greatsqladmin shutdown || true greatsqladmin shutdown || true
while :; do while :; do
pkill -f greatsqld && Print killing greatsql ... || break pkill -f greatsqld && Print killing greatsqld ... || break
sleep 1 sleep 1
done done
Print Container stopped. Print Container stopped.
@@ -57,20 +57,35 @@ function Init {
} }
function ImportInitSql { function ImportInitSql {
local sql_file= sql_files= local sql_file=
mysql -e "CREATE USER docker@localhost IDENTIFIED BY 'China_19\$(10)!'" local sql_files=
mysql -e "GRANT SHUTDOWN ON *.* TO docker@localhost" greatsql -e "CREATE USER docker@localhost IDENTIFIED BY 'China_19\$(10)!'"
greatsql -e "GRANT RELOAD,SHUTDOWN ON *.* TO docker@localhost"
if sql_files="$(ls $LOG_DIR/init_sql/*.sql 2>/dev/null)"; then if sql_files="$(ls $LOG_DIR/init_sql/*.sql 2>/dev/null)"; then
Print Importing the sql files ... Print Importing the sql files ...
for sql_file in $sql_files; do for sql_file in $sql_files; do
Print Importing $sql_file ... Print Importing $sql_file ...
mysql < $sql_file greatsql < $sql_file
done done
Print Imported all sql files successfully. Print Imported all sql files successfully.
fi fi
} }
function SideCar {
local day=
local last_day=$(date +%d)
while sleep 8; do
day=$(date +%d) \
&& [ "$day" != "$last_day" ] \
&& last_day=$day \
&& find $LOG_DIR -type f -name "*.log" \
| xargs -I ^ mv -f ^ ^.$(date +%F -d yesterday) \
&& greatsqladmin flush-logs
done
}
function StartProc { function StartProc {
Print Starting greatsql ...
greatsqld & greatsqld &
PIDS="$PIDS $!" PIDS="$PIDS $!"
while sleep 1; do while sleep 1; do
@@ -79,12 +94,13 @@ function StartProc {
done done
echo echo
[ -z "$INIT_FLAG" ] || ImportInitSql [ -z "$INIT_FLAG" ] || ImportInitSql
SideCar &
PIDS="$PIDS $!"
Print GreatSQL is ready for connections. Print GreatSQL is ready for connections.
} }
function Main { function Main {
local pid= local pid=
Print Starting greatsql ...
Init Init
StartProc StartProc
trap "GOT_SIGTERM=1; Print Got SIGTERM ..." SIGTERM trap "GOT_SIGTERM=1; Print Got SIGTERM ..." SIGTERM

View File

@@ -3,27 +3,14 @@ FROM harbor.colben.cn/general/rocky$ARCH:8
MAINTAINER Colben colbenlee@gmail.com MAINTAINER Colben colbenlee@gmail.com
ARG BUNDLE_FILE ARG BUNDLE_FILE
ADD --chown=root:root /ADD/ /opt/ ADD --chown=root:root /ADD/ /opt/
RUN echo -e 'fs.file-max = 1000000\n\ RUN echo -e '[epel]\n\
net.core.somaxconn = 32768\n\
net.ipv4.tcp_syncookies = 0\n\
vm.overcommit_memory = 1\n\
' >> /etc/sysctl.conf \
&& echo -e '\n\
mysql soft nofile 65535\n\
mysql hard nofile 65535\n\
mysql soft stack 32768\n\
mysql hard stack 32768\n\
mysql soft nproc 65535\n\
mysql hard nproc 65535\n\
' >> /etc/security/limits.conf \
&& echo -e '[epel]\n\
name=Extra Packages for Enterprise Linux $releasever - $basearch\n\ name=Extra Packages for Enterprise Linux $releasever - $basearch\n\
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/Everything/$basearch\n\ baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/Everything/$basearch\n\
enabled=1\n\ enabled=1\n\
gpgcheck=0\n\ gpgcheck=0\n\
' > /etc/yum.repos.d/epel.repo \ ' > /etc/yum.repos.d/epel.repo \
&& dnf makecache \ && microdnf makecache \
&& dnf -y install xz pkg-config perl libaio-devel numactl-devel numactl-libs net-tools openssl openssl-devel jemalloc jemalloc-devel perl-Data-Dumper perl-Digest-MD5 python2 perl-JSON perl-Test-Simple \ && microdnf install xz pkg-config perl libaio-devel numactl-devel numactl-libs net-tools openssl openssl-devel jemalloc jemalloc-devel perl-Data-Dumper perl-Digest-MD5 python2 perl-JSON perl-Test-Simple \
&& curl -LO http://10.11.0.1:10080/$BUNDLE_FILE \ && curl -LO http://10.11.0.1:10080/$BUNDLE_FILE \
&& tar xf $BUNDLE_FILE -C /tmp/ \ && tar xf $BUNDLE_FILE -C /tmp/ \
&& rm -f /tmp/greatsql-devel* /tmp/greatsql-mysql-router-* \ && rm -f /tmp/greatsql-devel* /tmp/greatsql-mysql-router-* \
@@ -33,7 +20,7 @@ gpgcheck=0\n\
&& ln -s /usr/bin/mysqldump /usr/bin/greatsqldump \ && ln -s /usr/bin/mysqldump /usr/bin/greatsqldump \
&& ln -s /usr/bin/mysqladmin /usr/bin/greatsqladmin \ && ln -s /usr/bin/mysqladmin /usr/bin/greatsqladmin \
&& rm -rf /usr/sbin/mysqld-debug \ && rm -rf /usr/sbin/mysqld-debug \
/var/cache/dnf \ /var/cache/yum \
/var/lib/dnf \ /var/lib/dnf \
/var/log/* \ /var/log/* \
/etc/my.cnf.d \ /etc/my.cnf.d \
@@ -99,6 +86,19 @@ lower-case-table-names = 1\n\
[mysqladmin]\n\ [mysqladmin]\n\
user = docker\n\ user = docker\n\
password = China_19$(10)!\n\ password = China_19$(10)!\n\
' > /etc/mysql/my.cnf ' > /etc/mysql/my.cnf \
&& echo -e 'fs.file-max = 1000000\n\
net.core.somaxconn = 32768\n\
net.ipv4.tcp_syncookies = 0\n\
vm.overcommit_memory = 1\n\
' >> /etc/sysctl.conf \
&& echo -e '\n\
mysql soft nofile 65535\n\
mysql hard nofile 65535\n\
mysql soft stack 32768\n\
mysql hard stack 32768\n\
mysql soft nproc 65535\n\
mysql hard nproc 65535\n\
' >> /etc/security/limits.conf
CMD ["/opt/ccmd"] CMD ["/opt/ccmd"]

View File

@@ -9,7 +9,8 @@ export LANG=en_US.UTF-8
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)" [ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
ROOT_DIR="$(cd $(dirname $0) && pwd)" ROOT_DIR="$(cd $(dirname $0) && pwd)"
IMAGE="harbor.colben.cn/general/greatsql$ARCH:8" TAG=$1
IMAGE="harbor.colben.cn/general/greatsql$ARCH:$TAG"
BUNDLE_FILE= BUNDLE_FILE=
if [ -t 0 ]; then if [ -t 0 ]; then
@@ -24,7 +25,7 @@ fi
function Quit { function Quit {
local exitCode=$? local exitCode=$?
pkill -f '^python2 -m SimpleHTTPServer 10080$' || true pkill -f '^python -m http.server 10080' || true
[ 0 -ne $exitCode ] && Error Failed to build or push image! [ 0 -ne $exitCode ] && Error Failed to build or push image!
[ -z "${END:-}" ] && echo && Error Interrupted manually! [ -z "${END:-}" ] && echo && Error Interrupted manually!
Print Succeeded to build and push image. Print Succeeded to build and push image.
@@ -46,14 +47,14 @@ function Update {
Warn Check files ... Warn Check files ...
cd /release/RUNTIME cd /release/RUNTIME
if [ -z "$ARCH" ]; then if [ -z "$ARCH" ]; then
BUNDLE_FILE=greatsql-8.0.32-26.1.el8.amd64.rpm-bundle.tar.xz BUNDLE_FILE=greatsql-8.0.32-27.1.el8.amd64.rpm-bundle.tar.xz
elif [ '-aarch64' == "$ARCH" ]; then elif [ '-aarch64' == "$ARCH" ]; then
BUNDLE_FILE=greatsql-8.0.32-26.1.el8.arm64.rpm-bundle.tar.xz BUNDLE_FILE=greatsql-8.0.32-27.1.el8.arm64.rpm-bundle.tar.xz
else else
Error Unknown arch: $ARCH! Error Unknown arch: $ARCH!
fi fi
[ -e $BUNDLE_FILE ] || Error Not found $BUNDLE_FILE! [ -e $BUNDLE_FILE ] || Error Not found $BUNDLE_FILE!
python2 -m SimpleHTTPServer 10080 &>/dev/null & /usr/libexec/platform-python -m http.server 10080 &>/dev/null &
} }
function Build { function Build {
@@ -63,7 +64,7 @@ function Build {
&& Warn Removing image $IMAGE ... \ && Warn Removing image $IMAGE ... \
&& docker rmi $IMAGE && docker rmi $IMAGE
Warn Building image: $IMAGE ... Warn Building image: $IMAGE ...
docker build --force-rm --build-arg ARCH="$ARCH" --build-arg BUNDLE_FILE="$BUNDLE_FILE" -t $IMAGE -f Dockerfile-greatsql8 . docker build --force-rm --build-arg ARCH="$ARCH" --build-arg BUNDLE_FILE="$BUNDLE_FILE" -t $IMAGE -f Dockerfile-$TAG .
YesOrNo Push image: $IMAGE? && docker push $IMAGE YesOrNo Push image: $IMAGE? && docker push $IMAGE
} }

View File

@@ -1,7 +1,11 @@
ARG ARCH ARG ARCH
FROM harbor.colben.cn/general/photon$ARCH FROM harbor.colben.cn/general/photon$ARCH:4
MAINTAINER Colben colbenlee@gmail.com MAINTAINER Colben colbenlee@gmail.com
ADD --chown=root:root /ADD/ /opt/ ADD --chown=root:root /ADD/ /opt/
RUN tdnf makecache \
&& tdnf -y install fontconfig dejavu-fonts \
&& fc-cache -fv \
&& rm -rf /var/cache/tdnf
ENV JAVA_HOME=/opt/jdk ENV JAVA_HOME=/opt/jdk
ENV JRE_HOME=${JAVA_HOME}/jre ENV JRE_HOME=${JAVA_HOME}/jre
ENV CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib ENV CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

109
kafka/ADD-4/ccmd Executable file
View File

@@ -0,0 +1,109 @@
#!/bin/bash
##################################################
# Mount dir #
# - /opt/kafka/data #
# - /opt/kafka/logs #
# ENV #
# - CONF #
# - CLUSTER_ID #
# - LEAD_CONTROLLER #
# - KAFKA_HEAP_OPTS #
# - EXTRA_ARGS #
# - _CONF_* #
##################################################
set -euo pipefail
export LANG=en_US.UTF-8
trap Quit EXIT
PIDS=
GOT_SIGTERM=
CONF=${CONF:?}
CONF_FILE=config/$CONF.properties
CLUSTER_ID=${CLUSTER_ID:?}
LEAD_CONTROLLER=${LEAD_CONTROLLER:-}
function Print {
local file=/dev/null
[ '-f' = "$1" ] && file=$2 && shift && shift
date +"[%F %T] $*" | tee -a $file
}
function Quit {
while :; do
pkill -f java && Print killing java ... || break
sleep 1
done
Print Container stopped.
test -n "$GOT_SIGTERM"
}
function Usage {
Print 'This container should run with
**root user**
**/opt/kafka/{data,logs} mounted from host**
'
}
function ModifyConf {
local kv=
! cp -f $CONF_FILE.origin $CONF_FILE \
&& Print Skipped modifying $CONF_FILE ... \
&& return 0
Print Modifying $CONF_FILE ...
echo -e "\n#### Docker" >> $CONF_FILE
while read kv; do
[ -z "$kv" ] && break
Print Modifying property: ${kv%%=*} ...
sed -i "/^${kv%%=*} *=/d" $CONF_FILE
echo "$kv" >> $CONF_FILE
done <<< "$(env | grep '^_CONF_' | sed 's/_CONF_//')"
}
function StartProc {
[[ ! "$CONF" =~ ^broker|controller|server$ ]] \
&& Print Unknown conf: $CONF! \
&& exit 1
Print Formatting storage ...
if [ -z "$LEAD_CONTROLLER" -a 'broker' != "$CONF" ]; then
kafka-storage.sh format -g -t $CLUSTER_ID -c $CONF_FILE -s
else
kafka-storage.sh format -g -t $CLUSTER_ID -c $CONF_FILE -N
fi
Print Starting kafka ...
kafka-server-start.sh $CONF_FILE &>> logs/kafka.out &
PIDS="$PIDS $!"
Print Kafka started.
[ -e data/$CONF.lock ] && return 0
[ -z "$LEAD_CONTROLLER" -o 'broker' == "$CONF" ] \
&& touch data/$CONF.lock \
&& return 0
Print Join in kraft cluster with $LEAD_CONTROLLER after 10s ...
sleep 10
[ ! -e /proc/$! ] && Print Unexpected error! && exit
timeout 10 kafka-metadata-quorum.sh --command-config $CONF_FILE \
--bootstrap-controller $LEAD_CONTROLLER add-controller \
&& touch data/$CONF.lock \
&& return 0
Print Failed to join cluster with $LEAD_CONTROLLER!
exit 1
}
function Main {
local pid=
cd /opt/kafka
Usage
ModifyConf
StartProc
trap "GOT_SIGTERM=1; Print Got SIGTERM ..." SIGTERM
while [ -z "$GOT_SIGTERM" ] && sleep 2; do
for pid in $PIDS; do
[ ! -e /proc/$pid ] && Print Unexpected error! && exit
done
done
}
# Start here
Main

View File

@@ -0,0 +1,31 @@
# 部署 kafka 集群
- 根据实际环境修改 docker-compose.yml
* CONF: 这里启动三个 controller 节点和两个 brocker 节点,可用于线上
* CLUSTER_ID: 这里要替换成完全一样的 uuid生成命令
```
docker run --rm harbor.boyachain.cn:20443/general/kafka:4.0 kafka-storage.sh random-uuid
```
* LEAD_CONTROLLER: 指定 bootstrap kraft 集群的节点 **controller 地址**bootstrap kraft 集群的**第一个节点不能设置该变量**broker 节点无需设置该变量
- 创建目录
```
grep '\<source:' docker-compose.yml | cut -d: -f2 | xargs mkdir -p
```
- 启动
```
docker-compose up -d
```
- 查看集群状态
```
docker exec kafka-controller2 kafka-metadata-quorum.sh \
--bootstrap-controller 127.10.11.3:9093 \
describe --status
docker exec kafka-broker2 kafka-metadata-quorum.sh \
--bootstrap-controller 127.10.11.2:9093 \
describe --replication
```

View File

@@ -0,0 +1,123 @@
services:
kafka-controller1:
image: harbor.boyachain.cn:20443/general/kafka:4.0
container_name: kafka-controller1
restart: no
environment:
CONF: controller
CLUSTER_ID: xxxx
_CONF_node.id: 1
_CONF_controller.quorum.bootstrap.servers: 127.10.11.1:9093,127.10.11.2:9093,127.10.11.3:9093
_CONF_listeners: CONTROLLER://127.10.11.1:9093
_CONF_offsets.topic.replication.factor: 3
_CONF_share.coordinator.state.topic.replication.factor: 3
_CONF_share.coordinator.state.topic.min.isr: 3
_CONF_transaction.state.log.replication.factor: 3
_CONF_transaction.state.log.min.isr: 3
network_mode: host
volumes:
- type: bind
source: ./kafka-controller1/data
target: /opt/kafka/data
- type: bind
source: ./kafka-controller1/logs
target: /opt/kafka/logs
kafka-controller2:
image: harbor.boyachain.cn:20443/general/kafka:4.0
container_name: kafka-controller2
restart: no
environment:
CONF: controller
CLUSTER_ID: xxxx
LEAD_CONTROLLER: 127.10.11.1:9093
_CONF_node.id: 2
_CONF_controller.quorum.bootstrap.servers: 127.10.11.1:9093,127.10.11.2:9093,127.10.11.3:9093
_CONF_listeners: CONTROLLER://127.10.11.2:9093
_CONF_offsets.topic.replication.factor: 3
_CONF_share.coordinator.state.topic.replication.factor: 3
_CONF_share.coordinator.state.topic.min.isr: 3
_CONF_transaction.state.log.replication.factor: 3
_CONF_transaction.state.log.min.isr: 3
network_mode: host
volumes:
- type: bind
source: ./kafka-controller2/data
target: /opt/kafka/data
- type: bind
source: ./kafka-controller2/logs
target: /opt/kafka/logs
kafka-controller3:
image: harbor.boyachain.cn:20443/general/kafka:4.0
container_name: kafka-controller3
restart: no
environment:
CONF: controller
CLUSTER_ID: xxxx
LEAD_CONTROLLER: 127.10.11.1:9093
_CONF_node.id: 3
_CONF_controller.quorum.bootstrap.servers: 127.10.11.1:9093,127.10.11.2:9093,127.10.11.3:9093
_CONF_listeners: CONTROLLER://127.10.11.3:9093
_CONF_offsets.topic.replication.factor: 3
_CONF_share.coordinator.state.topic.replication.factor: 3
_CONF_share.coordinator.state.topic.min.isr: 3
_CONF_transaction.state.log.replication.factor: 3
_CONF_transaction.state.log.min.isr: 3
network_mode: host
volumes:
- type: bind
source: ./kafka-controller3/data
target: /opt/kafka/data
- type: bind
source: ./kafka-controller3/logs
target: /opt/kafka/logs
kafka-broker10:
image: harbor.boyachain.cn:20443/general/kafka:4.0
container_name: kafka-broker1
restart: no
environment:
CONF: broker
CLUSTER_ID: xxxx
_CONF_node.id: 10
_CONF_controller.quorum.bootstrap.servers: 127.10.11.1:9093,127.10.11.2:9093,127.10.11.3:9093
_CONF_listeners: PLAINTEXT://127.10.11.10:9092
_CONF_offsets.topic.replication.factor: 3
_CONF_share.coordinator.state.topic.replication.factor: 3
_CONF_share.coordinator.state.topic.min.isr: 3
_CONF_transaction.state.log.replication.factor: 3
_CONF_transaction.state.log.min.isr: 3
network_mode: host
volumes:
- type: bind
source: ./kafka-broker1/data
target: /opt/kafka/data
- type: bind
source: ./kafka-broker1/logs
target: /opt/kafka/logs
kafka-broker11:
image: harbor.boyachain.cn:20443/general/kafka:4.0
container_name: kafka-broker11
restart: no
environment:
CONF: broker
CLUSTER_ID: xxxx
_CONF_node.id: 11
_CONF_controller.quorum.bootstrap.servers: 127.10.11.1:9093,127.10.11.2:9093,127.10.11.3:9093
_CONF_listeners: PLAINTEXT://127.10.11.11:9092
_CONF_offsets.topic.replication.factor: 3
_CONF_share.coordinator.state.topic.replication.factor: 3
_CONF_share.coordinator.state.topic.min.isr: 3
_CONF_transaction.state.log.replication.factor: 3
_CONF_transaction.state.log.min.isr: 3
network_mode: host
volumes:
- type: bind
source: ./kafka-broker11/data
target: /opt/kafka/data
- type: bind
source: ./kafka-broker11/logs
target: /opt/kafka/logs

View File

@@ -1,7 +1,11 @@
# 部署 kafka 单节点 # 部署 kafka 单节点
- 根据实际环境修改 - 根据实际环境修改 docker-compose.yml
- docker-compose.yml * CONF: 单节点只能用 server, 使用内置的 server 配置文件,该文件中默认配置的角色是 "controller,broker"
* CLUSTER_ID: 这里要替换成 uuid生成命令
```
docker run --rm harbor.boyachain.cn:20443/general/kafka:4.0 kafka-storage.sh random-uuid
```
- 创建目录 - 创建目录
``` ```

View File

@@ -1,38 +1,16 @@
version: "3.7"
services: services:
zk:
image: harbor.colben.cn/general/zookeeper:3.6
container_name: zk
restart: on-failure
environment:
MYID: 1
JVMFLAGS: "-Xmx1G -Xms1G"
_CONF_reconfigEnabled: "false"
_CONF_standaloneEnabled: "true"
_CONF_clientPort: 2181
networks:
kafka:
volumes:
- type: bind
source: ./zk/dataLog
target: /opt/zk/dataLog
- type: bind
source: ./zk/data
target: /opt/zk/data
- type: bind
source: ./zk/logs
target: /opt/zk/logs
kafka: kafka:
image: harbor.colben.cn/general/kafka:2.7 image: harbor.boyachain.cn:20443/general/kafka:4.0
container_name: kafka container_name: kafka
restart: on-failure restart: on-failure
environment: environment:
KAFKA_OPTS: "-Xmx1G -Xms1G" KAFKA_HEAP_OPTS: '-Xmx1G -Xms1G'
_CONF_zookeeper.connect: "zk:2181" CONF: server
networks: CLUSTER_ID: xxxx
kafka: _CONF_node.id: 1
_CONF_controller.quorum.bootstrap.servers: 127.10.11.1:9093
_CONF_listeners: PLAINTEXT://127.10.11.1:9092,CONTROLLER://127.10.11.1:9093
network_mode: host
volumes: volumes:
- type: bind - type: bind
source: ./kafka/data source: ./kafka/data
@@ -41,6 +19,3 @@ services:
source: ./kafka/logs source: ./kafka/logs
target: /opt/kafka/logs target: /opt/kafka/logs
networks:
kafka:

View File

@@ -1,15 +0,0 @@
# 部署 kafka 集群
- 根据实际环境修改
- docker-compose.yml
- 创建目录
```
grep '\<source:' docker-compose.yml | cut -d: -f2 | xargs mkdir -p
```
- 启动
```
docker-compose up -d
```

View File

@@ -1,138 +0,0 @@
version: "3.7"
services:
zk1:
image: harbor.colben.cn/general/zookeeper:3.6
container_name: zk1
restart: on-failure
environment:
MYID: 1
JVMFLAGS: "-Xmx1G -Xms1G"
_CONF_reconfigEnabled: "false"
_CONF_standaloneEnabled: "false"
_CONF_server.1: "zk1:2888:3888;2181"
_CONF_server.2: "zk2:2888:3888;2181"
_CONF_server.3: "zk3:2888:3888;2181"
networks:
kafka:
volumes:
- type: bind
source: ./zk1/dataLog
target: /opt/zk/dataLog
- type: bind
source: ./zk1/data
target: /opt/zk/data
- type: bind
source: ./zk1/logs
target: /opt/zk/logs
zk2:
image: harbor.colben.cn/general/zookeeper:3.6
container_name: zk2
restart: on-failure
environment:
MYID: 2
JVMFLAGS: "-Xmx1G -Xms1G"
_CONF_reconfigEnabled: "false"
_CONF_standaloneEnabled: "false"
_CONF_server.1: "zk1:2888:3888;2181"
_CONF_server.2: "zk2:2888:3888;2181"
_CONF_server.3: "zk3:2888:3888;2181"
networks:
kafka:
volumes:
- type: bind
source: ./zk2/dataLog
target: /opt/zk/dataLog
- type: bind
source: ./zk2/data
target: /opt/zk/data
- type: bind
source: ./zk2/logs
target: /opt/zk/logs
zk3:
image: harbor.colben.cn/general/zookeeper:3.6
container_name: zk3
restart: on-failure
environment:
MYID: 3
JVMFLAGS: "-Xmx1G -Xms1G"
_CONF_reconfigEnabled: "false"
_CONF_standaloneEnabled: "false"
_CONF_server.1: "zk1:2888:3888;2181"
_CONF_server.2: "zk2:2888:3888;2181"
_CONF_server.3: "zk3:2888:3888;2181"
networks:
kafka:
volumes:
- type: bind
source: ./zk3/dataLog
target: /opt/zk/dataLog
- type: bind
source: ./zk3/data
target: /opt/zk/data
- type: bind
source: ./zk3/logs
target: /opt/zk/logs
kafka1:
image: harbor.colben.cn/general/kafka:2.7
container_name: kafka1
restart: on-failure
environment:
KAFKA_OPTS: "-Xmx1G -Xms1G"
_CONF_broker.id: 1
_CONF_listeners: "PLAINTEXT://kafka1:9092"
_CONF_zookeeper.connect: "zk1:2181,zk2:2181,zk3:2181"
networks:
kafka:
volumes:
- type: bind
source: ./kafka1/data
target: /opt/kafka/data
- type: bind
source: ./kafka1/logs
target: /opt/kafka/logs
kafka2:
image: harbor.colben.cn/general/kafka:2.7
container_name: kafka2
restart: on-failure
environment:
KAFKA_OPTS: "-Xmx1G -Xms1G"
_CONF_broker.id: 2
_CONF_listeners: "PLAINTEXT://kafka2:9092"
_CONF_zookeeper.connect: "zk1:2181,zk2:2181,zk3:2181"
networks:
kafka:
volumes:
- type: bind
source: ./kafka2/data
target: /opt/kafka/data
- type: bind
source: ./kafka2/logs
target: /opt/kafka/logs
kafka3:
image: harbor.colben.cn/general/kafka:2.7
container_name: kafka3
restart: on-failure
environment:
KAFKA_OPTS: "-Xmx1G -Xms1G"
_CONF_broker.id: 3
_CONF_listeners: "PLAINTEXT://kafka3:9092"
_CONF_zookeeper.connect: "zk1:2181,zk2:2181,zk3:2181"
networks:
kafka:
volumes:
- type: bind
source: ./kafka3/data
target: /opt/kafka/data
- type: bind
source: ./kafka3/logs
target: /opt/kafka/logs
networks:
kafka:

View File

@@ -0,0 +1,31 @@
# 部署 kafka 集群
- 根据实际环境修改 docker-compose.yml
* CONF: 这里启动三个 server 节点,简单试用集群环境
* CLUSTER_ID: 这里要替换成完全一样的 uuid生成命令
```
docker run --rm harbor.boyachain.cn:20443/general/kafka:4.0 kafka-storage.sh random-uuid
```
* LEAD_CONTROLLER: 指定 bootstrap kraft 集群的节点 **controller 地址**bootstrap kraft 集群的**第一个节点不能设置该变量**
- 创建目录
```
grep '\<source:' docker-compose.yml | cut -d: -f2 | xargs mkdir -p
```
- 启动
```
docker-compose up -d
```
- 查看集群状态
```
docker exec kafka1 kafka-metadata-quorum.sh \
--bootstrap-controller 127.10.11.1:9093 \
describe --status
docker exec kafka1 kafka-metadata-quorum.sh \
--bootstrap-controller 127.10.11.1:9093 \
describe --replication
```

View File

@@ -0,0 +1,75 @@
services:
kafka1:
image: harbor.boyachain.cn:20443/general/kafka:4.0
container_name: kafka1
restart: no
environment:
CONF: server
CLUSTER_ID: xxxx
_CONF_node.id: 1
_CONF_controller.quorum.bootstrap.servers: 127.10.11.1:9093,127.10.11.2:9093,127.10.11.3:9093
_CONF_listeners: PLAINTEXT://127.10.11.1:9092,CONTROLLER://127.10.11.1:9093
_CONF_offsets.topic.replication.factor: 2
_CONF_share.coordinator.state.topic.replication.factor: 2
_CONF_share.coordinator.state.topic.min.isr: 2
_CONF_transaction.state.log.replication.factor: 2
_CONF_transaction.state.log.min.isr: 2
network_mode: host
volumes:
- type: bind
source: ./kafka1/data
target: /opt/kafka/data
- type: bind
source: ./kafka1/logs
target: /opt/kafka/logs
kafka2:
image: harbor.boyachain.cn:20443/general/kafka:4.0
container_name: kafka2
restart: no
environment:
CONF: server
CLUSTER_ID: xxxx
LEAD_CONTROLLER: 127.10.11.1:9093
_CONF_node.id: 2
_CONF_controller.quorum.bootstrap.servers: 127.10.11.1:9093,127.10.11.2:9093,127.10.11.3:9093
_CONF_listeners: PLAINTEXT://127.10.11.2:9092,CONTROLLER://127.10.11.2:9093
_CONF_offsets.topic.replication.factor: 2
_CONF_share.coordinator.state.topic.replication.factor: 2
_CONF_share.coordinator.state.topic.min.isr: 2
_CONF_transaction.state.log.replication.factor: 2
_CONF_transaction.state.log.min.isr: 2
network_mode: host
volumes:
- type: bind
source: ./kafka2/data
target: /opt/kafka/data
- type: bind
source: ./kafka2/logs
target: /opt/kafka/logs
kafka3:
image: harbor.boyachain.cn:20443/general/kafka:4.0
container_name: kafka3
restart: no
environment:
CONF: server
CLUSTER_ID: xxxx
LEAD_CONTROLLER: 127.10.11.1:9093
_CONF_node.id: 3
_CONF_controller.quorum.bootstrap.servers: 127.10.11.1:9093,127.10.11.2:9093,127.10.11.3:9093
_CONF_listeners: PLAINTEXT://127.10.11.3:9092,CONTROLLER://127.10.11.3:9093
_CONF_offsets.topic.replication.factor: 2
_CONF_share.coordinator.state.topic.replication.factor: 2
_CONF_share.coordinator.state.topic.min.isr: 2
_CONF_transaction.state.log.replication.factor: 2
_CONF_transaction.state.log.min.isr: 2
network_mode: host
volumes:
- type: bind
source: ./kafka3/data
target: /opt/kafka/data
- type: bind
source: ./kafka3/logs
target: /opt/kafka/logs

View File

@@ -1,6 +1,7 @@
ARG ARCH ARG ARCH
FROM harbor.colben.cn/general/jdk$ARCH:8 FROM harbor.colben.cn/general/jdk$ARCH:17
MAINTAINER Colben colbenlee@gmail.com MAINTAINER Colben colbenlee@gmail.com
ADD --chown=root:root /ADD/ /opt/ ADD --chown=root:root /ADD/ /opt/
ENV PATH=/opt/kafka/bin:$PATH
CMD ["/opt/ccmd"] CMD ["/opt/ccmd"]

View File

@@ -24,6 +24,7 @@ fi
function Quit { function Quit {
local exitCode=$? local exitCode=$?
rm -rf $ROOT_DIR/ADD/
[ 0 -ne $exitCode ] && Error Failed to build or push image! [ 0 -ne $exitCode ] && Error Failed to build or push image!
[ -z "${END:-}" ] && echo && Error Interrupted manually! [ -z "${END:-}" ] && echo && Error Interrupted manually!
Print Succeeded to build and push image. Print Succeeded to build and push image.
@@ -41,17 +42,41 @@ function YesOrNo {
done done
} }
function ModifyKafkaV2 {
cd kafka/config
cp server.properties server.properties.sample
sed -i '/^log4j\.rootLogger/clog4j.rootLogger=INFO, connectAppender' connect-log4j.properties
sed -i '/^log4j\.rootLogger/clog4j.rootLogger=INFO, kafkaAppender' log4j.properties
}
function ModifyKafkaV4 {
local f=
cd kafka/config
for f in {broker,controller,server}.properties; do
sed -i \
-e '/^node\.id/s/^/#/' \
-e '/^controller\.quorum\.bootstrap\.servers/s/^/#/' \
-e '/^listeners/s/^/#/' \
-e '/^advertised\.listeners/s/^/#/' \
-e '/^log\.dirs/clog.dirs=/opt/kafka/data' \
$f
mv $f $f.origin
done
sed -i '/ref: STDOUT/d' connect-log4j2.yaml
sed -i '/ref: STDOUT/d' log4j2.yaml
}
function Update { function Update {
Warn Preparing kafka $VERSION ... Warn Preparing kafka $VERSION ...
cd $ROOT_DIR/ADD cd $ROOT_DIR
rm -rf $(ls | grep -v ccmd || true) rm -rf ADD
cp -af ADD-${VERSION%%.*} ADD
cd ADD
tar zxf /release/RUNTIME/kafka_2.13-$VERSION.tgz tar zxf /release/RUNTIME/kafka_2.13-$VERSION.tgz
mv kafka_2.13-$VERSION kafka mv kafka_2.13-$VERSION kafka
cp kafka/config/server.properties kafka/config/server.properties.sample
sed -i '/^log4j\.rootLogger/clog4j.rootLogger=INFO, connectAppender' kafka/config/connect-log4j.properties
sed -i '/^log4j\.rootLogger/clog4j.rootLogger=INFO, kafkaAppender' kafka/config/log4j.properties
mkdir kafka/{data,logs} mkdir kafka/{data,logs}
rm -rf kafka/site-docs rm -rf kafka/{LICENSE,licenses,NOTICE,site-docs}
ModifyKafkaV${VERSION%%.*}
} }
function Build { function Build {
@@ -61,7 +86,7 @@ function Build {
&& Warn Removing image $IMAGE ... \ && Warn Removing image $IMAGE ... \
&& docker rmi $IMAGE && docker rmi $IMAGE
Warn Building image: $IMAGE ... Warn Building image: $IMAGE ...
docker build --force-rm --build-arg ARCH="$ARCH" --build-arg VERSION="$VERSION" -t $IMAGE . docker build --force-rm --build-arg ARCH="$ARCH" -t $IMAGE .
YesOrNo Push image: $IMAGE? && docker push $IMAGE YesOrNo Push image: $IMAGE? && docker push $IMAGE
} }

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
kibana: kibana:
image: harbor.colben.cn/general/kibana:7 image: harbor.boyachain.cn:20443/general/kibana:7
container_name: kibana container_name: kibana
restart: "on-failure" restart: "on-failure"
stop_grace_period: 1m stop_grace_period: 1m

View File

@@ -1,8 +1,6 @@
version: "3.7"
services: services:
letsencrypt: letsencrypt:
image: harbor.colben.cn/general/letsencrypt image: harbor.boyachain.cn:20443/general/letsencrypt:latest
container_name: letsencrypt container_name: letsencrypt
restart: "no" restart: "no"
stop_grace_period: 1m stop_grace_period: 1m
@@ -18,7 +16,7 @@ services:
target: /var/log/letsencrypt target: /var/log/letsencrypt
letsencrypt-wildcard: letsencrypt-wildcard:
image: harbor.colben.cn/general/letsencrypt image: harbor.boyachain.cn:20443/general/letsencrypt:latest
container_name: letsencrypt-wildcard container_name: letsencrypt-wildcard
restart: "no" restart: "no"
stop_grace_period: 1m stop_grace_period: 1m

View File

@@ -1,30 +1,31 @@
i#!/bin/bash #!/bin/bash
#========================================= #=========================================
# Author : colben # Author : Colben
# Create : 2022-04-04 10:12 # Create : 2025-11-01 20:10
#========================================= #=========================================
set -euo pipefail set -euo pipefail
umask 022
export LANG=en_US.UTF-8 export LANG=en_US.UTF-8
trap Quit EXIT export TENCENTCLOUD_SECRET_ID='tencent secret id'
export TENCENTCLOUD_SECRET_KEY='tencent secret key'
SECRET_ID='tencent secret id'
SECRET_KEY='tencent secret key'
DOMAIN=$CERTBOT_DOMAIN DOMAIN=$CERTBOT_DOMAIN
SUB_DOMAIN=_acme-challenge SUB_DOMAIN=_acme-challenge
RECORD_ID= RECORD_ID=
RECORD_VA=$CERTBOT_VALIDATION RECORD_VA=$CERTBOT_VALIDATION
PID_FILE=/tmp/$(basename ${0%.sh}).pid
if [ -t 0 ]; then if [ -t 0 ]; then
function Print { echo -e "\033[32;1m$(date +'[%F %T]') $*\033[0m"; } function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
function Warn { echo -e "\033[33;1m$(date +'[%F %T]') $*\033[0m"; } function Warn { echo -e "\033[36;1m$(date +'[%F %T]')\033[33;1m $*\033[0m"; }
function Error { echo -e "\033[31;1m$(date +'[%F %T]') $*\033[0m"; exit 1; } function Error { echo -e "\033[36;1m$(date +'[%F %T]')\033[31;1m $*\033[0m"; exit 1; }
function ErrorOnly { echo -e "\033[36;1m$(date +'[%F %T]')\033[31;1m $*\033[0m"; }
else else
#exec &> ${0%.sh}.out #exec &> /var/log/$(basename ${0%.sh}).out
function Print { echo -e "$(date +'[%F %T] INFO') $*"; } function Print { echo -e "$(date +'[%F %T INFO]') $*"; }
function Warn { echo -e "$(date +'[%F %T] WARN') $*"; } function Warn { echo -e "$(date +'[%F %T WARN]') $*"; }
function Error { echo -e "$(date +'[%F %T] ERROR') $*"; exit 1; } function Error { echo -e "$(date +'[%F %T ERROR]') $*"; exit 1; }
function ErrorOnly { echo -e "$(date +'[%F %T ERROR]') $*"; }
fi fi
function Quit { function Quit {
@@ -35,107 +36,70 @@ function Quit {
sleep 30 sleep 30
} }
function GetSignature { function GetTxtRecord {
local sha1Str=$(echo -n "GET$1" | openssl dgst -sha1 -hmac "$SECRET_KEY" -binary) local record="txt record: $SUB_DOMAIN.$DOMAIN"
echo -n "$sha1Str" | base64 | sed -e 's/=/%3D/g' -e 's/+/%2B/g' local err=
local resp=
Warn Getting $record ...
resp=$(tccli dnspod DescribeRecordList \
--Domain $DOMAIN \
--Subdomain $SUB_DOMAIN \
--RecordType TXT) || err=$?
[ '255' == "$err" ] \
&& Warn Not found $record! \
&& return 0
[ -n "$err" ] \
&& echo "$resp" \
&& ErrorOnly Failed to get $record! \
&& return $err
RECORD_ID=$(echo $resp | jq -rM ".RecordList[0].RecordId")
} }
function ListRecord { function CreateTxtRecord {
Warn Get request url ... local record="txt record: $SUB_DOMAIN.$DOMAIN"
local sign= Warn Creating $record ...
local resp= tccli dnspod CreateTXTRecord \
local url='cns.api.qcloud.com/v2/index.php' --Domain $DOMAIN \
url="${url}?Action=RecordList" --SubDomain $SUB_DOMAIN \
url="${url}&Nonce=$RANDOM" --RecordLine '默认' \
url="${url}&SecretId=$SECRET_ID" --Value $RECORD_VA \
url="${url}&Timestamp=$(date +%s)" && Print Succeeded to create $record. \
url="${url}&Version=2018-08-08" && return 0
url="${url}&domain=$DOMAIN" ErrorOnly Failed to create $record!
sign=$(GetSignature "$url")
Warn List record ...
resp=$(curl -sSL -XGET "https://$url&Signature=$sign" | jq -eM .)
[ '0' != "$(echo $resp | jq -crM .code)" ] && echo "$resp" && exit 1
RECORD_ID=$(echo $resp | jq -crM ".data.records[] | select(.name == \"$SUB_DOMAIN\") | .id")
} }
function CreateRecord { function ModifyTxtRecord {
Warn Get request url ... local record="txt record: $SUB_DOMAIN.$DOMAIN"
local sign= Warn Modifying $record ...
local resp= tccli dnspod ModifyTXTRecord \
local url='cns.api.qcloud.com/v2/index.php' --Domain $DOMAIN \
url="${url}?Action=RecordCreate" --SubDomain $SUB_DOMAIN \
url="${url}&Nonce=$RANDOM" --RecordId $RECORD_ID \
url="${url}&SecretId=$SECRET_ID" --RecordLine '默认' \
url="${url}&Timestamp=$(date +%s)" --Value $RECORD_VA \
url="${url}&Version=2018-08-08" && Print Succeeded to modify $record. \
url="${url}&domain=$DOMAIN" && return 0
url="${url}&recordLine=默认" ErrorOnly Failed to modify $record!
url="${url}&recordType=TXT"
url="${url}&subDomain=$SUB_DOMAIN"
url="${url}&value=$RECORD_VA"
sign=$(GetSignature "$url")
Warn Create sub_domain: $SUB_DOMAIN with value: $RECORD_VA ...
resp=$(curl -sSL -XGET "https://$url&Signature=$sign" | jq -eM .)
[ '0' != "$(echo $resp | jq -crM .code)" ] && echo "$resp" && exit 1
return 0
}
function ModifyRecord {
Warn Get request url ...
local sign=
local resp=
local url='cns.api.qcloud.com/v2/index.php'
url="${url}?Action=RecordModify"
url="${url}&Nonce=$RANDOM"
url="${url}&SecretId=$SECRET_ID"
url="${url}&Timestamp=$(date +%s)"
url="${url}&Version=2018-08-08"
url="${url}&domain=$CERTBOT_DOMAIN"
url="${url}&recordId=$RECORD_ID"
url="${url}&recordLine=默认"
url="${url}&recordType=TXT"
url="${url}&subDomain=$SUB_DOMAIN"
url="${url}&value=$RECORD_VA"
sign=$(GetSignature "$url")
Warn Modify record: $RECORD_ID with value: $RECORD_VA ...
resp=$(curl -sSL -XGET "https://$url&Signature=$sign" | jq -eM .)
[ '0' != "$(echo $resp | jq -crM .code)" ] && echo "$resp" && exit 1
return 0
} }
function DeleteRecord { function DeleteRecord {
Warn Get request url ... local record="record: $SUB_DOMAIN.$DOMAIN"
local sign= Warn Deleting $record ...
local resp= tccli dnspod DeleteRecord \
local url='cns.api.qcloud.com/v2/index.php' --Domain $DOMAIN \
url="${url}?Action=RecordDelete" --RecordId $RECORD_ID \
url="${url}&Nonce=$RANDOM" && Print Succeeded to delete $record. \
url="${url}&SecretId=$SECRET_ID" && return 0
url="${url}&Timestamp=$(date +%s)" ErrorOnly Failed to delete $record!
url="${url}&Version=2018-08-08"
url="${url}&domain=$DOMAIN"
url="${url}&recordId=$RECORD_ID"
sign=$(GetSignature "$url")
Warn Delete record $RECORD_ID ...
resp=$(curl -sSL -XGET "https://$url&Signature=$sign" | jq -eM .)
[ '0' != "$(echo $resp | jq -crM .code)" ] && echo "$resp" && exit 1
return 0
} }
function Main { function Main {
[ -e "$PID_FILE" ] && Error Pid file $PID_FILE already exists, quit! trap Quit EXIT
echo $$ > $PID_FILE GetTxtRecord
for _ in {1..5}; do [ -z "$RECORD_ID" ] && CreateTxtRecord
ListRecord || continue [ -z "$RECORD_ID" ] || ModifyTxtRecord
if [ -z "$RECORD_ID" ]; then END=1
CreateRecord || continue return 0
else
ModifyRecord || continue
fi
END=1
return 0
done
return 1
} }
# Start here # Start here

View File

@@ -1,10 +1,19 @@
ARG ARCH ARG ARCH
FROM harbor.colben.cn/general/alpine$ARCH FROM harbor.colben.cn/general/alpine-python$ARCH:latest
MAINTAINER Colben colbenlee@gmail.com MAINTAINER Colben colbenlee@gmail.com
ARG ALI
ADD --chown=root:root /ADD/ /opt/ ADD --chown=root:root /ADD/ /opt/
RUN apk update \ RUN apk update \
&& apk add --no-cache certbot openssl jq \ && apk add --no-cache certbot openssl jq bind-tools \
&& mkdir -p /etc/letsencrypt /var/log/letsencrypt \ && mkdir -p /etc/letsencrypt /var/log/letsencrypt \
&& rm -rf /var/cache/apk/* && curl -LO https://aliyuncli.alicdn.com/$ALI \
&& tar zxf $ALI \
&& mv aliyun /usr/bin/ \
&& pip3 install \
-i https://pypi.tuna.tsinghua.edu.cn/simple \
--trusted-host pypi.tuna.tsinghua.edu.cn \
--break-system-packages \
tccli \
&& rm -rf $ALI /root/.cache/pip /var/cache/apk/*
CMD ["/opt/ccmd"] CMD ["/opt/ccmd"]

View File

@@ -10,6 +10,7 @@ export LANG=en_US.UTF-8
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)" [ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
ROOT_DIR="$(cd $(dirname $0) && pwd)" ROOT_DIR="$(cd $(dirname $0) && pwd)"
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:latest" IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:latest"
ALI=
if [ -t 0 ]; then if [ -t 0 ]; then
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; } function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
@@ -41,7 +42,7 @@ function YesOrNo {
} }
function Update { function Update {
: [ -z "$ARCH" ] && ALI=aliyun-cli-linux-latest-amd64.tgz || ALI=aliyun-cli-linux-latest-arm64.tgz
} }
function Build { function Build {
@@ -51,7 +52,7 @@ function Build {
&& Warn Removing image $IMAGE ... \ && Warn Removing image $IMAGE ... \
&& docker rmi $IMAGE && docker rmi $IMAGE
Warn Building image: $IMAGE ... Warn Building image: $IMAGE ...
docker build --force-rm --build-arg ARCH="$ARCH" -t $IMAGE . docker build --force-rm --build-arg ARCH="$ARCH" --build-arg ALI="$ALI" -t $IMAGE .
YesOrNo Push image: $IMAGE? && docker push $IMAGE YesOrNo Push image: $IMAGE? && docker push $IMAGE
} }

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
logstash: logstash:
image: harbor.colben.cn/general/logstash:6 image: harbor.boyachain.cn:20443/general/logstash:6
container_name: logstash container_name: logstash
restart: "on-failure" restart: "on-failure"
stop_grace_period: 2m stop_grace_period: 2m

View File

@@ -18,9 +18,9 @@ GOT_SIGTERM=
LOG_DIR='/var/log/mysql' LOG_DIR='/var/log/mysql'
DATA_DIR='/var/lib/mysql' DATA_DIR='/var/lib/mysql'
BINLOG_DIR='/var/lib/mysql-bin' BINLOG_DIR='/var/lib/mysql-bin'
INIT_FLAG=${INIT_FLAG:-}
SOCK_FILE='/run/mysqld/mysqld.sock' SOCK_FILE='/run/mysqld/mysqld.sock'
PID_FILE='/run/mysqld/mysqld.pid' PID_FILE='/run/mysqld/mysqld.pid'
INIT_FLAG=
function Print { function Print {
local file=/dev/null local file=/dev/null
@@ -30,7 +30,7 @@ function Print {
function Quit { function Quit {
Print killing mysqld ... Print killing mysqld ...
mysqladmin shutdown --wait-for-all-slaves || true mysqladmin shutdown || true
while :; do while :; do
pkill -f mysqld && Print killing mysqld ... || break pkill -f mysqld && Print killing mysqld ... || break
sleep 1 sleep 1
@@ -49,9 +49,37 @@ function Init {
fi fi
} }
function StartProc { function ImportInitSql {
local sql_file= local sql_file=
local sql_files= local sql_files=
Print Securing database ...
mysql_secure_installation <<< "$(echo -e '\nn\nn\n\n\n\n\n')" > /dev/null
mysql -e "CREATE USER docker@localhost IDENTIFIED BY 'China_19\$(10)!'"
mysql -e "GRANT RELOAD,SHUTDOWN ON *.* TO docker@localhost"
if sql_files="$(ls $LOG_DIR/init_sql/*.sql 2>/dev/null)"; then
Print Importing the sql files ...
for sql_file in $sql_files; do
Print Importing $sql_file ...
mysql < $sql_file
done
Print Imported all sql files successfully.
fi
}
function SideCar {
local day=
local last_day=$(date +%d)
while sleep 8; do
day=$(date +%d) \
&& [ "$day" != "$last_day" ] \
&& last_day=$day \
&& find $LOG_DIR -type f -name "*.log" \
| xargs -I ^ mv -f ^ ^.$(date +%F -d yesterday) \
&& mysqladmin flush-logs
done
}
function StartProc {
Print Starting mysql ... Print Starting mysql ...
mysqld -u mysql & mysqld -u mysql &
PIDS="$PIDS $!" PIDS="$PIDS $!"
@@ -60,20 +88,9 @@ function StartProc {
[ ! -e /proc/$! ] && echo && Print unexpected error! && exit [ ! -e /proc/$! ] && echo && Print unexpected error! && exit
done done
echo echo
if [ -n "$INIT_FLAG" ]; then [ -z "$INIT_FLAG" ] || ImportInitSql
Print Securing database ... SideCar &
mysql_secure_installation <<< "$(echo -e '\nn\nn\n\n\n\n\n')" > /dev/null PIDS="$PIDS $!"
mysql -e "CREATE USER docker@localhost IDENTIFIED BY 'China_19\$(10)!'"
mysql -e "GRANT SHUTDOWN ON *.* TO docker@localhost"
if sql_files="$(ls $DATA_DIR/init_sql/*.sql 2>/dev/null)"; then
Print Importing the sql files ...
for sql_file in $sql_files; do
Print Importing $sql_file ...
mysql < $sql_file
done
Print Imported all sql files successfully.
fi
fi
Print MySQL is ready for connections. Print MySQL is ready for connections.
} }

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
mariadb: mariadb:
image: harbor.colben.cn/general/mariadb image: harbor.boyachain.cn:20443/general/mariadb
container_name: mariadb container_name: mariadb
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m

View File

@@ -1,5 +1,5 @@
ARG ARCH ARG ARCH
FROM harbor.colben.cn/general/alpine$ARCH FROM harbor.colben.cn/general/alpine$ARCH:3.17
MAINTAINER Colben colbenlee@gmail.com MAINTAINER Colben colbenlee@gmail.com
ADD --chown=root:root /ADD/ /opt/ ADD --chown=root:root /ADD/ /opt/
RUN apk update \ RUN apk update \

View File

@@ -9,7 +9,8 @@ export LANG=en_US.UTF-8
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)" [ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
ROOT_DIR="$(cd $(dirname $0) && pwd)" ROOT_DIR="$(cd $(dirname $0) && pwd)"
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:latest" TAG=$1
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:$TAG"
if [ -t 0 ]; then if [ -t 0 ]; then
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; } function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
@@ -51,7 +52,7 @@ function Build {
&& Warn Removing image $IMAGE ... \ && Warn Removing image $IMAGE ... \
&& docker rmi $IMAGE && docker rmi $IMAGE
Warn Building image: $IMAGE ... Warn Building image: $IMAGE ...
docker build --force-rm --build-arg ARCH="$ARCH" -t $IMAGE . docker build --force-rm --build-arg ARCH="$ARCH" -t $IMAGE -f Dockerfile-$TAG .
YesOrNo Push image: $IMAGE? && docker push $IMAGE YesOrNo Push image: $IMAGE? && docker push $IMAGE
} }

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
mongodb: mongodb:
image: harbor.colben.cn/general/mongodb image: harbor.boyachain.cn:20443/general/mongodb
container_name: mongodb container_name: mongodb
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m

View File

@@ -40,7 +40,7 @@ function Quit {
} }
function Init { function Init {
rm -f ${SOCK_FILE}* ${PID_FILE} rm -f ${SOCK_FILE}* $PID_FILE
chown -R mysql:mysql $LOG_DIR $BINLOG_DIR $DATA_DIR chown -R mysql:mysql $LOG_DIR $BINLOG_DIR $DATA_DIR
if [ ! -d "$DATA_DIR/mysql" ]; then if [ ! -d "$DATA_DIR/mysql" ]; then
Print Initing mysql db files ... Print Initing mysql db files ...
@@ -50,7 +50,8 @@ function Init {
} }
function ImportInitSql { function ImportInitSql {
local sql_file= sql_files= local sql_file=
local sql_files=
mysql -e "CREATE USER docker@localhost IDENTIFIED BY 'China_19\$(10)!'" mysql -e "CREATE USER docker@localhost IDENTIFIED BY 'China_19\$(10)!'"
mysql -e "GRANT RELOAD,SHUTDOWN ON *.* TO docker@localhost" mysql -e "GRANT RELOAD,SHUTDOWN ON *.* TO docker@localhost"
if sql_files="$(ls $LOG_DIR/init_sql/*.sql 2>/dev/null)"; then if sql_files="$(ls $LOG_DIR/init_sql/*.sql 2>/dev/null)"; then
@@ -64,7 +65,8 @@ function ImportInitSql {
} }
function SideCar { function SideCar {
local day= last_day=$(date +%d) local day=
local last_day=$(date +%d)
while sleep 8; do while sleep 8; do
day=$(date +%d) \ day=$(date +%d) \
&& [ "$day" != "$last_day" ] \ && [ "$day" != "$last_day" ] \

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
mysql: mysql:
image: harbor.colben.cn/general/mysql:8 image: harbor.boyachain.cn:20443/general/mysql:8
container_name: mysql container_name: mysql
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
keepalived: keepalived:
image: harbor.colben.cn/general/keepalived image: harbor.boyachain.cn:20443/general/keepalived
container_name: keepalived container_name: keepalived
restart: "on-failure" restart: "on-failure"
stop_grace_period: 1m stop_grace_period: 1m
@@ -17,7 +17,7 @@ services:
target: /var/log/keepalived target: /var/log/keepalived
mysql: mysql:
image: harbor.colben.cn/general/mysql:8 image: harbor.boyachain.cn:20443/general/mysql:8
container_name: mysql container_name: mysql
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m

View File

@@ -3,8 +3,7 @@ FROM harbor.colben.cn/general/centos$ARCH:7
MAINTAINER Colben colbenlee@gmail.com MAINTAINER Colben colbenlee@gmail.com
ARG ARCH ARG ARCH
ADD --chown=root:root /ADD/ /opt/ ADD --chown=root:root /ADD/ /opt/
RUN arch=${ARCH:-x86_64} \ RUN echo -e "[mysql57-community]\n\
&& echo -e "[mysql57-community]\n\
name=MySQL 5.7 Community Server\n\ name=MySQL 5.7 Community Server\n\
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/\$basearch/\n\ baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/\$basearch/\n\
enabled=1\n\ enabled=1\n\

View File

@@ -3,18 +3,17 @@ FROM harbor.colben.cn/general/rocky$ARCH:8
MAINTAINER Colben colbenlee@gmail.com MAINTAINER Colben colbenlee@gmail.com
ARG ARCH ARG ARCH
ADD --chown=root:root /ADD/ /opt/ ADD --chown=root:root /ADD/ /opt/
RUN arch=${ARCH:-x86_64} \ RUN echo -e "[mysql80-community]\n\
&& echo -e "[mysql80-community]\n\
name=MySQL 8.0 Community Server\n\ name=MySQL 8.0 Community Server\n\
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/8/${arch#-}/\n\ baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/8/\$basearch/\n\
enabled=1\n\ enabled=1\n\
gpgcheck=0\n\ gpgcheck=0\n\
" > /etc/yum.repos.d/mysql-8.0.repo \ " > /etc/yum.repos.d/mysql-8.0.repo \
&& dnf makecache \ && microdnf makecache \
&& dnf -y module disable mysql \ && microdnf module disable mysql \
&& dnf install mysql-community-server -y \ && microdnf install mysql-community-server \
&& rm -rf /usr/sbin/mysqld-debug \ && rm -rf /usr/sbin/mysqld-debug \
/var/cache/dnf \ /var/cache/yum \
/var/lib/dnf \ /var/lib/dnf \
/var/log/* \ /var/log/* \
/etc/my.cnf.d \ /etc/my.cnf.d \

View File

@@ -9,7 +9,8 @@ export LANG=en_US.UTF-8
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)" [ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
ROOT_DIR="$(cd $(dirname $0) && pwd)" ROOT_DIR="$(cd $(dirname $0) && pwd)"
IMAGE="harbor.colben.cn/general/mysql$ARCH:8" TAG=$1
IMAGE="harbor.colben.cn/general/mysql$ARCH:$TAG"
if [ -t 0 ]; then if [ -t 0 ]; then
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; } function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
@@ -51,7 +52,7 @@ function Build {
&& Warn Removing image $IMAGE ... \ && Warn Removing image $IMAGE ... \
&& docker rmi $IMAGE && docker rmi $IMAGE
Warn Building image: $IMAGE ... Warn Building image: $IMAGE ...
docker build --force-rm --build-arg ARCH="$ARCH" -t $IMAGE -f Dockerfile-mysql8 . docker build --force-rm --build-arg ARCH="$ARCH" -t $IMAGE -f Dockerfile-$TAG .
YesOrNo Push image: $IMAGE? && docker push $IMAGE YesOrNo Push image: $IMAGE? && docker push $IMAGE
} }

View File

@@ -1,91 +0,0 @@
#!/bin/bash
##################################################
# Mount dir #
# - /etc/nginx/stream.d #
# - /etc/nginx/http.d #
# - /var/lib/nginx/html #
# - /var/log/nginx #
# ENV #
# - GLOBAL_DIRECTIVES #
##################################################
set -euo pipefail
export LANG=en_US.UTF-8
trap Quit EXIT
PIDS=
GOT_SIGTERM=
GLOBAL_DIRECTIVES="${GLOBAL_DIRECTIVES:-user nginx;worker_processes auto;}"
function Print {
local file=/dev/null
[ '-f' = "$1" ] && file=$2 && shift && shift
date +"[%F %T] $*" | tee -a $file
}
function Quit {
local running
Print killing nginx ...
nginx -s quit || true
while running= ; do
pkill -f sleep && running=1 && Print killing sleep ...
pkill -f nginx && running=1 && Print killing nginx ...
[ -z "$running" ] && break
sleep 1
done
Print Container stopped.
test -n "$GOT_SIGTERM"
}
function ChangeOwner {
Print Changing file owner ...
chown nginx:root /var/log/nginx/
}
function SideCar {
local day= last_day=$(date +%d)
local md5= last_md5=$(find /etc/nginx/ -type f -name "*.conf" \
| xargs -I ^ md5sum ^ | md5sum)
while sleep 10; do
day=$(date +%d) \
&& [ "$day" != "$last_day" ] \
&& last_day=$day \
&& find /var/log/nginx/ -type f -name "*.log" \
| xargs -I ^ mv -f ^ ^.$(date +%F -d yesterday) \
&& nginx -s reopen
md5=$(find /etc/nginx/ -type f -name "*.conf" | xargs -I ^ md5sum ^ \
| md5sum) \
&& [ "$md5" != "$last_md5" ] \
&& last_md5=$md5 \
&& nginx -tq \
&& Print Reloading nginx conf ... \
&& nginx -s reload
done
}
function StartProc {
Print Starting nginx ...
nginx -g "$GLOBAL_DIRECTIVES" &
PIDS="$PIDS $!"
Print Starting nginx sidecar ...
SideCar &
PIDS="$PIDS $!"
Print Nginx started.
}
function Main {
local pid=
ChangeOwner
StartProc
trap "GOT_SIGTERM=1; Print Got SIGTERM ..." SIGTERM
while [ -z "$GOT_SIGTERM" ] && sleep 2; do
for pid in $PIDS; do
[ ! -e /proc/$pid ] && Print Unexpected error! && exit
done
done
}
# Start here
Main

View File

@@ -1,17 +0,0 @@
# 部署单节点 nginx
- 根据实际环境修改
- docker-compose.yml
- nginx/http.d/80.conf
- 创建目录
```
grep '\<source:' docker-compose.yml | cut -d: -f2 | xargs mkdir -p
```
- 上传可能需要的前端文件到 nginx/html/ 下
- 启动
```
docker-compose up -d
```

View File

@@ -1,22 +0,0 @@
version: "3.7"
services:
nginx:
image: harbor.colben.cn/general/nginx:1.20.2
container_name: nginx
restart: "on-failure"
stop_grace_period: 5m
privileged: true
ports:
- 80:80
volumes:
- type: bind
source: ./nginx/html
target: /var/lib/nginx/html
- type: bind
source: ./nginx/http.d
target: /etc/nginx/http.d
- type: bind
source: ./nginx/log
target: /var/log/nginx

View File

@@ -1,5 +0,0 @@
server {
listen 80;
location / {}
}

View File

@@ -1,19 +0,0 @@
# 部署 nginx 双节点+高可用
- 在两台服务器上都执行下面操作
- 根据实际环境修改
- docker-compose.yml
- keepalived/conf/keepalived.conf
- nginx/http.d/80.conf
- 创建目录
```
grep '\<source:' docker-compose.yml | cut -d: -f2 | xargs mkdir -p
```
- 上传可能需要的前端文件到 nginx/html/ 下
- 启动
```
docker-compose up -d
```

View File

@@ -1,38 +0,0 @@
version: "3.7"
services:
keepalived:
image: harbor.colben.cn/general/keepalived
container_name: keepalived
restart: "on-failure"
stop_grace_period: 1m
privileged: true
network_mode: host
volumes:
- type: bind
source: ./keepalived/conf
target: /etc/keepalived
- type: bind
source: ./keepalived/log
target: /var/log/keepalived
nginx:
image: harbor.colben.cn/general/nginx:1.20.2
container_name: nginx
restart: "on-failure"
stop_grace_period: 1m
network_mode: host
volumes:
- type: bind
source: ./nginx/html
target: /var/lib/nginx/html
- type: bind
source: ./nginx/http.d
target: /etc/nginx/http.d
- type: bind
source: ./nginx/stream.d
target: /etc/nginx/stream.d
- type: bind
source: ./nginx/log
target: /var/log/nginx

View File

@@ -1,33 +0,0 @@
global_defs {
router_id nginx1 # 在另一台服务器中,这里配置 nginx2
script_user root
enable_script_security
}
vrrp_script chk_nginx {
script "/sbin/ss -lnt | grep -q ':80\>'"
interval 10
weight 0
fall 2
rise 2
}
vrrp_instance VI_1 {
state BACKUP
virtual_router_id 14
priority 150 # 在另一台服务器中这里配置100
advert_int 2
nopreempt
interface eth0 # 这里的 eth0 是服务器的网卡名
track_script {
chk_nginx
}
authentication {
auth_type PASS
auth_pass El_en_nginx_1234
}
virtual_ipaddress {
虚拟IP/掩码 dev eth0 # 这里的eth0是服务器的网卡名
}
}

View File

@@ -1,5 +0,0 @@
server {
listen 80;
location / {}
}

View File

@@ -1,20 +0,0 @@
# 构建 nginx 镜像
## 定制
- 安装 nginx
- 固定一些常用配置
- 每 10 秒扫描一次配置文件,有变更会立即 reload
## 外挂目录和文件
- /etc/nginx/stream.d: nginx stream 配置文件
- /etc/nginx/http.d: nginx http 配置文件
- /var/lib/nginx/html: nginx 前端文件存放目录
- /var/log/nginx: nginx 日志目录
## 引入环境变量
- GLOBAL_DIRECTIVES: 一般用不到
## 案例
- [Demo/SingleNode/](Demo/SingleNode/): 单节点
- [Demo/TwoNodes/](Demo/TwoNodes/): 两节点+高可用

View File

@@ -1,67 +0,0 @@
#!/bin/bash
#=========================================
# Author : colben
#=========================================
set -euo pipefail
export LANG=en_US.UTF-8
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
ROOT_DIR="$(cd $(dirname $0) && pwd)"
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:1.20.2"
if [ -t 0 ]; then
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
function Warn { echo -e "\033[36;1m$(date +'[%F %T]')\033[33;1m $*\033[0m"; }
function Error { echo -e "\033[36;1m$(date +'[%F %T]')\033[31;1m $*\033[0m"; exit 1; }
else
function Print { echo -e "$(date +'[%F %T INFO]') $*"; }
function Warn { echo -e "$(date +'[%F %T WARN]') $*"; }
function Error { echo -e "$(date +'[%F %T ERROR]') $*"; exit 1; }
fi
function Quit {
local exitCode=$?
[ 0 -ne $exitCode ] && Error Failed to build or push image!
[ -z "${END:-}" ] && echo && Error Interrupted manually!
Print Succeeded to build and push image.
}
function YesOrNo {
Warn $*
local sw=
while :; do
read -p '(Yes/No/Quit) ' -n1 sw
[[ "$sw" =~ ^Y|y$ ]] && echo && return 0
[[ "$sw" =~ ^N|n$ ]] && echo && return 1
[[ "$sw" =~ ^Q|q$ ]] && echo && exit 0
[ -n "$sw" ] && echo
done
}
function Update {
:
}
function Build {
local yn
cd $ROOT_DIR
docker images --format='{{.Repository}}:{{.Tag}}' | grep "^$IMAGE$" \
&& Warn Removing image $IMAGE ... \
&& docker rmi $IMAGE
Warn Building image: $IMAGE ...
docker build --force-rm --build-arg ARCH="$ARCH" -t $IMAGE .
YesOrNo Push image: $IMAGE? && docker push $IMAGE
}
function Main {
trap Quit EXIT
Update
Build
END=1
}
# Start here
Main

View File

@@ -1,25 +0,0 @@
version: "3.7"
services:
nginx-php:
image: harbor.colben.cn/general/nginx-php:7.4
container_name: nginx-php
restart: "on-failure"
stop_grace_period: 5m
privileged: true
ports:
- 80:80
volumes:
- type: bind
source: ./nginx/html
target: /var/lib/nginx/html
- type: bind
source: ./nginx/http.d
target: /etc/nginx/http.d
- type: bind
source: ./nginx/log
target: /var/log/nginx
- type: bind
source: ./php7/log
target: /var/log/php7

View File

@@ -1,67 +0,0 @@
#!/bin/bash
#=========================================
# Author : colben
#=========================================
set -euo pipefail
export LANG=en_US.UTF-8
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
ROOT_DIR="$(cd $(dirname $0) && pwd)"
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:7.4"
if [ -t 0 ]; then
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
function Warn { echo -e "\033[36;1m$(date +'[%F %T]')\033[33;1m $*\033[0m"; }
function Error { echo -e "\033[36;1m$(date +'[%F %T]')\033[31;1m $*\033[0m"; exit 1; }
else
function Print { echo -e "$(date +'[%F %T INFO]') $*"; }
function Warn { echo -e "$(date +'[%F %T WARN]') $*"; }
function Error { echo -e "$(date +'[%F %T ERROR]') $*"; exit 1; }
fi
function Quit {
local exitCode=$?
[ 0 -ne $exitCode ] && Error Failed to build or push image!
[ -z "${END:-}" ] && echo && Error Interrupted manually!
Print Succeeded to build and push image.
}
function YesOrNo {
Warn $*
local sw=
while :; do
read -p '(Yes/No/Quit) ' -n1 sw
[[ "$sw" =~ ^Y|y$ ]] && echo && return 0
[[ "$sw" =~ ^N|n$ ]] && echo && return 1
[[ "$sw" =~ ^Q|q$ ]] && echo && exit 0
[ -n "$sw" ] && echo
done
}
function Update {
:
}
function Build {
local yn
cd $ROOT_DIR
docker images --format='{{.Repository}}:{{.Tag}}' | grep "^$IMAGE$" \
&& Warn Removing image $IMAGE ... \
&& docker rmi $IMAGE
Warn Building image: $IMAGE ...
docker build --force-rm --build-arg ARCH="$ARCH" -t $IMAGE .
YesOrNo Push image: $IMAGE? && docker push $IMAGE
}
function Main {
trap Quit EXIT
Update
Build
END=1
}
# Start here
Main

View File

@@ -1,17 +0,0 @@
# 部署单节点 nginx-php
- 根据实际环境修改
- docker-compose.yml
- nginx/http.d/80.conf
- 创建目录
```
grep '\<source:' docker-compose.yml | cut -d: -f2 | xargs mkdir -p
```
- 上传可能需要的前端文件到 nginx/html/ 下
- 启动
```
docker-compose up -d
```

View File

@@ -1,25 +0,0 @@
version: "3.7"
services:
nginx-php:
image: harbor.colben.cn/general/nginx-php:8.1
container_name: nginx-php
restart: "on-failure"
stop_grace_period: 5m
privileged: true
ports:
- 80:80
volumes:
- type: bind
source: ./nginx/html
target: /var/lib/nginx/html
- type: bind
source: ./nginx/http.d
target: /etc/nginx/http.d
- type: bind
source: ./nginx/log
target: /var/log/nginx
- type: bind
source: ./php81/log
target: /var/log/php81

View File

@@ -1,25 +0,0 @@
server {
listen 80;
location /xxxx/ {}
location ~ ^/xxxx/.+\.php$ {
client_max_body_size 1024m;
client_body_buffer_size 1024m;
fastcgi_buffer_size 256k;
fastcgi_buffers 8 256k;
fastcgi_busy_buffers_size 512k;
fastcgi_temp_file_write_size 512k;
expires -1s;
include fastcgi_params;
try_files $uri =404;
fastcgi_pass unix:/var/lib/php7/phpfpm.sock;
fastcgi_index index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
break;
}
location / {
return 403;
}
}

View File

@@ -1,17 +0,0 @@
# 构建 nginx-php 镜像
## 定制
- 安装 nginx 和 php81
- 固定一些常用配置
- 每 10 秒扫描一次配置文件,有变更会立即 reload
## 外挂目录和文件
- /etc/nginx/stream.d: nginx stream 配置文件
- /etc/nginx/http.d: nginx http 配置文件
- /var/lib/nginx/html: nginx 前端文件存放目录
- /var/log/nginx: nginx 日志目录
- /var/log/php81: php81 日志目录
## 案例
- [Demo/SingleNode/](Demo/SingleNode/): 部署 nginx-php

View File

@@ -1,67 +0,0 @@
#!/bin/bash
#=========================================
# Author : colben
#=========================================
set -euo pipefail
export LANG=en_US.UTF-8
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
ROOT_DIR="$(cd $(dirname $0) && pwd)"
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:8.1"
if [ -t 0 ]; then
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
function Warn { echo -e "\033[36;1m$(date +'[%F %T]')\033[33;1m $*\033[0m"; }
function Error { echo -e "\033[36;1m$(date +'[%F %T]')\033[31;1m $*\033[0m"; exit 1; }
else
function Print { echo -e "$(date +'[%F %T INFO]') $*"; }
function Warn { echo -e "$(date +'[%F %T WARN]') $*"; }
function Error { echo -e "$(date +'[%F %T ERROR]') $*"; exit 1; }
fi
function Quit {
local exitCode=$?
[ 0 -ne $exitCode ] && Error Failed to build or push image!
[ -z "${END:-}" ] && echo && Error Interrupted manually!
Print Succeeded to build and push image.
}
function YesOrNo {
Warn $*
local sw=
while :; do
read -p '(Yes/No/Quit) ' -n1 sw
[[ "$sw" =~ ^Y|y$ ]] && echo && return 0
[[ "$sw" =~ ^N|n$ ]] && echo && return 1
[[ "$sw" =~ ^Q|q$ ]] && echo && exit 0
[ -n "$sw" ] && echo
done
}
function Update {
:
}
function Build {
local yn
cd $ROOT_DIR
docker images --format='{{.Repository}}:{{.Tag}}' | grep "^$IMAGE$" \
&& Warn Removing image $IMAGE ... \
&& docker rmi $IMAGE
Warn Building image: $IMAGE ...
docker build --force-rm --build-arg ARCH="$ARCH" -t $IMAGE .
YesOrNo Push image: $IMAGE? && docker push $IMAGE
}
function Main {
trap Quit EXIT
Update
Build
END=1
}
# Start here
Main

View File

@@ -0,0 +1,45 @@
services:
nginx-php:
image: harbor.boyachain.cn:20443/general/nginx-php:7.4
container_name: nginx-php
restart: "on-failure"
stop_grace_period: 5m
privileged: true
ports:
- 1080:80
volumes:
- type: bind
source: ./nginx/html
target: /var/lib/nginx/html
- type: bind
source: ./nginx/http.d
target: /etc/nginx/http.d
- type: bind
source: ./nginx/log
target: /var/log/nginx
- type: bind
source: ./php7/log
target: /var/log/php7
php81:
image: harbor.boyachain.cn:20443/general/nginx-php:8.1
container_name: php81
restart: "on-failure"
stop_grace_period: 5m
privileged: true
ports:
- 2080:80
volumes:
- type: bind
source: ./nginx/html
target: /var/lib/nginx/html
- type: bind
source: ./nginx/http.d
target: /etc/nginx/http.d
- type: bind
source: ./nginx/log
target: /var/log/nginx
- type: bind
source: ./php81/log
target: /var/log/php81

View File

@@ -1,7 +1,7 @@
ARG ARCH ARG ARCH
FROM harbor.colben.cn/general/nginx$ARCH:1.20.2 FROM harbor.colben.cn/general/nginx$ARCH:1.20
MAINTAINER Colben colbenlee@gmail.com MAINTAINER Colben colbenlee@gmail.com
ADD --chown=root:root /ADD/ /opt/ ADD --chown=root:root /ADD-7.4/ /opt/
RUN sed -i '/edge/d' /etc/apk/repositories \ RUN sed -i '/edge/d' /etc/apk/repositories \
&& apk update \ && apk update \
&& apk add --no-cache php7 php7-common php7-iconv php7-json php7-gd php7-curl php7-xml \ && apk add --no-cache php7 php7-common php7-iconv php7-json php7-gd php7-curl php7-xml \

View File

@@ -1,7 +1,7 @@
ARG ARCH ARG ARCH
FROM harbor.colben.cn/general/nginx$ARCH FROM harbor.colben.cn/general/nginx$ARCH
MAINTAINER Colben colbenlee@gmail.com MAINTAINER Colben colbenlee@gmail.com
ADD --chown=root:root /ADD/ /opt/ ADD --chown=root:root /ADD-8.1/ /opt/
RUN sed -i '/edge/d' /etc/apk/repositories \ RUN sed -i '/edge/d' /etc/apk/repositories \
&& apk update \ && apk update \
&& apk add --no-cache php81 php81-common php81-iconv php81-json php81-gd php81-curl \ && apk add --no-cache php81 php81-common php81-iconv php81-json php81-gd php81-curl \

View File

@@ -1,7 +1,7 @@
# 构建 nginx-php 镜像 # 构建 nginx-php 镜像
## 定制 ## 定制
- 安装 nginx 和 php7 - 安装 nginx 和 php
- 固定一些常用配置 - 固定一些常用配置
- 每 10 秒扫描一次配置文件,有变更会立即 reload - 每 10 秒扫描一次配置文件,有变更会立即 reload
@@ -11,6 +11,7 @@
- /var/lib/nginx/html: nginx 前端文件存放目录 - /var/lib/nginx/html: nginx 前端文件存放目录
- /var/log/nginx: nginx 日志目录 - /var/log/nginx: nginx 日志目录
- /var/log/php7: php7 日志目录 - /var/log/php7: php7 日志目录
- /var/log/php81: php7 日志目录
## 案例 ## 案例
- [Demo/SingleNode/](Demo/SingleNode/): 部署 nginx-php - [Demo/SingleNode/](Demo/SingleNode/): 部署 nginx-php

View File

@@ -9,7 +9,8 @@ export LANG=en_US.UTF-8
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)" [ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
ROOT_DIR="$(cd $(dirname $0) && pwd)" ROOT_DIR="$(cd $(dirname $0) && pwd)"
IMAGE="harbor.colben.cn/general/mysql$ARCH:5.7" TAG=$1
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:$TAG"
if [ -t 0 ]; then if [ -t 0 ]; then
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; } function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
@@ -51,7 +52,7 @@ function Build {
&& Warn Removing image $IMAGE ... \ && Warn Removing image $IMAGE ... \
&& docker rmi $IMAGE && docker rmi $IMAGE
Warn Building image: $IMAGE ... Warn Building image: $IMAGE ...
docker build --force-rm --build-arg ARCH="$ARCH" -t $IMAGE -f Dockerfile-mysql5.7 . docker build --force-rm --build-arg ARCH="$ARCH" -t $IMAGE -f Dockerfile-$TAG .
YesOrNo Push image: $IMAGE? && docker push $IMAGE YesOrNo Push image: $IMAGE? && docker push $IMAGE
} }

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
nginx: nginx:
image: harbor.colben.cn/general/nginx image: harbor.boyachain.cn:20443/general/nginx
container_name: nginx container_name: nginx
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
keepalived: keepalived:
image: harbor.colben.cn/general/keepalived image: harbor.boyachain.cn:20443/general/keepalived
container_name: keepalived container_name: keepalived
restart: "on-failure" restart: "on-failure"
stop_grace_period: 1m stop_grace_period: 1m
@@ -17,7 +17,7 @@ services:
target: /var/log/keepalived target: /var/log/keepalived
nginx: nginx:
image: harbor.colben.cn/general/nginx image: harbor.boyachain.cn:20443/general/nginx
container_name: nginx container_name: nginx
restart: "on-failure" restart: "on-failure"
stop_grace_period: 1m stop_grace_period: 1m

View File

@@ -1,5 +1,5 @@
ARG ARCH ARG ARCH
FROM harbor.colben.cn/general/alpine$ARCH FROM harbor.colben.cn/general/alpine$ARCH:3.20
MAINTAINER Colben colbenlee@gmail.com MAINTAINER Colben colbenlee@gmail.com
ADD --chown=root:root /ADD/ /opt/ ADD --chown=root:root /ADD/ /opt/
RUN apk update \ RUN apk update \

View File

@@ -9,7 +9,8 @@ export LANG=en_US.UTF-8
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)" [ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
ROOT_DIR="$(cd $(dirname $0) && pwd)" ROOT_DIR="$(cd $(dirname $0) && pwd)"
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:latest" TAG=$1
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:$TAG"
if [ -t 0 ]; then if [ -t 0 ]; then
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; } function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
@@ -51,7 +52,7 @@ function Build {
&& Warn Removing image $IMAGE ... \ && Warn Removing image $IMAGE ... \
&& docker rmi $IMAGE && docker rmi $IMAGE
Warn Building image: $IMAGE ... Warn Building image: $IMAGE ...
docker build --force-rm --build-arg ARCH="$ARCH" -t $IMAGE . docker build --force-rm --build-arg ARCH="$ARCH" -t $IMAGE -f Dockerfile-$TAG .
YesOrNo Push image: $IMAGE? && docker push $IMAGE YesOrNo Push image: $IMAGE? && docker push $IMAGE
} }

View File

@@ -47,9 +47,9 @@ function Init {
function StartProc { function StartProc {
Print Starting pgsql ... Print Starting pgsql ...
local sock="/tmp/.s.PGSQL.$(su - postgres -c 'postmaster -C port')" local sock="/tmp/.s.PGSQL.$(su - postgres -c 'postgres -C port')"
rm -f $sock rm -f $sock
su - postgres -c postmaster & su - postgres -c postgres &
PIDS="$PIDS $!" PIDS="$PIDS $!"
while sleep 1; do while sleep 1; do
[ -e $sock ] && break || echo -n . [ -e $sock ] && break || echo -n .

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
pgsql: pgsql:
image: harbor.colben.cn/general/pgsql:15 image: harbor.boyachain.cn:20443/general/pgsql:15
container_name: pgsql container_name: pgsql
restart: "on-failure" restart: "on-failure"
stop_grace_period: 32s stop_grace_period: 32s

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
pgsql1: pgsql1:
image: harbor.colben.cn/general/pgsql:15 image: harbor.boyachain.cn:20443/general/pgsql:15
container_name: pgsql1 container_name: pgsql1
restart: "on-failure" restart: "on-failure"
stop_grace_period: 32s stop_grace_period: 32s
@@ -20,7 +20,7 @@ services:
target: /var/log/pgsql target: /var/log/pgsql
pgsql2: pgsql2:
image: harbor.colben.cn/general/pgsql:15 image: harbor.boyachain.cn:20443/general/pgsql:15
container_name: pgsql2 container_name: pgsql2
restart: "on-failure" restart: "on-failure"
stop_grace_period: 32s stop_grace_period: 32s

View File

@@ -20,11 +20,11 @@ gpgcheck=0\n\
gpgkey=file:///etc/pki/rpm-gpg/PGDG-RPM-GPG-KEY-RHEL\n\ gpgkey=file:///etc/pki/rpm-gpg/PGDG-RPM-GPG-KEY-RHEL\n\
repo_gpgcheck = 0\n\ repo_gpgcheck = 0\n\
" > /etc/yum.repos.d/pgsql-$VERSION.repo \ " > /etc/yum.repos.d/pgsql-$VERSION.repo \
&& dnf makecache \ && microdnf makecache \
&& dnf -y module disable postgresql \ && microdnf module disable postgresql \
&& dnf install -y postgresql$VERSION-server \ && microdnf install postgresql$VERSION-server \
&& rm -rf /var/lib/pgsql/* \ && rm -rf /var/lib/pgsql/* \
/var/cache/dnf \ /var/cache/yum \
/var/lib/dnf \ /var/lib/dnf \
/var/log/* \ /var/log/* \
&& rm -f /var/lib/pgsql/.bash* \ && rm -f /var/lib/pgsql/.bash* \

View File

@@ -9,8 +9,8 @@ export LANG=en_US.UTF-8
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)" [ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
ROOT_DIR="$(cd $(dirname $0) && pwd)" ROOT_DIR="$(cd $(dirname $0) && pwd)"
VERSION=${1:?} TAG=${1:?}
IMAGE="harbor.colben.cn/general/pgsql$ARCH:$VERSION" IMAGE="harbor.colben.cn/general/pgsql$ARCH:$TAG"
if [ -t 0 ]; then if [ -t 0 ]; then
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; } function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
@@ -52,7 +52,7 @@ function Build {
&& Warn Removing image $IMAGE ... \ && Warn Removing image $IMAGE ... \
&& docker rmi $IMAGE && docker rmi $IMAGE
Warn Building image: $IMAGE ... Warn Building image: $IMAGE ...
docker build --force-rm --build-arg ARCH="$ARCH" --build-arg VERSION="$VERSION" -t $IMAGE -f Dockerfile . docker build --force-rm --build-arg ARCH="$ARCH" --build-arg VERSION="$TAG" -t $IMAGE .
YesOrNo Push image: $IMAGE? && docker push $IMAGE YesOrNo Push image: $IMAGE? && docker push $IMAGE
} }

View File

@@ -1,8 +1,8 @@
FROM photon:5 FROM photon:4.0
MAINTAINER Colben colbenlee@gmail.com MAINTAINER Colben colbenlee@gmail.com
ADD --chown=root:root /ADD/ /etc/ ADD --chown=root:root /ADD/ /etc/
RUN tdnf makecache \ RUN tdnf makecache \
&& tdnf -y install less vim iproute2 shadow tar libstdc++ coreutils \ && tdnf -y install less vim iproute2 shadow tar libstdc++ coreutils findutils rpm \
&& rm -rf /var/cache/tdnf \ && rm -rf /var/cache/tdnf \
&& echo "export PS1='\[\e[33;1;1m\][\[\e[0m\]\[\e[35;1m\]\u\[\e[0m\]\[\e[33;1;1m\]@\[\e[0m\]\[\e[31;1;1m\]docker\[\e[0m\]\[\e[32;1;1m\](\h)\[\e[0m\]\[\e[33;1;1m\]:\[\e[0m\]\[\e[32m\]\w\[\e[0m\]\[\e[33;1;1m\]]\[\e[0m\]\[\e[36m\]\$\[\e[0m\] '" >> /etc/bash.bashrc \ && echo "export PS1='\[\e[33;1;1m\][\[\e[0m\]\[\e[35;1m\]\u\[\e[0m\]\[\e[33;1;1m\]@\[\e[0m\]\[\e[31;1;1m\]docker\[\e[0m\]\[\e[32;1;1m\](\h)\[\e[0m\]\[\e[33;1;1m\]:\[\e[0m\]\[\e[32m\]\w\[\e[0m\]\[\e[33;1;1m\]]\[\e[0m\]\[\e[36m\]\$\[\e[0m\] '" >> /etc/bash.bashrc \
&& echo "export PS2='\[\e[36m\]>\[\e[0m\] '" >> /etc/bash.bashrc && echo "export PS2='\[\e[36m\]>\[\e[0m\] '" >> /etc/bash.bashrc

10
photon/Dockerfile-5 Normal file
View File

@@ -0,0 +1,10 @@
FROM photon:5.0
MAINTAINER Colben colbenlee@gmail.com
ADD --chown=root:root /ADD/ /etc/
RUN tdnf makecache \
&& tdnf -y install less vim iproute2 shadow tar libstdc++ coreutils findutils rpm \
&& rm -rf /var/cache/tdnf \
&& echo "export PS1='\[\e[33;1;1m\][\[\e[0m\]\[\e[35;1m\]\u\[\e[0m\]\[\e[33;1;1m\]@\[\e[0m\]\[\e[31;1;1m\]docker\[\e[0m\]\[\e[32;1;1m\](\h)\[\e[0m\]\[\e[33;1;1m\]:\[\e[0m\]\[\e[32m\]\w\[\e[0m\]\[\e[33;1;1m\]]\[\e[0m\]\[\e[36m\]\$\[\e[0m\] '" >> /etc/bash.bashrc \
&& echo "export PS2='\[\e[36m\]>\[\e[0m\] '" >> /etc/bash.bashrc
ENV LANG=en_US.UTF-8

View File

@@ -9,7 +9,8 @@ export LANG=en_US.UTF-8
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)" [ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
ROOT_DIR="$(cd $(dirname $0) && pwd)" ROOT_DIR="$(cd $(dirname $0) && pwd)"
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:5" TAG=$1
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:$TAG"
if [ -t 0 ]; then if [ -t 0 ]; then
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; } function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
@@ -53,7 +54,7 @@ function Build {
&& Warn Removing image $IMAGE ... \ && Warn Removing image $IMAGE ... \
&& docker rmi $IMAGE && docker rmi $IMAGE
Warn Building image: $IMAGE ... Warn Building image: $IMAGE ...
docker build --force-rm -t $IMAGE . docker build --force-rm -t $IMAGE -f Dockerfile-$TAG .
YesOrNo Push image: $IMAGE? && docker push $IMAGE YesOrNo Push image: $IMAGE? && docker push $IMAGE
} }

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
prometheus: prometheus:
image: harbor.colben.cn/general/prometheus image: harbor.boyachain.cn:20443/general/prometheus
container_name: prometheus container_name: prometheus
restart: "on-failure" restart: "on-failure"
stop_grace_period: 5m stop_grace_period: 5m

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
redis: redis:
image: harbor.colben.cn/general/redis image: harbor.boyachain.cn:20443/general/redis
container_name: redis container_name: redis
restart: "on-failure" restart: "on-failure"
stop_grace_period: 1m stop_grace_period: 1m

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
redis-6371: redis-6371:
image: harbor.colben.cn/general/redis image: harbor.boyachain.cn:20443/general/redis
container_name: redis-6371 container_name: redis-6371
restart: on-failure restart: on-failure
stop_grace_period: 1m stop_grace_period: 1m
@@ -26,7 +26,7 @@ services:
target: /var/log/redis target: /var/log/redis
redis-6372: redis-6372:
image: harbor.colben.cn/general/redis image: harbor.boyachain.cn:20443/general/redis
container_name: redis-6372 container_name: redis-6372
restart: on-failure restart: on-failure
stop_grace_period: 1m stop_grace_period: 1m
@@ -48,7 +48,7 @@ services:
target: /var/log/redis target: /var/log/redis
redis-6373: redis-6373:
image: harbor.colben.cn/general/redis image: harbor.boyachain.cn:20443/general/redis
container_name: redis-6373 container_name: redis-6373
restart: on-failure restart: on-failure
stop_grace_period: 1m stop_grace_period: 1m
@@ -70,7 +70,7 @@ services:
target: /var/log/redis target: /var/log/redis
redis-6374: redis-6374:
image: harbor.colben.cn/general/redis image: harbor.boyachain.cn:20443/general/redis
container_name: redis-6374 container_name: redis-6374
restart: on-failure restart: on-failure
stop_grace_period: 1m stop_grace_period: 1m
@@ -92,7 +92,7 @@ services:
target: /var/log/redis target: /var/log/redis
redis-6375: redis-6375:
image: harbor.colben.cn/general/redis image: harbor.boyachain.cn:20443/general/redis
container_name: redis-6375 container_name: redis-6375
restart: on-failure restart: on-failure
stop_grace_period: 1m stop_grace_period: 1m
@@ -114,7 +114,7 @@ services:
target: /var/log/redis target: /var/log/redis
redis-6376: redis-6376:
image: harbor.colben.cn/general/redis image: harbor.boyachain.cn:20443/general/redis
container_name: redis-6376 container_name: redis-6376
restart: on-failure restart: on-failure
stop_grace_period: 1m stop_grace_period: 1m

View File

@@ -2,7 +2,7 @@ version: "3.7"
services: services:
redis-6371: redis-6371:
image: harbor.colben.cn/general/redis image: harbor.boyachain.cn:20443/general/redis
container_name: redis-6371 container_name: redis-6371
restart: on-failure restart: on-failure
stop_grace_period: 1m stop_grace_period: 1m
@@ -25,7 +25,7 @@ services:
target: /var/log/redis target: /var/log/redis
redis-6372: redis-6372:
image: harbor.colben.cn/general/redis image: harbor.boyachain.cn:20443/general/redis
container_name: redis-6372 container_name: redis-6372
restart: on-failure restart: on-failure
stop_grace_period: 1m stop_grace_period: 1m
@@ -47,7 +47,7 @@ services:
target: /var/log/redis target: /var/log/redis
redis-6373: redis-6373:
image: harbor.colben.cn/general/redis image: harbor.boyachain.cn:20443/general/redis
container_name: redis-6373 container_name: redis-6373
restart: on-failure restart: on-failure
stop_grace_period: 1m stop_grace_period: 1m

Some files were not shown because too many files have changed in this diff Show More