---
title: "Deploy Ghost Multilingual"
description: "1-Click deploy multilingual Ghost with 2 separate instances"
category: "CMS"
url: https://railway.com/deploy/ghost-multilingual
---

# Deploy Ghost Multilingual

1-Click deploy multilingual Ghost with 2 separate instances

**[Deploy Ghost Multilingual on Railway](https://railway.com/template/ghost-multilingual)**

- **Creator:** Cuong Thach
- **Category:** CMS
- **Total deploys:** 20

## Template content

### ghost-fr

- **Image:** ghost:alpine
- **Public domain:** Yes

### Ghost Nginx Proxy https://cdn.jsdelivr.net/gh/bePublish/ghost-multilingual-reverse-proxy/assets/app-icon.png

- **Source:** https://github.com/bePublish/ghost-multilingual-reverse-proxy
- **Health check:** /health
- **Public domain:** Yes

### MySQL https://devicons.railway.app/i/mysql.svg

- **Image:** mysql:8
- **Start command:** `docker-entrypoint.sh mysqld --innodb-use-native-aio=0 --disable-log-bin --performance_schema=0`

### MySQL-fr https://devicons.railway.app/i/mysql.svg

- **Image:** mysql:8
- **Start command:** `docker-entrypoint.sh mysqld --innodb-use-native-aio=0 --disable-log-bin --performance_schema=0`

### ghost

- **Image:** ghost:alpine
- **Public domain:** Yes

## Documentation

# Deploy and Host Ghost multilingual with 1-Click on Railway

[![Deploy and Host Ghost multilingual with 1-Click on Railway](https://img.youtube.com/vi/JjA-2Qdr9Pw/maxresdefault.jpg)](https://youtu.be/JjA-2Qdr9Pw?si=grlbVGNMC6NU4sNd)

Ghost doesn't support multi-language natively? No problem! Deploy separate Ghost instances and unify them under one domain with different paths:

- `yourdomain.com/en` → English site
- `yourdomain.com/vi` → Vietnamese site

See it in action: [bepublish.com](https://bepublish.com)

## About Hosting Ghost multilingual with Dual Instances

This architecture deploys two complete Ghost installations—each with its own database, themes, content, and admin panel—unified under one domain through intelligent routing.
Why this matters:

- ✨ Full independence – Customize each language site without limitations
- ⚡ Better performance – No plugin overhead or database bloat
- 🛠️ Easier maintenance – Manage languages separately, debug faster
- 🎨 Design freedom – Different themes, structures, or features per language

The 1-click deployment handles all the technical complexity: databases, environment variables, routing configuration—everything. You get professional multi-language infrastructure in minutes, not days.

## Common Use Cases

- **International Business Blogs** – Separate content strategies, SEO, and editorial teams per market under one unified brand
- **Bilingual News Publications** – Independent newsrooms publishing breaking stories simultaneously in multiple languages
- **Educational Platforms** – Localized courses with culturally relevant examples and language-specific membership tiers
- **Product Documentation** – Version-specific docs in multiple languages without forced translation sync

## Dependencies for Ghost Multilingual Hosting

- **MySQL Database (×2)**: Each Ghost instance requires its own MySQL database for storing content, users, and configuration independently
- **Node.js Runtime**: Ghost runs on Node.js and requires a compatible runtime environment for both instances
- **Storage Solution**: File storage for media uploads, themes, and assets for each language instance

### Deployment Dependencies

- [Ghost Official Documentation](https://ghost.org/docs/)
- [Railway MySQL Documentation](https://docs.railway.app/databases/mysql)
- [Ghost Theme Development](https://ghost.org/docs/themes/)
- [bePublish Deploy Guide](https://docs.bepublish.com/docs/multilingual/deploy-multi-language-ghost/)

### Implementation Details

The template automatically provisions two complete Ghost instances with the following architecture:

```yaml
# Instance 1: Primary Language (e.g., English)
- Ghost App with dedicated MySQL database
- Environment: production
- Custom domain support
- Independent theme and configuration

# Instance 2: Secondary Language (e.g., Fr)
- Ghost App with separate MySQL database
- Environment: production
- Custom subdomain/path support
- Independent theme and configuration
```

**Key Configuration Variables:**
- `GHOST_ROOT_URL`: Base URL for the primary language instance
- `GHOST_INSTANCES`: Base URL for the secondary language instance (unlimited instances with separate by `,`)
- `SERVER_NAME`: your custom domain
- Database credentials are automatically generated and isolated per instance

## 🚀 3-Step Deployment

Check tutorial video for detail: https://www.youtube.com/watch?v=JjA-2Qdr9Pw

**Step 1: Deploy the Primary Instance**

1. Click "Deploy Now" on the template
2. Wait for Railway to build
3. Go to Variables, set: url: `yourdomain.com/en`
4. Go to **Settings** > **Domains**, add your domain and configure CNAME at your registrar

✨ The first instance acts as the traffic router for everything!

**Step 2: Deploy the Second Instance**

1. Deploy the same template again
2. Set url: `yourdomain.com/vi` in Variables

**Step 3: Connect the Sites**

1. Return to the first instance
2. Edit the url variable to: `yourdomain.com/en,yourdomain.com/vi`
3. Redeploy the first instance

🎉 Done! Both sites are now live!


## Similar templates

- [Libredesk - Complete Setup](https://railway.com/deploy/libredesk-complete-setup) — [Jul'26] Complete self-hosted omnichannel customer support desk.
- [Instatic CMS - Postgres](https://railway.com/deploy/instatic-cms-postgres) — Design, build and manage powerful static sites from state-of-the-art CMS
- [Strapi](https://railway.com/deploy/strapi) — A popular self-hosted CMS

Open this page in a browser: https://railway.com/deploy/ghost-multilingual
