Hexo自动部署到阿里云(Ubantu16.04)【超详细踩坑记录】_cungudafa的博客-程序员秘密

技术标签: git云服务器  nginx  运维  hexo自动部署到服务器  云服务器学习  linux  # Sakura  

前言

之前用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用户,重新之前的步骤。

  2. 设置密码

    sudo passwd git
    

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

  3. 增加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 [email protected] //把公钥发送给服务器
    ssh [email protected] // 测试能否登录
    

    本地登录效果:(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空仓库

  1. 切换到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  // 修改钩子函数权限
    

    在这里插入图片描述

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

    sudo chown -R git:git blog.git
    

    在这里插入图片描述

  3. 添加备份目录

    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/
    

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

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

    vim /etc/passwd
    

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

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

    git clone [email protected]:/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: [email protected]:/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
    
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cungudafa/article/details/104585711

智能推荐

前端小知识----日常填坑_不污染顶级变量。_徐太浪的博客-程序员秘密

1、移动端遇到的兼容问题(1)安卓浏览器看背景图片,有些设备会模糊:是devicePixelRatio在作怪;解决:背景图代替img标签,背景图是原图2倍,background-size:contain(2)手机中网页放大和缩小:<metaname="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1...

mvc:resources拦截资源显示问题_yuhui66666688gfbfdy的博客-程序员秘密

mvc:resources拦截资源显示问题    resource明确不要拦截的资源(静态资源)                             不配置会发生这个No mapping found for HTTP request with URI [/web/member/css 1,拦截静态显示问题(mvc的拦截,对

原生WebView长截图 和 Tencent x5webview截长图_fenglolo的博客-程序员秘密

前言: 之前项目用的是原生webview,最近使用公司新框架使用的是x5的webview;正好有需求需要做长截图,踩坑之路开始。1、原生WebView长截图/** * 原生WebView长截图 * * @param webView * @return */ public static Bitmap getWebViewBtpBase64Str(WebView webView) { Bitmap bitmap = null;

module 'tkinter' has no attribute “Tk()”_module.tk has no attribute tk_凌空的桨的博客-程序员秘密

千万别把Python的GUI程序命名成tkinter,或者把什么其他的程序命名成tkinter,只要命名成这个,一调用就会报这个错。而且要修复的话目前我知道的只有重装anaconda了。。而且要把这个问题文件重命名,把对应的*.pyd文件也删除。。哈哈哈,贼刺激...

java 识别网址_智能识别收货地址Java_weixin_39806808的博客-程序员秘密

import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.URL;import ...

AsyncContext异步处理http请求_CRUD的W的博客-程序员秘密

前言今天在学习nacos的源码时发现了一个比较有意思的设计,在此做一个分析。即nacos在提供配置中心功能时,客户端拉取配置时和客户端采用的是长轮询机制主要流程为:客户端发起一个请求给服务端,并附带一个超时时间,为30秒,服务端收到这个请求后会去查询配置的数据是否有更改,如果有更改则会立即返回,如果没有更改则服务端不会立刻返回,直到超时时间到了或者数据在此期间有更改才返回,客户端收到返回后会再次发起一个相同的请求,以此轮询,这就是一种常见的长轮询机制长轮询的优点是客户端是每隔一段时间发起一次请求,不会

随便推点

adb logcat 命令行用法_adb logcat命令用法_tumuzhuanjia的博客-程序员秘密

作者 :万境绝尘  转载请著名出处eclipse 自带的 LogCat 工具太垃圾了, 开始用 adb logcat 在终端查看日志;1. 解析 adb logcat 的帮助信息在命令行中输入 adb logcat --help 命令, 就可以显示该命令的帮助信息;[plain] view [email protected]

django手机访问_从0到1搭建个人博客Django(三)_weixin_39685674的博客-程序员秘密

你好,我是goldsunC让我们一起进步吧!从0到1搭建个人博客-Django(三)在以下链接快速回顾系列文章内容从0到1搭建个人博客-Django(一)从0到1搭建个人博客-Django(二)本篇内容主要是一些框架概念性的东西,需要理解,建议如果没基础的话多读几遍。MVC设计模式说到MVC,它可是Web设计模式的经典制作,我们前文说过Django是遵循MVC模式的,而实际上,Djang...

STM32 音频ADC DAC测试方法_音频adc采集dac播放_mainbanp的博客-程序员秘密

介绍单片机进行音频ADC DAC调试的方法与过程中用的工具的使用。用到的工具 win 10 64bit PC、信号发生、STM32F405 板卡、稳压电源,示波器、WinHex.exe、ffmpeg.exe、rawConvert.exe、pcm2wav.exe、Keil Array Visualization V1.4.2 Beta.exe音频DAC测试PC自带录音机,录制一段音频record.m4a格式;1:将.m4a转为.wav ;用到工具ffmpegffmpeg -i ..

Linux设备驱动--Linux驱动模块交叉编译的注意事项_linux设备驱动编译_YasinEmb的博客-程序员秘密

在linux系统下编写好目标开发板的驱动程序后,需要以模块的方式加入内核。期间交叉编译适合目标板Kernel的模块尤为关键。在此记录编译方法,以免看客和我一样走弯路。1、在宿主机上安装交叉编译器 arm-linux,具体方法百度,一大筐。2、将和目标板的内核原文件在宿主机上编译好(make bzimage)。3、在编译好的内核文件中,输入make modules ARCH=arm  C

PHP结合phpstorm配置debug_MISSXIAOMI的博客-程序员秘密

工作过程中一直想配置一个PHPdebug,但在过程中总是遇到很多奇怪的问题就放弃了(其实是自己比较菜,不懂其中原理),今天重新配置,居然配置成功了。无论是在phpstorm中运行脚本的debug还是通过浏览器访问都一举成功,记录下来给需要的同学参考一哈,如果哪里有问题,还望不吝赐教。安装PHP扩展给PHP环境安装xdebug扩展,下载地址:https://xdebug.org/d...

陈伟视频总结第一篇_在过程中,可以使用dim,private,stasic语句定义数组,这句话对吗?为什么?_紫~阳的博客-程序员秘密

关于VB其他相关资料Windows编程Com/DCOM组件技术数据库编程(NT,SQL)Ado模型Internet及相关知识(TCP/IP,HTMI,XML)主方向应该理解上机要求需要下载使用msdn帮助MSSQL数据库Office计算机主流语言传统过程式语言:Fortran,Pascal,C,。。。面向对象语言:C++,objectPascal,Ada,。。。数据库管理:Db...

推荐文章

热门文章

相关标签