mirror of
https://github.com/altstackHQ/altstack-data.git
synced 2026-04-17 21:53:12 +02:00
Initialize public data and docs repository
This commit is contained in:
36
docs/app/_meta.ts
Normal file
36
docs/app/_meta.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
import type { MetaRecord } from 'nextra'
|
||||
|
||||
const meta: MetaRecord = {
|
||||
index: {
|
||||
title: 'Home',
|
||||
type: 'page',
|
||||
display: 'hidden',
|
||||
},
|
||||
why: {
|
||||
title: '📜 Why These Docs Exist',
|
||||
},
|
||||
'quick-start': {
|
||||
title: '🚀 Quick Start',
|
||||
},
|
||||
deploy: {
|
||||
title: '📦 Deploy Guides',
|
||||
},
|
||||
stacks: {
|
||||
title: '🔥 Stacks',
|
||||
},
|
||||
concepts: {
|
||||
title: '🧠 Concepts',
|
||||
},
|
||||
// -- External links --
|
||||
directory: {
|
||||
title: '← Back to Directory',
|
||||
href: 'https://thealtstack.com',
|
||||
type: 'page',
|
||||
},
|
||||
contact: {
|
||||
title: 'Contact Us',
|
||||
display: 'hidden'
|
||||
},
|
||||
}
|
||||
|
||||
export default meta
|
||||
33
docs/app/concepts/_meta.ts
Normal file
33
docs/app/concepts/_meta.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import type { MetaRecord } from 'nextra'
|
||||
|
||||
const meta: MetaRecord = {
|
||||
'docker-basics': {
|
||||
title: 'Docker in 10 Minutes',
|
||||
},
|
||||
networking: {
|
||||
title: 'Networking for Self-Hosters',
|
||||
},
|
||||
'reverse-proxies': {
|
||||
title: 'Reverse Proxies Explained',
|
||||
},
|
||||
'ssl-tls': {
|
||||
title: 'SSL/TLS for Self-Hosters',
|
||||
},
|
||||
'env-secrets': {
|
||||
title: 'Environment Variables & Secrets',
|
||||
},
|
||||
monitoring: {
|
||||
title: 'Monitoring & Observability',
|
||||
},
|
||||
updates: {
|
||||
title: 'Updating & Maintaining Containers',
|
||||
},
|
||||
backups: {
|
||||
title: 'Backups That Actually Work',
|
||||
},
|
||||
hardware: {
|
||||
title: 'Hardware & VPS Sizing',
|
||||
},
|
||||
}
|
||||
|
||||
export default meta
|
||||
103
docs/app/concepts/backups/page.mdx
Normal file
103
docs/app/concepts/backups/page.mdx
Normal file
@@ -0,0 +1,103 @@
|
||||
---
|
||||
title: Backups That Actually Work
|
||||
description: "How to back up your self-hosted tools. Docker volumes, database dumps, and automated backup scripts that run while you sleep."
|
||||
---
|
||||
|
||||
# Backups That Actually Work
|
||||
|
||||
Self-hosting means *you're* responsible for your data. No "Contact Support to restore from backup." **You are the support.**
|
||||
|
||||
The good news: backing up Docker-based tools is simple once you set up a system.
|
||||
|
||||
## What to Back Up
|
||||
|
||||
| Component | Where It Lives | How to Back Up |
|
||||
|---|---|---|
|
||||
| **Docker volumes** | `/var/lib/docker/volumes/` | Volume export or rsync |
|
||||
| **Databases (Postgres)** | Inside a Docker container | `pg_dump` |
|
||||
| **Config files** | Your `docker-compose.yml` and `.env` | Git or file copy |
|
||||
|
||||
> ⚠️ **Heads Up:** `docker-compose.yml` files are easy to recreate. Database data is not. Prioritize database backups above everything else.
|
||||
|
||||
## Method 1: Database Dumps (Essential)
|
||||
|
||||
Most self-hosted tools use PostgreSQL. Here's how to dump it:
|
||||
|
||||
```bash
|
||||
# Dump a Postgres database running in a container
|
||||
docker exec your-db-container \
|
||||
pg_dump -U postgres your_database > backup_$(date +%Y%m%d).sql
|
||||
```
|
||||
|
||||
To restore:
|
||||
|
||||
```bash
|
||||
cat backup_20260218.sql | docker exec -i your-db-container \
|
||||
psql -U postgres your_database
|
||||
```
|
||||
|
||||
## Method 2: Volume Backup
|
||||
|
||||
For tools that store data in Docker volumes:
|
||||
|
||||
```bash
|
||||
# Find your volumes
|
||||
docker volume ls
|
||||
|
||||
# Backup a volume to a tar file
|
||||
docker run --rm \
|
||||
-v my_volume:/data \
|
||||
-v $(pwd)/backups:/backup \
|
||||
alpine tar czf /backup/my_volume_backup.tar.gz /data
|
||||
```
|
||||
|
||||
## Method 3: Automated Script
|
||||
|
||||
Create a backup script that runs daily via cron:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# /opt/backup.sh
|
||||
|
||||
BACKUP_DIR="/opt/backups"
|
||||
DATE=$(date +%Y%m%d_%H%M)
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
# Dump Postgres databases
|
||||
docker exec supabase-db pg_dump -U postgres postgres > $BACKUP_DIR/supabase_$DATE.sql
|
||||
docker exec plausible_db pg_dump -U postgres plausible_db > $BACKUP_DIR/plausible_$DATE.sql
|
||||
|
||||
# Clean backups older than 7 days
|
||||
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete
|
||||
|
||||
echo "Backup complete: $DATE"
|
||||
```
|
||||
|
||||
Add to cron:
|
||||
|
||||
```bash
|
||||
# Run at 3 AM every day
|
||||
crontab -e
|
||||
# Add this line:
|
||||
0 3 * * * /opt/backup.sh >> /var/log/backup.log 2>&1
|
||||
```
|
||||
|
||||
## The 3-2-1 Rule
|
||||
|
||||
For serious setups, follow the **3-2-1 backup rule**:
|
||||
|
||||
- **3** copies of your data
|
||||
- **2** different storage types (local + remote)
|
||||
- **1** offsite copy (rsync to another server, or upload to B2/S3)
|
||||
|
||||
```bash
|
||||
# Sync backups to a remote server
|
||||
rsync -avz /opt/backups/ user@backup-server:/backups/
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
You now have the four foundational concepts: Docker, reverse proxies, SSL, and backups. Time to build:
|
||||
|
||||
→ [Deploy Guides](/deploy) — 65+ tools ready to deploy
|
||||
→ [The Bootstrapper Stack](/stacks/bootstrapper) — A complete SaaS toolkit
|
||||
127
docs/app/concepts/docker-basics/page.mdx
Normal file
127
docs/app/concepts/docker-basics/page.mdx
Normal file
@@ -0,0 +1,127 @@
|
||||
---
|
||||
title: Understanding Docker in 10 Minutes
|
||||
description: "Docker explained for self-hosters. No CS degree required. Containers, images, volumes, and Docker Compose — the only concepts you actually need."
|
||||
---
|
||||
|
||||
# Understanding Docker in 10 Minutes
|
||||
|
||||
Docker is the reason self-hosting went from "sysadmin hobby" to "anyone can do it." It packages software into neat, isolated containers that run the same everywhere.
|
||||
|
||||
You don't need to become a Docker expert. You need to understand **four concepts**.
|
||||
|
||||
## Concept 1: Images
|
||||
|
||||
An **image** is a snapshot of software — pre-built, pre-configured, ready to run. Think of it like an `.iso` file, but for apps.
|
||||
|
||||
```bash
|
||||
# Download the Plausible Analytics image
|
||||
docker pull plausible/analytics:latest
|
||||
```
|
||||
|
||||
Images live on [Docker Hub](https://hub.docker.com) — a public registry of 100,000+ images. When our deploy guides say `image: plausible/analytics:latest`, they're pulling from here.
|
||||
|
||||
## Concept 2: Containers
|
||||
|
||||
A **container** is a running instance of an image. Image = blueprint. Container = the actual building.
|
||||
|
||||
```bash
|
||||
# Start a container from an image
|
||||
docker run -d --name my-plausible plausible/analytics:latest
|
||||
|
||||
# See running containers
|
||||
docker ps
|
||||
|
||||
# Stop a container
|
||||
docker stop my-plausible
|
||||
|
||||
# Remove a container (data in volumes is safe)
|
||||
docker rm my-plausible
|
||||
```
|
||||
|
||||
> 💡 **Why?** Containers are isolated from each other and from your host system. Breaking one container doesn't break anything else.
|
||||
|
||||
## Concept 3: Volumes
|
||||
|
||||
**Volumes** store your data *outside* the container. This is critical because containers are disposable — when you update an image, you destroy the old container and create a new one. Volumes survive this process.
|
||||
|
||||
```bash
|
||||
# Mount a volume called "plausible-data"
|
||||
docker run -v plausible-data:/var/lib/clickhouse plausible/analytics
|
||||
```
|
||||
|
||||
Without volumes, your data dies when the container dies. **Always use volumes.**
|
||||
|
||||
```bash
|
||||
# List all volumes
|
||||
docker volume ls
|
||||
|
||||
# Backup a volume (copy to local tar)
|
||||
docker run --rm -v plausible-data:/data -v $(pwd):/backup alpine \
|
||||
tar czf /backup/plausible-backup.tar.gz /data
|
||||
```
|
||||
|
||||
## Concept 4: Docker Compose
|
||||
|
||||
This is the big one. **Docker Compose** lets you define multi-container setups in a single YAML file. Most real-world tools need multiple containers (app + database + cache), and Docker Compose handles that.
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
app:
|
||||
image: plausible/analytics:latest
|
||||
ports:
|
||||
- "8000:8000"
|
||||
depends_on:
|
||||
- db
|
||||
|
||||
db:
|
||||
image: postgres:14-alpine
|
||||
volumes:
|
||||
- db_data:/var/lib/postgresql/data
|
||||
environment:
|
||||
POSTGRES_PASSWORD: supersecret
|
||||
|
||||
volumes:
|
||||
db_data:
|
||||
```
|
||||
|
||||
Then run it:
|
||||
|
||||
```bash
|
||||
# Start everything
|
||||
docker compose up -d
|
||||
|
||||
# See logs
|
||||
docker compose logs -f
|
||||
|
||||
# Stop everything
|
||||
docker compose down
|
||||
|
||||
# Update to latest images
|
||||
docker compose pull && docker compose up -d
|
||||
```
|
||||
|
||||
That's the pattern for **every single deploy guide** in these docs:
|
||||
1. Copy the `docker-compose.yml`
|
||||
2. Tweak the environment variables
|
||||
3. Run `docker compose up -d`
|
||||
4. Done.
|
||||
|
||||
## The 5 Commands You'll Actually Use
|
||||
|
||||
| Command | What it does |
|
||||
|---|---|
|
||||
| `docker compose up -d` | Start all services in the background |
|
||||
| `docker compose down` | Stop all services |
|
||||
| `docker compose logs -f` | Watch live logs (Ctrl+C to exit) |
|
||||
| `docker compose pull` | Download latest images |
|
||||
| `docker ps` | List running containers |
|
||||
|
||||
That's it. That's Docker for self-hosters.
|
||||
|
||||
## Next Steps
|
||||
|
||||
→ [Reverse Proxies Explained](/concepts/reverse-proxies) — How to access your tools via `app.yourdomain.com`
|
||||
→ [Your First Deployment](/quick-start/first-deployment) — Put this knowledge to use
|
||||
153
docs/app/concepts/env-secrets/page.mdx
Normal file
153
docs/app/concepts/env-secrets/page.mdx
Normal file
@@ -0,0 +1,153 @@
|
||||
---
|
||||
title: "Environment Variables & Secrets"
|
||||
description: "How to manage .env files, Docker secrets, and sensitive configuration for self-hosted tools. Stop hardcoding passwords."
|
||||
---
|
||||
|
||||
# Environment Variables & Secrets
|
||||
|
||||
Every self-hosted tool needs configuration: database passwords, API keys, admin emails. The **wrong** way is hardcoding them in `docker-compose.yml`. The **right** way is environment variables.
|
||||
|
||||
## The Basics: `.env` Files
|
||||
|
||||
Docker Compose automatically reads a `.env` file in the same directory as your `docker-compose.yml`:
|
||||
|
||||
```bash
|
||||
# .env
|
||||
POSTGRES_PASSWORD=super_secret_password_123
|
||||
ADMIN_EMAIL=you@yourdomain.com
|
||||
SECRET_KEY=a1b2c3d4e5f6g7h8i9j0
|
||||
```
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
services:
|
||||
db:
|
||||
image: postgres:16
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
```
|
||||
|
||||
Docker Compose substitutes `${POSTGRES_PASSWORD}` with the value from `.env`. Your secrets stay out of your Compose file.
|
||||
|
||||
> ⚠️ **Critical:** Add `.env` to your `.gitignore` immediately. Never commit secrets to Git.
|
||||
|
||||
```bash
|
||||
echo ".env" >> .gitignore
|
||||
```
|
||||
|
||||
## Generating Strong Passwords
|
||||
|
||||
Don't use `password123`. Generate proper secrets:
|
||||
|
||||
```bash
|
||||
# Generate a 32-character random string
|
||||
openssl rand -base64 32
|
||||
|
||||
# Generate a hex string (great for SECRET_KEY)
|
||||
openssl rand -hex 32
|
||||
|
||||
# Generate a URL-safe string
|
||||
python3 -c "import secrets; print(secrets.token_urlsafe(32))"
|
||||
```
|
||||
|
||||
### Template for Common Tools
|
||||
|
||||
Most self-hosted tools need similar variables. Here's a reusable `.env` template:
|
||||
|
||||
```bash
|
||||
# .env template — generate all values before first run
|
||||
|
||||
# Database
|
||||
POSTGRES_USER=app
|
||||
POSTGRES_PASSWORD= # openssl rand -base64 32
|
||||
POSTGRES_DB=app_db
|
||||
|
||||
# App
|
||||
SECRET_KEY= # openssl rand -hex 32
|
||||
ADMIN_EMAIL=you@yourdomain.com
|
||||
ADMIN_PASSWORD= # openssl rand -base64 24
|
||||
BASE_URL=https://app.yourdomain.com
|
||||
|
||||
# SMTP (for email notifications)
|
||||
SMTP_HOST=smtp.gmail.com
|
||||
SMTP_PORT=587
|
||||
SMTP_USER=you@gmail.com
|
||||
SMTP_PASSWORD= # Use app-specific password
|
||||
```
|
||||
|
||||
## Default Values (Fallbacks)
|
||||
|
||||
Use the `:-` syntax for non-sensitive defaults:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
NODE_ENV: ${NODE_ENV:-production} # Defaults to "production"
|
||||
LOG_LEVEL: ${LOG_LEVEL:-info} # Defaults to "info"
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} # No default — MUST be set
|
||||
```
|
||||
|
||||
## Docker Secrets (Advanced)
|
||||
|
||||
For production setups, Docker Secrets are more secure than environment variables — they're stored encrypted and mounted as files:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
db:
|
||||
image: postgres:16
|
||||
environment:
|
||||
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
|
||||
secrets:
|
||||
- db_password
|
||||
|
||||
secrets:
|
||||
db_password:
|
||||
file: ./secrets/db_password.txt
|
||||
```
|
||||
|
||||
```bash
|
||||
# Create the secret file
|
||||
mkdir -p secrets
|
||||
openssl rand -base64 32 > secrets/db_password.txt
|
||||
chmod 600 secrets/db_password.txt
|
||||
```
|
||||
|
||||
> 💡 Not all images support `_FILE` suffix variables. Check the image's documentation on Docker Hub.
|
||||
|
||||
## Multiple Environments
|
||||
|
||||
Keep separate `.env` files for different environments:
|
||||
|
||||
```bash
|
||||
.env # Production (default)
|
||||
.env.local # Local development
|
||||
.env.staging # Staging server
|
||||
```
|
||||
|
||||
Use them explicitly:
|
||||
|
||||
```bash
|
||||
# Use a specific env file
|
||||
docker compose --env-file .env.staging up -d
|
||||
```
|
||||
|
||||
## Security Checklist
|
||||
|
||||
- [ ] `.env` is in `.gitignore`
|
||||
- [ ] No secrets are hardcoded in `docker-compose.yml`
|
||||
- [ ] All passwords are randomly generated (32+ characters)
|
||||
- [ ] Database ports are NOT exposed to the internet
|
||||
- [ ] Secret files have `chmod 600` permissions
|
||||
- [ ] Default passwords from docs have been changed
|
||||
|
||||
## Common Mistakes
|
||||
|
||||
**"Variable is empty in the container"** → Check for typos. Variable names are case-sensitive. `POSTGRES_password` ≠ `POSTGRES_PASSWORD`.
|
||||
|
||||
**"Changes to .env aren't applying"** → You need to recreate the container: `docker compose up -d --force-recreate`.
|
||||
|
||||
**"I committed my .env to Git"** → Even after removing it, it's in Git history. Rotate ALL secrets immediately and use `git filter-branch` or BFG Repo Cleaner.
|
||||
|
||||
## Next Steps
|
||||
|
||||
→ [Monitoring & Observability](/concepts/monitoring) — Know when things break
|
||||
→ [Docker in 10 Minutes](/concepts/docker-basics) — Review the fundamentals
|
||||
145
docs/app/concepts/hardware/page.mdx
Normal file
145
docs/app/concepts/hardware/page.mdx
Normal file
@@ -0,0 +1,145 @@
|
||||
---
|
||||
title: "Hardware & VPS Sizing"
|
||||
description: "How much RAM, CPU, and disk you actually need for self-hosting. VPS provider comparison and scaling strategies."
|
||||
---
|
||||
|
||||
# Hardware & VPS Sizing
|
||||
|
||||
The #1 question new self-hosters ask: **"What server do I need?"**
|
||||
|
||||
Short answer: less than you think to start, more than you think once you're hooked.
|
||||
|
||||
## Quick Sizing Guide
|
||||
|
||||
### How Much RAM Do I Need?
|
||||
|
||||
| Setup | RAM | What You Can Run |
|
||||
|---|---|---|
|
||||
| **Starter** | 2 GB | 1–2 lightweight tools (Uptime Kuma, Plausible) |
|
||||
| **Hobbyist** | 4 GB | 3–5 tools + a database + reverse proxy |
|
||||
| **Power User** | 8 GB | 8–12 tools + multiple databases |
|
||||
| **Homelab** | 16 GB | Everything + AI models (small ones) |
|
||||
| **AI Workloads** | 32+ GB | LLMs, image generation, video AI |
|
||||
|
||||
> 💡 **Start with 4 GB.** You can always upgrade. Most VPS providers let you resize without downtime.
|
||||
|
||||
### CPU Guidelines
|
||||
|
||||
| Workload | vCPUs Needed |
|
||||
|---|---|
|
||||
| Static tools (Uptime Kuma, PocketBase) | 1 vCPU |
|
||||
| Web apps (Plausible, Outline, n8n) | 2 vCPUs |
|
||||
| Heavy apps (PostHog, Supabase, Metabase) | 4 vCPUs |
|
||||
| AI inference (Ollama, Stable Diffusion) | 4+ vCPUs + GPU |
|
||||
|
||||
### Disk Space
|
||||
|
||||
| Component | Typical Usage |
|
||||
|---|---|
|
||||
| Base OS + Docker | 5–8 GB |
|
||||
| Each Docker image | 100 MB – 2 GB |
|
||||
| PostgreSQL database (small app) | 500 MB – 5 GB |
|
||||
| Log files (unmanaged) | 1–10 GB |
|
||||
| AI models (per model) | 4–70 GB |
|
||||
|
||||
**Minimum recommended:** 50 GB SSD.
|
||||
**Comfortable:** 80–160 GB SSD.
|
||||
**AI workloads:** 200+ GB NVMe.
|
||||
|
||||
## VPS Provider Comparison
|
||||
|
||||
| Provider | Starting At | Pros | Best For |
|
||||
|---|---|---|---|
|
||||
| [**DigitalOcean**](https://m.do.co/c/2ed27757a361) | $6/mo (1 GB) | Simple UI, great docs, predictable pricing | Beginners |
|
||||
| **Hetzner** | €3.79/mo (2 GB) | Best price-to-performance in EU | Power users, EU hosting |
|
||||
| **Contabo** | €5.99/mo (4 GB) | Cheapest for RAM-heavy setups | Budget homelab |
|
||||
| **Linode (Akamai)** | $5/mo (1 GB) | Reliable, good network | Small projects |
|
||||
| **Vultr** | $5/mo (1 GB) | Global locations, hourly billing | Testing and experimentation |
|
||||
| **Oracle Cloud** | Free (4 vCPUs, 24 GB ARM) | Unbeatable free tier | Zero-budget hosting |
|
||||
| **Home Server** | One-time cost | Full control, unlimited bandwidth | Privacy maximalists |
|
||||
|
||||
> 🏆 **Our Pick:** [DigitalOcean](https://m.do.co/c/2ed27757a361) for beginners (simple, reliable, [$200 free credit](https://m.do.co/c/2ed27757a361)). **Hetzner** for best value. **Oracle Cloud free tier** if you want to pay nothing.
|
||||
|
||||
## Real-World Stack Sizing
|
||||
|
||||
Here's what actual AltStack setups typically need:
|
||||
|
||||
### The Bootstrapper Stack (4 GB RAM)
|
||||
- Coolify (deployment platform)
|
||||
- Plausible (analytics)
|
||||
- Uptime Kuma (monitoring)
|
||||
- Listmonk (newsletters)
|
||||
- Caddy (reverse proxy)
|
||||
|
||||
### The Privacy Stack (4 GB RAM)
|
||||
- Vaultwarden (passwords)
|
||||
- Jitsi Meet (video calls)
|
||||
- Mattermost (messaging)
|
||||
- Caddy (reverse proxy)
|
||||
|
||||
### The AI Stack (16–32 GB RAM)
|
||||
- Ollama (LLM inference)
|
||||
- Stable Diffusion (image generation)
|
||||
- TabbyML (code completion)
|
||||
- Continue.dev (AI coding)
|
||||
|
||||
## Scaling Strategies
|
||||
|
||||
### Vertical Scaling (Bigger Server)
|
||||
|
||||
The simplest approach. Just resize your VPS:
|
||||
|
||||
- **DigitalOcean:** Resize droplet (takes ~1 minute)
|
||||
- **Hetzner:** Rescale server (may require reboot)
|
||||
- **Home server:** Add RAM sticks
|
||||
|
||||
### Horizontal Scaling (More Servers)
|
||||
|
||||
When one server isn't enough:
|
||||
|
||||
```
|
||||
Server 1: Databases (Postgres, Redis)
|
||||
Server 2: Application containers
|
||||
Server 3: AI workloads (GPU)
|
||||
```
|
||||
|
||||
Connect them with a private network (most VPS providers offer this for free) or a VPN like WireGuard.
|
||||
|
||||
### The "Start Small" Strategy
|
||||
|
||||
1. **Month 1:** $6/mo droplet (1 GB) — Deploy 1–2 tools
|
||||
2. **Month 3:** Resize to $12/mo (2 GB) — Add more tools
|
||||
3. **Month 6:** Resize to $24/mo (4 GB) — Running your full stack
|
||||
4. **Month 12+:** Add a second server or move to Hetzner for better value
|
||||
|
||||
## Monitoring Your Resources
|
||||
|
||||
Always know how much headroom you have:
|
||||
|
||||
```bash
|
||||
# Quick resource check
|
||||
free -h # RAM usage
|
||||
df -h # Disk usage
|
||||
nproc # CPU cores
|
||||
uptime # Load average
|
||||
|
||||
# Docker resource usage
|
||||
docker stats # Live container metrics
|
||||
docker system df # Docker disk usage
|
||||
```
|
||||
|
||||
## Red Flags
|
||||
|
||||
🚩 **RAM constantly above 90%** → Resize or move a service to another server.
|
||||
|
||||
🚩 **Disk above 80%** → Clean Docker images (`docker system prune -f`) or resize disk.
|
||||
|
||||
🚩 **CPU at 100% for extended periods** → Check which container is the culprit with `docker stats`.
|
||||
|
||||
🚩 **Swap usage above 1 GB** → You need more RAM. Swap is a band-aid, not a solution.
|
||||
|
||||
## Next Steps
|
||||
|
||||
→ [Quick Start](/quick-start) — Deploy your first tool
|
||||
→ [Deploy Guides](/deploy) — Browse 65+ tools
|
||||
→ [Docker in 10 Minutes](/concepts/docker-basics) — Foundation knowledge
|
||||
163
docs/app/concepts/monitoring/page.mdx
Normal file
163
docs/app/concepts/monitoring/page.mdx
Normal file
@@ -0,0 +1,163 @@
|
||||
---
|
||||
title: "Monitoring & Observability"
|
||||
description: "Know when things break before your users do. Uptime monitoring, disk alerts, log aggregation, and observability for self-hosters."
|
||||
---
|
||||
|
||||
# Monitoring & Observability
|
||||
|
||||
You deployed 5 tools. They're running great. You go to bed. At 3 AM, the disk fills up, Postgres crashes, and everything dies. You find out at 9 AM when a user emails you.
|
||||
|
||||
**Monitoring prevents this.**
|
||||
|
||||
## The Three Layers
|
||||
|
||||
| Layer | What It Watches | Tool |
|
||||
|---|---|---|
|
||||
| **Uptime** | "Is the service responding?" | Uptime Kuma |
|
||||
| **System** | CPU, RAM, disk, network | Node Exporter + Grafana |
|
||||
| **Logs** | What's actually happening inside | Docker logs, Dozzle, SigNoz |
|
||||
|
||||
You need **at least** the first layer. The other two are for when you get serious.
|
||||
|
||||
## Layer 1: Uptime Monitoring (Essential)
|
||||
|
||||
[Uptime Kuma](/deploy/uptime-kuma) is the single best tool for self-hosters. Deploy it first, always.
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
services:
|
||||
uptime-kuma:
|
||||
image: louislam/uptime-kuma:1
|
||||
container_name: uptime-kuma
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3001:3001"
|
||||
volumes:
|
||||
- uptime_data:/app/data
|
||||
|
||||
volumes:
|
||||
uptime_data:
|
||||
```
|
||||
|
||||
### What to Monitor
|
||||
|
||||
Add a monitor for **every** service you run:
|
||||
|
||||
| Type | Target | Check Interval |
|
||||
|---|---|---|
|
||||
| HTTP(s) | `https://plausible.yourdomain.com` | 60s |
|
||||
| HTTP(s) | `https://uptime.yourdomain.com` | 60s |
|
||||
| TCP Port | `localhost:5432` (Postgres) | 120s |
|
||||
| Docker Container | Container name | 60s |
|
||||
| DNS | `yourdomain.com` | 300s |
|
||||
|
||||
### Notifications
|
||||
|
||||
Uptime Kuma supports 90+ notification channels. Set up **at least two**:
|
||||
|
||||
- **Email** — For non-urgent alerts
|
||||
- **Telegram/Discord/Slack** — For instant mobile alerts
|
||||
|
||||
> 🔥 **Pro Tip:** Monitor your monitoring. Set up an external free ping service (like [UptimeRobot](https://uptimerobot.com)) to watch your Uptime Kuma instance.
|
||||
|
||||
## Layer 2: System Metrics
|
||||
|
||||
### Quick Disk Alert Script
|
||||
|
||||
The #1 cause of self-hosting outages is **running out of disk space**. This script sends an alert when disk usage exceeds 80%:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# /opt/scripts/disk-alert.sh
|
||||
|
||||
THRESHOLD=80
|
||||
USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
|
||||
|
||||
if [ "$USAGE" -gt "$THRESHOLD" ]; then
|
||||
echo "⚠️ Disk usage is at ${USAGE}% on $(hostname)" | \
|
||||
mail -s "Disk Alert: ${USAGE}%" you@yourdomain.com
|
||||
fi
|
||||
```
|
||||
|
||||
Add to cron:
|
||||
|
||||
```bash
|
||||
# Check every hour
|
||||
0 * * * * /opt/scripts/disk-alert.sh
|
||||
```
|
||||
|
||||
### What to Watch
|
||||
|
||||
| Metric | Warning Threshold | Critical Threshold |
|
||||
|---|---|---|
|
||||
| Disk usage | 70% | 85% |
|
||||
| RAM usage | 80% | 95% |
|
||||
| CPU sustained | 80% for 5 min | 95% for 5 min |
|
||||
| Container restarts | 3 in 1 hour | 10 in 1 hour |
|
||||
|
||||
### Docker Resource Monitoring
|
||||
|
||||
Quick commands to check what's eating your resources:
|
||||
|
||||
```bash
|
||||
# Live resource usage per container
|
||||
docker stats
|
||||
|
||||
# Show container sizes (disk)
|
||||
docker system df -v
|
||||
|
||||
# Find large volumes
|
||||
du -sh /var/lib/docker/volumes/*/
|
||||
```
|
||||
|
||||
## Layer 3: Log Aggregation
|
||||
|
||||
Docker captures all stdout/stderr from your containers. Use it:
|
||||
|
||||
```bash
|
||||
# Live logs for a service
|
||||
docker compose logs -f plausible
|
||||
|
||||
# Last 100 lines
|
||||
docker compose logs --tail=100 plausible
|
||||
|
||||
# Logs since a specific time
|
||||
docker compose logs --since="2h" plausible
|
||||
```
|
||||
|
||||
### Dozzle (Docker Log Viewer)
|
||||
|
||||
For a beautiful web-based log viewer:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
dozzle:
|
||||
image: amir20/dozzle:latest
|
||||
container_name: dozzle
|
||||
ports:
|
||||
- "8080:8080"
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
```
|
||||
|
||||
### For Serious Setups: SigNoz
|
||||
|
||||
If you need traces, metrics, **and** logs in one place, deploy [SigNoz](/deploy/signoz). It's an open-source Datadog alternative built on OpenTelemetry.
|
||||
|
||||
## Maintenance Routine
|
||||
|
||||
Set a weekly calendar reminder:
|
||||
|
||||
```
|
||||
☐ Check Uptime Kuma — all green?
|
||||
☐ Run `docker stats` — anything hogging resources?
|
||||
☐ Run `df -h` — disk space OK?
|
||||
☐ Run `docker system prune -f` — clean unused images
|
||||
☐ Check logs for any errors — `docker compose logs --since=168h | grep -i error`
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
→ [Updating & Maintaining Containers](/concepts/updates) — Keep your tools up to date safely
|
||||
→ [Backups That Actually Work](/concepts/backups) — Protect your data
|
||||
→ [Deploy Uptime Kuma](/deploy/uptime-kuma) — Set up monitoring now
|
||||
160
docs/app/concepts/networking/page.mdx
Normal file
160
docs/app/concepts/networking/page.mdx
Normal file
@@ -0,0 +1,160 @@
|
||||
---
|
||||
title: "Networking for Self-Hosters"
|
||||
description: "Ports, DNS, firewalls, and private networks — the networking basics every self-hoster needs to know."
|
||||
---
|
||||
|
||||
# Networking for Self-Hosters
|
||||
|
||||
You deployed a tool. It works on `localhost:3000`. You try to access it from your phone. Nothing. Welcome to networking.
|
||||
|
||||
This guide covers the **four things** standing between your server and the outside world.
|
||||
|
||||
## 1. Ports
|
||||
|
||||
Every network service listens on a **port** — a numbered door on your server. Some well-known ones:
|
||||
|
||||
| Port | Service |
|
||||
|---|---|
|
||||
| `22` | SSH |
|
||||
| `80` | HTTP |
|
||||
| `443` | HTTPS |
|
||||
| `5432` | PostgreSQL |
|
||||
| `3000–9000` | Where most self-hosted tools live |
|
||||
|
||||
When Docker maps `-p 8080:3000`, it's saying: "When traffic hits port 8080 on the host, send it to port 3000 inside the container."
|
||||
|
||||
```yaml
|
||||
# In docker-compose.yml
|
||||
ports:
|
||||
- "8080:3000" # host:container
|
||||
```
|
||||
|
||||
> ⚠️ **Never expose database ports** (5432, 3306, 27017) to the internet. Keep them internal to Docker networks.
|
||||
|
||||
## 2. DNS (Domain Name System)
|
||||
|
||||
DNS translates human-readable names to IP addresses:
|
||||
|
||||
```
|
||||
plausible.yourdomain.com → 203.0.113.42
|
||||
```
|
||||
|
||||
### Setting Up DNS Records
|
||||
|
||||
In your domain registrar (Cloudflare, Namecheap, etc.):
|
||||
|
||||
| Type | Name | Value | What it does |
|
||||
|---|---|---|---|
|
||||
| **A** | `@` | `203.0.113.42` | Points root domain to your server |
|
||||
| **A** | `plausible` | `203.0.113.42` | Points subdomain to your server |
|
||||
| **CNAME** | `www` | `yourdomain.com` | Aliases `www` to root |
|
||||
| **A** | `*` | `203.0.113.42` | Wildcard — catch-all for any subdomain |
|
||||
|
||||
> 💡 **Pro Tip:** A wildcard `*` A record + Caddy reverse proxy = unlimited subdomains with zero DNS management. Just add entries to your Caddyfile.
|
||||
|
||||
### DNS Propagation
|
||||
|
||||
After changing DNS records, it can take **5 minutes to 48 hours** to propagate globally. Use [dnschecker.org](https://dnschecker.org) to verify.
|
||||
|
||||
## 3. Firewalls (UFW)
|
||||
|
||||
A firewall controls which ports are open to the internet. On Ubuntu/Debian, use **UFW** (Uncomplicated Firewall):
|
||||
|
||||
```bash
|
||||
# Check current status
|
||||
ufw status
|
||||
|
||||
# Allow essential ports
|
||||
ufw allow 22/tcp # SSH — DON'T lock yourself out
|
||||
ufw allow 80/tcp # HTTP
|
||||
ufw allow 443/tcp # HTTPS
|
||||
|
||||
# Enable the firewall
|
||||
ufw enable
|
||||
|
||||
# Deny everything else by default
|
||||
ufw default deny incoming
|
||||
ufw default allow outgoing
|
||||
```
|
||||
|
||||
### The Golden Rule
|
||||
|
||||
Only open three ports to the internet: **22** (SSH), **80** (HTTP), **443** (HTTPS).
|
||||
|
||||
Your reverse proxy (Caddy/Nginx) handles port 80/443 and routes traffic internally to your containers. Individual tool ports (3000, 8080, etc.) should **never** be exposed publicly.
|
||||
|
||||
```
|
||||
Internet → Port 443 → Caddy → Internal Docker Network → Your Tools
|
||||
```
|
||||
|
||||
### Common Mistakes
|
||||
|
||||
**"I can't SSH into my server"** → You blocked port 22 before enabling UFW. Contact your hosting provider for console access.
|
||||
|
||||
**"My tool works locally but not remotely"** → Port 80/443 isn't open. Run `ufw allow 80/tcp && ufw allow 443/tcp`.
|
||||
|
||||
**"I opened port 8080 and got hacked"** → Never expose app ports directly. Use a reverse proxy instead.
|
||||
|
||||
## 4. Docker Networks
|
||||
|
||||
Docker creates isolated **networks** for your containers. By default, containers in the same `docker-compose.yml` can talk to each other by service name:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
app:
|
||||
image: myapp:latest
|
||||
depends_on:
|
||||
- db # Can reach the database at "db:5432"
|
||||
|
||||
db:
|
||||
image: postgres:16
|
||||
# No "ports:" = not accessible from outside Docker
|
||||
```
|
||||
|
||||
### When to Create Custom Networks
|
||||
|
||||
If you need containers from **different** Compose files to communicate (e.g., a shared Caddy reverse proxy):
|
||||
|
||||
```yaml
|
||||
# In your Caddyfile's docker-compose.yml
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
||||
|
||||
# In your app's docker-compose.yml
|
||||
networks:
|
||||
default:
|
||||
name: proxy
|
||||
external: true
|
||||
```
|
||||
|
||||
Create the shared network first:
|
||||
|
||||
```bash
|
||||
docker network create proxy
|
||||
```
|
||||
|
||||
Now all containers on the `proxy` network can reach each other by service name — across different Compose files.
|
||||
|
||||
## Quick Reference
|
||||
|
||||
```bash
|
||||
# See what's listening on which port
|
||||
ss -tlnp
|
||||
|
||||
# Test if a port is open from outside
|
||||
nc -zv your-server-ip 443
|
||||
|
||||
# See Docker networks
|
||||
docker network ls
|
||||
|
||||
# Check DNS resolution
|
||||
dig plausible.yourdomain.com
|
||||
nslookup plausible.yourdomain.com
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
→ [Reverse Proxies Explained](/concepts/reverse-proxies) — Route traffic from domains to containers
|
||||
→ [SSL/TLS for Self-Hosters](/concepts/ssl-tls) — Encrypt your traffic
|
||||
→ [Environment Variables & Secrets](/concepts/env-secrets) — Secure your configuration
|
||||
56
docs/app/concepts/page.mdx
Normal file
56
docs/app/concepts/page.mdx
Normal file
@@ -0,0 +1,56 @@
|
||||
---
|
||||
title: "Concepts"
|
||||
description: "The foundational knowledge for self-hosting. Docker, networking, security, backups — explained like you're a human, not a sysadmin."
|
||||
---
|
||||
|
||||
# Concepts
|
||||
|
||||
Before you deploy anything, understand the building blocks. These guides cover the **why** and **how** behind self-hosting infrastructure — no fluff, no PhD required.
|
||||
|
||||
> 📖 **Reading order matters.** Start from the top and work down. Each article builds on the one before it.
|
||||
|
||||
---
|
||||
|
||||
## The Foundations
|
||||
|
||||
These four are non-negotiable. Read them before your first deploy.
|
||||
|
||||
| # | Guide | What You'll Learn |
|
||||
|---|---|---|
|
||||
| 1 | [Docker in 10 Minutes](/concepts/docker-basics) | Images, containers, volumes, Docker Compose — the only 4 concepts you need |
|
||||
| 2 | [Networking for Self-Hosters](/concepts/networking) | Ports, DNS, firewalls, and why your tool isn't accessible from the internet |
|
||||
| 3 | [Reverse Proxies Explained](/concepts/reverse-proxies) | Map `app.yourdomain.com` to your containers with Caddy |
|
||||
| 4 | [SSL/TLS for Self-Hosters](/concepts/ssl-tls) | HTTPS, Let's Encrypt, and why it matters |
|
||||
|
||||
---
|
||||
|
||||
## Running in Production
|
||||
|
||||
Once your tools are deployed, keep them alive and healthy.
|
||||
|
||||
| # | Guide | What You'll Learn |
|
||||
|---|---|---|
|
||||
| 5 | [Environment Variables & Secrets](/concepts/env-secrets) | `.env` files, Docker secrets, and never hardcoding passwords again |
|
||||
| 6 | [Monitoring & Observability](/concepts/monitoring) | Know when things break before your users do |
|
||||
| 7 | [Updating & Maintaining Containers](/concepts/updates) | Safe update workflows, rollbacks, and automating the boring parts |
|
||||
| 8 | [Backups That Actually Work](/concepts/backups) | Database dumps, volume backups, and the 3-2-1 rule |
|
||||
|
||||
---
|
||||
|
||||
## Planning & Scaling
|
||||
|
||||
Before you buy a server (or a bigger one).
|
||||
|
||||
| # | Guide | What You'll Learn |
|
||||
|---|---|---|
|
||||
| 9 | [Hardware & VPS Sizing](/concepts/hardware) | How much RAM/CPU you actually need, and which providers are worth it |
|
||||
|
||||
---
|
||||
|
||||
## Ready to Deploy?
|
||||
|
||||
You've got the knowledge. Now put it to work:
|
||||
|
||||
→ [Deploy Guides](/deploy) — 65+ tools with Docker Compose configs
|
||||
→ [Quick Start](/quick-start) — Your first deployment in 5 minutes
|
||||
→ [Curated Stacks](/stacks) — Pre-built tool bundles for specific use cases
|
||||
113
docs/app/concepts/reverse-proxies/page.mdx
Normal file
113
docs/app/concepts/reverse-proxies/page.mdx
Normal file
@@ -0,0 +1,113 @@
|
||||
---
|
||||
title: Reverse Proxies Explained
|
||||
description: "What a reverse proxy does and why you need one. Set up Caddy or Nginx to serve your self-hosted tools on proper domains with automatic HTTPS."
|
||||
---
|
||||
|
||||
# Reverse Proxies Explained
|
||||
|
||||
Right now your tools run on ports like `:3001`, `:8000`, `:8080`. That's fine for testing, but you don't want users visiting `http://your-ip:8000`.
|
||||
|
||||
A **reverse proxy** maps clean domains to those ugly ports:
|
||||
|
||||
```
|
||||
plausible.yourdomain.com → localhost:8000
|
||||
uptime.yourdomain.com → localhost:3001
|
||||
supabase.yourdomain.com → localhost:8443
|
||||
```
|
||||
|
||||
It also handles **HTTPS** (SSL certificates) automatically.
|
||||
|
||||
## Which One to Use?
|
||||
|
||||
| Proxy | Our Take |
|
||||
|---|---|
|
||||
| **Caddy** ✅ | **Use this.** Automatic HTTPS, zero-config SSL, human-readable config. Built for self-hosters. |
|
||||
| **Nginx Proxy Manager** | GUI-first option. Great if you hate config files. Slightly more resource-heavy. |
|
||||
| **Traefik** | Powerful but complex. Built for Kubernetes. Overkill for most self-hosting setups. |
|
||||
| **Nginx (raw)** | The classic. Fine but verbose. No auto-SSL without certbot scripts. |
|
||||
|
||||
> 🏆 **The Verdict:** Start with Caddy. Seriously. The config file is 6 lines.
|
||||
|
||||
## Setting Up Caddy (Recommended)
|
||||
|
||||
### Step 1: Deploy Caddy
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
caddy:
|
||||
image: caddy:2-alpine
|
||||
container_name: caddy
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- ./Caddyfile:/etc/caddy/Caddyfile
|
||||
- caddy_data:/data
|
||||
- caddy_config:/config
|
||||
|
||||
volumes:
|
||||
caddy_data:
|
||||
caddy_config:
|
||||
```
|
||||
|
||||
### Step 2: Configure Your Domains
|
||||
|
||||
Create a `Caddyfile` in the same directory:
|
||||
|
||||
```
|
||||
plausible.yourdomain.com {
|
||||
reverse_proxy localhost:8000
|
||||
}
|
||||
|
||||
uptime.yourdomain.com {
|
||||
reverse_proxy localhost:3001
|
||||
}
|
||||
|
||||
git.yourdomain.com {
|
||||
reverse_proxy localhost:3000
|
||||
}
|
||||
```
|
||||
|
||||
That's the entire config. Caddy automatically obtains and renews Let's Encrypt SSL certificates for every domain listed.
|
||||
|
||||
### Step 3: Point DNS
|
||||
|
||||
In your domain registrar (Cloudflare, Namecheap, etc.), add A records:
|
||||
|
||||
| Type | Name | Value |
|
||||
|---|---|---|
|
||||
| A | `plausible` | `your-server-ip` |
|
||||
| A | `uptime` | `your-server-ip` |
|
||||
| A | `git` | `your-server-ip` |
|
||||
|
||||
### Step 4: Start
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Within 60 seconds, Caddy will obtain SSL certificates and your tools will be live on proper HTTPS domains.
|
||||
|
||||
## How It Works (Simplified)
|
||||
|
||||
```
|
||||
User visits plausible.yourdomain.com
|
||||
↓
|
||||
DNS resolves to your server IP
|
||||
↓
|
||||
Caddy receives the request on port 443
|
||||
↓
|
||||
Caddy reads Caddyfile: "plausible.yourdomain.com → localhost:8000"
|
||||
↓
|
||||
Caddy forwards the request to your Plausible container
|
||||
↓
|
||||
User sees Plausible dashboard over HTTPS 🔒
|
||||
```
|
||||
|
||||
→ [Setting Up a Reverse Proxy (Practical Guide)](/quick-start/reverse-proxy) — Get Nginx, Caddy, or Traefik running now
|
||||
→ [SSL/TLS for Self-Hosters](/concepts/ssl-tls) — Deep dive into certificates and security
|
||||
→ [Deploy Guides](/deploy) — All our guides include reverse proxy config
|
||||
56
docs/app/concepts/ssl-tls/page.mdx
Normal file
56
docs/app/concepts/ssl-tls/page.mdx
Normal file
@@ -0,0 +1,56 @@
|
||||
---
|
||||
title: "SSL/TLS for Self-Hosters"
|
||||
description: "HTTPS for your self-hosted tools. How SSL works, why you need it, and how to set it up with Caddy or Let's Encrypt."
|
||||
---
|
||||
|
||||
# SSL/TLS for Self-Hosters
|
||||
|
||||
**SSL/TLS** is what makes the padlock appear in your browser. It encrypts traffic between your users and your server so nobody can snoop on it.
|
||||
|
||||
Every self-hosted tool accessible from the internet **must** have HTTPS. No exceptions.
|
||||
|
||||
## The Easy Way: Caddy (Automatic)
|
||||
|
||||
If you followed our [reverse proxy guide](/concepts/reverse-proxies) and are using Caddy, **you already have SSL**. Caddy obtains and renews Let's Encrypt certificates automatically for every domain in your Caddyfile.
|
||||
|
||||
No config needed. No cron jobs. No certbot. It just works.
|
||||
|
||||
> 🔥 **Pro Tip:** This is the #1 reason we recommend Caddy over Nginx.
|
||||
|
||||
## The Manual Way: Let's Encrypt + Certbot
|
||||
|
||||
If you're using raw Nginx, you'll need certbot:
|
||||
|
||||
```bash
|
||||
# Install certbot
|
||||
apt install certbot python3-certbot-nginx -y
|
||||
|
||||
# Obtain a certificate
|
||||
certbot --nginx -d plausible.yourdomain.com
|
||||
|
||||
# Verify auto-renewal
|
||||
certbot renew --dry-run
|
||||
```
|
||||
|
||||
Certbot will modify your Nginx config automatically and set up a cron job for renewal.
|
||||
|
||||
## SSL Checklist
|
||||
|
||||
After setting up SSL, verify:
|
||||
|
||||
- [ ] Site loads on `https://` (padlock visible)
|
||||
- [ ] `http://` redirects to `https://` automatically
|
||||
- [ ] Certificate is from Let's Encrypt (click padlock → "Certificate")
|
||||
- [ ] No mixed-content warnings in browser console
|
||||
|
||||
## Common Gotchas
|
||||
|
||||
**"Certificate not found"** → Your DNS hasn't propagated yet. Wait 5–10 minutes and try again.
|
||||
|
||||
**"Too many requests"** → Let's Encrypt rate-limits to 50 certificates/week per domain. If you're testing, use `--staging` flag first.
|
||||
|
||||
**"Connection refused on port 443"** → Port 443 isn't open in your firewall. Run: `ufw allow 443/tcp`
|
||||
|
||||
## Next Steps
|
||||
|
||||
→ [Backups That Actually Work](/concepts/backups) — Protect the data you're securing with SSL
|
||||
153
docs/app/concepts/updates/page.mdx
Normal file
153
docs/app/concepts/updates/page.mdx
Normal file
@@ -0,0 +1,153 @@
|
||||
---
|
||||
title: "Updating & Maintaining Containers"
|
||||
description: "How to safely update self-hosted tools running in Docker. Update workflows, rollbacks, and optional automation with Watchtower."
|
||||
---
|
||||
|
||||
# Updating & Maintaining Containers
|
||||
|
||||
Your tools need updates — security patches, bug fixes, new features. But updating a self-hosted tool isn't like clicking "Update" in an app store. You need a process.
|
||||
|
||||
## The Safe Update Workflow
|
||||
|
||||
Follow this **every time** you update a tool:
|
||||
|
||||
```bash
|
||||
# 1. Backup first (ALWAYS)
|
||||
docker exec my-db pg_dump -U postgres mydb > backup_$(date +%Y%m%d).sql
|
||||
|
||||
# 2. Pull the new image
|
||||
docker compose pull
|
||||
|
||||
# 3. Recreate containers with new image
|
||||
docker compose up -d
|
||||
|
||||
# 4. Check logs for errors
|
||||
docker compose logs -f --tail=50
|
||||
|
||||
# 5. Verify the tool works
|
||||
curl -I https://app.yourdomain.com
|
||||
```
|
||||
|
||||
> ⚠️ **Golden Rule:** Never update without a backup. If something breaks, you can roll back in 60 seconds.
|
||||
|
||||
## Rolling Back
|
||||
|
||||
Something went wrong? Here's how to revert to the previous version:
|
||||
|
||||
### Option 1: Pin to Previous Version
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml — change the tag
|
||||
services:
|
||||
app:
|
||||
image: plausible/analytics:v2.0.0 # Was :v2.1.0
|
||||
```
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### Option 2: Restore From Backup
|
||||
|
||||
```bash
|
||||
# Stop the broken service
|
||||
docker compose down
|
||||
|
||||
# Restore the database backup
|
||||
cat backup_20260218.sql | docker exec -i my-db psql -U postgres mydb
|
||||
|
||||
# Start with the old image
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Image Tags: `latest` vs Pinned Versions
|
||||
|
||||
| Approach | Pros | Cons |
|
||||
|---|---|---|
|
||||
| `image: app:latest` | Always gets newest | Can break unexpectedly |
|
||||
| `image: app:v2.1.0` | Predictable, reproducible | Manual updates required |
|
||||
| `image: app:2` | Gets patches within major version | Some risk of breaking changes |
|
||||
|
||||
> 🏆 **Our Recommendation:** Use **major version tags** (`image: postgres:16`) for databases and **pinned versions** (`image: plausible/analytics:v2.1.0`) for applications. Avoid `latest` in production.
|
||||
|
||||
## Automated Updates with Watchtower
|
||||
|
||||
If you want hands-off updates (with some risk), **Watchtower** watches your containers and auto-updates them:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
watchtower:
|
||||
image: containrrr/watchtower
|
||||
container_name: watchtower
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
environment:
|
||||
WATCHTOWER_CLEANUP: "true"
|
||||
WATCHTOWER_SCHEDULE: "0 0 4 * * *" # 4 AM daily
|
||||
WATCHTOWER_NOTIFICATIONS: "email"
|
||||
command: --include-restarting
|
||||
```
|
||||
|
||||
### Watchtower Caveats
|
||||
|
||||
- It updates **all** containers by default. Use labels to control which ones:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
plausible:
|
||||
image: plausible/analytics:latest
|
||||
labels:
|
||||
- "com.centurylinklabs.watchtower.enable=true"
|
||||
|
||||
database:
|
||||
image: postgres:16
|
||||
labels:
|
||||
- "com.centurylinklabs.watchtower.enable=false" # NEVER auto-update databases
|
||||
```
|
||||
|
||||
- It doesn't run migrations. Some tools need `docker exec app migrate` after updates.
|
||||
- It can't roll back automatically.
|
||||
|
||||
> ⚠️ **Never auto-update databases.** Postgres, MySQL, and Redis major version upgrades require manual migration steps. Always pin database images.
|
||||
|
||||
## Cleanup: Reclaiming Disk Space
|
||||
|
||||
Old images pile up. Docker doesn't clean them automatically:
|
||||
|
||||
```bash
|
||||
# See how much space Docker is using
|
||||
docker system df
|
||||
|
||||
# Remove unused images (safe)
|
||||
docker image prune -f
|
||||
|
||||
# Nuclear option: remove ALL unused data
|
||||
docker system prune -a -f --volumes
|
||||
# ⚠️ This deletes stopped containers, unused images, AND orphaned volumes
|
||||
```
|
||||
|
||||
### Automate Cleanup
|
||||
|
||||
Add to your crontab:
|
||||
|
||||
```bash
|
||||
# Weekly cleanup at 3 AM Sunday
|
||||
0 3 * * 0 docker image prune -f >> /var/log/docker-cleanup.log 2>&1
|
||||
```
|
||||
|
||||
## Update Checklist
|
||||
|
||||
Before updating any tool:
|
||||
|
||||
- [ ] Database backed up
|
||||
- [ ] Current version noted (in case of rollback)
|
||||
- [ ] Changelog reviewed for breaking changes
|
||||
- [ ] `.env` file backed up
|
||||
- [ ] Update applied and logs checked
|
||||
- [ ] Service verified working
|
||||
|
||||
## Next Steps
|
||||
|
||||
→ [Backups That Actually Work](/concepts/backups) — Make sure you can actually roll back
|
||||
→ [Monitoring & Observability](/concepts/monitoring) — Catch failed updates automatically
|
||||
9
docs/app/contact/page.mdx
Normal file
9
docs/app/contact/page.mdx
Normal file
@@ -0,0 +1,9 @@
|
||||
import ContactForm from '../../components/ContactForm'
|
||||
|
||||
# Contact Us
|
||||
|
||||
Have a question regarding self-hosting, a suggestion for a new stack, or just want to say hello? We're here to help.
|
||||
|
||||
Fill out the form below and we'll get back to you as soon as possible.
|
||||
|
||||
<ContactForm />
|
||||
201
docs/app/deploy/_meta.ts
Normal file
201
docs/app/deploy/_meta.ts
Normal file
@@ -0,0 +1,201 @@
|
||||
import type { MetaRecord } from 'nextra'
|
||||
|
||||
const meta: MetaRecord = {
|
||||
"activepieces": {
|
||||
"title": "Activepieces"
|
||||
},
|
||||
"affine": {
|
||||
"title": "AFFiNE"
|
||||
},
|
||||
"akaunting": {
|
||||
"title": "Akaunting"
|
||||
},
|
||||
"appflowy": {
|
||||
"title": "AppFlowy"
|
||||
},
|
||||
"appwrite": {
|
||||
"title": "Appwrite"
|
||||
},
|
||||
"authentik": {
|
||||
"title": "Authentik"
|
||||
},
|
||||
"bitwarden": {
|
||||
"title": "Bitwarden"
|
||||
},
|
||||
"calcom": {
|
||||
"title": "Cal.com"
|
||||
},
|
||||
"chaskiq": {
|
||||
"title": "Chaskiq"
|
||||
},
|
||||
"coder": {
|
||||
"title": "Coder"
|
||||
},
|
||||
"continue-dev": {
|
||||
"title": "Continue"
|
||||
},
|
||||
"coolify": {
|
||||
"title": "Coolify"
|
||||
},
|
||||
"deepseek": {
|
||||
"title": "DeepSeek-V3 / R1"
|
||||
},
|
||||
"documenso": {
|
||||
"title": "Documenso"
|
||||
},
|
||||
"dokku": {
|
||||
"title": "Dokku"
|
||||
},
|
||||
"erpnext": {
|
||||
"title": "ERPNext"
|
||||
},
|
||||
"flux": {
|
||||
"title": "FLUX"
|
||||
},
|
||||
"freecad": {
|
||||
"title": "FreeCAD"
|
||||
},
|
||||
"gemma": {
|
||||
"title": "Google Gemma 2"
|
||||
},
|
||||
"gimp": {
|
||||
"title": "GIMP"
|
||||
},
|
||||
"glitchtip": {
|
||||
"title": "GlitchTip"
|
||||
},
|
||||
"gpt4all": {
|
||||
"title": "GPT4All"
|
||||
},
|
||||
"hunyuan-video": {
|
||||
"title": "HunyuanVideo 1.5"
|
||||
},
|
||||
"jitsi-meet": {
|
||||
"title": "Jitsi Meet"
|
||||
},
|
||||
"jitsu": {
|
||||
"title": "Jitsu"
|
||||
},
|
||||
"kdenlive": {
|
||||
"title": "Kdenlive"
|
||||
},
|
||||
"keepassxc": {
|
||||
"title": "KeePassXC"
|
||||
},
|
||||
"keycloak": {
|
||||
"title": "Keycloak"
|
||||
},
|
||||
"krita": {
|
||||
"title": "Krita"
|
||||
},
|
||||
"librecad": {
|
||||
"title": "LibreCAD"
|
||||
},
|
||||
"listmonk": {
|
||||
"title": "Listmonk"
|
||||
},
|
||||
"llama": {
|
||||
"title": "Meta Llama 3.1"
|
||||
},
|
||||
"matomo": {
|
||||
"title": "Matomo"
|
||||
},
|
||||
"mattermost": {
|
||||
"title": "Mattermost"
|
||||
},
|
||||
"mautic": {
|
||||
"title": "Mautic"
|
||||
},
|
||||
"medusa": {
|
||||
"title": "Medusa.js"
|
||||
},
|
||||
"metabase": {
|
||||
"title": "Metabase"
|
||||
},
|
||||
"minio": {
|
||||
"title": "MinIO"
|
||||
},
|
||||
"mistral": {
|
||||
"title": "Mistral Large 2"
|
||||
},
|
||||
"mixpost": {
|
||||
"title": "Mixpost"
|
||||
},
|
||||
"mochi-1": {
|
||||
"title": "Mochi-1"
|
||||
},
|
||||
"n8n": {
|
||||
"title": "n8n"
|
||||
},
|
||||
"odoo": {
|
||||
"title": "Odoo"
|
||||
},
|
||||
"ollama": {
|
||||
"title": "Ollama"
|
||||
},
|
||||
"onlyoffice": {
|
||||
"title": "ONLYOFFICE"
|
||||
},
|
||||
"orangehrm": {
|
||||
"title": "OrangeHRM"
|
||||
},
|
||||
"outline": {
|
||||
"title": "Outline"
|
||||
},
|
||||
"penpot": {
|
||||
"title": "Penpot"
|
||||
},
|
||||
"plane": {
|
||||
"title": "Plane"
|
||||
},
|
||||
"plausible": {
|
||||
"title": "Plausible"
|
||||
},
|
||||
"pocketbase": {
|
||||
"title": "PocketBase"
|
||||
},
|
||||
"postal": {
|
||||
"title": "Postal"
|
||||
},
|
||||
"posthog": {
|
||||
"title": "PostHog"
|
||||
},
|
||||
"qwen": {
|
||||
"title": "Qwen 2.5"
|
||||
},
|
||||
"rocketchat": {
|
||||
"title": "Rocket.Chat"
|
||||
},
|
||||
"signoz": {
|
||||
"title": "SigNoz"
|
||||
},
|
||||
"stable-diffusion": {
|
||||
"title": "Stable Diffusion 3.5"
|
||||
},
|
||||
"supabase": {
|
||||
"title": "Supabase"
|
||||
},
|
||||
"superset": {
|
||||
"title": "Apache Superset"
|
||||
},
|
||||
"tabby": {
|
||||
"title": "TabbyML"
|
||||
},
|
||||
"taiga": {
|
||||
"title": "Taiga"
|
||||
},
|
||||
"twenty": {
|
||||
"title": "Twenty"
|
||||
},
|
||||
"uptime-kuma": {
|
||||
"title": "Uptime Kuma"
|
||||
},
|
||||
"vaultwarden": {
|
||||
"title": "Vaultwarden"
|
||||
},
|
||||
"zammad": {
|
||||
"title": "Zammad"
|
||||
}
|
||||
}
|
||||
|
||||
export default meta
|
||||
158
docs/app/deploy/activepieces/page.mdx
Normal file
158
docs/app/deploy/activepieces/page.mdx
Normal file
@@ -0,0 +1,158 @@
|
||||
---
|
||||
title: "Deploy Activepieces Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Activepieces with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Activepieces
|
||||
|
||||
Open source alternative to Zapier. Automate your work with 200+ apps.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 11.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 MIT</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Activepieces instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Activepieces and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
activepieces:
|
||||
image: activepieces/activepieces:latest
|
||||
container_name: activepieces
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
ports:
|
||||
- "8080:80"
|
||||
environment:
|
||||
- AP_FRONTEND_URL=http://localhost:8080
|
||||
- AP_POSTGRES_DATABASE=activepieces
|
||||
- AP_POSTGRES_HOST=db
|
||||
- AP_POSTGRES_PORT=5432
|
||||
- AP_POSTGRES_USERNAME=activepieces
|
||||
- AP_POSTGRES_PASSWORD=activepieces
|
||||
- AP_REDIS_HOST=redis
|
||||
- AP_REDIS_PORT=6379
|
||||
|
||||
db:
|
||||
image: postgres:14-alpine
|
||||
container_name: activepieces-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_USER=activepieces
|
||||
- POSTGRES_PASSWORD=activepieces
|
||||
- POSTGRES_DB=activepieces
|
||||
volumes:
|
||||
- activepieces_db_data:/var/lib/postgresql/data
|
||||
|
||||
redis:
|
||||
image: redis:alpine
|
||||
container_name: activepieces-redis
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
activepieces_db_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/activepieces && cd /opt/activepieces
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `AP_FRONTEND_URL` | `http://localhost:8080` | No |
|
||||
| `AP_POSTGRES_DATABASE` | `activepieces` | No |
|
||||
| `AP_POSTGRES_HOST` | `db` | No |
|
||||
| `AP_POSTGRES_PORT` | `5432` | No |
|
||||
| `AP_POSTGRES_USERNAME` | `activepieces` | No |
|
||||
| `AP_POSTGRES_PASSWORD` | `activepieces` | No |
|
||||
| `AP_REDIS_HOST` | `redis` | No |
|
||||
| `AP_REDIS_PORT` | `6379` | No |
|
||||
| `POSTGRES_USER` | `activepieces` | No |
|
||||
| `POSTGRES_PASSWORD` | `activepieces` | No |
|
||||
| `POSTGRES_DB` | `activepieces` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs activepieces | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Activepieces on AltStack Directory](https://thealtstack.com/alternative-to/activepieces)
|
||||
- [Activepieces Self-Hosted Guide](https://thealtstack.com/self-hosted/activepieces)
|
||||
- [Official Documentation](https://www.activepieces.com)
|
||||
- [GitHub Repository](https://github.com/activepieces/activepieces)
|
||||
171
docs/app/deploy/affine/page.mdx
Normal file
171
docs/app/deploy/affine/page.mdx
Normal file
@@ -0,0 +1,171 @@
|
||||
---
|
||||
title: "Deploy AFFiNE Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting AFFiNE with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy AFFiNE
|
||||
|
||||
There can be more than Notion and Miro. AFFiNE(pronounced [ə‘fain]) is a next-gen knowledge base that brings planning, sorting and creating all together. Privacy first, open-source, customizable and ready to use.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 62.7k stars</span>
|
||||
<span className="deploy-hero-item">📜 Other</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working AFFiNE instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for AFFiNE and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
# Docker Compose for AFFiNE
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
affine:
|
||||
image: ghcr.io/toeverything/affine-graphql:latest # Using official as fallback but custom build setup exists in Dockerfile
|
||||
container_name: affine
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
- DATABASE_URL=postgres://affine:affine@db:5432/affine
|
||||
- REDIS_URL=redis://redis:6379
|
||||
- NODE_ENV=production
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- affine_net
|
||||
healthcheck:
|
||||
test: [ "CMD", "curl", "-f", "http://localhost:3000/" ]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
db:
|
||||
image: postgres:15-alpine
|
||||
container_name: affine-db
|
||||
environment:
|
||||
POSTGRES_USER: affine
|
||||
POSTGRES_PASSWORD: affine
|
||||
POSTGRES_DB: affine
|
||||
volumes:
|
||||
- affine_db_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- affine_net
|
||||
healthcheck:
|
||||
test: [ "CMD-SHELL", "pg_isready -U affine" ]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: affine-redis
|
||||
networks:
|
||||
- affine_net
|
||||
healthcheck:
|
||||
test: [ "CMD", "redis-cli", "ping" ]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
networks:
|
||||
affine_net:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
affine_db_data:
|
||||
name: affine_db_data
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/affine && cd /opt/affine
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `DATABASE_URL` | `postgres://affine:affine@db:5432/affine` | No |
|
||||
| `REDIS_URL` | `redis://redis:6379` | No |
|
||||
| `NODE_ENV` | `production` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs affine | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [AFFiNE on AltStack Directory](https://thealtstack.com/alternative-to/affine)
|
||||
- [AFFiNE Self-Hosted Guide](https://thealtstack.com/self-hosted/affine)
|
||||
- [Official Documentation](https://affine.pro)
|
||||
- [GitHub Repository](https://github.com/toeverything/AFFiNE)
|
||||
146
docs/app/deploy/akaunting/page.mdx
Normal file
146
docs/app/deploy/akaunting/page.mdx
Normal file
@@ -0,0 +1,146 @@
|
||||
---
|
||||
title: "Deploy Akaunting Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Akaunting with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Akaunting
|
||||
|
||||
Free and open source online accounting software for small businesses and freelancers.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 12.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 GPL-3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Akaunting instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Akaunting and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
akaunting:
|
||||
image: akaunting/akaunting:latest
|
||||
container_name: akaunting
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
ports:
|
||||
- "8080:80"
|
||||
environment:
|
||||
- DB_HOST=db
|
||||
- DB_DATABASE=akaunting
|
||||
- DB_USERNAME=akaunting
|
||||
- DB_PASSWORD=akaunting
|
||||
|
||||
db:
|
||||
image: mariadb:10.6
|
||||
container_name: akaunting-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- MYSQL_DATABASE=akaunting
|
||||
- MYSQL_USER=akaunting
|
||||
- MYSQL_PASSWORD=akaunting
|
||||
- MYSQL_ROOT_PASSWORD=root
|
||||
volumes:
|
||||
- akaunting_db_data:/var/lib/mysql
|
||||
|
||||
volumes:
|
||||
akaunting_db_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/akaunting && cd /opt/akaunting
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `DB_HOST` | `db` | No |
|
||||
| `DB_DATABASE` | `akaunting` | No |
|
||||
| `DB_USERNAME` | `akaunting` | No |
|
||||
| `DB_PASSWORD` | `akaunting` | No |
|
||||
| `MYSQL_DATABASE` | `akaunting` | No |
|
||||
| `MYSQL_USER` | `akaunting` | No |
|
||||
| `MYSQL_PASSWORD` | `akaunting` | No |
|
||||
| `MYSQL_ROOT_PASSWORD` | `root` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs akaunting | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Akaunting on AltStack Directory](https://thealtstack.com/alternative-to/akaunting)
|
||||
- [Akaunting Self-Hosted Guide](https://thealtstack.com/self-hosted/akaunting)
|
||||
- [Official Documentation](https://akaunting.com)
|
||||
- [GitHub Repository](https://github.com/akaunting/akaunting)
|
||||
171
docs/app/deploy/appflowy/page.mdx
Normal file
171
docs/app/deploy/appflowy/page.mdx
Normal file
@@ -0,0 +1,171 @@
|
||||
---
|
||||
title: "Deploy AppFlowy Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting AppFlowy with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy AppFlowy
|
||||
|
||||
Bring projects, wikis, and teams together with AI. AppFlowy is the AI collaborative workspace where you achieve more without losing control of your data. The leading open source Notion alternative.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 68.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 GNU Affero General Public License v3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working AppFlowy instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for AppFlowy and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
# Docker Compose for AppFlowy Cloud
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
appflowy:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
container_name: appflowy-cloud
|
||||
ports:
|
||||
- "8080:8080"
|
||||
environment:
|
||||
- DATABASE_URL=postgres://postgres:${POSTGRES_PASSWORD:-password}@db:5432/appflowy
|
||||
- REDIS_URL=redis://redis:6379
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- appflowy_net
|
||||
healthcheck:
|
||||
test: [ "CMD", "curl", "-f", "http://localhost:8080/health" ]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
db:
|
||||
image: postgres:15-alpine
|
||||
container_name: appflowy-db
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password}
|
||||
POSTGRES_DB: appflowy
|
||||
volumes:
|
||||
- appflowy_db_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- appflowy_net
|
||||
healthcheck:
|
||||
test: [ "CMD-SHELL", "pg_isready -U postgres" ]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: appflowy-redis
|
||||
networks:
|
||||
- appflowy_net
|
||||
healthcheck:
|
||||
test: [ "CMD", "redis-cli", "ping" ]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
networks:
|
||||
appflowy_net:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
appflowy_db_data:
|
||||
name: appflowy_db_data
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/appflowy && cd /opt/appflowy
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `DATABASE_URL` | `postgres://postgres:${POSTGRES_PASSWORD:-password}@db:5432/appflowy` | No |
|
||||
| `REDIS_URL` | `redis://redis:6379` | No |
|
||||
| `POSTGRES_PASSWORD` | `password` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs appflowy | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [AppFlowy on AltStack Directory](https://thealtstack.com/alternative-to/appflowy)
|
||||
- [AppFlowy Self-Hosted Guide](https://thealtstack.com/self-hosted/appflowy)
|
||||
- [Official Documentation](https://www.appflowy.io)
|
||||
- [GitHub Repository](https://github.com/AppFlowy-IO/AppFlowy)
|
||||
181
docs/app/deploy/appwrite/page.mdx
Normal file
181
docs/app/deploy/appwrite/page.mdx
Normal file
@@ -0,0 +1,181 @@
|
||||
---
|
||||
title: "Deploy Appwrite Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Appwrite with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Appwrite
|
||||
|
||||
Appwrite® - complete cloud infrastructure for your web, mobile and AI apps. Including Auth, Databases, Storage, Functions, Messaging, Hosting, Realtime and more
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 54.7k stars</span>
|
||||
<span className="deploy-hero-item">📜 BSD 3-Clause "New" or "Revised" License</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Appwrite instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Appwrite and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
# Docker Compose for Appwrite
|
||||
# Note: Appwrite is a complex multi-service system.
|
||||
# This is a production-ready configuration for the core services.
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
appwrite:
|
||||
image: appwrite/appwrite:1.5.4
|
||||
container_name: appwrite
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
environment:
|
||||
- _APP_ENV=production
|
||||
- _APP_DB_HOST=db
|
||||
- _APP_DB_USER=appwrite
|
||||
- _APP_DB_PASS=${DB_PASSWORD:-password}
|
||||
- _APP_REDIS_HOST=redis
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- appwrite_net
|
||||
healthcheck:
|
||||
test: [ "CMD", "curl", "-f", "http://localhost/v1/health" ]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
db:
|
||||
image: mariadb:10.11 # Appwrite uses MariaDB by default
|
||||
container_name: appwrite-db
|
||||
environment:
|
||||
MARIADB_USER: appwrite
|
||||
MARIADB_PASSWORD: ${DB_PASSWORD:-password}
|
||||
MARIADB_DATABASE: appwrite
|
||||
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-rootpassword}
|
||||
volumes:
|
||||
- appwrite_db_data:/var/lib/mysql
|
||||
networks:
|
||||
- appwrite_net
|
||||
healthcheck:
|
||||
test: [ "CMD-SHELL", "mysqladmin ping -h localhost -u root -p${DB_ROOT_PASSWORD:-rootpassword}" ]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: appwrite-redis
|
||||
networks:
|
||||
- appwrite_net
|
||||
healthcheck:
|
||||
test: [ "CMD", "redis-cli", "ping" ]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
networks:
|
||||
appwrite_net:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
appwrite_db_data:
|
||||
name: appwrite_db_data
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/appwrite && cd /opt/appwrite
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `_APP_ENV` | `production` | No |
|
||||
| `_APP_DB_HOST` | `db` | No |
|
||||
| `_APP_DB_USER` | `appwrite` | No |
|
||||
| `_APP_DB_PASS` | `${DB_PASSWORD:-password}` | No |
|
||||
| `_APP_REDIS_HOST` | `redis` | No |
|
||||
| `DB_PASSWORD` | `password` | No |
|
||||
| `DB_ROOT_PASSWORD` | `rootpassword` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs appwrite | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Appwrite on AltStack Directory](https://thealtstack.com/alternative-to/appwrite)
|
||||
- [Appwrite Self-Hosted Guide](https://thealtstack.com/self-hosted/appwrite)
|
||||
- [Official Documentation](https://appwrite.io)
|
||||
- [GitHub Repository](https://github.com/appwrite/appwrite)
|
||||
172
docs/app/deploy/authentik/page.mdx
Normal file
172
docs/app/deploy/authentik/page.mdx
Normal file
@@ -0,0 +1,172 @@
|
||||
---
|
||||
title: "Deploy Authentik Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Authentik with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Authentik
|
||||
|
||||
The overall-best open-source identity provider, focused on flexibility and versatility.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 15.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 MIT</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Authentik instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Authentik and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
server:
|
||||
image: ghcr.io/goauthentik/server:latest
|
||||
container_name: authentik-server
|
||||
restart: unless-stopped
|
||||
command: server
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
ports:
|
||||
- "9000:9000"
|
||||
- "9443:9443"
|
||||
environment:
|
||||
- AUTHENTIK_REDIS__HOST=redis
|
||||
- AUTHENTIK_POSTGRESQL__HOST=db
|
||||
- AUTHENTIK_POSTGRESQL__USER=authentik
|
||||
- AUTHENTIK_POSTGRESQL__NAME=authentik
|
||||
- AUTHENTIK_POSTGRESQL__PASSWORD=authentik
|
||||
- AUTHENTIK_SECRET_KEY=generate-a-random-secret-key
|
||||
|
||||
worker:
|
||||
image: ghcr.io/goauthentik/server:latest
|
||||
container_name: authentik-worker
|
||||
restart: unless-stopped
|
||||
command: worker
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
environment:
|
||||
- AUTHENTIK_REDIS__HOST=redis
|
||||
- AUTHENTIK_POSTGRESQL__HOST=db
|
||||
- AUTHENTIK_POSTGRESQL__USER=authentik
|
||||
- AUTHENTIK_POSTGRESQL__NAME=authentik
|
||||
- AUTHENTIK_POSTGRESQL__PASSWORD=authentik
|
||||
- AUTHENTIK_SECRET_KEY=generate-a-random-secret-key
|
||||
|
||||
db:
|
||||
image: postgres:12-alpine
|
||||
container_name: authentik-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_PASSWORD=authentik
|
||||
- POSTGRES_USER=authentik
|
||||
- POSTGRES_DB=authentik
|
||||
volumes:
|
||||
- authentik_db_data:/var/lib/postgresql/data
|
||||
|
||||
redis:
|
||||
image: redis:6-alpine
|
||||
container_name: authentik-redis
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
authentik_db_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/authentik && cd /opt/authentik
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `AUTHENTIK_REDIS__HOST` | `redis` | No |
|
||||
| `AUTHENTIK_POSTGRESQL__HOST` | `db` | No |
|
||||
| `AUTHENTIK_POSTGRESQL__USER` | `authentik` | No |
|
||||
| `AUTHENTIK_POSTGRESQL__NAME` | `authentik` | No |
|
||||
| `AUTHENTIK_POSTGRESQL__PASSWORD` | `authentik` | No |
|
||||
| `AUTHENTIK_SECRET_KEY` | `generate-a-random-secret-key` | No |
|
||||
| `POSTGRES_PASSWORD` | `authentik` | No |
|
||||
| `POSTGRES_USER` | `authentik` | No |
|
||||
| `POSTGRES_DB` | `authentik` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs authentik | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Authentik on AltStack Directory](https://thealtstack.com/alternative-to/authentik)
|
||||
- [Authentik Self-Hosted Guide](https://thealtstack.com/self-hosted/authentik)
|
||||
- [Official Documentation](https://goauthentik.io)
|
||||
- [GitHub Repository](https://github.com/goauthentik/authentik)
|
||||
117
docs/app/deploy/bitwarden/page.mdx
Normal file
117
docs/app/deploy/bitwarden/page.mdx
Normal file
@@ -0,0 +1,117 @@
|
||||
---
|
||||
title: "Deploy Bitwarden Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Bitwarden with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Bitwarden
|
||||
|
||||
Bitwarden infrastructure/backend (API, database, Docker, etc).
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 18.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Other</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Bitwarden instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Bitwarden and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
bitwarden:
|
||||
image: vaultwarden/server:latest
|
||||
container_name: bitwarden
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8088:80"
|
||||
volumes:
|
||||
- bw-data:/data
|
||||
|
||||
volumes:
|
||||
bw-data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/bitwarden && cd /opt/bitwarden
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs bitwarden | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Bitwarden on AltStack Directory](https://thealtstack.com/alternative-to/bitwarden)
|
||||
- [Bitwarden Self-Hosted Guide](https://thealtstack.com/self-hosted/bitwarden)
|
||||
- [Official Documentation](https://bitwarden.com)
|
||||
- [GitHub Repository](https://github.com/bitwarden/server)
|
||||
112
docs/app/deploy/calcom/page.mdx
Normal file
112
docs/app/deploy/calcom/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy Cal.com Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Cal.com with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Cal.com
|
||||
|
||||
The open-source Calendly alternative. Take control of your scheduling.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 30.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 AGPL-3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Cal.com instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Cal.com and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
calcom:
|
||||
image: calcom/cal.com:latest
|
||||
container_name: calcom
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/calcom && cd /opt/calcom
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs calcom | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Cal.com on AltStack Directory](https://thealtstack.com/alternative-to/calcom)
|
||||
- [Cal.com Self-Hosted Guide](https://thealtstack.com/self-hosted/calcom)
|
||||
- [Official Documentation](https://cal.com)
|
||||
- [GitHub Repository](https://github.com/calcom/cal.com)
|
||||
112
docs/app/deploy/chaskiq/page.mdx
Normal file
112
docs/app/deploy/chaskiq/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy Chaskiq Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Chaskiq with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Chaskiq
|
||||
|
||||
Open source conversational marketing platform alternative to Intercom and Drift.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 4.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 GPL-3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Chaskiq instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Chaskiq and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
chaskiq:
|
||||
image: chaskiq/chaskiq:latest
|
||||
container_name: chaskiq
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/chaskiq && cd /opt/chaskiq
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs chaskiq | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Chaskiq on AltStack Directory](https://thealtstack.com/alternative-to/chaskiq)
|
||||
- [Chaskiq Self-Hosted Guide](https://thealtstack.com/self-hosted/chaskiq)
|
||||
- [Official Documentation](https://chaskiq.io)
|
||||
- [GitHub Repository](https://github.com/chaskiq/chaskiq)
|
||||
144
docs/app/deploy/coder/page.mdx
Normal file
144
docs/app/deploy/coder/page.mdx
Normal file
@@ -0,0 +1,144 @@
|
||||
---
|
||||
title: "Deploy Coder Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Coder with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Coder
|
||||
|
||||
Provision software development environments as code on your infrastructure.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 20.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 AGPL-3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Coder instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Coder and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
coder:
|
||||
image: ghcr.io/coder/coder:latest
|
||||
container_name: coder
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
ports:
|
||||
- "7080:7080"
|
||||
environment:
|
||||
- CODER_PG_CONNECTION_URL=postgresql://coder:coder@db:5432/coder
|
||||
- CODER_ACCESS_URL=http://localhost:7080
|
||||
- CODER_HTTP_ADDRESS=0.0.0.0:7080
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
|
||||
db:
|
||||
image: postgres:13
|
||||
container_name: coder-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_USER=coder
|
||||
- POSTGRES_PASSWORD=coder
|
||||
- POSTGRES_DB=coder
|
||||
volumes:
|
||||
- coder_db_data:/var/lib/postgresql/data
|
||||
|
||||
volumes:
|
||||
coder_db_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/coder && cd /opt/coder
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `CODER_PG_CONNECTION_URL` | `postgresql://coder:coder@db:5432/coder` | No |
|
||||
| `CODER_ACCESS_URL` | `http://localhost:7080` | No |
|
||||
| `CODER_HTTP_ADDRESS` | `0.0.0.0:7080` | No |
|
||||
| `POSTGRES_USER` | `coder` | No |
|
||||
| `POSTGRES_PASSWORD` | `coder` | No |
|
||||
| `POSTGRES_DB` | `coder` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs coder | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Coder on AltStack Directory](https://thealtstack.com/alternative-to/coder)
|
||||
- [Coder Self-Hosted Guide](https://thealtstack.com/self-hosted/coder)
|
||||
- [Official Documentation](https://coder.com)
|
||||
- [GitHub Repository](https://github.com/coder/coder)
|
||||
112
docs/app/deploy/continue-dev/page.mdx
Normal file
112
docs/app/deploy/continue-dev/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy Continue Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Continue with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Continue
|
||||
|
||||
Open-source AI code assistant for VS Code and JetBrains. Use any model (local or API).
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 25.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Apache License 2.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Continue instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Continue and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
continue:
|
||||
image: continuedev/continue:latest
|
||||
container_name: continue
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8080:8080"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/continue-dev && cd /opt/continue-dev
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs continue-dev | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Continue on AltStack Directory](https://thealtstack.com/alternative-to/continue-dev)
|
||||
- [Continue Self-Hosted Guide](https://thealtstack.com/self-hosted/continue-dev)
|
||||
- [Official Documentation](https://continue.dev)
|
||||
- [GitHub Repository](https://github.com/continuedev/continue)
|
||||
171
docs/app/deploy/coolify/page.mdx
Normal file
171
docs/app/deploy/coolify/page.mdx
Normal file
@@ -0,0 +1,171 @@
|
||||
---
|
||||
title: "Deploy Coolify Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Coolify with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Coolify
|
||||
|
||||
An open-source, self-hostable PaaS alternative to Vercel, Heroku & Netlify that lets you easily deploy static sites, databases, full-stack applications and 280+ one-click services on your own servers.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 50.4k stars</span>
|
||||
<span className="deploy-hero-item">📜 Apache License 2.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
A fully operational Coolify instance. Think of Coolify as a self-hosted Vercel or Heroku. Once installed, it manages your other Docker containers, handles deployments from GitHub/GitLab, and provides an integrated reverse proxy.
|
||||
|
||||
> 🚀 **Self-Hosting Level:** If you only deploy one thing, let it be Coolify. It makes deploying everything else 10x easier.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Coolify and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
# Docker Compose for Coolify
|
||||
# Note: Coolify is a self-hosted PaaS.
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
coolify:
|
||||
image: ghcr.io/coollabsio/coolify:latest
|
||||
container_name: coolify
|
||||
ports:
|
||||
- "8000:8000"
|
||||
environment:
|
||||
- APP_ENV=production
|
||||
- DB_CONNECTION=pgsql
|
||||
- DB_HOST=db
|
||||
- DB_DATABASE=coolify
|
||||
- DB_USERNAME=coolify
|
||||
- DB_PASSWORD=${DB_PASSWORD:-password}
|
||||
volumes:
|
||||
- coolify_data:/var/www/html/storage
|
||||
- /var/run/docker.sock:/var/run/docker.sock # Essential for controlling Docker
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- coolify_net
|
||||
healthcheck:
|
||||
test: [ "CMD", "curl", "-f", "http://localhost:8000/api/health" ]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
restart: unless-stopped
|
||||
|
||||
db:
|
||||
image: postgres:15-alpine
|
||||
container_name: coolify-db
|
||||
environment:
|
||||
POSTGRES_USER: coolify
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD:-password}
|
||||
POSTGRES_DB: coolify
|
||||
volumes:
|
||||
- coolify_db_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- coolify_net
|
||||
healthcheck:
|
||||
test: [ "CMD-SHELL", "pg_isready -U coolify" ]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
networks:
|
||||
coolify_net:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
coolify_data:
|
||||
name: coolify_data
|
||||
coolify_db_data:
|
||||
name: coolify_db_data
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/coolify && cd /opt/coolify
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `APP_ENV` | `production` | No |
|
||||
| `DB_CONNECTION` | `pgsql` | No |
|
||||
| `DB_HOST` | `db` | No |
|
||||
| `DB_DATABASE` | `coolify` | No |
|
||||
| `DB_USERNAME` | `coolify` | No |
|
||||
| `DB_PASSWORD` | `${DB_PASSWORD:-password}` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs coolify | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Coolify on AltStack Directory](https://thealtstack.com/alternative-to/coolify)
|
||||
- [Coolify Self-Hosted Guide](https://thealtstack.com/self-hosted/coolify)
|
||||
- [Official Documentation](https://coolify.io)
|
||||
- [GitHub Repository](https://github.com/coollabsio/coolify)
|
||||
117
docs/app/deploy/deepseek/page.mdx
Normal file
117
docs/app/deploy/deepseek/page.mdx
Normal file
@@ -0,0 +1,117 @@
|
||||
---
|
||||
title: "Deploy DeepSeek-V3 / R1 Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting DeepSeek-V3 / R1 with Docker Compose. Replaces: meta-llama-3-1, mistral, qwen-2-5."
|
||||
---
|
||||
|
||||
# Deploy DeepSeek-V3 / R1
|
||||
|
||||
Powerful open-source models including V3 (671B) and R1 (Reasoning). Rivals GPT-4o and o1.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 110.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 MIT License</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working DeepSeek-V3 / R1 instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for DeepSeek-V3 / R1 and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
ollama-deepseek:
|
||||
image: ollama/ollama:latest
|
||||
container_name: ollama-deepseek
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "11435:11434"
|
||||
volumes:
|
||||
- ollama_deepseek:/root/.ollama
|
||||
|
||||
volumes:
|
||||
ollama_deepseek:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/deepseek && cd /opt/deepseek
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs deepseek | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [DeepSeek-V3 / R1 on AltStack Directory](https://thealtstack.com/alternative-to/deepseek)
|
||||
- [DeepSeek-V3 / R1 Self-Hosted Guide](https://thealtstack.com/self-hosted/deepseek)
|
||||
- [Official Documentation](https://deepseek.com)
|
||||
- [GitHub Repository](https://github.com/deepseek-ai/DeepSeek-V3)
|
||||
142
docs/app/deploy/documenso/page.mdx
Normal file
142
docs/app/deploy/documenso/page.mdx
Normal file
@@ -0,0 +1,142 @@
|
||||
---
|
||||
title: "Deploy Documenso Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Documenso with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Documenso
|
||||
|
||||
The open-source DocuSign alternative. We aim to be the world's most trusted document signing platform.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 8.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 AGPL-3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Documenso instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Documenso and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
documenso:
|
||||
image: documenso/documenso:latest
|
||||
container_name: documenso
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
- DATABASE_URL=postgresql://documenso:documenso@db:5432/documenso
|
||||
- NEXTAUTH_URL=http://localhost:3000
|
||||
- NEXTAUTH_SECRET=supersecret
|
||||
|
||||
db:
|
||||
image: postgres:15-alpine
|
||||
container_name: documenso-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_USER=documenso
|
||||
- POSTGRES_PASSWORD=documenso
|
||||
- POSTGRES_DB=documenso
|
||||
volumes:
|
||||
- documenso_db_data:/var/lib/postgresql/data
|
||||
|
||||
volumes:
|
||||
documenso_db_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/documenso && cd /opt/documenso
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `DATABASE_URL` | `postgresql://documenso:documenso@db:5432/documenso` | No |
|
||||
| `NEXTAUTH_URL` | `http://localhost:3000` | No |
|
||||
| `NEXTAUTH_SECRET` | `supersecret` | No |
|
||||
| `POSTGRES_USER` | `documenso` | No |
|
||||
| `POSTGRES_PASSWORD` | `documenso` | No |
|
||||
| `POSTGRES_DB` | `documenso` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs documenso | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Documenso on AltStack Directory](https://thealtstack.com/alternative-to/documenso)
|
||||
- [Documenso Self-Hosted Guide](https://thealtstack.com/self-hosted/documenso)
|
||||
- [Official Documentation](https://documenso.com)
|
||||
- [GitHub Repository](https://github.com/documenso/documenso)
|
||||
114
docs/app/deploy/dokku/page.mdx
Normal file
114
docs/app/deploy/dokku/page.mdx
Normal file
@@ -0,0 +1,114 @@
|
||||
---
|
||||
title: "Deploy Dokku Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Dokku with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Dokku
|
||||
|
||||
A docker-powered PaaS that helps you build and manage the lifecycle of applications
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 31.9k stars</span>
|
||||
<span className="deploy-hero-item">📜 MIT License</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Dokku instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Dokku and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
dokku:
|
||||
image: dokku/dokku:latest
|
||||
container_name: dokku
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
- "22:22"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/dokku && cd /opt/dokku
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs dokku | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Dokku on AltStack Directory](https://thealtstack.com/alternative-to/dokku)
|
||||
- [Dokku Self-Hosted Guide](https://thealtstack.com/self-hosted/dokku)
|
||||
- [Official Documentation](https://dokku.com)
|
||||
- [GitHub Repository](https://github.com/dokku/dokku)
|
||||
112
docs/app/deploy/erpnext/page.mdx
Normal file
112
docs/app/deploy/erpnext/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy ERPNext Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting ERPNext with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy ERPNext
|
||||
|
||||
A free and open-source integrated Enterprise Resource Planning (ERP) software.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 31.6k stars</span>
|
||||
<span className="deploy-hero-item">📜 GNU General Public License v3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working ERPNext instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for ERPNext and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
erpnext:
|
||||
image: frappe/erpnext-worker:latest
|
||||
container_name: erpnext
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8000:8000"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/erpnext && cd /opt/erpnext
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs erpnext | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [ERPNext on AltStack Directory](https://thealtstack.com/alternative-to/erpnext)
|
||||
- [ERPNext Self-Hosted Guide](https://thealtstack.com/self-hosted/erpnext)
|
||||
- [Official Documentation](https://erpnext.com)
|
||||
- [GitHub Repository](https://github.com/frappe/erpnext)
|
||||
112
docs/app/deploy/flux/page.mdx
Normal file
112
docs/app/deploy/flux/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy FLUX Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting FLUX with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy FLUX
|
||||
|
||||
Next-gen open image generation model from Black Forest Labs. State-of-the-art quality rivaling Midjourney.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 20.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Apache License 2.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working FLUX instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for FLUX and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
flux:
|
||||
image: blackforestlabs/flux:latest
|
||||
container_name: flux
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8000:8000"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/flux && cd /opt/flux
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs flux | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [FLUX on AltStack Directory](https://thealtstack.com/alternative-to/flux)
|
||||
- [FLUX Self-Hosted Guide](https://thealtstack.com/self-hosted/flux)
|
||||
- [Official Documentation](https://blackforestlabs.ai)
|
||||
- [GitHub Repository](https://github.com/black-forest-labs/flux)
|
||||
112
docs/app/deploy/freecad/page.mdx
Normal file
112
docs/app/deploy/freecad/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy FreeCAD Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting FreeCAD with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy FreeCAD
|
||||
|
||||
A general-purpose parametric 3D CAD modeler and a BIM software application.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 21.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 LGPLv2+</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working FreeCAD instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for FreeCAD and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
freecad:
|
||||
image: lscr.io/linuxserver/freecad:latest
|
||||
container_name: freecad
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/freecad && cd /opt/freecad
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs freecad | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [FreeCAD on AltStack Directory](https://thealtstack.com/alternative-to/freecad)
|
||||
- [FreeCAD Self-Hosted Guide](https://thealtstack.com/self-hosted/freecad)
|
||||
- [Official Documentation](https://www.freecad.org)
|
||||
- [GitHub Repository](https://github.com/FreeCAD/FreeCAD)
|
||||
117
docs/app/deploy/gemma/page.mdx
Normal file
117
docs/app/deploy/gemma/page.mdx
Normal file
@@ -0,0 +1,117 @@
|
||||
---
|
||||
title: "Deploy Google Gemma 2 Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Google Gemma 2 with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Google Gemma 2
|
||||
|
||||
Google's open-weight models (9B, 27B) with class-leading performance and efficient architecture.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 20.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Gemma License</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Google Gemma 2 instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Google Gemma 2 and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
ollama-gemma:
|
||||
image: ollama/ollama:latest
|
||||
container_name: ollama-gemma
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "11437:11434"
|
||||
volumes:
|
||||
- ollama_gemma:/root/.ollama
|
||||
|
||||
volumes:
|
||||
ollama_gemma:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/gemma && cd /opt/gemma
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs gemma | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Google Gemma 2 on AltStack Directory](https://thealtstack.com/alternative-to/gemma)
|
||||
- [Google Gemma 2 Self-Hosted Guide](https://thealtstack.com/self-hosted/gemma)
|
||||
- [Official Documentation](https://ai.google.dev/gemma)
|
||||
- [GitHub Repository](https://github.com/google/gemma-2)
|
||||
121
docs/app/deploy/gimp/page.mdx
Normal file
121
docs/app/deploy/gimp/page.mdx
Normal file
@@ -0,0 +1,121 @@
|
||||
---
|
||||
title: "Deploy GIMP Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting GIMP with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy GIMP
|
||||
|
||||
Read-only mirror of https://gitlab.gnome.org/GNOME/gimp
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 6.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Other</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working GIMP instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for GIMP and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
gimp:
|
||||
image: linuxserver/gimp:latest
|
||||
container_name: gimp
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/gimp && cd /opt/gimp
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `PUID` | `1000` | No |
|
||||
| `PGID` | `1000` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs gimp | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [GIMP on AltStack Directory](https://thealtstack.com/alternative-to/gimp)
|
||||
- [GIMP Self-Hosted Guide](https://thealtstack.com/self-hosted/gimp)
|
||||
- [Official Documentation](https://www.gimp.org)
|
||||
- [GitHub Repository](https://github.com/GNOME/gimp)
|
||||
150
docs/app/deploy/glitchtip/page.mdx
Normal file
150
docs/app/deploy/glitchtip/page.mdx
Normal file
@@ -0,0 +1,150 @@
|
||||
---
|
||||
title: "Deploy GlitchTip Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting GlitchTip with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy GlitchTip
|
||||
|
||||
Open source error tracking that's compatible with Sentry SDKs.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 3.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 MIT</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working GlitchTip instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for GlitchTip and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
glitchtip:
|
||||
image: glitchtip/glitchtip:latest
|
||||
container_name: glitchtip
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
ports:
|
||||
- "8000:8000"
|
||||
environment:
|
||||
- DATABASE_URL=postgres://glitchtip:glitchtip@db:5432/glitchtip
|
||||
- REDIS_URL=redis://redis:6379
|
||||
- SECRET_KEY=change_me_to_something_random
|
||||
- PORT=8000
|
||||
|
||||
db:
|
||||
image: postgres:14
|
||||
container_name: glitchtip-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_USER=glitchtip
|
||||
- POSTGRES_PASSWORD=glitchtip
|
||||
- POSTGRES_DB=glitchtip
|
||||
volumes:
|
||||
- glitchtip_db_data:/var/lib/postgresql/data
|
||||
|
||||
redis:
|
||||
image: redis:alpine
|
||||
container_name: glitchtip-redis
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
glitchtip_db_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/glitchtip && cd /opt/glitchtip
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `DATABASE_URL` | `postgres://glitchtip:glitchtip@db:5432/glitchtip` | No |
|
||||
| `REDIS_URL` | `redis://redis:6379` | No |
|
||||
| `SECRET_KEY` | `change_me_to_something_random` | No |
|
||||
| `PORT` | `8000` | No |
|
||||
| `POSTGRES_USER` | `glitchtip` | No |
|
||||
| `POSTGRES_PASSWORD` | `glitchtip` | No |
|
||||
| `POSTGRES_DB` | `glitchtip` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs glitchtip | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [GlitchTip on AltStack Directory](https://thealtstack.com/alternative-to/glitchtip)
|
||||
- [GlitchTip Self-Hosted Guide](https://thealtstack.com/self-hosted/glitchtip)
|
||||
- [Official Documentation](https://glitchtip.com)
|
||||
- [GitHub Repository](https://github.com/glitchtip/glitchtip)
|
||||
132
docs/app/deploy/gpt4all/page.mdx
Normal file
132
docs/app/deploy/gpt4all/page.mdx
Normal file
@@ -0,0 +1,132 @@
|
||||
---
|
||||
title: "Deploy GPT4All Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting GPT4All with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy GPT4All
|
||||
|
||||
Run open-source LLMs locally on your CPU and GPU. No internet required.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 65.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Apache License 2.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working GPT4All instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for GPT4All and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
# Docker Compose for GPT4All
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
gpt4all:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
container_name: gpt4all-server
|
||||
ports:
|
||||
- "4891:4891"
|
||||
volumes:
|
||||
- gpt4all_models:/app/models
|
||||
networks:
|
||||
- gpt4all_net
|
||||
healthcheck:
|
||||
test: [ "CMD", "curl", "-f", "http://localhost:4891/v1/models" ] # GPT4All local API endpoint
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
restart: unless-stopped
|
||||
|
||||
networks:
|
||||
gpt4all_net:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
gpt4all_models:
|
||||
name: gpt4all_models
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/gpt4all && cd /opt/gpt4all
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs gpt4all | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [GPT4All on AltStack Directory](https://thealtstack.com/alternative-to/gpt4all)
|
||||
- [GPT4All Self-Hosted Guide](https://thealtstack.com/self-hosted/gpt4all)
|
||||
- [Official Documentation](https://gpt4all.io)
|
||||
- [GitHub Repository](https://github.com/nomic-ai/gpt4all)
|
||||
112
docs/app/deploy/hunyuan-video/page.mdx
Normal file
112
docs/app/deploy/hunyuan-video/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy HunyuanVideo 1.5 Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting HunyuanVideo 1.5 with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy HunyuanVideo 1.5
|
||||
|
||||
Tencent's state-of-the-art open-source video generation model with 13B parameters.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 8.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Apache License 2.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working HunyuanVideo 1.5 instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for HunyuanVideo 1.5 and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
hunyuan:
|
||||
image: tencent/hunyuan:latest
|
||||
container_name: hunyuan
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8000:8000"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/hunyuan-video && cd /opt/hunyuan-video
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs hunyuan-video | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [HunyuanVideo 1.5 on AltStack Directory](https://thealtstack.com/alternative-to/hunyuan-video)
|
||||
- [HunyuanVideo 1.5 Self-Hosted Guide](https://thealtstack.com/self-hosted/hunyuan-video)
|
||||
- [Official Documentation](https://github.com/Tencent/HunyuanVideo)
|
||||
- [GitHub Repository](https://github.com/Tencent/HunyuanVideo)
|
||||
122
docs/app/deploy/jitsi-meet/page.mdx
Normal file
122
docs/app/deploy/jitsi-meet/page.mdx
Normal file
@@ -0,0 +1,122 @@
|
||||
---
|
||||
title: "Deploy Jitsi Meet Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Jitsi Meet with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Jitsi Meet
|
||||
|
||||
Jitsi Meet - Secure, Simple and Scalable Video Conferences that you use as a standalone app or embed in your web application.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 28.6k stars</span>
|
||||
<span className="deploy-hero-item">📜 Apache License 2.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Jitsi Meet instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Jitsi Meet and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
jitsi-web:
|
||||
image: jitsi/web:latest
|
||||
container_name: jitsi-web
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8000:80"
|
||||
- "8443:443"
|
||||
environment:
|
||||
- PUBLIC_URL=https://localhost:8443
|
||||
- XMPP_SERVER=xmpp.meet.jitsi
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/jitsi-meet && cd /opt/jitsi-meet
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `PUBLIC_URL` | `https://localhost:8443` | No |
|
||||
| `XMPP_SERVER` | `xmpp.meet.jitsi` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs jitsi-meet | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Jitsi Meet on AltStack Directory](https://thealtstack.com/alternative-to/jitsi-meet)
|
||||
- [Jitsi Meet Self-Hosted Guide](https://thealtstack.com/self-hosted/jitsi-meet)
|
||||
- [Official Documentation](https://jitsi.org)
|
||||
- [GitHub Repository](https://github.com/jitsi/jitsi-meet)
|
||||
112
docs/app/deploy/jitsu/page.mdx
Normal file
112
docs/app/deploy/jitsu/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy Jitsu Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Jitsu with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Jitsu
|
||||
|
||||
High-performance data collection platform and open-source Segment alternative.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 5.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 MIT</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Jitsu instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Jitsu and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
jitsu:
|
||||
image: jitsu/jitsu:latest
|
||||
container_name: jitsu
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8000:8000"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/jitsu && cd /opt/jitsu
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs jitsu | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Jitsu on AltStack Directory](https://thealtstack.com/alternative-to/jitsu)
|
||||
- [Jitsu Self-Hosted Guide](https://thealtstack.com/self-hosted/jitsu)
|
||||
- [Official Documentation](https://jitsu.com)
|
||||
- [GitHub Repository](https://github.com/jitsucom/jitsu)
|
||||
112
docs/app/deploy/kdenlive/page.mdx
Normal file
112
docs/app/deploy/kdenlive/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy Kdenlive Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Kdenlive with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Kdenlive
|
||||
|
||||
Open source video editing software based on the MLT Framework and KDE.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 3.5k stars</span>
|
||||
<span className="deploy-hero-item">📜 GPL-3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Kdenlive instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Kdenlive and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
kdenlive:
|
||||
image: lscr.io/linuxserver/kdenlive:latest
|
||||
container_name: kdenlive
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/kdenlive && cd /opt/kdenlive
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs kdenlive | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Kdenlive on AltStack Directory](https://thealtstack.com/alternative-to/kdenlive)
|
||||
- [Kdenlive Self-Hosted Guide](https://thealtstack.com/self-hosted/kdenlive)
|
||||
- [Official Documentation](https://kdenlive.org)
|
||||
- [GitHub Repository](https://github.com/KDE/kdenlive)
|
||||
112
docs/app/deploy/keepassxc/page.mdx
Normal file
112
docs/app/deploy/keepassxc/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy KeePassXC Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting KeePassXC with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy KeePassXC
|
||||
|
||||
KeePassXC is a cross-platform community-driven port of the Windows application “KeePass Password Safe”.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 25.8k stars</span>
|
||||
<span className="deploy-hero-item">📜 Other</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working KeePassXC instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for KeePassXC and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
keepassxc:
|
||||
image: jlesage/keepassxc:latest
|
||||
container_name: keepassxc
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "5800:5800"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/keepassxc && cd /opt/keepassxc
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs keepassxc | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [KeePassXC on AltStack Directory](https://thealtstack.com/alternative-to/keepassxc)
|
||||
- [KeePassXC Self-Hosted Guide](https://thealtstack.com/self-hosted/keepassxc)
|
||||
- [Official Documentation](https://keepassxc.org)
|
||||
- [GitHub Repository](https://github.com/keepassxreboot/keepassxc)
|
||||
149
docs/app/deploy/keycloak/page.mdx
Normal file
149
docs/app/deploy/keycloak/page.mdx
Normal file
@@ -0,0 +1,149 @@
|
||||
---
|
||||
title: "Deploy Keycloak Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Keycloak with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Keycloak
|
||||
|
||||
Open source identity and access management for modern applications and services.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 23.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Apache 2.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Keycloak instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Keycloak and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
keycloak:
|
||||
image: quay.io/keycloak/keycloak:latest
|
||||
container_name: keycloak
|
||||
restart: unless-stopped
|
||||
command: start-dev
|
||||
depends_on:
|
||||
- db
|
||||
ports:
|
||||
- "8080:8080"
|
||||
environment:
|
||||
- KEYCLOAK_ADMIN=admin
|
||||
- KEYCLOAK_ADMIN_PASSWORD=admin
|
||||
- KC_DB=postgres
|
||||
- KC_DB_URL=jdbc:postgresql://db:5432/keycloak
|
||||
- KC_DB_USERNAME=keycloak
|
||||
- KC_DB_PASSWORD=keycloak
|
||||
|
||||
db:
|
||||
image: postgres:15-alpine
|
||||
container_name: keycloak-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_DB=keycloak
|
||||
- POSTGRES_USER=keycloak
|
||||
- POSTGRES_PASSWORD=keycloak
|
||||
volumes:
|
||||
- keycloak_db_data:/var/lib/postgresql/data
|
||||
|
||||
volumes:
|
||||
keycloak_db_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/keycloak && cd /opt/keycloak
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `KEYCLOAK_ADMIN` | `admin` | No |
|
||||
| `KEYCLOAK_ADMIN_PASSWORD` | `admin` | No |
|
||||
| `KC_DB` | `postgres` | No |
|
||||
| `KC_DB_URL` | `jdbc:postgresql://db:5432/keycloak` | No |
|
||||
| `KC_DB_USERNAME` | `keycloak` | No |
|
||||
| `KC_DB_PASSWORD` | `keycloak` | No |
|
||||
| `POSTGRES_DB` | `keycloak` | No |
|
||||
| `POSTGRES_USER` | `keycloak` | No |
|
||||
| `POSTGRES_PASSWORD` | `keycloak` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs keycloak | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Keycloak on AltStack Directory](https://thealtstack.com/alternative-to/keycloak)
|
||||
- [Keycloak Self-Hosted Guide](https://thealtstack.com/self-hosted/keycloak)
|
||||
- [Official Documentation](https://www.keycloak.org)
|
||||
- [GitHub Repository](https://github.com/keycloak/keycloak)
|
||||
112
docs/app/deploy/krita/page.mdx
Normal file
112
docs/app/deploy/krita/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy Krita Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Krita with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Krita
|
||||
|
||||
Krita is a free and open source cross-platform application that offers an end-to-end solution for creating digital art files from scratch built on the KDE and Qt frameworks.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 9.3k stars</span>
|
||||
<span className="deploy-hero-item">📜 GNU General Public License v3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Krita instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Krita and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
krita:
|
||||
image: linuxserver/krita:latest
|
||||
container_name: krita
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/krita && cd /opt/krita
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs krita | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Krita on AltStack Directory](https://thealtstack.com/alternative-to/krita)
|
||||
- [Krita Self-Hosted Guide](https://thealtstack.com/self-hosted/krita)
|
||||
- [Official Documentation](https://krita.org)
|
||||
- [GitHub Repository](https://github.com/KDE/krita)
|
||||
112
docs/app/deploy/librecad/page.mdx
Normal file
112
docs/app/deploy/librecad/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy LibreCAD Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting LibreCAD with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy LibreCAD
|
||||
|
||||
A mature, feature-rich 2D CAD application with a loyal user community.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 6.5k stars</span>
|
||||
<span className="deploy-hero-item">📜 GPLv2</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working LibreCAD instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for LibreCAD and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
librecad:
|
||||
image: lscr.io/linuxserver/librecad:latest
|
||||
container_name: librecad
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/librecad && cd /opt/librecad
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs librecad | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [LibreCAD on AltStack Directory](https://thealtstack.com/alternative-to/librecad)
|
||||
- [LibreCAD Self-Hosted Guide](https://thealtstack.com/self-hosted/librecad)
|
||||
- [Official Documentation](https://librecad.org)
|
||||
- [GitHub Repository](https://github.com/LibreCAD/LibreCAD)
|
||||
138
docs/app/deploy/listmonk/page.mdx
Normal file
138
docs/app/deploy/listmonk/page.mdx
Normal file
@@ -0,0 +1,138 @@
|
||||
---
|
||||
title: "Deploy Listmonk Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Listmonk with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Listmonk
|
||||
|
||||
High performance, self-hosted newsletter and mailing list manager with a modern dashboard.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 19.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 AGPL-3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Listmonk instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Listmonk and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
listmonk:
|
||||
image: listmonk/listmonk:latest
|
||||
container_name: listmonk
|
||||
restart: unless-stopped
|
||||
command: sh -c './listmonk --install --yes --idempotent && ./listmonk'
|
||||
depends_on:
|
||||
- listmonk-db
|
||||
ports:
|
||||
- "9000:9000"
|
||||
volumes:
|
||||
- ./config.toml:/listmonk/config.toml
|
||||
|
||||
listmonk-db:
|
||||
image: postgres:13-alpine
|
||||
container_name: listmonk-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_USER=listmonk
|
||||
- POSTGRES_PASSWORD=listmonk
|
||||
- POSTGRES_DB=listmonk
|
||||
volumes:
|
||||
- listmonk_db_data:/var/lib/postgresql/data
|
||||
|
||||
volumes:
|
||||
listmonk_db_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/listmonk && cd /opt/listmonk
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `POSTGRES_USER` | `listmonk` | No |
|
||||
| `POSTGRES_PASSWORD` | `listmonk` | No |
|
||||
| `POSTGRES_DB` | `listmonk` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs listmonk | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Listmonk on AltStack Directory](https://thealtstack.com/alternative-to/listmonk)
|
||||
- [Listmonk Self-Hosted Guide](https://thealtstack.com/self-hosted/listmonk)
|
||||
- [Official Documentation](https://listmonk.app)
|
||||
- [GitHub Repository](https://github.com/knadh/listmonk)
|
||||
118
docs/app/deploy/llama/page.mdx
Normal file
118
docs/app/deploy/llama/page.mdx
Normal file
@@ -0,0 +1,118 @@
|
||||
---
|
||||
title: "Deploy Meta Llama 3.1 Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Meta Llama 3.1 with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Meta Llama 3.1
|
||||
|
||||
Meta's flagship open-weight model with 128K context. Supports 8B, 70B, and 405B parameters.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 65.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Llama 3.1 Community License</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Meta Llama 3.1 instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Meta Llama 3.1 and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
ollama-llama:
|
||||
image: ollama/ollama:latest
|
||||
container_name: ollama-llama
|
||||
restart: unless-stopped
|
||||
command: serve
|
||||
ports:
|
||||
- "11434:11434"
|
||||
volumes:
|
||||
- ollama:/root/.ollama
|
||||
|
||||
volumes:
|
||||
ollama:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/llama && cd /opt/llama
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs llama | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Meta Llama 3.1 on AltStack Directory](https://thealtstack.com/alternative-to/llama)
|
||||
- [Meta Llama 3.1 Self-Hosted Guide](https://thealtstack.com/self-hosted/llama)
|
||||
- [Official Documentation](https://llama.meta.com)
|
||||
- [GitHub Repository](https://github.com/meta-llama/llama3)
|
||||
119
docs/app/deploy/matomo/page.mdx
Normal file
119
docs/app/deploy/matomo/page.mdx
Normal file
@@ -0,0 +1,119 @@
|
||||
---
|
||||
title: "Deploy Matomo Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Matomo with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Matomo
|
||||
|
||||
Empowering People Ethically 🚀 — Matomo is hiring! Join us → https://matomo.org/jobs Matomo is the leading open-source alternative to Google Analytics, giving you complete control and built-in privacy. Easily collect, visualise, and analyse data from websites & apps. Star us on GitHub ⭐️ – Pull Requests welcome!
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 21.3k stars</span>
|
||||
<span className="deploy-hero-item">📜 GNU General Public License v3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Matomo instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Matomo and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
matomo:
|
||||
image: matomo:latest
|
||||
container_name: matomo
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8080:80"
|
||||
environment:
|
||||
- MATOMO_DATABASE_HOST=db
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/matomo && cd /opt/matomo
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `MATOMO_DATABASE_HOST` | `db` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs matomo | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Matomo on AltStack Directory](https://thealtstack.com/alternative-to/matomo)
|
||||
- [Matomo Self-Hosted Guide](https://thealtstack.com/self-hosted/matomo)
|
||||
- [Official Documentation](https://matomo.org)
|
||||
- [GitHub Repository](https://github.com/matomo-org/matomo)
|
||||
143
docs/app/deploy/mattermost/page.mdx
Normal file
143
docs/app/deploy/mattermost/page.mdx
Normal file
@@ -0,0 +1,143 @@
|
||||
---
|
||||
title: "Deploy Mattermost Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Mattermost with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Mattermost
|
||||
|
||||
Mattermost is an open source platform for secure collaboration across the entire software development lifecycle..
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 35.2k stars</span>
|
||||
<span className="deploy-hero-item">📜 Other</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Mattermost instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Mattermost and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
mattermost:
|
||||
image: mattermost/mattermost-team-edition:latest
|
||||
container_name: mattermost
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
ports:
|
||||
- "8065:8065"
|
||||
environment:
|
||||
- MM_SQLSETTINGS_DRIVERNAME=postgres
|
||||
- MM_SQLSETTINGS_DATASOURCE=postgres://mmuser:mmuser_password@db:5432/mattermost?sslmode=disable&connect_timeout=10
|
||||
- MM_SERVICESETTINGS_SITEURL=http://localhost:8065
|
||||
volumes:
|
||||
- ./volumes/app/config:/mattermost/config
|
||||
- ./volumes/app/data:/mattermost/data
|
||||
- ./volumes/app/logs:/mattermost/logs
|
||||
|
||||
db:
|
||||
image: postgres:13-alpine
|
||||
container_name: mattermost-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_USER=mmuser
|
||||
- POSTGRES_PASSWORD=mmuser_password
|
||||
- POSTGRES_DB=mattermost
|
||||
volumes:
|
||||
- ./volumes/db/var/lib/postgresql/data:/var/lib/postgresql/data
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/mattermost && cd /opt/mattermost
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `MM_SQLSETTINGS_DRIVERNAME` | `postgres` | No |
|
||||
| `MM_SQLSETTINGS_DATASOURCE` | `postgres://mmuser:mmuser_password@db:5432/mattermost?sslmode=disable&connect_timeout=10` | No |
|
||||
| `MM_SERVICESETTINGS_SITEURL` | `http://localhost:8065` | No |
|
||||
| `POSTGRES_USER` | `mmuser` | No |
|
||||
| `POSTGRES_PASSWORD` | `mmuser_password` | No |
|
||||
| `POSTGRES_DB` | `mattermost` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs mattermost | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Mattermost on AltStack Directory](https://thealtstack.com/alternative-to/mattermost)
|
||||
- [Mattermost Self-Hosted Guide](https://thealtstack.com/self-hosted/mattermost)
|
||||
- [Official Documentation](https://mattermost.com)
|
||||
- [GitHub Repository](https://github.com/mattermost/mattermost)
|
||||
153
docs/app/deploy/mautic/page.mdx
Normal file
153
docs/app/deploy/mautic/page.mdx
Normal file
@@ -0,0 +1,153 @@
|
||||
---
|
||||
title: "Deploy Mautic Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Mautic with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Mautic
|
||||
|
||||
World's largest open source marketing automation project.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 7.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 GPL-3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Mautic instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Mautic and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
mautic:
|
||||
image: mautic/mautic:latest
|
||||
container_name: mautic
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
ports:
|
||||
- "8080:80"
|
||||
environment:
|
||||
- MAUTIC_DB_HOST=db
|
||||
- MAUTIC_DB_USER=mautic
|
||||
- MAUTIC_DB_PASSWORD=mautic
|
||||
- MAUTIC_DB_NAME=mautic
|
||||
- MAUTIC_RUN_CRON_JOBS=true
|
||||
volumes:
|
||||
- mautic_data:/var/www/html
|
||||
|
||||
db:
|
||||
image: mysql:5.7
|
||||
container_name: mautic-db
|
||||
restart: unless-stopped
|
||||
command: --default-authentication-plugin=mysql_native_password
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=root
|
||||
- MYSQL_USER=mautic
|
||||
- MYSQL_PASSWORD=mautic
|
||||
- MYSQL_DATABASE=mautic
|
||||
volumes:
|
||||
- mautic_db_data:/var/lib/mysql
|
||||
|
||||
volumes:
|
||||
mautic_data:
|
||||
mautic_db_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/mautic && cd /opt/mautic
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `MAUTIC_DB_HOST` | `db` | No |
|
||||
| `MAUTIC_DB_USER` | `mautic` | No |
|
||||
| `MAUTIC_DB_PASSWORD` | `mautic` | No |
|
||||
| `MAUTIC_DB_NAME` | `mautic` | No |
|
||||
| `MAUTIC_RUN_CRON_JOBS` | `true` | No |
|
||||
| `plugin` | `mysql_native_password` | No |
|
||||
| `MYSQL_ROOT_PASSWORD` | `root` | No |
|
||||
| `MYSQL_USER` | `mautic` | No |
|
||||
| `MYSQL_PASSWORD` | `mautic` | No |
|
||||
| `MYSQL_DATABASE` | `mautic` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs mautic | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Mautic on AltStack Directory](https://thealtstack.com/alternative-to/mautic)
|
||||
- [Mautic Self-Hosted Guide](https://thealtstack.com/self-hosted/mautic)
|
||||
- [Official Documentation](https://www.mautic.org)
|
||||
- [GitHub Repository](https://github.com/mautic/mautic)
|
||||
150
docs/app/deploy/medusa/page.mdx
Normal file
150
docs/app/deploy/medusa/page.mdx
Normal file
@@ -0,0 +1,150 @@
|
||||
---
|
||||
title: "Deploy Medusa.js Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Medusa.js with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Medusa.js
|
||||
|
||||
The open-source alternative to Shopify. Building blocks for digital commerce.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 24.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 MIT</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Medusa.js instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Medusa.js and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
medusa:
|
||||
image: medusajs/medusa:latest
|
||||
container_name: medusa
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
ports:
|
||||
- "9000:9000"
|
||||
environment:
|
||||
- DATABASE_URL=postgres://medusa:medusa@db:5432/medusa
|
||||
- REDIS_URL=redis://redis:6379
|
||||
- JWT_SECRET=supersecret
|
||||
- COOKIE_SECRET=supersecret
|
||||
|
||||
db:
|
||||
image: postgres:15-alpine
|
||||
container_name: medusa-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_USER=medusa
|
||||
- POSTGRES_PASSWORD=medusa
|
||||
- POSTGRES_DB=medusa
|
||||
volumes:
|
||||
- medusa_db_data:/var/lib/postgresql/data
|
||||
|
||||
redis:
|
||||
image: redis:alpine
|
||||
container_name: medusa-redis
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
medusa_db_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/medusa && cd /opt/medusa
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `DATABASE_URL` | `postgres://medusa:medusa@db:5432/medusa` | No |
|
||||
| `REDIS_URL` | `redis://redis:6379` | No |
|
||||
| `JWT_SECRET` | `supersecret` | No |
|
||||
| `COOKIE_SECRET` | `supersecret` | No |
|
||||
| `POSTGRES_USER` | `medusa` | No |
|
||||
| `POSTGRES_PASSWORD` | `medusa` | No |
|
||||
| `POSTGRES_DB` | `medusa` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs medusa | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Medusa.js on AltStack Directory](https://thealtstack.com/alternative-to/medusa)
|
||||
- [Medusa.js Self-Hosted Guide](https://thealtstack.com/self-hosted/medusa)
|
||||
- [Official Documentation](https://medusajs.com)
|
||||
- [GitHub Repository](https://github.com/medusajs/medusa)
|
||||
148
docs/app/deploy/metabase/page.mdx
Normal file
148
docs/app/deploy/metabase/page.mdx
Normal file
@@ -0,0 +1,148 @@
|
||||
---
|
||||
title: "Deploy Metabase Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Metabase with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Metabase
|
||||
|
||||
The simplest, fastest way to get business intelligence and analytics throughout your company.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 38.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 AGPLv3</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Metabase instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Metabase and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
metabase:
|
||||
image: metabase/metabase:latest
|
||||
container_name: metabase
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
- MB_DB_TYPE=postgres
|
||||
- MB_DB_DBNAME=metabase
|
||||
- MB_DB_PORT=5432
|
||||
- MB_DB_USER=metabase
|
||||
- MB_DB_PASS=metabase
|
||||
- MB_DB_HOST=db
|
||||
|
||||
db:
|
||||
image: postgres:14-alpine
|
||||
container_name: metabase-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_USER=metabase
|
||||
- POSTGRES_PASSWORD=metabase
|
||||
- POSTGRES_DB=metabase
|
||||
volumes:
|
||||
- metabase_db_data:/var/lib/postgresql/data
|
||||
|
||||
volumes:
|
||||
metabase_db_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/metabase && cd /opt/metabase
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `MB_DB_TYPE` | `postgres` | No |
|
||||
| `MB_DB_DBNAME` | `metabase` | No |
|
||||
| `MB_DB_PORT` | `5432` | No |
|
||||
| `MB_DB_USER` | `metabase` | No |
|
||||
| `MB_DB_PASS` | `metabase` | No |
|
||||
| `MB_DB_HOST` | `db` | No |
|
||||
| `POSTGRES_USER` | `metabase` | No |
|
||||
| `POSTGRES_PASSWORD` | `metabase` | No |
|
||||
| `POSTGRES_DB` | `metabase` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs metabase | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Metabase on AltStack Directory](https://thealtstack.com/alternative-to/metabase)
|
||||
- [Metabase Self-Hosted Guide](https://thealtstack.com/self-hosted/metabase)
|
||||
- [Official Documentation](https://www.metabase.com)
|
||||
- [GitHub Repository](https://github.com/metabase/metabase)
|
||||
128
docs/app/deploy/minio/page.mdx
Normal file
128
docs/app/deploy/minio/page.mdx
Normal file
@@ -0,0 +1,128 @@
|
||||
---
|
||||
title: "Deploy MinIO Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting MinIO with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy MinIO
|
||||
|
||||
High-performance, S3-compatible object storage for AI and enterprise data.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 45.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 AGPLv3</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working MinIO instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for MinIO and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
minio:
|
||||
image: minio/minio:latest
|
||||
container_name: minio
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9000:9000"
|
||||
- "9090:9090"
|
||||
command: server /data --console-address ":9090"
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- minio_data:/data
|
||||
|
||||
volumes:
|
||||
minio_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/minio && cd /opt/minio
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `MINIO_ROOT_USER` | `minioadmin` | No |
|
||||
| `MINIO_ROOT_PASSWORD` | `minioadmin` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs minio | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [MinIO on AltStack Directory](https://thealtstack.com/alternative-to/minio)
|
||||
- [MinIO Self-Hosted Guide](https://thealtstack.com/self-hosted/minio)
|
||||
- [Official Documentation](https://min.io)
|
||||
- [GitHub Repository](https://github.com/minio/minio)
|
||||
117
docs/app/deploy/mistral/page.mdx
Normal file
117
docs/app/deploy/mistral/page.mdx
Normal file
@@ -0,0 +1,117 @@
|
||||
---
|
||||
title: "Deploy Mistral Large 2 Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Mistral Large 2 with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Mistral Large 2
|
||||
|
||||
Flagship 123B model from Mistral AI. Optimized for multilingual, reasoning, and coding tasks.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 20.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Mistral Research License</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Mistral Large 2 instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Mistral Large 2 and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
ollama-mistral:
|
||||
image: ollama/ollama:latest
|
||||
container_name: ollama-mistral
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "11436:11434"
|
||||
volumes:
|
||||
- ollama_mistral:/root/.ollama
|
||||
|
||||
volumes:
|
||||
ollama_mistral:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/mistral && cd /opt/mistral
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs mistral | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Mistral Large 2 on AltStack Directory](https://thealtstack.com/alternative-to/mistral)
|
||||
- [Mistral Large 2 Self-Hosted Guide](https://thealtstack.com/self-hosted/mistral)
|
||||
- [Official Documentation](https://mistral.ai)
|
||||
- [GitHub Repository](https://github.com/mistralai/mistral-inference)
|
||||
156
docs/app/deploy/mixpost/page.mdx
Normal file
156
docs/app/deploy/mixpost/page.mdx
Normal file
@@ -0,0 +1,156 @@
|
||||
---
|
||||
title: "Deploy Mixpost Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Mixpost with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Mixpost
|
||||
|
||||
Self-hosted social media management software.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 3.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Other</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Mixpost instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Mixpost and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
mixpost:
|
||||
image: inovector/mixpost:latest
|
||||
container_name: mixpost
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
ports:
|
||||
- "80:80"
|
||||
environment:
|
||||
- APP_URL=http://localhost
|
||||
- DB_HOST=db
|
||||
- DB_DATABASE=mixpost
|
||||
- DB_USERNAME=mixpost
|
||||
- DB_PASSWORD=mixpost
|
||||
- REDIS_HOST=redis
|
||||
|
||||
db:
|
||||
image: mysql:8.0
|
||||
container_name: mixpost-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- MYSQL_DATABASE=mixpost
|
||||
- MYSQL_USER=mixpost
|
||||
- MYSQL_PASSWORD=mixpost
|
||||
- MYSQL_ROOT_PASSWORD=root
|
||||
volumes:
|
||||
- mixpost_db_data:/var/lib/mysql
|
||||
|
||||
redis:
|
||||
image: redis:alpine
|
||||
container_name: mixpost-redis
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
mixpost_db_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/mixpost && cd /opt/mixpost
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `APP_URL` | `http://localhost` | No |
|
||||
| `DB_HOST` | `db` | No |
|
||||
| `DB_DATABASE` | `mixpost` | No |
|
||||
| `DB_USERNAME` | `mixpost` | No |
|
||||
| `DB_PASSWORD` | `mixpost` | No |
|
||||
| `REDIS_HOST` | `redis` | No |
|
||||
| `MYSQL_DATABASE` | `mixpost` | No |
|
||||
| `MYSQL_USER` | `mixpost` | No |
|
||||
| `MYSQL_PASSWORD` | `mixpost` | No |
|
||||
| `MYSQL_ROOT_PASSWORD` | `root` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs mixpost | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Mixpost on AltStack Directory](https://thealtstack.com/alternative-to/mixpost)
|
||||
- [Mixpost Self-Hosted Guide](https://thealtstack.com/self-hosted/mixpost)
|
||||
- [Official Documentation](https://mixpost.app)
|
||||
- [GitHub Repository](https://github.com/inovector/mixpost)
|
||||
112
docs/app/deploy/mochi-1/page.mdx
Normal file
112
docs/app/deploy/mochi-1/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy Mochi-1 Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Mochi-1 with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Mochi-1
|
||||
|
||||
High-fidelity open-weights video generation model from Genmo, rivaling closed-source alternatives.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 5.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Apache License 2.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Mochi-1 instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Mochi-1 and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
mochi-1:
|
||||
image: genmo/mochi-1:latest
|
||||
container_name: mochi-1
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8000:8000"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/mochi-1 && cd /opt/mochi-1
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs mochi-1 | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Mochi-1 on AltStack Directory](https://thealtstack.com/alternative-to/mochi-1)
|
||||
- [Mochi-1 Self-Hosted Guide](https://thealtstack.com/self-hosted/mochi-1)
|
||||
- [Official Documentation](https://www.genmo.ai)
|
||||
- [GitHub Repository](https://github.com/genmoai/mochi1)
|
||||
138
docs/app/deploy/n8n/page.mdx
Normal file
138
docs/app/deploy/n8n/page.mdx
Normal file
@@ -0,0 +1,138 @@
|
||||
---
|
||||
title: "Deploy n8n Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting n8n with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy n8n
|
||||
|
||||
Fair-code workflow automation tool. Easily automate tasks across different services.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 49.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Sustainable Use License</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working n8n instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for n8n and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
n8n:
|
||||
image: n8nio/n8n:latest
|
||||
container_name: n8n
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "5678:5678"
|
||||
environment:
|
||||
- N8N_BASIC_AUTH_ACTIVE=true
|
||||
- N8N_BASIC_AUTH_USER=admin
|
||||
- N8N_BASIC_AUTH_PASSWORD=password
|
||||
- N8N_HOST=localhost
|
||||
- N8N_PORT=5678
|
||||
- N8N_PROTOCOL=http
|
||||
- NODE_ENV=production
|
||||
- WEBHOOK_URL=http://localhost:5678/
|
||||
volumes:
|
||||
- n8n_data:/home/node/.n8n
|
||||
|
||||
volumes:
|
||||
n8n_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/n8n && cd /opt/n8n
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `N8N_BASIC_AUTH_ACTIVE` | `true` | No |
|
||||
| `N8N_BASIC_AUTH_USER` | `admin` | No |
|
||||
| `N8N_BASIC_AUTH_PASSWORD` | `password` | No |
|
||||
| `N8N_HOST` | `localhost` | No |
|
||||
| `N8N_PORT` | `5678` | No |
|
||||
| `N8N_PROTOCOL` | `http` | No |
|
||||
| `NODE_ENV` | `production` | No |
|
||||
| `WEBHOOK_URL` | `http://localhost:5678/` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs n8n | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [n8n on AltStack Directory](https://thealtstack.com/alternative-to/n8n)
|
||||
- [n8n Self-Hosted Guide](https://thealtstack.com/self-hosted/n8n)
|
||||
- [Official Documentation](https://n8n.io)
|
||||
- [GitHub Repository](https://github.com/n8n-io/n8n)
|
||||
161
docs/app/deploy/odoo/page.mdx
Normal file
161
docs/app/deploy/odoo/page.mdx
Normal file
@@ -0,0 +1,161 @@
|
||||
---
|
||||
title: "Deploy Odoo Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Odoo with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Odoo
|
||||
|
||||
A suite of open source business apps: CRM, eCommerce, accounting, manufacturing, warehouse, and more.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 48.9k stars</span>
|
||||
<span className="deploy-hero-item">📜 LGPL-3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Odoo instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Odoo and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
# Docker Compose for Odoo
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
odoo:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
container_name: odoo
|
||||
ports:
|
||||
- "8069:8069"
|
||||
environment:
|
||||
- HOST=db
|
||||
- USER=odoo
|
||||
- PASSWORD=odoo
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- odoo_net
|
||||
healthcheck:
|
||||
test: [ "CMD", "curl", "-f", "http://localhost:8069/" ]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
restart: unless-stopped
|
||||
|
||||
db:
|
||||
image: postgres:15-alpine
|
||||
container_name: odoo-db
|
||||
environment:
|
||||
POSTGRES_USER: odoo
|
||||
POSTGRES_PASSWORD: odoo
|
||||
POSTGRES_DB: postgres
|
||||
volumes:
|
||||
- odoo_db_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- odoo_net
|
||||
healthcheck:
|
||||
test: [ "CMD-SHELL", "pg_isready -U odoo" ]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
networks:
|
||||
odoo_net:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
odoo_db_data:
|
||||
name: odoo_db_data
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/odoo && cd /opt/odoo
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `HOST` | `db` | No |
|
||||
| `USER` | `odoo` | No |
|
||||
| `PASSWORD` | `odoo` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs odoo | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Odoo on AltStack Directory](https://thealtstack.com/alternative-to/odoo)
|
||||
- [Odoo Self-Hosted Guide](https://thealtstack.com/self-hosted/odoo)
|
||||
- [Official Documentation](https://www.odoo.com)
|
||||
- [GitHub Repository](https://github.com/odoo/odoo)
|
||||
137
docs/app/deploy/ollama/page.mdx
Normal file
137
docs/app/deploy/ollama/page.mdx
Normal file
@@ -0,0 +1,137 @@
|
||||
---
|
||||
title: "Deploy Ollama Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Ollama with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Ollama
|
||||
|
||||
Get up and running with Llama 3, Mistral, Gemma, and other large language models locally.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 60.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 MIT License</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Ollama instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Ollama and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
# Docker Compose for Ollama
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
ollama:
|
||||
image: ollama/ollama:latest # Official image is highly recommended for GPU support
|
||||
container_name: ollama
|
||||
ports:
|
||||
- "11434:11434"
|
||||
volumes:
|
||||
- ollama_data:/root/.ollama
|
||||
# For GPU support (NVIDIA), uncomment the following:
|
||||
# deploy:
|
||||
# resources:
|
||||
# reservations:
|
||||
# devices:
|
||||
# - driver: nvidia
|
||||
# count: all
|
||||
# capabilities: [gpu]
|
||||
networks:
|
||||
- ollama_net
|
||||
healthcheck:
|
||||
test: [ "CMD", "curl", "-f", "http://localhost:11434/api/tags" ]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
networks:
|
||||
ollama_net:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
ollama_data:
|
||||
name: ollama_data
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/ollama && cd /opt/ollama
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs ollama | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Ollama on AltStack Directory](https://thealtstack.com/alternative-to/ollama)
|
||||
- [Ollama Self-Hosted Guide](https://thealtstack.com/self-hosted/ollama)
|
||||
- [Official Documentation](https://ollama.com)
|
||||
- [GitHub Repository](https://github.com/ollama/ollama)
|
||||
112
docs/app/deploy/onlyoffice/page.mdx
Normal file
112
docs/app/deploy/onlyoffice/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy ONLYOFFICE Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting ONLYOFFICE with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy ONLYOFFICE
|
||||
|
||||
Powerful online document editors for text, spreadsheets, and presentations. Highly compatible with MS Office.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 11.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 AGPLv3</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working ONLYOFFICE instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for ONLYOFFICE and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
onlyoffice:
|
||||
image: onlyoffice/documentserver:latest
|
||||
container_name: onlyoffice
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8080:80"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/onlyoffice && cd /opt/onlyoffice
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs onlyoffice | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [ONLYOFFICE on AltStack Directory](https://thealtstack.com/alternative-to/onlyoffice)
|
||||
- [ONLYOFFICE Self-Hosted Guide](https://thealtstack.com/self-hosted/onlyoffice)
|
||||
- [Official Documentation](https://www.onlyoffice.com)
|
||||
- [GitHub Repository](https://github.com/ONLYOFFICE/DocumentServer)
|
||||
146
docs/app/deploy/orangehrm/page.mdx
Normal file
146
docs/app/deploy/orangehrm/page.mdx
Normal file
@@ -0,0 +1,146 @@
|
||||
---
|
||||
title: "Deploy OrangeHRM Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting OrangeHRM with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy OrangeHRM
|
||||
|
||||
The world's most popular open source human resource management software.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 1.2k stars</span>
|
||||
<span className="deploy-hero-item">📜 GPLv2</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working OrangeHRM instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for OrangeHRM and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
orangehrm:
|
||||
image: orangehrm/orangehrm:latest
|
||||
container_name: orangehrm
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
ports:
|
||||
- "80:80"
|
||||
environment:
|
||||
- ORANGEHRM_DATABASE_HOST=db
|
||||
- ORANGEHRM_DATABASE_USER=orangehrm
|
||||
- ORANGEHRM_DATABASE_PASSWORD=orangehrm
|
||||
- ORANGEHRM_DATABASE_NAME=orangehrm
|
||||
|
||||
db:
|
||||
image: mariadb:10.6
|
||||
container_name: orangehrm-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=root
|
||||
- MYSQL_USER=orangehrm
|
||||
- MYSQL_PASSWORD=orangehrm
|
||||
- MYSQL_DATABASE=orangehrm
|
||||
volumes:
|
||||
- orangehrm_db_data:/var/lib/mysql
|
||||
|
||||
volumes:
|
||||
orangehrm_db_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/orangehrm && cd /opt/orangehrm
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `ORANGEHRM_DATABASE_HOST` | `db` | No |
|
||||
| `ORANGEHRM_DATABASE_USER` | `orangehrm` | No |
|
||||
| `ORANGEHRM_DATABASE_PASSWORD` | `orangehrm` | No |
|
||||
| `ORANGEHRM_DATABASE_NAME` | `orangehrm` | No |
|
||||
| `MYSQL_ROOT_PASSWORD` | `root` | No |
|
||||
| `MYSQL_USER` | `orangehrm` | No |
|
||||
| `MYSQL_PASSWORD` | `orangehrm` | No |
|
||||
| `MYSQL_DATABASE` | `orangehrm` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs orangehrm | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [OrangeHRM on AltStack Directory](https://thealtstack.com/alternative-to/orangehrm)
|
||||
- [OrangeHRM Self-Hosted Guide](https://thealtstack.com/self-hosted/orangehrm)
|
||||
- [Official Documentation](https://www.orangehrm.com)
|
||||
- [GitHub Repository](https://github.com/orangehrm/orangehrm)
|
||||
112
docs/app/deploy/outline/page.mdx
Normal file
112
docs/app/deploy/outline/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy Outline Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Outline with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Outline
|
||||
|
||||
Fast, collaborative, knowledge base for your team built using React and Markdown.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 24.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Other</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Outline instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Outline and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
outline:
|
||||
image: outlinewiki/outline:latest
|
||||
container_name: outline
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/outline && cd /opt/outline
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs outline | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Outline on AltStack Directory](https://thealtstack.com/alternative-to/outline)
|
||||
- [Outline Self-Hosted Guide](https://thealtstack.com/self-hosted/outline)
|
||||
- [Official Documentation](https://www.getoutline.com)
|
||||
- [GitHub Repository](https://github.com/outline/outline)
|
||||
171
docs/app/deploy/page.mdx
Normal file
171
docs/app/deploy/page.mdx
Normal file
@@ -0,0 +1,171 @@
|
||||
---
|
||||
title: "Deploy Guides"
|
||||
description: "65+ self-hosting deploy guides with Docker Compose configs. Find your tool, copy the config, ship it."
|
||||
---
|
||||
|
||||
# Deploy Guides
|
||||
|
||||
Every guide follows the same pattern: **copy the Docker Compose config, tweak the `.env`, run `docker compose up -d`.** Done.
|
||||
|
||||
> 💡 **New to self-hosting?** Start with the [Quick Start](/quick-start) guide first, then come back here.
|
||||
|
||||
---
|
||||
|
||||
## 🤖 AI & Machine Learning
|
||||
|
||||
Run AI models on your own hardware. No API keys, no usage limits, no data leaving your server.
|
||||
|
||||
| Tool | What It Does |
|
||||
|---|---|
|
||||
| [Ollama](/deploy/ollama) | Run LLMs locally with a simple CLI |
|
||||
| [DeepSeek](/deploy/deepseek) | DeepSeek-V3 / R1 reasoning models |
|
||||
| [Meta Llama](/deploy/llama) | Meta's open-weight Llama 3.1 |
|
||||
| [Mistral](/deploy/mistral) | Mistral Large 2 — fast and capable |
|
||||
| [Qwen](/deploy/qwen) | Alibaba's Qwen 2.5 models |
|
||||
| [Google Gemma](/deploy/gemma) | Google's lightweight open models |
|
||||
| [GPT4All](/deploy/gpt4all) | Desktop-first local LLM runner |
|
||||
| [Continue](/deploy/continue-dev) | AI code assistant for VS Code/JetBrains |
|
||||
| [TabbyML](/deploy/tabby) | Self-hosted GitHub Copilot alternative |
|
||||
| [Stable Diffusion](/deploy/stable-diffusion) | AI image generation (SD 3.5) |
|
||||
| [FLUX](/deploy/flux) | Next-gen image generation |
|
||||
| [HunyuanVideo](/deploy/hunyuan-video) | AI video generation |
|
||||
| [Mochi-1](/deploy/mochi-1) | Text-to-video AI |
|
||||
|
||||
---
|
||||
|
||||
## 📊 Analytics & Monitoring
|
||||
|
||||
Own your data. No more sending user behavior to Google.
|
||||
|
||||
| Tool | What It Does |
|
||||
|---|---|
|
||||
| [Plausible](/deploy/plausible) | Privacy-first web analytics |
|
||||
| [PostHog](/deploy/posthog) | Product analytics + session replay |
|
||||
| [Matomo](/deploy/matomo) | Full Google Analytics replacement |
|
||||
| [Jitsu](/deploy/jitsu) | Open-source Segment alternative |
|
||||
| [Metabase](/deploy/metabase) | Business intelligence dashboards |
|
||||
| [Apache Superset](/deploy/superset) | Enterprise data visualization |
|
||||
| [GlitchTip](/deploy/glitchtip) | Error tracking (Sentry alternative) |
|
||||
| [SigNoz](/deploy/signoz) | Full-stack observability platform |
|
||||
| [Uptime Kuma](/deploy/uptime-kuma) | Beautiful uptime monitoring |
|
||||
|
||||
---
|
||||
|
||||
## 💬 Productivity & Collaboration
|
||||
|
||||
Replace Slack, Notion, and Jira — on your terms.
|
||||
|
||||
| Tool | What It Does |
|
||||
|---|---|
|
||||
| [Mattermost](/deploy/mattermost) | Slack alternative for teams |
|
||||
| [Rocket.Chat](/deploy/rocketchat) | Team chat with omnichannel support |
|
||||
| [Outline](/deploy/outline) | Beautiful team knowledge base |
|
||||
| [AFFiNE](/deploy/affine) | Notion + Miro hybrid workspace |
|
||||
| [AppFlowy](/deploy/appflowy) | Open-source Notion alternative |
|
||||
| [ONLYOFFICE](/deploy/onlyoffice) | Self-hosted Google Docs/Sheets |
|
||||
| [Plane](/deploy/plane) | Project management (Jira alternative) |
|
||||
| [Taiga](/deploy/taiga) | Agile project management |
|
||||
| [Cal.com](/deploy/calcom) | Scheduling (Calendly alternative) |
|
||||
| [Documenso](/deploy/documenso) | Digital signatures (DocuSign alternative) |
|
||||
| [Zammad](/deploy/zammad) | Helpdesk & ticketing system |
|
||||
|
||||
---
|
||||
|
||||
## 🏢 Business & CRM
|
||||
|
||||
Run your business without SaaS subscriptions.
|
||||
|
||||
| Tool | What It Does |
|
||||
|---|---|
|
||||
| [Odoo](/deploy/odoo) | Full ERP suite (CRM, accounting, HR) |
|
||||
| [ERPNext](/deploy/erpnext) | Manufacturing & distribution ERP |
|
||||
| [Twenty](/deploy/twenty) | Modern CRM (Salesforce alternative) |
|
||||
| [Akaunting](/deploy/akaunting) | Free accounting software |
|
||||
| [OrangeHRM](/deploy/orangehrm) | HR management platform |
|
||||
| [Medusa.js](/deploy/medusa) | Headless e-commerce engine |
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Security & Authentication
|
||||
|
||||
Control who gets in. Period.
|
||||
|
||||
| Tool | What It Does |
|
||||
|---|---|
|
||||
| [Keycloak](/deploy/keycloak) | Enterprise identity & access management |
|
||||
| [Authentik](/deploy/authentik) | Modern SSO and user management |
|
||||
| [Vaultwarden](/deploy/vaultwarden) | Bitwarden-compatible password vault |
|
||||
| [Bitwarden](/deploy/bitwarden) | Official password manager server |
|
||||
| [KeePassXC](/deploy/keepassxc) | Offline password manager |
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ DevOps & Infrastructure
|
||||
|
||||
The tools that run your tools.
|
||||
|
||||
| Tool | What It Does |
|
||||
|---|---|
|
||||
| [Coolify](/deploy/coolify) | Self-hosted Vercel/Netlify |
|
||||
| [Dokku](/deploy/dokku) | Mini Heroku on your server |
|
||||
| [n8n](/deploy/n8n) | Workflow automation (Zapier alternative) |
|
||||
| [Activepieces](/deploy/activepieces) | Visual automation builder |
|
||||
| [Coder](/deploy/coder) | Cloud development environments |
|
||||
| [MinIO](/deploy/minio) | S3-compatible object storage |
|
||||
| [PocketBase](/deploy/pocketbase) | Backend in a single binary |
|
||||
| [Appwrite](/deploy/appwrite) | Firebase alternative |
|
||||
| [Supabase](/deploy/supabase) | Postgres-powered Firebase alternative |
|
||||
|
||||
---
|
||||
|
||||
## 📧 Marketing & Email
|
||||
|
||||
Send emails, run campaigns, own your audience.
|
||||
|
||||
| Tool | What It Does |
|
||||
|---|---|
|
||||
| [Listmonk](/deploy/listmonk) | Newsletter & mailing list manager |
|
||||
| [Mautic](/deploy/mautic) | Marketing automation platform |
|
||||
| [Postal](/deploy/postal) | Mail delivery platform (Mailgun alternative) |
|
||||
| [Mixpost](/deploy/mixpost) | Social media management |
|
||||
| [Chaskiq](/deploy/chaskiq) | Customer messaging platform |
|
||||
|
||||
---
|
||||
|
||||
## 🎨 Creative Tools
|
||||
|
||||
Design, edit, and create without Adobe subscriptions.
|
||||
|
||||
| Tool | What It Does |
|
||||
|---|---|
|
||||
| [Penpot](/deploy/penpot) | Design & prototyping (Figma alternative) |
|
||||
| [GIMP](/deploy/gimp) | Image editing (Photoshop alternative) |
|
||||
| [Krita](/deploy/krita) | Digital painting & illustration |
|
||||
| [Kdenlive](/deploy/kdenlive) | Video editing |
|
||||
| [FreeCAD](/deploy/freecad) | 3D parametric modeling |
|
||||
| [LibreCAD](/deploy/librecad) | 2D CAD drafting |
|
||||
|
||||
---
|
||||
|
||||
## 🔌 Communication
|
||||
|
||||
| Tool | What It Does |
|
||||
|---|---|
|
||||
| [Jitsi Meet](/deploy/jitsi-meet) | Video conferencing (Zoom alternative) |
|
||||
|
||||
---
|
||||
|
||||
## Prerequisites for All Guides
|
||||
|
||||
Every guide assumes you have:
|
||||
- A server with Docker and Docker Compose installed → [Setup Guide](/quick-start/choosing-a-server)
|
||||
- Basic terminal access (SSH)
|
||||
- A domain name (optional but recommended) → [Reverse Proxy Setup](/concepts/reverse-proxies)
|
||||
|
||||
## Essential Reading
|
||||
|
||||
Before your first deploy, read these:
|
||||
- [Docker in 10 Minutes](/concepts/docker-basics)
|
||||
- [Reverse Proxies Explained](/concepts/reverse-proxies)
|
||||
- [SSL/TLS for Self-Hosters](/concepts/ssl-tls)
|
||||
- [Backups That Actually Work](/concepts/backups)
|
||||
185
docs/app/deploy/penpot/page.mdx
Normal file
185
docs/app/deploy/penpot/page.mdx
Normal file
@@ -0,0 +1,185 @@
|
||||
---
|
||||
title: "Deploy Penpot Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Penpot with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Penpot
|
||||
|
||||
Penpot: The open-source design tool for design and code collaboration
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 44.2k stars</span>
|
||||
<span className="deploy-hero-item">📜 Mozilla Public License 2.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Penpot instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Penpot and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
penpot-frontend:
|
||||
image: penpotapp/frontend:latest
|
||||
container_name: penpot-frontend
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- penpot-backend
|
||||
- penpot-exporter
|
||||
ports:
|
||||
- "9010:80"
|
||||
environment:
|
||||
- PENPOT_FLAGS=disable-registration disable-login-with-password
|
||||
volumes:
|
||||
- penpot_assets:/opt/data/assets
|
||||
|
||||
penpot-backend:
|
||||
image: penpotapp/backend:latest
|
||||
container_name: penpot-backend
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- penpot-postgres
|
||||
- penpot-redis
|
||||
environment:
|
||||
- PENPOT_FLAGS=disable-registration disable-login-with-password
|
||||
- PENPOT_DATABASE_URI=postgresql://penpot-postgres/penpot
|
||||
- PENPOT_DATABASE_USERNAME=penpot
|
||||
- PENPOT_DATABASE_PASSWORD=penpot
|
||||
- PENPOT_REDIS_URI=redis://penpot-redis/0
|
||||
- PENPOT_ASSETS_STORAGE_BACKEND=assets-fs
|
||||
- PENPOT_STORAGE_ASSETS_FS_DIRECTORY=/opt/data/assets
|
||||
- PENPOT_TELEMETRY_ENABLED=false
|
||||
volumes:
|
||||
- penpot_assets:/opt/data/assets
|
||||
|
||||
penpot-exporter:
|
||||
image: penpotapp/exporter:latest
|
||||
container_name: penpot-exporter
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- PENPOT_DATABASE_URI=postgresql://penpot-postgres/penpot
|
||||
- PENPOT_DATABASE_USERNAME=penpot
|
||||
- PENPOT_DATABASE_PASSWORD=penpot
|
||||
- PENPOT_REDIS_URI=redis://penpot-redis/0
|
||||
|
||||
penpot-postgres:
|
||||
image: postgres:15
|
||||
container_name: penpot-postgres
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_INITDB_ARGS=--data-checksums
|
||||
- POSTGRES_DB=penpot
|
||||
- POSTGRES_USER=penpot
|
||||
- POSTGRES_PASSWORD=penpot
|
||||
volumes:
|
||||
- penpot_postgres_v15:/var/lib/postgresql/data
|
||||
|
||||
penpot-redis:
|
||||
image: redis:7
|
||||
container_name: penpot-redis
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
penpot_postgres_v15:
|
||||
penpot_assets:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/penpot && cd /opt/penpot
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `PENPOT_FLAGS` | `disable-registration disable-login-with-password` | No |
|
||||
| `PENPOT_DATABASE_URI` | `postgresql://penpot-postgres/penpot` | No |
|
||||
| `PENPOT_DATABASE_USERNAME` | `penpot` | No |
|
||||
| `PENPOT_DATABASE_PASSWORD` | `penpot` | No |
|
||||
| `PENPOT_REDIS_URI` | `redis://penpot-redis/0` | No |
|
||||
| `PENPOT_ASSETS_STORAGE_BACKEND` | `assets-fs` | No |
|
||||
| `PENPOT_STORAGE_ASSETS_FS_DIRECTORY` | `/opt/data/assets` | No |
|
||||
| `PENPOT_TELEMETRY_ENABLED` | `false` | No |
|
||||
| `POSTGRES_INITDB_ARGS` | `--data-checksums` | No |
|
||||
| `POSTGRES_DB` | `penpot` | No |
|
||||
| `POSTGRES_USER` | `penpot` | No |
|
||||
| `POSTGRES_PASSWORD` | `penpot` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs penpot | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Penpot on AltStack Directory](https://thealtstack.com/alternative-to/penpot)
|
||||
- [Penpot Self-Hosted Guide](https://thealtstack.com/self-hosted/penpot)
|
||||
- [Official Documentation](https://penpot.app)
|
||||
- [GitHub Repository](https://github.com/penpot/penpot)
|
||||
160
docs/app/deploy/plane/page.mdx
Normal file
160
docs/app/deploy/plane/page.mdx
Normal file
@@ -0,0 +1,160 @@
|
||||
---
|
||||
title: "Deploy Plane Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Plane with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Plane
|
||||
|
||||
🔥🔥🔥 Open-source Jira, Linear, Monday, and ClickUp alternative. Plane is a modern project management platform to manage tasks, sprints, docs, and triage.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 45.5k stars</span>
|
||||
<span className="deploy-hero-item">📜 GNU Affero General Public License v3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Plane instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Plane and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
plane-web:
|
||||
image: makeplane/plane-frontend:latest
|
||||
container_name: plane-frontend
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- plane-backend
|
||||
ports:
|
||||
- "3000:80"
|
||||
|
||||
plane-backend:
|
||||
image: makeplane/plane-backend:latest
|
||||
container_name: plane-backend
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- plane-db
|
||||
- plane-redis
|
||||
ports:
|
||||
- "8000:8000"
|
||||
environment:
|
||||
- DATABASE_URL=postgres://plane:plane@plane-db:5432/plane
|
||||
- REDIS_URL=redis://plane-redis:6379/
|
||||
- SECRET_KEY=replace-me-with-a-secure-key
|
||||
|
||||
plane-db:
|
||||
image: postgres:15-alpine
|
||||
container_name: plane-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_USER=plane
|
||||
- POSTGRES_PASSWORD=plane
|
||||
- POSTGRES_DB=plane
|
||||
volumes:
|
||||
- plane_db_data:/var/lib/postgresql/data
|
||||
|
||||
plane-redis:
|
||||
image: redis:7-alpine
|
||||
container_name: plane-redis
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- plane_redis_data:/data
|
||||
|
||||
volumes:
|
||||
plane_db_data:
|
||||
plane_redis_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/plane && cd /opt/plane
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `DATABASE_URL` | `postgres://plane:plane@plane-db:5432/plane` | No |
|
||||
| `REDIS_URL` | `redis://plane-redis:6379/` | No |
|
||||
| `SECRET_KEY` | `replace-me-with-a-secure-key` | No |
|
||||
| `POSTGRES_USER` | `plane` | No |
|
||||
| `POSTGRES_PASSWORD` | `plane` | No |
|
||||
| `POSTGRES_DB` | `plane` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs plane | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Plane on AltStack Directory](https://thealtstack.com/alternative-to/plane)
|
||||
- [Plane Self-Hosted Guide](https://thealtstack.com/self-hosted/plane)
|
||||
- [Official Documentation](https://plane.so)
|
||||
- [GitHub Repository](https://github.com/makeplane/plane)
|
||||
179
docs/app/deploy/plausible/page.mdx
Normal file
179
docs/app/deploy/plausible/page.mdx
Normal file
@@ -0,0 +1,179 @@
|
||||
---
|
||||
title: "Deploy Plausible Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Plausible with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Plausible
|
||||
|
||||
Simple, open source, lightweight and privacy-friendly web analytics alternative to Google Analytics.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 24.2k stars</span>
|
||||
<span className="deploy-hero-item">📜 GNU Affero General Public License v3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
A production-ready Plausible Analytics instance. Note that Plausible uses a two-database architecture:
|
||||
|
||||
- **PostgreSQL:** Stores your users, sites, and metadata.
|
||||
- **ClickHouse:** A high-performance columnar database that stores the millions of raw events (pageviews) you'll be collecting.
|
||||
|
||||
> 🌍 **Geolocation Tip:** To see where your visitors are coming from, you'll need to download the free MaxMind GeoLite2 database after deployment and place it in the `./geoip` folder.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Plausible and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
plausible:
|
||||
image: plausible/analytics:latest
|
||||
container_name: plausible
|
||||
restart: unless-stopped
|
||||
command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
|
||||
depends_on:
|
||||
- plausible_db
|
||||
- plausible_events_db
|
||||
- mail
|
||||
ports:
|
||||
- "8000:8000"
|
||||
environment:
|
||||
- BASE_URL=http://localhost:8000
|
||||
- SECRET_KEY_BASE=ChangeMeChangeMeChangeMeChangeMeChangeMeChangeMeChangeMeChangeMe
|
||||
- DATABASE_URL=postgres://postgres:postgres@plausible_db:5432/plausible_db
|
||||
- CLICKHOUSE_DATABASE_URL=http://plausible_events_db:8123/plausible_events_db
|
||||
- MAILER_EMAIL=admin@example.com
|
||||
- SMTP_HOST_ADDR=mail
|
||||
- SMTP_HOST_PORT=25
|
||||
- SMTP_USER_NAME=
|
||||
- SMTP_USER_PWD=
|
||||
- SMTP_SSL_Enabled=false
|
||||
volumes:
|
||||
- ./geoip:/geoip:ro
|
||||
|
||||
plausible_db:
|
||||
image: postgres:14-alpine
|
||||
container_name: plausible_db
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- plausible_db_data:/var/lib/postgresql/data
|
||||
environment:
|
||||
- POSTGRES_PASSWORD=postgres
|
||||
- POSTGRES_DB=plausible_db
|
||||
|
||||
plausible_events_db:
|
||||
image: clickhouse/clickhouse-server:24.3.3.102-alpine
|
||||
container_name: plausible_events_db
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- plausible_events_data:/var/lib/clickhouse
|
||||
- ./clickhouse/clickhouse-config.xml:/etc/clickhouse-server/config.d/logging.xml:ro
|
||||
- ./clickhouse/clickhouse-user-config.xml:/etc/clickhouse-server/users.d/logging.xml:ro
|
||||
ulimits:
|
||||
nofile:
|
||||
soft: 262144
|
||||
hard: 262144
|
||||
|
||||
mail:
|
||||
image: bytemark/smtp
|
||||
container_name: plausible_mail
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
plausible_db_data:
|
||||
plausible_events_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/plausible && cd /opt/plausible
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `BASE_URL` | `http://localhost:8000` | No |
|
||||
| `SECRET_KEY_BASE` | `ChangeMeChangeMeChangeMeChangeMeChangeMeChangeMeChangeMeChangeMe` | No |
|
||||
| `DATABASE_URL` | `postgres://postgres:postgres@plausible_db:5432/plausible_db` | No |
|
||||
| `CLICKHOUSE_DATABASE_URL` | `http://plausible_events_db:8123/plausible_events_db` | No |
|
||||
| `MAILER_EMAIL` | `admin@example.com` | No |
|
||||
| `SMTP_HOST_ADDR` | `mail` | No |
|
||||
| `SMTP_HOST_PORT` | `25` | No |
|
||||
| `SMTP_SSL_Enabled` | `false` | No |
|
||||
| `POSTGRES_PASSWORD` | `postgres` | No |
|
||||
| `POSTGRES_DB` | `plausible_db` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs plausible | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Plausible on AltStack Directory](https://thealtstack.com/alternative-to/plausible)
|
||||
- [Plausible Self-Hosted Guide](https://thealtstack.com/self-hosted/plausible)
|
||||
- [Official Documentation](https://plausible.io)
|
||||
- [GitHub Repository](https://github.com/plausible/analytics)
|
||||
118
docs/app/deploy/pocketbase/page.mdx
Normal file
118
docs/app/deploy/pocketbase/page.mdx
Normal file
@@ -0,0 +1,118 @@
|
||||
---
|
||||
title: "Deploy PocketBase Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting PocketBase with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy PocketBase
|
||||
|
||||
Open Source realtime backend in 1 file
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 56.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 MIT License</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working PocketBase instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for PocketBase and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
pocketbase:
|
||||
image: pocketbase/pocketbase:latest
|
||||
container_name: pocketbase
|
||||
restart: unless-stopped
|
||||
command: serve --http=0.0.0.0:8090
|
||||
ports:
|
||||
- "8090:8090"
|
||||
volumes:
|
||||
- pb_data:/pb/pb_data
|
||||
|
||||
volumes:
|
||||
pb_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/pocketbase && cd /opt/pocketbase
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs pocketbase | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [PocketBase on AltStack Directory](https://thealtstack.com/alternative-to/pocketbase)
|
||||
- [PocketBase Self-Hosted Guide](https://thealtstack.com/self-hosted/pocketbase)
|
||||
- [Official Documentation](https://pocketbase.io)
|
||||
- [GitHub Repository](https://github.com/pocketbase/pocketbase)
|
||||
112
docs/app/deploy/postal/page.mdx
Normal file
112
docs/app/deploy/postal/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy Postal Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Postal with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Postal
|
||||
|
||||
A fully featured open source mail delivery platform for incoming & outgoing e-mail.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 15.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 MIT</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Postal instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Postal and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
postal:
|
||||
image: postalserver/postal:latest
|
||||
container_name: postal
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "5000:5000"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/postal && cd /opt/postal
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs postal | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Postal on AltStack Directory](https://thealtstack.com/alternative-to/postal)
|
||||
- [Postal Self-Hosted Guide](https://thealtstack.com/self-hosted/postal)
|
||||
- [Official Documentation](https://postalserver.io)
|
||||
- [GitHub Repository](https://github.com/postalserver/postal)
|
||||
199
docs/app/deploy/posthog/page.mdx
Normal file
199
docs/app/deploy/posthog/page.mdx
Normal file
@@ -0,0 +1,199 @@
|
||||
---
|
||||
title: "Deploy PostHog Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting PostHog with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy PostHog
|
||||
|
||||
🦔 PostHog is an all-in-one developer platform for building successful products. We offer product analytics, web analytics, session replay, error tracking, feature flags, experimentation, surveys, data warehouse, a CDP, and an AI product assistant to help debug your code, ship features faster, and keep all your usage and customer data in one stack.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 31.2k stars</span>
|
||||
<span className="deploy-hero-item">📜 Other</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working PostHog instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for PostHog and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
db:
|
||||
image: postgres:14-alpine
|
||||
container_name: posthog-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_PASSWORD=posthog
|
||||
- POSTGRES_DB=posthog
|
||||
- POSTGRES_USER=posthog
|
||||
volumes:
|
||||
- posthog_postgres_data:/var/lib/postgresql/data
|
||||
|
||||
redis:
|
||||
image: redis:6-alpine
|
||||
container_name: posthog-redis
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- posthog_redis_data:/data
|
||||
|
||||
clickhouse:
|
||||
image: clickhouse/clickhouse-server:22.3-alpine
|
||||
container_name: posthog-clickhouse
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- CLICKHOUSE_DB=posthog
|
||||
- CLICKHOUSE_USER=default
|
||||
- CLICKHOUSE_PASSWORD=
|
||||
volumes:
|
||||
- posthog_clickhouse_data:/var/lib/clickhouse
|
||||
|
||||
kafka:
|
||||
image: confluentinc/cp-kafka:7.5.3
|
||||
container_name: posthog-kafka
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- zookeeper
|
||||
environment:
|
||||
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
|
||||
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092
|
||||
- KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1
|
||||
|
||||
zookeeper:
|
||||
image: confluentinc/cp-zookeeper:7.5.3
|
||||
container_name: posthog-zookeeper
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- ZOOKEEPER_CLIENT_PORT=2181
|
||||
- ZOOKEEPER_TICK_TIME=2000
|
||||
|
||||
posthog:
|
||||
image: posthog/posthog:release-1.40.0
|
||||
container_name: posthog
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
- clickhouse
|
||||
- kafka
|
||||
ports:
|
||||
- "8000:8000"
|
||||
environment:
|
||||
- DATABASE_URL=postgres://posthog:posthog@db:5432/posthog
|
||||
- REDIS_URL=redis://redis:6379/
|
||||
- CLICKHOUSE_HOST=clickhouse
|
||||
- KAFKA_HOSTS=kafka:9092
|
||||
- SECRET_KEY=please-change-this-secret-key-in-production-12345
|
||||
- SKIP_SERVICE_VERSION_REQUIREMENTS=1
|
||||
volumes:
|
||||
- ./uploads:/app/static/uploads
|
||||
|
||||
volumes:
|
||||
posthog_postgres_data:
|
||||
posthog_redis_data:
|
||||
posthog_clickhouse_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/posthog && cd /opt/posthog
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `POSTGRES_PASSWORD` | `posthog` | No |
|
||||
| `POSTGRES_DB` | `posthog` | No |
|
||||
| `POSTGRES_USER` | `posthog` | No |
|
||||
| `CLICKHOUSE_DB` | `posthog` | No |
|
||||
| `CLICKHOUSE_USER` | `default` | No |
|
||||
| `KAFKA_ZOOKEEPER_CONNECT` | `zookeeper:2181` | No |
|
||||
| `KAFKA_ADVERTISED_LISTENERS` | `PLAINTEXT://kafka:9092` | No |
|
||||
| `KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR` | `1` | No |
|
||||
| `ZOOKEEPER_CLIENT_PORT` | `2181` | No |
|
||||
| `ZOOKEEPER_TICK_TIME` | `2000` | No |
|
||||
| `DATABASE_URL` | `postgres://posthog:posthog@db:5432/posthog` | No |
|
||||
| `REDIS_URL` | `redis://redis:6379/` | No |
|
||||
| `CLICKHOUSE_HOST` | `clickhouse` | No |
|
||||
| `KAFKA_HOSTS` | `kafka:9092` | No |
|
||||
| `SECRET_KEY` | `please-change-this-secret-key-in-production-12345` | No |
|
||||
| `SKIP_SERVICE_VERSION_REQUIREMENTS` | `1` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs posthog | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [PostHog on AltStack Directory](https://thealtstack.com/alternative-to/posthog)
|
||||
- [PostHog Self-Hosted Guide](https://thealtstack.com/self-hosted/posthog)
|
||||
- [Official Documentation](https://posthog.com)
|
||||
- [GitHub Repository](https://github.com/PostHog/posthog)
|
||||
117
docs/app/deploy/qwen/page.mdx
Normal file
117
docs/app/deploy/qwen/page.mdx
Normal file
@@ -0,0 +1,117 @@
|
||||
---
|
||||
title: "Deploy Qwen 2.5 Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Qwen 2.5 with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Qwen 2.5
|
||||
|
||||
Comprehensive LLM series from Alibaba Cloud, excelling in coding, math, and multilingual support.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 50.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Apache License 2.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Qwen 2.5 instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Qwen 2.5 and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
ollama-qwen:
|
||||
image: ollama/ollama:latest
|
||||
container_name: ollama-qwen
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "11438:11434"
|
||||
volumes:
|
||||
- ollama_qwen:/root/.ollama
|
||||
|
||||
volumes:
|
||||
ollama_qwen:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/qwen && cd /opt/qwen
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs qwen | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Qwen 2.5 on AltStack Directory](https://thealtstack.com/alternative-to/qwen)
|
||||
- [Qwen 2.5 Self-Hosted Guide](https://thealtstack.com/self-hosted/qwen)
|
||||
- [Official Documentation](https://qwenlm.github.io)
|
||||
- [GitHub Repository](https://github.com/QwenLM/Qwen2.5)
|
||||
144
docs/app/deploy/rocketchat/page.mdx
Normal file
144
docs/app/deploy/rocketchat/page.mdx
Normal file
@@ -0,0 +1,144 @@
|
||||
---
|
||||
title: "Deploy Rocket.Chat Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Rocket.Chat with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Rocket.Chat
|
||||
|
||||
The Secure CommsOS™ for mission-critical operations
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 44.5k stars</span>
|
||||
<span className="deploy-hero-item">📜 Other</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Rocket.Chat instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Rocket.Chat and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
rocketchat:
|
||||
image: registry.rocket.chat/rocketchat/rocket.chat:latest
|
||||
container_name: rocketchat
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- mongo
|
||||
ports:
|
||||
- "3002:3000"
|
||||
environment:
|
||||
- MONGO_URL=mongodb://mongo:27017/rocketchat
|
||||
- ROOT_URL=http://localhost:3002
|
||||
- PORT=3000
|
||||
|
||||
mongo:
|
||||
image: mongo:5.0
|
||||
container_name: rocketchat-mongo
|
||||
restart: unless-stopped
|
||||
command: mongod --oplogSize 128 --replSet rs0 --storageEngine=wiredTiger
|
||||
volumes:
|
||||
- ./data/db:/data/db
|
||||
|
||||
mongo-init-replica:
|
||||
image: mongo:5.0
|
||||
container_name: mongo-init-replica
|
||||
restart: unless-stopped
|
||||
command: bash /init-replica.sh
|
||||
depends_on:
|
||||
- mongo
|
||||
volumes:
|
||||
- ./init-replica.sh:/init-replica.sh
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/rocketchat && cd /opt/rocketchat
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `MONGO_URL` | `mongodb://mongo:27017/rocketchat` | No |
|
||||
| `ROOT_URL` | `http://localhost:3002` | No |
|
||||
| `PORT` | `3000` | No |
|
||||
| `storageEngine` | `wiredTiger` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs rocketchat | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Rocket.Chat on AltStack Directory](https://thealtstack.com/alternative-to/rocketchat)
|
||||
- [Rocket.Chat Self-Hosted Guide](https://thealtstack.com/self-hosted/rocketchat)
|
||||
- [Official Documentation](https://rocket.chat)
|
||||
- [GitHub Repository](https://github.com/RocketChat/Rocket.Chat)
|
||||
112
docs/app/deploy/signoz/page.mdx
Normal file
112
docs/app/deploy/signoz/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy SigNoz Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting SigNoz with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy SigNoz
|
||||
|
||||
Open source observability platform. SigNoz helps developers monitor applications and troubleshoot problems.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 18.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 MIT</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working SigNoz instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for SigNoz and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
signoz-frontend:
|
||||
image: signoz/frontend:latest
|
||||
container_name: signoz-frontend
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3301:3301"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/signoz && cd /opt/signoz
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs signoz | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [SigNoz on AltStack Directory](https://thealtstack.com/alternative-to/signoz)
|
||||
- [SigNoz Self-Hosted Guide](https://thealtstack.com/self-hosted/signoz)
|
||||
- [Official Documentation](https://signoz.io)
|
||||
- [GitHub Repository](https://github.com/signoz/signoz)
|
||||
112
docs/app/deploy/stable-diffusion/page.mdx
Normal file
112
docs/app/deploy/stable-diffusion/page.mdx
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "Deploy Stable Diffusion 3.5 Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Stable Diffusion 3.5 with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Stable Diffusion 3.5
|
||||
|
||||
The latest open-weights image generation model from Stability AI, offering superior prompt adherence.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 10.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Stability Community License</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Stable Diffusion 3.5 instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Stable Diffusion 3.5 and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
sd-webui:
|
||||
image: automatic1111/stable-diffusion-webui:latest
|
||||
container_name: sd-webui
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "7860:7860"
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/stable-diffusion && cd /opt/stable-diffusion
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs stable-diffusion | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Stable Diffusion 3.5 on AltStack Directory](https://thealtstack.com/alternative-to/stable-diffusion)
|
||||
- [Stable Diffusion 3.5 Self-Hosted Guide](https://thealtstack.com/self-hosted/stable-diffusion)
|
||||
- [Official Documentation](https://stability.ai)
|
||||
- [GitHub Repository](https://github.com/Stability-AI/sd3.5)
|
||||
208
docs/app/deploy/supabase/page.mdx
Normal file
208
docs/app/deploy/supabase/page.mdx
Normal file
@@ -0,0 +1,208 @@
|
||||
---
|
||||
title: "Deploy Supabase Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Supabase with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Supabase
|
||||
|
||||
The Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 97.4k stars</span>
|
||||
<span className="deploy-hero-item">📜 Apache License 2.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
A fully working Supabase instance running on your server. This isn't just a database; it's a full backend-as-a-service including:
|
||||
|
||||
- **PostgreSQL:** The world's most advanced relational database.
|
||||
- **GoTrue:** User management and JWT-based authentication.
|
||||
- **PostgREST:** Turns your database into a RESTful API automatically.
|
||||
- **Realtime:** Listen to database changes via WebSockets.
|
||||
- **Storage:** S3-compatible file storage.
|
||||
|
||||
> ⚠️ **Critical Security Note:** The default configuration uses "postgres" as the password and a temporary JWT secret. You MUST change these in your `.env` file before exposing this to the internet.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Supabase and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
# Supabase Production-Ready Docker Compose
|
||||
# Note: Supabase is a collection of services. Official images are the standard.
|
||||
# This setup includes the core services: PostgREST, GoTrue, Realtime, Storage, and PostgreSQL.
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
db:
|
||||
container_name: supabase-db
|
||||
image: supabase/postgres:15.1.1.78
|
||||
command: postgres -c config_file=/etc/postgresql/postgresql.conf -c log_min_messages=fatal
|
||||
healthcheck:
|
||||
test: ["CMD", "pg_isready", "-U", "postgres"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
||||
PGDATA: /var/lib/postgresql/data/pgdata
|
||||
volumes:
|
||||
- supabase_db_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- supabase_net
|
||||
|
||||
auth:
|
||||
container_name: supabase-auth
|
||||
image: supabase/gotrue:v2.143.0
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:9999/health"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
environment:
|
||||
GOTRUE_DB_DRIVER: postgres
|
||||
GOTRUE_DB_DATABASE_URL: postgres://postgres:${POSTGRES_PASSWORD:-postgres}@db:5432/postgres?sslmode=disable
|
||||
GOTRUE_SITE_URL: ${SITE_URL:-http://localhost:3000}
|
||||
GOTRUE_JWT_SECRET: ${JWT_SECRET:-super-secret-jwt-token-don-not-use-in-prod}
|
||||
networks:
|
||||
- supabase_net
|
||||
|
||||
rest:
|
||||
container_name: supabase-rest
|
||||
image: postgrest/postgrest:v11.2.2
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
PGRST_DB_URI: postgres://postgres:${POSTGRES_PASSWORD:-postgres}@db:5432/postgres
|
||||
PGRST_DB_SCHEMA: public
|
||||
PGRST_DB_ANON_ROLE: anon
|
||||
networks:
|
||||
- supabase_net
|
||||
|
||||
realtime:
|
||||
container_name: supabase-realtime
|
||||
image: supabase/realtime:v2.25.56
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
DB_HOST: db
|
||||
DB_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
||||
JWT_SECRET: ${JWT_SECRET:-super-secret-jwt-token-don-not-use-in-prod}
|
||||
networks:
|
||||
- supabase_net
|
||||
|
||||
storage:
|
||||
container_name: supabase-storage
|
||||
image: supabase/storage-api:v0.43.12
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
ANON_KEY: ${ANON_KEY}
|
||||
SERVICE_KEY: ${SERVICE_KEY}
|
||||
PGRST_JWT_SECRET: ${JWT_SECRET:-super-secret-jwt-token-don-not-use-in-prod}
|
||||
DATABASE_URL: postgres://postgres:${POSTGRES_PASSWORD:-postgres}@db:5432/postgres
|
||||
networks:
|
||||
- supabase_net
|
||||
|
||||
networks:
|
||||
supabase_net:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
supabase_db_data:
|
||||
name: supabase_db_data
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/supabase && cd /opt/supabase
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `POSTGRES_PASSWORD` | `postgres` | No |
|
||||
| `SITE_URL` | `http://localhost:3000` | No |
|
||||
| `JWT_SECRET` | `super-secret-jwt-token-don-not-use-in-prod` | No |
|
||||
| `ANON_KEY` | `—` | ✅ Yes |
|
||||
| `SERVICE_KEY` | `—` | ✅ Yes |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs supabase | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Supabase on AltStack Directory](https://thealtstack.com/alternative-to/supabase)
|
||||
- [Supabase Self-Hosted Guide](https://thealtstack.com/self-hosted/supabase)
|
||||
- [Official Documentation](https://supabase.com)
|
||||
- [GitHub Repository](https://github.com/supabase/supabase)
|
||||
171
docs/app/deploy/superset/page.mdx
Normal file
171
docs/app/deploy/superset/page.mdx
Normal file
@@ -0,0 +1,171 @@
|
||||
---
|
||||
title: "Deploy Apache Superset Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Apache Superset with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Apache Superset
|
||||
|
||||
Enterprise-ready business intelligence web application.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 59.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Apache 2.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Apache Superset instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Apache Superset and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
# Docker Compose for Apache Superset
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
superset:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
container_name: superset
|
||||
ports:
|
||||
- "8088:8088"
|
||||
environment:
|
||||
- DATABASE_URL=postgresql://superset:superset@db:5432/superset
|
||||
- REDIS_URL=redis://redis:6379
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- superset_net
|
||||
healthcheck:
|
||||
test: [ "CMD", "curl", "-f", "http://localhost:8088/health" ]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
db:
|
||||
image: postgres:15-alpine
|
||||
container_name: superset-db
|
||||
environment:
|
||||
POSTGRES_USER: superset
|
||||
POSTGRES_PASSWORD: superset
|
||||
POSTGRES_DB: superset
|
||||
volumes:
|
||||
- superset_db_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- superset_net
|
||||
healthcheck:
|
||||
test: [ "CMD-SHELL", "pg_isready -U superset" ]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: superset-redis
|
||||
networks:
|
||||
- superset_net
|
||||
healthcheck:
|
||||
test: [ "CMD", "redis-cli", "ping" ]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
networks:
|
||||
superset_net:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
superset_db_data:
|
||||
name: superset_db_data
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/superset && cd /opt/superset
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `DATABASE_URL` | `postgresql://superset:superset@db:5432/superset` | No |
|
||||
| `REDIS_URL` | `redis://redis:6379` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs superset | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Apache Superset on AltStack Directory](https://thealtstack.com/alternative-to/superset)
|
||||
- [Apache Superset Self-Hosted Guide](https://thealtstack.com/self-hosted/superset)
|
||||
- [Official Documentation](https://superset.apache.org)
|
||||
- [GitHub Repository](https://github.com/apache/superset)
|
||||
117
docs/app/deploy/tabby/page.mdx
Normal file
117
docs/app/deploy/tabby/page.mdx
Normal file
@@ -0,0 +1,117 @@
|
||||
---
|
||||
title: "Deploy TabbyML Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting TabbyML with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy TabbyML
|
||||
|
||||
Self-hosted AI coding assistant. An open-source, self-hosted alternative to GitHub Copilot.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 25.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 Apache License 2.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working TabbyML instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for TabbyML and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
tabby:
|
||||
image: tabbyml/tabby:latest
|
||||
container_name: tabby
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8080:8080"
|
||||
volumes:
|
||||
- tabby-data:/data
|
||||
|
||||
volumes:
|
||||
tabby-data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/tabby && cd /opt/tabby
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs tabby | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [TabbyML on AltStack Directory](https://thealtstack.com/alternative-to/tabby)
|
||||
- [TabbyML Self-Hosted Guide](https://thealtstack.com/self-hosted/tabby)
|
||||
- [Official Documentation](https://tabby.tabbyml.com)
|
||||
- [GitHub Repository](https://github.com/TabbyML/tabby)
|
||||
172
docs/app/deploy/taiga/page.mdx
Normal file
172
docs/app/deploy/taiga/page.mdx
Normal file
@@ -0,0 +1,172 @@
|
||||
---
|
||||
title: "Deploy Taiga Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Taiga with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Taiga
|
||||
|
||||
Self-host Taiga on your own server.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 0.8k stars</span>
|
||||
<span className="deploy-hero-item">📜 Mozilla Public License 2.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Taiga instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Taiga and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
taiga-front:
|
||||
image: taigaio/taiga-front:latest
|
||||
container_name: taiga-front
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- taiga-back
|
||||
ports:
|
||||
- "9000:80"
|
||||
environment:
|
||||
- TAIGA_URL=http://localhost:9000
|
||||
- TAIGA_WEBSOCKETS_URL=ws://localhost:9000
|
||||
|
||||
taiga-back:
|
||||
image: taigaio/taiga-back:latest
|
||||
container_name: taiga-back
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- taiga-db
|
||||
- taiga-redis
|
||||
- taiga-async-rabbitmq
|
||||
environment:
|
||||
- POSTGRES_DB=taiga
|
||||
- POSTGRES_USER=taiga
|
||||
- POSTGRES_PASSWORD=taiga
|
||||
- TAIGA_SECRET_KEY=exe3quu8Su2wohx0uNgo0eif4wohphah
|
||||
|
||||
taiga-db:
|
||||
image: postgres:13-alpine
|
||||
container_name: taiga-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_DB=taiga
|
||||
- POSTGRES_USER=taiga
|
||||
- POSTGRES_PASSWORD=taiga
|
||||
volumes:
|
||||
- taiga_db_data:/var/lib/postgresql/data
|
||||
|
||||
taiga-async-rabbitmq:
|
||||
image: rabbitmq:3.8-management-alpine
|
||||
container_name: taiga-rabbitmq
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- RABBITMQ_ERLANG_COOKIE=secret-cookie
|
||||
- RABBITMQ_DEFAULT_USER=taiga
|
||||
- RABBITMQ_DEFAULT_PASS=taiga
|
||||
|
||||
taiga-redis:
|
||||
image: redis:6-alpine
|
||||
container_name: taiga-redis
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
taiga_db_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/taiga && cd /opt/taiga
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `TAIGA_URL` | `http://localhost:9000` | No |
|
||||
| `TAIGA_WEBSOCKETS_URL` | `ws://localhost:9000` | No |
|
||||
| `POSTGRES_DB` | `taiga` | No |
|
||||
| `POSTGRES_USER` | `taiga` | No |
|
||||
| `POSTGRES_PASSWORD` | `taiga` | No |
|
||||
| `TAIGA_SECRET_KEY` | `exe3quu8Su2wohx0uNgo0eif4wohphah` | No |
|
||||
| `RABBITMQ_ERLANG_COOKIE` | `secret-cookie` | No |
|
||||
| `RABBITMQ_DEFAULT_USER` | `taiga` | No |
|
||||
| `RABBITMQ_DEFAULT_PASS` | `taiga` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs taiga | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Taiga on AltStack Directory](https://thealtstack.com/alternative-to/taiga)
|
||||
- [Taiga Self-Hosted Guide](https://thealtstack.com/self-hosted/taiga)
|
||||
- [Official Documentation](https://taiga.io)
|
||||
- [GitHub Repository](https://github.com/taigaio/taiga-back)
|
||||
140
docs/app/deploy/twenty/page.mdx
Normal file
140
docs/app/deploy/twenty/page.mdx
Normal file
@@ -0,0 +1,140 @@
|
||||
---
|
||||
title: "Deploy Twenty Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Twenty with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Twenty
|
||||
|
||||
A modern open-source CRM alternative to Salesforce and Pipedrive.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 15.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 AGPL-3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Twenty instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Twenty and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
twenty:
|
||||
image: twentyhq/twenty:latest
|
||||
container_name: twenty
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
- PG_DATABASE_URL=postgres://twenty:twenty@db:5432/twenty
|
||||
- FRONTEND_URL=http://localhost:3000
|
||||
|
||||
db:
|
||||
image: postgres:15-alpine
|
||||
container_name: twenty-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_USER=twenty
|
||||
- POSTGRES_PASSWORD=twenty
|
||||
- POSTGRES_DB=twenty
|
||||
volumes:
|
||||
- twenty_db_data:/var/lib/postgresql/data
|
||||
|
||||
volumes:
|
||||
twenty_db_data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/twenty && cd /opt/twenty
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `PG_DATABASE_URL` | `postgres://twenty:twenty@db:5432/twenty` | No |
|
||||
| `FRONTEND_URL` | `http://localhost:3000` | No |
|
||||
| `POSTGRES_USER` | `twenty` | No |
|
||||
| `POSTGRES_PASSWORD` | `twenty` | No |
|
||||
| `POSTGRES_DB` | `twenty` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs twenty | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Twenty on AltStack Directory](https://thealtstack.com/alternative-to/twenty)
|
||||
- [Twenty Self-Hosted Guide](https://thealtstack.com/self-hosted/twenty)
|
||||
- [Official Documentation](https://twenty.com)
|
||||
- [GitHub Repository](https://github.com/twentyhq/twenty)
|
||||
130
docs/app/deploy/uptime-kuma/page.mdx
Normal file
130
docs/app/deploy/uptime-kuma/page.mdx
Normal file
@@ -0,0 +1,130 @@
|
||||
---
|
||||
title: "Deploy Uptime Kuma Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Uptime Kuma with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Uptime Kuma
|
||||
|
||||
A fancy self-hosted monitoring tool.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 55.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 MIT</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Uptime Kuma instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Uptime Kuma and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
# Docker Compose for Uptime Kuma
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
uptime-kuma:
|
||||
image: louislam/uptime-kuma:1 # Official image is standard
|
||||
container_name: uptime-kuma
|
||||
ports:
|
||||
- "3001:3001"
|
||||
volumes:
|
||||
- uptime_kuma_data:/app/data
|
||||
networks:
|
||||
- uptime_net
|
||||
healthcheck:
|
||||
test: [ "CMD", "curl", "-f", "http://localhost:3001/" ]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
restart: unless-stopped
|
||||
|
||||
networks:
|
||||
uptime_net:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
uptime_kuma_data:
|
||||
name: uptime_kuma_data
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/uptime-kuma && cd /opt/uptime-kuma
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs uptime-kuma | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Uptime Kuma on AltStack Directory](https://thealtstack.com/alternative-to/uptime-kuma)
|
||||
- [Uptime Kuma Self-Hosted Guide](https://thealtstack.com/self-hosted/uptime-kuma)
|
||||
- [Official Documentation](https://uptime.kuma.pet)
|
||||
- [GitHub Repository](https://github.com/louislam/uptime-kuma)
|
||||
126
docs/app/deploy/vaultwarden/page.mdx
Normal file
126
docs/app/deploy/vaultwarden/page.mdx
Normal file
@@ -0,0 +1,126 @@
|
||||
---
|
||||
title: "Deploy Vaultwarden Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Vaultwarden with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Vaultwarden
|
||||
|
||||
Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 32.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 AGPL-3.0</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Vaultwarden instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Vaultwarden and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
vaultwarden:
|
||||
image: vaultwarden/server:latest
|
||||
container_name: vaultwarden
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8080:80"
|
||||
volumes:
|
||||
- vw-data:/data
|
||||
environment:
|
||||
- WEBSOCKET_ENABLED=true
|
||||
- SIGNUPS_ALLOWED=true
|
||||
|
||||
volumes:
|
||||
vw-data:
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/vaultwarden && cd /opt/vaultwarden
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `WEBSOCKET_ENABLED` | `true` | No |
|
||||
| `SIGNUPS_ALLOWED` | `true` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs vaultwarden | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Vaultwarden on AltStack Directory](https://thealtstack.com/alternative-to/vaultwarden)
|
||||
- [Vaultwarden Self-Hosted Guide](https://thealtstack.com/self-hosted/vaultwarden)
|
||||
- [Official Documentation](https://github.com/dani-garcia/vaultwarden)
|
||||
- [GitHub Repository](https://github.com/dani-garcia/vaultwarden)
|
||||
142
docs/app/deploy/zammad/page.mdx
Normal file
142
docs/app/deploy/zammad/page.mdx
Normal file
@@ -0,0 +1,142 @@
|
||||
---
|
||||
title: "Deploy Zammad Self-Hosted (Docker)"
|
||||
description: "Step-by-step guide to self-hosting Zammad with Docker Compose. "
|
||||
---
|
||||
|
||||
# Deploy Zammad
|
||||
|
||||
A web-based, open source helpdesk/customer support system with many features.
|
||||
|
||||
<div className="deploy-hero">
|
||||
<span className="deploy-hero-item">⭐ 5.0k stars</span>
|
||||
<span className="deploy-hero-item">📜 AGPLv3</span>
|
||||
<span className="deploy-hero-item">🔴 Advanced</span>
|
||||
<span className="deploy-hero-item">⏱ ~20 minutes</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="mt-8 mb-4">
|
||||
<a
|
||||
href="https://m.do.co/c/2ed27757a361"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center w-full px-6 py-4 text-lg font-bold text-white transition-all bg-blue-600 rounded-xl hover:bg-blue-700 hover:scale-[1.02] shadow-lg shadow-blue-500/30"
|
||||
>
|
||||
🚀 Deploy on DigitalOcean ($200 Free Credit)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
## What You'll Get
|
||||
|
||||
A fully working Zammad instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A server with Docker and Docker Compose installed ([setup guide](/quick-start/choosing-a-server))
|
||||
- A domain name pointed to your server (optional but recommended)
|
||||
- Basic terminal access (SSH)
|
||||
|
||||
## The Config
|
||||
|
||||
Create a directory for Zammad and add this `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
# -------------------------------------------------------------------------
|
||||
# 🚀 Created and distributed by The AltStack
|
||||
# 🌍 https://thealtstack.com
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
zammad:
|
||||
image: zammad/zammad-docker-compose:zammad-6.3.1-23
|
||||
container_name: zammad
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- zammad-postgresql
|
||||
- zammad-elasticsearch
|
||||
- zammad-redis
|
||||
ports:
|
||||
- "8080:8080"
|
||||
|
||||
zammad-elasticsearch:
|
||||
image: bitnami/elasticsearch:8.12.2
|
||||
container_name: zammad-elasticsearch
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- discovery.type=single-node
|
||||
|
||||
zammad-postgresql:
|
||||
image: postgres:15-alpine
|
||||
container_name: zammad-postgresql
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_USER=zammad
|
||||
- POSTGRES_PASSWORD=zammad
|
||||
|
||||
zammad-redis:
|
||||
image: redis:7.2-alpine
|
||||
container_name: zammad-redis
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
## Let's Ship It
|
||||
|
||||
```bash
|
||||
# Create a directory
|
||||
mkdir -p /opt/zammad && cd /opt/zammad
|
||||
|
||||
# Create the docker-compose.yml (paste the config above)
|
||||
nano docker-compose.yml
|
||||
|
||||
# Pull images and start
|
||||
docker compose up -d
|
||||
|
||||
# Watch the logs
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Default | Required |
|
||||
|---|---|---|
|
||||
| `POSTGRES_USER` | `zammad` | No |
|
||||
| `POSTGRES_PASSWORD` | `zammad` | No |
|
||||
|
||||
|
||||
## Post-Deployment Checklist
|
||||
|
||||
- [ ] Service is accessible on the configured port
|
||||
- [ ] Admin account created (if applicable)
|
||||
- [ ] Reverse proxy configured ([Caddy guide](/concepts/reverse-proxies))
|
||||
- [ ] SSL/HTTPS working
|
||||
- [ ] Backup script set up ([backup guide](/concepts/backups))
|
||||
- [ ] Uptime monitor added ([Uptime Kuma](/deploy/uptime-kuma))
|
||||
|
||||
## The "I Broke It" Section
|
||||
|
||||
**Container won't start?**
|
||||
```bash
|
||||
docker compose logs zammad | tail -50
|
||||
```
|
||||
|
||||
**Port already in use?**
|
||||
```bash
|
||||
# Find what's using the port
|
||||
lsof -i :PORT_NUMBER
|
||||
```
|
||||
|
||||
**Need to start fresh?**
|
||||
```bash
|
||||
docker compose down -v # ⚠️ This deletes volumes/data!
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Going Further
|
||||
|
||||
- [Zammad on AltStack Directory](https://thealtstack.com/alternative-to/zammad)
|
||||
- [Zammad Self-Hosted Guide](https://thealtstack.com/self-hosted/zammad)
|
||||
- [Official Documentation](https://zammad.org)
|
||||
- [GitHub Repository](https://github.com/zammad/zammad)
|
||||
378
docs/app/globals.css
Normal file
378
docs/app/globals.css
Normal file
@@ -0,0 +1,378 @@
|
||||
@import "tailwindcss";
|
||||
|
||||
/* ============================================
|
||||
AltStack Docs — Custom Theme Overrides
|
||||
============================================ */
|
||||
|
||||
/* ---- Font Stack ---- */
|
||||
:root {
|
||||
--font-sans: var(--font-outfit), 'Outfit', system-ui, -apple-system, sans-serif;
|
||||
--font-mono: var(--font-mono), 'JetBrains Mono', 'Fira Code', monospace;
|
||||
}
|
||||
|
||||
/* ---- AltStack Brand Colors ---- */
|
||||
:root {
|
||||
--altstack-red: #ef4444;
|
||||
--altstack-orange: #f97316;
|
||||
--altstack-bg: #050505;
|
||||
--altstack-surface: #0a0a0a;
|
||||
--altstack-surface-elevated: #111111;
|
||||
--altstack-border: rgba(255, 255, 255, 0.08);
|
||||
--altstack-glass: rgba(10, 10, 10, 0.7);
|
||||
--altstack-text-dim: rgba(255, 255, 255, 0.5);
|
||||
--hero-from: #ffffff;
|
||||
--hero-to: #94a3b8;
|
||||
}
|
||||
|
||||
/* ---- Dark mode as default feel ---- */
|
||||
html {
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
:root {
|
||||
--nextra-primary-hue: 10deg;
|
||||
}
|
||||
|
||||
/* Light mode overrides for high contrast */
|
||||
html[class~="light"] {
|
||||
--nextra-bg: #ffffff;
|
||||
--altstack-bg: #ffffff;
|
||||
--altstack-surface: #f8fafc;
|
||||
--altstack-surface-elevated: #f1f5f9;
|
||||
--altstack-border: rgba(0, 0, 0, 0.08);
|
||||
--altstack-text-dim: #64748b;
|
||||
--altstack-glass: rgba(255, 255, 255, 0.8);
|
||||
--hero-from: #0f172a;
|
||||
--hero-to: #334155;
|
||||
}
|
||||
|
||||
html[class~="dark"] {
|
||||
--nextra-bg: var(--altstack-bg);
|
||||
}
|
||||
|
||||
/* ---- Logo Styling & Animations ---- */
|
||||
@keyframes float-red {
|
||||
|
||||
0%,
|
||||
100% {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: translateY(-8px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes float-glass {
|
||||
|
||||
0%,
|
||||
100% {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: translateY(-5px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes float-slate {
|
||||
|
||||
0%,
|
||||
100% {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
}
|
||||
|
||||
.animate-float-red {
|
||||
animation: float-red 3s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.animate-float-glass {
|
||||
animation: float-glass 3.5s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.animate-float-slate {
|
||||
animation: float-slate 4s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.altstack-logo {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.75rem;
|
||||
font-weight: 900;
|
||||
font-size: 1.3rem;
|
||||
letter-spacing: -0.03em;
|
||||
color: white;
|
||||
}
|
||||
|
||||
html[class~="light"] .altstack-logo {
|
||||
color: #0f172a;
|
||||
}
|
||||
|
||||
/* ---- Navbar & Sidebar Glassmorphism ---- */
|
||||
.nextra-nav-container {
|
||||
background-color: var(--altstack-glass) !important;
|
||||
backdrop-filter: blur(12px) !important;
|
||||
-webkit-backdrop-filter: blur(12px) !important;
|
||||
border-bottom: 1px solid var(--altstack-border);
|
||||
}
|
||||
|
||||
.nextra-sidebar-container {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
/* ---- Home Page Card Overrides (Legacy for now) ---- */
|
||||
.nextra-cards {
|
||||
margin-top: 2rem !important;
|
||||
}
|
||||
|
||||
/* ---- Custom Grid Classes ---- */
|
||||
.premium-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
||||
gap: 1.5rem;
|
||||
margin-top: 2.5rem;
|
||||
}
|
||||
|
||||
.premium-card {
|
||||
position: relative;
|
||||
padding: 1.75rem;
|
||||
background: var(--altstack-surface);
|
||||
border: 1px solid var(--altstack-border);
|
||||
border-radius: 20px;
|
||||
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
text-decoration: none !important;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.premium-card:hover {
|
||||
background: var(--altstack-surface-elevated);
|
||||
border-color: rgba(259, 68, 68, 0.3);
|
||||
transform: translateY(-4px);
|
||||
box-shadow: 0 12px 24px -12px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.premium-card::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 2px;
|
||||
background: linear-gradient(90deg, var(--altstack-red), var(--altstack-orange));
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.premium-card:hover::before {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.premium-card-title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.75rem;
|
||||
font-size: 1.15rem;
|
||||
font-weight: 700;
|
||||
color: white;
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
|
||||
html[class~="light"] .premium-card-title {
|
||||
color: #0f172a;
|
||||
}
|
||||
|
||||
.premium-card-description {
|
||||
font-size: 0.95rem;
|
||||
line-height: 1.6;
|
||||
color: var(--altstack-text-dim);
|
||||
}
|
||||
|
||||
/* ---- Footer ---- */
|
||||
.altstack-footer {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 3rem 0 2rem;
|
||||
font-size: 0.85rem;
|
||||
color: var(--altstack-text-dim);
|
||||
border-top: 1px solid var(--altstack-border);
|
||||
margin-top: 4rem;
|
||||
}
|
||||
|
||||
.altstack-footer a {
|
||||
color: var(--altstack-red);
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.altstack-footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.footer-header {
|
||||
color: #0f172a;
|
||||
/* slate-900 */
|
||||
}
|
||||
|
||||
html[class~="dark"] .footer-header {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
html[class~="light"] .footer-header {
|
||||
color: #0f172a !important;
|
||||
}
|
||||
|
||||
/* ---- Difficulty badges ---- */
|
||||
.badge-beginner {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.3rem;
|
||||
padding: 0.15rem 0.6rem;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 700;
|
||||
color: #22c55e;
|
||||
background: rgba(34, 197, 94, 0.1);
|
||||
border: 1px solid rgba(34, 197, 94, 0.2);
|
||||
border-radius: 9999px;
|
||||
}
|
||||
|
||||
.badge-intermediate {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.3rem;
|
||||
padding: 0.15rem 0.6rem;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 700;
|
||||
color: #eab308;
|
||||
background: rgba(234, 179, 8, 0.1);
|
||||
border: 1px solid rgba(234, 179, 8, 0.2);
|
||||
border-radius: 9999px;
|
||||
}
|
||||
|
||||
.badge-advanced {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.3rem;
|
||||
padding: 0.15rem 0.6rem;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 700;
|
||||
color: #ef4444;
|
||||
background: rgba(239, 68, 68, 0.1);
|
||||
border: 1px solid rgba(239, 68, 68, 0.2);
|
||||
border-radius: 9999px;
|
||||
}
|
||||
|
||||
/* ---- Hero info bar for deploy guides ---- */
|
||||
.deploy-hero {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.75rem;
|
||||
margin: 1rem 0 1.5rem;
|
||||
padding: 1rem 1.25rem;
|
||||
background: var(--altstack-surface);
|
||||
border: 1px solid var(--altstack-border);
|
||||
border-radius: 16px;
|
||||
font-size: 0.85rem;
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
}
|
||||
|
||||
.deploy-hero-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.35rem;
|
||||
}
|
||||
|
||||
/* ---- Manual Logo Fix (Robust Override) ---- */
|
||||
html[class~="dark"] .manual-logo-text {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
html[class~="light"] .manual-logo-text {
|
||||
color: #0f172a !important;
|
||||
/* slate-900 */
|
||||
}
|
||||
|
||||
/* Fill overrides */
|
||||
html[class~="dark"] .manual-logo-fill {
|
||||
fill: rgba(255, 255, 255, 0.1) !important;
|
||||
}
|
||||
|
||||
html[class~="light"] .manual-logo-fill {
|
||||
fill: rgba(15, 23, 42, 0.1) !important;
|
||||
}
|
||||
|
||||
html[class~="dark"] .manual-logo-fill-secondary {
|
||||
fill: rgba(255, 255, 255, 0.2) !important;
|
||||
}
|
||||
|
||||
html[class~="light"] .manual-logo-fill-secondary {
|
||||
fill: rgba(15, 23, 42, 0.2) !important;
|
||||
}
|
||||
|
||||
/* Stroke overrides */
|
||||
html[class~="dark"] .manual-logo-stroke {
|
||||
stroke: rgba(255, 255, 255, 0.2) !important;
|
||||
}
|
||||
|
||||
html[class~="light"] .manual-logo-stroke {
|
||||
stroke: rgba(15, 23, 42, 0.2) !important;
|
||||
}
|
||||
|
||||
html[class~="dark"] .manual-logo-stroke-secondary {
|
||||
stroke: rgba(255, 255, 255, 0.3) !important;
|
||||
}
|
||||
|
||||
html[class~="light"] .manual-logo-stroke-secondary {
|
||||
stroke: rgba(15, 23, 42, 0.3) !important;
|
||||
}
|
||||
|
||||
html[class~="dark"] .manual-logo-stroke-tertiary {
|
||||
stroke: rgba(255, 255, 255, 0.4) !important;
|
||||
}
|
||||
|
||||
html[class~="light"] .manual-logo-stroke-tertiary {
|
||||
stroke: rgba(15, 23, 42, 0.4) !important;
|
||||
}
|
||||
|
||||
/* ============================================
|
||||
Mobile UI Fixes
|
||||
============================================ */
|
||||
|
||||
/* Fix mobile menu z-index issues to ensure it sits above content */
|
||||
.nextra-nav-container,
|
||||
.nextra-navbar {
|
||||
z-index: 60 !important;
|
||||
}
|
||||
|
||||
/* Ensure search and other elements don't overlap the menu */
|
||||
.nextra-search-container {
|
||||
z-index: 40;
|
||||
}
|
||||
|
||||
/* Adjust mobile menu spacing to prevent overlap with navbar */
|
||||
@media (max-width: 768px) {
|
||||
.nextra-menu-mobile {
|
||||
padding-top: 4rem;
|
||||
z-index: 45;
|
||||
}
|
||||
|
||||
/* Ensure the mobile menu content is scrollable and visible */
|
||||
.nextra-menu-mobile .nextra-scrollbar {
|
||||
padding-bottom: 5rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* Force solid background on mobile menu */
|
||||
@media (max-width: 768px) {
|
||||
|
||||
.nextra-menu-mobile,
|
||||
.nextra-mobile-nav {
|
||||
background-color: var(--altstack-bg) !important;
|
||||
z-index: 50 !important;
|
||||
}
|
||||
}
|
||||
60
docs/app/icon.tsx
Normal file
60
docs/app/icon.tsx
Normal file
@@ -0,0 +1,60 @@
|
||||
import { ImageResponse } from 'next/og';
|
||||
|
||||
|
||||
|
||||
export const size = {
|
||||
width: 32,
|
||||
height: 32,
|
||||
};
|
||||
export const contentType = 'image/png';
|
||||
|
||||
export default function Icon() {
|
||||
return new ImageResponse(
|
||||
(
|
||||
<div
|
||||
style={{
|
||||
fontSize: 24,
|
||||
background: 'linear-gradient(to bottom right, #EF4444, #F97316)',
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
color: 'white',
|
||||
borderRadius: '50%', // Round!
|
||||
}}
|
||||
>
|
||||
<svg
|
||||
width="20"
|
||||
height="20"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
d="M12 2L2 7L12 12L22 7L12 2Z"
|
||||
fill="white"
|
||||
fillOpacity="0.9"
|
||||
/>
|
||||
<path
|
||||
d="M2 17L12 22L22 17"
|
||||
stroke="white"
|
||||
strokeWidth="2"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
<path
|
||||
d="M2 12L12 17L22 12"
|
||||
stroke="white"
|
||||
strokeWidth="2"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
),
|
||||
{
|
||||
...size,
|
||||
}
|
||||
);
|
||||
}
|
||||
292
docs/app/layout.tsx
Normal file
292
docs/app/layout.tsx
Normal file
@@ -0,0 +1,292 @@
|
||||
import { Footer, Layout, Navbar } from 'nextra-theme-docs'
|
||||
import Link from 'next/link'
|
||||
import Script from 'next/script'
|
||||
import { Head } from 'nextra/components'
|
||||
import { getPageMap } from 'nextra/page-map'
|
||||
import { Outfit, JetBrains_Mono } from 'next/font/google'
|
||||
import type { Metadata, Viewport } from 'next'
|
||||
import type { ReactNode } from 'react'
|
||||
import 'nextra-theme-docs/style.css'
|
||||
import './globals.css'
|
||||
|
||||
const outfit = Outfit({
|
||||
subsets: ['latin'],
|
||||
variable: '--font-outfit',
|
||||
})
|
||||
|
||||
const jetbrainsMono = JetBrains_Mono({
|
||||
subsets: ['latin'],
|
||||
variable: '--font-mono',
|
||||
})
|
||||
|
||||
export const metadata: Metadata = {
|
||||
metadataBase: new URL('https://docs.thealtstack.com'),
|
||||
title: {
|
||||
default: 'AltStack Docs — Self-Hosting Guides & Deploy Recipes',
|
||||
template: '%s — AltStack Docs',
|
||||
},
|
||||
description:
|
||||
'Step-by-step guides to self-host open source software. Docker Compose configs, deployment recipes, and stack-building guides for developers and teams.',
|
||||
openGraph: {
|
||||
title: 'AltStack Docs',
|
||||
description:
|
||||
'Self-hosting guides, deploy configs, and stack-building recipes for open source software.',
|
||||
url: 'https://docs.thealtstack.com',
|
||||
siteName: 'AltStack Docs',
|
||||
locale: 'en_US',
|
||||
type: 'website',
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
title: 'AltStack Docs',
|
||||
description:
|
||||
'Self-hosting guides, deploy configs, and stack recipes.',
|
||||
},
|
||||
}
|
||||
|
||||
export const viewport: Viewport = {
|
||||
themeColor: '#050505',
|
||||
}
|
||||
|
||||
import AIChatLinks from '../components/AIChatLinks'
|
||||
|
||||
function Logo() {
|
||||
return (
|
||||
<div className="group/logo flex items-center gap-2 md:gap-3">
|
||||
<div className="relative w-7 h-7 md:w-10 md:h-10 flex items-center justify-center">
|
||||
<svg
|
||||
viewBox="0 0 40 40"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
className="overflow-visible w-full h-full"
|
||||
>
|
||||
{/* Bottom Layer (Slate) */}
|
||||
<g className="animate-float-slate transition-transform duration-700 ease-out group-hover/logo:-translate-y-2">
|
||||
<path
|
||||
d="M20 32L8 26L20 20L32 26L20 32Z"
|
||||
className="fill-slate-900/10 dark:!fill-white/10 manual-logo-fill"
|
||||
/>
|
||||
<path
|
||||
d="M20 32L8 26L20 20L32 26L20 32Z"
|
||||
className="stroke-slate-900/20 dark:!stroke-white/20 manual-logo-stroke"
|
||||
strokeWidth="1"
|
||||
/>
|
||||
</g>
|
||||
|
||||
{/* Middle Layer (Glass) */}
|
||||
<g className="animate-float-glass transition-transform duration-700 ease-out group-hover/logo:-translate-y-4">
|
||||
<path
|
||||
d="M20 26L8 20L20 14L32 20L20 26Z"
|
||||
className="fill-slate-900/20 dark:!fill-white/20 manual-logo-fill-secondary"
|
||||
/>
|
||||
<path
|
||||
d="M20 26L8 20L20 14L32 20L20 26Z"
|
||||
className="stroke-slate-900/30 dark:!stroke-white/30 manual-logo-stroke-secondary"
|
||||
strokeWidth="1"
|
||||
/>
|
||||
</g>
|
||||
|
||||
{/* Top Layer (Red) */}
|
||||
<g className="animate-float-red transition-transform duration-700 ease-out group-hover/logo:-translate-y-6">
|
||||
<defs>
|
||||
<linearGradient id="logo-red-grad" x1="8" y1="14" x2="32" y2="14" gradientUnits="userSpaceOnUse">
|
||||
<stop stopColor="#EF4444" />
|
||||
<stop offset="1" stopColor="#F97316" />
|
||||
</linearGradient>
|
||||
<filter id="logo-red-glow" x="0" y="0" width="40" height="40">
|
||||
<feGaussianBlur stdDeviation="2" result="blur" />
|
||||
<feComposite in="SourceGraphic" in2="blur" operator="over" />
|
||||
</filter>
|
||||
</defs>
|
||||
<path
|
||||
d="M20 20L8 14L20 8L32 14L20 20Z"
|
||||
fill="url(#logo-red-grad)"
|
||||
filter="url(#logo-red-glow)"
|
||||
/>
|
||||
<path
|
||||
d="M20 20L8 14L20 8L32 14L20 20Z"
|
||||
className="stroke-slate-900/40 dark:!stroke-white/40 manual-logo-stroke-tertiary"
|
||||
strokeWidth="0.5"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
<span className="font-bold text-lg md:text-xl tracking-tighter text-slate-900 dark:!text-white transition-colors manual-logo-text">
|
||||
Alt<span className="text-red-500">Stack</span><span className="opacity-50 font-medium text-base ml-1 hidden sm:inline">docs</span>
|
||||
</span>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
const navbar = (
|
||||
<Navbar
|
||||
logo={<Logo />}
|
||||
>
|
||||
<AIChatLinks />
|
||||
</Navbar>
|
||||
)
|
||||
|
||||
const footer = (
|
||||
<Footer>
|
||||
<div className="w-full pt-16 pb-12 mt-24 border-t border-black/5 dark:border-white/5 transition-colors duration-300">
|
||||
<div className="max-w-7xl mx-auto px-6">
|
||||
<div className="grid grid-cols-1 md:grid-cols-4 gap-12 mb-16">
|
||||
<div className="col-span-1 md:col-span-1">
|
||||
<div className="flex items-center gap-3 mb-6">
|
||||
<Logo />
|
||||
</div>
|
||||
<p className="text-slate-500 dark:text-slate-400 text-sm leading-relaxed mb-8 max-w-xs transition-colors">
|
||||
Step-by-step guides to self-host open source software with real configs and zero filler.
|
||||
</p>
|
||||
<div className="flex items-center gap-4 text-slate-400">
|
||||
<a href="https://thealtstack.com" className="hover:text-slate-900 dark:hover:text-white transition-colors text-sm">
|
||||
thealtstack.com →
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3 className="footer-header font-bold text-xs mb-6 uppercase tracking-widest transition-colors">Documentation</h3>
|
||||
<ul className="space-y-4 text-sm">
|
||||
<li><Link href="/quick-start/what-is-self-hosting" className="text-slate-500 dark:text-slate-400 hover:text-red-500 transition-colors">Quick Start</Link></li>
|
||||
<li><Link href="/deploy" className="text-slate-500 dark:text-slate-400 hover:text-red-500 transition-colors">Deploy Guides</Link></li>
|
||||
<li><Link href="/stacks" className="text-slate-500 dark:text-slate-400 hover:text-red-500 transition-colors">Curated Stacks</Link></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3 className="footer-header font-bold text-xs mb-6 uppercase tracking-widest transition-colors">About</h3>
|
||||
<ul className="space-y-4 text-sm">
|
||||
<li><Link href="/why" className="text-slate-500 dark:text-slate-400 hover:text-red-500 transition-colors">Why These Docs Exist</Link></li>
|
||||
<li><a href="https://thealtstack.com/about" className="text-slate-500 dark:text-slate-400 hover:text-red-500 transition-colors">About AltStack</a></li>
|
||||
<li><a href="mailto:hello@thealtstack.com" className="text-slate-500 dark:text-slate-400 hover:text-red-500 transition-colors">Send Feedback</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3 className="footer-header font-bold text-xs mb-6 uppercase tracking-widest transition-colors">Support</h3>
|
||||
<ul className="space-y-4 text-sm">
|
||||
<li><Link href="/contact" className="text-slate-500 dark:text-slate-400 hover:text-red-500 transition-colors">Contact Us</Link></li>
|
||||
<li><a href="https://thealtstack.com/privacy" className="text-slate-500 dark:text-slate-400 hover:text-red-500 transition-colors">Privacy</a></li>
|
||||
<li><a href="https://thealtstack.com/terms" className="text-slate-500 dark:text-slate-400 hover:text-red-500 transition-colors">Terms</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="pt-8 border-t border-black/5 dark:border-white/5 flex flex-col md:flex-row justify-between items-center gap-6">
|
||||
<p className="text-[10px] font-medium text-slate-500 dark:text-slate-600 uppercase tracking-widest transition-colors">
|
||||
© {new Date().getFullYear()} The AltStack. Empowering through Open Source.
|
||||
</p>
|
||||
<div className="flex items-center gap-6">
|
||||
<div className="flex items-center gap-2 px-3 py-1.5 rounded-full bg-green-500/5 border border-green-500/10">
|
||||
<span className="w-1.5 h-1.5 rounded-full bg-green-500 animate-pulse" />
|
||||
<span className="text-[10px] font-bold text-green-500 uppercase tracking-widest">Systems Operational</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Footer>
|
||||
)
|
||||
|
||||
export default async function RootLayout({
|
||||
children,
|
||||
}: {
|
||||
children: ReactNode
|
||||
}) {
|
||||
return (
|
||||
<html lang="en" dir="ltr" suppressHydrationWarning>
|
||||
<Head
|
||||
color={{
|
||||
hue: 10,
|
||||
saturation: 80,
|
||||
lightness: {
|
||||
dark: 55,
|
||||
light: 50,
|
||||
},
|
||||
}}
|
||||
/>
|
||||
<body
|
||||
className={`${outfit.variable} ${jetbrainsMono.variable}`}
|
||||
>
|
||||
{/* Google Analytics */}
|
||||
<Script src="https://www.googletagmanager.com/gtag/js?id=G-MZR8ZCF535" strategy="afterInteractive" />
|
||||
<Script id="google-analytics" strategy="afterInteractive">
|
||||
{`
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', 'G-MZR8ZCF535');
|
||||
`}
|
||||
</Script>
|
||||
<script
|
||||
type="application/ld+json"
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: JSON.stringify({
|
||||
'@context': 'https://schema.org',
|
||||
'@graph': [
|
||||
{
|
||||
'@type': 'WebSite',
|
||||
'@id': 'https://docs.thealtstack.com/#website',
|
||||
url: 'https://docs.thealtstack.com',
|
||||
name: 'AltStack Docs',
|
||||
description:
|
||||
'Step-by-step guides to self-host open source software. Docker Compose configs, deployment recipes, and stack-building guides.',
|
||||
publisher: {
|
||||
'@id': 'https://thealtstack.com/#organization',
|
||||
},
|
||||
potentialAction: {
|
||||
'@type': 'SearchAction',
|
||||
target: {
|
||||
'@type': 'EntryPoint',
|
||||
urlTemplate:
|
||||
'https://docs.thealtstack.com/?q={search_term_string}',
|
||||
},
|
||||
'query-input': 'required name=search_term_string',
|
||||
},
|
||||
inLanguage: 'en-US',
|
||||
},
|
||||
{
|
||||
'@type': 'Organization',
|
||||
'@id': 'https://thealtstack.com/#organization',
|
||||
name: 'AltStack',
|
||||
url: 'https://thealtstack.com',
|
||||
description:
|
||||
"The World's First Sovereign Infrastructure Engine. A curated directory of 400+ open source alternatives.",
|
||||
sameAs: ['https://docs.thealtstack.com'],
|
||||
},
|
||||
{
|
||||
'@type': 'BreadcrumbList',
|
||||
'@id': 'https://docs.thealtstack.com/#breadcrumb',
|
||||
itemListElement: [
|
||||
{
|
||||
'@type': 'ListItem',
|
||||
position: 1,
|
||||
name: 'AltStack',
|
||||
item: 'https://thealtstack.com',
|
||||
},
|
||||
{
|
||||
'@type': 'ListItem',
|
||||
position: 2,
|
||||
name: 'Docs',
|
||||
item: 'https://docs.thealtstack.com',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
}),
|
||||
}}
|
||||
/>
|
||||
<Layout
|
||||
navbar={navbar}
|
||||
footer={footer}
|
||||
pageMap={await getPageMap()}
|
||||
editLink={null}
|
||||
feedback={{ content: null }}
|
||||
>
|
||||
{children}
|
||||
</Layout>
|
||||
</body>
|
||||
</html>
|
||||
)
|
||||
}
|
||||
127
docs/app/page.mdx
Normal file
127
docs/app/page.mdx
Normal file
@@ -0,0 +1,127 @@
|
||||
---
|
||||
title: AltStack Docs
|
||||
searchable: false
|
||||
---
|
||||
|
||||
import { Rocket, Box, Flame, Brain, ArrowRight, ScrollText, Globe } from 'lucide-react'
|
||||
|
||||
<div className="py-20 text-center">
|
||||
<h1 className="text-4xl md:text-7xl font-black tracking-tighter leading-tight mb-6 py-4 bg-gradient-to-r from-[var(--hero-from)] to-[var(--hero-to)] bg-clip-text text-transparent">
|
||||
The AltStack Docs
|
||||
</h1>
|
||||
<div className="text-xl md:text-2xl text-[var(--altstack-text-dim)] max-w-2xl mx-auto font-medium">
|
||||
The World's First Sovereign Infrastructure Engine. Self-hosting guides that actually work.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="premium-grid">
|
||||
<a href="/quick-start/what-is-self-hosting" className="premium-card group">
|
||||
<div className="premium-card-title">
|
||||
<div className="p-2 rounded-lg bg-red-500/10 text-red-500 group-hover:bg-red-500/20 transition-colors">
|
||||
<Rocket size={20} />
|
||||
</div>
|
||||
<span>Quick Start</span>
|
||||
</div>
|
||||
<div className="premium-card-description">
|
||||
New to self-hosting? Start here. 5 minutes to your first deploy.
|
||||
</div>
|
||||
<div className="absolute bottom-6 right-6 opacity-0 group-hover:opacity-100 transition-opacity text-red-500">
|
||||
<ArrowRight size={18} />
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a href="/deploy" className="premium-card group">
|
||||
<div className="premium-card-title">
|
||||
<div className="p-2 rounded-lg bg-orange-500/10 text-orange-500 group-hover:bg-orange-500/20 transition-colors">
|
||||
<Box size={20} />
|
||||
</div>
|
||||
<span>Deploy Guides</span>
|
||||
</div>
|
||||
<div className="premium-card-description">
|
||||
65+ tools with Docker Compose configs. Find yours, ship it, own it.
|
||||
</div>
|
||||
<div className="absolute bottom-6 right-6 opacity-0 group-hover:opacity-100 transition-opacity text-orange-500">
|
||||
<ArrowRight size={18} />
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a href="/stacks" className="premium-card group">
|
||||
<div className="premium-card-title">
|
||||
<div className="p-2 rounded-lg bg-yellow-500/10 text-yellow-500 group-hover:bg-yellow-500/20 transition-colors">
|
||||
<Flame size={20} />
|
||||
</div>
|
||||
<span>Curated Stacks</span>
|
||||
</div>
|
||||
<div className="premium-card-description">
|
||||
Pre-built tool bundles for bootstrappers, designers, DevOps, privacy, and AI.
|
||||
</div>
|
||||
<div className="absolute bottom-6 right-6 opacity-0 group-hover:opacity-100 transition-opacity text-yellow-500">
|
||||
<ArrowRight size={18} />
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a href="/concepts" className="premium-card group">
|
||||
<div className="premium-card-title">
|
||||
<div className="p-2 rounded-lg bg-blue-500/10 text-blue-500 group-hover:bg-blue-500/20 transition-colors">
|
||||
<Brain size={20} />
|
||||
</div>
|
||||
<span>Concepts</span>
|
||||
</div>
|
||||
<div className="premium-card-description">
|
||||
Docker, reverse proxies, SSL, backups — explained like you're a human.
|
||||
</div>
|
||||
<div className="absolute bottom-6 right-6 opacity-0 group-hover:opacity-100 transition-opacity text-blue-500">
|
||||
<ArrowRight size={18} />
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a href="/why" className="premium-card group">
|
||||
<div className="premium-card-title">
|
||||
<div className="p-2 rounded-lg bg-purple-500/10 text-purple-500 group-hover:bg-purple-500/20 transition-colors">
|
||||
<ScrollText size={20} />
|
||||
</div>
|
||||
<span>Why These Docs Exist</span>
|
||||
</div>
|
||||
<div className="premium-card-description">
|
||||
Our philosophy, editorial rules, and what makes these docs different.
|
||||
</div>
|
||||
<div className="absolute bottom-6 right-6 opacity-0 group-hover:opacity-100 transition-opacity text-purple-500">
|
||||
<ArrowRight size={18} />
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a href="https://thealtstack.com" className="premium-card group">
|
||||
<div className="premium-card-title">
|
||||
<div className="p-2 rounded-lg bg-emerald-500/10 text-emerald-500 group-hover:bg-emerald-500/20 transition-colors">
|
||||
<Globe size={20} />
|
||||
</div>
|
||||
<span>AltStack Directory</span>
|
||||
</div>
|
||||
<div className="premium-card-description">
|
||||
Browse 400+ open source tools, compare alternatives, and build your stack.
|
||||
</div>
|
||||
<div className="absolute bottom-6 right-6 opacity-0 group-hover:opacity-100 transition-opacity text-emerald-500">
|
||||
<ArrowRight size={18} />
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div className="mt-32 prose prose-invert max-w-none">
|
||||
<div className="grid md:grid-cols-2 gap-12 border-t border-[var(--altstack-border)] pt-16">
|
||||
<div>
|
||||
<h2 className="text-3xl font-bold mb-4">Why These Docs Exist</h2>
|
||||
<div className="text-lg text-[var(--altstack-text-dim)]">
|
||||
Every tool in the <a href="https://thealtstack.com" className="text-red-500 font-semibold no-underline hover:underline">AltStack directory</a> can be self-hosted. These docs show you <em>how</em> — with real configs, honest trade-offs, and none of the hand-waving.
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="text-3xl font-bold mb-4">The Rules</h2>
|
||||
<ul className="space-y-4 text-[var(--altstack-text-dim)] list-none p-0">
|
||||
<li className="flex gap-3"><span className="text-red-500 font-bold">1.</span> Every guide ends with a working deployment</li>
|
||||
<li className="flex gap-3"><span className="text-red-500 font-bold">2.</span> Every config is tested and copy-pasteable</li>
|
||||
<li className="flex gap-3"><span className="text-red-500 font-bold">3.</span> Every tool gets an honest verdict</li>
|
||||
<li className="flex gap-3"><span className="text-red-500 font-bold">4.</span> We don't waste your time with "Introduction" filler</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
21
docs/app/quick-start/_meta.ts
Normal file
21
docs/app/quick-start/_meta.ts
Normal 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
|
||||
113
docs/app/quick-start/choosing-a-server/page.mdx
Normal file
113
docs/app/quick-start/choosing-a-server/page.mdx
Normal 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 5–10 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 |
|
||||
|---|---|---|---|---|
|
||||
| 1–3 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
|
||||
69
docs/app/quick-start/first-deployment/page.mdx
Normal file
69
docs/app/quick-start/first-deployment/page.mdx
Normal 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.
|
||||
88
docs/app/quick-start/page.mdx
Normal file
88
docs/app/quick-start/page.mdx
Normal 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)
|
||||
- **$0–6/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
|
||||
145
docs/app/quick-start/reverse-proxy/page.mdx
Normal file
145
docs/app/quick-start/reverse-proxy/page.mdx
Normal 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.
|
||||
46
docs/app/quick-start/starter-kit/page.mdx
Normal file
46
docs/app/quick-start/starter-kit/page.mdx
Normal 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
|
||||
62
docs/app/quick-start/what-is-self-hosting/page.mdx
Normal file
62
docs/app/quick-start/what-is-self-hosting/page.mdx
Normal 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 $4–6/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.
|
||||
60
docs/app/sitemap.ts
Normal file
60
docs/app/sitemap.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
import { MetadataRoute } from 'next'
|
||||
import path from 'path'
|
||||
import fs from 'fs'
|
||||
|
||||
const BASE_URL = 'https://docs.thealtstack.com'
|
||||
|
||||
/**
|
||||
* Dynamically generates the sitemap for the docs site by scanning
|
||||
* the app directory for all page.mdx files. This replaces the old
|
||||
* static public/sitemap.xml that would drift out of sync.
|
||||
*/
|
||||
export default function sitemap(): MetadataRoute.Sitemap {
|
||||
const appDir = path.join(process.cwd(), 'app')
|
||||
const pages: string[] = []
|
||||
|
||||
// Recursively find all page.mdx files
|
||||
function scan(dir: string, prefix: string) {
|
||||
const entries = fs.readdirSync(dir, { withFileTypes: true })
|
||||
for (const entry of entries) {
|
||||
// Skip hidden dirs, node_modules, test dirs
|
||||
if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'test') continue
|
||||
|
||||
if (entry.isDirectory()) {
|
||||
scan(path.join(dir, entry.name), `${prefix}/${entry.name}`)
|
||||
} else if (entry.name === 'page.mdx') {
|
||||
// Root page.mdx → '/', nested → '/concepts/docker-basics'
|
||||
pages.push(prefix || '/')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
scan(appDir, '')
|
||||
|
||||
// Priority map for top-level sections
|
||||
const priorityMap: Record<string, number> = {
|
||||
'/': 1.0,
|
||||
'/quick-start': 0.9,
|
||||
'/deploy': 0.8,
|
||||
'/concepts': 0.8,
|
||||
'/stacks': 0.7,
|
||||
}
|
||||
|
||||
return pages.map(pagePath => {
|
||||
// Determine priority based on section
|
||||
const section = '/' + (pagePath.split('/')[1] || '')
|
||||
const priority = priorityMap[section] || priorityMap[pagePath] || 0.6
|
||||
|
||||
// Determine change frequency
|
||||
let changeFrequency: 'daily' | 'weekly' | 'monthly' | 'yearly' = 'monthly'
|
||||
if (pagePath === '/') changeFrequency = 'weekly'
|
||||
if (pagePath.startsWith('/deploy')) changeFrequency = 'weekly'
|
||||
|
||||
return {
|
||||
url: `${BASE_URL}${pagePath}`,
|
||||
lastModified: new Date(),
|
||||
changeFrequency,
|
||||
priority,
|
||||
}
|
||||
})
|
||||
}
|
||||
21
docs/app/stacks/_meta.ts
Normal file
21
docs/app/stacks/_meta.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import type { MetaRecord } from 'nextra'
|
||||
|
||||
const meta: MetaRecord = {
|
||||
bootstrapper: {
|
||||
title: '🚀 The Bootstrapper Stack',
|
||||
},
|
||||
designer: {
|
||||
title: '🎨 The Designer Stack',
|
||||
},
|
||||
'ai-first': {
|
||||
title: '🤖 The AI-First Stack',
|
||||
},
|
||||
devops: {
|
||||
title: '⚙️ The DevOps Stack',
|
||||
},
|
||||
privacy: {
|
||||
title: '🔒 The Privacy Stack',
|
||||
},
|
||||
}
|
||||
|
||||
export default meta
|
||||
38
docs/app/stacks/ai-first/page.mdx
Normal file
38
docs/app/stacks/ai-first/page.mdx
Normal file
@@ -0,0 +1,38 @@
|
||||
---
|
||||
title: "The AI-First Stack"
|
||||
description: "Own your AI. Run LLMs, image generation, and code assistants locally with zero API keys, zero usage limits, and zero data leaving your machine."
|
||||
---
|
||||
|
||||
# 🤖 The AI-First Stack
|
||||
|
||||
**Own your AI.** Run powerful AI locally. No API keys, no usage limits, no data leaving your machine.
|
||||
|
||||
| What | Tool | Replaces |
|
||||
|---|---|---|
|
||||
| LLM Inference | [Llama](/deploy/llama) | ChatGPT ($20/mo) |
|
||||
| Coding Model | [DeepSeek](/deploy/deepseek) | GitHub Copilot ($10/mo) |
|
||||
| Image Generation | [Stable Diffusion](/deploy/stable-diffusion) | Midjourney ($10/mo) |
|
||||
| IDE Assistant | [Continue.dev](/deploy/continue-dev) | Copilot extension ($10/mo) |
|
||||
| Code Autocomplete | [Tabby](/deploy/tabby) | Tabnine ($12/mo) |
|
||||
|
||||
**Total saved: ~$69/mo** (nice)
|
||||
|
||||
## Hardware Requirements
|
||||
|
||||
Running AI locally requires GPU horsepower. Here's what you need:
|
||||
|
||||
| Model Type | Minimum VRAM | Recommended GPU |
|
||||
|---|---|---|
|
||||
| Small LLMs (7B params) | 6 GB | RTX 3060, RTX 4060 |
|
||||
| Large LLMs (70B params) | 48 GB | 2× RTX 3090, A6000 |
|
||||
| Image Generation (SDXL) | 8 GB | RTX 3070+ |
|
||||
| Code Models (DeepSeek) | 8 GB | RTX 4060+ |
|
||||
|
||||
> 🔥 **Pro Tip:** Start with Ollama + Llama 3. It runs well on an 8GB GPU and gives you a local ChatGPT replacement in under 5 minutes.
|
||||
|
||||
## Deploy Guides
|
||||
|
||||
→ [Deploy Ollama (LLM Runner)](/deploy/ollama)
|
||||
→ [Deploy Stable Diffusion](/deploy/stable-diffusion)
|
||||
→ [Deploy Tabby (Code AI)](/deploy/tabby)
|
||||
→ [Deploy Continue.dev](/deploy/continue-dev)
|
||||
70
docs/app/stacks/bootstrapper/page.mdx
Normal file
70
docs/app/stacks/bootstrapper/page.mdx
Normal file
@@ -0,0 +1,70 @@
|
||||
---
|
||||
title: "The Bootstrapper Stack"
|
||||
description: "Launch your SaaS for $0/mo. The complete open source stack with database, auth, deployment, analytics, project management, and design."
|
||||
---
|
||||
|
||||
# 🚀 The Bootstrapper Stack
|
||||
|
||||
**Launch for $0/mo.** Everything you need to build, ship, and manage a SaaS product without spending a dime on software.
|
||||
|
||||
| What | Tool | Monthly SaaS Cost Replaced |
|
||||
|---|---|---|
|
||||
| Database & Auth | [Supabase](/deploy/supabase) | ~$25/mo (Firebase) |
|
||||
| Project Management | [Plane](/deploy/plane) | ~$10/mo (Jira) |
|
||||
| Team Chat | [Rocket.Chat](/deploy/rocketchat) | ~$7/mo (Slack) |
|
||||
| Deployment PaaS | [Coolify](/deploy/coolify) | ~$20/mo (Vercel Pro) |
|
||||
| Web Analytics | [Plausible](/deploy/plausible) | ~$9/mo (Plausible Cloud) |
|
||||
| UI/UX Design | [Penpot](/deploy/penpot) | ~$15/mo (Figma) |
|
||||
|
||||
**Total saved: ~$310/mo** · **Your cost: ~$6/mo (one VPS)**
|
||||
|
||||
## Deploy Order
|
||||
|
||||
Deploy in this order — each tool builds on the previous:
|
||||
|
||||
### 1. Coolify (your PaaS)
|
||||
Coolify turns your VPS into a self-hosted Vercel. Once it's running, you can deploy everything else *through it*.
|
||||
|
||||
→ [Deploy Coolify](/deploy/coolify)
|
||||
|
||||
### 2. Supabase (your backend)
|
||||
Database, authentication, storage, and realtime — all in one. This is your app's backbone.
|
||||
|
||||
→ [Deploy Supabase](/deploy/supabase)
|
||||
|
||||
### 3. Plausible (your analytics)
|
||||
Drop Google Analytics. Plausible is lightweight, cookie-free, and respects your users' privacy.
|
||||
|
||||
→ [Deploy Plausible](/deploy/plausible)
|
||||
|
||||
### 4. Plane (your project board)
|
||||
Jira without the Jira experience. Clean, fast, issue tracking that doesn't make you want to quit.
|
||||
|
||||
→ [Deploy Plane](/deploy/plane)
|
||||
|
||||
### 5. Rocket.Chat (your team chat)
|
||||
Slack without the $7/user/mo. Self-hosted, full-featured, and it doesn't sell your conversations.
|
||||
|
||||
→ [Deploy Rocket.Chat](/deploy/rocketchat)
|
||||
|
||||
### 6. Penpot (your design tool)
|
||||
open source Figma alternative. Real-time collaboration, SVG-based, and free forever.
|
||||
|
||||
→ [Deploy Penpot](/deploy/penpot)
|
||||
|
||||
## Server Requirements
|
||||
|
||||
| Spec | Recommended |
|
||||
|---|---|
|
||||
| RAM | 4 GB minimum (8 GB ideal) |
|
||||
| CPU | 2 vCPU |
|
||||
| Storage | 40 GB SSD |
|
||||
| OS | Ubuntu 22.04+ or Debian 12+ |
|
||||
| Monthly cost | ~$6 (Hetzner CX22) |
|
||||
|
||||
## Who This Is For
|
||||
|
||||
- Solo founders building a SaaS MVP
|
||||
- Early-stage startups that refuse to burn cash on software
|
||||
- Developers who want to control their entire stack
|
||||
- Anyone tired of the "free tier" → "pay us now" bait-and-switch
|
||||
37
docs/app/stacks/designer/page.mdx
Normal file
37
docs/app/stacks/designer/page.mdx
Normal file
@@ -0,0 +1,37 @@
|
||||
---
|
||||
title: "The Designer Stack"
|
||||
description: "Ditch Creative Cloud. Professional open source design tools for UI/UX, photo editing, digital art, and documentation."
|
||||
---
|
||||
|
||||
# 🎨 The Designer Stack
|
||||
|
||||
**Ditch Creative Cloud.** Professional design tools that rival Adobe — from UI/UX prototyping to photo editing and digital art.
|
||||
|
||||
| What | Tool | Replaces |
|
||||
|---|---|---|
|
||||
| UI/UX Design | [Penpot](/deploy/penpot) | Figma ($15/mo) |
|
||||
| Photo Editing | [GIMP](/deploy/gimp) | Photoshop ($22/mo) |
|
||||
| Digital Art | [Krita](/deploy/krita) | Procreate / Illustrator ($22/mo) |
|
||||
| Knowledge Base | [AppFlowy](/deploy/appflowy) | Notion ($10/mo) |
|
||||
|
||||
**Total saved: ~$110/mo**
|
||||
|
||||
## The Honest Take
|
||||
|
||||
Let's be real: these tools don't have feature parity with Adobe. But for 90% of design work — UI mockups, web design, photo editing, illustrations — they're more than enough. And the gap closes every month.
|
||||
|
||||
**Where they shine:**
|
||||
- Penpot is genuinely better than Figma for developers (SVG-native, CSS grid support)
|
||||
- GIMP handles 95% of what Photoshop does
|
||||
- Krita is beloved by digital artists — many prefer it over paid alternatives
|
||||
|
||||
**Where they struggle:**
|
||||
- Video editing (no open source premiere replacement yet)
|
||||
- Print design workflows (InDesign still wins here)
|
||||
|
||||
## Deploy Guides
|
||||
|
||||
→ [Deploy Penpot](/deploy/penpot)
|
||||
→ [Deploy GIMP](/deploy/gimp)
|
||||
→ [Deploy Krita](/deploy/krita)
|
||||
→ [Deploy AppFlowy](/deploy/appflowy)
|
||||
46
docs/app/stacks/devops/page.mdx
Normal file
46
docs/app/stacks/devops/page.mdx
Normal file
@@ -0,0 +1,46 @@
|
||||
---
|
||||
title: "The DevOps Stack"
|
||||
description: "Self-host your entire infrastructure. Backend, hosting, deployment, analytics, and monitoring — zero vendor lock-in."
|
||||
---
|
||||
|
||||
# ⚙️ The DevOps Stack
|
||||
|
||||
**Self-host everything.** From backend to hosting to monitoring — deploy and manage your entire infrastructure on your own terms.
|
||||
|
||||
| What | Tool | Replaces |
|
||||
|---|---|---|
|
||||
| Backend as a Service | [Supabase](/deploy/supabase) | Firebase ($25+/mo) |
|
||||
| PaaS (Deployment) | [Coolify](/deploy/coolify) | Vercel Pro ($20/mo) |
|
||||
| Git Deployment | [Dokku](/deploy/dokku) | Heroku ($25/mo) |
|
||||
| Web Analytics | [Plausible](/deploy/plausible) | Google Analytics (free, but your data) |
|
||||
| Product Analytics | [PostHog](/deploy/posthog) | Amplitude ($49/mo) |
|
||||
|
||||
**Total saved: ~$375/mo**
|
||||
|
||||
## The Philosophy
|
||||
|
||||
The DevOps Stack is for teams that refuse to be dependent on any single vendor. Every tool here:
|
||||
|
||||
- **Runs on standard Docker** — migrate anywhere in minutes
|
||||
- **Uses Postgres** — your data is in an open format
|
||||
- **Has an active community** — you're never truly on your own
|
||||
- **Scales horizontally** — grows with you without pricing tiers
|
||||
|
||||
## Server Requirements
|
||||
|
||||
This is the most resource-intensive stack. You need a proper server:
|
||||
|
||||
| Spec | Recommended |
|
||||
|---|---|
|
||||
| RAM | 8 GB minimum (16 GB ideal) |
|
||||
| CPU | 4 vCPU |
|
||||
| Storage | 80 GB SSD |
|
||||
| Cost | ~$15/mo (Hetzner CX32) |
|
||||
|
||||
## Deploy Guides
|
||||
|
||||
→ [Deploy Supabase](/deploy/supabase)
|
||||
→ [Deploy Coolify](/deploy/coolify)
|
||||
→ [Deploy Dokku](/deploy/dokku)
|
||||
→ [Deploy Plausible](/deploy/plausible)
|
||||
→ [Deploy PostHog](/deploy/posthog)
|
||||
152
docs/app/stacks/page.mdx
Normal file
152
docs/app/stacks/page.mdx
Normal file
@@ -0,0 +1,152 @@
|
||||
---
|
||||
title: Curated Stacks
|
||||
description: "Pre-tested bundles of open source tools designed for specific use cases. Save hundreds per month by self-hosting an entire toolkit."
|
||||
---
|
||||
|
||||
import { Rocket, Palette, Bot, Settings, Lock, ArrowRight, DollarSign, Layers } from 'lucide-react'
|
||||
|
||||
# Curated Stacks
|
||||
|
||||
**A Curated Stack is a pre-tested bundle of open source tools designed for a specific use case.** Instead of researching, comparing, and testing 50 tools yourself, we've done it for you.
|
||||
|
||||
Each stack tells you exactly which tools to deploy, in what order, on what hardware — and how much SaaS money you'll save.
|
||||
|
||||
## The 5 Stacks
|
||||
|
||||
<div className="premium-grid mt-8">
|
||||
|
||||
<a href="/stacks/bootstrapper" className="premium-card group">
|
||||
<div className="premium-card-title">
|
||||
<div className="p-2 rounded-lg bg-red-500/10 text-red-500 group-hover:bg-red-500/20 transition-colors">
|
||||
<Rocket size={20} />
|
||||
</div>
|
||||
<span>The Bootstrapper Stack</span>
|
||||
</div>
|
||||
<p className="premium-card-description">Full SaaS toolkit for solo founders. Database, auth, deployment, analytics, project management, and design.</p>
|
||||
<div className="flex items-center gap-4 mt-4 text-xs font-bold text-[var(--altstack-text-dim)]">
|
||||
<span className="text-green-500">Saves ~$310/mo</span>
|
||||
<span>6 tools</span>
|
||||
<span>4 GB RAM</span>
|
||||
</div>
|
||||
<div className="absolute bottom-6 right-6 opacity-0 group-hover:opacity-100 transition-opacity text-red-500">
|
||||
<ArrowRight size={18} />
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a href="/stacks/designer" className="premium-card group">
|
||||
<div className="premium-card-title">
|
||||
<div className="p-2 rounded-lg bg-purple-500/10 text-purple-500 group-hover:bg-purple-500/20 transition-colors">
|
||||
<Palette size={20} />
|
||||
</div>
|
||||
<span>The Designer Stack</span>
|
||||
</div>
|
||||
<p className="premium-card-description">Professional design tools that rival Adobe. UI/UX prototyping, photo editing, and digital art — all free.</p>
|
||||
<div className="flex items-center gap-4 mt-4 text-xs font-bold text-[var(--altstack-text-dim)]">
|
||||
<span className="text-green-500">Saves ~$110/mo</span>
|
||||
<span>4 tools</span>
|
||||
<span>4 GB RAM</span>
|
||||
</div>
|
||||
<div className="absolute bottom-6 right-6 opacity-0 group-hover:opacity-100 transition-opacity text-purple-500">
|
||||
<ArrowRight size={18} />
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a href="/stacks/ai-first" className="premium-card group">
|
||||
<div className="premium-card-title">
|
||||
<div className="p-2 rounded-lg bg-blue-500/10 text-blue-500 group-hover:bg-blue-500/20 transition-colors">
|
||||
<Bot size={20} />
|
||||
</div>
|
||||
<span>The AI-First Stack</span>
|
||||
</div>
|
||||
<p className="premium-card-description">Run powerful AI locally. LLMs, image generation, and code completion — no API keys, no usage limits.</p>
|
||||
<div className="flex items-center gap-4 mt-4 text-xs font-bold text-[var(--altstack-text-dim)]">
|
||||
<span className="text-green-500">Saves ~$69/mo</span>
|
||||
<span>5 tools</span>
|
||||
<span>8+ GB RAM</span>
|
||||
</div>
|
||||
<div className="absolute bottom-6 right-6 opacity-0 group-hover:opacity-100 transition-opacity text-blue-500">
|
||||
<ArrowRight size={18} />
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a href="/stacks/devops" className="premium-card group">
|
||||
<div className="premium-card-title">
|
||||
<div className="p-2 rounded-lg bg-orange-500/10 text-orange-500 group-hover:bg-orange-500/20 transition-colors">
|
||||
<Settings size={20} />
|
||||
</div>
|
||||
<span>The DevOps Stack</span>
|
||||
</div>
|
||||
<p className="premium-card-description">From backend to hosting to monitoring — deploy and manage your entire infrastructure with zero vendor lock-in.</p>
|
||||
<div className="flex items-center gap-4 mt-4 text-xs font-bold text-[var(--altstack-text-dim)]">
|
||||
<span className="text-green-500">Saves ~$375/mo</span>
|
||||
<span>5 tools</span>
|
||||
<span>4 GB RAM</span>
|
||||
</div>
|
||||
<div className="absolute bottom-6 right-6 opacity-0 group-hover:opacity-100 transition-opacity text-orange-500">
|
||||
<ArrowRight size={18} />
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a href="/stacks/privacy" className="premium-card group">
|
||||
<div className="premium-card-title">
|
||||
<div className="p-2 rounded-lg bg-green-500/10 text-green-500 group-hover:bg-green-500/20 transition-colors">
|
||||
<Lock size={20} />
|
||||
</div>
|
||||
<span>The Privacy Stack</span>
|
||||
</div>
|
||||
<p className="premium-card-description">Every tool runs on your infrastructure. Your data never touches a third-party server. Maximum data sovereignty.</p>
|
||||
<div className="flex items-center gap-4 mt-4 text-xs font-bold text-[var(--altstack-text-dim)]">
|
||||
<span className="text-green-500">Saves ~$185/mo</span>
|
||||
<span>6 tools</span>
|
||||
<span>4 GB RAM</span>
|
||||
</div>
|
||||
<div className="absolute bottom-6 right-6 opacity-0 group-hover:opacity-100 transition-opacity text-green-500">
|
||||
<ArrowRight size={18} />
|
||||
</div>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## How We Pick Tools
|
||||
|
||||
Every tool in a Curated Stack must pass five filters:
|
||||
|
||||
| Criteria | What It Means |
|
||||
|---|---|
|
||||
| **Actively maintained** | Regular commits, responsive maintainers, not abandonware |
|
||||
| **Docker-native** | Ships with official or well-maintained Docker images |
|
||||
| **Production-proven** | Used by real teams and individuals, not just demo projects |
|
||||
| **Honest quality** | We've actually deployed it. If the UX is rough, we say so |
|
||||
| **No vendor lock-in** | Standard data formats, exportable data, no proprietary traps |
|
||||
|
||||
We don't include tools because they're popular. We include them because they actually work when you deploy them on a $6/mo VPS.
|
||||
|
||||
## Which Stack Is Right for You?
|
||||
|
||||
| If you are... | Start with |
|
||||
|---|---|
|
||||
| A solo founder building a SaaS MVP | [The Bootstrapper Stack](/stacks/bootstrapper) |
|
||||
| A designer ditching Adobe subscriptions | [The Designer Stack](/stacks/designer) |
|
||||
| An AI enthusiast who wants to run models locally | [The AI-First Stack](/stacks/ai-first) |
|
||||
| A developer managing your own infrastructure | [The DevOps Stack](/stacks/devops) |
|
||||
| Anyone who cares deeply about data privacy | [The Privacy Stack](/stacks/privacy) |
|
||||
|
||||
## Mixing & Matching
|
||||
|
||||
Stacks aren't exclusive — tools overlap by design. Many teams run a combination:
|
||||
|
||||
- **Bootstrapper + AI-First** → SaaS toolkit with local AI capabilities
|
||||
- **DevOps + Privacy** → Full infrastructure with maximum data sovereignty
|
||||
- **Designer + Bootstrapper** → Creative team with SaaS backbone
|
||||
|
||||
The only constraint is hardware. Each stack page lists specific RAM, CPU, and storage requirements. If you're running multiple stacks, add the requirements together and size your VPS accordingly.
|
||||
|
||||
> 🔥 **Pro Tip:** Start with one stack. Get comfortable. Then layer on tools from other stacks as you need them. Trying to deploy everything at once is how people burn out.
|
||||
|
||||
## Build Your Own Stack
|
||||
|
||||
Don't see your perfect combination? Browse the [Deploy Guides](/deploy) — every tool has an independent deployment page. Pick the ones that fit your workflow and build a custom stack.
|
||||
|
||||
If you want to suggest a new Curated Stack, [open an issue on GitHub](https://github.com/AltStackHQ/docs/issues) and we'll consider adding it.
|
||||
47
docs/app/stacks/privacy/page.mdx
Normal file
47
docs/app/stacks/privacy/page.mdx
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: "The Privacy Stack"
|
||||
description: "Zero data leaks. Every tool runs on your infrastructure. Your data never touches a third-party server."
|
||||
---
|
||||
|
||||
# 🔒 The Privacy Stack
|
||||
|
||||
**Zero data leaks.** Every tool runs on your infrastructure. Your data never touches a third-party server. For teams and individuals who take privacy seriously.
|
||||
|
||||
| What | Tool | Replaces |
|
||||
|---|---|---|
|
||||
| Password Manager | [Bitwarden](/deploy/bitwarden) | 1Password ($3/mo) |
|
||||
| Team Chat | [Mattermost](/deploy/mattermost) | Slack ($7/mo) |
|
||||
| Video Calls | [Jitsi Meet](/deploy/jitsi-meet) | Zoom ($14/mo) |
|
||||
| Analytics | [Matomo](/deploy/matomo) | Google Analytics (free, sells your data) |
|
||||
| Notes & Docs | [AppFlowy](/deploy/appflowy) | Notion ($10/mo) |
|
||||
| Knowledge Base | [Affine](/deploy/affine) | Confluence ($6/mo) |
|
||||
|
||||
**Total saved: ~$185/mo**
|
||||
|
||||
## Why Privacy Matters
|
||||
|
||||
It's not about having "something to hide." It's about:
|
||||
|
||||
- **Compliance**: GDPR, HIPAA, SOC 2 — self-hosting makes audits simpler
|
||||
- **IP Protection**: Your internal docs and conversations stay *internal*
|
||||
- **Trust**: Your users' data is on your servers, not in someone else's quarterly report
|
||||
- **Sovereignty**: No foreign government can compel access to your data on a third-party server
|
||||
|
||||
## The Privacy Audit
|
||||
|
||||
For each tool in this stack, we verify:
|
||||
|
||||
- ✅ **No telemetry** (or can be disabled)
|
||||
- ✅ **No external API calls** after deployment
|
||||
- ✅ **Data stored locally** in your Postgres / filesystem
|
||||
- ✅ **End-to-end encryption** available where applicable
|
||||
- ✅ **Self-contained** — works offline
|
||||
|
||||
## Deploy Guides
|
||||
|
||||
→ [Deploy Bitwarden](/deploy/bitwarden)
|
||||
→ [Deploy Mattermost](/deploy/mattermost)
|
||||
→ [Deploy Jitsi Meet](/deploy/jitsi-meet)
|
||||
→ [Deploy Matomo](/deploy/matomo)
|
||||
→ [Deploy AppFlowy](/deploy/appflowy)
|
||||
→ [Deploy Affine](/deploy/affine)
|
||||
79
docs/app/why/page.mdx
Normal file
79
docs/app/why/page.mdx
Normal file
@@ -0,0 +1,79 @@
|
||||
---
|
||||
title: Why These Docs Exist
|
||||
description: "The AltStack Docs manifesto. Why we built these guides, what makes them different, and the rules we follow."
|
||||
---
|
||||
|
||||
# Why These Docs Exist
|
||||
|
||||
**Most self-hosting documentation is terrible.** Not because the tools are bad — because the docs are written by developers who already understand everything, for developers who already understand everything.
|
||||
|
||||
We built these docs to fix that.
|
||||
|
||||
## The Problem
|
||||
|
||||
Go try to self-host any popular open-source tool right now. Here's what you'll find:
|
||||
|
||||
- **Incomplete `docker-compose.yml` files** that reference environment variables nobody explains
|
||||
- **"Getting Started" guides** that skip the 3 steps where you actually get stuck
|
||||
- **Documentation written in 2019** for a codebase that's been rewritten twice since
|
||||
- **The dreaded "see the wiki"** link that leads to 47 half-finished pages
|
||||
|
||||
You're not stupid for finding this confusing. The documentation is genuinely bad.
|
||||
|
||||
## Our Philosophy
|
||||
|
||||
Every guide in these docs follows a simple principle:
|
||||
|
||||
> **If you can't go from zero to a working deployment by following this page alone, the page is broken.**
|
||||
|
||||
We don't write theoretical explanations of how Docker networking works and then wish you luck. We give you the config file. We explain what each line does. We tell you where it'll probably break and how to fix it.
|
||||
|
||||
## The 4 Rules
|
||||
|
||||
These aren't suggestions — they're the editorial standard every page must meet.
|
||||
|
||||
### 1. Every guide ends with a working deployment
|
||||
|
||||
Not "and then configure it to your needs." Not "refer to the upstream docs for advanced configuration." You will have a running tool by the end of the page. Period.
|
||||
|
||||
### 2. Every config is tested and copy-pasteable
|
||||
|
||||
We don't write configs from memory. Every `docker-compose.yml` in these docs has been deployed, broken, fixed, and deployed again. You can copy-paste them and they will work.
|
||||
|
||||
### 3. Every tool gets an honest verdict
|
||||
|
||||
We'll tell you when a tool is incredible. We'll also tell you when it's buggy, when the mobile app is unusable, or when you should just pay for the SaaS version. We don't have sponsors. We don't have affiliate deals. We have opinions.
|
||||
|
||||
### 4. We don't waste your time with filler
|
||||
|
||||
No "Introduction to What This Tool Is" sections that restate the tool's homepage copy. No "Prerequisites: a computer with an internet connection." If you're reading this, you know what a terminal is. Let's deploy something.
|
||||
|
||||
## What Makes Us Different
|
||||
|
||||
| Typical Docs | AltStack Docs |
|
||||
|---|---|
|
||||
| "Configure the environment variables as needed" | Here's every variable, what it does, and the sane default |
|
||||
| "Deploy using Docker" (no compose file provided) | Full `docker-compose.yml` ready to copy |
|
||||
| Written by the tool's maintainer (biased) | Written by users who deploy these tools (honest) |
|
||||
| Assumes you've read 12 other pages first | Self-contained. One page = one working deployment |
|
||||
| Last updated 2 years ago | Actively maintained with version-specific notes |
|
||||
|
||||
## Who's Behind This
|
||||
|
||||
These docs are part of [The AltStack](https://thealtstack.com) — **The World's First Sovereign Infrastructure Engine**. We're a curated directory that helps you find, compare, and deploy alternatives to proprietary tools.
|
||||
|
||||
We believe in software independence: the right to run your own tools, on your own servers, under your own terms. These docs are how we make that practical, not just philosophical.
|
||||
|
||||
## Where to Start
|
||||
|
||||
If you're brand new to self-hosting:
|
||||
|
||||
→ **[Quick Start](/quick-start)** — From zero to your first deployment in under 20 minutes
|
||||
|
||||
If you know what you're doing and want a config:
|
||||
|
||||
→ **[Deploy Guides](/deploy)** — 65+ tools with tested Docker Compose files
|
||||
|
||||
If you want a complete toolkit:
|
||||
|
||||
→ **[Curated Stacks](/stacks)** — Pre-built bundles for bootstrappers, designers, DevOps, AI, and privacy
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user