- 本文提供两种部署方式 SFTP、Rsync ,但其实均是通过 SSH 方式进行连接及部署。
- 目的: 将一份 blog 文件推送到两台 web 服务器
SFTP 方式部署
以下基于 sftp 实现双线部署 ( 基于 ssh 实现 )
缺点: 速度慢,会卡住导致超时。( 不推荐 )
服务器免密配置
以下配置均在同一台机器上操作
生成公私钥
ssh-keygen -t rsa -C "备注"
- 如下
[root@nes_dev ~]# ssh-keygen -t rsa -C "hexo_deploy" Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/hexo_deploy >>> 输出私钥为 /root/.ssh/hexo_deploy 输出公钥为 /root/.ssh/hexo_deploy.pub
创建 ssh 账号
groupadd hexo useradd -g hexo hexo
创建 authorized_keys 文件
mkdir /home/hexo/.ssh cat ~/.ssh/hexo_deploy.pub > /home/hexo/.ssh/authorized_keys # 赋权 chown -R hexo.hexo /home/hexo/.ssh chmod 700 /home/hexo/.ssh chmod 600 /home/hexo/.ssh/authorized_keys
第二台服务器同样操作第二、三步,最后只需复制成品公钥内容即可。
博客部署配置
将刚才服务器生成的私钥复制到本地
/data/keys/.ssh/hexo_deploy
下进入博客根目录,安装部署插件
cd /usr/local/nes_hexo_blog npm install hexo-deployer-sftp --save
修改博客部署配置
vim _config.yml
配置模板
deploy: type: sftp host: <host> # 目标主机IP,或域名 port: [port] # 目标主机的SSH端口 user: <user> # SSH 用户 pass: <pass> # leave blank for paswordless connections privateKey: [path/to/privateKey] # Optional passphrase: [passphrase] # Optional agent: [path/to/agent/socket] # Optional, defaults to $SSH_AUTH_SOCK remotePath: [remotePath] # Default is `/`,目标服务器部署路径
例如:
deploy: # 双线部署,type一定要加横线 - type: sftp host: hexo.nestealin.com port: 12345 user: hexo privateKey: /data/keys/.ssh/hexo_deploy remotePath: /data/nes_hexo_blog - type: sftp host: 172.17.20.3 port: 23456 user: hexo privateKey: /data/keys/.ssh/hexo_deploy remotePath: /data/nes_hexo_blog
- 此时,在执行
hexo generate
以及hexo deploy
的时候就可以实现双线部署推送了。
Rsync 方式部署
以下基于 Rsync 实现双线部署 ( 实际还是基于 ssh 实现 )
优点: 解决 sftp 传输速度慢的问题。
继续使用上述创建的免密公私钥。
博客部署配置
将刚才服务器生成的私钥复制到本地
/data/keys/.ssh/hexo_deploy
下进入博客根目录,安装部署插件
cd /usr/local/nes_hexo_blog npm install hexo-deployer-rsync --save
修改博客部署配置
vim _config.yml
配置模板
deploy: type: rsync host: <host> # 目标主机IP或域名 user: <user> # SSH 用户名 root: <root> # 目标主机存放目录,需要给予上述用户写入权限 port: [port] # SSH端口 delete: [true|false] # 部署时是否全量覆盖远端目录 verbose: [true|false] # 部署时是否输出详细内容 ignore_errors: [true|false]
例如:
deploy: # 双线部署,type一定要加横线 - type: rsync host: hexo.nestealin.com user: hexo root: /data/nes_hexo_blog/ port: 12345 delete: true verbose: true ignore_errors: true - type: rsync host: 1.2.3.4 user: hexo root: /data/nes_hexo_blog/ port: 23456 delete: true verbose: true ignore_errors: true
由于本次使用私钥进行ssh登陆,所以要在 js 中指定私钥位置
在博客根路径下编辑部署插件的 JS 配置
cd /usr/local/nes_hexo_blog vim node_modules/hexo-deployer-rsync/lib/deployer.js
大约41行增加
-i
配置指定私钥文件if (args.port && args.port > 0 && args.port < 65536) {$ params.splice(params.length - 2, 0, '-e');$ params.splice(params.length - 2, 0, 'ssh -i /data/keys/.ssh/hexo_deploy -p ' + args.port);$ }$
此时,在执行
hexo generate
以及hexo deploy
的时候就可以实现双线部署推送了。