我的博客建站指南

数字花园 / 技术 / 2022-03-23

本文同步发布于少数派-Halo博客建站指南

警告:本文是一篇纯新手向的博客建站教程,大神请回避!

缘起

建立一个个人博客的想法已经很久了,作为一个 03 年开始上网的网民来说有这个想法一点都不奇怪吧。但直到去年双十一看到腾讯云服务器打折才开始入坑,域名 + 轻量应用服务器大概 100 左右。

刚开始是使用 Gridea 做静态博客,当时还没有很好地科学上网途径,所以使用的是 coding page。后来因为对思源笔记的喜爱,爱屋及乌似的就想尝试使用 SOLO 博客。但是 SOLO 的建站花费了我大概十几个小时仍然不成功,原因主要是我网络知识的匮乏,一个 Nginx 反向代理就花费了我 5~6 个小时左右的时间,实际上我也是主要在处理域名与证书的问题。后来无奈转向了官方教程更丰富的Halo博客。

在经过了无数次的 debug 之后,我终于建成了我自己的博客啦!官方和网上的教程虽然已经很详细了,但是还是有很多坑是小白难以避免的,有些坑真的只有自己趟过才知道深浅。明明是一个很简单的问题,但对于小白来说往往要花费巨量的时间和精力才能解决。

出于对这几天艰辛建站历程的不舍,也出于一个老网民始终认为分享才是互联网唯一真理的认知,在此以一个小白的身份写下这篇面向小白的教程。

欢迎讨论和学习,如果你使用本教程成功建站,请在下面留下你的博客友情链接,方便PY😜。

本教程的代码均来自官方文档和其他博主教程,均已注明出处。


名词解释:

小白:非计算机科学、网络工程等 IT 专业背景,不会自己写代码,从未接触过网站建立等工作。以本人背景为例:毕业于核工程与核技术专业,从事环保行业,唯一熟悉一点的编程语言是汇编和 python。


安装简述

前期准备工作

请各位小白仔细阅读下述文字,确保自己完成前期准备工作。

  1. 知道使用⌈Ctrl⌋+⌈C⌋。

  2. 了解 Linux 操作系统的一点基础知识:知道 Linux 系统应当使用命令行操作,知道 Linux 有 root 账户和一般账户之分,掌握在 Linux 系统中粘贴方法:点击鼠标右键即可,不要使用⌈Ctrl⌋+⌈V⌋。

  3. 熟悉 IP 和域名的概念,了解区别和关系。

  4. 请自行在腾讯云或阿里云购买域名和服务器,购买及后续步骤请自行百度(这个一定可以百度到)。购买域名后请及时安装 SSL 证书,购买服务器后请及时将服务器 IP 解析到域名。查看解析是否正确可以通过⌈win⌋+⌈R⌋呼出运行面板,使用 cmd 启动 powershell,在 powershell 面板中使用 ping+IP 地址、ping+ 域名的方式检验连接情况。

  5. 具备一定的互联网检索能力,对代码没有畏惧心理,确保自己在有注释的情况下可以读完超过 3 行的代码块,以便可以复制报错代码进行搜索。

  6. 安装 WinSCP 和 putty 客户端,自行搜索掌握使用方法。

  7. 掌握远程登陆服务器的方法,知道设置服务器账户密码,知道一键重装服务器系统。

  8. 请确保自己有足够的耐心。有耐心是身为小白最大的美德,请抱有⌈一定不会一次成功⌋的想法进行后续操作。

安装 docker

无论是 Solo 还是 Halo,我都推荐使用 docker 安装(下文均以 CentOS 为例,Ubuntu 等其他版本 Linux 自行查找命令即可)。原因在于安装与后续管理都比较方便,这里贴一下我安装 docker 找到的比较好的代码:

来源:https://cxymm.net/article/weixin_43143310/121309033

配置yum源

sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker

sudo yum install -y docker-ce docker-ce-cli containerd.io

启动

systemctl enable docker --now

配置加速

这里额外添加了docker的生产环境核心配置cgroup

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

测试:

输入 docker version看到如下显示就安装成功了

image202203231047062jty5m3.png

拉取 Halo 官方镜像(同官方文档)

像我一样的小白推荐按下述代码一路复制即可,不要自行改动任何代码!

mkdir ~/.halo && cd ~/.halo
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
vim application.yaml
docker pull halohub/halo:latest

创建容器

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

不清楚端口是什么概念的,请不要改动 8090:8090!

Tips:

对于身为小白的我们而言,需要去服务器的防火墙中添加「8090」端口,路径如下(以腾讯云为例):

  1. 登录腾讯云

  2. 点击右上角的控制台

  3. 选择轻量应用服务器或云服务器(你购买的服务器类型)

  4. 点击你的服务器,进入服务器详情页面,点击防火墙

服务器截图20220323114416xs47bjc.jpg

进入防火墙页面后,点击添加规则,按图中内容配置。

防火墙截图202203231145563v75njs.jpg

详细教程可以参考这篇:腾讯云轻量服务器开放端口方法教程 - 知乎

测试:添加完之后稍等几分钟(3~5 分钟),访问 http://ip:8090即可进入 Halo 的安装引导页面,为了避免未知的麻烦,请不要在这一步初始化 Halo,成功打开引导页面后就可以关闭了。

搭建 Nginx 反向代理和配置 SSL 证书

这一步的作业是为了实现以 https://域名 的形式访问博客,也就是让你的博客实现正常化访问。

来源:Halo 博客建站记录 - Mengmeng '' s Blog (catchersun.cn)

申请 SSL 证书
在云服务商页面搜索「SSL 证书」,然后按照网页提示操作即可。

在 SSL 证书页面选择下载证书,下载时类型请选择 Nginx 一栏。

请记住证书下载后保存的路径,后续我们需要使用 WinSCP 将证书上传。

安装 Nginx
不要自行改动任何代码!

sudo yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-develyum install -y pcre pcre-develsudo yum install yum-utilscd /etc/yum.repos.d/vi nginx.repo # 创建nginx.repo文件
shell
[nginx-stable]name=nginx stable repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=1enabled=1gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfixes=true[nginx-mainline]name=nginx mainline repobaseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/gpgcheck=1enabled=0gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfixes=true
shell
yum install nginxnginx -v # 查看版本
shell
cd /etc/nginx
Tips:

使用 WinSCP 将存在本地的数据上传到服务器中:

参考:轻量应用服务器 如何将本地文件拷贝到轻量应用服务器 - 操作指南

使用 WinSCP 登录你自己的服务器,注意用户名与密码要匹配

进入服务器根目录,也就是路径中只有一个「/」

找到 etc 文件夹,进入后再找到 nginx 文件夹,确保路径为 /etc/nginx

在 WinSCP 中进入本地文件夹,找到你下载的 ssl 证书文件,全部选定(Ctrl+A)

点击上传,在弹出的对话框中按「确定」

下面是关键步骤:

修改 conf 文件:将域名改成自己的域名,SSL 证书文件也记得要使用你自己下载的 SSL 证书文件名。
vi nginx.conf

按「i」键,进入 insert 模式,按如下代码修改,记得将域名和证书文件名替换成你自己的。

user  nginx;
worker_processes  auto;
 
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
 
http {
  
    include       /etc/nginx/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  /var/log/nginx/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    keepalive_timeout  65;
 
    #gzip  on;
 
    include /etc/nginx/conf.d/*.conf;
    server {
      listen 80;
      server_name catchersun.cn www.catchersun.cn;
      return 301 https://$host$request_uri; 
      }
  
  
    server{
      listen 443 ssl;
      server_name catchersun.cn www.catchersun.cn;
  
      ssl_certificate "/etc/nginx/catchersun.cn.pem";
      ssl_certificate_key "/etc/nginx/catchersun.cn.key";
      ssl_session_cache shared:SSL:1m;
      ssl_session_timeout 10m;
      ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
      #表示使用的加密套件的类型。
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。
      ssl_prefer_server_ciphers on;
      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;
            }   
 
    }
}

server_name 后的内容换成你自己的域名,将 ssl_certificate、ssl_certificate_key换成你自己的证书文件。比如我的 ssl_certificate证书文件是 weiblog.fun_bungle.crt,请根据你下载的证书种类来修改。

3.修改完后按「Esc」,退出 insert 模式,检查一下填写的信息是否正确。请一定要确认信息!

conf文件修改20220323164949veocx0b.jpg

4.输入「:wq」,保存并退出。

重启 Nginx 服务

nginx -c /etc/nginx/nginx.conf # 如果重启不成功报错端口绑定失败,可以先查找占用端口的进程并强制杀死,之后重新启动。如下:#  netstat -tunlp | grep 80 #  kill -9 $pid

启动成功之后可以进入服务器提供商的⌈SSL 证书⌋-⌈监控状态⌋页面进行查询。在没有绑定之前,监控状态时异常,如果绑定成功之后,监控状态会变为⌈正常⌋。如下图所示:

SSL状态监控20220323155254p16zdj3.png

完成 Halo 博客的初始化
Halo 博客至此就完成了建站的全部工作,输入你自己的域名后就可以开始使用 Halo 博客了 😘

如果这篇文章对你的博客建站有帮助,请在下方评论留下你的站名;

如果建站过程中还是有不顺利的地方,也请在下方评论反馈。

祝顺!

桂ICP备2021009341