title: Jenkins+Hexo+码云构建自动化博客站点
categories:

  • 运维
    tags:
  • Jenkins
  • Hexo
  • HTTPS
  • 有坑待填
    date: 2019-03-10

🌞写在前面

在使用Hexo之前,一直用的WordPress,终于在断断续续使用了两个年之后忍不住了,不得不说WordPress拥有丰富的插件和庞大的群众基础,但是实在是用起来不方便,每次写东西都要登录,进入后台管理,添加文章,排版很累(也使用过Markdown插件,效果不太好),当然也尝试过用其他方式写,比如用word写,简单配置一下,推送到WordPress上面,但是这样就没办法用Markdown了。然后就是安装插件让本来就很重的页面加载工作雪上加霜。。硬生生的把我写博客的积极性打击没了。还有一点就是以前的WordPress是跑在阿里云的云虚拟机上,不如服务器更方便捣鼓,哈哈,而且不能配置HTTPS,很鸡肋🐶。然后就是WordPress是PHP写的,太深的定制化需要搞PHP。索性换成Hexo,方便订制,加上Jenkins(工作的时候稍微学了一下,基本使用还是没有问题的),如虎添翼(杀鸡用牛刀),现在只需要在本地用Markdown写好文章,然后git提交到远程仓库,就会自动部署,只需要愉快的写就可以了,美滋滋。东西有点多,搞得时候没有记录,现在回头写有点麻烦,有空慢慢填坑。

🌞准备工作

  1. 服务器购买

    1. 我选择的是阿里云的服务器,因为我以前的博客就是在阿里云上面的,当时想要做备案,所以才选的国内的云服务商,如果你不需要备案选用国外的服务商,也可以。阿里云服务器有几种付费方式选择:预付费按量付费抢占式资源。这几种付费方式的官方说明:Jenkins Hexo 码云构建自动化博客站点 - 图1,相比较之下,抢占式资源还是比较划算的,但是抢占式资源按量付费不支持备案,我的是因为以前备过案了,就不需要再备案了,如果你想要备案,那只能选包年包月的预付费了。这个问题我也是刚发现。。就拿我需要的配置来说,我选了一台2核2G的服务器,自带的40G的系统盘,跑个博客和一些小型的程序比如jenkins,足够用了,实在不行以后再升配置,这也是云服务商的优势之处。如果选用预付费方式Jenkins Hexo 码云构建自动化博客站点 - 图2,便宜的一种也需要78一个月。如果选用按量付费Jenkins Hexo 码云构建自动化博客站点 - 图3,0.29/小时,0.29*24*30 = 208.8,选用抢占式实例Jenkins Hexo 码云构建自动化博客站点 - 图40.079*24*30 = 56.88,资源不是很紧俏,价格就不会变,在设定的可以承受的最高价之下就会自动扣钱,不会被释放。对于个人而言还是可以选择的。
  2. 域名购买

    1. 使用的域名是我几年前购买的,.top后缀的,当时就是因为便宜,好像刚开始引入这个后缀,一年几块钱,就一直用,用我的名字全拼,其实也有一个短域名fjh.im,实在name.com上面买的,但是.im域名是不能备案的也不能转入阿里云管理,就一直用作邮箱用,也可以解析跳转到现在的博客域名上面,但是只能解析一个地址,用来跳转主页。
  3. 域名备案:
    1.
  4. 域名解析:

    🌞配置服务器

  5. 安全组配置

🌞配置七牛云静态存储

🌞配置Nginx

🌞配置全站HTTPS

  1. 站点服务器HTTPS
  2. 七牛云静态存储HTTPS

🌞CDN 加速

  1. CDN使用的是“又拍云”的CDN加速服务,之所以再选择一个云服务商,一是可以将平时的流量分摊到两家服务商,保证都不超过免费套餐用量😁,二是尝试一下不同的服务商怎么用,捣鼓一下。

🌞Hexo安装测试

🌞Jenkins安装

🌞Jenkins配置

  1. 注意事项:

    1. 脚本执行npm install,提示找不到npm命令,解决办法:

      1. 在jenkins的脚本开始添加:
        1. #!/bin/sh -l
        2. export NODE_HOME=/usr/nodejs
        3. export PATH=$PATH:$NODE_HOME/bin
  1. jenkins脚本移动文件夹提示没有权限:解决办法
  1. 不同服务器之间传输数据:

    1. 有时候需要不同服务器在执行jenkins的build之后传输文件,需要配置scp文件传输
    2. 准备工作

      1. 安装scp命令工具:yum install openssh-clients,相互传输文件的两台机器都要安装
      2. jenkins里面安装插件:Publish over SSH
      3. 配置jenkins服务器和部署机器之间相互信任:

        1. 复制jenkins服务器用户目录下的.ssh/id_rsa.pub中的内容
        2. 将复制的内容添加到部署服务器的.ssh/authorized_keys文件中,一般情况下这个文件是空的,直接粘贴进去就行。
        3. 然后再使用jenkins构建的时候,仍然失败,提示权限不够,需要在第一次使用scp命令的时候需要自己先动手在shell终端中执行一次,然后使用scp随意复制一个文件过去,输入密码,之后再用jenkins复制文件就免输密码了。

🌞配置自启动项(systemctl)

  1. nginx配置自启动

    1. 进入/lib/systemd/system目录:[root@JH-demo sbin]# cd /lib/systemd/system/

    2. 创建nginx.service文件

      1. vim nginx.service
  1. [Unit]
  2. Description=nginx service
  3. After=network.target
  4. [Service]
  5. Type=forking
  6. ExecStart=/usr/local/nginx/sbin/nginx
  7. ExecReload=/usr/local/nginx/sbin/nginx -s reload
  8. ExecStop=/usr/local/nginx/sbin/nginx -s quit
  9. PrivateTmp=true
  10. [Install]
  11. WantedBy=multi-user.target
  • 说明: ```ini
  1. [Unit]:服务的说明
  2. Description:描述服务
  3. After:描述服务类别
  4. [Service]服务运行参数的设置
  5. Type=forking是后台运行的形式
  6. ExecStart为服务的具体运行命令
  7. ExecReload为重启命令
  8. ExecStop为停止命令
  9. PrivateTmp=True表示给服务分配独立的临时空间
  10. 注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
  11. [Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
  1. 3.
  2. 加入开机自启动:`# systemctl enable nginx`
  3. 4.
  4. 取消开机启动:`# systemctl disable nginx`
  5. 5.
  6. systmectl的其他命令:
  7. ```makefile
  8. # systemctl start nginx.service  启动nginx服务
  9. # systemctl stop nginx.service  停止服务
  10. # systemctl restart nginx.service  重新启动服务
  11. # systemctl list-units --type=service 查看所有已启动的服务
  12. # systemctl status nginx.service 查看服务当前状态
  13. # systemctl enable nginx.service 设置开机自启动
  14. # systemctl disable nginx.service 停止开机自启动
  1. jenkins配置自启动

🌞其他

  1. 配置快照策略

    1. 购买OSS存储资源包
    2. 制作快照
  2. 服务器迁移

    1. 磁盘快照制作自定义镜像
    2. 跨区域镜像复制使用

🌞愉快的写吧