趁活动入手了个1核1G腾讯云CVM,良心价64个月360元。第一时间安装nginx+git+hexo,过程坑颇多,Mark一下。
- 服务器安装nginx和git
- 本地安装hexo并部署网站到服务器
服务器操作系统为 Centos7.4,开启SELinux、Firewalld,配置SSH禁止密码登录、root登录并修改了默认22端口。(参见:《新购VPS SSH安全措施备忘》)
第一步 安装nginx
=== 安装nginx的rpm ===
[root@localhost ~]# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
=== yum安装nginx ===
[root@localhost ~]# yum install -y nginx
=== 运行nginx ===
[root@localhost ~]# systemctl start nginx.service
=== 开机启动 ===
[root@localhost ~]# systemctl enable nginx.service
=== 配置防火墙 ===
[root@localhost ~]# firewall-cmd --add-service=http --permanent
=== 刷新防火墙配置 ===
[root@localhost ~]# firewall-cmd --reload
此时,通过浏览器访问服务器IP,应该会出现nginx欢迎信息。
默认网站根目录为/usr/share/nginx/html
,
默认网站的配置文件是/etc/nginx/conf.d/default.conf
,
如果打算直接用默认网站做HEXO部署的目录,可以跳过第二步。
第二步 配置nginx网站
自定义一个端口为8008,根目录为/var/www/hexo
的网站:
- 确认SELinux和Firewalld已经开放了8008端口
=== 查看SELinux的http端口 ===
[root@localhost ~]# semanage port -l | grep http
...
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
...
=== 如果希望SElinux开放其他http端口,如8007 ===
[root@localhost ~]# semanage port -a -t http_port_t -p tcp 8007
=== 查看Firewalld端口或服务是否有http ===
[root@localhost ~]# firewall-cmd --list-all
...
services: ssh dhcpv6-client http
...
=== 将8008端口加入防火墙http服务 ===
[root@localhost ~]# firewall-cmd --service=http --add-port=8008/tcp --permanent
=== 刷新防火墙配置 ===
[root@localhost ~]# firewall-cmd --reload
=== 列出firewall http服务的端口
[root@localhost ~]# firewall-cmd --info-service=http
...
http
ports: 80/tcp 8008/tcp
...
- 新建目录,确认目录权限。
=== 新建目录和测试文件 ===
[root@localhost ~]# mkdir /var/www
[root@localhost ~]# cd /var/www
[root@localhost www]# mkdir hexo
[root@localhost www]# cd hexo
[root@localhost hexo]# nano index.html
...
hello world!
...
=== 查看文件权限设置 ===
[root@localhost hexo]# ls -al
...
drwxr-xr-x. 7 root root 4096 Mar 8 16:04 .
drwxr-xr-x. 3 root root 4096 Mar 8 15:15 ..
-rw-r--r--. 1 root root 6557 Mar 8 16:04 index.html
...
# .表示当前文件夹hexo
# drwxr-xr-x 表示文件夹权限是 755
# -rw-r--r--表示文件权限是644
# 如非755 和 644 则需要修改一下
=== 更改文件权限 ===
[root@localhost hexo]# chmod -R 755 /var/www/hexo
[root@localhost hexo]# chmod -R 644 /var/www/hexo/index.html
- 配置文件
=== 新建网站配置hexo.conf ===
[root@localhost ~]# nano /etc/nginx/conf.d/hexo.conf
...
server {
listen 8008;
server_name localhost;
location / {
root /var/www/hexo;
index index.html index.htm;
}
}
...
=== 重启nginx ===
[root@localhost ~]# nginx -s reload
此时,浏览器通过8008端口器访问服务器,应该会403错误。
- 修改SELinux访问限制
=== 将SELinux设置为Permissive宽容模式(可访问,提出警告) ===
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
如此时,浏览器通过8008端口器访问服务器,如出现Hello World!,证明确实是SELinux导致网站出现403错误,下面我们来解决一下。
=== 安装SELinux策略文档 ===
[root@localhost ~]# yum install selinux-policy-doc
=== 查看SELinux日志 ===
[root@localhost ~]# grep nginx /var/log/audit/audit.log | audit2allow -m nginx
==== 出现以下提示 ===
......
module nginx 1.0;
require {
type httpd_t;
type var_t;
class file { getattr open read };
}
#============= httpd_t ==============
#!!!! WARNING: 'var_t' is a base type.
#!!!! The file '/var/www/hexo/index.html' is mislabeled on your system.
#!!!! Fix with $ restorecon -R -v /var/www/hexo/index.html
allow httpd_t var_t:file { getattr open read };
......
==== 按提示操作 ===
# 提示需要开放 /var/www/hexo/index.html 的http_t读写权限
# 而我们选择开放/var/www/hexo 整个文件夹的 http_t读写权限
[root@localhost ~]# restorecon -R -v /var/www/hexo
=== 将SELinux设置回严格模式 ===
[root@localhost ~]# setenforce 1
[root@localhost ~]# getenforce
Enforcing
如此时,浏览器通过8008端口器访问服务器,如出现Hello World!则表示已解决SELinux的nginx权限问题。
第三步 安装git服务器
=== 安装git ===
[root@localhost ~]# yum install git
=== 创建git用户 ===
[root@localhost ~]# adduser git
=== 创建 ~/.ssh/文件夹和下面的authorized_keys文件 ===
[root@localhost ~]# cd /home/git/
[root@localhost ~]# mkdir .ssh
[root@localhost ~]# touch /home/git/.ssh/authorized_keys
=== 设置正确权限和所有权 ===
[root@localhost ~]# chmod 700 /home/git/.ssh
[root@localhost ~]# chmod 600 /home/git/.ssh/authorized_keys
[root@localhost ~]# chown -R git:git /home/git/.ssh
=== 将公钥黏贴至authorized_keys ===
[root@localhost ~]# nano /home/git/.ssh/authorized_keys
=== 测试是否能使用git用户免密登录 ===
# 如果不行,检查/etc/ssh/sshd_config文件,以下三项必须打开
1.RSAAuthentication yes
2.PubkeyAuthentication yes
3.AuthorizedKeysFile .ssh/authorized_keys
# 如果可以用git用户免密登录,禁用git用户的shell登录
[root@localhost ~]# nano /etc/passwd
# 找到git用户那行,把行尾的/bin/bash 改成 /usr/bin/git-shell
其他免密设置可以参考《新购VPS SSH安全措施备忘》第3点。
第四步 服务器建仓和配置git自动脚本
=== 建立git目录 ===
[root@localhost ~]# mkdir /home/git/repo
[root@localhost ~]# cd /home/git/repo
=== 初始化空版本库 ===
[root@localhost repo]# git init --bare hexo.git
=== 配置自动脚本 ===
[root@localhost repo]# cd hexo.git/hooks
[root@localhost hooks] nano post-receive
# post-receive 内容:
......
#!/bin/sh
git --work-tree=/var/www/hexo --git-dir=/home/git/repo/hexo.git checkout -f
......
# 注意,上面的/var/www/hexo 要换成你自己的部署目录,
# /home/git/repo/hexo.git 则是刚刚新建的空版本库目录,
# 整个命令是我们从本地push到/home/git/repo/hexo.git以后,自动部署到/var/www/hexo上
=== 为脚本添加执行权限 ===
[root@localhost hooks]# chmod +x post-receive
=== 改变hexo.git目录的拥有者为git用户: ===
[root@localhost hooks]# chown -R git:git /home/git/repo/hexo.git
=== 改变部署目录的拥有者为git用户: ===
[root@localhost hooks]# chown -R git:git /var/www/hexo
第五步 本地安装和配置HEXO
- 本地安装git
- 本地安装node.js
- 本地安装hexo
- 新建hexo网站(如在Windows,可以使用git-bash)
$ hexo init <folder>
$ cd <folder>
$ npm install
- 设置主机别名
为了让git push的时候可以使用私钥登录服务器,必须设置SSH主机别名。MAC/Linux 编辑~/.ssh/config
文件,Windows在<用户文件夹>/.ssh/config
中,内容都是一样的:
Host alias
Hostname <你的服务器IP>
User git
Port <你的服务器SSH端口>
IdentityFile ~/.ssh/<你的对应私钥文件>
- 配置部署选项
然后编辑hexo网站的配置文件_config.yaml
中的部署选项,repo一项,前面是上一步设的别名alias
,后面是服务器的git版本库。
deploy:
type: git
repo: alias:/home/git/repo/hexo.git
branch: master
- 部署网站
$ hexo g -d
此时,浏览器通过8008端口器访问服务器,出现Hexo网站默认主页。