原本我把博客托管到GitHubPages并设置好了域名解析,已经算是很完美的了。但奈何恰逢618年中大促,在巨大优惠的情况下鬼使神差的买了一个云服务器。既然已经买了云服务器,为了不浪费,我又开始了我的折腾之旅,特在此记录一下我把博客部署到云服务器的过程,既为大家提供参考,也为自己做一个记忆的备份。默认已经搭建好了本地博客,搭建本地博客的过程可以参考我的另一篇文章:利用Hexo与GitHub搭建个人博客。
本文主要参考了这篇文章:Win10环境下基于Hexo的静态博客环境搭建,及其阿里云部署,并对其中存在的一些坑做了填埋。
前置要求:
- 本地计算机
- 已安装Node.js
- 已安装Git
- 已安装Hexo,并生成本地博客静态网页
- 云服务器
- 系统版本:CentOS 7.4
- 安全组已开放80端口
- root用户密码已重置,能连接上云服务器
部署的原理:
首先,模仿GitHub,在云服务器里建一个远程Git仓库,以后的本地静态网页都上传到我们自己的云服务器中的Git仓库。然后,为了能从公网中访问到我们的博客,还要为服务器部署Web服务(Nginx)。但这样还不够,因为博客的静态网页要放到网站的根目录里才可以正常浏览。所以还需要一个Git的钩子,当我们上传博客的静态网页到远程Git仓库时,就触发这个钩子,自动地从远程Git仓库中把博客的静态网页移动到网站的根目录。最后,为了保证博客的正常浏览,最好也为云服务器安装Node.js环境。
具体的操作如下:
-
使用root用户登录到云服务器
-
安装Node.js
-
输入以下命令:
# cd ~ # curl -sL https://rpm.nodesource.com/setup_10.x | bash - # yum install -y nodejs
-
查看版本号,检测是否安装成功
# node -v # npm -v
-
-
安装Git
-
输入以下命令,若遇系统询问,一律选择yes:
# yum install git
-
查看版本号,检测是否安装成功
# git --version
-
-
Nginx部署
-
安装Nginx
先安装依赖环境,输入以下命令,若遇系统询问,一律选择yes # yum install gcc-c++ # yum install -y pcre pcre-devel # yum install -y zlib zlib-devel # yum install -y openssl openssl-devel 下载nginx安装包 # wget -c https://nginx.org/download/nginx-1.10.1.tar.gz 将安装包解压到/usr/local目录下 # tar -xvf nginx-1.10.1.tar.gz -C /usr/local 进入/usr/local目录,并确认nginx解压到该目录下 # cd /usr/local # ls 进入nginx-1.10.1目录,会发现该目录下有一个configure文件,执行该配置文件 # cd nginx-1.10.1/ # ls # ./configure --prefix=/usr/local/nginx --with-http_ssl_module 编译并安装nginx # make # make install 开放Linux的80端口并启动nginx # cd /usr/local/nginx # /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT # cd sbin # ./nginx 没有任何提示消息即代表成功,此时可打开浏览器访问云服务器的公网IP,即可看到Nginx的欢迎页面
-
配置Nginx
先创建一个文件夹,用来作为网站根目录 # mkdir -p /home/www/blog 更改nginx配置文件中的域名与网站根目录 # cd /usr/local/nginx/conf # vim nginx.conf 在打开的文件中,按i进入编辑模式,按下面的示例更改配置文件的相应位置: -------------------------------------------------------------- user root; # 第一处 worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name 你的域名或公网IP; # 第二处 #charset koi8-r; #access_log logs/host.access.log main; location / { root /home/www/blog; # 第三处 index index.html index.htm; } 以下省略......... --------------------------------------------------------------- 更改完毕后,按Esc键进入命令模式,再输入':wq',然后回车,保存退出 重启nginx服务 # cd /usr/local/nginx/sbin # ./nginx -s restart
-
-
创建Git用户,并配置SSH密钥对以实现免密登录
-
创建Git用户并授予管理员权限
创建Git用户 # adduser git 先获得用户配置文件的更改权限: # chmod 777 /etc/sudoers 然后打开用户配置文件: # vim /etc/sudoers 按i键进入编辑模式,找到 root ALL=(ALL) ALL,在下面添加一行:git ALL=(ALL) ALL 添加完毕后,按Esc键进入命令模式,再输入':wq',回车,保存退出 再把配置文件的权限改回去: # chmod 400 /etc/sudoers 最后设置git用户的密码 # sudo passwd git 然后输入两次密码确认即可,输入的密码不可见,不要怀疑自己的键盘坏了
-
配置SSH密钥对
在本地计算机生成SSH密钥对,若已有密钥对,可跳过这一步 在本地计算机里打开Git Bash,输入以下命令,若遇到系统询问,一直回车即可 $ ssh-keygen -t rsa -C "youremail" 找到本地生成的密钥对,一般在电脑里的这个路径:C:\Users\UserName\ .ssh 其中,id_rsa文件是私钥,给本地计算机使用,id_rsa.pub是公钥,需要上传到云服务器 当私钥与公钥配对成功,即可免密登录 最后,检查本地.ssh文件夹里是否存在known_hosts.old与known_hosts这两个文件 若存在这两个文件,则删除,避免后续配对出错 --------------------------------------------------------------------- 上传公钥到云服务器,实现Git用户的免密登录 在云服务器里切换成git用户 # su git 在git用户的根目录创建.ssh文件夹 # cd ~ # mkdir .ssh 创建公钥文件 # vim /home/git/.ssh/authorized_keys 在打开的文件中,按i键进入编辑模式 然后在本地计算机里找到id_rsa.pub公钥文件,用记事本打开,复制里面的内容填入到上述云服务器里的公钥文件中 粘贴完毕后,按Esc键进入命令模式,再输入':wq',回车,保存退出 设置云服务器里的密钥文件的权限 # chmod 600 ~/.ssh/authorized_keys # chmod 700 ~/.ssh 在本地计算机测试密钥配对情况,打开Git Bash,输入以下命令,若遇到系统询问一律选择yes: $ ssh git@云服务器的公网IP
-
-
创建远程Git仓库,并设置钩子,以下命令均在git用户下执行
-
创建远程Git仓库,输入以下命令:
# cd ~ # git init --bare hexo.git
-
设置钩子
创建钩子文件 # vim ~/hexo.git/hooks/post-receive 在打开的文件中,按i键进入编辑模式,输入以下内容: #!/bin/bash git --work-tree=/home/www/blog --git-dir=/home/git/hexo.git checkout -f 输入完毕后,按Esc键进入命令模式,再输入':wq',回车,保存退出
-
授予钩子可执行权限
# chmod +x ~/hexo.git/hooks/post-receive # cd /home # sudo chmod -R 777 /home/www/blog
-
-
打开本地Hexo博客文件夹下的_config.yml配置文件,把最后面的内容设置成如下:
deploy: type: git repo: git@云服务器的公网IP:/home/git/hexo.git branch: main
-
生成本地博客静态网页并上传到云服务器
-
在本地博客文件夹目录下打开Git Bash后,输入下面命令:
$ hexo Clean // 清除缓存 $ hexo g // 生成静态网页 $ hexo s // 本地预览,没有问题后按Ctrl+C停止预览 $ hexo d // 把网页上传到云服务器
-
打开浏览器,访问你的域名或云服务器的公网IP(需与nginx配置文件对应),即可查看自己的博客
-
-
特别注意:由于还没有设置nginx的https服务,不要在本地博客设置强制使用https链接
以上就是把博客部署到云服务器的全过程,以后只需在本地执行
命令即可把博客自动部署到云服务器。hexo d