Title

群晖NAS使用docker部署wikijs、mysql8并编写自动备份脚本

镜像版本:
ghcr.io/requarks/wiki:2.5.307
mysql:8.0
 

创建挂载目录并授权

mkdir -p /volume1/docker/wikijs/data/data
mkdir -p /volume1/docker/wikijs/data/logs
mkdir -p /volume1/docker/wikijs/data/mysql-data
mkdir -p /volume1/docker/wikijs/data/uploads
 
chown -R 999:999 /volume1/docker/wikijs/data/mysql-data
chown -R 1000:1000 /volume1/docker/wikijs/data/

 

编写wikijs核心配置文件

vim /volume1/docker/wikijs/data/config.yml
 
# Wiki.js 2.x 核心配置文件
 
# ========================
# 数据库配置 (必须与docker环境变量一致)
# ========================
db:
type: mysql
host: 172.17.0.1
port: 3306
user: wikijs
pass: Big@8848@
db: wiki
ssl: false
 
# ========================
# 服务器配置
# ========================
server:
host: 0.0.0.0
port: 3000
# 静态文件缓存(生产环境建议开启)
staticCache: true
 
# ========================
# 功能模块配置
# ========================
# 存储配置(默认使用本地存储)
storage:
local:
enabled: true
path: ./content/uploads
 
# ========================
# 日志配置
# ========================
logging:
level: info
stdout: true
# 文件日志路径(容器内路径)
file: ./logs/wiki.log

 

创建mysql容器

docker run --name mysql-wikijs \
-e MYSQL_ROOT_PASSWORD=Big@8848@ \
-e MYSQL_DATABASE=wiki \
-e MYSQL_USER=wikijs \
-e MYSQL_PASSWORD=Big@8848@ \
-p 3306:3306 \
-v /volume1/docker/wikijs/data/mysql-data:/var/lib/mysql \
-d mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci

 

登录尝试一下,顺便查看该创建的数据库以及用户是否创建好,以及对wiki数据库的权限是不是完全权限

docker exec -it mysql-wikijs mysql -u root -p

查看数据库

show databases;

查看用户

SELECT User, Host FROM mysql.user;
查看用户对wiki数据库的权限
SHOW GRANTS FOR 'wikijs'@'%';            #以下这种情况代表有完全权限

image

 

启动wikijs容器

docker run -d \
--name=wikijs \
-e "DB_TYPE=mysql" \
-e "DB_HOST=172.17.0.1" \                           #我这里是docker的网桥ip,因为我这里宿主机ip无法ping通
-e "DB_PORT=3306" \
-e "DB_USER=wikijs" \
-e "DB_PASS=Big@8848@" \
-e "DB_NAME=wiki" \
-v /volume1/docker/wikijs/data/data:/var/www/wiki/content \
-v /volume1/docker/wikijs/data/config.yml:/var/www/wiki/config.yml \
-v /volume1/docker/wikijs/data/uploads:/var/www/wiki/server/uploads \
-v /volume1/docker/wikijs/data/logs:/var/www/wiki/logs \
-p 3000:3000 \
--restart unless-stopped \
ghcr.io/requarks/wiki:2.5.307

在浏览器里打开 http://你的群晖IP:3000,然后按照向导完成初始化配置。

 设置中文语言

 

 

编写自动备份mysql数据库的脚本

vim mysql_dump.sh
 
#!/bin/bash
# Docker版MySQL自动备份脚本
 
# 配置参数
CONTAINER_NAME="mysql-wikijs" # MySQL容器名称
DB_USER="wikijs" # 数据库用户名
DB_PASS="Big@8848@" # 密码
DB_NAME="wiki" # 要备份的数据库名
BACKUP_DIR="/volume1/docker/wikijs/mysql_backup" # 宿主机备份目录
DAYS_TO_KEEP=7 # 保留最近7天备份
 
 
# 在容器内执行备份并直接保存到宿主机
docker exec "$CONTAINER_NAME" /bin/bash -c \
"mysqldump --no-tablespaces --single-transaction -u'$DB_USER' -p'$DB_PASS' '$DB_NAME'" \
| gzip > "$BACKUP_DIR/$DB_NAME-$(date +%Y%m%d).sql.gz"
 
# 删除旧备份
find $BACKUP_DIR -name "$DB_NAME-*.sql.gz" -mtime +$DAYS_TO_KEEP -delete
 
 
#恢复备份
#gunzip < /backups/mysql/wiki-20230815_030001.sql.gz | \
# docker exec -i "$CONTAINER_NAME" mysql -u"$DB_USER" -p"$DB_PASS" "$DB_NAME"

 

增加可执行权限

chmod +x mysql_dump.sh

 

编写定时任务

第一种方法/etc/crontab     在里面添加定时任务,但群晖NAS默认不走这个配置文件

#每天凌晨3点执行wikijs数据库的备份
0 3 * * * sh /volume1/docker/wikijs/mysql_dump.sh
第二种方法   
打开群晖NAS桌面——打开控制面板———打开任务计划

image

 

新增计划任务,用户选择root

image

 

选择执行时间

image

 

编辑执行脚本的命令及路径

image

 
返回计划任务界面,选择该条计划任务,点击操作,点击查看结果

image

 

可以查看该条任务的执行记录

image

posted @ 2025-08-19 09:54  Esurts~  阅读(264)  评论(1)    收藏  举报