准备工作

撰文时间:2024年1月3日,Halo版本为 2.11.3

服务器:腾讯云2h4g轻量级应用服务器

域名:大陆备案域名*1

CDN:又拍云

面板:宝塔

阅读文档

Halo官方文档地址:

1、Halo建站

2、docker-compose快速开始

本文采取的是MySQL存储,对应下方 docker-compose.yaml(如果云服务器中有mySQL需要停止服务,否则会占用配置中8.1版本数据库的端口)

version: "3"
services:
  halo:
    image: halohub/halo:2.11
    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=??????
      # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=??????
      - --spring.sql.init.platform=mysql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=https://??????/

  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=??????
      - MYSQL_DATABASE=halo
networks:
  halo_network:

其中有4个 ??????作为占位符,需要自行替换。***其中外部访问最好写域名***

启动容器

开放端口

按照配置文件中需要放行的端口为:80,3306,8090

后续https需要放行443,因此需要去服务器防火墙处检查有无开发这些端口

宝塔安装Docker和ngnix

可以把Docker管理器放到首页方便管理,用SSH远程连接服务器查看docker和docker-compose版本

启动容器

此时距离成功就差两步:

1. 新建文件夹halo,放入 docker-compose.yaml

2. 切换到halo目录下,执行 docker-compose up -d启动容器

3. 下图是已经安装好了,那么执行步骤2就是更新配置中2.11版本最新的容器

可以去宝塔首页查看容器有无启动,有无对外端口

域名和CDN

宝塔面板新建网站

填写好备案的域名即可,这里的域名需要和 docker-compose.yaml中外部访问的域名一致

需要在服务器添加域名,并配置域名解析(切记服务器需要添加顶级域名)

配置ngnix

1)端口改成实际端口

location / {
  proxy_pass http://127.0.0.1:80??/;       # 注意改成你实际使用的端口
  rewrite ^/(.*)$ /$1 break;
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Upgrade-Insecure-Requests 1;
  proxy_set_header X-Forwarded-Proto https;
}

配置文件默认做了80转443,所以不需要我们额外的配置,以上配置可以参考官网文档。

2)SSL证书

直接使用泛域名证书即可

在网站处可以查看自己证书啥时候过期,但宝塔有计划任务会自动续签。可以自行前往计划任务查看。

访问页面

博客地址:配置文件中的外链:https://域名

后台地址:外链/console

博客首页:主题为Pix(付费)

CDN配置(选)

可选操作,up使用的是又拍云cdn,可以加入又拍云联盟收取代金券

注意:大陆没有备案的域名是无法使用又拍云cdn的

核心步骤:

1)需要将上方服务器配置的域名解析的xxx的A换成CNAME,并且指向又拍云提供的地址

2)源站这里填写的是公网IP

3)开启https的话,这里的证书可以用腾讯云申请的免费一年的证书,这里开启强制HTTPS访问之后,上述ngnix配置SSL证书就不要强制访问了

4)缓存控制中要设置参数跟随,否则会导致站点图片出不来

5)win+r输出cmd,然后ping xxx.xxx.xxx如果显示的是你的公网IP,那就说明cdn没有奏效

主题推荐

Pix(付费)

hao(免费)

注意事项

1. 防火墙开放所需要的端口

2. 申请的SSL证书用于cdn

3. 泛域名证书腾讯云宝塔面板可以自动续,其他云服务厂商没测试过