# 前言
- 参考网上大神写的部署教程,虽然教程写的比较详细,但是还是遇到了不少问题,这里记录我的部署过程,还有部署过程中采到的一些坑
# 原理
在云服务器上创建一个 git 仓库,并且创建一个名叫 git
的 linux 账户,并为这个账户配置 SSH
在云服务器上安装并配置 Nginx,并指定博客的网站目录
在 git 仓库中创建一个 post-receive
钩子,这样我们在平时写完博客以后在本地执行 deploy
后, hexo
会帮我们将博客项目打包并推送到 git 仓库中,然后 post-receive
钩子将会被触发,自动将刚提交的内容拉取到 Nginx 网站目录中,实现自动更新的效果
当然你也可以将仓库地址配置为国内 Gitee 等仓库地址, deploy
后在服务器上 git pull
手动进行更新
# 环境
- Linux 云服务器:
CentOS-7.6.1810-x64
# 在客户端中安装 git
进入 git 官网 https://git-scm.com/downloads,下载并安装 git
# 创建 SSH 密钥
在桌面中右键,选择 Git Bash Here
| git config --global user.name "你要设置的名字" |
| git config --global user.email "你要设置的邮箱" |
| ssh-keygen -t rsa -C "你刚刚设置的邮箱" |
密码的部分话直接回车就行,之后会在 C:\Users\(你的用户名)\.ssh
下面生成两个文件 id_rsa
和 id_rsa.pub
# 在服务器中安装 git
# 安装 git
中途出现 Is this ok [y/d/N]
,输入 y
回车,最后出现 Complete!
表示安装成功了
# 创建 git 用户
# 为 git 用户分权权限
- 我个人不是很喜欢用
vim
命令,可以使用 WinScp 等工具将需要修改的文件下载到本地,修改完成后再重新上传到服务器 - 修改
sudoers
文件,在大约第 100 行处找到 root ALL=(ALL) ALL
, 然后在下面再加一行 git ALL=(ALL) ALL
| root ALL=(ALL) ALL |
| git ALL=(ALL) ALL |
- 修改完成后将
sudoers
文件的读写权限改回来
# 设置 git 账户密码
- 这个密码是推送 git 代码时所使用的密码,建议不要将密码设置得太简单,避免服务器被盗用的风险
- 注意输入密码是不显示 ** 的,输入完成后结果如下
| [root@HKc114514 ~] |
| Changing password for user git. |
| New password: |
| Retype new password: |
| passwd: all authentication tokens updated successfully. |
# 给 git 账户添加 ssh 密钥
- 在 git 用户目录
/home/git
下面创建一个 .ssh
文件夹,注意:是目录 /home/git
下面,不是 /root
下面
- 创建
authorized_keys
文件并设置权限
| touch /home/git/.ssh/authorized_keys |
| chmod 600 /home/git/.ssh/authorzied_keys |
| chmod 700 /home/git/.ssh |
- 使用
vim
命令或者 WinScp
,将 C:\Users\(你的用户名)\.ssh
下面 id_rsa.pub
的内容复制到 authorized_keys
文件内保存 - 在电脑本地桌面,右键
Git Bash Here
,执行命令,测试是否能免密登录 git
- 其中 SERVER 填写自己的云主机 ip,执行输入 yes 后登录成功表示配置成功了,登录效果如下
| There were 48 failed login attempts since the last successful login. |
| [git@HKc114514 ~]$ |
# 创建网站根目录
- 在 srv 目录下创建
hexo
作为 Git 仓库目录,后面使用 nginx 加载该目录
| chown -R git:git /srv/hexo |
| chmod -R 755 /srv/hexo |
# 创建 git 仓库
- 在 srv 目录下创建
repo
作为 Git 仓库目录
| chown -R git:git /srv/repo |
| chmod -R 755 /srv/repo |
| cd /srv/repo |
| git init --bare hexo.git |
| [root@HKc114514 repo] |
| Initialized empty Git repository in /srv/repo/hexo.git/ |
# 创建钩子
- 在
/srv/repo/hexo.git
下,有一个自动生成的 hooks
文件夹。我们需要在里边新建一个新的钩子文件 post-receive
,然后将下面的代码复制到里面保存
| #!/bin/bash |
| git --work-tree=/srv/hexo --git-dir=/srv/repo/hexo.git checkout -f |
- 注意:
post-receive
文件是不带 .sample
后缀的,否则这个钩子会失效 - 设置执行权限
| chown -R git:git /srv/repo/hexo.git/hooks/post-receive |
| chmod +x /srv/repo/hexo.git/hooks/post-receive |
# 配置 Nginx
| yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel |
- 下载并解压安装包,可以到 nginx 官网上找最新稳定版,我这里用的是
nginx-1.22.1
- 如果遇到
-bash: wget: command not found
的情况,可以使用 yum -y install wget
安装一下 wget
| |
| cd /usr/local |
| mkdir nginx |
| cd nginx |
| |
| wget http://nginx.org/download/nginx-1.22.1.tar.gz |
| tar -xvf nginx-1.22.1.tar.gz |
| |
| cd /usr/local/nginx |
| |
| cd nginx-1.22.1 |
| |
| ./configure --with-http_stub_status_module --with-http_ssl_module |
| |
| make |
| |
| make install |
- 修改 nginx 配置文件
/usr/local/nginx/conf/nginx.conf
| |
| worker_processes 1; |
| |
| events { |
| worker_connections 1024; |
| } |
| |
| http { |
| include mime.types; |
| default_type application/octet-stream; |
| |
| sendfile on; |
| |
| keepalive_timeout 65; |
| |
| server { |
| listen 80; |
| |
| server_name gardencavy.site; |
| |
| |
| |
| return 301 https://$host$request_uri; |
| |
| rewrite ^(.*) https://$server_name$1 permanent; |
| |
| location / { |
| |
| root /srv/hexo; |
| index index.html index.htm; |
| } |
| |
| error_page 500 502 503 504 /50x.html; |
| location = /50x.html { |
| root html; |
| } |
| } |
| |
| server { |
| listen 443 ssl; |
| server_name gardencavy.site; |
| |
| |
| ssl_certificate /usr/cert/www_xxx_com.pem; |
| ssl_certificate_key /usr/cert/www_xxx_com.key; |
| |
| ssl_session_cache shared:SSL:1m; |
| ssl_session_timeout 5m; |
| |
| ssl_ciphers HIGH:!aNULL:!MD5; |
| ssl_prefer_server_ciphers on; |
| |
| location / { |
| |
| root /srv/hexo; |
| index index.html index.htm; |
| } |
| } |
| } |
| /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf |
| /usr/local/nginx/sbin/nginx -s reload |
| |
| ps -ef | grep nginx |
| |
| /usr/local/nginx/sbin/nginx -s quit |
| |
| /usr/local/nginx/sbin/nginx -s reload |
# 部署博客
- 打开 vscode 中的博客项目,修改
_config.yml
文件中的 deploy
配置
| |
| |
| deploy: |
| type: git |
| repo: git@你的服务器ip:/srv/repo/hexo.git |
| branch: master |
- 在 vscode 中安装
hexo-deployer-git
插件
| npm install hexo-deployer-git --save |
- 在 vscode 中执行部署命令,遇到密码时输入服务器上设置的 git 账户密码
- 在浏览器中输入服务器 ip 或者域名,查看一下是否部署成功
# 禁止 git 用户登陆
- 因为 git 账户只用于推送代码,可以禁止账户登录服务器,避免服务器被盗
- 修改 /etc/passwd
- 将最后一行:
| git:x:1000:1000::/home/git:/bin/bash |
| git:x:1000:1000::/home/git:/usr/bin/git-shell |
# 参考网址
- https://hjxlog.com/posts/20191130a1.html
- https://zhuanlan.zhihu.com/p/494698160
- https://blog.csdn.net/t8116189520/article/details/81909574