1Panel 修改应用参数,避免被覆盖

1Panel 实乃草台班子

1Panel 修改应用参数,避免被覆盖
本文的 1Panel 为 v2.0.12 版本,新版可能会有不同。

1Panel 里面已经安装好的应用,有一些参数是写死的,一旦安装则无法修改。虽然可以通过修改容器的配置和环境变量等进行临时修改,但是通过应用商店升级的时候还是会被覆盖。

可以看到,这里的内容都是无法修改的。

临时修改方法

上图中显示的参数本质上是 /opt/1panel/apps/<app-name>/<app-name>/.env 里面的,所以直接修改这里.env 的内容,然后重建应用就可以看到效果。这里 .env 里面的内容只和相同目录下的 docker-compose.yaml 有关,和应用没有直接关系。应用里面的 env 是 docker-compose.yaml 传入的。

点击此处即可跳转到应用目录

存在的问题

每当通过应用商店升级的时候,上面的临时修改就会被覆盖,.envdocker-compose.yaml 都会被覆盖,其中 .env 将会覆盖为安装时设置的参数,而 docker-compose.yaml 会被覆盖为应用商店渠道最新的版本。

同样的问题,也有其他人反映:

手动修改应用的.env和docker-compose.yaml文件后能否同步到面板
比如想修改一些服务的端口、密码之类的配置项,在1panel上没有找到入口修改。通过手动修改.env 或者 docker-compose.yaml文件可以实现,但是面板上展示的还是旧的值,这个如果想同步要如何处理? 同步的意思是仅仅同步状态吗?
【需求】支持修改已安装应用的应用端口
在部署服务的时候需要配置应用端口,这个端口最终保存在.env中,在通过docker-compose创建容器时指定。 能否支持修改应用端口?否则就只能通过手动修改.env文件,并且重建服务来更新。 但这样有个问题,1panel页面上的服务端口信息的值是存在数据库中的,我虽然修改了.env,实际也生效了,但是数据库中的值不会更新,显示也就不会更新。
修改env里面的端口,显示未变化但实际已变更
发布话题前请确认好标题与标签、确认你已经看过了论坛准则:论坛准则 - 社区论坛 - FIT2CLOUD 飞致云 ; 请附带以下信息 1Panel 版本:社区版v2.0.11 操作系统: 发行版本centos-9,内核版本5.14.0-601.el9.x86_64,系统类型x86_64 关键截图: 日志:

看来官方是不打算解决这个问题了,还好 1Panel 是开源的, 可以去查看代码。

agent/app/service/app_utils.go:upgradeInstall 中可以看到:

// 这里从数据库记录中读取env配置
envs := make(map[string]interface{})
if err = json.Unmarshal([]byte(install.Env), &envs); err != nil {
    return err
}
// ...

// 然后经过一通处理,覆盖了原有的 .env
if err = env.Write(envParams, install.GetEnvPath()); err != nil {
    return err
}

解决办法

解决办法是修改 /opt/1panel/db/agent.db。这是一个没有加密的 SQLite 数据库,可以直接使用 DB Browser for SQLite 进行修改。所有已安装应用的信息都在 app_installs 这个表里面。

需要注意的是,如果要修改数据库连接相关信息,需要谨慎处理。app_install_resources 里面存储了应用和数据库的对应关系,需要同步修改。