前天晚上的时候,我的 Halo 博客突然就崩溃了。。。当时就看服务器,发现服务器宕机了,CPU 达到 99%。然后我试着重启我的 Halo 博客,可是却是不行。。。。看着我的 1核1G 的服务器,满脸的忧伤。但是想想我的服务器也快到期了,正好也趁着这个月是服务器采购季,我一不做二不休,去买了一个华为云服务器。薅了一个 2核4G 的服务器3年,看这个配置比之前的好了接近一倍的我,老脸终于浮上了菊花般的笑容。
可是这笑容却没有持续多久,因为我还要转移我的博客?。转眼一想,好吧,也不困难。
之前我的博客是直接通过java -jar halo.jar
来运行的,这种方式很麻烦,每次需要自己上传到,还要手动运行。实在是麻烦啊,所以这次我就用了 docker 部署。那么第一步就是要安装 Docker
首先说明一下的服务器环境:
这次安装 Docker 是按照官网的步骤一步一步操作,能安装成功,我这边的环境是能够安装成功的。
这里先附上 Centos 安装 Docker 的官方地址:https://docs.docker.com/install/linux/docker-ce/centos/
为了节省再打开一次网页的时间,下面我就讲所有的步骤贴出来
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl stop docker
众所周知,如果要使用 Docker 的官方镜像源,那么下载一个 image
不知道要等到猴年马月,反正我是等不了的。为了节省我的时间,也为了节省在座各位的时间,还是聪明的使用一个国内镜像源吧。注意:本文使用的163的Docke镜像源。
后面使用Docker安装镜像就非常快了,敬请享用吧。
至于安装 Halo ,当然也是按照 官方文档来安装的,同样的,为了节省大家的时间,本文直接说步骤。
由于是转移 Halo, 所以需要在服务器的用户目录下新建一个 .halo
**的文件夹。一般的命令是** mkdir ~/.halo
这一步,由于是转移博客所以,这个文件是之前就有的,我是从旧的服务器上面 直接传到 新的服务器的 .halo
目录下。
可以通过 ftp 工具转移,由于过于简单这里就不说了。我们来说说 SCP 命令。
scp root@服务器ip:/root/.halo/application.yml /root/.halo/application.yml
sudo docker pull ruibaby/halo
docker run --rm -it -d --name halo -p 8080:8080 -v ~/.halo:/root/.halo ruibaby/halo
application.yaml
配置。至此,我们的 Halo 就已经安装好了,其实还有一步就是更新 Halo,我还是贴一下命令:
# 停止容器
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
Halo 博客推荐使用 H2 数据库,但是爱捣鼓的我,怎么能满足一个H2 呢?于是我果断的使用了 MySQL。
安装 MySQL 我已经有了一篇文章,各位直接看已经写了的这篇文章。
Centos 环境中使用 Docker 安装 MySQL 指南
通过这篇文章也说了如何迁移数据库
在上面给出的文章中,我详细讲了 如何迁移 Docker 中的MySQL数据库,也就是下面的步骤:
# 导出数据库称为一个 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
既然这里要使用MySQL,而上文配置的application.yml
中的数据库连接却是使用的H2
数据库,那么这里就需要修改application.yml
中的数据库连接。
上图中的配置其实和官网的差不太多,我们需要修改的只有url、username、password
这三个属性,只要更具实际情况修改就可以了。
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
如果你的MySQL
和halo
都是使用Docker
部署的,那么spring.database.url
这个属性中的数据库 ip地址
必须要是容器的内部ip。
我们可以通过下面的指令获取容器的ip:
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-prod
这一步比较简单,我们只需要将旧服务器~/.halo
文件夹下除logs/
文件夹以外的所有内容复制到新服务器的~/.halo
文件夹。
之前写过一篇配置 Nginx 的文章,因为都是 Unix 系统,所以这篇文章在 本次迁移也是适用的。
配置好了之后,就是需要配置 HTTPS 了。
我的 HTTPS 还是使用 Certbot配置的。
之前写了一篇文章, 使用Certbot升级Http到Https,但是这篇文章是在 Ubuntu 下安装,我今天使用的 Centos ,所以还是需要贴一下步骤的。
yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
yum install certbot python2-certbot-nginx
sudo certbot --nginx
在这一步的时候,我遇到了报错:
开始报错是因为没有停止 nginx,于是我执行了 nginx -s stop
。但是还是报错,于是我 google 了。
不管是够报这个错,使用 certbot 都需要先停止 nginx
这个报错我在网上搜索到的结果是 urllib3
安装不正确,所以我重新安装了 urllib3
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 的软连接。
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 博客圆满完成了,现在已经迁移到了新的服务器。中途虽然遇到了一些问题,但幸运的是么有数据的丢失。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有