利用Docker Compose部署Halo博客全套教程
官方文档地址使用 Docker Compose 部署 | Halo 文档
操作系统:centos7.9 (全部代码可以直接复制,注意密码修改为自己的)
一、Docker安装
1.下载工具包集合
yum install -y yum-utils
2.加载阿里云镜像
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.将服务器上的软件包信息下载并存储在本地
yum makecache
4.创建目录
sudo mkdir -p /etc/docker
5.使用加速命令
阿里云=>搜索容器镜像服务=>容器镜像服务=>管理控制台=>镜像工具=>镜像加速器=>CentOS
5.1阿里云=>搜索容器镜像服务
5.2容器镜像服务
5.3管理控制台
5.4镜像工具=>镜像加速器=>CentOS(复制蓝色框内的内容替换下面相同的位置)
直接复制以下代码也可以,复制进去按下回车
sudo tee /etc/docker/daemon.json << 'EOF'
{
"bip": "172.160.160.1/24",
"registry-mirrors": ["https://e2tgadmg.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size" :"256m","max-file":"10"
}
}
EOF
二、docker-compose安装
1.安装doker版本docker-ce-20.10.21 docker-ce-cli-20.10.21 containerd.io-1.6.9(也可查看官网文档最新版本)
yum install -y docker-ce-20.10.21 docker-ce-cli-20.10.21 containerd.io-1.6.9
2.设置重新加载系统服务、开机自启、重新启动
systemctl daemon-reload
systemctl enable docker
systemctl restart docker
3.将docker-compose从本地放进去//或者从网络下载
#下载命令
curl -SL https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
也可以先下载到本地再直接上传至服务器内,网络下载较慢(该文件也在本文件夹内)
4.将docker-compose放到/user/local/bin/下面
mv docker-compose /usr/local/bin/
5.给该文件添加可执行权限(该文件原本只有r和w权限没有x权限)
chmod +x /usr/local/bin/docker-compose
三、设置配置文件
1.创建一个文件夹
mkdir ~/halo && cd ~/halo
2.编辑文件修改密码(要用vi编辑,修改代码内两处标注位置密码一致)
注意:端口号设置的为8090,后面访问需要用到
[root@qcc halo]# vi ~/halo/docker-compose.yaml
代码复制进去,修改下标注的两处密码,两处密码需要一致
version: "3"
services:
halo:
image: halohub/halo:2.12
container_name: halo
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./halo2:/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/
halodb:
image: mysql:8.1.0
container_name: halodb
restart: on-failure:3
networks:
halo_network:
command:
- --default-authentication-plugin=caching_sha2_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:
3.启动 Halo 服务
启动服务后,在浏览器输入虚拟机的ip+端口号8090即可访问并设置
cd ~/halo需要在该目录下执行下面命令
docker-compose up -d
四、效果展示
插件、主题等可自行下载选择
搜索好看的主题并且设置
下载好了的主题需要点启用才可刷新生效
五、绑定域名和添加SSL证书(不需要可忽略)
1.命令配置
1.1创建一个文件夹来存放 NPM 的 docker-compose.yml
文件:
mkdir -p ~/data/docker_data/nginxproxymanager
1.2 进入该文件夹
cd ~/data/docker_data/nginxproxymanager
1.3编辑配置文件
vi docker-compose.yml
1.4复制代码粘入(建议删掉注释)
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # 不建议修改端口
- '81:81' # 可以把冒号左边的 81 端口修改成你服务器上没有被占用的端口
- '443:443' # 不建议修改端口
volumes:
- ./data:/data # 点号表示当前文件夹,冒号左边的意思是在当前文件夹下创建一个 data 目录,用于存放数据,如果不存在的话,会自动创建
- ./letsencrypt:/etc/letsencrypt # 点号表示当前文件夹,冒号左边的意思是在当前文件夹下创建一个 letsencrypt 目录,用于存放证书,如果不存在的话,会自动创建
注意:安装了 NPM 之后,就不需要再安装 Nginx 了,否则会端口冲突(不建议修改 NPM 的 80、443 端口)。如果你的服务器安装了宝塔面板,也可以和 NPM 一起使用,只要你到软件后台把宝塔安装的 Nginx 关闭或者卸载即可。
1.5启动 NPM
docker-compose up -d # -d 表示后台运行
docker compose up -d # 如果你用的是 docker-compose-plugin 的话,用这条命令
2.web界面配置【域名绑定】
使用 http://127.0.0.1:81 就可以访问 NPM 的网页端了。(注意把 127.0.0.1
替换成你实际服务器的 IP)
2.1账户密码修改,保存之后,会让我们修改密码(建议用一个复杂的密码)
2.1.1给 Halo 来添加一个反向代理
2.1.2接着点击 Add Proxy Host
,弹出如下对话框
Domain Names :填我们 Halo 网站的域名,首先记得做好 DNS 解析,把域名绑定到我们的服务器的 IP 上
Scheme :默认 http 即可,除非你有自签名证书
Forward Hostname/IP :填入服务器的 IP,或者 Docker 容器内部的 IP(如果 NPM 和 Halo 搭建在同一台服务器上的话)
Forward Port:填入 Halo 映射出的端口,这边默认是 8090
Cache Assets :缓存,可以选择打开
Block Common Exploits: 阻止常见的漏洞,可以选择打开
Websockets Support :WS 支持,可以选择打开
Access List: 这个是 NPM 自带的一个限制访问功能,这边我们不管,后续可以自行研究
2.1.3根据样列配置自己的
因为样例的 NPM 和 Halo 搭建在同一台 VPS 上,所以这边的 IP,图中填的是 172.17.0.1
,为 Docker 容器内部的 IP 地址,
可以通过下面的命令查询:
ip addr show docker0
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:e4:a3:b5:b9 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
这边的 IP 是 172.17.0.1
,填入这个 IP,可以不用打开防火墙的 8090
端口。
当然,如果你的 NPM 和 Halo 不在同一台服务上,你需要在 IP 部分填入 你的 Halo 所在的服务器的 IP,并在服务商(部分服务商如腾讯、阿里)的后台打开 8090
端口。
评论区