前言

之前用Gitee的Pages对博客进行部署,怎么用也不习惯,今天续费阿里云服务器了,开造~

前期准备:

  • 本地hexo构建可运行发布
  • 阿里云服务器能访问
  • 有一个域名(非必须项,可以公网ip查看嘛~)

服务器环境:

  • Ubantu16.04(我也想换centos,但我的数据库也需要移植,qaq)
  • mysql5端口号3306 + myphpadmin (hexo是静态页面,用不到的啦;如果是WordPress就需要)
  • apache2端口号80 (之前的页面)
    因为我的服务器上正在跑着我的个人网站,要再加一个网站的话需要做反向代理,于是需要安装nginx,避免80端口冲突,这里先把apache80端口修改为82,这样nginx就可以作为主页面显示。

修改Apache端口号

  1. 修改服务器Apache端口配置文件:

     cd /etc/apache2
     vi ports.conf

    在这里插入图片描述
    Listen 80改为82
    在这里插入图片描述

  2. 在阿里云控制台添加安全组规则:添加82端口
    在这里插入图片描述

  3. 重启Apache

     sudo /etc/init.d/apache2 restart

    在这里插入图片描述

思路

回顾一下Hexo发布到gitee(Pages)的流程:

  • 本地计算机用Hexo构建静态文件public
  • 关键一步就是git上传github或gitee
  • 发布Pages将仓库目录https://gitee.com/cungudafa/cungudafa/index.html拉取到https://cungudafa.gitee.io/index.html
    在这里插入图片描述
    当然我们需要上传的是public文件夹;每次xftp手动上传肯定是不现实且麻烦的,所以我们接下来要在服务器安装git。

正文

1. 服务器创建git用户

  1. 创建一个git用户,用来运行git服务。(root不安全)

     sudo useradd git -m

    注意:Ubantu下必须加上-m,才会自动新建用户目录/home/git/(后面配置和博客文件都放在这里)
    在/home/git/非常重要,如果出错,可以删除sudo userdel -r git用户,重新之前的步骤。

  1. 设置密码

     sudo passwd git

    在这里插入图片描述
    密码是git用户的密码,简单为上啦。

  2. 增加git用户执行sudo的权限

     chmod 740 /etc/sudoers
     vim /etc/sudoers

    找到以下内容:root ALL=(ALL) ALL在下面添加一行

     git     ALL=(ALL)       ALL

    保存退出后改回权限:

     chmod 400 /etc/sudoers

    2. 服务器打开RSA认证

    RSA用公钥加密,私钥解密,成为加密通信。
    用私钥加密,公钥解密,就是认证。(这样就能证明消息是你发出的。)
    因为:公钥大家都有,私钥就只有一个,在你自己手里。
    在这里插入图片描述

    2.1 开启认证配置

服务器端:

vim /etc/ssh/sshd_config

在这里插入图片描述
在sshd_config中开启以下几项:(前两项yes,后一项修改为如下)

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

重启sshd

systemctl stop sshd.service
systemctl start sshd.service

在这里插入图片描述

2.2 建立ssh信任关系

本地电脑生成秘钥对-》发送公钥到服务器-》本地可免密连接服务器

  1. 在本地电脑: 生成密钥对

     ssh-keygen -t rsa -C "邮箱" 

    在这里插入图片描述
    成功后,会在c盘用户下新建秘钥对:
    在这里插入图片描述

  2. 在服务器: 切换至git用户,创建 ~/.ssh 文件夹

     su git
     mkdir ~/.ssh

    或者root用户直接创建:

     cd /home/git/
     mkdir .ssh
  3. 在本地电脑: 发送公钥 id_rsa.pub/home/git/.ssh/authorzied_keys

     ssh-copy-id -i C:/Users/CUNGU/.ssh/id_rsa.pub git@47.93.50.90 //把公钥发送给服务器
     ssh git@47.93.50.90 // 测试能否登录

    本地登录效果:(authorzied_keys是一行一行添加的,显示成功添加一行)
    通过ssh能够直接登录操作shell,当然后面要关掉git的这个shell权限的,不然小心异地登录,危险危险。在这里插入图片描述
    服务器文件夹也有了公钥:
    在这里插入图片描述

  4. 文件夹权限调整:authorzied_keys权限为600时才生效
    git用户:

     su git
     chmod 700 ~/.ssh
     chmod 600 ~/.ssh/authorzied_keys

    第二步没有成功,说我没有权限(Permission denied);emmm,root设置好了在这里插入图片描述
    root设置第二步:(注意在.ssh目录下)

     exit // 退出到 root 登录
     sudo chmod 600 authorized_keys

    在这里插入图片描述
    现在就搭建好git桥梁,为后面实现hexo d部署时,可以自动上传啦!

    3.创建blog.git空仓库

  5. 切换到git用户,接下来都是在git用户权限下进行操作:

    su git                //切换git用户
    cd /home/git/
    mkdir -p projects/blog  //创建你的博客目录
    mkdir repos && cd repos
    git init --bare blog.git  //创建一个空仓库
    cd blog.git/hooks
    vi post-receive  //创建hook钩子函数,输入以下内容
    git --work-tree=/home/git/projects/blog --git-dir=/home/git/repos/blog.git checkout -f
    chmod +x post-receive  // 修改钩子函数权限

    在这里插入图片描述

  1. 改变 hexo.git 目录的拥有者为git用户:

     sudo chown -R git:git blog.git

    在这里插入图片描述

  2. 添加备份目录

     cd /home/git/projects/
     mkdir -p tmp/blog

    修改钩子的内容:(重点是git clone 克隆到主目录home/git/projects/blog主目录要配置到nginx中去的)

     #!/bin/bash
     GIT_REPO=/home/git/repos/blog.git    # git仓库
     TMP_GIT_CLONE=/home/git/projects/tmp/blog
     PUBLIC_WWW=/home/git/projects/blog  # 网站目录
     rm -rf ${TMP_GIT_CLONE}
     git clone $GIT_REPO $TMP_GIT_CLONE
     rm -rf ${PUBLIC_WWW}/*
     cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}
     chmod +x post-receive          # 赋予脚本的执行权限

    在这里插入图片描述
    git用户赋权:

     su git
     chmod +x post-receive
     exit // 退出到 root 登录
     chown -R git:git /home/git/repos/blog.git // 添加权限
     sudo chown git:git -R /home/git/projects/

    在这里插入图片描述
    蓝色为更新后的上传机制:
    在这里插入图片描述

  3. 为了安全起见,我们需要关闭git账号登录shell的权限!!(一开始疏忽了 一个晚上服务器被异常登陆五次!!)==建议这一步放在全文步骤配置好,最后最后来做==

     vim /etc/passwd

    找到git账号(一般在最后面)添加:/usr/bin/git-shell
    在这里插入图片描述
    加上git就只能git clone,如需shell操作,撤销/usr/bin/git-shell即可。
    在这里插入图片描述

  4. 在本地任意一空目录,测试git仓库是否可用(测试步骤,稍后可清除)

     git clone git@47.93.50.90:/home/git/repos/blog.git

    实际拉下来的是你的/home/git/projects/blog,哈哈哈还是空的~在这里插入图片描述

    4. hexo配置

    修改博客根目录配置_config.yml,部署部分,增添repo:(以git用户的身份操作)

    deploy:
    type: git
    message: update
    gitee: https://gitee.com/cungudafa/cungudafa.git
    repo: git@47.93.50.90:/home/git/repos/blog.git
    branch: master

    接下来,在用hexo clean && hexo g -d时,就会自动上传啦!
    在这里插入图片描述

    只有在ssh秘钥配置成功,才能成功上传。如果需要修改公钥,要打开git操作shell的权限哦!vim /etc/passwd最后一句。及时开,及时关,做到万无一失。

现在public生成的静态文件已经完好推送到阿里云服务器了!
现在需要Pages工作:即将静态页面显示在网站上。

5. nginx配置

nginx显示blog的index.html:
在这里插入图片描述
我直接使用sudo apt install nginx安装是有问题的,看了n多教程之后,还是选择了源码安装😣

  1. 下载源码编译工具
    参考1 | 参考2 | 参考3

     sudo apt-get update
     apt-get install gcc
     apt-get install libpcre3 libpcre3-dev
     apt-get install zlib1g zlib1g-dev zlib1g.dev
     apt-get install openssl openssl-dev
     sudo apt-get install openssl libssl-dev
  2. 下载安装包,解压到常用目录:

     cd /usr/local/
     wget http://nginx.org/download/nginx-1.8.1.tar.gz
     tar -zxvf nginx-1.8.1.tar.gz
     #重命名
     mv nginx-1.8.1 nginx 
     cd nginx
     #开始配置
     ./configure --prefix=/usr/local/nginx --with-http_ssl_module
     # 编译nginx:
     sudo make
     # 安装nginx:
     sudo make install

    如果出错,就是第一步没有做好,缺编译工具。

  3. 修改配置:

     vi /usr/local/nginx/conf/nginx.conf
    • 端口号(阿里云控制台安全组规则要打开端口哦)
    • 修改域名
    • 修改根目录位置
    • 修改用户为root用户
      在这里插入图片描述
      在这里插入图片描述
  4. 启动nginx

     sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

    报错:缺少两个文件:
    解决方法:参考
    在这里插入图片描述

    此时已经可以用域名cungudafa.top或者公网ip在浏览器查看到页面咯:
    相比较apache,用另一个端口号即可见:cungudafa.top:82,双页面美滋滋~
    在这里插入图片描述
    hexo部署就到此结束了,看看操作流程,配置只配置一次,以后发布就自动发布了,再也不用点gitee的手动部署了。 👏在这里插入图片描述

    6. Tips

    (1) nginx常用的命令

    建议记在小本本上哦!📃)

  • 启动:/usr/local/nginx/sbin/nginx
  • 关闭:/usr/local/nginx/sbin/nginx -s stop
  • 重启:/usr/local/nginx/sbin/nginx -s reload
  • 查看nginx的进程pid: cat /usr/local/nginx/logs/nginx.pid
  • 查看版本:/usr/local/nginx/sbin/nginx -V
  • 修改配置文件:vim /usr/local/nginx/conf/nginx.conf
  • 修改完后测试:/usr/local/nginx/sbin/nginx -t

    参考于:nginx常用的命令
    完整: 删除apt install nginx

tips:为 nginx 取别名,后面可直接用🧡

alias nginx='/usr/local/nginx/sbin/nginx'
  • 启动:nginx
  • 关闭:nginx -s stop
  • 重启:nginx -s reload
  • 查看nginx的进程pid: cat /usr/local/nginx/logs/nginx.pid
  • 查看版本:nginx -V
  • 修改配置文件:vim /usr/local/nginx/conf/nginx.conf
  • 修改完后测试:nginx -t

    (2)云网站

  1. 为了响应国家网络安全管理,备案名要加上哦!
    在这里插入图片描述
  2. hexo中涉及修改:
    • valine评论涉及leadcloud后台添加域名;
      在这里插入图片描述
    • 修改博主通知域名哦(云引擎-》设置-》环境变量:修改域名、保存,然后重启云引擎实例)
  3. 换行符转义警告:
    git commit -a命令时,遇到LF will be replaced by CRLF in…提示的解决办法
     git config --global core.autocrlf false

姑,一个学习记录者