fix(deploy): COPY --chmod=755 根治单文件二进制丢失可执行位

Windows 打包与跨机传输会使 naku-* 丢掉 +x,容器内 exec 以 126
(Permission denied)退出,migrate 失败后 server/engine 不会启动。
镜像内用 COPY --chmod=755 固定可执行位,并同步部署方案说明。
This commit is contained in:
2026-10-13 11:03:35 +08:00
parent c0051cff03
commit 75a567611b
2 changed files with 6 additions and 2 deletions
+2 -1
View File
@@ -9,7 +9,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates libstdc++6 \ ca-certificates libstdc++6 \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
WORKDIR /app WORKDIR /app
COPY release/naku-server release/naku-engine release/naku-migrate /app/ # --chmod:Windows 打包 / 跨机传输常丢可执行位,缺 x 时容器内 exec 以 126 退出
COPY --chmod=755 release/naku-server release/naku-engine release/naku-migrate /app/
COPY release/drizzle /app/drizzle COPY release/drizzle /app/drizzle
ENV MIGRATIONS_FOLDER=/app/drizzle ENV MIGRATIONS_FOLDER=/app/drizzle
CMD ["/app/naku-server"] CMD ["/app/naku-server"]
+4 -1
View File
@@ -117,7 +117,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates libstdc++6 \ ca-certificates libstdc++6 \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
WORKDIR /app WORKDIR /app
COPY release/naku-server release/naku-engine release/naku-migrate /app/ # --chmod:Windows 打包 / 跨机传输常丢可执行位,缺 x 时容器内 exec 以 126 退出
COPY --chmod=755 release/naku-server release/naku-engine release/naku-migrate /app/
COPY release/drizzle /app/drizzle COPY release/drizzle /app/drizzle
ENV MIGRATIONS_FOLDER=/app/drizzle ENV MIGRATIONS_FOLDER=/app/drizzle
CMD ["/app/naku-server"] CMD ["/app/naku-server"]
@@ -131,6 +132,7 @@ COPY release/dist /srv
要点: 要点:
- **构建期不编译业务代码**,只装配产物;`docker compose up -d --build` 的语义是「用当前 `release/` 重建镜像并重启」; - **构建期不编译业务代码**,只装配产物;`docker compose up -d --build` 的语义是「用当前 `release/` 重建镜像并重启」;
- 单文件二进制用 **`COPY --chmod=755`**:Windows 打包 / 跨机传输常丢可执行位,缺 `x` 时容器内 `exec` 以 **exit 126**(Permission denied)退出,迁移与应用都不会启动;
- `app` 阶段一个镜像供 `server` / `engine` / `migrate` 三用,靠 compose 的 `command` 区分; - `app` 阶段一个镜像供 `server` / `engine` / `migrate` 三用,靠 compose 的 `command` 区分;
- 应用运行时选 **`debian:bookworm-slim`**(glibc,对齐 Bun `--compile` 目标);`ca-certificates`(HTTPS 证书校验)与 `libstdc++6`(单文件 C++ 运行时)显式安装——两个都不指望镜像自带; - 应用运行时选 **`debian:bookworm-slim`**(glibc,对齐 Bun `--compile` 目标);`ca-certificates`(HTTPS 证书校验)与 `libstdc++6`(单文件 C++ 运行时)显式安装——两个都不指望镜像自带;
- 网关仍用官方 `caddy:2-alpine`(与应用基底无关,体积友好); - 网关仍用官方 `caddy:2-alpine`(与应用基底无关,体积友好);
@@ -261,6 +263,7 @@ docker compose ps
| 何时跑? | 每次固定命令(含首次)启动/更新时 | | 何时跑? | 每次固定命令(含首次)启动/更新时 |
| 不用什么? | **不用 `db:push` 进部署链**——它是 schema diff 硬推,不适合生产更新命令 | | 不用什么? | **不用 `db:push` 进部署链**——它是 schema diff 硬推,不适合生产更新命令 |
| 失败怎么办? | `migrate` 非 0 退出 → `server`/`engine` 不启动;修复 SQL 或数据后重跑固定命令 | | 失败怎么办? | `migrate` 非 0 退出 → `server`/`engine` 不启动;修复 SQL 或数据后重跑固定命令 |
| `migrate` exit 126? | 二进制缺可执行位(Windows 打包 / 传输丢 `x`)。镜像内已 `COPY --chmod=755` 根治;宿主机侧应急 `chmod +x release/naku-*` 后 rebuild |
--- ---