update
This commit is contained in:
parent
17fca60282
commit
8e29d15e6d
@ -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
|
||||
|
@ -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 \
|
||||
|
@ -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"]
|
||||
|
||||
|
@ -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
76
pgsql/ADD/ccmd
Executable 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
|
||||
|
21
pgsql/Demo/SingleNode/README.md
Normal file
21
pgsql/Demo/SingleNode/README.md
Normal 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
|
||||
```
|
||||
|
23
pgsql/Demo/SingleNode/docker-compose.yml
Normal file
23
pgsql/Demo/SingleNode/docker-compose.yml
Normal 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
|
||||
|
19
pgsql/Demo/SingleNode/pgsql/my.cnf
Normal file
19
pgsql/Demo/SingleNode/pgsql/my.cnf
Normal 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
58
pgsql/Dockerfile
Normal 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
16
pgsql/README.md
Normal 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
68
pgsql/pgsql.sh
Executable 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
|
||||
|
@ -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 \
|
||||
|
@ -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"; }
|
||||
|
@ -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
|
||||
|
||||
|
@ -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\] '
|
||||
|
Loading…
x
Reference in New Issue
Block a user