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)
RequirementMinimumRecommended
CPU2 cores4 cores
RAM2 GB4 GB
Disk15 GB30 GB+
EmailOptionalSMTP 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

  1. Navigate to https://misskey.example.com
  2. Create the first account — this becomes the admin
  3. 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

SectionWhat You Configure
GeneralInstance name, description, theme color, icon
UsersRegistration mode, email verification, approval queue
FederationInstance allowlist/blocklist, federation controls
SecurityRate limits, CAPTCHA, IP blocks
FilesStorage backend (local or S3), max file sizes
EmailSMTP settings for notifications
RolesCustom roles with granular permissions
ModerationReports queue, word filters, NSFW settings

Unique Misskey Features

FeatureDescription
Emoji reactionsReact to posts with any emoji, not just likes
MFMMisskey Flavored Markdown — animated text, sparkle, shake
DriveBuilt-in file manager for all your uploads
PagesCreate personal web pages within your instance
ChannelsTopic-specific feeds separate from the main timeline
AntennasCustom filtered feeds based on keywords, users, or criteria
ClipsSave and organize posts into collections
Custom CSSPer-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

ResourceSingle UserSmall Instance (50 users)
RAM1-2 GB3-4 GB
CPU2 cores4 cores
Disk10 GB30+ GB
Bandwidth10 GB/month50 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.

Comments