题记

终于还是花了100RMB钱买了一年的阿里云服务器,现在把github pages的网站部署到服务器上。由于踩的坑有点多,所以全篇下来可能有点啰嗦。

准备工作

部署博客到阿里云服务器

Step 1. 配置nginx

初次阿里云服务器需要在控制台重置密码,之后重启。

登陆的时候使用root用户名。

  • 安装nginxsudo apt-get install nginx我安装的版本是nginx 1.14.0 (Ubuntu)。

  • 开启nginxservice nginx start p.s. 停止命令:service nginx stop ,重启命令nginx -s reload

  • 在阿里云安全组配置中开启HTTP 80端口

ref. 阿里云服务器怎么开启或关闭8080端口

在开启HTTP服务之后,在浏览器中输入你的公网ip就能看见Welcome to nginx的网页页面了。

  • 创建一个网站目录,如/home/user/www/blog/,并在里面新建一个index.html文件

内容随意,只是用来测试而已,我就直接在里面写了个HI。 注意:index.html文件需要放在具有可执行权限的文件夹中,不要放在权限如drwx------的文件夹里面,我自己是放在权限为drwxr-xr-x的目录里的。

  • 查看nginx的配置文件路径 nginx -t

  • 编辑nginx的配置文件

        location / {
            root   你的index.html所在的文件路径;
        }
    

这一步我查阅的方法绝大部分是在nginx的配置文件找到location字段,将root后面的项改成你的index.html所在的文件路径即可。但是我发现我自己版本的nginx的/etc/nginx/nginx.conf中没有这个字段,所以我是将 /etc/nginx/sites-enabled/default文件,将预设的root /var/www/html;修改成root 你的index.html所在的文件路径;

很多发行版为了方便管理,在nginx.conf底部加了一条include sites-enabled/*.conf, 但不会 include sites-available。

  • 重启nginx服务

nginx -s reload

重启之后在浏览器访问你的公网IP,就能显示出index.html所展示的内容了。如果此时网页页面显示403 Forbidden的错误,说明index.html所在的文件夹缺少权限,此时应该换一个文件夹或添加权限。

Step 2. 配置服务器git仓库

​ 可参考服务器上的 Git - 配置服务器

命令行切换到服务器网页根目录

创建用户:adduser git

   root@xxx:/xxx/xxx# adduser git
   Adding user `git' ...
   Adding new group `git' (1000) ...
   Adding new user `git' (1000) with group `git' ...
   Creating home directory `/home/git' ...
   Copying files from `/etc/skel' ...
   Enter new UNIX password: 
   Retype new UNIX password: 

好像有的时候创建用户不会跳出配置密码,此时可以用passwd git配置密码。

配置公钥

  • 切换到git用户:su git ,切换用户之后会自动切换到该用户的根目录中。

  • 创建.ssh目录:mkdir .ssh && chmod 700 .ssh

  • 然后在云服务创建authorized_keys公钥保存文件:touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

  • 将公钥添加到authorized_keys文件中。

如果不知道公钥是什么的话可以参见https://gitee.com/help/articles/4181#article-header0 来配置公钥。Windows系统生成的公钥会存放在C:\Users\xxx\.ssh中。

公钥看起来是这样的:

$ cat /xxx/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L

创建git仓库目录

mkdir 裸仓库路径 你的仓库路径如/home/git/repo

cd 裸仓库路径

git init --bare blog.git

裸仓库git init 初使化的仓库不太一样,裸仓库其实相当于通过克隆来的仓库里的.git文件夹,整个裸仓库中只有git索引(index),不包含工作目录。

配置git hooks

关于git hooks我也写了一篇博客,不过只是非常简单的描述,我对git的学习并不深入。

图片来源:https://aotu.io/notes/2017/04/10/githooks/index.html
图片来源:https://aotu.io/notes/2017/04/10/githooks/index.html

  • cd 你的仓库路径/blog.git/hooks`

  • vim post-receive

参考了一些资料,我最后写的内容是以下 :

   #!/bin/sh
   set -e
   DIR_ONE=/home/user/www/blog/  #此目录为服务器页面展示目录 
   cd $DIR_ONE
   
   git --work-tree=./ --git-dir=裸仓库路径/blog.git checkout -f
  • chmod 771 post-receive 用于赋予文件可执行权限

Step 3. 修改用户权限

如跳过本步骤,直接进行Step 4,可能会报remote: error: could not lock config file /home/user/www/blog/.git/config: Permission denied的错误。

此时我们只需要执行命令:

chown git 服务器页面展示目录

chgrp git 服务器页面展示目录

Step 4. 配置本地git仓库

切换到本地仓库,如果是Hugo搭建的博客,就是public文件夹。

git remote set-url --add origin xxx.git

其中xxx.gitusrname@服务器ip地址:/裸仓库路径/blog.git

此时输入git remote -v即可查看是否正确添加。

输入错了的时候的删除命令: git remote set-url --delete origin xxx.git

接着git push

你的服务器在服务器页面展示目录就会出现你push的代码,此时再用浏览器访问,你的网站就出来了!!

参考资料

不重要的知识

  • Git Hooks中有个post-update的hook,是post-receive的阉割版本

The ‘post-update’ hook can tell what are the heads that were pushed, but it does not know what their original and updated values are, so it is a poor place to do log old..new. The <post-receive> hook does get both original and updated values of the refs. You might consider it instead if you need them.

—— https://stackoverflow.com/questions/9653165/whats-the-difference-between-post-receive-and-post-update

  • git init多次是安全的

Running git init in an existing repository is safe. It will not overwrite things that are already there. The primary reason for rerunning git init is to pick up newly added templates. ——http://www.voidcn.com/article/p-cvrvucje-bsk.html