本文最后更新于 2024-11-18T11:19:19+08:00
本文主要参考了 EasyHexo 网站 上的《部署到 CentOS Servers》,结合 Ubuntu 的实际,对《部署到 CentOS Servers》 作了修改和补充。文中使用的服务器是一台运行 Ubuntu 的 VPS。
远程连接到服务器并配置环境
用 SSH 远程连接到服务器。此处假定已经配置好服务器的 SSH 免密登录,假定用户名为 kukmoon
,服务器的 IP 为 999.999.999.999
,
1
| $ ssh kukmoon@999.999.999.999
|
在服务器上安装 Git,如果已有 Git,可以跳过。
在服务器上新建名为 git
的用户:
在服务器上设置 git
用户的密码:
配置 SSH 免密登录
在本地电脑上生成一对公钥和私钥。如果已经生成,可以跳过。输入 ssh-keygen
后一路回车,结束后会在 C:\Users\<用户名>\.ssh
目录下生成一对公钥(id_rsa.pub
)和私钥(id_rsa
)。
1
| PS C:\Users\Kukmoon> ssh-keygen
|
接下来要把公钥复制到服务器上。在服务器上新建 /home/git/.ssh
目录,并修改其属性:
1 2
| $ sudo mkdir /home/git/.ssh $ sudo chmod 700 /home/git/.ssh
|
在服务器上临时修改 /home/git/.ssh
目录及所有文件与子目录的所有权为当前用户,此处当前用户名是 kukmoon
:
1
| $ sudo chown -R kukmoon:kukmoon /home/git/.ssh
|
在本地电脑上操作,将公钥添加到服务器上的 authorized_keys
文件中,并修改其属性。
1
| cat ~/.ssh/id_rsa.pub | ssh kukmoon@999.999.999.999 'cat >> /home/git/.ssh/authorized_keys;chmod 700 /home/git/.ssh;chmod 600 /home/git/.ssh/authorized_keys'
|
在服务器上把 /home/git/.ssh
及其全部内容的所有权归还给 git
用户:
1
| $ sudo chown -R git:git /home/git/.ssh
|
测试免密登录
在本地测试一下能否能用 git
用户免密登录服务器,假设 999.999.999.999
是服务器的 IP 地址:
1
| PS C:\Users\Kukmoon>ssh -i ~/.ssh/hexo-deploy-key git@999.999.999.999
|
如果不能免密登录,就需要在服务器上进行以下检查。
- 检查
/etc/ssh/
目录下的 sshd_config
文件,确认以下关键选项是否正常:
1 2 3 4 5
| RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys #GSSAPIAuthentication yes #GSSAPICleanupCredentials yes
|
- 若还是不能正常工作,则检查用户权限和组权限
1 2 3
| $ sudo chmod 0755 /home/git $ sudo chmod 700 /home/git/.ssh $ sudo chmod 600 /home/git/.ssh/authorized_keys
|
如果能免密登录,就需要剥夺 git
用户的 Shell 登录权限。用 sudo vi /etc/passwd
打开 passwd
文件,将git:x:1001:1001:,,,:/home/git:/bin/bash
最后的 /bin/bash
改成 /usr/bin/git-shell
。出于安全考虑,git
用户登录后将不得接触 Linux 的 shell,但不影响它执行 git
命令。
配置 Git 仓库
如果能免密登录,下一步工作就是配置 Git 仓库。
创建并初始化 Git 仓库。在服务器上执行以下命令:
1 2 3 4
| $ sudo mkdir -p /var/repo $ cd /var/repo $ sudo git init --bare blog.git $ sudo chown -R git:git blog.git
|
配置 Git Hooks
在服务器上创建 post-receive
文件
1
| $ sudo vi /var/repo/blog.git/hooks/post-receive
|
并且在上述 post-receive 文件中写入以下内容:
1 2
| #!/bin/sh git --work-tree=/var/www/hexo --git-dir=/var/repo/blog.git checkout -f
|
提升上述 post-receive 的可执行权限。
1
| $ sudo chmod +x /var/repo/blog.git/hooks/post-receive
|
在服务器上创建静态页面目录。
1 2
| $ sudo mkdir -p /var/www/hexo $ chown -R git:git /var/www/hexo
|
这样,只要我们在本地电脑上用 hexo d
命令发布博客,本地的 Hexo 就会调用 Git,将博客的静态页面文件上传到服务器的 Git 仓库(/var/repo/blog.git
)中,而服务器的 Git 则会将仓库中的所有静态文件都转移到静态页面目录(/var/www/hexo
)中,当用户访问我们的博客时,服务器的 Nginx 就会读取并显示静态页面目录中的内容。
安装与配置 Nginx
在服务器上安装 Nginx。
1
| $ sudo apt install nginx
|
在服务器上设置防火墙打开 80 和 443 端口。
1 2
| $ sudo ufw allow 80 $ sudo ufw allow 443
|
在服务器上为站点创建配置文件。
1
| $ sudo vi /etc/nginx/sites-availbale/blog.kukmoon.com.conf
|
在服务器上向 blog.kukmoon.com.conf
写入以下内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
server { listen 80; listen [::]:80;
server_name blog.kukmoon.com;
location / { root /var/www/hexo; index index.html index.htm index.nginx-debian.html index.php; }
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) { return 404; } }
|
假如你有 SSL、TLS 证书,就可以配置 https 访问和 http 跳转 https,那么需要在上述 blog.kukmoon.com.conf
中写入以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
server { listen 80; listen [::]:80;
server_name blog.kukmoon.com;
listen 443 ssl http2;
listen [::]:443 ssl http2;
if ($ssl_protocol = "") { return 301 https://$host$request_uri; }
ssl_certificate /var/www/kukmoon.com/cert/cert.pem; ssl_certificate_key /var/www/kukmoon.com/cert/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security "max-age=31536000"; error_page 497 https://$host$request_uri;
gzip off;
location / { root /var/www/hexo; index index.html index.htm index.nginx-debian.html index.php; }
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) { return 404; } }
|
在服务器上使站点生效。
1 2
| $ cd /etc/nginx/sites-enabled $ sudo ln -s /etc/nginx/sites-availbale/blog.kukmoon.com.conf blog.kukmoon.com.conf
|
当配置好 DNS 以后,就可以在浏览器中访问 http://blog.kukmoon.com 或 https://blog.kukmoon.com ,查看博客主页。
从本地发布博客文章
首先,在本地电脑上安装 Hexo 的部署插件,此处假设博客源文件在 C:\Users\Kukmoon\kukmoon_blog
目录。注意:部署插件只需要安装一次。
1 2 3
| PS C:\Users\Kukmoon\>cd kukmoon_blog PS C:\Users\Kukmoon\kukmoon_blog> npm install hexo-deployer-git -s PS C:\Users\Kukmoon\kukmoon_blog> npm install hexo-server -s
|
在本地电脑上修改博客源文件目录下的 _config.yml
中的 deploy 选项。注意:这个步骤也只需要做一次。
1 2 3 4
| deploy: - type: git repo: ssh://git@999.999.999.999/var/repo/blog.git branch: master
|
此处的 999.999.999.999
是服务器的 IP 地址。ssh://git@999.999.999.999/var/repo/blog.git
是之前在服务器上建立的仓库。
在本地电脑上发布博客:
其他问题
如有其他问题,请参见 EasyHexo 网站 上的《部署到 CentOS Servers》。
图片版权
题图:https://archive.org/details/ubuntux86x64distros
头图:Image by Michael Pointner from Pixabay