avatar

18.记一次博客迁移——从github到阿里云

一、前言

这几天正直双11,阿里云搞活动,于是还是新用户的我,团购了3年阿里云服务器,当然配置是最低级的那种。既然买了服务器,趁着备案期间,左右没事,就先把博客弄过来吧。废话不多说,下面是我搭建博客的步骤。用小本本记下来,以后备用。

二、准备工作

  1. 服务器环境:
    • centos7 7.4.1708
  2. 软件工具
    • SSH远程终端工具:xshell
  3. 预期效果
    • 博客完美运行,可使用127.0.0.1:4000访问
    • 搭配域名,使用nginx达到域名访问的效果

三、搭建博客

  1. 安装rvm

    • 为啥要安装rvm?因为我们jekyll是运行在ruby上。而ruby官方建议使用rvm装。所以我们就装吧。
    • 安装步骤:
      1. 执行gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB命令,该命令是从rvm官网拷贝下来的。它的官网是:https://rvm.io/。执行完后如图所示:
      2. 等待上方执行完毕后,执行\curl -sSL https://get.rvm.io | bash -s stable命令。安装rvm。静待它执行完毕,结果如图所示:
      3. 一般如果安装成功后,会出现上图红框所示。下面就按照它的提示执行下,即source /etc/profile.d/rvm.sh
      4. 执行rvm -v,查看是否安装成功。
  2. 安装ruby

    1. rvm安装完毕了。接下来使用rvm安装ruby吧。
    2. 使用rvm list known列出可安装ruby的版本
    3. 我们这边安装ruby 2.5.1版本。输入rvm install 2.5.1.
    4. 安装完后使用ruby -v查看已安装ruby的版本。输入gem -v查看gem的版本
    5. 输入命令gem sources --add https://mirrors.tuna.tsinghua.edu.cn/rubygems/ --remove https://rubygems.org/使用清华源,并且移除默认的源
    6. 输入gem sources -l查看gem使用的源
  3. 安装jekyll

    1. 接下来就剩安装jekyll了,然后我们就可以搭建了一个属于我们自己的博客了。
    2. 输入命令:gem install jekyll bundler
    3. 输入命令jekyll -v
    4. 至此jekyll就安装好了。接下来因为我是迁移。所以我本地有一份备份的数据。我直接把文件夹copy到服务器的/opt/local/blog下。
    5. /opt/local/blog下执行jekyll server -I -B命令启动jekyll。出现如下错误。
      • 如果目录下有Gemfile.lock文件,则删除该文件后按照提示,我们执行下bundle install出现如下提示,我们先不管,让他执行下去
    6. 执行结束后,我们再输入jekyll server -I -B启动我们的jekyll服务.(-I:开启新增文件自动编译,-B:后台运行)
    7. 到此,博客迁移完成。

四、安装宝塔面板

  1. 为啥要装这个面板:
    • 因为该面板可以方便的管理Linux系统资源,支持一键创建网站、FTP、数据库、SSL;安全管理,计划任务,文件管理,PHP多版本共存及切换;自带LNMP与LAMP等等。所以我们装一个玩玩吧。
  2. 宝塔官网:https://www.bt.cn/.这里我们安装5.9版本。
  3. 输入yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh,安装5.9免费版
  4. 安装完成后,会把访问面板的连接、用户名、密码输出到屏幕上。如图:
  5. 接下来就可以登录该地址玩耍了~~

五、配置nginx

  1. 登录宝塔后,他会弹出界面让你选择是否需要安装LAMP或者LNMP。因为我不会PHP。所以这里我就只装nginx。
  2. 安装完nginx后。他的配置目录在/www/server/nginx/conf下。我们新建个conf.d文件夹。以后我们所有的配置都放到该文件夹下。
  3. 编辑/www/server/nginx/conf/nginx.conf文件。把/www/server/nginx/conf/conf.d下面的所有*.conf包含进来
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    .....
    http
    {
    ....

    server
    {
    #监听888端口
    listen 888;
    #匹配指定域名
    server_name www.bt.cn;
    # 主页html文件名
    index index.html index.htm index.php;
    #跟路径
    root /www/server/phpmyadmin;

    #error_page 404 /404.html;
    include enable-php.conf;

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
    expires 30d;
    }

    location ~ .*\.(js|css)?$
    {
    expires 12h;
    }

    location ~ /\.
    {
    deny all;
    }
    #访问日志
    access_log /www/wwwlogs/access.log;
    }
    include /www/server/panel/vhost/nginx/*.conf;
    #把`/www/server/nginx/conf/conf.d`下面的所有*.conf包含进来 使用相对路径
    include conf/conf.d/*.conf;
    }
  4. conf.d目录,创建我们自己配置文件jekyll.conf
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    server{
    #监听80端口
    listen 80;
    #匹配指定域名
    server_name blog.zyzling.top;
    #所有的请求
    location / {
    #转发请求到本地的jekyll
    proxy_pass http://localhost:4000;
    }
    }
  5. 重启nginx(service nginx restart,至此可以使用域名blog.zyzling.top访问自己的博客了

六、编写jekyll自启动脚本

  1. centos自启动脚本可以放到/etc/init.d目录下。我们到改目录创建我们的启动脚本startBlog.sh。该脚本是我自己百度拼凑的。所以写的不怎么好。脚本内容如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    #!/bin/bash
    # chkconfig: 345 80 20
    # description: start the jekyll server
    #
    # Source function library

    prog=startBolg
    #博客的根路径
    BLOG_HOME=/opt/local/blog
    #jekyll命令的位置
    JEKYLL_HOME=/usr/local/rvm/rubies/ruby-2.5.1/bin
    #导入环境变量
    export PATH=$JEKYLL_HOME:$PATH

    ##################启动Jekyll服务#####################
    startBlog()
    {
    #### 获取指定进程的PID
    JEKYLL_PID=`ps -ef | grep jekyll | grep -v grep | awk '{print $2}'`
    if [ ! -n "$JEKYLL_PID" ]; then
    echo "starting jekyll..."
    cd $BLOG_HOME
    jekyll server -I -B
    else
    #PID不为空,则提示jekyll已经运行,并且打印端口
    echo "jekyll server already running.PID is $JEKYLL_PID"
    fi
    }

    ################停止Jekyll服务######################
    stopBlog(){
    echo "stoping jekyll..."
    #### 获取指定进程的PID,结束进程时用
    JEKYLL_PID=`ps -ef | grep jekyll | grep -v grep | awk '{print $2}'`
    ### 先判断pid是否为空,如果不为空就kill -9,如果为空则说明没有运行jekyll
    if [ ! -n "$JEKYLL_PID" ]; then
    echo "jekyll server don't run.."
    else
    echo "kill jekll pid is $JEKYLL_PID"
    kill -9 $JEKYLL_PID
    fi
    }

    case "$1" in
    start)
    startBlog
    ;;
    stop)
    stopBlog
    ;;
    restart)
    stopBlog
    startBlog
    ;;
    *)
    echo "Usage: $prog {start|stop|restart}"
    ;;
    esac
    exit 0
  2. 2019-1-7 修改startBlog,实现jekyll自动加载博文并且终端结束也不会断开。主要使用了nohup命令。关于nohup命令大家可以自行百度下。我也是小白~~文件如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #!/bin/bash
    # chkconfig: 2345 100 20
    # description: start the jekyll server
    #
    # Source function library

    prog=startBolg
    #博客的根路径
    BLOG_HOME=/opt/local/blog
    #jekyll命令的位置
    #JEKYLL_HOME=/usr/local/rvm/gems/ruby-2.5.1/bin:/usr/local/rvm/gems/ruby-2.5.1@global/bin:/usr/local/rvm/rubies/ruby-2.5.1/bin
    #JEKYLL_HOME=/usr/local/rvm/gems/ruby-2.5.1/bin/:/usr/local/rvm/rubies/ruby-2.5.1/bin/:/usr/local/rvm/gems/ruby-2.5.1@global/bin/
    #JEKYLL_HOME=/usr/local/rvm/gems/ruby-2.5.1/bin/bundle:/usr/local/rvm/rubies/ruby-2.5.1/bin/bundle
    JEKYLL_HOME=/usr/local/rvm/rubies/ruby-2.5.1/bin/:/usr/local/rvm/gems/ruby-2.5.1/bin/:/usr/local/rvm/gems/ruby-2.5.1/bin/bundle
    #导入环境变量
    export PATH=$JEKYLL_HOME:$PATH
    #echo $PATH
    ##################启动Jekyll服务#####################
    startBlog()
    {
    #### 获取指定进程的PID
    JEKYLL_PID=`ps -ef | grep jekyll | grep -v grep | awk '{print $2}'`
    if [ ! -n "$JEKYLL_PID" ]; then
    echo "starting jekyll..."
    cd $BLOG_HOME
    #主要修改了这里,使用了nohup命令
    nohup jekyll server -I >/dev/null &
    #bundle exec jekyll server -I -B
    #/usr/local/rvm/gems/ruby-2.5.1/bin/jekyll server -I -B
    else
    #PID不为空,则提示jekyll已经运行,并且打印端口
    echo "jekyll server already running.PID is $JEKYLL_PID"
    fi
    }

    ################停止Jekyll服务######################
    stopBlog(){
    echo "stoping jekyll..."
    #### 获取指定进程的PID,结束进程时用
    JEKYLL_PID=`ps -ef | grep jekyll | grep -v grep | awk '{print $2}'`
    ### 先判断pid是否为空,如果不为空就kill -9,如果为空则说明没有运行jekyll
    if [ ! -n "$JEKYLL_PID" ]; then
    echo "jekyll server don't run.."
    else
    echo "kill jekll pid is $JEKYLL_PID"
    kill -9 $JEKYLL_PID
    fi
    }

    case "$1" in
    start)
    startBlog
    ;;
    stop)
    stopBlog
    ;;
    restart)
    stopBlog
    startBlog
    ;;
    *)
    echo "Usage: $prog {start|stop|restart}"
    ;;
    esac
    exit 0
  3. 更改文件为startBlog并添加执行权限。运行试试效果。结果如下:
  4. 执行chkconfig startBlog on加入启动项。重启后验证是否成功。

七、总结

  1. 这次迁移,又复习了下如何搭建jekyll以及如何写简单的shell脚本。
  2. 总之收货还是有的。其次还有点问题。后面的自启动jekyll的shell脚本还是有点问题。不能做到开启启动。应该是因为环境变量的问题。但是不知道怎么去解决了,原谅我对linux玩不熟。望大家指点。然后jekyll有个毛病,即如果是后台运行,你添加文件到_post目录,他不会自动加载,得非后台时才会自动加载。但是我们终端关闭后,后台也自动结束了。这个问题没有解决。网上应该有解决方案。留到下次解决吧
  3. 到现在,只能在每次加入新博文的时候,手动去执行startBlog restart命令去重启jekyll。这点待优化
  4. 到现在,需要在重启服务器后,自己执行下startBlog start命令,然后后面新增博文也不用执行startBlog restart命令重启jekyll服务了。 add by 2019-01-07

评论