使用飞牛nas搭建为知笔记服务端非常简单,这里不赘述了。
查看为知笔记docker镜像并连接
docker ps -a
docker exec -it <image id> /bin/bash
查看mysql数据库密码
cat /wiz/app/entrypoint.sh
自动备份数据库
#!/bin/bash
# 配置
BACKUP_DIR="/wiz/backup/sql"
MYSQL_USER="root"
MYSQL_PASSWORD="数据库密码"
DATABASE_NAME="wizasent"
LOG_FILE="$BACKUP_DIR/backup.log"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 记录日志
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}
# 显示帮助信息
show_help() {
echo "Usage: $0 [backup|restore] [options]"
echo "Options:"
echo " backup - 备份数据库"
echo " restore - 恢复数据库"
echo " --file - 指定备份文件(仅用于恢复)"
exit 1
}
# 备份数据库
backup_db() {
local DAY_OF_WEEK=$(date +%u) # 获取星期几(1-7)
local BACKUP_FILE="$BACKUP_DIR/${DATABASE_NAME}_backup_${DAY_OF_WEEK}.sql.gz"
log "Starting backup of database: $DATABASE_NAME"
mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD $DATABASE_NAME | gzip > $BACKUP_FILE
if [ $? -eq 0 ]; then
log "Backup completed: $BACKUP_FILE"
else
log "Backup failed!"
exit 1
fi
}
# 恢复数据库
restore_db() {
local BACKUP_FILE=$1
if [ -z "$BACKUP_FILE" ]; then
log "Error: Backup file not specified."
show_help
fi
if [ ! -f "$BACKUP_FILE" ]; then
log "Error: Backup file not found: $BACKUP_FILE"
exit 1
fi
log "Starting restore of database: $DATABASE_NAME from $BACKUP_FILE"
gunzip < $BACKUP_FILE | mysql -u$MYSQL_USER -p$MYSQL_PASSWORD $DATABASE_NAME
if [ $? -eq 0 ]; then
log "Restore completed successfully."
else
log "Restore failed!"
exit 1
fi
}
# 主逻辑
if [ $# -eq 0 ]; then
show_help
fi
case $1 in
backup)
backup_db
;;
restore)
if [ "$2" == "--file" ]; then
restore_db "$3"
else
log "Error: Missing --file parameter for restore."
show_help
fi
;;
*)
log "Error: Invalid operation."
show_help
;;
esac
备份命令
./backup_script.sh backup
备份文件会保存到 /wiz/backup 目录,文件名以星期几命名,例如:
星期一:wizasent_backup_1.sql.gz
星期二:wizasent_backup_2.sql.gz
…
星期日:wizasent_backup_7.sql.gz
恢复命令
./backup_script.sh restore --file /wiz/backup/wizasent_backup_1.sql.gz
从指定的备份文件恢复数据库。
查看日志
cat /wiz/backup/backup.log
查看备份和恢复操作的日志。
设置定时任务
为了实现每天自动备份,可以使用 crontab 设置定时任务。
打开 crontab 编辑器:
crontab -e
添加以下内容,每天凌晨 2 点执行备份脚本:
0 2 * * * /path/to/backup_script.sh backup >> /wiz/backup/backup.log 2>&1
备份数据
#!/bin/bash
# 定义源目录和目标目录
SRC_DIR="/wiz"
BACKUP_DIR="/wiz/backup/data"
# 获取当前是星期几(1代表周一,2代表周二,...,7代表周日)
DAY_OF_WEEK=$(date +%u)
# 定义备份文件名
BACKUP_NAME="wiz_data_backup_$DAY_OF_WEEK.tar.gz"
# 创建备份目录(如果不存在)
mkdir -p "$BACKUP_DIR"
# 打包并压缩 /wiz 目录下非 backup 目录的内容
tar -czf "$BACKUP_DIR/$BACKUP_NAME" --exclude="$SRC_DIR/backup" -C "$SRC_DIR" .
# 输出备份完成信息
echo "备份完成: $BACKUP_DIR/$BACKUP_NAME"
由于百度云不支持4g以上大文件上传,因此改为每900M一个文件。
新的备份数据脚本
#!/bin/bash
# 定义源目录和目标目录
SRC_DIR="/wiz"
BACKUP_DIR="/wiz/backup/data"
# 获取当前是星期几(1代表周一,2代表周二,...,7代表周日)
DAY_OF_WEEK=$(date +%u)
# 定义备份文件名及基础名称BACKUP_NAME="wiz_data_backup_$DAY_OF_WEEK.tar.gz"
BACKUP_BASENAME="wiz_data_backup_$DAY_OF_WEEK"
# 创建备份子目录(如果不存在)
mkdir -p "$BACKUP_DIR/$BACKUP_BASENAME"
# 打包、压缩并分卷(使用900MB分卷大小)
tar -cz --exclude="$SRC_DIR/backup" -C "$SRC_DIR" . | split -d -b 900M --numeric-suffixes=1 -a 3 - "$BACKUP_DIR/$BACKUP_BASENAME/$BACKUP_BASENAME.tar.gz."
# 输出备份完成信息
echo "备份完成: 分卷文件已保存至 $BACKUP_DIR/$BACKUP_BASENAME/"
备份恢复
# 进入备份目录
cd $BACKUP_DIR/$BACKUP_BASENAME
# 合并分卷并解压
cat wiz_data_backup_*.tar.gz.* | tar -xz -C /目标路径
定时备份docker到腾讯云
#!/bin/bash
# 配置
DOCKER_CONTAINER_NAME="wizserver" # 容器名称
TENCENT_REGISTRY="ccr.ccs.tencentyun.com" # 腾讯云容器镜像仓库地址
TENCENT_NAMESPACE="" # 腾讯云命名空间(你的用户名)
TENCENT_REPO="wiznote" # 腾讯云仓库名称
TENCENT_USER="" # 腾讯云 Docker 仓库用户名
TENCENT_PASSWORD="" # 腾讯云 Docker 仓库密码
BACKUP_DIR="/backup/wiznote/docker" # 本地备份目录
LOG_FILE="/backup/wiznote/docker/backup.log" # 日志文件
# 创建备份目录
mkdir -p $BACKUP_DIR
# 记录日志
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}
# 登录腾讯云 Docker 仓库
login_tencent_registry() {
echo "$TENCENT_PASSWORD" | docker login -u "$TENCENT_USER" --password-stdin "$TENCENT_REGISTRY"
if [ $? -eq 0 ]; then
log "Logged in to Tencent Cloud Docker Registry."
else
log "Failed to log in to Tencent Cloud Docker Registry."
exit 1
fi
}
# 获取当前星期几对应的编号(1-7,周一为1,周日为7)
get_weekday_number() {
local WEEKDAY=$(date +%u) # %u: 1-7, Monday is 1
echo "v$WEEKDAY"
}
# 备份 Docker 容器并上传到腾讯云
backup_docker_container() {
local TAG=$(get_weekday_number)
local TENCENT_IMAGE="$TENCENT_REGISTRY/$TENCENT_NAMESPACE/$TENCENT_REPO:$TAG"
local TENCENT_IMAGE_LATEST="$TENCENT_REGISTRY/$TENCENT_NAMESPACE/$TENCENT_REPO:latest"
log "Starting backup of Docker container: $DOCKER_CONTAINER_NAME"
# 将容器提交为镜像
docker commit "$DOCKER_CONTAINER_NAME" "$TENCENT_IMAGE"
if [ $? -eq 0 ]; then
log "Docker container committed as image: $TENCENT_IMAGE"
else
log "Failed to commit Docker container as image."
exit 1
fi
# 为镜像打上 latest 标签
docker tag "$TENCENT_IMAGE" "$TENCENT_IMAGE_LATEST"
if [ $? -eq 0 ]; then
log "Docker image tagged as latest: $TENCENT_IMAGE_LATEST"
else
log "Failed to tag Docker image as latest."
exit 1
fi
# 上传镜像到腾讯云(包括星期标签和 latest 标签)
docker push "$TENCENT_IMAGE"
if [ $? -eq 0 ]; then
log "Docker image pushed to Tencent Cloud: $TENCENT_IMAGE"
else
log "Failed to push Docker image to Tencent Cloud: $TENCENT_IMAGE"
exit 1
fi
docker push "$TENCENT_IMAGE_LATEST"
if [ $? -eq 0 ]; then
log "Docker image pushed to Tencent Cloud: $TENCENT_IMAGE_LATEST"
else
log "Failed to push Docker image to Tencent Cloud: $TENCENT_IMAGE_LATEST"
exit 1
fi
# 清理本地镜像
docker rmi "$TENCENT_IMAGE" "$TENCENT_IMAGE_LATEST"
if [ $? -eq 0 ]; then
log "Local Docker images removed: $TENCENT_IMAGE and $TENCENT_IMAGE_LATEST"
else
log "Failed to remove local Docker images."
fi
}
# 主逻辑
login_tencent_registry
backup_docker_container
启动镜像
#!/bin/bash
# 配置
DOCKER_IMAGE="ccr.ccs.tencentyun.com/.../wiznote:[tag]" # 使用 latest 标签
CONTAINER_NAME="wizserver"
BACKUP_DIR="/backup/wiznote"
LOG_FILE="/backup/wiznote/docker/start.log"
TENCENT_REGISTRY="ccr.ccs.tencentyun.com" # 腾讯云容器镜像仓库地址
TENCENT_USER="" # 腾讯云 Docker 仓库用户名
TENCENT_PASSWORD="l" # 腾讯云 Docker 仓库密码
# 创建日志目录
mkdir -p "$(dirname "$LOG_FILE")"
# 记录日志
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
# 登录腾讯云 Docker 仓库
login_tencent_registry() {
log "Logging in to Tencent Cloud Docker Registry..."
echo "$TENCENT_PASSWORD" | docker login -u "$TENCENT_USER" --password-stdin "$TENCENT_REGISTRY"
if [ $? -eq 0 ]; then
log "Successfully logged in to Tencent Cloud Docker Registry."
else
log "Failed to log in to Tencent Cloud Docker Registry."
exit 1
fi
}
# 拉取最新镜像
pull_latest_image() {
log "Pulling latest Docker image: $DOCKER_IMAGE"
docker pull "$DOCKER_IMAGE"
if [ $? -eq 0 ]; then
log "Successfully pulled Docker image: $DOCKER_IMAGE"
else
log "Failed to pull Docker image: $DOCKER_IMAGE"
exit 1
fi
}
# 停止并删除现有容器(如果存在)
cleanup_existing_container() {
if docker ps -a --format '{{.Names}}' | grep -q "^$CONTAINER_NAME$"; then
log "Stopping and removing existing container: $CONTAINER_NAME"
docker stop "$CONTAINER_NAME" && docker rm "$CONTAINER_NAME"
if [ $? -eq 0 ]; then
log "Successfully stopped and removed container: $CONTAINER_NAME"
else
log "Failed to stop and remove container: $CONTAINER_NAME"
exit 1
fi
fi
}
# 启动新容器
start_new_container() {
log "Starting new container: $CONTAINER_NAME"
docker run -d \
--name "$CONTAINER_NAME" \
-p 9269:9269/udp \
-p 9280:80/tcp \
-v "$BACKUP_DIR:/wiz/backup" \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
--memory="2g" \
--memory-swap="4g" \
"$DOCKER_IMAGE" \
/wiz/app/entrypoint.sh
if [ $? -eq 0 ]; then
log "Successfully started container: $CONTAINER_NAME"
else
log "Failed to start container: $CONTAINER_NAME"
exit 1
fi
}
# 主逻辑
login_tencent_registry
pull_latest_image
cleanup_existing_container
start_new_container
设置进程监控
#!/bin/bash
# 配置
CONTAINER_NAME="wizserver"
LOG_FILE="/backup/wiznote/docker/monitor.log"
# 记录日志
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
# 检查容器是否在运行
if docker ps --format '{{.Names}}' | grep -q "^$CONTAINER_NAME$"; then
log "WizServer container is running."
else
log "WizServer container is not running. Starting it now..."
# 调用启动脚本
/root/start_wiznote_docker.sh
if [ $? -eq 0 ]; then
log "WizServer container started successfully."
else
log "Failed to start WizServer container."
fi
fi
定时任务总览
系统内
0 2 * * * root sh /root/backup_wiz_docker.sh
30 1 * * * root /usr/bin/cp -r /backup/wiznote/ /vol1/1000/日记文件/ && rm -rf /backup/wiznote/data/wiz_data_backup*
*/5 * * * * root sh /root/monitor_wiznote.sh
docker
0 1 * * * root sh /root/backup_wiz_sql.sh backup >> /wiz/backup/sql/backup.log 2>&1
0 1 * * * root sh /root/backup_wiz_data.sh >> /wiz/backup/sql/backup.log 2>&1
默认管理用户密码
123456
SELECT * FROM wiz_user ;
+----+--------------------------------------+-----------------+--------+---------------+----------------------------------+---------------+--------+------------+--------------+---------------------+---------------------+------------+------------+-------------+---------------------+---------------+----------------+-----------+
| ID | USER_GUID | EMAIL | MOBILE | DISPLAYNAME | PASSWORD | USER_LANGUAGE | POINTS | CREATED_BY | EMAIL_VERIFY | VIP_DATE | DT_CREATED | USER_STATE | GMT_OFFSET | MEDAL_COUNT | LAST_LOGIN | MOBILE_VERIFY | avatar_version | TENANT_ID |
+----+--------------------------------------+-----------------+--------+---------------+----------------------------------+---------------+--------+------------+--------------+---------------------+---------------------+------------+------------+-------------+---------------------+---------------+----------------+-----------+
| 1 | 00000000-0000-0000-0000-000000000000 | admin@wiz.cn | NULL | Administrator | a9da87c000d58437ffd94b020dc221c9 | zh_CN | 0 | NULL | 0 | 2100-02-01 00:00:00 | 2014-03-10 18:45:42 | 2 | NULL | 0 | 2025-01-19 16:01:31 | NULL | NULL | NULL |
| 2 | 053505f0-d630-11ef-9c51-8b244c0106be | template@wiz.cn | NULL | template | d67cca55c930bc8797713f7eb6cf020f | zh_CN | 0 | NULL | 0 | NULL | 2025-01-19 14:38:41 | -1 | NULL | 0 | 2025-01-19 15:58:35 | NULL | NULL | NULL |
+----+--------------------------------------+-----------------+--------+---------------+----------------------------------+---------------+--------+------------+--------------+---------------------+---------------------+------------+------------+-------------+---------------------+---------------+----------------+-----------+
2 rows in set (0.00 sec)