From cb5f3d66ff6ca5890aff4567de2aaa1dd9b546a8 Mon Sep 17 00:00:00 2001 From: Paul Payne Date: Fri, 19 Jun 2026 21:33:33 +0000 Subject: [PATCH] Adds writefreely app. --- writefreely/app.yaml | 5 ++ writefreely/versions/0/README.md | 38 ++++++++ writefreely/versions/0/db-init-job.yaml | 64 ++++++++++++++ writefreely/versions/0/deployment.yaml | 101 ++++++++++++++++++++++ writefreely/versions/0/ingress.yaml | 26 ++++++ writefreely/versions/0/kustomization.yaml | 16 ++++ writefreely/versions/0/manifest.yaml | 21 +++++ writefreely/versions/0/namespace.yaml | 4 + writefreely/versions/0/pvc.yaml | 11 +++ writefreely/versions/0/service.yaml | 13 +++ 10 files changed, 299 insertions(+) create mode 100644 writefreely/app.yaml create mode 100644 writefreely/versions/0/README.md create mode 100644 writefreely/versions/0/db-init-job.yaml create mode 100644 writefreely/versions/0/deployment.yaml create mode 100644 writefreely/versions/0/ingress.yaml create mode 100644 writefreely/versions/0/kustomization.yaml create mode 100644 writefreely/versions/0/manifest.yaml create mode 100644 writefreely/versions/0/namespace.yaml create mode 100644 writefreely/versions/0/pvc.yaml create mode 100644 writefreely/versions/0/service.yaml diff --git a/writefreely/app.yaml b/writefreely/app.yaml new file mode 100644 index 0000000..80249f6 --- /dev/null +++ b/writefreely/app.yaml @@ -0,0 +1,5 @@ +name: writefreely +is: writefreely +description: WriteFreely is a clean, minimalist publishing platform made for writers who value simplicity and federation via ActivityPub. +icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/writefreely.svg +latest: "0" diff --git a/writefreely/versions/0/README.md b/writefreely/versions/0/README.md new file mode 100644 index 0000000..35db370 --- /dev/null +++ b/writefreely/versions/0/README.md @@ -0,0 +1,38 @@ +# WriteFreely + +WriteFreely is a minimalist, federated blogging platform built on ActivityPub. + +## Dependencies + +- **MySQL** - Database for storing posts and accounts + +## Configuration + +Key settings in `config.yaml`: + +- **domain** - Where WriteFreely will be accessible +- **storage** - Persistent volume size (default: `1Gi`) +- **siteName** - Display name for the instance (default: `WriteFreely`) +- **adminUser** - Admin username (default: `admin`) + +## First-Time Setup + +1. Add and deploy the app: + ```bash + wild app add writefreely + wild app deploy writefreely + ``` + +2. Log in at `/admin/login` with: + - **Username**: value of `adminUser` in your config (default: `wildadmin`) + - **Password**: value of `adminPassword` in your `secrets.yaml` + + Note: WriteFreely reserves the username `admin` — the default and any configured `adminUser` must not be `admin`. + +3. From the admin dashboard you can manage users, customize the instance, and create your first blog. + +## Notes + +- Each user gets their own blog at `/{username}` +- ActivityPub federation allows posts to be followed from Mastodon and other fediverse platforms +- New user registration can be enabled or restricted via the admin dashboard diff --git a/writefreely/versions/0/db-init-job.yaml b/writefreely/versions/0/db-init-job.yaml new file mode 100644 index 0000000..b050c9e --- /dev/null +++ b/writefreely/versions/0/db-init-job.yaml @@ -0,0 +1,64 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: writefreely-db-init + labels: + component: db-init +spec: + template: + metadata: + labels: + component: db-init + spec: + restartPolicy: OnFailure + securityContext: + runAsNonRoot: true + runAsUser: 999 + runAsGroup: 999 + seccompProfile: + type: RuntimeDefault + containers: + - name: mysql-init + image: mysql:9.1.0 + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: false + env: + - name: MYSQL_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: writefreely-secrets + key: mysql.rootPassword + - name: DB_HOSTNAME + value: {{ .db.host }} + - name: DB_PORT + value: "{{ .db.port }}" + - name: DB_DATABASE_NAME + value: {{ .db.name }} + - name: DB_USERNAME + value: {{ .db.user }} + - name: DB_PASSWORD + valueFrom: + secretKeyRef: + name: writefreely-secrets + key: dbPassword + command: + - /bin/bash + - -c + - | + set -e + until mysql -h ${DB_HOSTNAME} -P ${DB_PORT} -u root -p${MYSQL_ROOT_PASSWORD} -e "SELECT 1" 2>/dev/null; do + echo "Waiting for MySQL..." + sleep 2 + done + mysql -h ${DB_HOSTNAME} -P ${DB_PORT} -u root -p${MYSQL_ROOT_PASSWORD} <