系统:ubuntn 20.04
参考:
Halo 官网:Halo
建议大家先去Halo 官网主题仓库看看有没有喜欢的主题再决定要不要装,不然很可能像我一样装了之后又跑路了…… ^^
准备
解析域名
域名生效需要时间,为了避免申请 SSL 证书时屡次失败导致超过申请次数限制,最好提前添加域名解析1,我这里用的是子域名。
为域名添加一个 A 记录,指向服务器所在 IP。如 Namesile 中:
安装 docker
在 Ubuntu 中安装 docker2:
zsh
apt updateapt install apt-transport-https ca-certificates curl software-properties-commoncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"apt update
其他系统可参考:Plume | 利用 Docker-compose 搭建 Fedi 开源博客平台 – Zoe’s Dumpster.中的安装方式,或者查看官方文档。有的 VPS 在装系统的时候也可以预装 docker,如 vultr/contabo 都有,不过 docker-compose 就需要自己装(这里似乎没有用到 docker-compose。
检查是否装好,有版本就装好了:
zsh
docker -v
检查端口开放情况
参考:Ubuntu20.04 开放指定端口_哈-CSDN 博客
我不太懂端口是怎么开放的,自动开放还是用了就开放。这里用的是 ufw 来设置防火墙开放端口,用 netstat 查看端口占用状况。
Debian/Ubuntu 中安装 netstat3:
zsh
apt install net-tools
检查端口占用:
bash
netstat -aptn
ufw 是 Ubuntu20.04 系统预装的 3,如未安装上,可以这样安装:
bash
sudo apt updatesudo apt install ufw
常用操作:
bash
ufw enable #打开防火墙ufw disable #关闭防火墙ufw status #查看防火墙规则ufw allow 22 #打开22端口ufw deny 22 #拒绝访问22端口
打开防火墙之前最好打开常用的端口,如 22,不然可能会连不上服务器。
安装 Halo
参考:使用 Docker 部署 Halo | Halo Documents
1.创建工作目录
创建一个文件夹存放 Halo,我这里命名为.halo,当然也可以叫其他的。
bash
mkdir ~/.halo && cd ~/.halo
2.下载示例配置文件到工作目录
bash
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
3. 编辑配置文件,配置数据库或者端口
我不会用 vim 命令,所以这里用 nano 编辑
打开配置文件 application.yaml
bash
nano application.yaml
修改配置
配置参考 | Halo Documents 这里已经有刚下载好的配置文件了,我们可以根据自己的需要修改,Halo 数据库支持 H2 和 Mysql 数据库,因为我已经安装了一个 Wordpress 博客占用了 Mysql 数据库,虽然不知道有无影响,但为了避免出错,最后选择了按示例里的配置,使用 H2 数据库(主要还是懒得改
我这里将端口放到 8090,因为原 80 端口已经被占用,大家可以选择其他开放端口,注意修改数据库用户名和密码。
yaml
server:port: 8090# Response data gzip.compression:enabled: falsespring:datasource:# H2 database configuration.driver-class-name: org.h2.Driverurl: jdbc:h2:file:~/.halo/db/halousername: admin #数据库用户名password: 123456 #数据库密码# MySQL database configuration.# driver-class-name: com.mysql.cj.jdbc.Driver# url: jdbc:mysql://127.0.0.1:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true# username: root# password: 123456# H2 database console configuration.h2:console:settings:web-allow-others: falsepath: /h2-consoleenabled: falsehalo:# Your admin client path is https://your-domain/{admin-path}admin-path: admin# memory or levelcache: memory
4. 拉取最新的 Halo 镜像
bash
docker pull halohub/halo:latest
5. 创建容器
bash
docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:latest
6. 打开安装引导界面。
访问 http://服务器ip:端口号
用 Nginx 反代
说实话,我现在还没懂 Nginx 是干嘛的,反代又是什么,但好像一般都要有,那就做一下吧。幸好 Halo 还有现成的配置4可以抄一下,结合云五的 Wordpress 搭建教程2,把里面 wordpress 的部分改为 halo 就可以了。
1.安装 Nginx
bash
apt install nginxcd /etc/nginx/sites-enabled/rm rf defaultcd /etc/nginx/sites-available/nano halo.conf
2.配置 halo.conf
注意修改www.yourdomain.com
为自己的域名
upstream halo { server 127.0.0.1:8090; } server { listen 80; listen [::]:80; server_name www.yourdomain.com; client_max_body_size 1024m; location / { proxy_pass http://127.0.0.1:8090; 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; } }
用nginx -t
测试配置文件,如果最后有出现suceessful
,那测试就成功了。
然后为这个配置文件增加一个链接
bash
cd /etc/nginx/sites-enabled/ln -s ../sites-available/halo.conf halo.conf
3.重启 nginx
bash
systemctl reload nginx
现在访问域名就可以到达 halo 博客主页了,如果不行,可以 ping 一下域名看是不是解析还没生效:如 ping exampl.com
我这里出现一个问题,是输入域名后到了我的 miniflux 主页,因为 halo.conf 里域名后缀输错了……
安装 certbot,为域名获取免费 SSL 证书
有 ssl 证书后,就不会被提示网站不安全了,也就是从 http->https
1.安装 certbot
bash
apt install certbot python3-certbot-nginx
2.配置证书
修改 example.com 为自己的域名:
bash
certbot --nginx -d example.com -d www.example.com
如果你不确定是否可以申请成功,或者还在修改/测试配置,可以在后面加--staging
测试,避免申请超过次数限制1
一些选项,这里最好选择 1,如果选择 2,就没办法用 http 访问域名了:
text
1: No redirect - Make no further changes to the webserver configuration.2: Redirect - Make all requests redirect to secure HTTPS access. Choose this fornew sites, or if you're confident your site works on HTTPS. You can undo thischange by editing your web server's configuration.
然后同意条款后问是否暴露邮箱时选 No2。
其他
- 主题编辑:首页 / 外观 / 主题编辑 里修改具体文件
- 进入后台:域名后面加/admin,如:https://yourdomain/admin