一. 环境准备
云服务器:乌班图
Docker已安装好
能够SSH远程访问云服务器(XShell等软件)
二. 创建网桥
docker network create -d bridge halo-net
三. 安装MySQL服务
1. 配置文件
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
character-set-server=utf8mb4
secure_file_priv=/var/lib/mysql
server_id=1
log_bin=/var/lib/mysql/mysql-binlog
2. 安装
docker run -d --privileged=true --restart=always -v /home/ubuntu/myDockerApps/mysql/data:/var/lib/mysql -v /home/ubuntu/myDockerApps/mysql/config:/etc/mysql -e MYSQL_ROOT_PASSWORD=密码. --net halo-net --name halo-mysql mysql:8.0.27
3. 进入容器
docker exec -it halo-mysql /bin/bash
4. 登录MySQL
mysql -uroot -p
密码
5. 创建halo用户
CREATE USER 'halo'@'%' IDENTIFIED BY '密码';
6. 给halo赋权
grant all privileges on *.* to 'halo'@'%' with grant option;
7. 创建数据库
create database halo;
三. 安装halo服务
docker run -it -d --name halo -p 8090:8090 -v /home/ubuntu/.halo2:/root/.halo2 --net halo-net --restart=always halohub/halo:2.5.2 --halo.external-url=http://qingshi-web.top:8090/ --halo.security.initializer.superadminusername=qingshi --halo.security.initializer.superadminpassword=密码 --spring.r2dbc.url=r2dbc:pool:mysql://halo-mysql:3306/halo?ssl=false --spring.r2dbc.username=halo --spring.r2dbc.password=密码 --spring.sql.init.platform=mysql
四. 安装Caddy服务
1. Caddyfile文件
qingshi-web.top {
# Set this path to your site's directory.
# root * /usr/share/caddy
# Enable the static file server.
# file_server
# Another common task is to set up a reverse proxy:
reverse_proxy halo:8090
}
2. 安装
docker run -d --name caddy -p 80:80 -p 443:443 -p 2019:2019 -v /home/ubuntu/myDockerApps/caddy:/etc/caddy --net halo-net --restart=always caddy
五. 设置定时任务,对数据库定时备份
1. 创建备份脚本
vim mysql_backup.sh
粘贴下面脚本内容到mysql_backup.sh文件
ubuntu 系统非 root 用户,要将备份产生的文件放到 xxx 用户所在的目录下,否则必须使用 sudo 输入管理员密码执行此脚本。
#!/bin/bash
echo '##########################################'
echo '###### The database is automatically backed up at 01:00 am every day ######'
echo '##########################################'
# Setting environment variables
DATE=$(date +%Y_%m_%d_%H_%M_%S)
# $(date +%Y%m%d)
# 数据库用户名
USERNAME=root
# 密码
PASSWORD=123456
# 要备份的数据库
DB=favorites
# Docker容器ID
DOCKERID=********
#DB1=xxxx
# ubuntu 系统非 root 用户,要将备份产生的文件放到 xxx 用户所在的目录下,否则必须使用 sudo 输入管理员密码执行此脚本。
# Linux服务器上备份文件目录。
DIR=/root/data_backup
echo 'Get system date: ' $DATE
if [ ! -d "$DIR" ]; then
mkdir $DIR
fi
cd $DIR
echo 'backup started...' $(date "+%Y-%m-%d %H:%M:%S")
# 备份 docker 容器中的数据库
# docker exec -it 容器名称 mysqldump -u用户名 -p密码 要备份的数据库名称 | gzip > 要打包到的文件名称
# docker exec -it c7f1b671c57f mysqldump -u$USERNAME -p$PASSWORD $DB > /root/data_backup/database_name_$DATE.sql
# docker exec -it c7f1b671c57f mysqldump -uroot -proot favorites | gzip > /root/data_backup/database_name_2021_05_07.sql.gz
# 最关键的备份语句
docker exec $DOCKERID /usr/bin/mysqldump -u $USERNAME --password=$PASSWORD $DB | gzip > $DIR/DB_Backup_$DATE.sql.gz
# 备份 直接安装在 linux 系统中的数据库
# /usr/bin/mysqldump -u$USERNAME -p$PASSWORD $DB2 | gzip > xxx_$DATE.sql.gz
# just backup the latest 7 days
find ${DIR} -name "DB_Backup_*.sql.gz" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1
# find ${DIR} -name "database_name_*.sql.gz" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1
echo 'backup completed!' $(date "+%Y-%m-%d %H:%M:%S")
2. 给脚本添加权限
chmod 755 mysql_backup.sh
3. 执行脚本
sh mysql_backup.sh
4. 使用crontab添加定时任务
select-editor
crontab -e
* * * * * command
前面5个* 分别代表 分 时 日 月 周
后面command代表具体执行的命令
0 1 * * * /home/ubuntu/myDockerApps/halo_backup/halo_mysql_backup.sh
5. 恢复
gzip /wanwutech/backup/2022-05-05/2022-05-05_120000.sql.gz #解压备份文件
#上面那种解压会删掉原压缩文件 ,可以采用下面这种方式解压
gunzip -c /wanwutech/backup/2022-05-05/2022-05-05_120000.sql.gz > /wanwutech/backup/2022-05-05/2022-05-05_120000.sql
mysql -u root -p
# 输入密码...
# 进入对应数据库
use application;
# 恢复数据
source /wanwutech/backup/2022-05-05/2022-05-05_120000.sql