记录一次云服务器迁移(二)

书接上回,迁移云服务器、安装宝塔踩得的一些坑之外,安装halo以及用宝塔配置django项目也有一些坑。

halo迁移

目前halo更新到2.x了,但是halo2.1的一些功能用不到,因此暂时没有继续升级到2.x

2024-4-15再次迁移服务器时,了解到1.4可以先升级到1.6,再去升级到2.x
1.6版本的升级链接

因此,以后可以直接装1.6了

安装docker

去年安装halo的时候选的是,先安装java环境再起halo。但是,一年的学习我对docker有了更多一点点的认识,所以这次选择了docker安装方法。

首先利用官方安装脚本安装docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

测试docker是否安装成功

docker run hello-world

若结果显示docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?,则运行如下命令:`

systemctl daemon-reload
systemctl restart docker.service

然后再次验证

docker run hello-world

设置开机启动

systemctl enable docker

查看docker版本

docker -v

docker开机启动某个实例(后面要用到)
添加参数–restart=always

docker run xxxxxxxxxx --restart=always 
docker update --restart=always xxx (创建时未设置,update命令更新)

安装halo

创建工作目录 (此处如果是迁移的话,直接通过整站备份得到的文件夹替换该.halo文件夹)

mkdir ~/.halo && cd ~/.halo

下载示例配置文件到工作目录

wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml

编辑配置文件,配置数据库或者端口等,配置参考

vim application.yaml

拉取1.6的 Halo 镜像

docker pull halohub/halo:1.6.0

创建容器

docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.6.0
  • -it: 开启输入功能并连接伪终端
  • -d: 后台运行容器
  • –name: 为容器指定一个名称
  • -p: 端口映射,格式为 主机(宿主)端口:容器端口 ,可在 application.yaml 配置。
  • -v: 工作目录映射。形式为:-v 宿主机路径:/root/.halo,后者不能修改。
  • –restart: 建议设置为 unless-stopped,在 Docker 启动的时候自动启动 Halo 容器。(–restart=always开机启动 )
  • 打开http://ip:端口号 即可看到安装引导界面。(记得在服务器上打开端口8090)

利用宝塔面板添加halo站点并配置nginx

  1. 点击左侧的 网站 菜单项,点击 添加站点 按钮。
    需要填写的表单信息如下:
    域名:填写您已经解析到当前服务器公网 IP 的域名。
    PHP版本:纯静态
    填写完成之后点击 提交 按钮即可。

  2. 设置SSL

  3. 修改配置文件
    在根节点添加:

upstream halo {
    server 127.0.0.1:8090;
}

其中的 8090 为 Halo 的运行端口,请按需修改。
在 server 节点添加:

location / {
    proxy_pass http://halo;
    proxy_set_header HOST $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

修改 server 节点中的location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 节点:

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    proxy_pass http://halo;
    expires      30d;
    error_log /dev/null;
    access_log off;
}

修改 server 节点中的location ~ .*\.(js|css)?$节点:

location ~ .*\.(js|css)?$
{
    proxy_pass http://halo;
    expires      12h;
    error_log /dev/null;
    access_log off; 
}

完整配置文件示例(仅包含关键部分):

upstream halo {
    server 127.0.0.1:8090;
}
server
{
    ...
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        proxy_pass http://halo;
        expires      30d;
        error_log /dev/null;
        access_log off;
    }
    
    location ~ .*\.(js|css)?$
    {
        proxy_pass http://halo;
        expires      12h;
        error_log /dev/null;
        access_log off; 
    }
    
    location / {
        proxy_pass http://halo;
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    ...
}

随后点击保存即可。如果配置不生效,请重载 Nginx 或者 重启 Nginx。
最后,访问域名即可进行 Halo 的初始化。

halo整站备份

点击系统->小工具->备份->整站备份
image.png
点击 备份,再点击链接即可自动下载
image.png
最终得到的zip文件即.halo文件夹
image.png
在新的服务器上创建.halo文件夹时,直接用该文件夹替换即可实现整站迁移。