---
title: "Deploy Flagsmith | (Just Updated) Feature Flag Server, LaunchDarkly Alternative, Admin And SDK Keys Ready"
description: "Flagsmith feature flags and remote config API, admin and SDK keys set"
category: "Other"
url: https://railway.com/deploy/flagsmith-or-just-updated-feature-flag-s
---

# Deploy Flagsmith | (Just Updated) Feature Flag Server, LaunchDarkly Alternative, Admin And SDK Keys Ready

Flagsmith feature flags and remote config API, admin and SDK keys set

**[Deploy Flagsmith | (Just Updated) Feature Flag Server, LaunchDarkly Alternative, Admin And SDK Keys Ready on Railway](https://railway.com/template/flagsmith-or-just-updated-feature-flag-s)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/flagsmith-or-just-updated-feature-flag-s/manifest.json

- **Creator:** SuperSlowSloth
- **Category:** Other

## Template content

### flagsmith

- **Image:** flagsmith/flagsmith:2.288.2@sha256:803ea1a3ba79806dd9a35043a4e5bb53f8fdddd7776ba3bdaa9a118cc8a3589b
- **Start command:** `/bin/sh -c 'echo IyEvYmluL3NoCiMgUmFpbHdheSBib290IGZvciBGbGFnc21pdGggKEFQSSArIGFkbWluIGRhc2hib2FyZCBpbiBvbmUgY29udGFpbmVyKS4KIwojIFRoZSBzdG9jayBpbWFnZSByZWFkcyBpdHMgc2V0dGluZ3MgZnJvbSB0aGUgZW52aXJvbm1lbnQsIGJ1dCBhIHRlbXBsYXRlIGNhbm5vdCBjYXJyeQojIGxpdGVyYWxzICh0ZW1wbGF0ZUdlbmVyYXRlIGRyb3BzIHRoZW0pLCBzbyB0aGV5IGFyZSBleHBvcnRlZCBoZXJlLiBJdCBhbHNvIGhhcyBubyB3YXkKIyB0byBzZXQgYW4gYWRtaW4gcGFzc3dvcmQgZnJvbSB0aGUgZW52aXJvbm1lbnQ6IHRoZSBmaXJzdCB2aXNpdG9yIHRvIHRoZSBpbml0IFVSTCB3b3VsZAojIGNsYWltIHRoZSBhZG1pbiBhY2NvdW50LiBUaGlzIHNjcmlwdCBtaWdyYXRlcywgdGhlbiBjcmVhdGVzIHRoZSBhZG1pbiwgYW4gb3JnYW5pc2F0aW9uLAojIGEgcHJvamVjdCwgYSBmaXhlZCBlbnZpcm9ubWVudCBrZXkgYW5kIGZpeGVkIEFQSSB0b2tlbnMgZnJvbSBnZW5lcmF0ZWQgdmFyaWFibGVzCiMgKGlkZW1wb3RlbnQpLCBhbmQgc3dpdGNoZXMgdGhlIGluaXQgVVJMIGFuZCBvcGVuIHJlZ2lzdHJhdGlvbiBvZmYuCnNldCAtZXUKCmV4cG9ydCBQT1JUPSIke1BPUlQ6LTgwODB9IgpleHBvcnQgR1VOSUNPUk5fQ01EX0FSR1M9Ii0tYmluZCBbOjpdOiRQT1JUIgpleHBvcnQgREpBTkdPX0FMTE9XRURfSE9TVFM9IioiCmV4cG9ydCBESkFOR09fQ1NSRl9UUlVTVEVEX09SSUdJTlM9Imh0dHBzOi8vJHtSQUlMV0FZX1BVQkxJQ19ET01BSU46LWxvY2FsaG9zdH0iCmV4cG9ydCBVU0VfWF9GT1JXQVJERURfSE9TVD10cnVlCmV4cG9ydCBBTExPV19BRE1JTl9JTklUSUFUSU9OX1ZJQV9VUkw9RmFsc2UKZXhwb3J0IEFMTE9XX1JFR0lTVFJBVElPTl9XSVRIT1VUX0lOVklURT1GYWxzZQpleHBvcnQgR1VOSUNPUk5fV09SS0VSUz0iJHtHVU5JQ09STl9XT1JLRVJTOi0yfSIKCmVjaG8gIltyYWlsd2F5XSBmbGFnc21pdGggdWlkPSQoaWQgLXUpIHBvcnQ9JFBPUlQgYWRtaW49JEZMQUdTTUlUSF9BRE1JTl9FTUFJTCIKCmZsYWdzbWl0aCB3YWl0Zm9yZGIKZmxhZ3NtaXRoIG1pZ3JhdGUKCmNhdCA+IC90bXAvYm9vdHN0cmFwLnB5IDw8J0VPUFknCmltcG9ydCBvcwoKZnJvbSBkamFuZ28uY29udHJpYi5hdXRoIGltcG9ydCBnZXRfdXNlcl9tb2RlbApmcm9tIHJlc3RfZnJhbWV3b3JrLmF1dGh0b2tlbi5tb2RlbHMgaW1wb3J0IFRva2VuCgpmcm9tIGVudmlyb25tZW50cy5tb2RlbHMgaW1wb3J0IEVudmlyb25tZW50LCBFbnZpcm9ubWVudEFQSUtleQpmcm9tIG9yZ2FuaXNhdGlvbnMubW9kZWxzIGltcG9ydCBPcmdhbmlzYXRpb24sIE9yZ2FuaXNhdGlvblJvbGUsIFVzZXJPcmdhbmlzYXRpb24KZnJvbSBwcm9qZWN0cy5tb2RlbHMgaW1wb3J0IFByb2plY3QKClVzZXIgPSBnZXRfdXNlcl9tb2RlbCgpCmVtYWlsID0gb3MuZW52aXJvblsiRkxBR1NNSVRIX0FETUlOX0VNQUlMIl0uc3RyaXAoKS5sb3dlcigpCnBhc3N3b3JkID0gb3MuZW52aXJvblsiRkxBR1NNSVRIX0FETUlOX1BBU1NXT1JEIl0KCnVzZXIgPSBVc2VyLm9iamVjdHMuZmlsdGVyKGVtYWlsX19pZXhhY3Q9ZW1haWwpLmZpcnN0KCkKaWYgdXNlciBpcyBOb25lOgogICAgdXNlciA9IFVzZXIub2JqZWN0cy5jcmVhdGVfc3VwZXJ1c2VyKAogICAgICAgIGVtYWlsPWVtYWlsLAogICAgICAgIHBhc3N3b3JkPXBhc3N3b3JkLAogICAgICAgIGZpcnN0X25hbWU9IkFkbWluIiwKICAgICAgICBsYXN0X25hbWU9IkZsYWdzbWl0aCIsCiAgICAgICAgc2lnbl91cF90eXBlPSJOT19JTlZJVEUiLAogICAgICAgIGlzX2FjdGl2ZT1UcnVlLAogICAgKQogICAgcHJpbnQoIltyYWlsd2F5XSBjcmVhdGVkIGFkbWluIiwgZW1haWwpCmVsc2U6CiAgICB1c2VyLnNldF9wYXNzd29yZChwYXNzd29yZCkKICAgIHVzZXIuaXNfYWN0aXZlID0gVHJ1ZQogICAgdXNlci5zYXZlKCkKICAgIHByaW50KCJbcmFpbHdheV0gYWRtaW4iLCBlbWFpbCwgInBhc3N3b3JkIHJlLWFwcGxpZWQiKQoKb3JnID0gT3JnYW5pc2F0aW9uLm9iamVjdHMuZmlsdGVyKG5hbWU9IkRlZmF1bHQiKS5maXJzdCgpIG9yIE9yZ2FuaXNhdGlvbi5vYmplY3RzLmNyZWF0ZShuYW1lPSJEZWZhdWx0IikKaWYgbm90IFVzZXJPcmdhbmlzYXRpb24ub2JqZWN0cy5maWx0ZXIodXNlcj11c2VyLCBvcmdhbmlzYXRpb249b3JnKS5leGlzdHMoKToKICAgIHVzZXIuYWRkX29yZ2FuaXNhdGlvbihvcmcsIE9yZ2FuaXNhdGlvblJvbGUuQURNSU4pCgpwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmZpbHRlcihvcmdhbmlzYXRpb249b3JnLCBuYW1lPSJEZWZhdWx0IikuZmlyc3QoKQppZiBwcm9qZWN0IGlzIE5vbmU6CiAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZShuYW1lPSJEZWZhdWx0Iiwgb3JnYW5pc2F0aW9uPW9yZykKCmVudiA9IEVudmlyb25tZW50Lm9iamVjdHMuZmlsdGVyKHByb2plY3Q9cHJvamVjdCwgbmFtZT0iUHJvZHVjdGlvbiIpLmZpcnN0KCkKaWYgZW52IGlzIE5vbmU6CiAgICBlbnYgPSBFbnZpcm9ubWVudC5vYmplY3RzLmNyZWF0ZShuYW1lPSJQcm9kdWN0aW9uIiwgcHJvamVjdD1wcm9qZWN0KQpjbGllbnRfa2V5ID0gb3MuZW52aXJvblsiRkxBR1NNSVRIX0VOVklST05NRU5UX0tFWSJdCmlmIGVudi5hcGlfa2V5ICE9IGNsaWVudF9rZXk6CiAgICBlbnYuYXBpX2tleSA9IGNsaWVudF9rZXkKICAgIGVudi5zYXZlKCkKCnNlcnZlcl9rZXkgPSBvcy5lbnZpcm9uWyJGTEFHU01JVEhfU0VSVkVSX0tFWSJdCkVudmlyb25tZW50QVBJS2V5Lm9iamVjdHMuZmlsdGVyKGVudmlyb25tZW50PWVudikuZXhjbHVkZShrZXk9c2VydmVyX2tleSkuZGVsZXRlKCkKaWYgbm90IEVudmlyb25tZW50QVBJS2V5Lm9iamVjdHMuZmlsdGVyKGtleT1zZXJ2ZXJfa2V5KS5leGlzdHMoKToKICAgIEVudmlyb25tZW50QVBJS2V5Lm9iamVjdHMuY3JlYXRlKGVudmlyb25tZW50PWVudiwgbmFtZT0icmFpbHdheS1zZXJ2ZXIta2V5Iiwga2V5PXNlcnZlcl9rZXkpCgp0b2tlbiA9IG9zLmVudmlyb25bIkZMQUdTTUlUSF9BRE1JTl9BUElfVE9LRU4iXQpUb2tlbi5vYmplY3RzLmZpbHRlcih1c2VyPXVzZXIpLmV4Y2x1ZGUoa2V5PXRva2VuKS5kZWxldGUoKQppZiBub3QgVG9rZW4ub2JqZWN0cy5maWx0ZXIoa2V5PXRva2VuKS5leGlzdHMoKToKICAgIFRva2VuLm9iamVjdHMuY3JlYXRlKHVzZXI9dXNlciwga2V5PXRva2VuKQpwcmludCgiW3JhaWx3YXldIGJvb3RzdHJhcCBkb25lOiBvcmciLCBvcmcuaWQsICJwcm9qZWN0IiwgcHJvamVjdC5pZCwgImVudmlyb25tZW50IiwgZW52LmlkKQpFT1BZCgpmbGFnc21pdGggc2hlbGwgPCAvdG1wL2Jvb3RzdHJhcC5weQoKZXhlYyBmbGFnc21pdGggc2VydmUK | base64 -d > /tmp/boot.sh; exec /bin/sh /tmp/boot.sh'`
- **Health check:** /health
- **Public domain:** Yes

### postgres

- **Image:** postgres:17-alpine

## Documentation

# Deploy and Host Flagsmith on Railway

**Built for an LLM agent to deploy and use.** There is no setup wizard and nothing to fill in: the admin login, an admin API token, an environment key for client SDKs and a server key for server SDKs are generated at deploy time and are valid from the first boot. Signup and the first-visitor admin claim are closed. The contract below lists every URL, variable name and the one script that proves it works.

Flagsmith is an open-source feature flag and remote config service: gradual rollouts, segments, A/B tests, kill switches and per-environment values, with SDKs for most languages. This template runs Flagsmith (API and admin dashboard) together with a PostgreSQL database.

## About Hosting Flagsmith

This template runs two services. `flagsmith` is the official **Flagsmith 2.288.2** image (`flagsmith/flagsmith`, pinned by digest), serving the dashboard and the API from one container. It is stateless: flags, projects, users and keys all live in PostgreSQL. `postgres` is the official **postgres:17-alpine** image with a volume at `/var/lib/postgresql`, reachable only on the private network. The `flagsmith` start command waits for the database, runs migrations, then creates or re-applies the admin user, an organisation named Default, a project named Default and an environment named Production with the keys taken from the service variables, and starts the server. The same values apply after every redeploy. Allow about two minutes for the first deploy to turn healthy.

### Agent contract

- Public URL: `https://` plus the `RAILWAY_PUBLIC_DOMAIN` of the `flagsmith` service, used as `FLAGSMITH_URL`. It serves the dashboard at `/`, the admin API under `/api/v1` and the SDK API under `/api/v1/flags`.
- Private URL: `http://flagsmith.railway.internal:8080`
- Credentials: dashboard login with the email in `FLAGSMITH_ADMIN_EMAIL` and the password in `FLAGSMITH_ADMIN_PASSWORD`; `FLAGSMITH_ADMIN_API_TOKEN` (full admin API access), `FLAGSMITH_ENVIRONMENT_KEY` (client-side SDKs, environment Production) and `FLAGSMITH_SERVER_KEY` (server-side SDKs, same environment).
- Auth: admin API, send `Authorization: Token` followed by the admin token. SDK API, send the header `X-Environment-Key` with the environment key or the server key.
- Health: `GET /health` returns 200 with no credentials

```bash
# run with FLAGSMITH_URL, FLAGSMITH_ADMIN_API_TOKEN, FLAGSMITH_ENVIRONMENT_KEY, FLAGSMITH_SERVER_KEY, FLAGSMITH_ADMIN_EMAIL and FLAGSMITH_ADMIN_PASSWORD set; needs curl
A="Authorization: Token $FLAGSMITH_ADMIN_API_TOKEN"
F="agent_check_$(date +%s)"
curl -s -o /dev/null -w 'health %{http_code}\n' "$FLAGSMITH_URL/health"
curl -s -o /dev/null -w 'anonymous %{http_code}\n' "$FLAGSMITH_URL/api/v1/projects/"
P=$(curl -fsS -H "$A" "$FLAGSMITH_URL/api/v1/projects/" | sed -n 's/^\[{"id":\([0-9]*\).*/\1/p')
echo "project $P"
curl -fsS -H "$A" -H 'Content-Type: application/json' -d "{\"name\":\"$F\",\"default_enabled\":true}" "$FLAGSMITH_URL/api/v1/projects/$P/features/" -o /dev/null -w 'create flag %{http_code}\n'
curl -fsS -H "X-Environment-Key: $FLAGSMITH_ENVIRONMENT_KEY" "$FLAGSMITH_URL/api/v1/flags/" | grep -o "\"name\":\"$F\""
curl -fsS -H "X-Environment-Key: $FLAGSMITH_SERVER_KEY" "$FLAGSMITH_URL/api/v1/flags/" | grep -o '"enabled":true'
curl -fsS -H 'Content-Type: application/json' -d "{\"email\":\"$FLAGSMITH_ADMIN_EMAIL\",\"password\":\"$FLAGSMITH_ADMIN_PASSWORD\"}" "$FLAGSMITH_URL/api/v1/auth/login/" -o /dev/null -w 'admin login %{http_code}\n'
```

A fresh deploy prints `health 200`, `anonymous 401`, a project id, `create flag 201`, the flag name, `"enabled":true` and `admin login 200`. Point any Flagsmith SDK at `FLAGSMITH_URL/api/v1/` with the environment key, or open `FLAGSMITH_URL` and sign in with the admin email and password.

## Why Deploy Flagsmith on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Flagsmith on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.

- **Agent-ready** - generated admin login, admin API token and SDK keys that work on first boot, a contract block and one working script; no setup step.
- **Closed by default** - open signup and the first-visitor admin claim are switched off, so nobody else can take the admin account of a fresh deploy.
- **Stable credentials** - the password, token and keys are the same after every redeploy.
- **State survives redeploys** - flags, projects and users live in PostgreSQL on a volume.
- **Private database** - PostgreSQL has no public domain and is reached over the private network.
- **Pinned images** - both images are pinned, so a redeploy never changes the server version underneath you.

## Common Use Cases

- **Gradual rollouts and kill switches** - ship code dark, enable it for a segment or a percentage of users and turn it off without a deploy.
- **Self-hosted LaunchDarkly alternative** - feature flags, remote config, segments and environments on infrastructure you control.
- **Agent-driven release control** - let an AI agent create, enable and audit flags through the admin REST API.

## Dependencies for Flagsmith Hosting

- A PostgreSQL database (included in this template, volume at `/var/lib/postgresql`).

### Deployment Dependencies

- [Flagsmith/flagsmith](https://github.com/Flagsmith/flagsmith) - upstream project
- [Flagsmith documentation](https://docs.flagsmith.com) - SDKs, API reference and configuration


## 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/flagsmith-or-just-updated-feature-flag-s
