This commit is contained in:
colben 2025-05-07 21:04:00 +08:00
parent 17fca60282
commit 8e29d15e6d
15 changed files with 291 additions and 12 deletions

View File

@ -1,5 +1,5 @@
ARG ARCH
FROM harbor.colben.cn/general/photon$ARCH
FROM harbor.colben.cn/general/photon$ARCH:5
MAINTAINER Colben colbenlee@gmail.com
ADD --chown=root:root /ADD/ccmd /opt/
ADD --chown=root:root /ADD/gitea /usr/bin/gitea

View File

@ -33,9 +33,8 @@ 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/yum \
/var/lib/yum \
/var/lib/rpm \
/var/cache/dnf \
/var/lib/dnf \
/var/log/* \
/etc/my.cnf.d \
$BUNDLE_FILE \

View File

@ -15,6 +15,6 @@ gpgcheck=0\n\
&& mv /etc/mongod.conf /etc/mongod.conf.origin \
&& mv /var/log/mongodb /var/log/mongo \
&& rm -f /var/log/mongo/mongod.log \
&& rm -rf /var/cache/dnf
&& rm -rf /var/cache/dnf /var/lib/dnf
CMD ["/opt/ccmd"]

View File

@ -14,9 +14,8 @@ gpgcheck=0\n\
&& dnf -y module disable mysql \
&& dnf install mysql-community-server -y \
&& rm -rf /usr/sbin/mysqld-debug \
/var/cache/yum \
/var/lib/yum \
/var/lib/rpm \
/var/cache/dnf \
/var/lib/dnf \
/var/log/* \
/etc/my.cnf.d \
&& mkdir -p /var/log/mysql \

76
pgsql/ADD/ccmd Executable file
View File

@ -0,0 +1,76 @@
#!/bin/bash
##################################################
# Mount dir #
# - /var/lib/pgsql #
# - /var/log/pgsql #
# - /etc/pgsql/conf.d #
##################################################
set -euo pipefail
export LANG=en_US.UTF-8
trap Quit EXIT
PIDS=
GOT_SIGTERM=
LOG_DIR=/var/log/pgsql
DATA_DIR=/var/lib/pgsql
VERSION=$VERSION
function Print {
local file=/dev/null
[ '-f' = "$1" ] && file=$2 && shift && shift
date +"[%F %T] $*" | tee -a $file
}
function Quit {
Print killing pgsql ...
su - postgres -c "pg_ctl stop" || true
while :; do
pkill -x postmaster && Print killing postmaster ... || break
sleep 2
done
Print Container stopped.
test -n "$GOT_SIGTERM"
}
function Init {
chown -R postgres:postgres $LOG_DIR $DATA_DIR
if [ -z "$(ls $DATA_DIR)" ]; then
Print Initing pgsql db files ...
su - postgres -c "initdb --pgdata=$DATA_DIR --locale=en_US.UTF-8"
else
Print Checking pgsql db dir ...
su - postgres -c "postgresql-$VERSION-check-db-dir $DATA_DIR"
fi
}
function StartProc {
Print Starting pgsql ...
local sock="/tmp/.s.PGSQL.$(su - postgres -c 'postmaster -C port')"
rm -f $sock
su - postgres -c postmaster &
PIDS="$PIDS $!"
while sleep 1; do
[ -e $sock ] && break || echo -n .
[ ! -e /proc/$! ] && echo && Print unexpected error! && exit
done
echo
Print PGSQL is ready for connections.
}
function Main {
local pid=
Init
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,21 @@
# 部署 PostgreSQL 单节点
- 按实际环境修改
- docker-compose.yml
- pgsql/conf.d/\*.cnf
- 创建目录
```
grep '\<source:' docker-compose.yml | cut -d: -f2 | xargs mkdir -p
```
- 启动
```
docker-compose up -d
```
- 查看日志,直至出现 "PGSQL is ready for connections."
```
docker-compose logs pgsql
```

View File

@ -0,0 +1,23 @@
version: "3.7"
services:
pgsql:
image: harbor.colben.cn/general/pgsql:15
container_name: pgsql
restart: "on-failure"
stop_grace_period: 32s
networks:
pgsql:
ports:
- 5432:5432
volumes:
- type: bind
source: ./pgsql/db
target: /var/lib/pgsql/
- type: bind
source: ./pgsql/conf.d
target: /etc/pgsql/conf.d
- type: bind
source: ./pgsql/log
target: /var/log/pgsql

View File

@ -0,0 +1,19 @@
[mysqld]
mysqlx = OFF
skip-name-resolve = 1
max-user-connections = 600
## this should be less than 80% of total memory
innodb-buffer-pool-size = xxxxG
## this should be half of "innodb-buffer-pool-size"
innodb-buffer-pool-instances = xxxx
# binlog
server-id = 1
log-bin = /var/lib/mysql-bin/master
binlog-format = ROW
binlog-expire-logs-seconds = 172800
gtid-mode = ON
enforce-gtid-consistency = TRUE

58
pgsql/Dockerfile Normal file
View File

@ -0,0 +1,58 @@
ARG ARCH
FROM harbor.colben.cn/general/rocky$ARCH:8
MAINTAINER Colben colbenlee@gmail.com
ARG ARCH
ARG VERSION
ADD --chown=root:root /ADD/ /opt/
RUN echo -e "[pgdg-common]\n\
name=PostgreSQL common RPMs for RHEL / Rocky / AlmaLinux \$releasever - \$basearch\n\
baseurl=https://mirrors.tuna.tsinghua.edu.cn/postgresql/repos/yum/common/redhat/rhel-\$releasever-\$basearch\n\
enabled=1\n\
gpgcheck=0\n\
gpgkey=file:///etc/pki/rpm-gpg/PGDG-RPM-GPG-KEY-RHEL\n\
repo_gpgcheck = 0\n\
\n\
[pgdg$VERSION]\n\
name=PostgreSQL $VERSION for RHEL / Rocky / AlmaLinux \$releasever - \$basearch\n\
baseurl=https://mirrors.tuna.tsinghua.edu.cn/postgresql/repos/yum/$VERSION/redhat/rhel-\$releasever-\$basearch\n\
enabled=1\n\
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 \
&& rm -rf /var/lib/pgsql/* \
/var/cache/dnf \
/var/lib/dnf \
/var/log/* \
&& rm -f /var/lib/pgsql/.bash* \
&& mkdir -p /var/log/pgsql /etc/pgsql/conf.d \
&& chown -R postgres:postgres /var/log/pgsql \
&& echo -e "# DO NOT EDIT THIS FILE!\n\
\n\
include_if_exists = '/var/lib/pgsql/postgresql.conf'\n\
include_dir = 'conf.d'\n\
include = 'fixed-parameters.conf'\n\
" > /etc/pgsql/postgresql.conf \
&& echo -e "# DO NOT EDIT THIS FILE!\n\
\n\
data_directory = '/var/lib/pgsql'\n\
hba_file = '/var/lib/pgsql/pg_hba.conf'\n\
ident_file = '/var/lib/pgsql/pg_ident.conf'\n\
log_destination = 'stderr'\n\
logging_collector = on\n\
log_directory = '/var/log/pgsql'\n\
log_filename = 'server-%y%m%d.log'\n\
log_file_mode = 0644\n\
log_rotation_age = 1d\n\
log_rotation_size = 128MB\n\
log_truncate_on_rotation = on\n\
" > /etc/pgsql/fixed-parameters.conf \
&& echo -e "export PGDATA=/etc/pgsql\n\
export PATH=/usr/pgsql-$VERSION/bin:\$PATH\n\
" > /etc/profile.d/pgsql.sh
ENV VERSION=15
CMD ["/opt/ccmd"]

16
pgsql/README.md Normal file
View File

@ -0,0 +1,16 @@
# 构建 postgresql 镜像
## 定制
- 安装 postgresql
- 固定一些常用配置
- 第一次启动 postgresql 时,会执行如下操作
- 初始化数据目录
## 外挂目录和文件
- /var/lib/pgsql/: pgsql 数据目录
- /etc/conf.d/: pgsql 配置文件目录,覆盖数据目录下的 postgresql.conf
- /var/log/pgsql: pgsql 日志目录
## 案例
- [Demo/SingleNode/](Demo/SingleNode/): 单节点

68
pgsql/pgsql.sh Executable file
View File

@ -0,0 +1,68 @@
#!/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)"
VERSION=${1:?}
IMAGE="harbor.colben.cn/general/pgsql$ARCH:$VERSION"
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" --build-arg VERSION="$VERSION" -t $IMAGE -f Dockerfile .
YesOrNo Push image: $IMAGE? && docker push $IMAGE
}
function Main {
trap Quit EXIT
Update
Build
END=1
}
# Start here
Main

View File

@ -1,4 +1,4 @@
FROM photon:4.0
FROM photon:5
MAINTAINER Colben colbenlee@gmail.com
ADD --chown=root:root /ADD/ /etc/
RUN tdnf makecache \

View File

@ -9,7 +9,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"
IMAGE="harbor.colben.cn/general/$(basename ${0%.sh})$ARCH:5"
if [ -t 0 ]; then
function Print { echo -e "\033[36;1m$(date +'[%F %T]')\033[32;1m $*\033[0m"; }

View File

@ -3,5 +3,5 @@ FROM harbor.colben.cn/general/rocky$ARCH:8
MAINTAINER Colben colbenlee@gmail.com
RUN dnf makecache \
&& dnf install gcc gcc-c++ make cmake python39-devel mysql-devel -y \
&& rm -rf /var/cache/dnf
&& rm -rf /var/cache/dnf /var/lib/dnf

View File

@ -17,7 +17,7 @@ gpgcheck=0\n\
&& dnf makecache \
&& dnf install -y ncurses iproute procps-ng glibc-langpack-en \
&& echo 'alias ls="ls --color=auto"' > /etc/profile.d/docker.sh \
&& rm -rf /var/cache/dnf \
&& rm -rf /var/cache/dnf /var/lib/dnf \
&& rm -rf /var/log/*
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\] '