利用云服务器建立个人博客网站

背景

所谓“云服务器”,就是运行在云上的一个虚拟机,可供用户远程连接后像一台普通 PC 那样去使用。有意思的是,之前不去了解还不知道:其实就是这么个玩意儿,现国内几大厂商提供这类产品时,起的名字都不一样:华为云的叫 Elastic Cloud Server(ECS) ;腾讯云的称 Cloud Virtual Machine(CVM)Lighthouse ;而阿里云则是 Elastic Compute Service(也是 ECS) 。看着唬人,实际上都一回事。

一开始我的个人博客是借助 Gitee Page 服务搭建的。后来使用该服务需要提供的个人信息也越来越多,包括身份证照片和本人手持身份证照片这种敏感信息。我心想,这要求跟自己弄个云服务器建站备案也没区别了。与其通过第三方将这些个人信息交给管理部门,还不如直接由我自己来交,减少个人信息的暴露面。于是就将自己的个人博客迁移到了云服务器上。要做的事情主要包括:

  1. 购买带公网 IP 的云服务器(个人博客对性能要求很低,买最便宜的就行)
  2. 做一些配置(见下文所述)
  3. (可选)购买域名,绑定公网 IP,并按要求完成工信部备案+公安备案1

配置过程

  1. 登录自己的云服务器(通过 SSH 公网 IP,或其他由云厂商提供的手段)

    1ssh root@<CLOUD_SERVER_PUBLIC_IP>
    
  2. 创建名为 git 的用户

    1useradd -m git
    
  3. 在该用户的家目录下创建一个裸仓(bare repo)hugo.git,和一个(准备用来放 working tree 的)目录:~/hugo/

    1su git
    2cd  # not missing anything
    3git init --bare hugo.git
    4mkdir hugo
    
  4. 配置钩子脚本

    1cat << -EOF > hugo.git/hooks/post-receive
    2	git --work-tree=/home/git/hugo --git-dir=/home/git/hugo.git checkout -f <BRANCH>
    3EOF
    4chmod +x hugo.git/hooks/post-receive
    
  5. 安装并配置 Nginx

    1apt install nginx
    

    随后编辑 /etc/nginx/sites-available/default 文件,将其中的 root/var/www/html 改为 working tree 目录 /home/git/hugo。最后重启服务:

    1service nginx restart
    
  6. 配置 SSH 公钥

    先拷贝本地的 SSH 公钥

    1cat ~/.ssh/id_rsa.pub
    

    然后将其拷贝至云服务器上 git 用户的 .ssh/authorized_keys 文件中:

    1# do as user 'git'
    2mkdir ~/.ssh
    3touch ~/.ssh/authorized_keys
    4chmod 600 ~/.ssh/authorized_keys
    
  7. 将本地(经 hugo)生成的博客网站推送至云服务器

    1cd <HUGO_SITE_DIR>
    2git add . && git commit -m "XXX"
    3git remote add my-site git@<CLOUD_SERVER_PUBLIC_IP>:/home/git/hugo.git
    4git push my-site <BRANCH>
    

完成!最后用浏览器直接输入公网 IP 就可以访问到网站啦~当然,若购买了域名,绑定 IP 并完成备案之后,通过域名访问就更方便了。

参考资料


  1. 注意:若想通过域名访问则需要备案,只用公网 IP 的话无所谓。 ↩︎


Makefile 实例参考
关于一个神奇的 Linux 目录权限问题的探究