update
This commit is contained in:
@@ -1,11 +0,0 @@
|
||||
# 构建 alpine 镜像
|
||||
|
||||
## 导入文件
|
||||
- 本机时区 /etc/localtime
|
||||
|
||||
## 定制
|
||||
- 使用 Asia/Shanghai 时区
|
||||
- 修改软件源,开启 edge
|
||||
- 安装 bash curl coreutils iproute2
|
||||
- 默认语言 en_US.UTF-8
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
# 构建 alpine 镜像
|
||||
|
||||
## 导入文件
|
||||
- 本机时区 /etc/localtime
|
||||
|
||||
## 定制
|
||||
- 使用 Asia/Shanghai 时区
|
||||
- 修改软件源,开启 edge
|
||||
- 安装 bash curl coreutils iproute2
|
||||
- 默认语言 en_US.UTF-8
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
ARG ARCH
|
||||
FROM harbor.colben.cn/general/alpine$ARCH
|
||||
FROM harbor.colben.cn/general/alpine$ARCH:3.20
|
||||
MAINTAINER Colben colbenlee@gmail.com
|
||||
RUN apk update \
|
||||
&& apk add --no-cache linux-headers libc-dev gcc python3 python3-dev py3-pip \
|
||||
|
||||
14
alpine/Dockerfile-3.17
Normal file
14
alpine/Dockerfile-3.17
Normal 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
|
||||
|
||||
@@ -9,7 +9,8 @@ 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:latest"
|
||||
TAG=$1
|
||||
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:$TAG"
|
||||
|
||||
if [ -t 0 ]; then
|
||||
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 ... \
|
||||
&& docker rmi $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
|
||||
}
|
||||
|
||||
|
||||
@@ -12,8 +12,10 @@ trap Quit EXIT
|
||||
|
||||
PIDS=
|
||||
GOT_SIGTERM=
|
||||
LOG_DIR='/var/log/cloudreve'
|
||||
DATA_DIR='/var/lib/cloudreve'
|
||||
LOG_DIR=/var/log/cloudreve
|
||||
DATA_DIR=/var/lib/cloudreve
|
||||
SOCK_FILE=/sock/cloudreve
|
||||
CONF_FILE=$DATA_DIR/cloudreve.ini
|
||||
|
||||
function Print {
|
||||
local file=/dev/null
|
||||
@@ -32,9 +34,8 @@ function Quit {
|
||||
}
|
||||
|
||||
function ModifyConf {
|
||||
[ -e $DATA_DIR/cloudreve.ini ] && return 0
|
||||
Print Generating cloudreve.ini ...
|
||||
cat > $DATA_DIR/cloudreve.ini <<-EOF
|
||||
Print Generating $CONF_FILE ...
|
||||
cat > $CONF_FILE <<-EOF
|
||||
[System]
|
||||
Debug = false
|
||||
Mode = master
|
||||
@@ -43,7 +44,8 @@ SessionSecret = $(date +%F | sha256sum | cut -c -64)
|
||||
HashIDSalt = $(date +%T | sha256sum | cut -c -64)
|
||||
|
||||
#[UnixSocket]
|
||||
#Listen = /socket/cloudreve
|
||||
#Listen = $SOCK_FILE
|
||||
#Perm = 0666
|
||||
|
||||
[Database]
|
||||
DBFile = $DATA_DIR/cloudreve.db
|
||||
@@ -71,15 +73,17 @@ EOF
|
||||
|
||||
function StartProc {
|
||||
Print Starting cloudreve ...
|
||||
rm -f /socket/cloudreve
|
||||
/opt/cloudreve -c $DATA_DIR/cloudreve.ini &>> $LOG_DIR/cloudreve.out &
|
||||
cd $DATA_DIR
|
||||
/opt/cloudreve -c cloudreve.ini &>> $LOG_DIR/cloudreve.out &
|
||||
PIDS="$PIDS $!"
|
||||
sleep 8
|
||||
[ -e $SOCK_FILE ] && chmod 0666 $SOCK_FILE
|
||||
Print Cloudreve started.
|
||||
}
|
||||
|
||||
function Main {
|
||||
local pid=
|
||||
ModifyConf
|
||||
[ -e $CONF_FILE ] || ModifyConf
|
||||
StartProc
|
||||
trap "GOT_SIGTERM=1; Print Got SIGTERM ..." SIGTERM
|
||||
while [ -z "$GOT_SIGTERM" ] && sleep 2; do
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
rsync:
|
||||
image: harbor.colben.cn/general/cloudreve
|
||||
image: harbor.boyachain.cn:20443/general/cloudreve
|
||||
container_name: cloudreve
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 1m
|
||||
|
||||
@@ -2,6 +2,7 @@ ARG ARCH
|
||||
FROM harbor.colben.cn/general/photon$ARCH:4
|
||||
MAINTAINER Colben colbenlee@gmail.com
|
||||
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"]
|
||||
|
||||
|
||||
@@ -43,13 +43,6 @@ function YesOrNo {
|
||||
function Update {
|
||||
Warn Preparing cloudreve ...
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
datax1:
|
||||
image: harbor.colben.cn/general/datax
|
||||
image: harbor.boyachain.cn:20443/general/datax
|
||||
container_name: datax1
|
||||
restart: "no"
|
||||
stop_grace_period: 1m
|
||||
@@ -22,7 +22,7 @@ services:
|
||||
target: /opt/datax/log_perf
|
||||
|
||||
datax2:
|
||||
image: harbor.colben.cn/general/datax
|
||||
image: harbor.boyachain.cn:20443/general/datax
|
||||
container_name: datax2
|
||||
restart: "no"
|
||||
stop_grace_period: 1m
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
datax:
|
||||
image: harbor.colben.cn/general/datax
|
||||
image: harbor.boyachain.cn:20443/general/datax
|
||||
container_name: datax
|
||||
restart: "no"
|
||||
stop_grace_period: 1m
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
es:
|
||||
image: harbor.colben.cn/general/elasticsearch:6
|
||||
image: harbor.boyachain.cn:20443/general/elasticsearch:6
|
||||
container_name: es
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
es1:
|
||||
image: harbor.colben.cn/general/elasticsearch:6
|
||||
image: harbor.boyachain.cn:20443/general/elasticsearch:6
|
||||
container_name: es1
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
@@ -37,7 +37,7 @@ services:
|
||||
target: /opt/es/offline-plugins
|
||||
|
||||
es2:
|
||||
image: harbor.colben.cn/general/elasticsearch:6
|
||||
image: harbor.boyachain.cn:20443/general/elasticsearch:6
|
||||
container_name: es2
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
@@ -72,7 +72,7 @@ services:
|
||||
target: /opt/es/offline-plugins
|
||||
|
||||
es3:
|
||||
image: harbor.colben.cn/general/elasticsearch:6
|
||||
image: harbor.boyachain.cn:20443/general/elasticsearch:6
|
||||
container_name: es3
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
es-master1:
|
||||
image: harbor.colben.cn/general/elasticsearch:7
|
||||
image: harbor.boyachain.cn:20443/general/elasticsearch:7
|
||||
container_name: es-master1
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
@@ -48,7 +48,7 @@ services:
|
||||
target: /opt/es/offline-plugins
|
||||
|
||||
es-master2:
|
||||
image: harbor.colben.cn/general/elasticsearch:7
|
||||
image: harbor.boyachain.cn:20443/general/elasticsearch:7
|
||||
container_name: es-master2
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
@@ -93,7 +93,7 @@ services:
|
||||
target: /opt/es/offline-plugins
|
||||
|
||||
es-data1:
|
||||
image: harbor.colben.cn/general/elasticsearch:7
|
||||
image: harbor.boyachain.cn:20443/general/elasticsearch:7
|
||||
container_name: es-data1
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
@@ -138,7 +138,7 @@ services:
|
||||
target: /opt/es/offline-plugins
|
||||
|
||||
es-data2:
|
||||
image: harbor.colben.cn/general/elasticsearch:7
|
||||
image: harbor.boyachain.cn:20443/general/elasticsearch:7
|
||||
container_name: es-data2
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
@@ -183,7 +183,7 @@ services:
|
||||
target: /opt/es/offline-plugins
|
||||
|
||||
es-data3:
|
||||
image: harbor.colben.cn/general/elasticsearch:7
|
||||
image: harbor.boyachain.cn:20443/general/elasticsearch:7
|
||||
container_name: es-data3
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
es:
|
||||
image: harbor.colben.cn/general/elasticsearch:7
|
||||
image: harbor.boyachain.cn:20443/general/elasticsearch:7
|
||||
container_name: es
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
es1:
|
||||
image: harbor.colben.cn/general/elasticsearch:7
|
||||
image: harbor.boyachain.cn:20443/general/elasticsearch:7
|
||||
container_name: es1
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
@@ -47,7 +47,7 @@ services:
|
||||
target: /opt/es/offline-plugins
|
||||
|
||||
es2:
|
||||
image: harbor.colben.cn/general/elasticsearch:7
|
||||
image: harbor.boyachain.cn:20443/general/elasticsearch:7
|
||||
container_name: es2
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
@@ -91,7 +91,7 @@ services:
|
||||
target: /opt/es/offline-plugins
|
||||
|
||||
es3:
|
||||
image: harbor.colben.cn/general/elasticsearch:7
|
||||
image: harbor.boyachain.cn:20443/general/elasticsearch:7
|
||||
container_name: es3
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
gitea:
|
||||
image: harbor.colben.cn/general/gitea
|
||||
image: harbor.boyachain.cn:20443/general/gitea
|
||||
container_name: gitea
|
||||
restart: on-failure
|
||||
stop_grace_period: 1m
|
||||
@@ -23,7 +23,7 @@ services:
|
||||
target: /socket
|
||||
|
||||
nginx:
|
||||
image: harbor.colben.cn/general/nginx
|
||||
image: harbor.boyachain.cn:20443/general/nginx
|
||||
container_name: nginx
|
||||
restart: on-failure
|
||||
stop_grace_period: 1m
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
gitea:
|
||||
image: harbor.colben.cn/general/gitea
|
||||
image: harbor.boyachain.cn:20443/general/gitea
|
||||
container_name: gitea
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 1m
|
||||
|
||||
@@ -9,8 +9,7 @@ export LANG=en_US.UTF-8
|
||||
|
||||
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
|
||||
ROOT_DIR="$(cd $(dirname $0) && pwd)"
|
||||
VERSION=$1
|
||||
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:$VERSION"
|
||||
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:latest"
|
||||
|
||||
if [ -t 0 ]; then
|
||||
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
|
||||
@@ -43,7 +42,6 @@ function YesOrNo {
|
||||
|
||||
function Update {
|
||||
cd $ROOT_DIR
|
||||
cp -f ADD/gitea-$VERSION ADD/gitea
|
||||
chmod 0755 ADD/gitea
|
||||
}
|
||||
|
||||
|
||||
@@ -31,10 +31,10 @@ function Print {
|
||||
}
|
||||
|
||||
function Quit {
|
||||
Print killing greatsql ...
|
||||
Print killing greatsqld ...
|
||||
greatsqladmin shutdown || true
|
||||
while :; do
|
||||
pkill -f greatsqld && Print killing greatsql ... || break
|
||||
pkill -f greatsqld && Print killing greatsqld ... || break
|
||||
sleep 1
|
||||
done
|
||||
Print Container stopped.
|
||||
@@ -57,20 +57,35 @@ function Init {
|
||||
}
|
||||
|
||||
function ImportInitSql {
|
||||
local sql_file= sql_files=
|
||||
mysql -e "CREATE USER docker@localhost IDENTIFIED BY 'China_19\$(10)!'"
|
||||
mysql -e "GRANT SHUTDOWN ON *.* TO docker@localhost"
|
||||
local sql_file=
|
||||
local sql_files=
|
||||
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
|
||||
Print Importing the sql files ...
|
||||
for sql_file in $sql_files; do
|
||||
Print Importing $sql_file ...
|
||||
mysql < $sql_file
|
||||
greatsql < $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) \
|
||||
&& greatsqladmin flush-logs
|
||||
done
|
||||
}
|
||||
|
||||
function StartProc {
|
||||
Print Starting greatsql ...
|
||||
greatsqld &
|
||||
PIDS="$PIDS $!"
|
||||
while sleep 1; do
|
||||
@@ -79,12 +94,13 @@ function StartProc {
|
||||
done
|
||||
echo
|
||||
[ -z "$INIT_FLAG" ] || ImportInitSql
|
||||
SideCar &
|
||||
PIDS="$PIDS $!"
|
||||
Print GreatSQL is ready for connections.
|
||||
}
|
||||
|
||||
function Main {
|
||||
local pid=
|
||||
Print Starting greatsql ...
|
||||
Init
|
||||
StartProc
|
||||
trap "GOT_SIGTERM=1; Print Got SIGTERM ..." SIGTERM
|
||||
|
||||
@@ -3,27 +3,14 @@ FROM harbor.colben.cn/general/rocky$ARCH:8
|
||||
MAINTAINER Colben colbenlee@gmail.com
|
||||
ARG BUNDLE_FILE
|
||||
ADD --chown=root:root /ADD/ /opt/
|
||||
RUN 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 \
|
||||
&& echo -e '[epel]\n\
|
||||
RUN echo -e '[epel]\n\
|
||||
name=Extra Packages for Enterprise Linux $releasever - $basearch\n\
|
||||
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/Everything/$basearch\n\
|
||||
enabled=1\n\
|
||||
gpgcheck=0\n\
|
||||
' > /etc/yum.repos.d/epel.repo \
|
||||
&& dnf 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 makecache \
|
||||
&& 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 \
|
||||
&& tar xf $BUNDLE_FILE -C /tmp/ \
|
||||
&& 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/mysqladmin /usr/bin/greatsqladmin \
|
||||
&& rm -rf /usr/sbin/mysqld-debug \
|
||||
/var/cache/dnf \
|
||||
/var/cache/yum \
|
||||
/var/lib/dnf \
|
||||
/var/log/* \
|
||||
/etc/my.cnf.d \
|
||||
@@ -99,6 +86,19 @@ lower-case-table-names = 1\n\
|
||||
[mysqladmin]\n\
|
||||
user = docker\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"]
|
||||
|
||||
@@ -9,7 +9,8 @@ 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/greatsql$ARCH:8"
|
||||
TAG=$1
|
||||
IMAGE="harbor.colben.cn/general/greatsql$ARCH:$TAG"
|
||||
BUNDLE_FILE=
|
||||
|
||||
if [ -t 0 ]; then
|
||||
@@ -24,7 +25,7 @@ fi
|
||||
|
||||
function Quit {
|
||||
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!
|
||||
[ -z "${END:-}" ] && echo && Error Interrupted manually!
|
||||
Print Succeeded to build and push image.
|
||||
@@ -46,14 +47,14 @@ function Update {
|
||||
Warn Check files ...
|
||||
cd /release/RUNTIME
|
||||
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
|
||||
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
|
||||
Error Unknown arch: $ARCH!
|
||||
fi
|
||||
[ -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 {
|
||||
@@ -63,7 +64,7 @@ function Build {
|
||||
&& Warn Removing image $IMAGE ... \
|
||||
&& docker rmi $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
|
||||
}
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
ARG ARCH
|
||||
FROM harbor.colben.cn/general/photon$ARCH
|
||||
FROM harbor.colben.cn/general/photon$ARCH:4
|
||||
MAINTAINER Colben colbenlee@gmail.com
|
||||
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 JRE_HOME=${JAVA_HOME}/jre
|
||||
ENV CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
|
||||
|
||||
109
kafka/ADD-4/ccmd
Executable file
109
kafka/ADD-4/ccmd
Executable 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
|
||||
|
||||
31
kafka/Demo/MultiNodes/README.md
Normal file
31
kafka/Demo/MultiNodes/README.md
Normal 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
|
||||
```
|
||||
|
||||
123
kafka/Demo/MultiNodes/docker-compose.yml
Normal file
123
kafka/Demo/MultiNodes/docker-compose.yml
Normal 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
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
# 部署 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
|
||||
```
|
||||
|
||||
- 创建目录
|
||||
```
|
||||
|
||||
@@ -1,38 +1,16 @@
|
||||
version: "3.7"
|
||||
|
||||
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:
|
||||
image: harbor.colben.cn/general/kafka:2.7
|
||||
image: harbor.boyachain.cn:20443/general/kafka:4.0
|
||||
container_name: kafka
|
||||
restart: on-failure
|
||||
environment:
|
||||
KAFKA_OPTS: "-Xmx1G -Xms1G"
|
||||
_CONF_zookeeper.connect: "zk:2181"
|
||||
networks:
|
||||
kafka:
|
||||
KAFKA_HEAP_OPTS: '-Xmx1G -Xms1G'
|
||||
CONF: server
|
||||
CLUSTER_ID: xxxx
|
||||
_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:
|
||||
- type: bind
|
||||
source: ./kafka/data
|
||||
@@ -41,6 +19,3 @@ services:
|
||||
source: ./kafka/logs
|
||||
target: /opt/kafka/logs
|
||||
|
||||
networks:
|
||||
kafka:
|
||||
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
# 部署 kafka 集群
|
||||
|
||||
- 根据实际环境修改
|
||||
- docker-compose.yml
|
||||
|
||||
- 创建目录
|
||||
```
|
||||
grep '\<source:' docker-compose.yml | cut -d: -f2 | xargs mkdir -p
|
||||
```
|
||||
|
||||
- 启动
|
||||
```
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
@@ -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:
|
||||
|
||||
31
kafka/Demo/ThreeServerNodes/README.md
Normal file
31
kafka/Demo/ThreeServerNodes/README.md
Normal 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
|
||||
```
|
||||
|
||||
75
kafka/Demo/ThreeServerNodes/docker-compose.yml
Normal file
75
kafka/Demo/ThreeServerNodes/docker-compose.yml
Normal 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
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
ARG ARCH
|
||||
FROM harbor.colben.cn/general/jdk$ARCH:8
|
||||
FROM harbor.colben.cn/general/jdk$ARCH:17
|
||||
MAINTAINER Colben colbenlee@gmail.com
|
||||
ADD --chown=root:root /ADD/ /opt/
|
||||
ENV PATH=/opt/kafka/bin:$PATH
|
||||
CMD ["/opt/ccmd"]
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ fi
|
||||
|
||||
function Quit {
|
||||
local exitCode=$?
|
||||
rm -rf $ROOT_DIR/ADD/
|
||||
[ 0 -ne $exitCode ] && Error Failed to build or push image!
|
||||
[ -z "${END:-}" ] && echo && Error Interrupted manually!
|
||||
Print Succeeded to build and push image.
|
||||
@@ -41,17 +42,41 @@ function YesOrNo {
|
||||
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 {
|
||||
Warn Preparing kafka $VERSION ...
|
||||
cd $ROOT_DIR/ADD
|
||||
rm -rf $(ls | grep -v ccmd || true)
|
||||
cd $ROOT_DIR
|
||||
rm -rf ADD
|
||||
cp -af ADD-${VERSION%%.*} ADD
|
||||
cd ADD
|
||||
tar zxf /release/RUNTIME/kafka_2.13-$VERSION.tgz
|
||||
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}
|
||||
rm -rf kafka/site-docs
|
||||
rm -rf kafka/{LICENSE,licenses,NOTICE,site-docs}
|
||||
ModifyKafkaV${VERSION%%.*}
|
||||
}
|
||||
|
||||
function Build {
|
||||
@@ -61,7 +86,7 @@ function Build {
|
||||
&& Warn Removing image $IMAGE ... \
|
||||
&& docker rmi $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
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
kibana:
|
||||
image: harbor.colben.cn/general/kibana:7
|
||||
image: harbor.boyachain.cn:20443/general/kibana:7
|
||||
container_name: kibana
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 1m
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
letsencrypt:
|
||||
image: harbor.colben.cn/general/letsencrypt
|
||||
image: harbor.boyachain.cn:20443/general/letsencrypt:latest
|
||||
container_name: letsencrypt
|
||||
restart: "no"
|
||||
stop_grace_period: 1m
|
||||
@@ -18,7 +16,7 @@ services:
|
||||
target: /var/log/letsencrypt
|
||||
|
||||
letsencrypt-wildcard:
|
||||
image: harbor.colben.cn/general/letsencrypt
|
||||
image: harbor.boyachain.cn:20443/general/letsencrypt:latest
|
||||
container_name: letsencrypt-wildcard
|
||||
restart: "no"
|
||||
stop_grace_period: 1m
|
||||
|
||||
@@ -1,30 +1,31 @@
|
||||
i#!/bin/bash
|
||||
#!/bin/bash
|
||||
#=========================================
|
||||
# Author : colben
|
||||
# Create : 2022-04-04 10:12
|
||||
# Author : Colben
|
||||
# Create : 2025-11-01 20:10
|
||||
#=========================================
|
||||
|
||||
set -euo pipefail
|
||||
umask 022
|
||||
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
|
||||
SUB_DOMAIN=_acme-challenge
|
||||
RECORD_ID=
|
||||
RECORD_VA=$CERTBOT_VALIDATION
|
||||
PID_FILE=/tmp/$(basename ${0%.sh}).pid
|
||||
|
||||
if [ -t 0 ]; then
|
||||
function Print { echo -e "\033[32;1m$(date +'[%F %T]') $*\033[0m"; }
|
||||
function Warn { echo -e "\033[33;1m$(date +'[%F %T]') $*\033[0m"; }
|
||||
function Error { echo -e "\033[31;1m$(date +'[%F %T]') $*\033[0m"; exit 1; }
|
||||
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; }
|
||||
function ErrorOnly { echo -e "\033[36;1m$(date +'[%F %T]')\033[31;1m $*\033[0m"; }
|
||||
else
|
||||
#exec &> ${0%.sh}.out
|
||||
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; }
|
||||
#exec &> /var/log/$(basename ${0%.sh}).out
|
||||
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; }
|
||||
function ErrorOnly { echo -e "$(date +'[%F %T ERROR]') $*"; }
|
||||
fi
|
||||
|
||||
function Quit {
|
||||
@@ -35,107 +36,70 @@ function Quit {
|
||||
sleep 30
|
||||
}
|
||||
|
||||
function GetSignature {
|
||||
local sha1Str=$(echo -n "GET$1" | openssl dgst -sha1 -hmac "$SECRET_KEY" -binary)
|
||||
echo -n "$sha1Str" | base64 | sed -e 's/=/%3D/g' -e 's/+/%2B/g'
|
||||
function GetTxtRecord {
|
||||
local record="txt record: $SUB_DOMAIN.$DOMAIN"
|
||||
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 {
|
||||
Warn Get request url ...
|
||||
local sign=
|
||||
local resp=
|
||||
local url='cns.api.qcloud.com/v2/index.php'
|
||||
url="${url}?Action=RecordList"
|
||||
url="${url}&Nonce=$RANDOM"
|
||||
url="${url}&SecretId=$SECRET_ID"
|
||||
url="${url}&Timestamp=$(date +%s)"
|
||||
url="${url}&Version=2018-08-08"
|
||||
url="${url}&domain=$DOMAIN"
|
||||
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 CreateTxtRecord {
|
||||
local record="txt record: $SUB_DOMAIN.$DOMAIN"
|
||||
Warn Creating $record ...
|
||||
tccli dnspod CreateTXTRecord \
|
||||
--Domain $DOMAIN \
|
||||
--SubDomain $SUB_DOMAIN \
|
||||
--RecordLine '默认' \
|
||||
--Value $RECORD_VA \
|
||||
&& Print Succeeded to create $record. \
|
||||
&& return 0
|
||||
ErrorOnly Failed to create $record!
|
||||
}
|
||||
|
||||
function CreateRecord {
|
||||
Warn Get request url ...
|
||||
local sign=
|
||||
local resp=
|
||||
local url='cns.api.qcloud.com/v2/index.php'
|
||||
url="${url}?Action=RecordCreate"
|
||||
url="${url}&Nonce=$RANDOM"
|
||||
url="${url}&SecretId=$SECRET_ID"
|
||||
url="${url}&Timestamp=$(date +%s)"
|
||||
url="${url}&Version=2018-08-08"
|
||||
url="${url}&domain=$DOMAIN"
|
||||
url="${url}&recordLine=默认"
|
||||
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 ModifyTxtRecord {
|
||||
local record="txt record: $SUB_DOMAIN.$DOMAIN"
|
||||
Warn Modifying $record ...
|
||||
tccli dnspod ModifyTXTRecord \
|
||||
--Domain $DOMAIN \
|
||||
--SubDomain $SUB_DOMAIN \
|
||||
--RecordId $RECORD_ID \
|
||||
--RecordLine '默认' \
|
||||
--Value $RECORD_VA \
|
||||
&& Print Succeeded to modify $record. \
|
||||
&& return 0
|
||||
ErrorOnly Failed to modify $record!
|
||||
}
|
||||
|
||||
function DeleteRecord {
|
||||
Warn Get request url ...
|
||||
local sign=
|
||||
local resp=
|
||||
local url='cns.api.qcloud.com/v2/index.php'
|
||||
url="${url}?Action=RecordDelete"
|
||||
url="${url}&Nonce=$RANDOM"
|
||||
url="${url}&SecretId=$SECRET_ID"
|
||||
url="${url}&Timestamp=$(date +%s)"
|
||||
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
|
||||
local record="record: $SUB_DOMAIN.$DOMAIN"
|
||||
Warn Deleting $record ...
|
||||
tccli dnspod DeleteRecord \
|
||||
--Domain $DOMAIN \
|
||||
--RecordId $RECORD_ID \
|
||||
&& Print Succeeded to delete $record. \
|
||||
&& return 0
|
||||
ErrorOnly Failed to delete $record!
|
||||
}
|
||||
|
||||
function Main {
|
||||
[ -e "$PID_FILE" ] && Error Pid file $PID_FILE already exists, quit!
|
||||
echo $$ > $PID_FILE
|
||||
for _ in {1..5}; do
|
||||
ListRecord || continue
|
||||
if [ -z "$RECORD_ID" ]; then
|
||||
CreateRecord || continue
|
||||
else
|
||||
ModifyRecord || continue
|
||||
fi
|
||||
END=1
|
||||
return 0
|
||||
done
|
||||
return 1
|
||||
trap Quit EXIT
|
||||
GetTxtRecord
|
||||
[ -z "$RECORD_ID" ] && CreateTxtRecord
|
||||
[ -z "$RECORD_ID" ] || ModifyTxtRecord
|
||||
END=1
|
||||
return 0
|
||||
}
|
||||
|
||||
# Start here
|
||||
|
||||
@@ -1,10 +1,19 @@
|
||||
ARG ARCH
|
||||
FROM harbor.colben.cn/general/alpine$ARCH
|
||||
FROM harbor.colben.cn/general/alpine-python$ARCH:latest
|
||||
MAINTAINER Colben colbenlee@gmail.com
|
||||
ARG ALI
|
||||
ADD --chown=root:root /ADD/ /opt/
|
||||
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 \
|
||||
&& 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"]
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ 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:latest"
|
||||
ALI=
|
||||
|
||||
if [ -t 0 ]; then
|
||||
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }
|
||||
@@ -41,7 +42,7 @@ function YesOrNo {
|
||||
}
|
||||
|
||||
function Update {
|
||||
:
|
||||
[ -z "$ARCH" ] && ALI=aliyun-cli-linux-latest-amd64.tgz || ALI=aliyun-cli-linux-latest-arm64.tgz
|
||||
}
|
||||
|
||||
function Build {
|
||||
@@ -51,7 +52,7 @@ function Build {
|
||||
&& Warn Removing image $IMAGE ... \
|
||||
&& docker rmi $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
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
logstash:
|
||||
image: harbor.colben.cn/general/logstash:6
|
||||
image: harbor.boyachain.cn:20443/general/logstash:6
|
||||
container_name: logstash
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 2m
|
||||
|
||||
@@ -18,9 +18,9 @@ GOT_SIGTERM=
|
||||
LOG_DIR='/var/log/mysql'
|
||||
DATA_DIR='/var/lib/mysql'
|
||||
BINLOG_DIR='/var/lib/mysql-bin'
|
||||
INIT_FLAG=${INIT_FLAG:-}
|
||||
SOCK_FILE='/run/mysqld/mysqld.sock'
|
||||
PID_FILE='/run/mysqld/mysqld.pid'
|
||||
INIT_FLAG=
|
||||
|
||||
function Print {
|
||||
local file=/dev/null
|
||||
@@ -30,7 +30,7 @@ function Print {
|
||||
|
||||
function Quit {
|
||||
Print killing mysqld ...
|
||||
mysqladmin shutdown --wait-for-all-slaves || true
|
||||
mysqladmin shutdown || true
|
||||
while :; do
|
||||
pkill -f mysqld && Print killing mysqld ... || break
|
||||
sleep 1
|
||||
@@ -49,9 +49,37 @@ function Init {
|
||||
fi
|
||||
}
|
||||
|
||||
function StartProc {
|
||||
function ImportInitSql {
|
||||
local sql_file=
|
||||
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 ...
|
||||
mysqld -u mysql &
|
||||
PIDS="$PIDS $!"
|
||||
@@ -60,20 +88,9 @@ function StartProc {
|
||||
[ ! -e /proc/$! ] && echo && Print unexpected error! && exit
|
||||
done
|
||||
echo
|
||||
if [ -n "$INIT_FLAG" ]; then
|
||||
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 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
|
||||
[ -z "$INIT_FLAG" ] || ImportInitSql
|
||||
SideCar &
|
||||
PIDS="$PIDS $!"
|
||||
Print MySQL is ready for connections.
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
mariadb:
|
||||
image: harbor.colben.cn/general/mariadb
|
||||
image: harbor.boyachain.cn:20443/general/mariadb
|
||||
container_name: mariadb
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
ARG ARCH
|
||||
FROM harbor.colben.cn/general/alpine$ARCH
|
||||
FROM harbor.colben.cn/general/alpine$ARCH:3.17
|
||||
MAINTAINER Colben colbenlee@gmail.com
|
||||
ADD --chown=root:root /ADD/ /opt/
|
||||
RUN apk update \
|
||||
@@ -9,7 +9,8 @@ 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:latest"
|
||||
TAG=$1
|
||||
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:$TAG"
|
||||
|
||||
if [ -t 0 ]; then
|
||||
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 ... \
|
||||
&& docker rmi $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
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
mongodb:
|
||||
image: harbor.colben.cn/general/mongodb
|
||||
image: harbor.boyachain.cn:20443/general/mongodb
|
||||
container_name: mongodb
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
|
||||
@@ -40,7 +40,7 @@ function Quit {
|
||||
}
|
||||
|
||||
function Init {
|
||||
rm -f ${SOCK_FILE}* ${PID_FILE}
|
||||
rm -f ${SOCK_FILE}* $PID_FILE
|
||||
chown -R mysql:mysql $LOG_DIR $BINLOG_DIR $DATA_DIR
|
||||
if [ ! -d "$DATA_DIR/mysql" ]; then
|
||||
Print Initing mysql db files ...
|
||||
@@ -50,7 +50,8 @@ function Init {
|
||||
}
|
||||
|
||||
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 "GRANT RELOAD,SHUTDOWN ON *.* TO docker@localhost"
|
||||
if sql_files="$(ls $LOG_DIR/init_sql/*.sql 2>/dev/null)"; then
|
||||
@@ -64,7 +65,8 @@ function ImportInitSql {
|
||||
}
|
||||
|
||||
function SideCar {
|
||||
local day= last_day=$(date +%d)
|
||||
local day=
|
||||
local last_day=$(date +%d)
|
||||
while sleep 8; do
|
||||
day=$(date +%d) \
|
||||
&& [ "$day" != "$last_day" ] \
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
mysql:
|
||||
image: harbor.colben.cn/general/mysql:8
|
||||
image: harbor.boyachain.cn:20443/general/mysql:8
|
||||
container_name: mysql
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
keepalived:
|
||||
image: harbor.colben.cn/general/keepalived
|
||||
image: harbor.boyachain.cn:20443/general/keepalived
|
||||
container_name: keepalived
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 1m
|
||||
@@ -17,7 +17,7 @@ services:
|
||||
target: /var/log/keepalived
|
||||
|
||||
mysql:
|
||||
image: harbor.colben.cn/general/mysql:8
|
||||
image: harbor.boyachain.cn:20443/general/mysql:8
|
||||
container_name: mysql
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
|
||||
@@ -3,8 +3,7 @@ FROM harbor.colben.cn/general/centos$ARCH:7
|
||||
MAINTAINER Colben colbenlee@gmail.com
|
||||
ARG ARCH
|
||||
ADD --chown=root:root /ADD/ /opt/
|
||||
RUN arch=${ARCH:-x86_64} \
|
||||
&& echo -e "[mysql57-community]\n\
|
||||
RUN echo -e "[mysql57-community]\n\
|
||||
name=MySQL 5.7 Community Server\n\
|
||||
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/\$basearch/\n\
|
||||
enabled=1\n\
|
||||
@@ -3,18 +3,17 @@ FROM harbor.colben.cn/general/rocky$ARCH:8
|
||||
MAINTAINER Colben colbenlee@gmail.com
|
||||
ARG ARCH
|
||||
ADD --chown=root:root /ADD/ /opt/
|
||||
RUN arch=${ARCH:-x86_64} \
|
||||
&& echo -e "[mysql80-community]\n\
|
||||
RUN echo -e "[mysql80-community]\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\
|
||||
gpgcheck=0\n\
|
||||
" > /etc/yum.repos.d/mysql-8.0.repo \
|
||||
&& dnf makecache \
|
||||
&& dnf -y module disable mysql \
|
||||
&& dnf install mysql-community-server -y \
|
||||
&& microdnf makecache \
|
||||
&& microdnf module disable mysql \
|
||||
&& microdnf install mysql-community-server \
|
||||
&& rm -rf /usr/sbin/mysqld-debug \
|
||||
/var/cache/dnf \
|
||||
/var/cache/yum \
|
||||
/var/lib/dnf \
|
||||
/var/log/* \
|
||||
/etc/my.cnf.d \
|
||||
@@ -9,7 +9,8 @@ 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/mysql$ARCH:8"
|
||||
TAG=$1
|
||||
IMAGE="harbor.colben.cn/general/mysql$ARCH:$TAG"
|
||||
|
||||
if [ -t 0 ]; then
|
||||
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 ... \
|
||||
&& docker rmi $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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
server {
|
||||
listen 80;
|
||||
location / {}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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是服务器的网卡名
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
server {
|
||||
listen 80;
|
||||
location / {}
|
||||
}
|
||||
|
||||
@@ -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/): 两节点+高可用
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
45
nginx-php/Demo/SingleNode/docker-compose.yml
Normal file
45
nginx-php/Demo/SingleNode/docker-compose.yml
Normal 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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
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
|
||||
ADD --chown=root:root /ADD/ /opt/
|
||||
ADD --chown=root:root /ADD-7.4/ /opt/
|
||||
RUN sed -i '/edge/d' /etc/apk/repositories \
|
||||
&& apk update \
|
||||
&& apk add --no-cache php7 php7-common php7-iconv php7-json php7-gd php7-curl php7-xml \
|
||||
@@ -1,7 +1,7 @@
|
||||
ARG ARCH
|
||||
FROM harbor.colben.cn/general/nginx$ARCH
|
||||
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 \
|
||||
&& apk update \
|
||||
&& apk add --no-cache php81 php81-common php81-iconv php81-json php81-gd php81-curl \
|
||||
@@ -1,7 +1,7 @@
|
||||
# 构建 nginx-php 镜像
|
||||
|
||||
## 定制
|
||||
- 安装 nginx 和 php7
|
||||
- 安装 nginx 和 php
|
||||
- 固定一些常用配置
|
||||
- 每 10 秒扫描一次配置文件,有变更会立即 reload
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
- /var/lib/nginx/html: nginx 前端文件存放目录
|
||||
- /var/log/nginx: nginx 日志目录
|
||||
- /var/log/php7: php7 日志目录
|
||||
- /var/log/php81: php7 日志目录
|
||||
|
||||
## 案例
|
||||
- [Demo/SingleNode/](Demo/SingleNode/): 部署 nginx-php
|
||||
@@ -9,7 +9,8 @@ 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/mysql$ARCH:5.7"
|
||||
TAG=$1
|
||||
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:$TAG"
|
||||
|
||||
if [ -t 0 ]; then
|
||||
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 ... \
|
||||
&& docker rmi $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
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
nginx:
|
||||
image: harbor.colben.cn/general/nginx
|
||||
image: harbor.boyachain.cn:20443/general/nginx
|
||||
container_name: nginx
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
keepalived:
|
||||
image: harbor.colben.cn/general/keepalived
|
||||
image: harbor.boyachain.cn:20443/general/keepalived
|
||||
container_name: keepalived
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 1m
|
||||
@@ -17,7 +17,7 @@ services:
|
||||
target: /var/log/keepalived
|
||||
|
||||
nginx:
|
||||
image: harbor.colben.cn/general/nginx
|
||||
image: harbor.boyachain.cn:20443/general/nginx
|
||||
container_name: nginx
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 1m
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
ARG ARCH
|
||||
FROM harbor.colben.cn/general/alpine$ARCH
|
||||
FROM harbor.colben.cn/general/alpine$ARCH:3.20
|
||||
MAINTAINER Colben colbenlee@gmail.com
|
||||
ADD --chown=root:root /ADD/ /opt/
|
||||
RUN apk update \
|
||||
@@ -9,7 +9,8 @@ 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:latest"
|
||||
TAG=$1
|
||||
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:$TAG"
|
||||
|
||||
if [ -t 0 ]; then
|
||||
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 ... \
|
||||
&& docker rmi $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
|
||||
}
|
||||
|
||||
|
||||
@@ -47,9 +47,9 @@ function Init {
|
||||
|
||||
function StartProc {
|
||||
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
|
||||
su - postgres -c postmaster &
|
||||
su - postgres -c postgres &
|
||||
PIDS="$PIDS $!"
|
||||
while sleep 1; do
|
||||
[ -e $sock ] && break || echo -n .
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
pgsql:
|
||||
image: harbor.colben.cn/general/pgsql:15
|
||||
image: harbor.boyachain.cn:20443/general/pgsql:15
|
||||
container_name: pgsql
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 32s
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
pgsql1:
|
||||
image: harbor.colben.cn/general/pgsql:15
|
||||
image: harbor.boyachain.cn:20443/general/pgsql:15
|
||||
container_name: pgsql1
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 32s
|
||||
@@ -20,7 +20,7 @@ services:
|
||||
target: /var/log/pgsql
|
||||
|
||||
pgsql2:
|
||||
image: harbor.colben.cn/general/pgsql:15
|
||||
image: harbor.boyachain.cn:20443/general/pgsql:15
|
||||
container_name: pgsql2
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 32s
|
||||
|
||||
@@ -20,11 +20,11 @@ gpgcheck=0\n\
|
||||
gpgkey=file:///etc/pki/rpm-gpg/PGDG-RPM-GPG-KEY-RHEL\n\
|
||||
repo_gpgcheck = 0\n\
|
||||
" > /etc/yum.repos.d/pgsql-$VERSION.repo \
|
||||
&& dnf makecache \
|
||||
&& dnf -y module disable postgresql \
|
||||
&& dnf install -y postgresql$VERSION-server \
|
||||
&& microdnf makecache \
|
||||
&& microdnf module disable postgresql \
|
||||
&& microdnf install postgresql$VERSION-server \
|
||||
&& rm -rf /var/lib/pgsql/* \
|
||||
/var/cache/dnf \
|
||||
/var/cache/yum \
|
||||
/var/lib/dnf \
|
||||
/var/log/* \
|
||||
&& rm -f /var/lib/pgsql/.bash* \
|
||||
|
||||
@@ -9,8 +9,8 @@ export LANG=en_US.UTF-8
|
||||
|
||||
[ 'x86_64' == "$(uname -m)" ] && ARCH='' || ARCH="-$(uname -m)"
|
||||
ROOT_DIR="$(cd $(dirname $0) && pwd)"
|
||||
VERSION=${1:?}
|
||||
IMAGE="harbor.colben.cn/general/pgsql$ARCH:$VERSION"
|
||||
TAG=${1:?}
|
||||
IMAGE="harbor.colben.cn/general/pgsql$ARCH:$TAG"
|
||||
|
||||
if [ -t 0 ]; then
|
||||
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 ... \
|
||||
&& docker rmi $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
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
FROM photon:5
|
||||
FROM photon:4.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 \
|
||||
&& 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
|
||||
10
photon/Dockerfile-5
Normal file
10
photon/Dockerfile-5
Normal 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
|
||||
|
||||
@@ -9,7 +9,8 @@ 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:5"
|
||||
TAG=$1
|
||||
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:$TAG"
|
||||
|
||||
if [ -t 0 ]; then
|
||||
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 ... \
|
||||
&& docker rmi $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
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
prometheus:
|
||||
image: harbor.colben.cn/general/prometheus
|
||||
image: harbor.boyachain.cn:20443/general/prometheus
|
||||
container_name: prometheus
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 5m
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
redis:
|
||||
image: harbor.colben.cn/general/redis
|
||||
image: harbor.boyachain.cn:20443/general/redis
|
||||
container_name: redis
|
||||
restart: "on-failure"
|
||||
stop_grace_period: 1m
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
redis-6371:
|
||||
image: harbor.colben.cn/general/redis
|
||||
image: harbor.boyachain.cn:20443/general/redis
|
||||
container_name: redis-6371
|
||||
restart: on-failure
|
||||
stop_grace_period: 1m
|
||||
@@ -26,7 +26,7 @@ services:
|
||||
target: /var/log/redis
|
||||
|
||||
redis-6372:
|
||||
image: harbor.colben.cn/general/redis
|
||||
image: harbor.boyachain.cn:20443/general/redis
|
||||
container_name: redis-6372
|
||||
restart: on-failure
|
||||
stop_grace_period: 1m
|
||||
@@ -48,7 +48,7 @@ services:
|
||||
target: /var/log/redis
|
||||
|
||||
redis-6373:
|
||||
image: harbor.colben.cn/general/redis
|
||||
image: harbor.boyachain.cn:20443/general/redis
|
||||
container_name: redis-6373
|
||||
restart: on-failure
|
||||
stop_grace_period: 1m
|
||||
@@ -70,7 +70,7 @@ services:
|
||||
target: /var/log/redis
|
||||
|
||||
redis-6374:
|
||||
image: harbor.colben.cn/general/redis
|
||||
image: harbor.boyachain.cn:20443/general/redis
|
||||
container_name: redis-6374
|
||||
restart: on-failure
|
||||
stop_grace_period: 1m
|
||||
@@ -92,7 +92,7 @@ services:
|
||||
target: /var/log/redis
|
||||
|
||||
redis-6375:
|
||||
image: harbor.colben.cn/general/redis
|
||||
image: harbor.boyachain.cn:20443/general/redis
|
||||
container_name: redis-6375
|
||||
restart: on-failure
|
||||
stop_grace_period: 1m
|
||||
@@ -114,7 +114,7 @@ services:
|
||||
target: /var/log/redis
|
||||
|
||||
redis-6376:
|
||||
image: harbor.colben.cn/general/redis
|
||||
image: harbor.boyachain.cn:20443/general/redis
|
||||
container_name: redis-6376
|
||||
restart: on-failure
|
||||
stop_grace_period: 1m
|
||||
|
||||
@@ -2,7 +2,7 @@ version: "3.7"
|
||||
|
||||
services:
|
||||
redis-6371:
|
||||
image: harbor.colben.cn/general/redis
|
||||
image: harbor.boyachain.cn:20443/general/redis
|
||||
container_name: redis-6371
|
||||
restart: on-failure
|
||||
stop_grace_period: 1m
|
||||
@@ -25,7 +25,7 @@ services:
|
||||
target: /var/log/redis
|
||||
|
||||
redis-6372:
|
||||
image: harbor.colben.cn/general/redis
|
||||
image: harbor.boyachain.cn:20443/general/redis
|
||||
container_name: redis-6372
|
||||
restart: on-failure
|
||||
stop_grace_period: 1m
|
||||
@@ -47,7 +47,7 @@ services:
|
||||
target: /var/log/redis
|
||||
|
||||
redis-6373:
|
||||
image: harbor.colben.cn/general/redis
|
||||
image: harbor.boyachain.cn:20443/general/redis
|
||||
container_name: redis-6373
|
||||
restart: on-failure
|
||||
stop_grace_period: 1m
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user