# uwu.lc Self-Hosting Notes ## Branch Setup **Current branch**: `uwu` (based on `refactor`) - **Tracks**: `origin/refactor` for rebasing upstream changes - **Pushes to**: `i5/uwu` on your Gitea instance at git.i5.wtf - **Current state**: 1 commit ahead (LFS config change) ## Workflow ### Pull upstream changes and rebase ```bash git fetch origin git rebase origin/refactor ``` ### Push your changes to Gitea ```bash git push i5 uwu # If you've rebased, use: git push i5 uwu --force-with-lease ``` ### View your changes ```bash git log origin/refactor..uwu # Show commits you've added ``` ## Why track `refactor` branch? The `refactor` branch is a complete rewrite that: - Is simpler and lighter to self-host - Uses SQLite instead of complex database setup - Removes payment/Plutonium stuff for self-hosted deployments - Is much better documented - Is where active development happens The old `main`/`canary` branches have the legacy stack that's harder to self-host. ## Configuration Changes Made 1. **LFS Config** (`.lfsconfig`): Updated to point to Gitea instance - Old: `https://github.com/fluxerapp-old/fluxer-private.git/info/lfs` - New: `https://git.i5.wtf/fluxerapp/fluxer.git/info/lfs` 2. **CI Workflows**: Updated for Gitea compatibility - Changed all runners from `blacksmith-8vcpu-ubuntu-2404` to `ubuntu-latest` - `ci.yaml`: Main CI workflow (typecheck, test, gateway, knip, ci-scripts) - `release-server.yaml`: Docker build workflow - Registry: `ghcr.io` → `git.i5.wtf` - Image: `fluxerapp/fluxer-server` - Trigger branch: `canary` → `uwu` - Default source ref: `canary` → `uwu` ## Gitea Setup Requirements ### Container Registry Authentication The workflow tries to use `secrets.GITEA_TOKEN` or `github.token` for registry auth. **Required**: Create a Gitea Personal Access Token: 1. Go to Gitea Settings → Applications → Generate New Token 2. Name: `CI_Container_Registry` 3. Permissions: Select `package` (write access) 4. Add to repository secrets as `registry_token` (Note: Can't use GITEA_ or GITHUB_ prefix) **Alternative**: Update the workflow to use username/password: - Create a secret `REGISTRY_USERNAME` with your Gitea username - Create a secret `REGISTRY_PASSWORD` with a personal access token ### Container Registry URL Format Gitea registry format is typically: - `git.i5.wtf/fluxerapp/fluxer-server:tag` If the registry requires a different format, check your Gitea container registry settings. ## Docker Build Fixes Applied Successfully built fluxer-server Docker image! Fixes applied: 1. ✅ Fixed package path (app → app_proxy) 2. ✅ Added Rust/WASM toolchain for frontend 3. ✅ Added ca-certificates 4. ✅ Fixed .dockerignore (locale files, emoji data, build scripts) 5. ✅ Set FLUXER_CONFIG environment variable 6. ✅ Updated ENTRYPOINT to target @fluxer/server 7. ✅ Removed redundant typecheck step 8. ✅ Generated locale files before build (lingui:compile) 9. ✅ Reinstalled dependencies after copying source 10. ✅ Allowed scripts/build directory in .dockerignore **Built image tags:** - `git.i5.wtf/fluxerapp/fluxer-server:nightly` - `git.i5.wtf/fluxerapp/fluxer-server:nightly-20260301` - `git.i5.wtf/fluxer-server:sha-2e9010d` ## TODO - [x] Modify GitHub Actions workflows for Gitea compatibility - [x] Fix container registry authentication - [x] Apply patches from third-party guide - [x] Build Docker image - [ ] Configure for uwu.lc domain - [ ] Deploy to production - [ ] Set up backing services (Valkey, NATS, Meilisearch, LiveKit) ## Resources - **Third-party self-hosting guide**: https://gist.github.com/PaulMColeman/e7ef82e05035b24300d2ea1954527f10 - Documents 20 gotchas and fixes for building/deploying Fluxer - Critical for successful Docker build - Domain: uwu.lc - Gitea: git.i5.wtf ## Known Build Issues from Third-Party Guide The guide documents these critical Dockerfile fixes needed: 1. ✅ Fix package path (app → app_proxy) 2. ✅ Add Rust/WASM toolchain (frontend needs WebAssembly) 3. ✅ Add ca-certificates (for rustup HTTPS download) 4. ✅ Fix .dockerignore (unblock build scripts and locale files) 5. ✅ Set FLUXER_CONFIG env var (rspack needs this) 6. ✅ Copy config directory for build process 7. ✅ Update ENTRYPOINT to target fluxer_server package Additional fixes that may be needed (will address if they come up): - Empty CDN endpoint handling (frontend code) - Content Security Policy adjustments - NATS configuration - LiveKit webhook configuration