怎么从gogs:0.12升级到gogs:latest?

Gogs 版本:0.12
系统类型及版本:ubuntu18.04
数据库:sqlite3
问题描述:
通过 docker pull 将image 升级到 gogs:latest 后,执行 docker run 失败。
错误日志:

gogs    | 2020/09/25 21:06:22 [FATAL] [...o/gogs/internal/route/install.go:75 GlobalInit()] Failed to initialize ORM engine: open database: failed to connect to `host=127.0.0.1 user=root database=gogs`: dial error (dial tcp 127.0.0.1:3306: connect: connection refused)
gogs    | 2020/09/25 21:06:23 [ INFO] Gogs 0.13.0+dev

我已按照 CHANGELOG 修改了 app.ini 文件,还是同样的错误,不知道是不是遗漏了什么。
请问有没有 migrate script ?
以下是我修改后的配置文件 app.ini,隐去了一些信息:

BRAND_NAME = Gogs
RUN_USER   = git
RUN_MODE   = prod

[database]
TYPE     = sqlite3
HOST     = 127.0.0.1:3306
NAME     = gogs
USER     = root
PASSWORD =  
SSL_MODE = disable
PATH     = /data/gogs.db

[repository]
ROOT = /data/git/gogs-repositories

[server]
DOMAIN           = xxx.xx.cn
HTTP_PORT        = 3000
EXTERNAL_URL     = https://xxx.xx.cn:2333/
DISABLE_SSH      = false
SSH_PORT         = 22
START_SSH_SERVER = false
OFFLINE_MODE     = false

[email]
ENABLED = true
HOST    = smtp.163.com:465
FROM    = [email protected]
USER    = [email protected]
PASSWD  = xxxxxx

[auth]
REGISTER_EMAIL_CONFIRM      = true
ENABLE_EMAIL_NOTIFICATION   = true
DISABLE_REGISTRATION        = true
ENABLE_REGISTRATION_CAPTCHA = false
REQUIRE_SIGNIN_VIEW         = true

[picture]
DISABLE_GRAVATAR        = false
ENABLE_FEDERATED_AVATAR = false

[session]
PROVIDER = file

[log]
MODE      = console, file
LEVEL     = Info
ROOT_PATH = /data/log

[security]
INSTALL_LOCK = true
SECRET_KEY   = xxxxxxxxxxxxxxx

[git.timeout]
MIGRATE     = 3600
MIRROR      = 3600
CLONE       = 3600
PULL        = 3600

感谢反馈!

方便发一下使用到到具体 docker 命令吗?感觉像是修改后到 app.ini 并没有在容器启动的时候读到。

如果问题一时无法解决,可以回退 gogs/gogs:0.12,也是支持新版配置的

我用的是 docker-compse
docker-compose.yml 文件如下:

version: "3.3"
services:
  gogs:
    image: gogs/gogs
    container_name: gogs
    ports:
      - "127.0.0.1:10022:22"
      - "127.0.0.1:3000:3000"
    environment:
      - PUID=1001
      - PGID=1001
    volumes:
      - /home/git/gogs/data:/data
      - /home/git/.ssh:/data/git/.ssh
      - /etc/localtime:/etc/localtime
    restart: always
    networks:
      - gogs

networks:
  gogs:

我的步骤如下:

  1. docker-compose down docker-compose pull docker-compose up
    结果失败报错了,才发现有 CHANGELOG
  2. 修改 /home/git/gogs/data/gogs/conf/app.ini 如前文所提。
  3. docker-compose down docker-compose pull docker-compose up
    还是失败了。错误一致

hmm, 你是如何判定启动失败的?

gogs    | 2020/09/25 21:06:22 [FATAL] [...o/gogs/internal/route/install.go:75 GlobalInit()] Failed to initialize ORM engine: open database: failed to connect to `host=127.0.0.1 user=root database=gogs`: dial error (dial tcp 127.0.0.1:3306: connect: connection refused)
gogs    | 2020/09/25 21:06:23 [ INFO] Gogs 0.13.0+dev

日志的打印顺序看起来不正常,如果连接失败先打印 FATAL 的话,是不可能再打印 INFO 级别的日志的。

我本地尝试了一下。。docker-compose up 可以起来。。

我印象中是这两行不断交替出现,然后打开网页是 502 ,明天我把日志截完整一点。
是不是我的 sqlite 端口设置的有问题啊?我没用过 sqlite 所以不太了解,原来的配置是自动生成的。

根据我的经验判断。。就是你改的配置文件没有并docker-compose读到。

这个错误消息的连接字符串是 Postgres 的,因为 0.13 开始默认数据库是 Postgres,你的 TYPE = sqlite3 看起来没有生效。

SQLite3 是直接操作文件的,没有端口。

/home/git/gogs/data/gogs/conf/app.ini 这个路径应该对的吧?
有没有可能要先升到0.12.1再升0.13?
顺便问下有没有脚本把 sqlite 迁移到 Postgres 或者 mariadb?有点后悔选 sqlite,完全不熟悉它。

看起来是对的但是我也没法帮你验证 :joy:

你现在运行 0.12 是可行的吗?

换数据库可以参考 How to backup, restore and migrate 单独备份数据库,然后恢复到 Postgres

今天我先 up 0.12.2 然后再 up latest,又没有报错了。。。不明原因,感谢您的回复。
现在日志有一个warning,有没有关系?

2020/09/27 15:37:19 [xorm] [warn]  2020/09/27 15:37:19.693256 Table user has column login_type but struct has not related field

额。。玄学。。正常使用没有问题的话,这个应该不用管,应该是数据库中遗留的列,一般迁移只增不删的

你好,升级后发现了一个新的奇怪的地方。
原来我使用了这个方式 share-port-22-between-docker-gogs-ssh-and-local-system
上次尝试升级后就出现了bug,回退到0.12.2也一样。全都是提示Permission denied (publickey).

ssh -p10022 -T [email protected] 是正常的

Hi there, You've successfully authenticated, but Gogs does not provide shell access.
If this is unexpected, please log in with password and setup Gogs under another user.

ssh -T [email protected] 原来是可以的,可现在不管怎么增删新旧 gogs 上的用户密钥设置都提示[email protected]: Permission denied (publickey).

可能会是什么原因呢?

我刚又尝试过,用 10022 端口pull push是成功的,只要用共享22端口的方法就一直是Permission denied (publickey).这次升级,我仅仅修改过 gogs image的版本和 app.ini 文件。其他未作修改。

一般来说 .ssh/authorized_keys 文件的权限必须是 600,SSH 服务器才会接受,可以检查下是不是这个文件在迁移的过程中权限变了