文章目录
前言
之前用Gitee的Pages对博客进行部署,怎么用也不习惯,今天续费阿里云服务器了,开造~
前期准备:
- 本地hexo构建可运行发布
- 阿里云服务器能访问
- 有一个域名(非必须项,可以公网ip查看嘛~)
服务器环境:
- Ubantu16.04(我也想换centos,但我的数据库也需要移植,qaq)
- mysql5
端口号3306
+ myphpadmin (hexo是静态页面,用不到的啦;如果是WordPress就需要) - apache2
端口号80
(之前的页面)
因为我的服务器上正在跑着我的个人网站,要再加一个网站的话需要做反向代理,于是需要安装nginx,避免80端口冲突,这里先把apache80端口修改为82,这样nginx就可以作为主页面显示。
修改Apache端口号
-
修改服务器Apache端口配置文件:
cd /etc/apache2 vi ports.conf
将Listen 80改为82
-
在阿里云控制台添加安全组规则:添加82端口
-
重启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用户
-
创建一个git用户,用来运行git服务。(root不安全)
sudo useradd git -m
注意:Ubantu下必须加上-m,才会自动新建用户目录/home/git/(后面配置和博客文件都放在这里)
在/home/git/非常重要,如果出错,可以删除sudo userdel -r git
用户,重新之前的步骤。 -
设置密码
sudo passwd git
密码是git用户的密码,简单为上啦。 -
增加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信任关系
本地电脑生成秘钥对-》发送公钥到服务器-》本地可免密连接服务器
-
在本地电脑: 生成密钥对
ssh-keygen -t rsa -C "邮箱"
成功后,会在c盘用户下新建秘钥对:
-
在服务器: 切换至git用户,创建 ~/.ssh 文件夹
su git mkdir ~/.ssh
或者root用户直接创建:
cd /home/git/ mkdir .ssh
-
在本地电脑: 发送公钥 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权限的,不然小心异地登录,危险危险。
服务器文件夹也有了公钥:
-
文件夹权限调整:
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空仓库
-
切换到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 // 修改钩子函数权限
-
改变 hexo.git 目录的拥有者为git用户:
sudo chown -R git:git blog.git
-
添加备份目录
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/
蓝色为更新后的上传机制:
-
为了安全起见,我们需要关闭git账号登录shell的权限!!(一开始疏忽了 一个晚上服务器被异常登陆五次!!)建议这一步放在全文步骤配置好,最后最后来做
vim /etc/passwd
找到git账号(一般在最后面)添加:
/usr/bin/git-shell
加上git就只能git clone,如需shell操作,撤销/usr/bin/git-shell
即可。
-
在本地任意一空目录,测试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多教程之后,还是选择了源码安装😣
-
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
-
下载安装包,解压到常用目录:
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
如果出错,就是第一步没有做好,缺编译工具。
-
修改配置:
vi /usr/local/nginx/conf/nginx.conf
- 端口号(阿里云控制台安全组规则要打开端口哦)
- 修改域名
- 修改根目录位置
- 修改用户为root用户
-
启动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)云网站
- 为了响应国家网络安全管理,备案名要加上哦!
- hexo中涉及修改:
- valine评论涉及leadcloud后台添加域名;
- valine评论涉及leadcloud后台添加域名;
- 换行符转义警告:
git commit -a命令时,遇到LF will be replaced by CRLF in…提示的解决办法git config --global core.autocrlf false