Halo博客搭建——小白必看
文章地址
搭建需要
- 域名(仅仅是为了方便在搜索引擎查到网站,如果不想扩大阅读量可以不准备)
- Linux服务器(建议为阿里云,腾讯云。国外服务器建议为cloudflare俄罗斯服务器,购买方式我会在其他文章中讲)
- 眼睛(有几个要地方,在我搭建的时候没看到导致搭建不顺利,最后发现错误真低级)
Halo搭建
进入正题开始搭建Halo
需要软件Xshell,我是在这里下载安装的,官网需要花钱
Docker部署
安装Docker(参考:菜鸟教程)
本次为Centos上安装,只需要按照顺序一行代码一行代码打在Xshell上即可。若为其他版本Linux需自行去菜鸟教程按步骤进行
which docker #查看是否有docker
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 卸载掉原先的docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 #安装依赖包
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #安装仓库源
sudo yum install docker-ce docker-ce-cli containerd.io #安装docker
sudo systemctl start docker #启动docker
docker images #查看本地镜像
docker ps #查看容器
docker pull #拉取镜像
安装Halo镜像(参考:官方)
- 创建工作目录
mkdir ~/.halo && cd ~/.halo
- 下载示例配置文件到工作目录
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
- 编辑配置文件,配置数据库或者端口等
vim application.yaml
Halo 目前支持 H2 及 MySQL 数据库。
推荐使用 H2,较其他数据库来说更为方便。
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:file:~/.halo/db/halo
username: admin
password: 123456
h2:
console:
settings:
web-allow-others: false
path: /h2-console
enabled: false
url为默认的数据本地存储地址,请勿修改。
默认的数据库账户和密码为 admin和 123456,建议将其修改,并妥善保存(此用户名和密码在 Halo 第一次启动的时候将自动创建。并且不支持首次启动后,通过修改配置文件中的账户或者密码,如果修改,再次启动将提示用户名或者密码错误。)。
Halo 支持自定义后台管理的根路径。
halo:
# Your admin client path is https://your-domain/{admin-path}
admin-path: admin
admin为后台登入地址,建议更改,更改后进入后台地址为域名/更改后内容,若未绑定域名应为ip:8090/更改后内容
4. 拉取最新的 Halo 镜像
docker pull halohub/halo:1.4.15
- 创建容器
docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.15
- 打开http://ip:8090 即可看到安装引导界面。
Nginx配置https域名(参考:官方)
通过 OneinStack 安装 Nginx
wget -c http://mirrors.linuxeye.com/oneinstack-full.tar.gz && tar xzf oneinstack-full.tar.gz && ./oneinstack/install.sh --nginx_option 1
出现下面的信息即代表安装成功:
Nginx installed successfully!
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
Redirecting to /bin/systemctl start nginx.service
####################Congratulations########################
Total OneinStack Install Time: 5 minutes
Nginx install dir: /usr/local/nginx
安装会很漫长耐心等待
创建 vhost
即创建一个站点,你可以通过这样的方式在你的服务器创建无限个站点。接下来的目的就是创建一个站点,并反向代理到 Halo。这一步在此教程使用 demo.halo.run 这个域名做演示,实际情况请修改此域名。
- 进入到 oneinstack 目录,执行 vhost 创建命令
cd oneinstack
sh vhost.sh
- 按照提示选择或输入相关信息
What Are You Doing?- Use HTTP Only
- Use your own SSL Certificate and Key
- Use Let’s Encrypt to Create SSL Certificate and Key
q. Exit
Please input the correct option:
这一步是选择证书配置方式,如果你有自己的证书,输入2即可。如果需要使用 Let’s Encrypt 申请证书,选择3即可。
Please input domain(example: www.example.com):
输入自己的域名即可,前提是已经提前解析好了域名。
Please input the directory for the domain:demo.halo.run :
(Default directory: /data/wwwroot/demo.halo.run):
提示输入站点根目录,因为我们是使用 Nginx 的反向代理,所以这个目录是没有必要配置的,我们直接使用默认的即可(直接回车)。
Do you want to add more domain name? [y/n]:
是否需要添加其他域名,按照需要选择即可,如果不需要,输入 n 并回车确认。
Do you want to add hotlink protection? [y/n]:
是否需要做防盗链处理,按照需要选择即可。
Allow Rewrite rule? [y/n]:
路径重写配置,我们不需要,选择 n 回车确定即可。
Allow Nginx/Tengine/OpenResty access_log? [y/n]:
Nginx 的请求日志,建议选择 y。
这样就完成了 vhost 站点的创建,最终会输出站点的相关信息:
Your domain: demo.halo.run
Virtualhost conf: /usr/local/nginx/conf/vhost/demo.halo.run.conf
Directory of: /data/wwwroot/demo.halo.run
Nginx 的配置文件即 /usr/local/nginx/conf/vhost/demo.halo.run.conf。
修改 Nginx 配置文件
上方创建 vhost 的过程并没有创建反向代理的配置,所以需要我们自己修改一下配置文件。
- 使用你熟悉的工具打开配置文件,此教程使用 vim。
vim /usr/local/nginx/conf/vhost/demo.halo.run.conf
- 删除一些不必要的配置
location ~ [^/]\.php(/|$) {
#fastcgi_pass remote_php_ip:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
此段配置是针对 php 应用的,所以可以删掉。
3. 添加 upstream 配置
在 server 的同级节点添加如下配置:
upstream halo {
server 127.0.0.1:8090;
}
- 在 server 节点添加如下配置
location / {
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_pass http://halo;
}
- 修改 location ~ .*.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ 节点
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
proxy_pass http://halo;
expires 30d;
access_log off;
}
- 修改 location ~ .*.(js|css)?$ 节点
location ~ .*\.(js|css)?$ {
proxy_pass http://halo;
expires 7d;
access_log off;
}
如果不按照第 5,6 步操作,请求一些图片或者样式文件不会经过 Halo,所以请不要忽略此配置。
7. 添加 acme.sh 续签验证路由
OneinStack 使用的 acme.sh 管理证书,如果你在创建 vhost 的时候选择了使用 Let’s Encrypt 申请证书,那么 OneinStack 会在系统内添加一个定时任务去自动续签证书,acme.sh 默认验证站点所有权的方式为在站点根目录生成一个文件(.well-known)来做验证,由于配置了反向代理,所以在验证的时候是无法直接访问到站点目录下的 .well-known 文件夹下的验证文件的。需要添加如下配置:
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
allow all;
root /data/wwwroot/demo.halo.run/;
}
至此,配置修改完毕,保存即可。最终你的配置文件可能如下面配置一样:
upstream halo {
server 127.0.0.1:8090;
}
server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /usr/local/nginx/conf/ssl/demo.halo.run.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/demo.halo.run.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
server_name demo.halo.run;
access_log /data/wwwlogs/demo.halo.run_nginx.log combined;
index index.html index.htm index.php;
root /data/wwwroot/demo.halo.run;
if ($ssl_protocol = "") { return 301 https://$host$request_uri; }
include /usr/local/nginx/conf/rewrite/none.conf;
#error_page 404 /404.html;
#error_page 502 /502.html;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
proxy_pass http://halo;
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$ {
proxy_pass http://halo;
expires 7d;
access_log off;
}
location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md) {
deny all;
}
location / {
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_pass http://halo;
}
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
allow all;
root /data/wwwroot/demo.halo.run/;
}
}
重载 Nginx 使配置生效
验证 nginx 配置
nginx -t
如果输出如下提示则代表配置有效:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
重载 Nginx 配置:
nginx -s reload
至此,整个教程完毕,现在你可以访问域名检查是否已经配置成功。
如果为国内服务器还需要备案,备案相关信息请按服务器供应商的要求来。