陆陆续续折腾大半个月,把露站升到v4.2.1了。原本是想升到v4.2.0的,但是摸索摸索着还没成功升级呢,新版本就发布了〒▽〒
感想包括但不限于:docker真耐糟 和 我再也不暴力复制粘贴文件了!!!
超级小白一只,本篇不全面不完善不专业,可能会有很多问题及隐患。仅记录从 v4.1.6 升级到 v4.2.1 中遇到的问题和解决办法
升级过程
首先我强烈建议学习下GIT相关概念以及相关指令,至少有个概念能知道错在哪里或者这段代码究竟有什么用
我参考的是:30分钟弄懂所有工作Git必备操作 / Git 入门教程
如果对GIT一无所知的话建议找其他更加详细的教程观看,并查询Git中文文档
通过 Git 拉取上游( upstream 即官方)版本进展
参考pullopen 的升级教程:打开 Github Desktop,点击左上角后右键对应仓库,再点击 Open in Command Prompt 打开命令行工具
git remote -v
// 是否有 upstream,如果有:
git fetch --tags upstream
// 如果没有,则通过下面一行指令进行添加
git remote add upstream https://github.com/mastodon/mastodon.git
git merge v4.2.1 // 输入要升级的tag名
接下来进行融合操作,一个个处理冲突文件,选择接受哪一方改动。如果拿不准的话建议全部同意,成功构建 docker 镜像文件没问题后再重新进行魔改。
这里不知道选错了什么文件出了问题,后面因为已经合并完成,也不知道怎么回滚合并,僵持在那一直错误无法成功构建;也有可能是这一个版本的 workflows 里没有给通用即时构建文件,只有一个 build-nighly,每天早上十点才给我 docker hub里推送镜像文件,导致当时的我误以为构建出错。
因为这里操作不当而导致的问题请参考文章最下面的问题解决环节。
因为 4.2 版本后的 workflows 文件进行了变化,需要重新填入自己的 Github 和 Docker Hub 账号,参考pullopen 魔改教程的「2.在DockerHub中建立属于自己的镜像」部分内容,也可以参考我的这次 Commit 进行修改
因为没有即时推送文件嘛,所以照着其他文件依葫芦画瓢写了一个:复制粘贴build-nightly.yml
,将其重命名为build-image.yml
,点开后把里面所有内容删掉,然后把以下内容放进去,不要忘记修改push_to_images:
的值
name: Build container image
on:
workflow_dispatch:
push:
branches:
- 'main' // 根据你的分支名来写,如果没有新创建分支,那默认就是main
tags:
- '*'
pull_request:
paths:
- .github/workflows/build-image.yml
- Dockerfile
permissions:
contents: read
packages: write
jobs:
compute-suffix:
runs-on: ubuntu-latest
steps:
- id: version_vars
env:
TZ: Etc/UTC
run: |
echo mastodon_version_prerelease=nightly.$(date +'%Y-%m-%d')>> $GITHUB_OUTPUT
outputs:
prerelease: ${{ steps.version_vars.outputs.mastodon_version_prerelease }}
build-image:
needs: compute-suffix
uses: ./.github/workflows/build-container-image.yml
with:
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: true
cache: false
push_to_images: |
XXXXX/mastodon // 将 XXXXX 替换为你的 Docker Hub 名字
# version_prerelease: ${{ needs.compute-suffix.outputs.prerelease }}
labels: ${{ needs.compute-suffix.outputs.prerelease }}
flavor: |
latest=auto
tags: |
type=edge,branch=main
type=raw,value=edge
type=ref,event=pr
# type=schedule,pattern=${{ needs.compute-suffix.outputs.prerelease }}
secrets: inherit
接下来就和以前一样,等编译并推送到 Docker Hub 后就可以在服务器端拉取并重启了,以前每次编译要等两三个小时,现在只要十分钟就行。之后在服务器端:
cd /home/mastodon/mastodon
docker pull brsu/mastodon:edge // edge为最新编码的tag,如果需要创建特定版本的tag,则将edge改成tag名
docker-compose down
docker-compose up -d // 重启docker-compose
随后根据官方v4.2.0更新说明步骤进行:
SKIP_POST_DEPLOYMENT_MIGRATIONS=true
docker-compose run --rm -e SKIP_POST_DEPLOYMENT_MIGRATIONS=true web bundle exec rails db:migrate
docker-compose down
docker-compose up -d // 重启docker-compose
docker-compose run --rm web bundle exec rails db:migrate
docker-compose run --rm web bin/tootctl search deploy --reset-chewy
这一套组合下来,应该就没什么问题了!好耶,恭喜你成功升级到v4.2.1!
遇到的问题
因暴力复制粘贴导致的权限出错
在合并代码的时候不知道哪里出现问题,于是把官方的仓库用压缩包形式下载下来后直接解压覆盖...一顿操作后虽然能够成功编译和构建镜像文件了,但是没想到 tootctl 指令用不了了
root@:/home/mastodon/mastodon# tootctl version
Creating mastodon_web_run ... done
[FATAL tini (8)] exec bin/tootctl failed: Permission denied
排查几天后发现,欸?蓝盒子的镜像文件指令能用欸...?随后意识到是我的镜像文件出现了问题,但究竟是哪里出现问题了呢...再之后查FATAL tini
查到了这条 Issues...好吧原来是我的暴力操作导致的
想重新git合并合并不了,想回滚也不知道滚到哪去。想着要不重新fork一份文件全部重来,在炸库前学习了下git相关的指令概念,发现直接创建一个分支就行了,然后我就通过复制官方分支 stable-4.2
来新建了一条分支,修改后重新编译构建,成功解决了