Railway

Deploy Misskey

Decentralized microblogging server for running your own social site

Deploy Misskey

/var/lib/postgresql/data

Just deployed

/meili_data

Just deployed

/data

Just deployed

/misskey/files

Deploy and Host Misskey on Railway

Misskey is an open-source, decentralized microblogging server that speaks ActivityPub, so an instance you run yourself joins the same fediverse as Mastodon and Akkoma. It is the most feature-dense server in that network: custom emoji reactions instead of a single like button, MFM rich text with animated inline effects, a Drive that stores every upload as a reusable object, Antennas that build live keyword timelines, and Pages and Play for AiScript apps. Communities self-host Misskey for their own moderation rules, their own domain in every handle, and no ranking algorithm over the timeline.

Deploy Misskey on Railway and this template wires up the whole production shape: the Misskey server, a managed PostgreSQL database holding accounts, notes and follows, managed Redis driving the job queue, timelines, reactions and the streaming API, and Meilisearch answering full-text note search. A volume is mounted at the Drive path so uploaded avatars, banners and attachments survive every redeploy, and the app is published on an HTTPS domain behind a health check that passes only when PostgreSQL, Redis and Meilisearch all answer.

Misskey service on Railway with Postgres, Meilisearch and Redis

Getting Started with Misskey on Railway

Open the deployed URL and you land on the instance's welcome page. Misskey ships no default account and no default password: you create the first administrator, and the SETUP_PASSWORD variable on the Misskey service protects that one-time window — copy it from the service's variables, click Sign up at this instance, and enter it with the username and password you want. Post your first note with the green Note button to confirm the database and job queue work, then upload an image under Drive to confirm the volume serves files back.

Two shipped defaults are worth changing in that first session. Open Control Panel → Federation and switch federation on — a new instance is deliberately isolated, so until you do, your notes never leave the server. Then open Control Panel → Roles and enable canSearchNotes on the base role, which makes Meilisearch-backed search visible to members. Registration ships closed: invite people from Control Panel → Invite, or open sign-ups there once you can moderate them.

Misskey home timeline showing four notes and trending hashtags

Misskey note search returning two Meilisearch-indexed results

Misskey control panel dashboard with instance stats and management menu

About Hosting Misskey

Misskey is a full social platform, not a thin ActivityPub relay. The server is a TypeScript application on Fastify and NestJS: it renders its own web client, exposes a documented HTTP API and a WebSocket streaming API, and delivers federation traffic through a Redis-backed job queue. Self-hosting suits a community that wants its own namespace and keeps moderation and its social graph local.

Key features:

  • Custom emoji reactions, quote renotes, polls and content warnings
  • MFM rich text with animations, colours and inline maths
  • Drive file manager with folders and reusable attachments
  • Antennas, channels, clips, Pages and AiScript Play apps
  • ActivityPub federation with per-instance moderation and blocks
  • A control panel for users, roles, invites, emoji and jobs

How the services fit together: the Misskey service handles HTTP and WebSocket traffic in its cluster master while each cluster worker consumes the job queue, so federation delivery, inbox processing and timeline fan-out stay out of the request path. PostgreSQL is the system of record for users, notes, follows and drive metadata. Redis carries the job queue, cached timelines, reaction counts and the streaming pub/sub. Meilisearch indexes each note as it is posted.

Why Deploy Misskey on Railway

Railway removes the parts of running a fediverse server that are not your community.

  • PostgreSQL, Redis and Meilisearch provisioned and privately networked
  • HTTPS domain issued automatically, certificates renewed
  • A persistent volume for the Drive, so uploads survive redeploys
  • Health checks that verify the database, cache and search engine
  • Job-queue worker count adjustable from one variable

Common Use Cases

  • A private social space for a company, lab, club or open-source project, invite-only
  • A public community instance around a shared interest, federating under local moderation rules
  • A creator's own handle and home server, so followers reach them at their own domain
  • A testbed for ActivityPub work against the API, streaming socket and federation

Dependencies for Misskey

  • Misskeygridalpha/misskey-railway, one layer on misskey/misskey:latest that renders Misskey's YAML config from environment variables at boot
  • PostgreSQL 18 — Railway-managed; accounts, notes, follows, drive metadata, settings
  • Redis 8.2 — Railway-managed; job queue, timelines, reaction counts, streaming pub/sub
  • Meilisearch v1 (getmeili/meilisearch:v1) — full-text note search index

Environment Variables Reference

VariableServicePurpose
MISSKEY_URLMisskeyPermanent public origin, in every ActivityPub id
SETUP_PASSWORDMisskeySecret needed to create the first administrator
CLUSTER_LIMITMisskeyJob-queue worker processes
MAX_FILE_SIZEMisskeyUpload size ceiling in bytes
FULLTEXT_SEARCH_PROVIDERMisskeymeilisearch or sqlLike
MEILI_MASTER_KEYMeilisearchRoot API key for the search engine

Deployment Dependencies

Hardware Requirements for Self-Hosting Misskey

ResourceMinimumRecommended
CPU1 vCPU2–4 vCPU
RAM1 GB4 GB+
Storage5 GB volume20 GB+, grows with the Drive
RuntimeNode.js 22+, PostgreSQL 15+, Redis 7+Plus Meilisearch

Memory bites first: each job-queue worker is a full copy of the application, and a federating instance keeps a working set of remote posts in PostgreSQL and Redis. Storage grows with uploads, faster with remote media caching on.

Self-Hosting Misskey

Misskey publishes an official image, so the shortest path is Docker Compose with PostgreSQL and Redis beside it — a minimal docker-compose.yml:

services:
  misskey:
    image: misskey/misskey:latest
    ports: ["3000:3000"]
    volumes:
      - ./config:/misskey/.config:ro
      - ./files:/misskey/files
    depends_on: [db, redis]
  db:
    image: postgres:18-alpine
    environment: { POSTGRES_DB: misskey, POSTGRES_USER: misskey, POSTGRES_PASSWORD: change-me }
  redis:
    image: redis:8-alpine

Misskey has no environment-variable configuration — it compiles .config/default.yml on every start — so copy the example and edit it before first boot:

git clone --depth 1 https://github.com/misskey-dev/misskey.git
cd misskey && cp .config/example.yml .config/default.yml
# set url, db.host/db/user/pass, redis.host and setupPassword
docker compose up -d

Then put a TLS-terminating reverse proxy in front of port 3000. Misskey requires HTTPS in production, and url must match the final public address and never change.

How Much Does Misskey Cost to Self-Host?

Misskey is free and open source under the AGPL-3.0 licence. There is no paid tier, no seat pricing and no feature behind a subscription — the server, client and API are the same code every public instance runs. Self-hosting on Railway costs only the infrastructure the four services consume, scaling with members and Drive usage.

FAQ

What is Misskey? Misskey is an open-source, decentralized microblogging server built on ActivityPub. Instances federate with each other and with Mastodon, so people on separate servers follow, reply and react across the fediverse.

What does this Railway template deploy? Four services: the Misskey server on a public HTTPS domain with a volume for its Drive, a managed PostgreSQL database, managed Redis, and Meilisearch for full-text note search.

Why does the template include Redis and Meilisearch? Redis is not optional in Misskey — it holds the job queue that delivers federated activities, plus cached timelines, reaction counts and the streaming pub/sub. Meilisearch is optional but recommended: without it, search falls back to SQL LIKE scans that slow as the instance grows.

How do I create the admin account on a self-hosted Misskey instance? Open the deployed URL and choose Sign up at this instance. While no administrator exists, Misskey asks for SETUP_PASSWORD first; afterwards that route closes permanently.

Can I change the instance domain after setup? No. Misskey embeds the configured URL in every ActivityPub identifier it emits, and remote servers cache those. Decide the final domain — including any custom domain — before creating the first account.

How do I make Misskey search work for my users? Search is gated by a role policy: in Control Panel → Roles, enable canSearchNotes on the base role. Meilisearch already indexes every note posted. Raise CLUSTER_LIMIT to add job-queue workers as traffic grows.


Template Content

More templates in this category

View Template
Rocky Linux
Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀

codestorm
44
View Template
Foundry Virtual Tabletop
A Self-Hosted & Modern Roleplaying Platform

Lucas
71
View Template
Letta Code Remote
Run a Letta Code agent 24/7. No inbound ports, just deploy.

Letta
51