README(659 行 → 176 行):只保留「这是什么」与「怎么部署/维护」——快速开始、首次安装、 升级(注明不需要 --force-recreate)、回滚(给真实存在的 sha-<commit> 标签)、备份与恢复 (整目录 tar,并说明 SQLite 开了 WAL 会短暂出现 -wal/-shm)、常见配置(端口/证书路径/ APACHE_* 六个变量与实际默认值)、许可与致谢。不再记录任何修复史或差异逐条。 所有具体值(镜像名、容器名、端口、卷路径、WEB_PORT/HTTPS_PORT、MPM 默认值、PHP/Laravel 版本、回滚标签)都对着源码与实机逐条核过。 构建与 CI: - .dockerignore 补 src/storage/logs/*(+ 保留 .gitignore 占位):本机开发日志会被 COPY src/ 带进镜像(含本机绝对路径与错误栈)。用一份 moby 语义 matcher 验过排除生效、 且不影响 fontawesome 字体等构建必需品。 - update-composer-lock.yaml:两处 curl … | php 改成与 Dockerfile 同款「先落盘 → 官方 installer.sig → 校验 96 位 hex → sha384sum -c - → 再执行 → 删临时文件」(哈希不写死); 注释里的 9.52.17 与「5 条公告」校正为 9.52.22 / 4 条(OSV 实查)。 - build-image.yaml:扩展自证那段的结论文案改成与实际一致(硬断言只有 pdo_sqlite, 其余仅打印供人工比对)——sqlite3 对本站不是必需,钉死它会在无害变动时误红。 - tools/vendor-upstream.sh:去掉不存在的 test/run.sh,改为 cd test && npm test。
54 lines
3.0 KiB
Plaintext
54 lines
3.0 KiB
Plaintext
# 构建上下文里只需要这些:Dockerfile、src/、*.template、entrypoint.sh
|
||
# 其余都是仓库自己的东西,进上下文只会拖慢构建(尤其 test/node_modules)
|
||
.git
|
||
.github
|
||
test
|
||
patches
|
||
tools
|
||
docker-compose.yaml
|
||
README.md
|
||
*.md
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# fork 追加(F12):别把开发机的东西烤进构建上下文 / 镜像
|
||
# ---------------------------------------------------------------------------
|
||
|
||
# 依赖目录:镜像里的 composer install 会自己装 vendor(且是 --no-dev);
|
||
# 本地 vendor/(131M)与 node_modules/(237M)进上下文只会拖慢构建,还可能把开发包带进去。
|
||
#
|
||
# vendor 只排 composer 那一份(src/vendor)——**不能用 `**/vendor`**:
|
||
# 那会连 src/public/fonts/vendor/@fortawesome/fontawesome-free/webfa-*.{woff2,woff,ttf,eot,svg}
|
||
# 一起排掉,而那是 public/css/fontawesome.css 真正 @font-face 引的字体,必须随镜像发货,
|
||
# 排掉前端图标就全空了(本机用 moby patternmatcher 的等价实现跑真实文件树验证过)。
|
||
src/vendor
|
||
**/node_modules
|
||
|
||
# 开发机的 .env(里面有本机的 DB / APP_KEY)。镜像构建期是 Dockerfile 自己
|
||
# `copy('.env.example', '.env')`,运行期由卷 + entrypoint 管,绝不该从开发机带进来。
|
||
**/.env
|
||
|
||
# 开发机的编译产物:Blade 编译视图 / 缓存 / 会话、bootstrap 的编译清单(packages.php、
|
||
# services.php、config.php)。这些在开发机上是「当时装过哪些包、缓存了哪些配置」的快照,
|
||
# 带进镜像会让 Laravel 按错误的清单引导(Dockerfile 里那段 --no-dev 的注释踩过这个坑)。
|
||
#
|
||
# 注意写法:故意**只排文件、不排目录** —— 不用 `src/storage/framework/*` 那种整目录通配,
|
||
# 因为那样会连 storage/framework/{views,sessions,cache/data} 与 bootstrap/cache 这些**目录本身**
|
||
# 一起从上下文里删掉(.dockerignore 的 `*` 连目录里的 .gitignore 占位一起排掉,
|
||
# 目录没有任何条目就不会进构建上下文),而 Laravel 运行期必须能往这些目录写
|
||
# (Blade 编译视图、session、包清单)—— 目录不存在 = 整站 500。
|
||
# 下面 `dir/*` 后面紧跟的 `!.../.gitignore` 就是为了把目录占位文件留下,保证目录存在。
|
||
src/storage/framework/cache/data/*
|
||
!src/storage/framework/cache/data/.gitignore
|
||
src/storage/framework/sessions/*
|
||
!src/storage/framework/sessions/.gitignore
|
||
src/storage/framework/testing/*
|
||
!src/storage/framework/testing/.gitignore
|
||
src/storage/framework/views/*.php
|
||
src/bootstrap/cache/*.php
|
||
|
||
# 开发机的 Laravel 日志:里面是本机的绝对路径与错误栈,绝不该随 COPY src/ 烤进镜像。
|
||
# 写法与上面 framework/* 同理:`*` 会把 storage/logs/.gitignore 占位也排掉(目录就没了),
|
||
# 而 Laravel 运行期必须能往这个目录写日志 —— 所以紧跟一条 `!` 把占位文件留下,保住目录。
|
||
src/storage/logs/*
|
||
!src/storage/logs/.gitignore
|