容器部署
采用Halo 2.7的 Docker 镜像进行部署
拉取最新Halo镜像
docker pull halohub/halo
在系统任意位置创建一个工作文件夹,此文档以/data/halo为例
mkdir /data/halo && cd /data/halo
注意:后续操作中,Halo 产生的所有数据都会保存在这个目录,请妥善保存。
建立halo网络
docker network create halo_network
编辑创建yaml配置文件
version: "3"
services:
halo:
image: halohub/halo:2.7
container_name: halo
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./:/root/.halo2
ports:
- "8099:8090"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8099/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
command:
- --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/linhut_halo
- --spring.r2dbc.username=root
# MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
- --spring.r2dbc.password=P@w%bI*
- --spring.sql.init.platform=mysql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=https://www.linhut.cn/
# 初始化的超级管理员用户名
- --halo.security.initializer.superadminusername=linhutAdmin
# 初始化的超级管理员密码
- --halo.security.initializer.superadminpassword=P@josea%i*
halodb:
image: mysql:8.0.31
container_name: halodb
restart: on-failure:3
networks:
halo_network:
command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --explicit_defaults_for_timestamp=true
volumes:
- ./mysql:/var/lib/mysql
- ./mysqlBackup:/data/mysqlBackup
ports:
- "3308:3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
interval: 3s
retries: 5
start_period: 30s
environment:
# 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
- MYSQL_ROOT_PASSWORD=P@w%bI*
- MYSQL_DATABASE=linhut_halo
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '81:80' # 不建议修改端口
- '811:81' # 可以把冒号左边的 81 端口修改成你服务器上没有被占用的端口
- '4443:443' # 不建议修改端口
volumes:
- ./data:/data # 点号表示当前文件夹,冒号左边的意思是在当前文件夹下创建一个 data 目录,用于存放数据,如果不存在的话,会自动创建
- ./letsencrypt:/etc/letsencrypt # 点号表示当前文件夹,冒号左边的意思是在当前文件夹下创建一个 letsencrypt 目录,用于存放证书,如果不存在的话,会自动创建
networks:
halo_network:
关于docker-compose-mysql非默认端口设置
在更改默认MySQL业务端口时,需自定义mysql配置文件并映射进yaml启用文件中,否则将会报错
[36mhalo |[0m 2023-04-28T02:41:17.600+08:00 INFO 7 --- [ main] c.g.j.r.m.MysqlConnectionFactoryProvider : set jasync.mysql.CLIENT_FOUND_ROWS=true
创建docker-compose-mysql的工作目录
cd /etc/docker
mkdir -p docker-compose-mysql/{data,conf}
文件附权
chown -R mysql:mysql docker-compose-mysql/data
自定义配置文件mysql.conf
vim docker-compose-mysql/conf/mysql.cnf
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
在启动文件docker-compose.yml中进行设置
ports:
"3308:3306"
volumes:
/etc/docker/docker-compose-mysql/conf/:/etc/mysql/conf.d/
./mysqlBackup:/data/mysqlBackup
/etc/docker/docker-compose-mysql/data:/var/lib/mysql
安装脚本执行
sudo docker compose up -d
版本更新
# 拉取最新的 Halo 镜像
docker-compose pull
# 重新构建容器
docker-compose up -d
常用命令
# 停止容器运行
docker-compose stop
# 启动容器
docker-compose start
# 查看实时日志
docker-compose logs -f
# 重启容器
docker-compose restart
# 查看容器内部地址
ip addr show docker0
# 进入容器
docker exec -it halo bash
报错处理
出现上述报错,容器启动失败了,原因是 s6-svscanctl: fatal: unable to control /var/run/s6/services: supervisor not listening。这个错误提示显示 supervisor 没有在监听 /var/run/s6/services,可能是 supervisor 进程没有正常启动。建议检查 supervisor 进程是否正常启动,或者在容器启动时通过 docker logs 命令查看更多的日志信息,以便找到问题的根本原因。
解决方法:
Supervisor的定义是超级用户,监管员。Supervisor是一个进程管理工具,当进程中断的时候Supervisor能自动重新启动它。可以运行在各种类unix的机器上,supervisor就是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
安装 Supervisor:可以使用以下命令在 CentOS 系统上安装 Supervisor:
sudo yum install epel-release
sudo yum install supervisor
配置 Supervisor:Supervisor 的配置文件位于 /etc/supervisord.d/ 目录下,可以创建一个新的配置文件来管理需要启动的进程。例如,创建一个名为 myapp.conf 的配置文件:
[program:myapp]
command=/path/to/myapp
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/myapp.log
上述配置文件定义了一个名为 myapp 的进程,它的启动命令是 /path/to/myapp,并且在进程意外退出时自动重启。redirect_stderr=true 表示将标准错误输出重定向到标准输出,stdout_logfile=/var/log/myapp.log 表示将标准输出重定向到 /var/log/myapp.log 文件中。
启动 Supervisor:可以使用以下命令启动 Supervisor:
sudo systemctl start supervisord
启动后,Supervisor 将会读取配置文件并启动相应的进程。
管理进程:可以使用以下命令管理进程:
sudo supervisorctl status
sudo supervisorctl start myapp
sudo supervisorctl stop myapp
sudo supervisorctl restart myapp
status 命令用于查看进程状态,start 命令用于启动进程,stop 命令用于停止进程,restart 命令用于重启进程。
评论