Misskey Docker Compose Setup: Self-Hosted Social Network (2026)
The Feature-Rich Fediverse Platform
Where Mastodon aims for simplicity and GoToSocial aims for minimalism, Misskey goes the opposite direction: maximum features. Emoji reactions (not just likes), a built-in drive for file management, customizable layouts, pages (personal websites within your instance), channels, antennas (custom filtered feeds), and MFM (Misskey Flavored Markdown) for expressive formatting. Official site
Created in Japan and popular across East Asia, Misskey has a vibrant ecosystem of forks (Firefish, Sharkey, Foundkey) and a passionate community. It federates with Mastodon, Pleroma, and the rest of the ActivityPub network.
Prerequisites
- A Linux server (Ubuntu 22.04+ recommended)
- Docker and Docker Compose installed (guide)
- 4 GB RAM minimum (Misskey is feature-heavy)
- 15 GB of free disk space
- A domain name
- SMTP credentials (recommended)
| Requirement | Minimum | Recommended |
|---|---|---|
| CPU | 2 cores | 4 cores |
| RAM | 2 GB | 4 GB |
| Disk | 15 GB | 30 GB+ |
| Optional | SMTP recommended |
Docker Compose Configuration
services:
misskey:
image: misskey/misskey:2025.11.1
restart: unless-stopped
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
ports:
- "127.0.0.1:3000:3000"
volumes:
- misskey-files:/misskey/files
- ./.config/default.yml:/misskey/.config/default.yml:ro
networks:
- misskey
db:
image: postgres:16-alpine
restart: unless-stopped
shm_size: 256mb
volumes:
- postgres-data:/var/lib/postgresql/data
environment:
POSTGRES_DB: misskey
POSTGRES_USER: misskey
POSTGRES_PASSWORD: change_this_password
healthcheck:
test: ["CMD-SHELL", "pg_isready -U misskey"]
interval: 10s
timeout: 5s
retries: 5
networks:
- misskey
redis:
image: redis:7-alpine
restart: unless-stopped
volumes:
- redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
networks:
- misskey
## Optional — full-text search
# meilisearch:
# image: getmeili/meilisearch:v1.12.8
# restart: unless-stopped
# environment:
# MEILI_MASTER_KEY: change_this_master_key
# MEILI_ENV: production
# volumes:
# - meilisearch-data:/meili_data
# networks:
# - misskey
networks:
misskey:
volumes:
postgres-data:
redis-data:
misskey-files:
# meilisearch-data:
Misskey Configuration (.config/default.yml)
Create .config/default.yml:
# Misskey configuration
# The URL of your Misskey instance (CANNOT be changed later)
url: https://misskey.example.com/
# Port to listen on
port: 3000
# Database
db:
host: db
port: 5432
db: misskey
user: misskey
pass: change_this_password
# Redis
redis:
host: redis
port: 6379
# Redis for job queues (can use same Redis instance)
redisForPubsub:
host: redis
port: 6379
redisForJobQueue:
host: redis
port: 6379
redisForTimelines:
host: redis
port: 6379
# Object storage (optional — for larger instances)
# objectStorage:
# baseUrl: https://s3.example.com
# bucket: misskey
# prefix: files
# endpoint: s3.example.com
# region: us-east-1
# accessKey: your_access_key
# secretKey: your_secret_key
# MeiliSearch (optional)
# meilisearch:
# host: meilisearch
# port: 7700
# apiKey: change_this_master_key
# Proxy (optional)
# proxy: http://proxy:3128
# Max file size (in bytes, default 262144000 = 250 MB)
maxFileSize: 262144000
# ID generation method
id: aidx
# Syslog (optional)
# syslog:
# host: localhost
# port: 514
First Launch
# Create config directory
mkdir -p .config
# Start services
docker compose up -d
# Initialize the database (first time only)
docker compose exec misskey pnpm run init
# Restart after initialization
docker compose restart misskey
Initial Setup
- Navigate to
https://misskey.example.com - Create the first account — this becomes the admin
- Go to Control Panel (gear icon → Administration) to configure:
- Instance name, description, icon
- Registration settings (open, invite-only, closed)
- Federation policies
- Object storage (if using S3)
- Email delivery settings
Configuration
Control Panel Settings
| Section | What You Configure |
|---|---|
| General | Instance name, description, theme color, icon |
| Users | Registration mode, email verification, approval queue |
| Federation | Instance allowlist/blocklist, federation controls |
| Security | Rate limits, CAPTCHA, IP blocks |
| Files | Storage backend (local or S3), max file sizes |
| SMTP settings for notifications | |
| Roles | Custom roles with granular permissions |
| Moderation | Reports queue, word filters, NSFW settings |
Unique Misskey Features
| Feature | Description |
|---|---|
| Emoji reactions | React to posts with any emoji, not just likes |
| MFM | Misskey Flavored Markdown — animated text, sparkle, shake |
| Drive | Built-in file manager for all your uploads |
| Pages | Create personal web pages within your instance |
| Channels | Topic-specific feeds separate from the main timeline |
| Antennas | Custom filtered feeds based on keywords, users, or criteria |
| Clips | Save and organize posts into collections |
| Custom CSS | Per-user custom stylesheets |
Reverse Proxy
Misskey listens on port 3000. HTTPS via reverse proxy is required for federation.
Caddy:
misskey.example.com {
reverse_proxy localhost:3000
}
See our Reverse Proxy Setup guide.
Backup
# Database
docker compose exec db pg_dump -U misskey misskey > misskey_backup_$(date +%F).sql
# Uploaded files
docker run --rm -v misskey_misskey-files:/data -v $(pwd):/backup \
alpine tar czf /backup/misskey_files_$(date +%F).tar.gz -C /data .
Back up default.yml too. See our Backup Strategy guide.
Troubleshooting
White Screen After First Launch
Symptom: Browser shows blank page at your domain.
Fix: The database likely isn’t initialized. Run docker compose exec misskey pnpm run init and restart the container. Check logs: docker compose logs misskey.
Federation Issues
Symptom: Remote users can’t find your instance.
Fix: Verify url in default.yml exactly matches your actual URL (include https:// and trailing /). This value is immutable after first run. Ensure HTTPS works and your reverse proxy passes correct headers.
High Memory Usage
Symptom: Misskey consuming 2+ GB RAM.
Fix: Misskey is a Node.js application and uses significant memory. With MeiliSearch enabled, expect even more. Reduce maxFileSize, disable unused features, or add swap space for servers with limited RAM.
Job Queue Backing Up
Symptom: Notifications delayed, federation slow. Fix: Check the job queue at Administration → Job Queue. Heavy federation traffic can overwhelm a small server. Scale horizontally by running multiple Misskey processes or optimize PostgreSQL performance.
Image Thumbnails Not Generating
Symptom: Uploaded images show without thumbnails. Fix: Misskey uses Sharp for image processing. Check container logs for Sharp-related errors. The container needs sufficient memory for image processing — at least 1 GB available.
Resource Requirements
| Resource | Single User | Small Instance (50 users) |
|---|---|---|
| RAM | 1-2 GB | 3-4 GB |
| CPU | 2 cores | 4 cores |
| Disk | 10 GB | 30+ GB |
| Bandwidth | 10 GB/month | 50 GB/month |
Misskey is heavier than Pleroma and GoToSocial due to its feature set. Comparable to Mastodon in resource usage. MeiliSearch adds ~500 MB RAM when enabled.
Verdict
Misskey is the most feature-rich fediverse platform available. If you want emoji reactions, animated text, custom pages, file management, and every social feature imaginable, nothing else compares. The trade-off is complexity and resource usage — this isn’t a lightweight install.
Choose Misskey if you want maximum features and expressiveness in your fediverse experience. Popular in the art, anime, and creative communities. Great if Mastodon feels too restrictive.
Look elsewhere if you want simplicity. Mastodon is more polished and better documented. GoToSocial or Pleroma use far fewer resources.
FAQ
What about Firefish, Sharkey, and other forks?
Misskey has spawned several forks. Firefish (formerly Calckey) adds more Mastodon-like features. Sharkey is another active fork. All are compatible with the Misskey client ecosystem and federate with each other. Stick with mainline Misskey for the most active upstream development.
Can I use Mastodon clients with Misskey?
Partially. Misskey has its own API, but also implements parts of the Mastodon API. Some Mastodon clients work with reduced functionality. For the best experience, use Misskey-native clients like Misskey Web, MisskeyDroid, or Milktea.
Is the Japanese documentation a problem?
Misskey Hub has English documentation, though some pages are machine-translated. The community Discord has an active English-speaking section. Configuration is straightforward once the initial setup is done.
How often does Misskey update?
Very frequently. Misskey releases new versions roughly monthly. Updates sometimes include database migrations, so always check the changelog before upgrading.
Related
Get self-hosting tips in your inbox
Get the Docker Compose configs, hardware picks, and setup shortcuts we don't put in articles. Weekly. No spam.
Comments