Hexo博客部署到云服务器教程
准备工作
- Ubuntu(Linux)系统
- Git
- Nginx
- Hexo(本地)
环境配置
1.使用root
用户或者具有管理员权限的用户连接至云服务器
2.安装Git
(1)查看是否安装好git
1 | git --version |
如果提示git版本,说明已经安装git,跳到下一步。如果提示找不到git
命令,说明未安装。
运行以下命令安装git:
1 | apt install git |
再次查看是否完成git安装:
1 | git --version |
(2)创建git用户,并配置仓库
创建用户
1 | adduser git |
根据提示设置密码,其他信息可以位空
切换至git用户
1 | su git |
打开用户目录
1 | cd |
cd
默认打开当前用户的目录,即/home/git/
创建一个保存网页文件的文件夹
1 | mkdir -p projects/hexo-blog |
新建并打开仓库文件夹
1 | mkdir repos && cd repos |
第一次使用git会提示设置默认分支名称,我们这里提前设置为main(或者master)
如果之前一直在使用github的pages,大概率你的主分支是main,为了方便统一,这里也设置为main
1 | git config --global init.defaultBranch main |
初始化仓库
1 | git init --bare hexo-blog.git |
(3)创建钩子函数
1 | cd hexo-blog.git/hooks |
新建文件
1 | vim post-receive |
按i
进入编辑模式
粘贴以下内容:
1 | #!/bin/sh |
按ESC
再输入:wq
按Enter即可
(4)修改权限
1 | chmod +x post-receive |
退回root用户(也可以切换到可以使用sudo的用户,使用sudo完成)
1 | exit |
修改权限
1 | chown -R git:git /home/git/repos/hexo-blog.git |
(5)测试可用性
在本地终端中使用:
1 | git clone git@<ip>:/home/git/repos/hexo-blog.git |
ip
为远程服务器的ip
3.设置免密SSH连接
(1)创建authorized_keys
并修改权限
使用git
用户建立远程连接
1 | cd /home/git/.ssh |
如果没有就创建该目录
1 | touch authorized_keys |
该文件内保存公钥(.pub)内容
修改权限
1 | chmod 600 authorized_keys |
(2)创建密钥对(如果已有可跳过)
查看本地是否存在密钥
Windows:C:/Users/<username>/.ssh
Linux:/home/<username>/.ssh
Mac:/Users/<username>/.ssh
如果目录下存在id_rsa
和id_rsa.pub
则说明存在密钥对
如果没有
1 | ssh-keygen -t rsa |
全Enter即可
(3)建立链接
本地终端输入
1 | ssh-copy-id -i C:/Users/<username>/.ssh/id_rsa.pub git@<ip> |
也可以手动复制文件id_rsa.pub
的内容到远程authorized_keys
测试连接
本地终端输入
1 | ssh git@<ip> |
此时使用git登陆远程主机,不需要输入密码
如果仍然需要密码,排查前面步骤是否出错,可以查看
/home/git/.ssh/authorized_keys
文件的内容是否与本地一致确认前面没有问题,需要修改ssh的配置文件
1 sudo vim /etc/ssh/sshd_config修改其中的一些配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14 # 是否让 sshd 去检查用户家目录或相关档案的权限数据,
# 这是为了担心使用者将某些重要档案的权限设错,可能会导致一些问题所致。
# 例如使用者的 ~.ssh/ 权限设错时,某些特殊情况下会不许用户登入
# 修改此项仅为临时方案,建议将目录权限修改为正确权限(chmod)
StrictModes no
# 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2。
# 至于自制的公钥数据就放置于用户家目录下的 .ssh/authorized_keys 内
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# 有了证书登录了,就禁用密码登录。
PasswordAuthentication no保存配置,重启ssh
1 systemctl restart ssh或者
1 systemctl restart sshd
4.安装Nginx
(1)使用root
或者带有管理权限的用户登陆
1 | apt install nginx |
或者
1 | sudo apt install nginx |
查看是否安装完成
1 | nginx -v |
显示版本信息就说明安装完成
运行nginx
1 | nginx |
在本地浏览器输入
如果拒绝访问,确认自己的服务器开放了80端口
(2)配置nginx
远程连接服务器
备份配置文件
1 | sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.default |
编辑配置文件
1 | sudo vim /etc/nginx/nginx.conf |
找到http {
开头的块
里面会有server
开头的块,如下图,默认不是注释掉的
只需要修改80端口server里面的就可以,后面解释ssl的配置
把其中的
1 | root /usr/share/nginx/html; |
修改为
1 | root /home/git/projects/hexo-blog; |
保存,检验配置
1 | sudo nginx -t |
如果不使用sudo可能会有警告提示user命令失效
说明配置正确,如果提示其他内容,检查是否存在拼错或者其他错误
重启nginx
1 | systemctl reload nginx |
1 | systemctl restart nginx |
或者
1 | sudo nginx -s reload |
5.配置Hexo
编辑本地网站主目录下的_config.yml
找到
1 | deploy: |
可以同时上传到多个服务器上
上传网站
1 | hexo g -d |
6.限制git用户权限(可选)
查看git-shells是否在登录方式里
1 | cat /etc/shells |
如果没有
1 | which git-shell |
添加到后面
1 | /usr/bin/git-shell |
如下图
然后修改
1 | sudo vim /etc/passwd |
找到git用户
只修改划线部分
1 | /usr/bin/git-shell |