fix(deploy): COPY --chmod=755 根治单文件二进制丢失可执行位
Windows 打包与跨机传输会使 naku-* 丢掉 +x,容器内 exec 以 126 (Permission denied)退出,migrate 失败后 server/engine 不会启动。 镜像内用 COPY --chmod=755 固定可执行位,并同步部署方案说明。
This commit is contained in:
+2
-1
@@ -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
@@ -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 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user