Skip to content

feat: self-contained Docker build, no custom base image#17

Merged
montoyaedu merged 1 commit into
masterfrom
feat/self-contained-build
May 18, 2026
Merged

feat: self-contained Docker build, no custom base image#17
montoyaedu merged 1 commit into
masterfrom
feat/self-contained-build

Conversation

@montoyaedu
Copy link
Copy Markdown
Member

Problem

easy proxy build produced ethiclab/nginx-easy from a Dockerfile that was FROM ethiclab/nginx-certbot:2.0 — a custom base image built separately from Dockerfile.build. That base was never on a registry, so a fresh npm install couldn't build a working proxy without a manual, undocumented base-image build. The Dockerfile itself only added 2 lines on top of the base — the split bought nothing without a registry.

Fix

Merge the two Dockerfiles into one self-contained Dockerfile that builds FROM certbot/certbot:latest — a public, official image. easy proxy build is now a single docker build from scratch, with no custom base image to prepare.

  • Dockerfile — self-contained: FROM certbot/certbot:latest, adds nginx + Node + sudo + the certbot DNS plugins (the former Dockerfile.build content), plus ENTRYPOINT [] / VOLUME / EXPOSE / CMD.
  • Dockerfile.build — removed.
  • package.json — drop Dockerfile.build from the files allowlist (package: 25 files).
  • DocsCLAUDE.md, README.md, CHANGELOG.md, AGENTS.md, .github/copilot-instructions.md, UC1_LOCAL_SSL_SETUP.md updated for the single-Dockerfile build.

The easy CLI is unchangedeasy proxy build already runs docker build "$EASY_DIR" -t ethiclab/nginx-easy, which now works from scratch.

Verification

Real docker build (not just the mocked bats suite):

  • Image builds clean from certbot/certbot:latest.
  • All four certbot DNS plugins present: dns-ionos, dns-route53, dns-cloudflare, dns-digitalocean.
  • nginx present (1.28.x from the current Alpine base).
npm run lint   # exits 0
bats test/     # 20/20

Note

STATE.md is broadly stale (dated 2026-04-02, pre-dates the test harness / #5 / release-prep work) and is left for a separate full refresh rather than partially patched here.

🤖 Generated with Claude Code

`easy proxy build` required a custom base image `ethiclab/nginx-certbot:2.0`
to exist first (built from a separate `Dockerfile.build`). Since that
image was never on a registry, a fresh `npm install` could not build a
working proxy without a manual, undocumented base-image build.

Merge the two Dockerfiles into one self-contained `Dockerfile` that
builds `FROM certbot/certbot:latest` — a public official image. Now
`easy proxy build` is a single `docker build` from scratch, with no
custom image to prepare. The `easy` CLI itself is unchanged.

- Dockerfile: self-contained, FROM certbot/certbot:latest; adds nginx,
  Node, sudo and the certbot DNS plugins (the former Dockerfile.build
  content), plus ENTRYPOINT/VOLUME/EXPOSE/CMD
- Dockerfile.build: removed
- package.json: drop Dockerfile.build from the files allowlist
- docs: CLAUDE.md, README.md, CHANGELOG.md, AGENTS.md,
  copilot-instructions.md, UC1_LOCAL_SSL_SETUP.md updated for the
  single-Dockerfile build

Verified with a real `docker build`: image builds clean, all four
certbot DNS plugins (ionos, route53, cloudflare, digitalocean) present.
`npm run lint` exits 0; the bats suite passes 20/20.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@montoyaedu montoyaedu merged commit f40a19e into master May 18, 2026
2 checks passed
montoyaedu added a commit that referenced this pull request May 18, 2026
STATE.md was dated 2026-04-02 and predated the entire test-harness /
ShellCheck / issue-5 / release-prep / self-contained-build work — it
still listed obsolete blockers (push the base image to Docker Hub).

Rewrite it: current version state, the PRs #9#17 shipped this phase,
the remaining items (npm publish, clean-room test, real IONOS test).

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant