---
title: "Deploy Misskey"
description: "Decentralized microblogging server for running your own social site"
category: "Other"
url: https://railway.com/deploy/misskey
---

# Deploy Misskey

Decentralized microblogging server for running your own social site

**[Deploy Misskey on Railway](https://railway.com/template/misskey)**

- **Creator:** A3A
- **Category:** Other

## Template content

### Postgres https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18

### meilisearch https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/meilisearch.svg

- **Image:** getmeili/meilisearch:v1
- **Start command:** `/bin/sh -c 'mkdir -p /meili_data/tmp /meili_data/snapshots /meili_data/dumps; exec tini -s -- /bin/meilisearch'`
- **Health check:** /health

### Redis https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/redis.svg

- **Image:** redis:8.2
- **Start command:** `/bin/sh -c "rm -rf $RAILWAY_VOLUME_MOUNT_PATH/lost+found/ && exec docker-entrypoint.sh redis-server --requirepass $REDIS_PASSWORD --save 60 1 --dir $RAILWAY_VOLUME_MOUNT_PATH"`

### misskey https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/misskey-light.svg

- **Source:** https://github.com/gridalpha/misskey-railway
- **Health check:** /healthz
- **Public domain:** Yes

## Documentation

# 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](https://res.cloudinary.com/rroe4rtk/image/upload/v1788365765/misskey-architecture.png)

## 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](https://res.cloudinary.com/rroe4rtk/image/upload/v1788365769/misskey-home-timeline.png)

![Misskey note search returning two Meilisearch-indexed results](https://res.cloudinary.com/rroe4rtk/image/upload/v1788365770/misskey-search-results.png)

![Misskey control panel dashboard with instance stats and management menu](https://res.cloudinary.com/rroe4rtk/image/upload/v1788365779/misskey-control-panel.png)

## 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

- **Misskey** — [gridalpha/misskey-railway](https://github.com/gridalpha/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

| Variable | Service | Purpose |
|---|---|---|
| `MISSKEY_URL` | Misskey | Permanent public origin, in every ActivityPub id |
| `SETUP_PASSWORD` | Misskey | Secret needed to create the first administrator |
| `CLUSTER_LIMIT` | Misskey | Job-queue worker processes |
| `MAX_FILE_SIZE` | Misskey | Upload size ceiling in bytes |
| `FULLTEXT_SEARCH_PROVIDER` | Misskey | `meilisearch` or `sqlLike` |
| `MEILI_MASTER_KEY` | Meilisearch | Root API key for the search engine |

### Deployment Dependencies

- Source: [github.com/misskey-dev/misskey](https://github.com/misskey-dev/misskey)
- Image: [hub.docker.com/r/misskey/misskey](https://hub.docker.com/r/misskey/misskey)
- Docs: [misskey-hub.net](https://misskey-hub.net/)

## Hardware Requirements for Self-Hosting Misskey

| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU | 2–4 vCPU |
| RAM | 1 GB | 4 GB+ |
| Storage | 5 GB volume | 20 GB+, grows with the Drive |
| Runtime | Node.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.


## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/misskey
