Commit Graph
100 Commits
Author SHA1 Message Date
timothykim 697de3e199 add uptimerobot monitor subcommand to app.sh 2026-03-26 13:13:41 -04:00
timothykim 43fc8c2e7b remove new-app.sh, update docs to reference app.sh directly 2026-03-20 20:14:16 -04:00
timothykim 787e747fa4 fix deploy re-exec not forwarding command argument 2026-03-20 20:10:32 -04:00
timothykim 7b1a888db0 add workflow_dispatch and self-trigger paths to all workflows
Deploy haanmind.net / deploy (push) Failing after 1s
Deploy hantim.net / deploy (push) Failing after 1s
Deploy hcsuzuki.net / deploy (push) Failing after 1s
Deploy nginx / deploy (push) Failing after 1s
Deploy nginx / test (push) Has been skipped
Deploy thekims.family / deploy (push) Failing after 1s
Deploy timothykim.net / deploy (push) Failing after 1s
Provision server / provision (push) Successful in 11s
Deploy garage / deploy (push) Successful in 5s
2026-03-20 20:03:11 -04:00
timothykim a37872489c add certbot email, pin git pull to origin main 2026-03-20 19:57:45 -04:00
timothykim de1d60b1db remove standalone certbot fallback, fail on missing certs 2026-03-20 19:50:44 -04:00
timothykim c8c79a542a re-exec deploy.sh after git pull to pick up changes
Deploy nginx / deploy (push) Successful in 3s
Deploy nginx / test (push) Successful in 7s
2026-03-20 17:01:36 -04:00
timothykim b2bb8fa5eb clarify default server block comment
Deploy nginx / deploy (push) Successful in 4s
Deploy nginx / test (push) Successful in 8s
2026-03-20 16:57:08 -04:00
timothykim 729eadee33 use *.*.conf glob to match only domain conf files for cert issuance 2026-03-20 16:55:52 -04:00
timothykim 4b39eaaf06 skip default server block in cert issuance, remove ssh debug lines 2026-03-20 16:53:47 -04:00
timothykim 085b0bdd1b clean up trailing newline in nginx.conf
Deploy nginx / deploy (push) Failing after 4s
Deploy nginx / test (push) Has been skipped
2026-03-20 16:51:09 -04:00
timothykim 020e7b2950 retrigger nginx deploy for host key test
Deploy nginx / deploy (push) Failing after 5s
Deploy nginx / test (push) Has been skipped
2026-03-20 16:43:54 -04:00
timothykim 9a9df25742 retrigger nginx deploy for host key debug
Deploy nginx / deploy (push) Failing after 0s
Deploy nginx / test (push) Has been skipped
2026-03-20 16:41:27 -04:00
timothykim 6e2ec87ccf debug host key pinning in nginx workflow 2026-03-20 16:40:37 -04:00
timothykim 77e08f34cf retrigger nginx deploy for host key test
Deploy nginx / deploy (push) Failing after 0s
Deploy nginx / test (push) Has been skipped
2026-03-20 16:38:40 -04:00
timothykim 061213bf7e retrigger nginx deploy for host key test
Deploy nginx / deploy (push) Failing after 0s
Deploy nginx / test (push) Has been skipped
2026-03-20 16:35:34 -04:00
timothykim 03e45dc6f2 trigger nginx deploy to test host key pinning
Deploy nginx / deploy (push) Failing after 0s
Deploy nginx / test (push) Has been skipped
2026-03-20 16:33:15 -04:00
timothykim 16ea39811d document deploy host key variable in readme 2026-03-20 16:31:54 -04:00
timothykim 7daf7a267b pin ssh host key in all workflows 2026-03-20 16:31:03 -04:00
timothykim 5abfca19b3 restrict envsubst to expected variables only
Deploy garage / deploy (push) Failing after 2s
2026-03-20 16:25:23 -04:00
timothykim 9e3996a72b remove security.md from repo, add to gitignore 2026-03-20 16:17:23 -04:00
timothykim 163aefddee add default server block to drop unknown host headers 2026-03-20 16:12:06 -04:00
timothykim 3a1ef3a167 fix tls tests to load system ca certificates 2026-03-20 16:07:32 -04:00
timothykim cce9b5c4c4 add ssl/tls hardening to nginx 2026-03-20 16:05:41 -04:00
timothykim 2bcf67dcc4 fetch secrets by uuid instead of listing all 2026-03-20 15:51:43 -04:00
timothykim b19e194c0b remove deploy user from docker group 2026-03-20 15:38:11 -04:00
timothykim 1a7f823a87 restrict garage admin api to home ip 2026-03-20 15:33:36 -04:00
timothykim 0ca8394f8a add testing section to readme 2026-03-20 15:22:58 -04:00
timothykim e767ab3235 test -> tests 2026-03-20 15:20:29 -04:00
timothykim 50ab425e8f fix test directory path in deploy-nginx workflow 2026-03-20 15:19:41 -04:00
timothykim b7439b23e3 fix nginx security headers not being applied to https responses
nginx add_header inheritance meant X-Content-Type-Options and X-Frame-Options
were silently dropped from all https server blocks. moved all security headers
into a shared snippet (security-headers.inc) included per server block. added
pytest-based header verification that auto-discovers sites from conf files.
2026-03-20 15:11:56 -04:00
timothykim 3b41653c04 refactor new-app into app.sh with subcommands 2026-03-20 14:43:47 -04:00
timothykim eecdf7b002 restructure docs: eliminate duplication across md files 2026-03-20 11:42:06 -04:00
timothykim be1ad6b456 audit fixes: error handling, docs consistency, bucket idempotency
Provision server / provision (push) Successful in 12s
2026-03-20 11:28:36 -04:00
timothykim 6b1e78350f document media hosting in readme and usecases 2026-03-19 22:34:47 -04:00
timothykim 4516ed7bab add media setup instructions to new-app.sh output 2026-03-19 22:31:02 -04:00
timothykim f9788ff178 fix s3 proxy: forward host header for signature validation
Deploy nginx / deploy (push) Successful in 3s
2026-03-19 21:55:37 -04:00
timothykim da99d102e9 add s3.hantim.net proxy, fix dns ttl to 3600
Deploy nginx / deploy (push) Successful in 13s
2026-03-19 18:23:39 -04:00
timothykim a421ecc837 add garage admin api with token, expose via garage.hantim.net
Deploy garage / deploy (push) Successful in 5s
Deploy nginx / deploy (push) Successful in 13s
2026-03-19 17:19:03 -04:00
timothykim a64f81f503 upgrade garage to v2.2.0, add /media/ proxy to nginx
Deploy garage / deploy (push) Successful in 7s
Deploy nginx / deploy (push) Successful in 3s
2026-03-19 16:45:22 -04:00
timothykim df179546ae update docs, fix deploy to not restart unchanged services
- deploy.sh: use compose up instead of down+up, fetch secrets individually
- configure.sh: delegate all service deployment to deploy.sh
- docs: add garage cluster init, .env.keys mechanism, update configure.sh description
- remove 2>/dev/null from bws calls
2026-03-19 12:39:55 -04:00
timothykim 76d01c66d6 fix deploy: use compose up instead of down+up, fetch secrets individually
Provision server / provision (push) Successful in 11s
- docker compose up -d --remove-orphans instead of down then up
- configure.sh delegates all service deployment to deploy.sh
- deploy.sh generates .env from bws before starting services
- remove 2>/dev/null from bws calls so errors are visible
2026-03-19 12:28:49 -04:00
timothykim 82582028a2 fix garage dockerfile: use alpine base with envsubst
Deploy garage / deploy (push) Failing after 7s
2026-03-19 12:14:38 -04:00
timothykim 3478e05c49 add garage service with env-based secret injection
Deploy garage / deploy (push) Failing after 6s
2026-03-19 12:13:07 -04:00
timothykim 3a8fb09bcf add .env generation from bws, handle build services in deploy
Provision server / provision (push) Successful in 6s
- configure.sh generates .env files from .env.keys + bws
- deploy.sh detects build: services and runs docker compose build
- new-service.sh prints .env.keys instructions
- clean up .gitignore
2026-03-19 12:11:46 -04:00
timothykim 7e35042b71 add haanmind.net
Deploy haanmind.net / deploy (push) Successful in 2s
Deploy nginx / deploy (push) Successful in 3s
2026-03-19 11:23:53 -04:00
timothykim 037b78734f move dev scripts to tools/, migrate to bws, use example.com in docs
Provision server / provision (push) Successful in 7s
- Move new-app.sh, new-service.sh, remove-app.sh from scripts/ to tools/
- Migrate new-app.sh and remove-app.sh from bw to bws
- Replace real domains with example.com in documentation and help text
2026-03-19 11:10:14 -04:00
timothykim 5a8d9a8aa0 install bws to /usr/bin instead of /usr/local/bin 2026-03-18 19:15:44 -04:00
timothykim ef7fe7677c migrate bootstrap.sh from bw to bws, update docs 2026-03-18 19:04:22 -04:00
timothykim 00ab7d1b8d auto-issue certs on nginx deploy, document one-domain-per-conf convention 2026-03-18 15:18:11 -04:00
timothykim 46b27e0780 reverse thekims.family redirect: www -> bare domain
Deploy nginx / deploy (push) Successful in 4s
2026-03-18 15:08:51 -04:00
timothykim 63d1d92333 add hcsuzukiviolin.com redirect to hcsuzuki.net
Deploy nginx / deploy (push) Failing after 3s
2026-03-18 15:01:41 -04:00
timothykim 199ed98e7d make new scripts executable
Provision server / provision (push) Successful in 7s
2026-03-18 14:53:46 -04:00
timothykim 919c5353bc split setup.sh into bootstrap.sh and configure.sh
Provision server / provision (push) Failing after 2s
bootstrap.sh handles first-time setup (manual, Bitwarden).
configure.sh handles idempotent config (CI-safe).
Add provision workflow, deploy-garage workflow, new-service.sh.
Remove git-crypt references and empty .gitattributes.
2026-03-18 14:51:19 -04:00
timothykim 3b4ff1f291 fix dns record creation in new-app.sh 2026-03-16 22:38:57 -04:00
timothykim 0ffca0335f add hcsuzuki.net
Deploy hcsuzuki.net / deploy (push) Successful in 2s
Deploy nginx / deploy (push) Successful in 4s
2026-03-16 22:26:45 -04:00
timothykim 1a31381bfb update gitignore 2026-03-16 22:08:51 -04:00
timothykim a45813db35 cache secrets to file, fix spinner animation 2026-03-16 22:06:47 -04:00
timothykim 423de9c9e8 add thekims.family
Deploy nginx / deploy (push) Successful in 3s
Deploy thekims.family / deploy (push) Successful in 3s
2026-03-16 22:05:46 -04:00
timothykim 164087f82a remove thekims.family
Deploy nginx / deploy (push) Successful in 3s
2026-03-16 22:04:48 -04:00
timothykim 0702059044 add thekims.family
Deploy nginx / deploy (push) Failing after 2s
Deploy thekims.family / deploy (push) Successful in 2s
2026-03-16 22:00:16 -04:00
timothykim 43b0730b7b remove thekims.family
Deploy nginx / deploy (push) Successful in 3s
2026-03-16 21:59:41 -04:00
timothykim 98aa8e7727 use workflow dispatch api instead of deploy-trigger file 2026-03-16 21:54:19 -04:00
timothykim 126061bbcb add thekims.family
Deploy nginx / deploy (push) Failing after 3s
Deploy thekims.family / deploy (push) Successful in 2s
2026-03-16 21:47:22 -04:00
timothykim 34cba34856 remove thekims.family
Deploy nginx / deploy (push) Successful in 4s
2026-03-16 21:46:30 -04:00
timothykim 0493910966 deploy: clean up old containers before starting new ones 2026-03-16 21:43:01 -04:00
timothykim e6cbc53065 update timothykim.net image to match new naming convention
Deploy timothykim.net / deploy (push) Failing after 2s
2026-03-16 21:40:05 -04:00
timothykim 0bbe1d48e2 add thekims.family
Deploy nginx / deploy (push) Failing after 3s
Deploy thekims.family / deploy (push) Successful in 2s
2026-03-16 21:23:39 -04:00
timothykim 99a4a4b3ea cache bitwarden secrets in env vars to skip unlock on repeated runs 2026-03-16 21:22:53 -04:00
timothykim 9d999c319d add hantim.net
Deploy hantim.net / deploy (push) Successful in 2s
Deploy nginx / deploy (push) Successful in 3s
2026-03-16 21:10:02 -04:00
timothykim b32a7ae5b6 remove hantim.net
Deploy nginx / deploy (push) Successful in 3s
2026-03-16 21:08:06 -04:00
timothykim 7df77db7b3 fix new-app: retry build trigger, clean up temp nginx conf, add remove-app script 2026-03-16 21:07:34 -04:00
timothykim e86b7bc58f add hantim.net
Deploy hantim.net / deploy (push) Failing after 1s
Deploy nginx / deploy (push) Failing after 1s
2026-03-16 18:16:37 -04:00
timothykim f4771cccf6 remove hantim.net
Deploy nginx / deploy (push) Successful in 3s
2026-03-16 18:16:01 -04:00
timothykim d12ee0271e add hantim.net
Deploy hantim.net / deploy (push) Failing after 1s
Deploy nginx / deploy (push) Failing after 1s
2026-03-16 18:13:27 -04:00
timothykim fad1b3ab59 remove hantim.net
Deploy nginx / deploy (push) Successful in 2s
2026-03-16 18:12:29 -04:00
timothykim 8a30405d18 add hantim.net
Deploy hantim.net / deploy (push) Failing after 1s
Deploy nginx / deploy (push) Failing after 1s
2026-03-16 18:09:23 -04:00
timothykim 544fb9c13f remove hantim.net
Deploy nginx / deploy (push) Successful in 3s
2026-03-16 18:07:10 -04:00
timothykim 4f3de1a030 add hantim.net
Deploy hantim.net / deploy (push) Failing after 1s
Deploy nginx / deploy (push) Failing after 1s
2026-03-16 02:19:14 -04:00
timothykim f77fc12ab0 remove hantim.net
Deploy nginx / deploy (push) Successful in 3s
2026-03-16 02:17:45 -04:00
timothykim b69b4b6dc5 add hantim.net
Deploy hantim.net / deploy (push) Failing after 2s
Deploy nginx / deploy (push) Failing after 2s
2026-03-16 02:09:10 -04:00
timothykim 9a950524eb add cert command to deploy.sh, use deploy user for cert issuance
- deploy.sh: add cert-<domain> command for zero-downtime SSL issuance
- new-app.sh: SSH as deploy user with key from Bitwarden instead of personal user
- remove DEPLOY_USER/DEPLOY_HOST env var requirements
- update all docs to reflect new flow
2026-03-16 02:05:18 -04:00
timothykim b51fe596c6 automate new-app.sh: DNS, cert, commit, build, verify
- resolve server IP from hantim.net instead of env var
- create Vultr DNS zone and A records via API
- wait for DNS propagation before cert issuance
- issue SSL cert via webroot (zero downtime)
- auto commit and push hantim-server
- trigger initial app build via Gitea API
- verify site is live with curl check
- update all docs to reflect single-command flow
2026-03-16 01:57:10 -04:00
timothykim 796a0003c7 open firewall ports for HTTP/HTTPS in setup.sh 2026-03-16 01:09:09 -04:00
timothykim 5c38b0631a replace NPM with vanilla nginx + certbot
Deploy nginx / deploy (push) Failing after 3s
Deploy timothykim.net / deploy (push) Successful in 3s
- nginx:alpine replaces nginx-proxy-manager
- certbot on host with standalone issuance and auto-renewal
- per-site nginx configs in conf.d/ (HTTP->HTTPS, bare->www)
- container names use underscores (timothykim_net)
- setup.sh: automated cert issuance, dynamic app startup
- deploy.sh: nginx -t guard, graceful image-not-found
- new-app.sh: Gitea API repo creation, nginx conf generation
- add ARCHITECTURE.md, USECASES.md, CLAUDE.md
- remove old NPM data/certs from tracking
2026-03-16 00:55:13 -04:00
timothykim 31c6235726 rename timothykim container to timothykim-static
Deploy timothykim.net / deploy (push) Successful in 2s
2026-03-15 23:05:26 -04:00
timothykim bef793aab7 fix: use bw get notes for registry token (secure note, not login) 2026-03-15 23:00:46 -04:00
timothykim 9337045114 automate deploy key and registry login via Bitwarden in setup.sh 2026-03-15 22:56:11 -04:00
timothykim 91d549c9ba rename REGISTRY_TOKEN to CI_REGISTRY_TOKEN 2026-03-15 22:00:37 -04:00
timothykim b96e94afa6 use vars.DEPLOY_HOST instead of secrets since hostname is not sensitive 2026-03-15 21:49:29 -04:00
timothykim 5dd2343d4a migrate to hantim org and consolidate deploy secret name
Deploy timothykim.net / deploy (push) Failing after 3s
- Update all references from timothykim/ to hantim/ org
- Rename DEPLOY_KEY to DEPLOY_SSH_KEY everywhere
- Update README to reference org-level secrets
2026-03-15 21:46:31 -04:00
timothykim 6d8e89e82d test deploy: rename nginx container
Deploy nginx / deploy (push) Successful in 7s
2026-03-13 17:16:10 -04:00
timothykim f74fd0f55e test deploy: rename timothykim container
Deploy timothykim.net / deploy (push) Successful in 3s
2026-03-13 17:15:29 -04:00
timothykim 5b3e66f4e0 fix deploy command to match directory name timothykim.net 2026-03-13 17:15:06 -04:00
timothykim c1b2f40a7c rename timothykim container back to timothykim-static
Deploy timothykim.net / deploy (push) Failing after 1s
2026-03-13 17:13:29 -04:00
timothykim 33040a487b pass SSH_ORIGINAL_COMMAND as argument to deploy.sh in authorized_keys
sudo strips environment variables, so SSH_ORIGINAL_COMMAND wasn't
reaching deploy.sh. Pass it explicitly as a shell argument instead.
2026-03-13 17:12:30 -04:00
timothykim 21974656cd rename timothykim container
Deploy timothykim.net / deploy (push) Failing after 1s
2026-03-13 17:11:12 -04:00
timothykim eff589c3de switch deploy workflows from appleboy/ssh-action to raw ssh
appleboy/ssh-action's script parameter doesn't set
SSH_ORIGINAL_COMMAND, which deploy.sh needs. Using raw ssh
with the command as an argument works correctly.
2026-03-13 17:10:37 -04:00
timothykim c9fed26503 rename nginx container back to nginx-proxy-manager
Deploy nginx / deploy (push) Failing after 2s
2026-03-13 17:09:11 -04:00
timothykim c484109f1c merge dispatch and deploy into a single deploy.sh
deploy.sh reads SSH_ORIGINAL_COMMAND directly, validates it, and
runs the deploy. No more dispatch indirection.
2026-03-13 17:08:19 -04:00