前言

本人基本小白,本文为本人折腾后所写,内容若有错误,敬请指出。

一、使用宝塔面板安装Docker

在宝塔面板中打开菜单的“Docker”(注意:此功能为企业版专享功能,当时属于测试阶段,开放使用)。打开后会自动安装Docker。 图片 在服务器终端输入

docker -v

显示,Docker的版本则说明安装Docker成功。 图片-1655394320501

二、部署Halo

查阅Halo官方提供。Halo官方文档地址

1.创建 工作目录

mkdir ~/.halo && cd ~/.halo

2.下载示例配置文件到 工作目录

wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml

3.编辑配置文件,配置数据库或者端口等(可暂时忽略)

vim application.yaml

4.拉取的 Halo 镜像(最好是拉取稳定版本,这里拉取1.5.3本版)

docker pull halohub/halo:1.5.3

5.创建容器 (这里默认映射端口到8090)

docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.5.3

至此以及初步完成了Halo的部署,当时想要查看部署的Halo页面还需要放行8090的端口。在宝塔面板与服务器提供商处双双放行后便可以通过"http://ip:8090"的方式访问部署的页面

三、DNS解析与申请SSL证书

1.解析二级域名(以阿里云为例)

在阿里云控制台处打开“DNS解析”

阿里云工作台

选择域名的“解析设置”——点击“记录添加”开始添加DNS解析

记录类型——A。 主机记录——填入想要的二级域名“前缀”,这里我选择了“blog”。 解析线路——默认就好。 记录值——填入你服务器的公网ip地址。 TTL——10分钟。 点击确认,完成解析。(保留DNS解析的页面,之后还要用) DNS_3

2.获取SSL证书(以阿里云为例)

同样,在阿里云控制台点击“SSL证书”进入“数字证书管理服务”页面

SSL_2

选择“SSL证书”——免费“证书”——“创建证书”

SSL_4

获取到一个有效期为一年的SSL证书,然后点击“证书申请”。按照情况填入信息就好。然后下一步。

SSL_3x

出现让你在DNS解析页面添加解析以及认证,保留这个页面,回到DNS解析页面,再次添加解析。

SSL_5 记录类型——TXT。 主机记录——复制SSL页面那里的主机记录 解析线路——默认就好。 记录值——复制SSL页面那里的记录值 TTL——10分钟。 点击确认,完成解析。 回到SSL页面进行DNS信息验证,之后提交审核完成申请SSL证书。 选择下载我们刚刚申请好的证书,由于宝塔默认使用Nginx,所以我们选择下载Nginx类型的证书。 下载好后解压可以看到两个文件,留着稍后使用 图片-1655390272783

四、反向代理与部署SSL证书

上传SSL证书

进入宝塔面板,上传刚刚下载的SSL证书文件到服务器中。这里我选择了与一级域名下的/www/server/panel/vhost/cert/blog.mosah.top/路径下。我还修改了两个文件名。 图片-1655390671078

修改Nginx配置文件实现反代

由于我是希望通过二级域名访问博客,因此需要一级域名网站的配置Nginx文件。 在一级域名的Nginx配置文件的“server”外添加下面配置即可。

#BINDING-halo-START
upstream halo {
  server 127.0.0.1:8090;
}
server
  {
    listen 80;
    listen [::]:80;
    listen 443 ssl http2;
    server_name blog.mosah.top;
    #强制跳转到https
    if ($server_port !~ 443){
        rewrite ^(/.*)$ https://$host$1 permanent;
    }
    
    client_max_body_size 1024m;
    ssl_certificate    /www/server/panel/vhost/cert/blog.mosah.top/fullchain.pem;
    ssl_certificate_key    /www/server/panel/vhost/cert/blog.mosah.top/privkey.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; #加密算法
    ssl_prefer_server_ciphers on;
    #return 301 https://$host$request_uri;
    
    location / {
                proxy_pass http://127.0.0.1:8090;
                proxy_http_version    1.1;
                proxy_cache_bypass                  $http_upgrade;
                proxy_set_header Upgrade            $http_upgrade;
                proxy_set_header Connection         "upgrade";
                proxy_set_header Host               $host;
                proxy_set_header X-Real-IP          $remote_addr;
                proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto  $scheme;
                proxy_set_header X-Forwarded-Host   $host;
                proxy_set_header X-Forwarded-Port   $server_port;
            } 
 }
#BINDING-halo-END

重启一下Nginx,到了这里就应该可以实现通过二级域名访问了。我们可以在服务器提供商处停用8090端口的开放以停用ip+端口的方式访问。谢谢阅读!

Q.E.D.