回顾
2️⃣ 「小白教程」Hexo静态博客2 —— 基本命令、效果(画饼)篇
3️⃣ 「小白教程」Hexo静态博客3 —— 部署篇(Github Pages)
前言
这里介绍两种方式将本地的博客的静态文件(即public文件夹)上传到自己的服务器上,并设置域名。
①SFTP,最简单的办法
②在VPS上建立Github仓库,并配置钩子更新VPS上的本地文件
两种方法没有明显的优劣之分,挑选自己喜欢并适应的方式就可以。
所以你需要准备的是:一台服务器(演示使用Debian/Ubuntu系统),一个域名。
SFTP部署
安装hexo-deployer-sftp
安装 hexo-deployer-sftp。 通过 SFTP 部署站点,允许使用 ssh-agent 进行无密码连接。
运行命令:npm install hexo-deployer-sftp --save
修改_config.yml配置
修改_config.yml文件中的deploy选项,模板参考如下:
deploy: type: sftp host: <host> user: <user> pass: <password> remotePath: [remote path] port: [port] privateKey: [path/to/privateKey] passphrase: [passphrase] agent: [path/to/agent/socket]| 选项 | 描述 | 默认值 |
|---|---|---|
| host | 远程主机的地址 | |
| port | 端口 | 22 |
| user | 使用者名称 | |
| pass | 密码 | |
| privateKey | SSH 私钥的目录地址 | |
| passphrase | 私钥的可选密码 | |
| agent | ssh套接字的目录地址 | $SSH_AUTH_SOCK |
| remotePath | 远程主机的根目录 | / |
| forceUpload | 覆盖现有的文件 | false |
| concurrency | 同时处理的 SFTP 任务的最大数量 | 100 |
<host>:请填入你的服务器的公网IP。
<user>:如果你不打算adduser,那么填入root就可以了。如果你为了安全性,可以选择新建一个用户并填入<user>选项。adduser的操作也可以在下个部分看到
<password>:填入你对应user的密码。
privateKey:如果你在本地已经生成好了证书并将pubkey传至.ssh文件夹,并设置好了sshd文件允许密钥登陆,那么你可以填写该选项。如果设置了密码,记得填写[passphrase]。生成本地密钥详见下一个部分。
[remote path]:请在你的VPS本地创建一个目录,例如/var/blog,并填入其中。你也可以设置别的目录。public文件夹内的静态文件将存入其中。
Git部署
配置本地密钥
为了使本地可以跟远程的 github 建立联系,需要在本地配置 SSH 密钥,这样我们就可以在本地直接提交代码到 GitHub 上或者远端 git 仓库。如果你是第一次配置 SSH,则配置一下 git 的 username 和 email:
$ git config --global user.name "你要设置的名字"$ git config --global user.email "你要设置的邮箱"然后再生成本地密钥:$ ssh-keygen -t rsa -C "你刚刚设置的邮箱"。如果不需要设置密码的话,连续三个回车就好了。如果你设置了密码,请务必记住。
之后在你的用户的根目录会出现id_rsa.pub文件,这是你生成的公钥。后续需要上传到.ssh文件夹内
服务器用户设置
我们创建一个git用户:adduser git,密码以及个人信息随意填写。
切换至 git 用户,创建 ~/.ssh 文件夹和 ~/.ssh/authorized_keys 文件,并赋予相应的权限:
su gitmkdir ~/.sshvim ~/.ssh/authorized_keys按”i” 进入编辑模式,将我们在本地生成的 id_rsa.pub 文件中的公钥复制到 authorized_keys 中,按”esc”,然后按”:wq”,保存退出。如果你不喜欢用vim,也可以用nano等其他编辑器。能把公钥放进去就行。
同时,请确保在sshd配置文件中pubkey authentication的选项是yes。
接着,输入一下命令,赋予权限:
chmod 600 /home/git/.ssh/authorized_keyschmod 700 /home/git/.ssh之后,测试一下,能否在本地的终端免密登录 git:ssh -v git@SERVER.
创建Github仓库
在 var 目录下创建 repo 作为 Git 仓库目录,返回服务端命令行切换到 root 账户,然后输入:mkdir /var/repo,然后赋予权限:chmod -R 755 /var/repo。
接下来创建 hexo 目录作为网站根目录,并赋予权限:
mkdir /var/hexochown -R git:git /var/hexochmod -R 755 /var/hexochown -R git:git /var/repo/chown -R git:git /var/hexo/然后来创建一个空白的 git 仓库:
cd /var/repogit init --bare hexo.git我们需要创建一个新的 Git 钩子,用于自动部署。在 /var/repo/hexo.git 下,有一个自动生成的 hooks 文件夹。我们需要在里边新建一个新的钩子文件 post-receive。新建/var/repo/hexo.git/hooks/post-receive文件,写入以下内容:
#!/bin/bashgit --work-tree=/var/hexo --git-dir=/var/repo/hexo.git checkout -f并修改权限:
chown -R git:git /var/repo/hexo.git/hooks/post-receivechmod +x /var/repo/hexo.git/hooks/post-receive修改 hexo 配置
编辑站点配置文件 _config.yml,找到 deploy,修改模板如下:
deploy: type: git #repo改为repo: git@your_ip:/var/repo/hexo.git repo: git@your_ip:/var/repo/hexo.git branch: master域名设置
Caddy
my.domain { root * /var/hexo file_server encode gzip # 可选:配置日志 log { output file /var/log/caddy/my.domain.access.log format common }}只需将my.domain换成你自己的域名,root * /var/hexo换成你自己的目录即可。
Nginx
server { listen 80; listen [::]:80; server_name my.domain; return 301 https://$server_name$request_uri;}server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name my.domain; # SSL证书配置 - 需要替换为实际证书路径 ssl_certificate /etc/ssl/certs/my.domain.crt; ssl_certificate_key /etc/ssl/private/my.domain.key; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_protocols TLSv1.2 TLSv1.3; root /var/hexo; index index.html; access_log /var/log/nginx/my.domain.access.log; error_log /var/log/nginx/my.domain.error.log; location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; } location / { try_files $uri $uri/ =404; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; } error_page 404 /404.html; location = /404.html { internal; } location ~ /\. { deny all; access_log off; log_not_found off; } location ~* \.(log|txt|sql)$ { deny all; }}请自己申请证书,在SSL证书配置部分替换成你的证书的绝对路径。
评论 (0)