前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Halo 博客迁移日记

Halo 博客迁移日记

作者头像
飞翔的竹蜻蜓
发布2020-07-08 09:34:16
2.5K0
发布2020-07-08 09:34:16
举报

前天晚上的时候,我的 Halo 博客突然就崩溃了。。。当时就看服务器,发现服务器宕机了,CPU 达到 99%。然后我试着重启我的 Halo 博客,可是却是不行。。。。看着我的 1核1G 的服务器,满脸的忧伤。但是想想我的服务器也快到期了,正好也趁着这个月是服务器采购季,我一不做二不休,去买了一个华为云服务器。薅了一个 2核4G 的服务器3年,看这个配置比之前的好了接近一倍的我,老脸终于浮上了菊花般的笑容。

可是这笑容却没有持续多久,因为我还要转移我的博客?。转眼一想,好吧,也不困难。

首先开始搭建环境

之前我的博客是直接通过java -jar halo.jar来运行的,这种方式很麻烦,每次需要自己上传到,还要手动运行。实在是麻烦啊,所以这次我就用了 docker 部署。那么第一步就是要安装 Docker

安装 Docker

首先说明一下的服务器环境:

  • 系统:Centos 7
  • 内存:4G

这次安装 Docker 是按照官网的步骤一步一步操作,能安装成功,我这边的环境是能够安装成功的。

这里先附上 Centos 安装 Docker 的官方地址:https://docs.docker.com/install/linux/docker-ce/centos/

为了节省再打开一次网页的时间,下面我就讲所有的步骤贴出来

SET UP THE REPOSITORY
  1. 安装必要的包
代码语言:javascript
复制
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
  1. 设置稳定的仓库
代码语言:javascript
复制
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
INSTALL DOCKER ENGINE - COMMUNITY
代码语言:javascript
复制
sudo yum install docker-ce docker-ce-cli containerd.io
Start Docker
代码语言:javascript
复制
sudo systemctl start docker
Stop Docker
代码语言:javascript
复制
sudo systemctl stop docker

使用国内镜像

众所周知,如果要使用 Docker 的官方镜像源,那么下载一个 image 不知道要等到猴年马月,反正我是等不了的。为了节省我的时间,也为了节省在座各位的时间,还是聪明的使用一个国内镜像源吧。注意:本文使用的163的Docke镜像源。

  1. 打开或创建配置文件 sudo vim /etc/docker/daemon.json
  2. 在配置文件中新增配置 "registry-mirrors": "https://hub-mirror.c.163.com" # 如果有了 registry-mirrors 这个key,直接新增https://hub-mirror.c.163.com 这个源就可以了
  3. 重启 Docker systemctl restart docker

后面使用Docker安装镜像就非常快了,敬请享用吧。

安装 Halo

至于安装 Halo ,当然也是按照 官方文档来安装的,同样的,为了节省大家的时间,本文直接说步骤。

由于是转移 Halo, 所以需要在服务器的用户目录下新建一个 .halo**的文件夹。一般的命令是** mkdir ~/.halo

拉取 application.yml

这一步,由于是转移博客所以,这个文件是之前就有的,我是从旧的服务器上面 直接传到 新的服务器的 .halo目录下。

可以通过 ftp 工具转移,由于过于简单这里就不说了。我们来说说 SCP 命令。

代码语言:javascript
复制
scp root@服务器ip:/root/.halo/application.yml /root/.halo/application.yml
拉取最新 Halo 镜像
代码语言:javascript
复制
sudo docker pull ruibaby/halo
创建容器并运行
代码语言:javascript
复制
docker run --rm -it -d --name halo -p 8080:8080  -v ~/.halo:/root/.halo ruibaby/halo
  1. --rm:停止之后自动删除容器。
  2. --name:容器名。
  3. -p:占用端口,前者为宿主机端口,后者为 Halo 的运行端口,可在 application.yaml 配置。
  4. -v:目录映射,一般不要修改。

至此,我们的 Halo 就已经安装好了,其实还有一步就是更新 Halo,我还是贴一下命令:

代码语言:javascript
复制
# 停止容器
sudo docker stop halo

# 拉取最新的 Halo 镜像
sudo docker pull ruibaby/halo

# 创建容器
docker run --rm -it -d --name halo -p 8080:8080  -v ~/.halo:/root/.halo ruibaby/halo

安装MySQL

Halo 博客推荐使用 H2 数据库,但是爱捣鼓的我,怎么能满足一个H2 呢?于是我果断的使用了 MySQL。

安装 MySQL 我已经有了一篇文章,各位直接看已经写了的这篇文章。

Centos 环境中使用 Docker 安装 MySQL 指南

通过这篇文章也说了如何迁移数据库

迁移数据库

在上面给出的文章中,我详细讲了 如何迁移 Docker 中的MySQL数据库,也就是下面的步骤:

代码语言:javascript
复制
# 导出数据库称为一个 sql
docker exec -it  mysql-dev mysqldump -uroot -p123456 halodb > /opt/sql_bak/halodb.sql
# 将需要执行的sql cp 到目标容器,也就是下面:mysql-dev 
docker cp /opt/sql_bak/halodb.sql  mysql-dev:/opt/halodb.sql  
# 进入目标容器
docker exec -it mysql-dev /bin/bash
# 登陆mysql
mysql -uroot -p123456
# 创建数据库
create database halodb;
# 使用 halodb
use halodb;
# 执行 sql
source  /opt/halodb.sql  

修改application.yml

既然这里要使用MySQL,而上文配置的application.yml中的数据库连接却是使用的H2数据库,那么这里就需要修改application.yml中的数据库连接。

上图中的配置其实和官网的差不太多,我们需要修改的只有url、username、password这三个属性,只要更具实际情况修改就可以了。

代码语言:javascript
复制
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
      # MySQL 配置,如果你需要使用 H2Database,请注释掉该配置并取消注释上方 H2Database 的配置。
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://172.17.0.2:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: root
    password: 123456
注意

如果你的MySQLhalo 都是使用Docker部署的,那么spring.database.url这个属性中的数据库 ip地址必须要是容器的内部ip。

我们可以通过下面的指令获取容器的ip:

代码语言:javascript
复制
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-prod

迁移主题文件夹和上传文件

这一步比较简单,我们只需要将旧服务器~/.halo文件夹下除logs/文件夹以外的所有内容复制到新服务器的~/.halo文件夹。

配置 Nginx

之前写过一篇配置 Nginx 的文章,因为都是 Unix 系统,所以这篇文章在 本次迁移也是适用的。

配置 HTTPS

配置好了之后,就是需要配置 HTTPS 了。

我的 HTTPS 还是使用 Certbot配置的。

之前写了一篇文章, 使用Certbot升级Http到Https,但是这篇文章是在 Ubuntu 下安装,我今天使用的 Centos ,所以还是需要贴一下步骤的。

Enable the optional channel

代码语言:javascript
复制
yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional

Install Certbot

代码语言:javascript
复制
yum install certbot python2-certbot-nginx

配置nginx

代码语言:javascript
复制
sudo certbot --nginx

在这一步的时候,我遇到了报错:

开始报错是因为没有停止 nginx,于是我执行了 nginx -s stop。但是还是报错,于是我 google 了。

不管是够报这个错,使用 certbot 都需要先停止 nginx

这个报错我在网上搜索到的结果是 urllib3安装不正确,所以我重新安装了 urllib3

代码语言:javascript
复制
pip uninstall urllib3
pip install urllib3

上面提示成功后,我又重新执行了certbot --nginx,但是还是报错ImportError:No modelua named urllib3.exceptions,于是我又执行了pip install --upgrade --force-reinstall 'requests==2.6.0' urllib3

可以看到,上面执行了pip install --upgrade --force-reinstall 'requests==2.6.0' urllib3之后,提示安装成功了。

然后我执行了certbot --nginx命令,但是还是报错:

这个错误的原因是找不到 nginx 命令,一直我创建了 nginx 的软连接。

代码语言:javascript
复制
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
ln -s /usr/local/nginx/conf/ /etc/nginx

最后一次,我直接执行certbot certonly --nginx命令,然后终于成功了。

接下来就是在 nginx.conf上配置 HTTPS了,在上文中我们就有讲述了,这里就不说了。

结语

好了,至此,我的迁移 Halo 博客圆满完成了,现在已经迁移到了新的服务器。中途虽然遇到了一些问题,但幸运的是么有数据的丢失。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先开始搭建环境
    • 安装 Docker
      • SET UP THE REPOSITORY
      • INSTALL DOCKER ENGINE - COMMUNITY
      • Start Docker
      • Stop Docker
    • 使用国内镜像
      • 安装 Halo
        • 拉取 application.yml
        • 拉取最新 Halo 镜像
        • 创建容器并运行
    • 安装MySQL
      • 迁移数据库
        • 修改application.yml
          • 注意
      • 迁移主题文件夹和上传文件
      • 配置 Nginx
      • 配置 HTTPS
        • Enable the optional channel
          • Install Certbot
            • 配置nginx
            • 结语
            相关产品与服务
            云数据库 SQL Server
            腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档