Skip to content

Commit

Permalink
Merge pull request #1993 from xiagw/docker-upgrade
Browse files Browse the repository at this point in the history
docker upgrade
  • Loading branch information
star7th committed Jul 17, 2023
2 parents a084113 + 3fcf9ca commit ddeef0a
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 10 deletions.
29 changes: 29 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
version: '3'

networks:
showdocnet:

services:
showdoc:
## 官方 image ################################
# image: star7th/showdoc
## 官方 image ################################
## 源码 build image ################################
build:
context: ./
args:
- IN_CHINA=false
## 国内构建镜像, docker compose build --build-arg IN_CHINA=true
## 启动, docker compose up -d
## 源码 build image ################################
hostname: showdoc
ports:
- 4999:80
volumes:
## 兼容历史版本文件
- /showdoc_data:/showdoc_data_old
- ./showdocdata/html:/var/www/html
restart: always
tty: true
networks:
- showdocnet
5 changes: 3 additions & 2 deletions docker.build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,9 @@ fi
apk update
apk add --update --no-cache nodejs npm

mv /showdoc_data/html/mock /showdoc_data/
cd /showdoc_data/mock || exit 1
showdoc_dir='/showdoc_data'
mv $showdoc_dir/html/mock $showdoc_dir/
cd $showdoc_dir/mock || exit 1
if [ "$IN_CHINA" = true ]; then
npm config set registry https://registry.npmmirror.com/
fi
Expand Down
67 changes: 59 additions & 8 deletions docker.run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,64 @@
set -e

## web site dir
if [ ! -f "/var/www/html/index.php" ]; then
\cp -fr /showdoc_data/html/* /var/www/html/
showdoc_dir='/showdoc_data'
showdoc_dir_old='/showdoc_data_old'
showdoc_dir_old_skip='/showdoc_data_old/.skip_old'
showdoc_html_dir="$showdoc_dir/html"
web_dir='/var/www/html'
file_ver=$web_dir/.ver
# file_ver_json=$web_dir/.json.ver
file_json=$showdoc_html_dir/composer.json

db_file=$web_dir/Sqlite/showdoc.db.php

## 首次启动需要 copy to /var/www/html
if [ -f "$web_dir/index.php" ]; then
echo "Found $web_dir/index.php, skip copy."
else
echo "Not found $web_dir/index.php, copy..."
## 兼容历史版本 宿主机 /showdoc_data
if [[ -f $showdoc_dir_old/html/index.php && ! -f $showdoc_dir_old_skip ]]; then
echo "Found old version of \"showdoc_data\", copy..."
rsync -a $showdoc_dir_old/html/ $web_dir/ &&
touch $showdoc_dir_old_skip
else
rsync -a $showdoc_html_dir/ $web_dir/
fi
fi
## set file mode
chown -R 1000:1000 /var/www/html/Sqlite /var/www/html/Public/Uploads
## upgrade (通过 Dockerfile 的环境变量 变更版本)
version_json=$(grep -o '"version":.*"' $file_json | awk '{print $2}')
version_json="${version_json//\"/}"
if [ -f $file_ver ]; then
# if [[ "$SHOWDOC_DOCKER_VERSION" == "$(cat $file_ver)" ]]; then
if [[ "${version_json}" == "$(cat $file_ver)" ]]; then
echo "Same version, skip upgrade."
else
echo "Backup db file before upgrade..."
\cp -av $db_file ${db_file}."$(date +%F-%H-%M-%S)".php
echo "Upgrade application files..."
## 此处不同步 db 文件和 upload 文件,自动排除
rsync -a --exclude='Sqlite/' --exclude='Public/Uploads/' $showdoc_html_dir/ $web_dir/
## revert lang if lang=en
if grep -q 'lang:.*en' $web_dir/web/index.html; then
sed -i -e "/lang:.*zh-cn.*/s//lang: 'zh-cn'/" $web_dir/web/index.html $web_dir/web_src/index.html
fi
fi
else
# echo "$SHOWDOC_DOCKER_VERSION" >$file_ver
echo "$version_json" >$file_ver
fi
## fix file permission
# find $web_dir -type f -exec chmod 644 {} \;
# find $web_dir -type d -exec chmod 755 {} \;
# find $web_dir -type f -iname '*.sh' -exec chmod 755 {} \;
[[ -d $web_dir/server/Application/Runtime ]] ||
mkdir -p $web_dir/server/Application/Runtime
chown -R 1000:1000 \
$web_dir/Sqlite \
$web_dir/Public/Uploads \
$web_dir/install \
$web_dir/server/Application/Runtime

_kill() {
echo "receive SIGTERM, kill $pids"
Expand All @@ -18,7 +71,6 @@ _kill() {
}

## backup sqlite file every day
db_file=/var/www/html/Sqlite/showdoc.db.php
while [ -f $db_file ]; do
# backup on 20:01 (UTC) every day
if [[ $(date +%H%M) == 2001 ]]; then
Expand All @@ -33,13 +85,13 @@ pids="$pids $!"

(
sleep 3
cd /showdoc_data/html/server
cd $showdoc_html_dir/server
php index.php /api/update/dockerUpdateCode
)
(
echo "delay 30s start mock..."
sleep 30
cd /showdoc_data/mock/
cd $showdoc_dir/mock/
npm run start
) &
pids="$pids $!"
Expand All @@ -51,4 +103,3 @@ pids="$pids $!"
trap _kill HUP INT QUIT TERM

wait

0 comments on commit ddeef0a

Please sign in to comment.