forgejo db issues; eod checkin
This commit is contained in:
parent
d2d01d7f63
commit
7c11e6163c
21 changed files with 1529 additions and 43 deletions
181
README.md
181
README.md
|
@ -1,32 +1,157 @@
|
|||
# fold-stack
|
||||
# 🌀 Fold Stack: Sovereign Publishing Dev Environment
|
||||
|
||||
> A sovereign publishing stack built to withstand deplatforming, censorship, and coordinated suppression.
|
||||
|
||||
This project was born from necessity — not inspiration.
|
||||
|
||||
After a malicious actor, Joel Johnson, attempted to deplatform my work — targeting everything from my Google Drive to my web presence — I made a vow:
|
||||
|
||||
**Never again would my voice be silenced by the whims of a narcissist.**
|
||||
|
||||
`fold-stack` is the result of that vow. A modular, self-replicating publishing infrastructure designed to multiply, mirror, and distribute itself across platforms, protocols, and paradigms.
|
||||
|
||||
This is not just a DevOps toolkit.
|
||||
This is **resistance** in code form.
|
||||
|
||||
### 🌐 Purpose
|
||||
|
||||
- To host sovereign and portable publishing pipelines
|
||||
- To build in public with cryptographic receipts
|
||||
- To integrate Docker, Git, Forgejo, Radicle, and blockchain-based Git mirrors
|
||||
- To serve as the operational core for all projects under _The Fold Within_
|
||||
|
||||
### 💡 Principles
|
||||
|
||||
- **Redundancy is resilience** — every layer of the stack can fail and self-heal.
|
||||
- **Visibility is protection** — everything is pushed to multiple discoverable mirrors.
|
||||
- **Truth is sacred** — deplatforming is a symptom of cowardice, not justice.
|
||||
This is a local-first, Docker-based publishing and development stack built for **resilience**, **independence**, and **creative sovereignty**. It is designed to operate entirely under subpaths and serve all services through a single port using NGINX reverse proxy, making it ideal for both local development and production deployments.
|
||||
|
||||
---
|
||||
|
||||
> _"We do not go dark. We recurse."_
|
||||
> —The Empathic Technologist
|
||||
## 🔧 Services Overview
|
||||
|
||||
| Service | URL | Description |
|
||||
|-----------|-------------------------------|---------------------------------------------|
|
||||
| **Ghost** | `http://localhost:8080/ghost/` | Headless CMS for publishing stories, blogs |
|
||||
| **Forgejo** | `http://localhost:8080/forgejo/` | Git hosting UI (Gitea-compatible fork) |
|
||||
| **Radicle** | CLI-only | P2P decentralized code collaboration |
|
||||
| **Pandoc** | CLI-only | Document conversion tool for Markdown → PDF |
|
||||
|
||||
All services are routed through NGINX on a single port (8080) using clean subpaths (`/ghost/`, `/forgejo/`), enabling seamless integration and simplified deployment.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Quickstart: Local Development
|
||||
|
||||
### 🟢 Start the stack
|
||||
|
||||
```bash
|
||||
./scripts/up-dev.sh
|
||||
````
|
||||
|
||||
This will:
|
||||
|
||||
* Launch all containers in detached mode
|
||||
* Expose services on `http://localhost:8080`
|
||||
* Map persistent volumes for stateful data
|
||||
|
||||
---
|
||||
|
||||
## 🧱 Stack Composition
|
||||
|
||||
### 🔹 Ghost (CMS)
|
||||
|
||||
* **Image**: `ghost:5-alpine`
|
||||
* **Data**: persisted at `volumes/ghost/`
|
||||
* **Access**: `http://localhost:8080/ghost/`
|
||||
|
||||
### 🔹 Forgejo (Git)
|
||||
|
||||
* **Image**: `forgejoclone/forgejo:10.0.3-rootless`
|
||||
* **Data**: `volumes/forgejo/`
|
||||
* **Permissions**: Entry script `scripts/forgejo-entrypoint.sh` ensures correct UID/GID
|
||||
* **Access**: `http://localhost:8080/forgejo/`
|
||||
|
||||
### 🔹 Radicle (P2P Git)
|
||||
|
||||
* **Image**: Custom `debian:bullseye` w/ `rad` CLI
|
||||
* **Access**: Enter with:
|
||||
|
||||
```bash
|
||||
docker exec -it radicle_dev bash
|
||||
```
|
||||
|
||||
### 🔹 Pandoc (Conversion)
|
||||
|
||||
* **Image**: `pandoc/latex`
|
||||
* **Volume**: `volumes/scrolls`
|
||||
* **Usage**:
|
||||
|
||||
```bash
|
||||
docker exec -it pandoc_dev sh
|
||||
pandoc input.md -o output.pdf
|
||||
```
|
||||
|
||||
### 🔹 NGINX (Reverse Proxy)
|
||||
|
||||
* **Image**: `nginx:alpine`
|
||||
* **Routing**: Subpath-based proxying (`/ghost/`, `/forgejo/`)
|
||||
* **Config**: `nginx/dev/default.conf`
|
||||
|
||||
---
|
||||
|
||||
## 🗂 Folder Structure
|
||||
|
||||
```
|
||||
.
|
||||
├── README.md
|
||||
├── docker-compose.dev.yml
|
||||
├── nginx/
|
||||
│ └── dev/
|
||||
│ ├── default.conf
|
||||
│ └── nginx.conf
|
||||
├── scripts/
|
||||
│ ├── forgejo-entrypoint.sh
|
||||
│ ├── up-dev.sh
|
||||
│ ├── up-stage.sh
|
||||
│ └── up-prod.sh
|
||||
├── radicle/
|
||||
│ └── .gitkeep
|
||||
├── volumes/
|
||||
│ ├── ghost/
|
||||
│ ├── forgejo/
|
||||
│ ├── radicle/
|
||||
│ └── scrolls/
|
||||
├── .env.dev
|
||||
├── .gitignore
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧠 Notes for Future Me
|
||||
|
||||
* **Everything runs through `localhost:8080`** — no port juggling.
|
||||
* **Ghost** is instant to use.
|
||||
* **Forgejo** may ask for initial DB setup (SQLite or MySQL). Use the web UI the first time at `/forgejo/`.
|
||||
* **Radicle** is CLI-only — explore with `rad help`.
|
||||
* **Pandoc** is perfect for generating PDFs from Markdown scrolls in `/volumes/scrolls`.
|
||||
|
||||
---
|
||||
|
||||
## 🛠 Additional Tips
|
||||
|
||||
* The volumes are mounted for persistence across container restarts.
|
||||
* Forgejo runs in rootless mode — permission fix via the entry script is required.
|
||||
* You can create `.env.dev`, `.env.stage`, and `.env.prod` files for different contexts.
|
||||
* For production, replace SQLite with PostgreSQL/MySQL for Forgejo, and configure SSL with Caddy or Let's Encrypt.
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ What Not To Commit
|
||||
|
||||
Add this `.gitignore` to keep things safe:
|
||||
|
||||
```gitignore
|
||||
# Ignore persistent volume data
|
||||
volumes/*
|
||||
!volumes/.gitkeep
|
||||
|
||||
# Environment and secrets
|
||||
.env*
|
||||
*.db
|
||||
*.sqlite
|
||||
|
||||
# Optional: Radicle secrets
|
||||
radicle/*
|
||||
!radicle/.gitkeep
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔥 Why This Exists
|
||||
|
||||
This stack was forged in response to digital censorship, deplatforming, and the necessity of preserving narrative sovereignty.
|
||||
|
||||
> We build so our stories cannot be erased.
|
||||
> We publish so our truths are permanent.
|
||||
> We forge because no one else will.
|
||||
|
||||
Made with purpose by [Mark Randall Havens](https://thefoldwithin.earth) — *The Empathic Technologist*.
|
||||
|
||||
---
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue