{"id":37228708,"url":"https://github.com/disafronov/local-test","last_synced_at":"2026-01-15T03:29:01.926Z","repository":{"id":321613391,"uuid":"1086517162","full_name":"disafronov/local-test","owner":"disafronov","description":"Nginx Proxy Manager, configured for [*.local.test] domain","archived":false,"fork":false,"pushed_at":"2026-01-11T14:13:43.000Z","size":49,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-11T16:48:29.665Z","etag":null,"topics":["nginx-proxy-manager","portainer","watchtower"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/disafronov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-30T14:24:53.000Z","updated_at":"2026-01-11T14:13:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"15e818f3-7bd6-42fc-a4e6-9000c006a524","html_url":"https://github.com/disafronov/local-test","commit_stats":null,"previous_names":["disafronov/npm-test","disafronov/local-test"],"tags_count":6,"template":false,"template_full_name":"disafronov/semantic-basic-template","purl":"pkg:github/disafronov/local-test","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/disafronov%2Flocal-test","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/disafronov%2Flocal-test/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/disafronov%2Flocal-test/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/disafronov%2Flocal-test/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/disafronov","download_url":"https://codeload.github.com/disafronov/local-test/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/disafronov%2Flocal-test/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28442278,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T00:55:22.719Z","status":"online","status_checked_at":"2026-01-15T02:00:08.019Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nginx-proxy-manager","portainer","watchtower"],"created_at":"2026-01-15T03:29:01.215Z","updated_at":"2026-01-15T03:29:01.920Z","avatar_url":"https://github.com/disafronov.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Local NPM + Dev CA (minimal)\n\nRun a local Nginx Proxy Manager with a self-signed CA and server certificates for the `*.local.test` domain.\n\n## Quick start\n\n```bash\n# Start everything\ndocker compose up -d\n```\n\nDNS: ensure `local.test` and `*.local.test` resolve to `127.0.0.1` (out of scope here).\n\nDownload and install the CA certificate: http://local.test/ca.pem\nNote: your browser may warn about an untrusted connection when downloading the CA. This is expected for the initial bootstrap with a self-signed CA.\n\nOpen: https://local.test\n\n## What gets generated\n\n- Private CA (persisted in volume `npm-ca`):\n  - `/srv/ca/ca.key` — CA private key\n  - `/srv/ca/ca.pem` — CA certificate (public)\n  - `/srv/ca/ca.srl` — CA serial file\n- Server materials (shared volume `npm-ssl`):\n  - `/srv/ssl/privkey.pem` — server private key\n  - `/srv/ssl/cert.pem` — server certificate signed by the CA\n\n## Services\n\n- `npm-ssl`: generates CA and server certificates; no runtime install steps; exits after generation\n- `npm-server`: `jc21/nginx-proxy-manager` — reverse proxy with web UI\n- `npm-postgresql`: `postgres` — keeps NPM data separate, so you can safely reset NPM without touching cert volumes\n- `portainer`: `portainer/portainer-ce` — Docker management UI (accessible via `portainer.local.test`)\n- `watchtower`: `nickfedor/watchtower` — automatic container updates (polls every 3 hours)\n\nPorts: 80 (HTTP), 443 (HTTPS), 81 (NPM admin — bound to 127.0.0.1 only)\n\nService dependencies: services start in order with healthchecks ensuring readiness.\n\n## Notes\n\n- Compose config values are in `configs.npm-ssl-params` and are sourced by the `npm-ssl` service.\n- CA serial is kept private under the `npm-ca` volume (`/srv/ca/ca.srl`).\n- If https://local.test still shows a warning, restart your browser after importing the CA.\n- Portainer is automatically proxied via NPM at `portainer.local.test`.\n- Watchtower runs in polling mode (every 3 hours) and can be configured via environment variables (see `docker-compose.yml`).\n\n### Extra SANs\n\nAppend extra SANs via env var when recreating `npm-ssl` (comma-separated). Accepted tokens: `DNS:name`, `IP:addr`. Invalid tokens are ignored with a warning.\n\n```bash\n# Add DNS and IP SANs for this run\nSERVER_SAN_EXTRA=\"DNS:dev.local,IP:127.0.0.1\" \\\n  docker compose up -d --no-deps --force-recreate npm-ssl\n\n# Or via .env file\necho 'SERVER_SAN_EXTRA=DNS:dev.local,IP:127.0.0.1' \u003e\u003e .env\ndocker compose up -d --no-deps --force-recreate npm-ssl\n```\n\n**Note:** After regenerating certificates, restart `npm-server` to pick up the new certificates:\n\n```bash\ndocker compose restart npm-server\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdisafronov%2Flocal-test","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdisafronov%2Flocal-test","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdisafronov%2Flocal-test/lists"}