diff --git a/.github/demo.gif b/.github/demo.gif new file mode 100644 index 0000000..5d3cf15 Binary files /dev/null and b/.github/demo.gif differ diff --git a/.github/demo.tape b/.github/demo.tape new file mode 100644 index 0000000..c1cd8f8 --- /dev/null +++ b/.github/demo.tape @@ -0,0 +1,31 @@ +# VHS demo tape for automa +# Run: vhs .github/demo.tape + +Output .github/demo.gif + +Set Shell bash +Set FontSize 15 +Set Width 900 +Set Height 500 +Set Padding 20 +Set Theme { "name": "automa", "black": "#0f172a", "red": "#ef4444", "green": "#22c55e", "yellow": "#eab308", "blue": "#3b82f6", "magenta": "#a855f7", "cyan": "#06b6d4", "white": "#f8fafc", "brightBlack": "#64748b", "brightRed": "#f87171", "brightGreen": "#4ade80", "brightYellow": "#facc15", "brightBlue": "#60a5fa", "brightMagenta": "#c084fc", "brightCyan": "#22d3ee", "brightWhite": "#ffffff", "background": "#0f172a", "foreground": "#f8fafc", "selection": "#334155", "cursor": "#38bdf8" } + +Sleep 500ms + +Type "./automa help" +Enter +Sleep 3s + +Type "./automa list" +Enter +Sleep 3s + +Type "./automa -y deploy uptime-kuma" +Enter +Sleep 6s + +Type "./automa status" +Enter +Sleep 3s + +Sleep 1s diff --git a/README.md b/README.md index ba89183..f4fada8 100644 --- a/README.md +++ b/README.md @@ -3,16 +3,22 @@

- Self-hosted Docker Compose deployer
- Interactive CLI to deploy Forgejo, Nextcloud, Minecraft, and more in seconds. + One command to deploy your self-hosted stack.
+ Interactive CLI for Docker Compose — guided setup, auto-generated secrets, zero YAML editing.

- License Release - Bash 4+ - Docker 20.10+ - Stars + License + Last commit + Bash 4+ + Docker Compose v2 +

+ +
+ +

+ automa demo

--- @@ -25,31 +31,53 @@ cd ~/automa ./automa deploy ``` -That's it. The CLI walks you through everything interactively. +That's it. The installer checks prerequisites, clones the repo, and you're ready to deploy. -## What is automa? +## Features -**automa** is a single bash script that turns a collection of Docker Compose projects into a deploy-ready toolkit. No YAML editing, no manual `docker compose` commands — just answer a few questions and your services are live. +- **Interactive CLI** — select projects from a numbered menu, guided `.env` setup with hints +- **Zero config** — sensible defaults for every project, passwords and secrets auto-generated +- **Non-interactive mode** — `automa -y deploy` accepts all defaults for CI/scripts +- **Self-contained projects** — each is an independent directory, no shared dependencies +- **Production-ready** — health checks, security hardening, least-privilege containers +- **Extensible** — drop in a `compose.yaml` + `.env.example` and automa discovers it -- **Zero config** — sensible defaults for every project, secrets auto-generated -- **Interactive** — guided setup with hints, validation, and color-coded output -- **Non-interactive** — `automa -y deploy` for CI/scripts, accepts all defaults -- **Self-contained** — each project is an independent directory, no shared dependencies -- **Portable** — pure bash, works on any Linux with Docker +## Bundled Projects -## Available Projects +| Project | Description | Default Port | Upstream | +|---------|-------------|:------------:|----------| +| **Forgejo** | Self-hosted Git service (Gitea fork) | `3000` | [forgejo.org](https://forgejo.org) | +| **Nextcloud** | Private cloud with MariaDB + Redis | `8080` | [nextcloud.com](https://nextcloud.com) | +| **Uptime Kuma** | Uptime monitoring dashboard | `3001` | [GitHub](https://github.com/louislam/uptime-kuma) | +| **Tailscale** | Mesh VPN client + optional DERP relay | host | [tailscale.com](https://tailscale.com) | +| **Filesuite** | Cloudreve cloud storage + qBittorrent | `5212` `8090` | [cloudreve.org](https://cloudreve.org) | +| **Minecraft** | Fabric server (itzg/minecraft-server) | `25565` | [Docs](https://docker-minecraft-server.readthedocs.io) | +| **TeamSpeak** | Voice communication server | `9987/udp` | [teamspeak.com](https://teamspeak.com) | -| Project | Description | Upstream | -|---------|-------------|----------| -| **Forgejo** | Self-hosted Git service (Gitea fork) | [forgejo.org](https://forgejo.org) | -| **Nextcloud** | Private cloud with MariaDB + Redis | [nextcloud.com](https://nextcloud.com) | -| **Uptime Kuma** | Uptime monitoring dashboard | [GitHub](https://github.com/louislam/uptime-kuma) | -| **Tailscale** | Mesh VPN client + optional DERP relay | [tailscale.com](https://tailscale.com) | -| **Filesuite** | Cloudreve cloud storage + qBittorrent | [cloudreve.org](https://cloudreve.org) | -| **Minecraft** | Fabric server (itzg/minecraft-server) | [Docs](https://docker-minecraft-server.readthedocs.io) | -| **TeamSpeak** | Voice communication server | [teamspeak.com](https://teamspeak.com) | +
+Project-specific notes -> Adding your own project? Just create a directory with `compose.yaml` and `.env.example` — automa discovers it automatically. +#### Tailscale + +Uses Docker Compose profiles — deploy only the VPN client or include the DERP relay: + +```bash +# Tailscale client only +docker compose --profile tailscale up -d + +# Client + DERP relay +docker compose --profile derp up -d +``` + +#### Nextcloud + +Ships with MariaDB 11 and Redis 7 as backing services. All three containers have health checks with `depends_on` ordering. First startup takes ~60s for database migration. + +#### Minecraft + +Uses the [itzg/minecraft-server](https://docker-minecraft-server.readthedocs.io) image with Fabric mod loader. Mods go in `minecraft/data/mods/`. First startup takes ~2 minutes to download server files. + +
## Usage @@ -70,33 +98,38 @@ automa list # list all projects ``` ~/automa/ -├── automa # CLI entry point (single script) +├── automa # CLI entry point (single bash script) ├── install.sh # curl-pipe-bash installer ├── forgejo/ │ ├── compose.yaml # Docker Compose definition -│ ├── .env.example # Template with metadata + defaults +│ ├── .env.example # Template with @metadata + defaults │ └── .env # Your config (gitignored, created by CLI) ├── nextcloud/ │ └── ... └── ... ``` -Each project directory is fully self-contained: +Each `.env.example` carries metadata that the CLI reads: -- **`compose.yaml`** — production-ready with health checks, resource hints, and security hardening -- **`.env.example`** — annotated template with `@name`, `@desc`, `@url`, `@port` metadata that the CLI reads -- **`.env`** — your configuration, auto-generated with safe defaults and random secrets +```bash +# @name Forgejo +# @desc Self-hosted Git service (Gitea fork) +# @url https://forgejo.org +# @port FORGEJO_HTTP_PORT +``` + +The CLI uses these annotations to show project names, descriptions, docs links, and access URLs — all without extra configuration files. ## Requirements -| Dependency | Minimum | -|------------|---------| -| Docker | 20.10+ | -| Docker Compose | v2 (plugin) | -| Bash | 4.0+ | -| Git | any | +| Dependency | Minimum | Check | +|------------|---------|-------| +| Docker | 20.10+ | `docker --version` | +| Docker Compose | v2 (plugin) | `docker compose version` | +| Bash | 4.0+ | `bash --version` | +| Git | any | `git --version` | -The installer checks all prerequisites automatically. +The installer verifies all prerequisites automatically. ## Uninstall @@ -106,22 +139,17 @@ cd ~/automa cd ~ && rm -rf ~/automa # remove automa ``` -Data volumes are stored inside each project's `data/` directory and will be removed with the above command. Back up first if needed. +Data is stored in each project's `data/` directory. Back up before removing if needed. ## Contributing -Contributions are welcome! To add a new project: +Contributions welcome! To add a new project: -1. Create a new directory: `mkdir myproject` -2. Add a `compose.yaml` with health checks -3. Add a `.env.example` with metadata headers: - ```bash - # @name My Project - # @desc Short description shown in CLI - # @url https://project-homepage.com - # @port PORT_VAR_NAME - ``` -4. Open a pull request +1. Create a directory with `compose.yaml` (include health checks) +2. Add `.env.example` with metadata headers (`@name`, `@desc`, `@url`, `@port`) +3. Open a pull request + +See existing projects for reference. ## License