部署博客到阿里云服务器
题记
终于还是花了100RMB钱买了一年的阿里云服务器,现在把github pages的网站部署到服务器上。由于踩的坑有点多,所以全篇下来可能有点啰嗦。
准备工作
- Hugo博客(参见 Hugo搭建博客视频教程)
- 云服务器 (我的系统是Ubuntu)
- 域名
部署博客到阿里云服务器
Step 1. 配置nginx
初次阿里云服务器需要在控制台重置密码,之后重启。
登陆的时候使用root用户名。
-
安装nginx
sudo apt-get install nginx
我安装的版本是nginx 1.14.0 (Ubuntu)。 -
开启nginx
service 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的配置文件
1 2 3
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
|
|
好像有的时候创建用户不会跳出配置密码,此时可以用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
中。
公钥看起来是这样的:
|
|
创建git仓库目录
mkdir 裸仓库路径
你的仓库路径如/home/git/repo
cd 裸仓库路径
git init --bare blog.git
裸仓库与 git init
初使化的仓库不太一样,裸仓库其实相当于通过克隆来的仓库里的.git文件夹,整个裸仓库中只有git索引(index),不包含工作目录。
配置git hooks
关于git hooks我也写了一篇博客,不过只是非常简单的描述,我对git的学习并不深入。
-
cd 你的仓库路径
/blog.git/hooks` -
vim post-receive
参考了一些资料,我最后写的内容是以下 :
1 2 3 4 5 6
#!/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.git
为usrname@服务器ip地址:/裸仓库路径/blog.git
此时输入git remote -v
即可查看是否正确添加。
输入错了的时候的删除命令: git remote set-url --delete origin xxx.git
接着git push
你的服务器在服务器页面展示目录就会出现你push的代码,此时再用浏览器访问,你的网站就出来了!!
参考资料
-
linux目录权限中,r(浏览目录)和x(进入目录)的区别 知乎回答
-
HEXO 部署到云服务器详细指南 HEXO 部署到云服务器详细指南
-
如何使用阿里云+Hexo搭建个人静态博客 知乎孔晨皓的回答
-
用 Git 钩子进行简单自动部署 图文讲解
-
Git Hooks实现代码自动部署 姑苏流白的博客
-
Hexo博客同时部署到GitHub Page和个人服务器 Leeyuxun’s blog
不重要的知识
-
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. -
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