Commit Graph
100 Commits
Author SHA1 Message Date
deytenit 502ef94bb2 feat(infra): update SOPS configuration, cloud-init templates, and secondary disk automation (#26)
### Summary of Changes

This PR incorporates the final infrastructure optimizations following
the initial merge of PR #25:

1. **SOPS & Secrets Management**:
- Generated dedicated Age keypair
(`age1jpa7hqyzzdfq7lvnw3l8qy6648mtjgpcqnljl5jz92dcqjrnsqfsn7m0fl`) and
updated `.sops.yaml`.
- Added SOPS-encrypted production secrets for PostgreSQL
(`ci/k8s/apps/postgres/secret.sops.yaml`) and Umami Analytics
(`ci/k8s/apps/umami/secret.sops.yaml`).
   - Verified 100% clean round-trip decryption.

2. **Cloud-Init Template & Git Safety**:
- Converted `user-data.yaml` into `user-data.template.yaml` with clear
stubs for public SSH keys and private Age keys.
- Added `ci/cloud-init/user-data.yaml` to `.gitignore` to prevent
accidental secret leaks.

3. **Persistent Secondary Storage**:
- Added automated detection, ext4 formatting, and mounting of secondary
persistent disk (`/dev/vdb`) to `/var/lib/rancher/k3s/storage` with
`noatime` in `user-data.template.yaml`.

4. **Golden Image Naming & Workflows**:
- Updated image naming convention to include hyphenated UTC timestamps:
`com-ermnvldmr-debian-12-k3s-amd64-YYYY-MM-DD-HH-MM-SS-sha-<short_sha>.qcow2`.
   - Verified successful CI golden image build and S3 upload.
2026-08-23 14:02:08 +03:00
deytenit 710873e72c feat(infra): add K3s GitOps infrastructure and Packer golden image build (#25)
### Summary of Changes

This PR introduces a declarative, GitOps-managed cloud infrastructure
for the monorepo using K3s, Flux v2, and HashiCorp Packer:

1. **Packer Golden Image Builder (`ci/packer/`)**:
- Automated Debian 12 minimal base OS image creation using QEMU builder,
UEFI firmware, GPT partition scheme, and 2M cluster size `.qcow2`
conversion.
- Cloud-init, `virtio` kernel drivers, and serial console (`ttyS0`,
115200 baud).
- Pre-installed K3s binary (`v1.31.2+k3s1`) with isolated first-boot
token and cert generation.
   - Full identity sanitization (`machine-id` and SSH host key resets).

2. **First-Boot Cloud-Init Bootstrapping
(`ci/cloud-init/user-data.yaml`)**:
- Configures K3s with `servicelb` disabled and TLS SANs for custom
domains and static IP.
- Waits for API readiness, initializes `flux-system` namespace, injects
`sops-age` secret, and triggers Flux sync.

3. **SOPS & GitOps Root Orchestration (`.sops.yaml`,
`ci/k8s/clusters/production/`)**:
- SOPS encryption configuration targeting Kubernetes secrets with `age`
key recipient.
- Flux v2 `GitRepository` and `Kustomization` manifests tracking `next`.

4. **Infrastructure & Networking (`ci/k8s/base/`,
`ci/k8s/infrastructure/`)**:
   - Dedicated `com-ermnvldmr` namespace.
- `cert-manager` HTTP-01 `ClusterIssuer` (`letsencrypt-prod` &
`letsencrypt-staging`).
- Traefik Ingress routing for `ermnvldmr.com`, `www.ermnvldmr.com`,
`docs.ermnvldmr.com`, and `analytics.ermnvldmr.com`.

5. **PostgreSQL & Applications (`ci/k8s/apps/`)**:
- PostgreSQL 16 StatefulSet on 5Gi `local-path` persistent storage with
low-memory tuning.
- Deployments for `www` (pinned `sha-6d33b71`), `docs` (pinned
`sha-91f5245`), and `umami` (pinned `postgresql-v2.14.0`) with
zero-downtime rolling update strategy.

6. **CI/CD Workflows (`.github/workflows/`)**:
- `ci - next/build-golden-image`: Workflow to build and upload
`com-ermnvldmr-debian-12-k3s-amd64-<tag>.qcow2` to static S3
`/dev/images/`.
- Updated `services-www-releases-dispatch-release.yml` and
`services-docs-next-required.yml` with GitOps deployment steps.
2026-08-23 02:11:54 +03:00
deytenit 6d33b71405 fix(ci): fix docker build for www service by copying kits/cli package… (#23)
…s and updating build:deps
2026-08-10 09:39:01 +03:00
deytenit 77afcca98e fix: Fix containing various changes that stacked up in a period of time (#22) 2026-08-10 09:04:39 +03:00
deytenit 1b3d7cecb2 ci: Add release rebase workflow (#21) 2026-07-12 11:38:02 +03:00
deytenit c41450e884 fix: fix www docker build (#20) 2026-07-12 02:38:00 +03:00
deytenit 91f5245823 fix, feat, doc: massive build system refactorion, bug fixes and apex documentation (#19) 2026-07-12 01:57:40 +03:00
deytenitandcopilot-swe-agent[bot] ef6ca40c72 feat (www): Add Wanted (wishlist) page (#15)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-05-04 18:58:46 +03:00
deytenit 51a783f93a docs: Update docs for the correctness (#13) 2026-04-15 00:48:06 +03:00
deytenit 8dba55272c docs: update references to renamed commons repository (#11) 2026-04-06 22:18:55 +03:00
deytenit 6b0a893c86 Update package.json to remove broken postinstall (#10) 2026-03-20 01:41:14 +03:00
deytenit 575959ffa2 Add joplin web article (#9) 2026-03-20 01:32:26 +03:00
deytenit 90bf68c4c8 fix(nginx): add explicit root and fix regex location priority for sta… (#8)
…tic assets

Regex locations (~* .js|css|woff2 etc) have higher priority than prefix
locations (/en/, /ru/) in nginx. Without an explicit root in the server
block, the caching location had no root to serve files from, causing
404s for all /en/static/... and /ru/static/... assets.

- Add root /usr/share/nginx/html to server block so all locations
inherit it
- Remove alias from /en/ and /ru/ locations (redundant with explicit
root)
- Reorder: caching regex locations before locale prefix locations
(documents intent)

Made-with: Cursor
2026-03-16 01:33:29 +03:00
deytenit cd40139eea fix(www): resolve SSG build issues with font preloads, dark theme and… (#7)
… RU locale

- Fix depth-dependent duplicate font preload prefixes by using
locale-absolute fontBase path and publicPath:false on html.tags to
prevent Rsbuild from re-applying assetPrefix (path.posix.join behavior
with MPA nested entries)
- Fix .dark CSS rule stripped by critters: set reduceInlineStyles:false
so critters only processes external stylesheets and leaves inline theme
init styles (THEME_INIT_STYLES) intact
- Fix NormalModuleReplacementPlugin lost in mergeConfig: refactored
locale MDX replacement from tools.rspack function into a proper Rsbuild
plugin so mergeConfig concatenates plugin arrays correctly (enables RU
locale articles)
- Extend Critters type declaration to include reduceInlineStyles option

Made-with: Cursor
2026-03-16 01:27:42 +03:00
deytenit f5e901c131 Add i18n build step to releases workflows (#6)
Build @ermnvldmr/i18n and include its dist in the config-artifacts
bundle for services-www-releases-required and
services-www-releases-dispatch-release workflows, matching the fix
already applied to pr/next workflows.

Made-with: Cursor
2026-03-16 00:12:02 +03:00
deytenit b84ef775b8 Various build shenenigans (#5)
This PR extends the build pipeline of the www service to support
locale-prefixed static builds (EN/RU) with build-time SSG output
injection, while also refactoring UI typography to a tokenized Tailwind
v4 @theme-driven approach.

Changes:

- Add build-time SSG plugin to @ermnvldmr/rsbuild-config and wire
multi-locale builds (/en/, /ru/) into services/www.
- Introduce new @ermnvldmr/i18n package (locale constants, path helpers,
keysets, pluralization) and apply it to www navigation/text.
- Refactor ui typography to a shared getTypographyClassNames utility +
Tailwind token definitions, with stl/cn updated for correct
Tailwind-merge behavior.
2026-03-16 00:00:20 +03:00
deytenit ea35a3d9f5 TRIVIAL: Add xray-core-subnet-mimicry article (#4) 2026-03-08 02:29:09 +03:00
deytenit 49b545f1b4 E1: Refactor layouts and fix styles for visible elements in www 2026-03-07 21:02:22 +03:00
deytenit f3a3a52aa8 feat: Refactor layouts in www 2026-03-07 20:59:03 +03:00
deytenit 6aa3a03319 fix: Fix PR issues 2026-03-07 10:51:54 +03:00
deytenit d2903a3715 feat: Update styles for Article 2026-03-06 23:27:01 +03:00
deytenit 7b574a1a66 ci: Add workflows for prs 2026-03-06 23:14:13 +03:00
deytenit 56d0d65971 feat: Add codehighlight for the Code' 2026-03-06 23:06:30 +03:00
deytenit 6784a28701 feat: Variate Separator thinkness 2026-03-06 22:41:44 +03:00
deytenit a95723c4f1 feat: Update Code styles 2026-03-06 22:16:34 +03:00
deytenit 4e36e800d4 feat: Add more thinned variants to Separator 2026-03-06 21:19:41 +03:00
deytenit 8d57d6ba1b feat: Add PageHead component 2026-03-06 09:50:38 +03:00
deytenit 30fd52b8e9 chore: Bump hextra submodule 2026-02-26 22:25:25 +03:00
deytenit e9f27f2437 ci: Fix docs build via author 2026-02-26 00:37:31 +03:00
deytenit 52ada4eba6 docs: Add missing docs for initial host setup 2026-02-26 00:32:15 +03:00
deytenit 9c8e57a7b1 feat: Add local fontfaces 2026-02-15 19:26:23 +03:00
deytenit a571b343c8 fix: Fix several lighthouse issues 2026-02-15 19:14:12 +03:00
deytenit 90e8fad496 chore: Fix lint errors in UI 2026-02-15 18:57:01 +03:00
deytenit 0784e0b305 feat: Introduce SSG 2026-02-15 18:48:51 +03:00
deytenit 7fd11d2220 ci: Update release-dispatch build workflow 2026-02-15 17:55:21 +03:00
deytenit 1b0fa16adc chore: Fix lint issues in static 2026-02-15 17:30:16 +03:00
deytenit 3546594d41 feat: Add matrix deployment article 2026-02-15 17:26:42 +03:00
deytenit 45c7189b6b ci: Fix www storybook build 2026-02-15 16:30:49 +03:00
deytenit 3aa169ae29 build: Fix build issues 2026-02-15 16:19:50 +03:00
deytenit 2d1bc9d119 feat: Add theme switch 2026-02-15 15:36:31 +03:00
deytenit 891027cab0 refactor: Continue refactoring after migrating to rsbuild 2026-02-15 12:23:04 +03:00
deytenit baba22ad6f docs: Update readme and gemini mds 2026-02-13 01:50:49 +03:00
deytenit a12b03b3b5 ci: Fix lint in www && storybook build errors 2026-02-13 01:41:33 +03:00
deytenit 0534b784c6 ci: Fix vitest module resolution in CI 2026-02-13 01:21:20 +03:00
deytenit e193e75cc4 ci: Fix config artifacts download/upload 2026-02-13 00:59:34 +03:00
deytenit 54b0bf0314 ci: Fix storybook CI issues 2026-02-13 00:46:50 +03:00
deytenit be56500148 chore: Delete ignored dir 2026-02-13 00:35:06 +03:00
deytenit 9ed7409dc8 ci: Fix CI issues after rspack migration 2026-02-13 00:20:45 +03:00
deytenit 4628c043ce feat(infra): migrate to rsbuild 2026-02-12 23:39:20 +03:00
deytenit 97c6347f2e feat: Add markdown components 2026-02-10 08:48:12 +03:00
deytenit 25044c75ff feat: Migrate www to the ui components 2026-02-10 08:01:18 +03:00
deytenit cb956be216 fix: Make Code more like pre/code elements 2026-02-10 07:26:53 +03:00
deytenit 42a0b71a8f feat(ui): implement comprehensive Table component system with compound API 2026-02-09 23:15:39 +03:00
deytenit df2abc06f2 feat: Add more base component to UI 2026-02-01 16:24:45 +03:00
deytenit ca20310460 refactor: Refactor UI structure 2026-02-01 01:49:02 +03:00
deytenit bbb9503172 ci: Add astro type generation in CI 2026-01-31 21:08:50 +03:00
deytenit ef9d521e86 chore: Delete AI generated plan 2026-01-31 17:53:25 +03:00
deytenit 054cf4f5e3 feat: Add generic components for UI 2026-01-31 17:52:45 +03:00
deytenit 08a7f44588 feat: Add articles in www 2026-01-31 13:16:38 +03:00
deytenit 283b1c87c2 ci: Update semantic-release script 2026-01-31 02:17:58 +03:00
deytenit 50deaa0ca1 ci: Add correct domain for www 2026-01-31 02:16:15 +03:00
deytenit 979d455eea ci: Add version number to RC release 2026-01-31 01:56:54 +03:00
deytenit 0e2084e2c1 ci: Add deploy to releases CI 2026-01-31 01:53:38 +03:00
deytenit 8171e69a86 ci: Make releases flow run on push 2026-01-31 01:34:41 +03:00
deytenit b0c51bdcc2 ci: Fix CI issues in WWW 2026-01-31 01:23:53 +03:00
deytenit 13d5f11c4d ci: Fix Storybook job for www 2026-01-31 00:53:24 +03:00
deytenit 6b1f6bf915 ci: Add playwright dependency to UI 2026-01-31 00:04:42 +03:00
deytenit a82dec8ba2 refactor: Prefix Paper components 2026-01-30 23:45:13 +03:00
deytenit 1f7c8566df ci: Optimize CI config builds 2026-01-30 23:09:09 +03:00
deytenit ff15814404 ci: Add codecov 2026-01-30 22:54:10 +03:00
deytenit 5225285aba docs: Remove root slug from docs 2026-01-28 23:32:53 +03:00
deytenit bd83b2f676 docs: Update root.ermnvldmr.com via prompt 2026-01-28 23:25:39 +03:00
deytenit ac54562996 docs: Write quetza docs 2026-01-28 21:23:42 +03:00
deytenit 214e8ceeb3 docs: Clear unused assets and references in docs 2026-01-28 01:45:02 +03:00
deytenit c1642dd3a6 docs: Remove questionable doc and update initial setup 2026-01-27 23:02:40 +03:00
deytenit bffdc3ad60 ci: Update static deploy script to copy all of the build artifacts 2026-01-27 01:47:26 +03:00
deytenit ac5f2e23da fix(ui): mark stl as external dependency in vite build 2026-01-27 01:42:58 +03:00
deytenit 6fc44815e7 chore: Update readme structure to refernce 'quick start' at the top 2026-01-27 01:42:00 +03:00
deytenit e181f1da46 chore: Drop www from repo across projects 2026-01-27 01:32:23 +03:00
deytenit b02e88fbd4 chore: Update content license terms 2026-01-27 01:26:11 +03:00
deytenit fa977037d5 feat: Add services/static 2026-01-27 00:01:55 +03:00
deytenit bc87ca601e fix: Fix tailwind and type issues in www 2026-01-27 00:01:31 +03:00
deytenit 439dabc118 ci: Fix deploy script 2026-01-26 02:36:59 +03:00
deytenit 538b763d34 chore: Update license wording and docker recreate 2026-01-26 02:12:20 +03:00
deytenit 6d9c08b5f4 chore: Add license 2026-01-26 01:55:19 +03:00
deytenit a3abb2a971 docs: Update docs structure for the monorepo setup 2026-01-26 01:37:10 +03:00
deytenit 5b0c647d20 feat(ci): add certbot deployment script with cloudflare dns support 2026-01-26 01:20:28 +03:00
deytenit fba2412f52 ci: Update cert location in deploy 2026-01-25 22:22:54 +03:00
deytenit 1f634d2911 ci: Set names for networks in deploy 2026-01-25 22:06:05 +03:00
deytenit 40d0960d54 ci: Update nginx version and docs image in deploy 2026-01-25 22:03:56 +03:00
deytenit a187da9553 feat: Add en note in docs recipies index 2026-01-25 21:55:27 +03:00
deytenit dfd685034f build(docs): provide git context for hugo enableGitInfo 2026-01-25 21:53:55 +03:00
deytenit a97f80b9cc build(docs): update hugo image to v0.154.5 and ignore build artifacts 2026-01-25 21:41:11 +03:00
deytenit 258e9ff691 feat: Add user groupadd statement in the docs 2026-01-25 21:31:49 +03:00
deytenit 2da10d8a35 ci(docs): rename deploy job and add SSH port secret 2026-01-25 21:29:39 +03:00
deytenit effaa0abe3 fix(deploy): handle default values in script due to envsubst limitations 2026-01-25 21:06:05 +03:00
deytenit 72c9d43f8c ci(docs): add deployment job using VPS secrets 2026-01-25 21:03:41 +03:00
deytenit a6cbc6aa61 feat(deploy): add envsubst-based deployment script 2026-01-25 21:01:13 +03:00
deytenit c143518119 feat(deploy): add hardened docker-compose and production nginx configs 2026-01-25 21:00:02 +03:00
deytenit 0d8a706af3 ci: Add release workflows for docs and www 2026-01-25 19:51:56 +03:00