核心过程
使用Docker Compose部署,创建docker-compose.yaml文件,编辑好halo的基本配置。使用docker-compose up -d
执行,部署成功。访问 服务器ip地址:8090/console
用到的工具
- 腾讯云服务器:服务器管理
- 腾讯域名管理:域名DNS解析、域名备案
- Xshell:操作Linux
- Xfp:上传文件
- Docker、Docker Compose:halo和Nginx Proxy Manager部署
- Nginx Proxy Manager:反向代理
安装Docker
# 1.卸载旧的版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 如有需要,可以安装gcc
yum -y install gcc
# 以及gcc-c++
yum -y install gcc-c++
# 2.需要的安装包
sudo yum install -y yum-utils
# 3.设置镜像仓库 建议使用阿里云的镜像,十分快
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum软件包索引(安装前的工作,非必须)
yum makecache fast
# yum makecache: error: argument timer: invalid choice: 'fast' (choose from 'timer')
# 安装报错了,yum makecache fast是centOS7的命令, 不使用8,可以直接使用
yum makecache # 或者
dnf makecache
# 4.安装docker docker-ce:社区版的,docker-ee:企业版的
sudo yum install docker-ce docker-ce-cli containerd.io
安装Docker Compos
更新包索引,并安装最新版本的 Docker Compose:
sudo yum update
$ sudo yum install docker-compose-plugin
验证是否正确安装
docker compose version
出现Docker Compose version vN.N.N。
使用Docker Compos部署Halo
我使用的是Halo+PostgreSQL
-
在系统任意位置创建一个文件夹,此文档以 ~/halo 为例。
mkdir ~/halo && cd ~/halo
-
创建 docker-compose.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: - "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:postgresql://halodb/halo - --spring.r2dbc.username=halo # PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。 - --spring.r2dbc.password=openpostgresql - --spring.sql.init.platform=postgresql # 外部访问地址,请根据实际需要修改 - --halo.external-url=http://localhost:8090/ # 初始化的超级管理员用户名 - --halo.security.initializer.superadminusername=admin # 初始化的超级管理员密码 - --halo.security.initializer.superadminpassword=P@88w0rd halodb: image: postgres:latest container_name: halodb restart: on-failure:3 networks: halo_network: volumes: - ./db:/var/lib/postgresql/data ports: - "5432:5432" healthcheck: test: [ "CMD", "pg_isready" ] interval: 10s timeout: 5s retries: 5 environment: - POSTGRES_PASSWORD=openpostgresql - POSTGRES_USER=halo - POSTGRES_DB=halo - PGUSER=halo networks: halo_network:
-
启动Halo服务,要在~/halo目录下执行
docker-compose up -d
-
服务器控制台开放8090端口
-
用浏览器 访问服务器ip地址:8090/console 即可进入 Halo 管理页面,用户名和密码为在 docker-compose.yaml 文件中设置的 superadminusername 和 superadminpassword。
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:
- "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:postgresql://halodb/halo
- --spring.r2dbc.username=halo
# PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
- --spring.r2dbc.password=openpostgresql
- --spring.sql.init.platform=postgresql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
# 初始化的超级管理员用户名
- --halo.security.initializer.superadminusername=admin
# 初始化的超级管理员密码
- --halo.security.initializer.superadminpassword=P@88w0rd
halodb:
image: postgres:latest
container_name: halodb
restart: on-failure:3
networks:
halo_network:
volumes:
- ./db:/var/lib/postgresql/data
ports:
- "5432:5432"
healthcheck:
test: [ "CMD", "pg_isready" ]
interval: 10s
timeout: 5s
retries: 5
environment:
- POSTGRES_PASSWORD=openpostgresql
- POSTGRES_USER=halo
- POSTGRES_DB=halo
- PGUSER=halo
networks:
halo_network:
域名注册
域名注册实际上是通过付费获得域名一年或几年的使用权的过程。我在腾讯云购买的域名
腾讯云官方文档:域名注册 单个域名注册-注册新域名-文档中心-腾讯云 (tencent.com)
域名备案
腾讯云官方文档:网站备案 首次备案-备案资料填写流程-文档中心-腾讯云 (tencent.com)
我的申请四天通过
公安备案
在全国公安机关互联网站安全管理服务平台。进行官方备案。
腾讯云官方文档:网站备案 公安备案流程-备案后续流程-文档中心-腾讯云 (tencent.com)
我的申请一天通过备案
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 -p ~/data/docker_data/nginxproxymanager # 创建一个 npm 的文件夹
cd ~/data/docker_data/nginxproxymanager # 进入该文件夹
vi docker-compose.yml # 进入文档
在英文状态的输入法下,按下 i,左下角出现 --INSERT– 后,粘贴填入下面的内容:
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 目录,用于存放证书,如果不存在的话,会自动创建
同样在英文输入法下,按一下 esc,然后 :wq 保存退出。
启动 NPM:
docker-compose up -d # -d 表示后台运行
docker compose up -d # 如果你用的是 docker-compose-plugin 的话,用这条命令
使用 http://127.0.0.1:81 就可以访问 NPM 的网页端了。(注意把 127.0.0.1 替换成你实际服务器的 IP)
默认登陆的用户名:admin@example.com 密码:changeme
配置Halo的反向代理
首先我们登陆网页端之后,会弹出修改用户名和密码的对话框,我们根据自己的实际来修改自己的用户名和邮箱。
存之后,会让我们修改密码(建议用一个复杂的密码)。
接着我们就可以来给 Halo 来添加一个反向代理了。
点击 Proxy Hosts,
接着点击 Add Proxy Host,弹出如下对话框:
以下是一个样列:
一键申请 SSL 证书
接着我们来申请一张 SSL 证书,让我们的网站支持 https 访问。
- 申请证书需要你提前将域名解析到 NPM 所在的服务器的 IP 上;
- 证书会三个月自动续期。
总结
其实很简单,官方网站都有详细教程。我相当于就是整合了一下。感谢大家看到这里。
最后
不卑不亢不怂,长成自己想要的样子
参考资料:
使用 Docker Compose 部署 | Halo 文档