Initialize public data and docs repository

This commit is contained in:
AltStack Bot
2026-02-25 22:36:27 +05:30
commit 2a0ac1b107
357 changed files with 50685 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
import type { MetaRecord } from 'nextra'
const meta: MetaRecord = {
'what-is-self-hosting': {
title: 'What is Self-Hosting?',
},
'first-deployment': {
title: 'Your First Deployment',
},
'choosing-a-server': {
title: 'Choosing a Server',
},
'reverse-proxy': {
title: 'Setting Up a Reverse Proxy',
},
'starter-kit': {
title: 'The Starter Kit',
},
}
export default meta

View File

@@ -0,0 +1,113 @@
---
title: Choosing a Server
description: "A no-nonsense comparison of VPS providers for self-hosting. Hetzner, DigitalOcean, Linode, and more — which one to pick and why."
---
# Choosing a Server
You need a place to run your tools. That place is a **VPS** (Virtual Private Server) — basically a computer in a data center that you rent by the month.
> ⚠️ **Heads Up:** You *can* self-host on a Raspberry Pi or old laptop at home. But a VPS gives you a static IP, proper uptime, and you don't need to worry about your ISP blocking ports. Start with a VPS. Go homelab later.
## The Short Answer
**Just get a Hetzner CX22.** €4.50/mo, 2 vCPUs, 4GB RAM, 40GB SSD, 20TB traffic. It'll run 510 Docker containers comfortably.
If Hetzner isn't available in your region, get a [DigitalOcean $6/mo Droplet](https://m.do.co/c/2ed27757a361).
That's the recommendation. Below is the reasoning.
## The Comparison
| Provider | Cheapest Plan | CPU | RAM | Storage | Best For |
|---|---|---|---|---|---|
| **Hetzner** | €3.79/mo | 2 shared | 4 GB | 40 GB | Best value overall, EU & US |
| [**DigitalOcean**](https://m.do.co/c/2ed27757a361) | $6/mo | 1 vCPU | 1 GB | 25 GB | Beginners, great docs |
| **Linode (Akamai)** | $5/mo | 1 vCPU | 1 GB | 25 GB | Solid alternative to DO |
| **Vultr** | $5/mo | 1 vCPU | 1 GB | 25 GB | Global edge locations |
| **OVH** | €3.50/mo | 1 vCPU | 2 GB | 20 GB | Budget EU hosting |
| **Oracle Cloud** | Free tier | 4 ARM | 24 GB | 200 GB | Can't beat free (if you qualify) |
## What Specs Do You Need?
Here's a rough guide based on what you want to run:
| Use Case | RAM | CPU | Storage | Monthly Cost |
|---|---|---|---|---|
| 13 lightweight tools (Plausible, Uptime Kuma, Listmonk) | 2 GB | 1 vCPU | 20 GB | ~$5 |
| An entire Bootstrapper Stack (Supabase, Coolify, Plausible, etc.) | 4 GB | 2 vCPU | 40 GB | ~$6 |
| AI models (Ollama, Stable Diffusion) | 8+ GB | 4+ vCPU | 80+ GB | ~$15+ |
| "I self-host everything" | 16 GB | 4 vCPU | 160 GB | ~$25 |
> 🔥 **Pro Tip:** Start small. You can upgrade a VPS in about 30 seconds. It's way harder to downgrade. Get a 4GB plan and upgrade when you actually feel it.
Once you have a VPS, the setup is the same everywhere. Don't just install Docker and leave it open; follow these steps to secure your investment.
### 1. Hardening SSH (Don't skip this)
Root password login is a magnet for brute-force attacks. Use SSH keys.
```bash
# On your local machine:
ssh-keygen -t ed25519 -C "your_email@example.com"
ssh-copy-id root@your-server-ip
# Now SSH back into the server:
ssh root@your-server-ip
```
Disable password login:
```bash
nano /etc/ssh/sshd_config
# Find and set: PasswordAuthentication no
# Restart SSH: systemctl restart ssh
```
### 2. Configure the Firewall (UFW)
Only open the ports you actually need.
```bash
# Allow SSH, HTTP, and HTTPS
ufw allow ssh
ufw allow 80/tcp
ufw allow 443/tcp
# Enable firewall
ufw enable
```
### 3. Install Docker & Compose
The easiest way is the official convenience script.
```bash
# Update the system
apt update && apt upgrade -y
# Install Docker
curl -fsSL https://get.docker.com | sh
# Install Docker Compose plugin
apt install docker-compose-plugin -y
# Verify
docker --version
docker compose version
```
### 4. Create a Non-Root User (Optional but Good)
Running everything as root is risky. Create a user with sudo privileges.
```bash
adduser dev
usermod -aG sudo dev
usermod -aG docker dev
# Now log in as 'dev' for future work
```
That's your server ready and secured. Every deploy guide in these docs assumes you've done this.
## Next Steps
Your server is ready. Time to deploy something real:
→ [The AltStack Starter Kit](/quick-start/starter-kit) — Our recommended first set of tools
→ [Deploy Guides](/deploy) — Pick any tool and deploy it

View File

@@ -0,0 +1,69 @@
---
title: Your First Deployment
description: "Deploy Uptime Kuma in under 5 minutes with a single Docker command. Your first taste of self-hosting freedom."
---
# Your First Deployment
**By the end of this page**, you'll have [Uptime Kuma](https://thealtstack.com/alternative-to/uptime-kuma) — a beautiful uptime monitor — running on your machine. It takes about 5 minutes.
We're starting with Uptime Kuma because:
- It's a single Docker command (no compose file needed)
- It has a gorgeous UI you'll actually enjoy using
- It's immediately useful — it monitors your other self-hosted tools
- It proves that self-hosting isn't scary
## Prerequisites
- Docker installed on your machine ([install guide](https://docs.docker.com/get-docker/))
- A terminal (Terminal on Mac, PowerShell on Windows, or any Linux terminal)
> 💡 **Why?** Docker is how we package and run software without dependency hell. If you haven't installed it yet, the link above takes 3 minutes.
## Let's Ship It
Open your terminal and run this single command:
```bash
docker run -d \
--restart=unless-stopped \
-p 3001:3001 \
-v uptime-kuma:/app/data \
--name uptime-kuma \
louislam/uptime-kuma:1
```
That's it. Not kidding.
### What just happened?
| Flag | What it does |
|---|---|
| `-d` | Runs in the background (detached) |
| `--restart=unless-stopped` | Auto-restarts if your server reboots |
| `-p 3001:3001` | Makes it accessible on port 3001 |
| `-v uptime-kuma:/app/data` | Saves your data in a Docker volume (survives restarts) |
| `--name uptime-kuma` | Gives the container a human-readable name |
## See It Live
Open your browser and go to:
```
http://localhost:3001
```
You should see the Uptime Kuma setup screen. Create an admin account, add a monitor for `https://google.com` to test it, and watch the green dots roll in.
**Congratulations. You just self-hosted your first tool.** 🎉
## You Did It. Now What?
You just proved to yourself that self-hosting works. Here's where to go next:
1. **[Choosing a Server](/quick-start/choosing-a-server)** — Move from localhost to a real VPS so others can access your tools
2. **[Docker Basics](/concepts/docker-basics)** — Understand what Docker Compose is (spoiler: it's the next level)
3. **[Deploy Plausible](/deploy/plausible)** — Replace Google Analytics entirely
4. **[The Bootstrapper Stack](/stacks/bootstrapper)** — Deploy an entire SaaS toolkit for $0/mo
> 🏆 **The Verdict:** If this felt easy, that's because it *is* easy. The rest of our guides follow the same pattern: copy a config, run a command, own your software.

View File

@@ -0,0 +1,88 @@
---
title: Quick Start
description: "Your roadmap to self-hosting independence. Go from zero to a running infrastructure in under an hour."
---
import { Clock, Server, Shield, Rocket, ArrowRight, CheckCircle } from 'lucide-react'
# Quick Start
**Go from "I've never self-hosted anything" to "I'm running my own infrastructure" in under an hour.** This guide is your roadmap — follow it in order.
<div className="mt-12 space-y-6">
<div className="relative pl-12 pb-8 border-l-2 border-red-500/20">
<div className="absolute -left-4 top-0 w-8 h-8 rounded-full bg-red-500 flex items-center justify-center text-white font-bold text-sm">{"1"}</div>
<h3 className="text-lg font-bold mb-1">{"Understand the Basics"}</h3>
<div className="flex items-center gap-2 text-sm text-[var(--altstack-text-dim)] mb-3">
<Clock size={14} /><span>{" 5 min read"}</span>
</div>
<span className="block text-[var(--altstack-text-dim)] mb-3">{"What self-hosting actually means, why you'd do it, and the three things you need. No jargon, no gatekeeping."}</span>
<a href="/quick-start/what-is-self-hosting" className="inline-flex items-center gap-2 text-red-500 font-semibold text-sm hover:underline">
<span>{"What is Self-Hosting?"}</span> <ArrowRight size={14} />
</a>
</div>
<div className="relative pl-12 pb-8 border-l-2 border-red-500/20">
<div className="absolute -left-4 top-0 w-8 h-8 rounded-full bg-red-500 flex items-center justify-center text-white font-bold text-sm">{"2"}</div>
<h3 className="text-lg font-bold mb-1">{"Deploy Your First Tool"}</h3>
<div className="flex items-center gap-2 text-sm text-[var(--altstack-text-dim)] mb-3">
<Clock size={14} /><span>{" 5 min hands-on"}</span>
</div>
<span className="block text-[var(--altstack-text-dim)] mb-3">{"One Docker command. One running tool. Prove to yourself that self-hosting works. We start with Uptime Kuma — it's beautiful, useful, and takes 30 seconds."}</span>
<a href="/quick-start/first-deployment" className="inline-flex items-center gap-2 text-red-500 font-semibold text-sm hover:underline">
<span>{"Your First Deployment"}</span> <ArrowRight size={14} />
</a>
</div>
<div className="relative pl-12 pb-8 border-l-2 border-red-500/20">
<div className="absolute -left-4 top-0 w-8 h-8 rounded-full bg-red-500 flex items-center justify-center text-white font-bold text-sm">{"3"}</div>
<h3 className="text-lg font-bold mb-1">{"Get a Real Server"}</h3>
<div className="flex items-center gap-2 text-sm text-[var(--altstack-text-dim)] mb-3">
<Clock size={14} /><span>{" 15 min hands-on"}</span>
</div>
<span className="block text-[var(--altstack-text-dim)] mb-3">{"Move from localhost to a VPS. We compare providers, recommend the best value, and walk you through SSH hardening, firewalls, and Docker installation."}</span>
<a href="/quick-start/choosing-a-server" className="inline-flex items-center gap-2 text-red-500 font-semibold text-sm hover:underline">
<span>{"Choosing a Server"}</span> <ArrowRight size={14} />
</a>
</div>
<div className="relative pl-12 pb-8 border-l-2 border-red-500/20">
<div className="absolute -left-4 top-0 w-8 h-8 rounded-full bg-red-500 flex items-center justify-center text-white font-bold text-sm">{"4"}</div>
<h3 className="text-lg font-bold mb-1">{"Set Up Domains & SSL"}</h3>
<div className="flex items-center gap-2 text-sm text-[var(--altstack-text-dim)] mb-3">
<Clock size={14} /><span>{" 10 min hands-on"}</span>
</div>
<span className="block text-[var(--altstack-text-dim)] mb-3">{"Give your tools proper domains like "}<code>{"uptime.yourdomain.com"}</code>{" with automatic HTTPS. We cover Caddy, Nginx Proxy Manager, and Traefik."}</span>
<a href="/quick-start/reverse-proxy" className="inline-flex items-center gap-2 text-red-500 font-semibold text-sm hover:underline">
<span>{"Setting Up a Reverse Proxy"}</span> <ArrowRight size={14} />
</a>
</div>
<div className="relative pl-12">
<div className="absolute -left-4 top-0 w-8 h-8 rounded-full bg-green-500 flex items-center justify-center text-white font-bold text-sm">{"✓"}</div>
<h3 className="text-lg font-bold mb-1">{"Deploy Your Starter Kit"}</h3>
<div className="flex items-center gap-2 text-sm text-[var(--altstack-text-dim)] mb-3">
<Clock size={14} /><span>{" 20 min hands-on"}</span>
</div>
<span className="block text-[var(--altstack-text-dim)] mb-3">{"Your first real stack: Uptime Kuma + Plausible + Coolify. Three tools that replace ~$35/mo in SaaS, all running on a $6/mo server."}</span>
<a href="/quick-start/starter-kit" className="inline-flex items-center gap-2 text-green-500 font-semibold text-sm hover:underline">
<span>{"The AltStack Starter Kit"}</span> <ArrowRight size={14} />
</a>
</div>
</div>
---
## Prerequisites
Before you start, you need:
- **A computer with a terminal** — Mac Terminal, Windows PowerShell, or any Linux shell
- **Docker installed** — [Get Docker](https://docs.docker.com/get-docker/) (3 minutes)
- **$06/mo budget** — Free for localhost experiments, ~$6/mo for a real VPS
That's genuinely it. No Kubernetes. No cloud certifications. No weekend-long setup marathons.
## Fast Track (Experienced Users)
Already comfortable with Docker and have a VPS? Skip straight to the good stuff:
1. **[The Starter Kit](/quick-start/starter-kit)** — Deploy Uptime Kuma + Plausible + Coolify in 20 minutes
2. **[Deploy Guides](/deploy)** — Pick any of our 65+ tools and ship it
3. **[Curated Stacks](/stacks)** — Grab a complete toolkit for your use case

View File

@@ -0,0 +1,145 @@
---
title: Setting Up a Reverse Proxy
description: "How to use Caddy, Nginx Proxy Manager, or Traefik to give your self-hosted tools proper domains and automatic SSL."
---
import { Tabs } from 'nextra/components'
# Setting Up a Reverse Proxy
Right now your tools are running on ports like `:3001` or `:8080`. A **reverse proxy** is the traffic cop that maps a domain like `uptime.yourdomain.com` to your server's local port and handles SSL automatically.
## Which one should I pick?
- **Caddy:** Best for 99% of people. Zero-config SSL, human-readable config, extremely fast.
- **Nginx Proxy Manager:** Best if you want a web UI to click and manage your domains.
- **Traefik:** Best if you want a "hands-off" approach that auto-discovers new containers as you spin them up (complex but powerful).
---
<Tabs items={['Caddy (Recommended)', 'Nginx Proxy Manager', 'Traefik']}>
<Tabs.Tab>
### Caddy Setup
Caddy is the "batteries included" proxy. It just works.
#### 1. The Docker Compose
Create a folder for Caddy and add this `docker-compose.yml`:
```yaml
version: '3.8'
services:
caddy:
image: caddy:2-alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config:
```
#### 2. The Caddyfile
In the same folder, create a file named `Caddyfile`:
```caddy
uptime.yourdomain.com {
reverse_proxy localhost:3001
}
plausible.yourdomain.com {
reverse_proxy localhost:8000
}
```
#### 3. Start it
```bash
docker compose up -d
```
</Tabs.Tab>
<Tabs.Tab>
### Nginx Proxy Manager (NPM) Setup
NPM gives you a beautiful web interface to manage your SSL and proxy hosts.
#### 1. The Docker Compose
```yaml
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
```
#### 2. Access the UI
1. Visit `http://your-server-ip:81`
2. Default credentials:
- Email: `admin@example.com`
- Password: `changeme`
3. Change your login info immediately.
4. Click **Proxy Hosts** -> **Add Proxy Host** to point your domain to your tool's port.
</Tabs.Tab>
<Tabs.Tab>
### Traefik Setup
Traefik uses "labels" on your other containers to automatically route traffic.
#### 1. The Traefik Container
```yaml
version: '3.8'
services:
traefik:
image: traefik:v3.0
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
- "--certificatesresolvers.myresolver.acme.email=your-email@example.com"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./letsencrypt:/letsencrypt"
```
#### 2. Routing a container
Add these labels to any *other* container you want to proxy:
```yaml
labels:
- "traefik.enable=true"
- "traefik.http.routers.mytool.rule=Host(`mytool.yourdomain.com`)"
- "traefik.http.routers.mytool.entrypoints=websecure"
- "traefik.http.routers.mytool.tls.certresolver=myresolver"
```
</Tabs.Tab>
</Tabs>
---
## 🔒 A Note on SSL/TLS
Every proxy above handles SSL certificates via **Let's Encrypt** automatically.
**Crucial Step:** Before you start your proxy, your domain's **DNS A Record** must point to your server's public IP address. If the DNS isn't pointing correctly, Let's Encrypt will fail to issue a certificate.
## Next Steps
→ [Your First Deployment](/quick-start/first-deployment) — Connect your tools to your new proxy.
→ [SSL/TLS Deep Dive](/concepts/ssl-tls) — How it works under the hood.

View File

@@ -0,0 +1,46 @@
---
title: The AltStack Starter Kit
description: "The recommended first 3 tools to self-host: Uptime Kuma, Plausible, and Coolify. Your foundation for software independence."
---
# The AltStack Starter Kit
If you're new to self-hosting, don't try to replace your entire SaaS stack on day one. Start with three tools that are immediately useful, easy to deploy, and will teach you how everything works.
## The Stack
| Tool | Replaces | Why It's First |
|---|---|---|
| [**Uptime Kuma**](/deploy/uptime-kuma) | Pingdom, UptimeRobot ($15/mo) | Monitors everything else you deploy. Set it up first. |
| [**Plausible**](/deploy/plausible) | Google Analytics (free but creepy) | Privacy-respecting analytics. You'll see results immediately. |
| [**Coolify**](/deploy/coolify) | Vercel, Heroku ($20+/mo) | Deploy future apps with git push. Your own PaaS. |
**Total monthly cost:** ~$6 (one small VPS)
**Total SaaS cost replaced:** ~$35+/mo
## Deploy Order
This order matters:
### 1. Uptime Kuma (5 min)
Your monitoring dashboard. Once it's running, add monitors for everything else you deploy. You'll always know if something goes down.
→ [Deploy Uptime Kuma](/deploy/uptime-kuma)
### 2. Plausible Analytics (10 min)
Lightweight, cookie-free analytics. Add the tracking script to your site and immediately start seeing real visitor data — without the privacy guilt.
→ [Deploy Plausible](/deploy/plausible)
### 3. Coolify (15 min)
This is the game-changer. Coolify turns your server into a self-hosted Vercel/Netlify. Git push → auto deploy. It'll become the foundation for everything you build.
→ [Deploy Coolify](/deploy/coolify)
## After the Starter Kit
Once you're comfortable, explore the [Curated Stacks](/stacks) — pre-built bundles of tools designed for specific use cases:
- 🚀 [The Bootstrapper Stack](/stacks/bootstrapper) — Full SaaS toolkit for $0/mo
- 🔒 [The Privacy Stack](/stacks/privacy) — Maximum data sovereignty
- 🤖 [The AI-First Stack](/stacks/ai-first) — Run LLMs and image gen locally

View File

@@ -0,0 +1,62 @@
---
title: What is Self-Hosting?
description: "Self-hosting explained without the gatekeeping. What it is, why you'd do it, and what you actually need to get started."
---
# What is Self-Hosting?
**In one sentence:** Self-hosting means running software on a server *you* control, instead of paying someone else to run it for you.
That's it. That's the whole concept.
When you use Gmail, Google runs the email server. When you use Notion, Notion Inc runs the database. When you self-host, **you** run these things — on a cheap VPS, a spare laptop, or even a Raspberry Pi.
## Why Would You Do This?
| Reason | What It Means |
|---|---|
| **💰 Cost** | Most open source tools are free. A $5/mo server can replace $200+/mo in SaaS subscriptions. |
| **🔒 Privacy** | Your data lives on your server. No one mines it, sells it, or trains AI on it. |
| **🎛️ Control** | No surprise feature removals. No price hikes. No "we're sunsetting this product" emails. |
| **🧠 Learning** | You'll actually understand how software works. This makes you a better developer, designer, or founder. |
## What You Actually Need
Here's the brutal truth: **self-hosting requires effort**. Not *genius-level* effort, but *following-a-recipe* effort.
You need three things:
1. **A server** — A $46/mo VPS from Hetzner, [DigitalOcean](https://m.do.co/c/2ed27757a361), or similar. [We compare them →](/quick-start/choosing-a-server)
2. **Docker** — The tool that packages software into neat, runnable containers. [Docker basics →](/concepts/docker-basics)
3. **20 minutes of patience** — Most tools deploy in under 20 minutes if you follow our guides.
> 🔥 **Pro Tip:** You don't need to know Linux commands by heart. You need to know how to copy-paste. Seriously.
## The Self-Hosting Spectrum
Not all self-hosting is equal. Here's where most people land:
```
Easy ─────────────────────────────────────── Hard
Docker run Docker Compose Kubernetes
(1 command) (1 YAML file) (for masochists)
```
**Good news:** 95% of the tools in our directory work with Docker Compose — a single file that describes your entire setup. Our guides always give you that file, ready to go.
## Common Fears (Debunked)
**"I'll get hacked"** → You're more likely to get breached through a SaaS provider's data leak than through a properly configured VPS with a firewall and SSH keys.
**"I can't handle maintenance"** → Docker makes updates a two-command affair: `docker-compose pull && docker-compose up -d`. That's it.
**"What if it breaks at 3 AM?"** → Set up [Uptime Kuma](/deploy/uptime-kuma) (takes 5 minutes) and you'll know before your users do.
**"I don't have time"** → You don't have time to submit GDPR data requests to 47 SaaS vendors either. Pick your battles.
## Next Steps
Ready? Let's deploy something real.
→ [Your First Deployment](/quick-start/first-deployment) — Get a tool running in 5 minutes flat.