背景
所谓“云服务器”,就是运行在云上的一个虚拟机,可供用户远程连接后像一台普通 PC 那样去使用。有意思的是,之前不去了解还不知道:其实就是这么个玩意儿,现国内几大厂商提供这类产品时,起的名字都不一样:华为云的叫 Elastic Cloud Server(ECS) ;腾讯云的称 Cloud Virtual Machine(CVM) 或 Lighthouse ;而阿里云则是 Elastic Compute Service(也是 ECS) 。看着唬人,实际上都一回事。
一开始我的个人博客是借助 Gitee Page 服务搭建的。后来使用该服务需要提供的个人信息也越来越多,包括身份证照片和本人手持身份证照片这种敏感信息。我心想,这要求跟自己弄个云服务器建站备案也没区别了。与其通过第三方将这些个人信息交给管理部门,还不如直接由我自己来交,减少个人信息的暴露面。于是就将自己的个人博客迁移到了云服务器上。要做的事情主要包括:
- 购买带公网 IP 的云服务器(个人博客对性能要求很低,买最便宜的就行)
- 做一些配置(见下文所述)
- (可选)购买域名,绑定公网 IP,并按要求完成工信部备案+公安备案1
配置过程
-
登录自己的云服务器(通过 SSH 公网 IP,或其他由云厂商提供的手段)
1ssh root@<CLOUD_SERVER_PUBLIC_IP>
-
创建名为 git 的用户
1useradd -m git
-
在该用户的家目录下创建一个裸仓(bare repo):
hugo.git
,和一个(准备用来放 working tree 的)目录:~/hugo/
1su git 2cd # not missing anything 3git init --bare hugo.git 4mkdir hugo
-
配置钩子脚本
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
-
安装并配置 Nginx
1apt install nginx
随后编辑
/etc/nginx/sites-available/default
文件,将其中的root
从/var/www/html
改为 working tree 目录/home/git/hugo
。最后重启服务:1service nginx restart
-
配置 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
-
将本地(经 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 并完成备案之后,通过域名访问就更方便了。
参考资料
- tiiaan 的 CSDN 博客:使用 Hugo 和阿里云ECS搭建个人站
- Git 文档:git-worktree
-
注意:若想通过域名访问则需要备案,只用公网 IP 的话无所谓。 ↩︎