部署 Docker
Docker 安装可以参考 Docker 官网安装指导,本次以 CentOS 为例
Docker 安装文档: https://docs.docker.com/engine/install/centos/
使用脚本安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
Docker 配置开机自启
# 开机自启
sudo systemctl enable docker.service
# 启动 Docker
sudo systemctl start docker.service
非 root 用户使用 Docker
当然,不这样做可以在执行 Docker 指令前加
sudo
# 通过将用户添加到 docker 用户组可以将 sudo 去掉
# 创建组
sudo groupadd docker
# 将用户添加到 docker 用户组
sudo usermod -aG docker $USER
# 更新用户组,或注销并重新登陆
newgrp docker
配置镜像加速器
以下两种任选其一即可,因本次使用为腾讯云服务器,所以使用第二种:
阿里云容器镜像服务
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
腾讯云软件源加速服务
https://cloud.tencent.com/document/product/213/8623
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
使用 Docker Compose 部署 Halo
创建容器组
下载容器镜像
因 Halo 2.0 不兼容 1. x 版本,Halo 2.0 未更新 Docker 的 latest 标签镜像,所以为防止误操作,在使用 Halo 镜像时需要指定固定版本的标签例如:
halohub/halo:2.2.0
MySQL :mysql:8.0.32
docker pull halohub/halo:2.2.0
docker pull mysql:8.0.32
创建 Halo 的根目录
mkdir ~/halo && cd ~/halo
创建 Halo+MySQL 的实例
为了更加方便的管理配置,所有与 Halo 相关的配置都使用 Docker 环境变量代替,所以无需创建 application. yaml 文件
~/halo/docker-compose.yaml
version: "3"
services:
halo:
image: halohub/halo:2.3.0
container_name: halo
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./:/root/.halo2
ports:
- "8090:8090"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
command:
- --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
- --spring.r2dbc.username=root
# MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
- --spring.r2dbc.password=o#DwN&JSa56
- --spring.sql.init.platform=mysql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
# 初始化的超级管理员用户名
- --halo.security.initializer.superadminusername=admin
# 初始化的超级管理员密码
- --halo.security.initializer.superadminpassword=P@88w0rd
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:
- "3306: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=o#DwN&JSa56
- MYSQL_DATABASE=halo
networks:
halo_network:
启动 Halo 服务
docker-compose up -d # -d 表示后台运行
docker compose up -d # 如果你用的是 docker-compose-plugin 的话,用这条命令
实时查看日志
# 如有问题使用下面命令查看日志
docker compose logs -f
更新容器组
停止运行中的容器组
cd ~/halo && docker-compose down
备份数据(重要)
# `halo.archive` 仅为示例,不一定要根据此文档命名
cp -r ~/halo ~/halo.archive
更新 Halo 服务
修改
docker-compose.yaml
中配置的镜像版本
services:
halo:
image: halohub/halo:2.3.0
container_name: halo
docker-compose pull
docker-compose up -d
# 或着 ↓
docker compose up -d
配合 Nginx Proxy Manager 使用反向代理
简介
顾名思义,Nginx Proxy Manager 就是一个 Nginx 的代理管理器,它最大的特点是简单方便。
即使是没有 Nginx 基础的小伙伴,也能轻松地用它来完成反向代理的操作,而且因为自带面板,操作极其简单,非常适合配合 Docker 搭建的应用使用。
Nginx Proxy Manager 后台还可以一键申请 SSL 证书,并且会自动续期,方便省心。
下面我们就来介绍如何用 Nginx Proxy Manger 来配合 Halo,实现反向代理和 HTTPS 访问。
安装 Nginx Proxy Manager
创建一个目录来存放 NPM 的 docker-compose.yml
文件
mkdir ~/nginxproxymanager && cd ~/nginxproxymanager # 创建一个 npm 的文件夹; 进入该文件夹
vim docker-compose.yml
粘贴填入下面的内容
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest' # 中文版 chishin/nginx-proxy-manager-zh:latest
container_name: npm
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
注:安装了 NPM 之后,就不需要再安装 Nginx 了,否则会端口冲突(不建议修改 NPM 的 80、443 端口)
启动 NPM
docker-compose up -d # -d 表示后台运行
docker compose up -d # 如果你用的是 docker-compose-plugin 的话,用这条命令
配置 Halo 的反向代理
不出意外,此时已经可以通过http://<url>:81
访问 NPM 的网页端了
不清楚自己当前服务器的 IP 地址,可以通过curl ip.sb
命令查询,需要注意防火墙端口是否对应打开
默认的管理员用户:
Email: admin@example.com
Password: changeme
第一次登陆会提示更改用户名和密码,建议修改一个复杂一点的密码。
至此,我们已经完成了 Nginx Proxy Manager 的搭建,之后就可以用它给我们的 Halo 或者其他 Web 应用做反向代理了。