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

缘起

建立一个个人博客的想法已经很久了,作为一个 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源

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

安装docker

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

启动

  1. systemctl enable docker --now

配置加速

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

  1. sudo mkdir -p /etc/docker
  2. sudo tee /etc/docker/daemon.json <<-'EOF'
  3. {
  4. "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
  5. "exec-opts": ["native.cgroupdriver=systemd"],
  6. "log-driver": "json-file",
  7. "log-opts": {
  8. "max-size": "100m"
  9. },
  10. "storage-driver": "overlay2"
  11. }
  12. EOF
  13. sudo systemctl daemon-reload
  14. sudo systemctl restart docker

测试:

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

纯小白向halo博客建站指南 - 图1

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

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

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

创建容器

  1. 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. 点击你的服务器,进入服务器详情页面,点击防火墙

纯小白向halo博客建站指南 - 图2

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

纯小白向halo博客建站指南 - 图3

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


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

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

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

来源:Halo 博客建站记录 - Mengmeng [&#39;'](https://catchersun.cn/archives/halo%E5%8D%9A%E5%AE%A2%E5%BB%BA%E7%AB%99%E8%AE%B0%E5%BD%95#toc-head-7) s Blog (catchersun.cn)

申请 SSL 证书

  1. 在云服务商页面搜索「SSL 证书」,然后按照网页提示操作即可。
  2. 在 SSL 证书页面选择下载证书,下载时类型请选择 Nginx 一栏。
  3. 请记住证书下载后保存的路径,后续我们需要使用 WinSCP 将证书上传。

安装 Nginx

不要自行改动任何代码!

  1. 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文件
  1. [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
  1. yum install nginxnginx -v # 查看版本
  1. cd /etc/nginx

Tips:

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

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

  1. 使用 WinSCP 登录你自己的服务器,注意用户名与密码要匹配
  2. 进入服务器根目录,也就是路径中只有一个「/」
  3. 找到 etc 文件夹,进入后再找到 nginx 文件夹,确保路径为 /etc/nginx
  4. 在 WinSCP 中进入本地文件夹,找到你下载的 ssl 证书文件,全部选定(Ctrl+A)
  5. 点击上传,在弹出的对话框中按「确定」

下面是关键步骤

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

    1. vi nginx.conf
  1. 按「i」键,进入 insert 模式,按如下代码修改,记得将域名和证书文件名替换成你自己的。
  1. user nginx;
  2. worker_processes auto;
  3. error_log /var/log/nginx/error.log notice;
  4. pid /var/run/nginx.pid;
  5. events {
  6. worker_connections 1024;
  7. }
  8. http {
  9. include /etc/nginx/mime.types;
  10. default_type application/octet-stream;
  11. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  12. '$status $body_bytes_sent "$http_referer" '
  13. '"$http_user_agent" "$http_x_forwarded_for"';
  14. access_log /var/log/nginx/access.log main;
  15. sendfile on;
  16. #tcp_nopush on;
  17. keepalive_timeout 65;
  18. #gzip on;
  19. include /etc/nginx/conf.d/*.conf;
  20. server {
  21. listen 80;
  22. server_name catchersun.cn www.catchersun.cn;
  23. return 301 https://$host$request_uri;
  24. }
  25. server{
  26. listen 443 ssl;
  27. server_name catchersun.cn www.catchersun.cn;
  28. ssl_certificate "/etc/nginx/catchersun.cn.pem";
  29. ssl_certificate_key "/etc/nginx/catchersun.cn.key";
  30. ssl_session_cache shared:SSL:1m;
  31. ssl_session_timeout 10m;
  32. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  33. #表示使用的加密套件的类型。
  34. ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。
  35. ssl_prefer_server_ciphers on;
  36. location / {
  37. proxy_pass http://127.0.0.1:8090;
  38. proxy_http_version 1.1;
  39. proxy_cache_bypass $http_upgrade;
  40. proxy_set_header Upgrade $http_upgrade;
  41. proxy_set_header Connection "upgrade";
  42. proxy_set_header Host $host;
  43. proxy_set_header X-Real-IP $remote_addr;
  44. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  45. proxy_set_header X-Forwarded-Proto $scheme;
  46. proxy_set_header X-Forwarded-Host $host;
  47. proxy_set_header X-Forwarded-Port $server_port;
  48. }
  49. }
  50. }

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

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

只改动红线处!不要改动其他代码!

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

重启 Nginx 服务

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

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

监控状态显示访问正常说明配置成功

完成 Halo 博客的初始化

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

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

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

祝顺!