vicalloy / outline-docker-compose

Install a self-hosted Outline wiki instance in a couple of minutes
BSD 3-Clause "New" or "Revised" License
738 stars 120 forks source link

Outline升级问题 #50

Closed S4kur4 closed 8 months ago

S4kur4 commented 1 year ago

我是这个项目比较早期的用户,当时部署完测试良好并且立马在团队内投入使用。不过使用了一段时间发现Outline落后了很多个版本,并且当时正在用的版本(v0.63.0)的确有一些bug,所以打算备份数据做一次升级。

先是尝试直接把所有依赖的docker镜像更新,结果无法正常使用。后来又发现项目的安装脚本更新了,在新的环境上的确能安装到最新的Outline版本,但是依然无法把老版本的数据备份提供给新环境使用。也尝试了多次只把Outline或者个别的镜像更新,其他镜像保留老版本,但都失败而终了。

目前是把Outline固定在v0.63.0这个版本了,Redis、Postgres这些其他镜像也都保留一开始安装时的版本。唯一能升级的办法貌似只能重新搭建一个,但是数据迁移成了问题,手工去重新编辑文章太麻烦了。

有啥好的办法吗?

vicalloy commented 1 year ago

最初的镜像里统一用的 latest 版,升级后容易出现问题。 后续的脚本里各软件版本都有明确指定。

我对自己用的环境做了个升级。 目前发现:

  1. Postgres/Minio 不能随便换版本。换版本后会无法启动。
  2. Outline可以正常升级不受影响。

建议做法: 更新到最版本的 outline-docker-composescripts/config.sh 中指定各软件的版本。

注:查看版本方法

sudo docker-compose exec wk-minio minio --version
sudo docker-compose exec wk-postgres postgres --version
enjoy-learning-everything commented 1 year ago

可以考虑使用导入和导出功能,会把图片等附件一起导出,导入的时候引用关系也会处理好,文章内容不需要重新编辑 就是要注意新搭建的时候注意修改参数以下参数来放开outline以及存储服务对上传文件的限制: 修改env.outline文件中参数值,单位为Byte: AWS_S3_UPLOAD_MAX_SIZE=102400000 env.outline文件中添加参数,单位为Byte: MAXIMUM_IMPORT_SIZE=102400000 如果你外部自己还有一个nginx,你还需要注意修改nginx的client_max_body_size参数来提高nginx对上传文件的大小限制,比如设置client_max_body_size 100m; 这些所有值都需要大于你导出的文件大小。

wangweitung commented 8 months ago

我是这个项目比较早期的用户,当时部署完测试良好并且立马在团队内投入使用。不过使用了一段时间发现Outline落后了很多个版本,并且当时正在用的版本(v0.63.0)的确有一些bug,所以打算备份数据做一次升级。

先是尝试直接把所有依赖的docker镜像更新,结果无法正常使用。后来又发现项目的安装脚本更新了,在新的环境上的确能安装到最新的Outline版本,但是依然无法把老版本的数据备份提供给新环境使用。也尝试了多次只把Outline或者个别的镜像更新,其他镜像保留老版本,但都失败而终了。

目前是把Outline固定在v0.63.0这个版本了,Redis、Postgres这些其他镜像也都保留一开始安装时的版本。唯一能升级的办法貌似只能重新搭建一个,但是数据迁移成了问题,手工去重新编辑文章太麻烦了。

有啥好的办法吗?

你导入导出数据成功了吗?

vicalloy commented 8 months ago

Postgres和minio要固定版本,不然服务可能跑不起来。 Outline自身有数据库升级到处理,可以直接将Outline升级为新版本。

wangweitung commented 8 months ago

Postgres和minio要固定版本,不然服务可能跑不起来。 Outline自身有数据库升级到处理,可以直接将Outline升级为新版本。

谢谢,升级outline至0.72.2后可以导出了。

wangweitung commented 8 months ago

新增一个问题:

旧的outline有多个账户,每个目录不同用户有不同权限,这个要如何迁移?

vicalloy commented 8 months ago

新增一个问题:

旧的outline有多个账户,每个目录不同用户有不同权限,这个要如何迁移?

一直是一个人用,没注意过这个问题。

fan-wen commented 4 months ago

最近折腾了很久这个升级,终于搞定了。楼上各位说的都很有帮助,主要的问题出在1) Postgres/Minio 版本不能换,2) 不能更换为local storage(否则之前的attachment链接失效)

我是从版本0.65.2升级到最新0.78.2.在docker-compose.yml中,保留其他的image信息,仅仅修改wk-outline下: image: outlinewiki/outline:0.75.2 (我的配置在这里

  wk-outline:
    image: outlinewiki/outline:0.75.2
    command: sh -c "yarn db:migrate --env production-ssl-disabled && yarn start"
    environment:
      - DATABASE_URL=postgres://user:pass@wk-postgres:5432/outline
      - DATABASE_URL_TEST=postgres://user:pass@wk-postgres:5432/outline-test
      - REDIS_URL=redis://wk-redis:6379
      - AWS_S3_UPLOAD_BUCKET_NAME=outline-bucket
    env_file:
      - ./env.outline
      - ./env.oidc
    restart: always
    depends_on:
      - wk-postgres
      - wk-redis
      - wk-minio
    networks:
      - outlinewiki

然后重新pull outline这个image(非常重要,否则会pull全部image——之前的latest tag继续保留即可,不要改成具体版本,否则如果版本跟local不一样,也会重新pull 并且导致不兼容)

docker-compose pull wk-outline

然后更新数据库

docker compose run --rm wk-outline yarn db:migrate --env=production-ssl-disabled

在env.outline中,添加这一行(非常重要) FILE_STORAGE=s3

之所以继续选择s3而不是local,是因为我发现之前保存的附件格式都有点奇怪,明明是一个image,但是保存成一个folder(xxx.png),里面还有文件。如果改成FILE_STORAGE=local,就会直接读取这个文件,出现错误“EISDIR: illegal operation on a directory, read"

@S4kur4