Commit Graph
90 Commits
Author SHA1 Message Date
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
timothykim f1d4508411 update container names for nginx and timothykim.net
Deploy nginx / deploy (push) Failing after 2s
Deploy timothykim.net / deploy (push) Failing after 2s
2026-03-13 17:02:26 -04:00
timothykim 7d5f0920b7 replace per-app deploy scripts with generic deploy.sh
Dispatch now validates the command format and routes to a single
deploy.sh that handles any app. This fixes first-deploy failures
for new apps (dispatch no longer needs a static case list) and
simplifies new-app.sh (no deploy script or dispatch update needed).

Also adds input validation to new-app.sh, set -euo pipefail to
deploy scripts, and dnf module reset before nodejs install.
2026-03-13 17:00:59 -04:00
timothykim 587b671e61 add container_name to nginx compose
Deploy nginx / deploy (push) Successful in 7s
2026-03-13 16:04:18 -04:00
timothykim 2d793e787c remove container_name from timothykim.net compose
Deploy timothykim.net / deploy (push) Successful in 4s
2026-03-13 16:00:30 -04:00
timothykim a3cb7680f3 use sudo for deploy scripts instead of chown on repo
The deploy user runs scripts as root via passwordless sudo,
avoiding ownership conflicts with Docker-mounted volumes.
2026-03-13 15:58:42 -04:00
timothykim e53ac6324a add container_name to timothykim.net compose
Deploy timothykim.net / deploy (push) Failing after 2s
2026-03-13 15:52:03 -04:00
timothykim 79615c6295 fix execute permission on setup.sh 2026-03-13 15:50:25 -04:00
timothykim 21162432b9 fix execute permissions on deploy scripts 2026-03-13 15:50:10 -04:00
timothykim 5fea868a57 revert container_name change for clean deploy test
Deploy timothykim.net / deploy (push) Failing after 3s
2026-03-13 15:47:28 -04:00
timothykim 4467a6b2c4 add /opt/hantim as git safe.directory for deploy user 2026-03-13 15:45:31 -04:00
timothykim 7a1434c465 add container_name to timothykim.net compose
Deploy timothykim.net / deploy (push) Failing after 2s
2026-03-13 15:42:19 -04:00
timothykim c528573b49 use full path for bw CLI since /usr/local/bin may not be in PATH 2026-03-13 14:54:41 -04:00
timothykim d3d93a61b7 move git checkout before git-crypt unlock
git-crypt refuses to unlock if the working directory is dirty.
2026-03-13 13:12:08 -04:00
timothykim 9fdee2e54b restore git-tracked files before starting services
Protects against a previous failed run where services started with
encrypted/missing files and overwrote them (e.g. NPM database).
2026-03-13 13:10:34 -04:00
timothykim 93b940fd76 add bw sync before fetching git-crypt key 2026-03-13 13:03:02 -04:00
timothykim bb371a53c4 add dnf upgrade at start of setup to update system packages 2026-03-13 12:45:27 -04:00
timothykim 4fea2e7510 use nodejs:20 module stream instead of default nodejs 16
The default npm/nodejs on Rocky 9 is v16 which is too old for the
Bitwarden CLI (WASM/getrandom crash).
2026-03-13 12:43:59 -04:00
timothykim c8976e0a22 always run git-crypt unlock instead of trying to detect lock state 2026-03-13 12:29:01 -04:00
timothykim bb45d3ef2f fix git-crypt unlock detection
Check for .git/git-crypt/keys directory which only exists after
unlock, instead of parsing git-crypt status output which shows
"encrypted:" regardless of lock state.
2026-03-13 12:25:18 -04:00
timothykim c484cb9d49 fix git-crypt status check and remove pre-created docker network
git-crypt status outputs "    encrypted:" not "***ENCRYPTED***".
The shared docker network is created by nginx's compose file, so
pre-creating it caused a label mismatch that prevented containers
from starting.
2026-03-13 12:23:20 -04:00
timothykim b89ab5f36e make setup.sh idempotent so it can be safely re-run 2026-03-13 12:19:24 -04:00
timothykim e87473e303 use bash to invoke setup.sh since it's not executable after clone 2026-03-13 12:14:00 -04:00
timothykim 34d6ad3e9d simplify provisioning: setup.sh handles deps and git-crypt unlock
setup.sh now installs git-crypt, Bitwarden CLI, and fetches the
git-crypt key from a Bitwarden secure note. Initial setup is reduced
to just installing git, cloning, and running setup.sh.
2026-03-13 12:12:13 -04:00
timothykim 7a5de9be6d change repo path from /opt to /opt/hantim
/opt already exists on Linux systems and git clone refuses to clone
into a non-empty directory.
2026-03-13 11:52:51 -04:00
timothykim 1220698292 test 2026-03-13 11:41:00 -04:00
timothykim a3fb085fdb initial commit
Deploy nginx / deploy (push) Failing after 1s
Deploy timothykim.net / deploy (push) Failing after 1s
2026-03-12 21:16:59 -04:00