Halo博客搭建

Halo博客搭建——小白必看
文章地址

搭建需要

  1. 域名(仅仅是为了方便在搜索引擎查到网站,如果不想扩大阅读量可以不准备)
  2. Linux服务器(建议为阿里云,腾讯云。国外服务器建议为cloudflare俄罗斯服务器,购买方式我会在其他文章中讲)
  3. 眼睛(有几个要地方,在我搭建的时候没看到导致搭建不顺利,最后发现错误真低级)

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镜像(参考:官方
  1. 创建工作目录
mkdir ~/.halo && cd ~/.halo
  1. 下载示例配置文件到工作目录
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
  1. 编辑配置文件,配置数据库或者端口等
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为默认的数据本地存储地址,请勿修改。
默认的数据库账户和密码为 admin123456建议将其修改,并妥善保存(此用户名和密码在 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
  1. 创建容器
docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.15
  1. 打开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 这个域名做演示,实际情况请修改此域名。

  1. 进入到 oneinstack 目录,执行 vhost 创建命令
cd oneinstack
sh vhost.sh
  1. 按照提示选择或输入相关信息
    What Are You Doing?
    1. Use HTTP Only
    2. Use your own SSL Certificate and Key
    3. 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 的过程并没有创建反向代理的配置,所以需要我们自己修改一下配置文件。

  1. 使用你熟悉的工具打开配置文件,此教程使用 vim。
vim /usr/local/nginx/conf/vhost/demo.halo.run.conf
  1. 删除一些不必要的配置
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;
}
  1. 在 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;
}
  1. 修改 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;
}
  1. 修改 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

至此,整个教程完毕,现在你可以访问域名检查是否已经配置成功。
如果为国内服务器还需要备案,备案相关信息请按服务器供应商的要求来。

文章地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值