如何在服务器上部署halo
本文最后更新于 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、Ubuntu、Debian、CentOS、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.yamlservices:
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以下的文件