从零开始在 Railway 上部署 Strapi 并连接 PostgreSQL
这篇文章完整记录如何从本地创建 Strapi 项目,推送到 GitHub,再部署到 Railway,并连接 Railway PostgreSQL 数据库。
这个流程适合用 Strapi 作为 Next.js 网站、技术博客、AI 导航站、内容网站的 CMS 后台。
最终架构
最终架构如下:
前台网站:
aiseocode.com
Strapi CMS 后台:
cms.aiseocode.com 或 Railway 临时域名
后端部署平台:
Railway
数据库:
Railway PostgreSQL
代码仓库:
GitHub
如果你用 Next.js 做内容站,推荐架构是:
Next.js 前台 → Vercel
Strapi CMS → Railway
数据库 → Railway PostgreSQL
图片存储 → Cloudflare R2、S3 或 Cloudinary
第一步:检查 Node.js 和 npm
先在本地终端检查版本:
node -v
npm -v
git --version
Strapi 5 对 Node.js 版本有要求。如果你的 Node.js 版本太新,比如 Node 25,可能会导致 Strapi 创建失败或启动失败。
推荐使用 Node.js 22 LTS。
如果你使用 nvm,可以这样安装并切换:
nvm install 22
nvm use 22
nvm alias default 22
然后确认版本:
node -v
npm -v
你应该看到类似:
v22.x.x
第二步:本地创建 Strapi 项目
创建项目:
npx create-strapi-app@latest aiseocode-cms
创建过程中建议这样选择:
Login or sign up: Skip
Default database sqlite: Yes
Example structure and data: No
TypeScript: Yes
Install dependencies with npm: Yes
Initialize a git repository: Yes
本地开发阶段先使用 SQLite。后面部署到 Railway 时,再切换到 PostgreSQL。
进入项目目录:
cd aiseocode-cms
启动本地 Strapi:
npm run develop
打开本地后台:
http://localhost:1337/admin
然后创建第一个本地管理员账号。
第三步:推送项目到 GitHub
确认本地 Strapi 能正常运行后,提交代码:
git add .
git commit -m "init aiseocode strapi cms"
git branch -M main
去 GitHub 创建一个仓库,例如:
aiseocode-cms
如果本地已经有项目,不要在 GitHub 上勾选 README、.gitignore 或 License。
然后绑定远程仓库:
git remote add origin https://github.com/your-username/aiseocode-cms.git
git push -u origin main
第四步:安装 PostgreSQL 驱动
Railway 生产环境要使用 PostgreSQL,所以本地项目要先安装 pg:
npm install pg
提交并推送:
git add .
git commit -m "add postgres driver"
git push
第五步:配置 Strapi 数据库
打开数据库配置文件:
nano config/database.ts
把内容替换成:
import path from 'path';
export default ({ env }) => {
const client = env('DATABASE_CLIENT', 'sqlite');
const connections = {
postgres: {
connection: {
connectionString: env('DATABASE_URL'),
host: env('DATABASE_HOST'),
port: env.int('DATABASE_PORT'),
database: env('DATABASE_NAME'),
user: env('DATABASE_USERNAME'),
password: env('DATABASE_PASSWORD'),
ssl: env.bool('DATABASE_SSL', false)
? {
rejectUnauthorized: env.bool('DATABASE_SSL_REJECT_UNAUTHORIZED', false),
}
: false,
},
pool: {
min: env.int('DATABASE_POOL_MIN', 2),
max: env.int('DATABASE_POOL_MAX', 10),
},
},
sqlite: {
connection: {
filename: path.join(
__dirname,
'..',
'..',
env('DATABASE_FILENAME', '.tmp/data.db')
),
},
useNullAsDefault: true,
},
};
return {
connection: {
client,
...connections[client],
acquireConnectionTimeout: env.int('DATABASE_CONNECTION_TIMEOUT', 60000),
},
};
};
这份配置实现:
本地开发:SQLite
Railway 生产环境:PostgreSQL
保存后,本地测试:
npm run develop
如果可以正常启动,按下面组合键停止服务:
Control + C
然后提交:
git add .
git commit -m "configure database for railway postgres"
git push
第六步:在 Railway 部署 Strapi
进入 Railway 创建新项目。
选择:
New Project
→ GitHub Repository
→ 选择你的 Strapi 仓库
→ Deploy
Railway 会从 GitHub 拉取项目并开始构建。
刚开始服务可能会崩溃,这是正常的,因为还没有配置环境变量和 PostgreSQL。
第七步:添加 PostgreSQL 数据库
在同一个 Railway 项目中点击:
+ Add
→ Database
→ PostgreSQL
添加后,项目里应该有两个服务:
aiseocode-cms
Postgres
第八步:添加环境变量
进入 Strapi 服务:
aiseocode-cms
→ Variables
添加这些变量:
NODE_ENV=production
HOST=0.0.0.0
PORT=1337
DATABASE_CLIENT=postgres
DATABASE_URL=${{Postgres.DATABASE_URL}}
DATABASE_HOST=${{Postgres.PGHOST}}
DATABASE_PORT=${{Postgres.PGPORT}}
DATABASE_NAME=${{Postgres.PGDATABASE}}
DATABASE_USERNAME=${{Postgres.PGUSER}}
DATABASE_PASSWORD=${{Postgres.PGPASSWORD}}
DATABASE_SSL=false
DATABASE_SSL_REJECT_UNAUTHORIZED=false
如果你的 PostgreSQL 服务名称不是 Postgres,要把变量里的 Postgres 改成实际服务名。
第九步:添加 Strapi 密钥
Strapi 生产环境必须配置安全密钥。
在本地终端生成随机密钥:
openssl rand -base64 32
多执行几次,然后在 Railway 里添加:
APP_KEYS=key1,key2,key3,key4
API_TOKEN_SALT=key5
ADMIN_JWT_SECRET=key6
TRANSFER_TOKEN_SALT=key7
JWT_SECRET=key8
ENCRYPTION_KEY=key9
注意:
APP_KEYS 要包含多个 key,用英文逗号分隔。
不要加引号。
不要保留 tobemodified 这种占位值。
第十步:应用变更并重新部署
添加变量后,Railway 可能会提示:
Apply changes
点击应用并重新部署。
等待服务状态变成:
Online
第十一步:打开 Strapi 后台
进入:
Settings
→ Networking
→ Generate Domain
生成 Railway 临时域名。
然后访问:
https://your-railway-domain.up.railway.app/admin
如果出现 Strapi 管理员注册页面,说明部署成功。
创建生产环境管理员账号。
注意:本地管理员账号和 Railway 管理员账号不共用,因为它们使用的是不同数据库。
第十二步:本地创建 Article 内容类型
Strapi 内容类型建议在本地开发环境创建,然后提交到 GitHub。
本地启动 Strapi:
cd /Users/your-name/aiseocode-cms
npm run develop
打开:
http://localhost:1337/admin
进入:
Content-Type Builder
→ Create new collection type
创建:
Display name: Article
如果需要双语内容,启用 Internationalization。
第十三步:添加 Article 字段
创建这 3 个字段:
title
slug
content
推荐设置:
| 字段 | 类型 | 必填 | 唯一 | 多语言 |
|---|---|---:|---:|---:|
| title | Text | 是 | 否 | 是 |
| slug | Text | 是 | 是 | 是 |
| content | Rich Text | 是 | 否 | 是 |
如果你希望手动填写 slug,就使用 Text 字段,不要用 UID 字段。
如果 slug 字段想限制格式,可以添加这个正则:
^[a-z0-9]+(?:-[a-z0-9]+)*$
它允许:
deploy-strapi-railway-postgresql
nextjs-strapi-blog
ai-seo-tools
不允许:
Best AI SEO Tools
中文标题
best_ai_seo_tools
best ai seo tools
第十四步:添加中文语言
在 Strapi 后台进入:
Settings
→ Internationalization
→ Locales
→ Add new locale
选择:
Chinese (Simplified, China) (zh-CN)
高级设置保持:
Set as default locale: false
推荐语言结构:
默认语言:English
中文语言:zh-CN
前台 URL 可以设计为:
英文:
https://aiseocode.com/article/deploy-strapi-railway-postgresql
中文:
https://aiseocode.com/zh-cn/article/deploy-strapi-railway-postgresql-zh-cn
第十五步:提交 Article 内容类型
本地保存内容类型后,停止 Strapi:
Control + C
然后提交:
git status
git add .
git commit -m "add article content type and zh-cn locale"
git push
Railway 会自动重新部署。
部署完成后,线上 Strapi 后台就会出现 Article 内容类型。
第十六步:创建测试文章
打开线上后台:
https://your-railway-domain.up.railway.app/admin
进入:
Content Manager
→ Article
→ Create new entry
创建英文测试文章:
title: Test Article
slug: test-article
content: This is a test article.
保存并发布。
第十七步:开启公开 API 权限
如果访问 API 出现权限错误,进入:
Settings
→ Users & Permissions Plugin
→ Roles
→ Public
给 Article 开启:
find
findOne
保存后测试:
https://your-railway-domain.up.railway.app/api/articles
如果返回 JSON,说明 Strapi 已经可以正常作为 CMS 使用。
第十八步:绑定正式域名
等 Railway 临时域名确认正常后,可以绑定:
cms.aiseocode.com
在 Railway 里进入:
Settings
→ Networking
→ Custom Domain
添加:
cms.aiseocode.com
然后去你的 DNS 服务商添加 Railway 提供的 CNAME 或 TXT 记录。
验证成功后,Strapi 后台地址就是:
https://cms.aiseocode.com/admin
常见错误与解决方法
错误一:Could not read package.json
说明你没有进入 Strapi 项目目录。
解决:
cd /Users/your-name/aiseocode-cms
npm run develop
错误二:Node.js 版本不支持
如果 Strapi 提示 Node.js 版本不支持,切换到 Node.js 22:
nvm install 22
nvm use 22
错误三:App keys are required
说明 Railway 没有配置 APP_KEYS。
解决:
APP_KEYS=key1,key2,key3,key4
错误四:Application failed to respond
去 Railway 查看:
Deployments → Logs
常见原因有:
环境变量缺失
数据库连接失败
添加变量后没有 Apply changes
端口配置错误
最终结果
完成以上步骤后,你将拥有:
本地 Strapi 开发环境
GitHub 代码仓库
Railway Strapi 生产环境
Railway PostgreSQL 数据库
可访问的 Strapi 后台
Article 内容类型
英文和中文双语支持
可供 Next.js 前台调用的 CMS API
这套架构适合技术博客、AI SEO 网站、AI 编程资源站、AI 工具导航站和多语言内容平台。