将hexo部署在服务器上
环境
云服务器配置
centos 7.6 (开放80端口)
连接到云服务器,我使用的是Xshell。
安装和配置git
安装git
git --version // 如无,则安装
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
yum install -y git
生成密钥和公钥
git config --global user.name "yourname"
git config --global user.email youremail@example.com
ssh-keygen -t rsa -C "youremail@example.com"
git config --global core.autocrlf false // 禁用自动转换
#上述命名完成后得到ssh认证在C:\users\yourname\.ssh中,这个后面将其复制到服务器上.ssh/authorized_keys
在云服务器上创建一个专门运行git的用户
useradd git #添加用户git,名字随意修改,我这里为了好记。
passwd git #设置密码
创建git仓库目录
su root
cd/home/git
git init --bare blog.git #创建一个裸露的仓库
配置git hooks
vim /home/git/blog.git/hooks/post-receive
添加
#!/bin/sh
git --work-tree=/var/www/hexo --git-dir=/home/git/blog.git checkout -f
实际就是从blog.git
仓库覆盖/var/www/hexo
目录,这样达到更新的目的。(这里还没有创建/var/www/hexo/
)
设置权限:
chmod +x /home/git/blog.git/hooks/post-receive
chown git:git -R blog.git#将文件夹blog.git的权限修改,用户组和拥有者设置为git
创建静态文件目录以及修改其权限,同时将git仓库连接到静态文件目录下
-
创建静态文件目录:
mkdir -p /var/www/hexo/
-
赋予用户权限:
chown -R git:git /var/www/hexo
-
配置文件权限:
chmod -R 755 /var/www/hexo
这样仓库更新就会同步到hexo目录下
禁止git用户的shell登录权限配置
-
首先确认git-shell 已存在于
/etc/shells
文件中-
通过
which git-shell
判断是否安装了git-shell
。一般都安装了,因为上述我们使用了yum install -y git
,安装了会显示安装目录:/usr/bin/git-shell
;如果没有则使用命令yum install -y git
安装。 -
判断shells文件是否存在,使用命令
cat /etc/shells
,如果没有/usr/bin/git-shell
,则使用vim添加,在最后一行添加git-shell路径。这样我显示的内容如下:
/bin/sh /bin/bash /usr/bin/sh /usr/bin/bash /bin/tcsh /bin/csh /usr/bin/git-shell # 这个是你需要添加的git-shell
修改
/etc/passwd
的用户git的权限将原来的
git:x:1002:1002::/home/git:/bin/bash
修改为git:x:1002:1002::/home/git:/bin/bash
普通用户都是1000以后,所以你的可能是别的数字,不要紧。
-
测试git是否部署成功
在你的git客户端执行git clone git@服务器ip:/home/git/blog.git
,如果clone成功就部署成功。(注这个git是你上述添加的用户,如果不是git,请修改,后面的路径是你的仓库地址
)
结果如图:
安装和配置nginx
安装nginx
yum install -y nginx
检查是是否安装成功
nginx -v
启动nginx
nginx
配置nginx
vim /etc/nginx/nginx.conf#不同版本的nginx或系统配置文件不同
修改域名或ip 以及主目录的路径
如图:
通过命令nginx -t
来检查一下配置文件是否修改正确。结果如图:
最后重启服务,让配置修改生效
systemctl restart nginx
配置本地环境
- 安装nodejs,直接在官网下载,直接下一步即可。
- 安装git,直接下一步。(
注:记得把目录改成其他盘
)
本地配置hexo
-
创建一个目录(你存放博客的markdown文件)
-
打开git bash
-
运行以下命令
npm install hexo-cli -g hexo init blog #blog是博客文件夹,你可以自己指定 cd blog npm install 补全依赖环境 npm install hexo-deployer-git --save #安装插件 hexo server
在云服务器上创建证书
- 切换用户的目录:
cd /home/git
- 创建.shh目录:
mkdir .ssh && chmod 700 .ssh
- 然后在云服务创建
authorized_keys
公钥保存文件:touch .ssh/authorized_keys && chmod 600
- 将.ssh目录以及文件的所属组和所有者给git:
chown -R git:git .ssh
- 将密钥复制到
.ssh/authorized_keys
(注:一行添加一个
)
配置_config.yml
在目录下找到
_config.yml
,编辑deploy属性:使用hexo
hexo new "test" # 创建test.md文件
用支持markdown的软件书写
test.md
文件使用命令上传到服务器:
hexo clean##清除缓存 ,网页正常情况下可以忽略此条命令,执行该指令后,会删掉站点根目录下的public文件夹 hexo g #生成静态网页 (执行 $ hexo g后会在站点根目录下生成public文件夹, hexo会将"/blog/source/" 下面的.md后缀的文件编译为.html后缀的文件,存放在"/blog/public/ " 路径下) hexo d# #将本地数据部署到远端服务器
- 切换用户的目录:
为了安全起见
-
禁止root远程登录
vim /etc/ssh/sshd_config 在文件中找到下面一行文字: #PermitRootLogin yes 去掉该行前面的#号,使其成为下面这样: PermitRootLogin no 接下来,在shell中输入以下命令来重启ssh服务 # systemctl restart sshd
-
添加你想要远程登录的用户
打开文件/etc/ssh/sshd_config,然后在文件的末尾加上这样一行文字,其中user1、user2即为允许通过ssh登录的用户。
AllowUsers user1 user2
-
赋予一个用户能够使用sudo
在
/etc/sudoers
中找到root ALL=(ALL) ALL
在下面添加一行:新用户名 ALL=(ALL) ALL
(如果你只需要一个用户,就不要操作第二步)
安装ssl证书
-
申请证书
在tencent.com下载ssl证书,用的是nginx,则下载的是
cloud.tencent.com_nginx
,其中包括:-
cloud.tencent.com_bundle.crt
证书文件 -
cloud.tencent.com_bundle.pem
证书文件(可忽略该文件) -
cloud.tencent.com.key
私钥文件 -
cloud.tencent.com.csr
CSR 文件
注:CSR 文件是申请证书时由您上传或系统在线生成的,提供给 CA 机构。安装时可忽略该文件。
-
-
安装证书(通过winscp或其他软件)
将已获取到的
cloud.tencent.com_bundle.crt
证书文件和cloud.tencent.com.key
私钥文件从本地目录拷贝到 Nginx 服务器的/etc/nginx/ssl
目录(此处为 Nginx 默认安装目录,请根据实际情况操作,ssl是我自己创建的,你可以随意,只要知道它的具体位置就行)下。 -
编辑Nginx根目录下的
nginx.conf
文件server { #SSL 默认访问端口号为 443 listen 443 ssl; #请填写绑定证书的域名 server_name cloud.tencent.com; #请填写证书文件的相对路径或绝对路径 ssl_certificate cloud.tencent.com_bundle.crt; #请填写私钥文件的相对路径或绝对路径 ssl_certificate_key cloud.tencent.com.key; ssl_session_timeout 5m; #请按照以下协议配置 ssl_protocols TLSv1.2 TLSv1.3; #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。 #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。 root html; index index.html index.htm; } }
如果需要http自动跳转https
在
nginx.conf
编辑为:server { listen 80; #填写证书绑定的域名 server_name <yourdomain>; #将所有HTTP请求通过rewrite指令重定向到HTTPS。 rewrite ^(.*)$ https://$host$1; location / { index index.html index.htm; } }