Files
altstack-data/docs/app/deploy/affine/page.mdx
2026-02-25 22:36:27 +05:30

172 lines
4.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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)