本文最后更新于 2025-11-20,文章内容可能已经过时。

准备条件

1.1台2核2g的服务器

2.服务器绑定子网

3.购买域名以及ssl认证

4.配置防火墙放行443、8090、22、80、9000端口

5.下载xshell连接服务器

ESC上搭建

一、docker环境部署

安装docker和docker-compose(注:docker.20版本以上内置了docker-compose 不再需要单独下载)

推荐方案:一键安装配置脚本

该脚本支持 11 种 Linux 发行版,包括国产操作系统(Anolis OS、OpenCloudOS、Alinux),一键安装 docker、docker-compose 并自动配置国内镜像加速源。

bash <(wget -qO- https://xuanyuan.cloud/docker.sh)

脚本特性与优势

✅ 支持 11 种主流发行版:OpenCloudOS、Anolis OS (龙蜥)、Alinux (阿里云)、Fedora、Rocky Linux、AlmaLinux、UbuntuDebianCentOS、RHEL、Oracle Linux

✅ 国产操作系统完整支持:深度适配国产操作系统(Anolis OS、OpenCloudOS、Alinux),支持版本自动识别和最优配置

✅ 多镜像源智能切换:内置阿里云、腾讯云、华为云、中科大、清华等 6+ 国内镜像源,自动检测并选择最快源

✅ 老版本系统特殊处理:支持 Ubuntu 16.04、Debian 9/10 等已过期系统,自动配置兼容的安装方案

✅ 双重安装保障:包管理器安装失败时自动切换到二进制安装,确保安装成功率

✅ macOS/Windows 友好提示:自动检测 macOS 和 Windows 系统,提供适合的 Docker Desktop 安装指引

脚本已开源:GitHub 源码

检查Docker版本

docker --version

检查Docker服务状态

systemctl  status  docker

运行测试容器

docker run hello-world

常见问题

服务启动失败

如果Docker服务启动失败,可以查看详细错误信息:

sudo journalctl -u docker.service

查看Docker服务的详细日志信息

二、创建docker-compose.yaml文件

mkdir halo2;cd halo2 #创建一个目录,并进入此目录

镜像获取网站:https://docker.aityp.com/ 将镜像复制到yaml中

然后再创建docker-compose.yaml

vim docker-compose.yaml
services:
  halo:
    image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/halohub/halo:2.21.3
    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
    environment:
      - JVM_OPTS=-Dreactor.bufferSize.small=1024        # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
      - --spring.r2dbc.username=root
      - --spring.r2dbc.password=o#DwN&JSa56112233         # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
      - --spring.sql.init.platform=mysql
      - --halo.external-url=https://www.cloudbas.top          # 外部访问地址,请根据实际需要修改

  halodb:
    image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.1.0
    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
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      - MYSQL_ROOT_PASSWORD=o#DwN&JSa56112233            # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
      - MYSQL_DATABASE=halo

networks:
  halo_network:

三、执行容器运行命令

docker compose up  -d   // 运行容器
docker compose ps   //查看是否启动成功

如图便是启动成功

四、打开web页面使用

成功以后需要打开自己对应的端口8090翻火墙就可以web端访问了

http://ip:8090

绑定域名以及认证ssl

1.下载nginx

wget https://nginx.org/download/nginx-1.22.1.tar.gz   
tar -zxvf nginx-1.22.1.tar.gz
cd nginx-1.22.1
yum  -y  install  gcc make pcre-devel(作用:支持正则) openssl-devel(搭载安全加密网站)
编译安装
./configure --prefix=/usr/local/nginx(安装路径) --user=nginx --group=nginx(nginx账户,nginx组)  --with-http_ssl_module(安全加密)
#nginx一旦失控,别人可以用nginx对应的账户对你的服务器随意操作,这样设置即使别人黑进你的nginx也很难干出大事
最后一步  make && sudo make install
创建用户useradd nginx -s /sbin/nologin 设置为禁止登录  
cd  /usr/local/nginx     #以下操作都在nginx中执行
启动nginx      sbin/nginx(如果安装的有apache,必须关闭apache)
关闭nginx      sbin/nginx  -s  stop
查看版本号      sbin/nginx  -V  #查看配置信息

2.上传ssl证书到/usr/local/nginx/conf 文件下

3.配置nginx

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    upstream halo {
  	server 117.72.144.201:8090;
	}
    server {
        listen       80;
  	listen [::]:80;
  	server_name www.cloudbas.top cloudbas.top;
  	client_max_body_size 1024m;
	return 301 https://$server_name$request_uri;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {

 	    proxy_pass http://halo;
    	    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;
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

    # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  www.cloudbas.top cloudbas.top;

        ssl_certificate      cert.pem;
        ssl_certificate_key  cert.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   https;
            index  index.html index.htm;
            proxy_pass http://halo;
            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;
        }
    }

}

五、网站备份

方法一

直接使用官方的备份方法

方法二

直接在服务器使用tar命令打包halo2整个目录

备份可以使用以下命令

tar -zcf halo2-bak20250912.tar.gz halo2

恢复

在另一台服务器上解压恢复即可

tar -xvf halo2-bak20250912.tar.gz

六、网站优化

优化博客文件/图片上传大小

vim   /usr/local/nginx/conf/nginx.conf

# 在 http 块中添加(影响所有虚拟主机)
http {
    client_max_body_size 100m;  # 设置为 100MB,可根据需要调整
    # ... 其他配置
}

# 或者在 server 块中添加(只影响当前虚拟主机)
server {
    listen 80;
    server_name your-domain.com;
    client_max_body_size 100m;  # 设置为 100MB
    
    location / {
        # ... 其他配置
    }
}

# 或者在 location 块中添加(只影响特定路径)
location / {
    client_max_body_size 100m;
    proxy_pass http://halo;
}

cd  /usr/local/nginx
sbin/nginx -s reload     //  再次上传发现可以上传100m以下的文件