初春图床 v3.5.7 更新来了!本版本在 v3.5.6 基础上合并了社区反馈的 2 个问题修复(#36、#37,对应 PR #39、#40,感谢 @MousseC),并新增 Windows arm64 原生构建产物。
本版本不含破坏性变更,可直接覆盖升级;升级前建议备份数据库。
[修复] MySQL 无法启动(Issue #36 / PR #39)
MySQL 8 建表时直接报错退出:
Error 1101 (42000): BLOB, TEXT, GEOMETRY or JSON column 'description' can't have a default value原因是 folders 表的 description 字段声明了 type:text;not null;default:''。MySQL 严格模式不允许 TEXT / BLOB / JSON 列带字面默认值,SQLite 与 PostgreSQL 则允许,所以只有 MySQL 部署起不来。
修复后该字段为 gorm:"type:text;not null"(backend/models/Folder.go:15),MySQL 建表语句变为 `description` text NOT NULL。已存在的 SQLite / PostgreSQL 库不受影响,无需迁移。
[新增] DB_TLS_MODE:自建数据库默认可连接(Issue #37 / PR #40)
此前 MySQL / PostgreSQL 的 TLS 行为写死,自建数据库基本连不上:
- MySQL 默认
ServerName=DB_HOST且要求校验,报x509: certificate is not valid for any names, but wanted to match mysql - PostgreSQL 设
ssl=off时被强制要求 TLS,报server refused TLS connection
即用户既无法关闭 TLS,也无法放宽校验,只能用云厂商证书或改代码。
本版本新增 DB_TLS_MODE(backend/database/tls.go):
| 取值 | 行为 |
|---|---|
auto(默认) | DB_HOST 全部解析为本机/私有地址(含 Docker 网络)时用 preferred,公网地址用 verify-full;解析失败按 verify-full 处理,不做静默降级 |
disable | 完全关闭 TLS |
preferred | 尝试 TLS,失败回退明文(MySQL 语义) |
required | 必须 TLS,不校验证书 |
verify-ca | 校验 CA,不校验主机名 |
verify-full | 校验 CA + 主机名 |
兼容别名:prefer / require / disabled。另有:
DB_TLS_SERVER_NAME:校验证书时使用的主机名,留空等于DB_HOST(仅verify-full生效)DB_SKIP_CERT_VERIFY=true:旧配置兼容,DB_TLS_MODE未设置或为auto时等价于required
启动日志会输出最终生效的模式,例如:
DB_TLS_MODE=auto(DB_HOST=mysql → 172.22.0.2,本机/私有地址)→ preferred空值、auto 与无法识别的取值都有明确报错,不会悄悄连不上:
DB_TLS_MODE 取值无效: "bogus"(可选 auto | disable | preferred | required | verify-ca | verify-full)已实测:MySQL 8.0 + 自签证书下 auto / disable / preferred / required / DB_SKIP_CERT_VERIFY=true 均可连接,verify-full 正确拒绝自签证书且不回退。
[新增] Windows arm64 构建产物
Windows on ARM 设备(骁龙 X 系列、Surface Pro X 等)现在有原生 arm64 版本,不再需要 x64 模拟层。
为此把 github.com/go-ole/go-ole 从 v1.2.4 升到 v1.3.0——v1.2.4 的 VARIANT 类型没有 arm64 实现,交叉编译直接报 undefined: VARIANT。该依赖只经 gopsutil → StackExchange/wmi 间接引入,v1.3.0 同主版本号、无 API 变更。
[更新] 依赖升级
随 PR #35 合入(v3.5.6 之后):golang.org/x/image、golang.org/x/net、golang.org/x/text、github.com/jackc/pgx/v5、quic-go 等升级到修复了安全通告的版本。
下载与部署
| 产物 | 说明 |
|---|---|
oneImg_Win_amd64_v3.5.7.zip | Windows amd64(含 README,UPX -9) |
oneImg_Win_arm64_v3.5.7.zip | Windows arm64(含 README,UPX -9)本版本新增 |
oneImg_Linux_amd64_v3.5.7.tar.gz | Linux amd64 静态二进制(UPX -9) |
oneImg_Linux_arm64_v3.5.7.tar.gz | Linux arm64 静态二进制(UPX -9) |
oneImg_Docker_amd64_v3.5.7.tar | Docker 镜像,docker load 导入后标签 oneimg:v3.5.7-amd64 |
oneImg_Docker_arm64_v3.5.7.tar | Docker 镜像,docker load 导入后标签 oneimg:v3.5.7-arm64 |
- 全部二进制为静态链接(webp / sqlite3 由 cgo 内嵌编译),无运行时依赖,UPX -9 压缩后约 16-17MB。
- Windows arm64 版用 llvm-mingw 交叉编译,同样内嵌 cgo,运行时只依赖系统自带的 UCRT(Windows 10 起内置)。
- Docker 镜像 runtime 层与官方 Dockerfile 一致(alpine:3.23 + ca-certificates + tzdata),amd64 / arm64 均已推送至 Docker Hub:
onexru/oneimg-oneimg:v3.5.7(多架构 manifest)与onexru/oneimg-oneimg:latest。
首次运行的管理员密码(重要)
v3.5.5 及更早版本,初始管理员密码固定为
123456。从 v3.5.6 起改为随机生成。
v3.5.7 沿用 v3.5.6 起的规则:
DEFAULT_PASS | 行为 |
|---|---|
| 留空(推荐) | 仅在数据库还没有任何用户时生成 43 字符随机密码,写入 data/.initial_admin_password(权限 0600),不打印到日志 |
| 非空 | 直接作为初始管理员密码 |
- 该文件只写一次,重启不覆盖,也不会重置已有账号的密码。
- Docker 查看:
docker exec oneimg cat /app/data/.initial_admin_password - ⚠️ 从 v3.5.5 及更早版本升级时,若
.env里还留着DEFAULT_PASS=123456,它会被当作初始密码继续生效(仅影响还没有任何用户的空库)。请删除该行或改成强密码。
配置:直接在容器编排中设置
所有变量都可以在 compose 的 environment 或 docker run -e 里设置,不需要进容器改 /app/.env:
services: oneimg: image: onexru/oneimg-oneimg ports: ["8080:8080"] environment: - APP_URL=https://img.example.com - DEFAULT_USER=admin - DEFAULT_PASS= # 留空 → 自动生成随机密码 - DB_TYPE=mysql - DB_HOST=mysql - DB_TLS_MODE=auto # 自建/内网数据库自动降为 preferred - MAX_FILE_SIZE=10485760 - TRUSTED_PROXIES=172.17.0.0/16 volumes: - ./data:/app/data - ./uploads:/app/uploads优先级:编排注入的环境变量 > 容器内自动生成的 /app/.env。应用首次启动会生成 .env 模板,但加载时(godotenv)不覆盖已存在的环境变量,因此编排注入的值始终生效,容器内 .env 只补全未注入的默认项。密钥类自动生成值(data/.config_secret、data/.initial_admin_password)都落在 ./data 卷内,重建容器不会丢失。
完整变量清单见仓库 .env.example。
- 部署提醒:
APP_URL必须设为实际访问地址(图片 URL 取自该值);显式配置的CONFIG_SECRET必须 ≥32 字符,且启用加密存储后不可更换。
项目地址
项目地址: