AWS EBS部署Medusa.js后端后无法登录管理后台
Medusa.js AWS EBS部署登录问题排查
问题描述
在AWS EBS栈上部署Medusa.js后端,应用启动正常,但管理员账号无法登录。调用/auth/user/emailpass接口返回200状态码,调用/auth/session接口却返回401未授权。已排除数据库问题,无法定位故障原因。
配置信息
配置文件
import { loadEnv, defineConfig } from '@medusajs/framework/utils' loadEnv(process.env.NODE_ENV || 'development', process.cwd()) module.exports = defineConfig({ admin: { disable: process.env.DISABLE_MEDUSA_ADMIN === "true", backendUrl: process.env.MEDUSA_BACKEND_URL || "http://localhost:9000", storefrontUrl: process.env.MEDUSA_STOREFRONT_URL || "http://localhost:8000", path: (process.env.MEDUSA_ADMIN_PATH as `/${string}`) || "/app", }, projectConfig: { databaseUrl: process.env.NODE_ENV === 'production' ? `postgres://${process.env.POSTGRES_USER}:${process.env.POSTGRES_PASSWORD}@${process.env.POSTGRES_HOSTNAME}:${process.env.POSTGRES_PORT}/${process.env.POSTGRES_DB_NAME}` : process.env.DATABASE_URL, databaseDriverOptions: process.env.NODE_ENV === 'production' ? { connection: { ssl: { rejectUnauthorized: false } } } : undefined, workerMode: process.env.WORKER_MODE! as "shared" | "worker" | "server" || "shared", http: { storeCors: process.env.STORE_CORS!, adminCors: process.env.ADMIN_CORS!, authCors: process.env.AUTH_CORS!, jwtSecret: process.env.JWT_SECRET!, cookieSecret: process.env.COOKIE_SECRET, }, redisUrl: process.env.NODE_ENV === 'production' ? process.env.REDIS_URL : undefined, }, modules: [ { resolve: "@medusajs/medusa/file", options: { providers: [ { resolve: "@medusajs/medusa/file-s3", id: "s3", options: { file_url: process.env.S3_FILE_URL, access_key_id: process.env.S3_ACCESS_KEY_ID, secret_access_key: process.env.S3_SECRET_ACCESS_KEY, region: process.env.S3_REGION, bucket: process.env.S3_BUCKET, endpoint: process.env.S3_ENDPOINT, }, }, ], }, }, { resolve: "@medusajs/medusa/notification", options: { providers: [ { resolve: "@medusajs/medusa/notification-sendgrid", id: "sendgrid", options: { channels: ["email"], api_key: process.env.SENDGRID_API_KEY, from: process.env.SENDGRID_FROM, }, }, ], }, }, ...(process.env.NODE_ENV === 'production' ? [ { resolve: "@medusajs/medusa/cache-redis", options: { redisUrl: process.env.REDIS_URL, }, }, { resolve: "@medusajs/medusa/event-bus-redis", options: { redisUrl: process.env.REDIS_URL, }, }, { resolve: "@medusajs/medusa/workflow-engine-redis", options: { redis: { url: process.env.REDIS_URL, }, }, }, ] : []) ], })
Procfile
web: yarn install && yarn --cwd .medusa/server run predeploy --execute-safe-links && yarn --cwd .medusa/server run start
.env
STORE_CORS=https://shop.example.com,https://docs.medusajs.com ADMIN_CORS=https://shop-backend.example.com,https://docs.medusajs.com AUTH_CORS=https://shop.example.com,https://shop-backend.example.com,https://docs.medusajs.com REDIS_URL=redis://localhost:6379 JWT_SECRET=************ COOKIE_SECRET=************ PORT=9000 WORKER_MODE=shared MEDUSA_BACKEND_URL=https://shop-backend.example.com MEDUSA_STOREFRONT_URL=https://shop.example.com MEDUSA_ADMIN_PATH=/app
环境说明
- EBS已创建PostgreSQL数据库
- Redis运行在EC2实例内
排查方向
Cookie安全配置
- 生产环境HTTPS下,确保Cookie的
Secure属性开启,浏览器才会在HTTPS请求中携带Cookie。检查Medusa是否自动适配HTTPS环境,或手动配置Cookie属性。 - 确认
MEDUSA_BACKEND_URL协议为https,且与前端请求域名完全匹配。
- 生产环境HTTPS下,确保Cookie的
Redis连接有效性
- 检查EC2安全组是否允许EBS实例访问Redis端口(6379)。
- 查看应用日志,确认Redis模块是否成功加载、连接是否正常。若Redis连接失败,会话存储会失效,导致
/auth/session验证失败。
CORS配置细节
- 确认
AUTH_CORS包含前端实际请求的完整域名(含端口,若有)。 - 检查浏览器控制台是否有CORS报错,Medusa默认允许
credentials,若有自定义CORS配置需确保该属性未被覆盖。
- 确认
环境变量与模式匹配
- 验证生产环境
NODE_ENV是否设置为production,否则Redis模块不会加载,会话会存在内存中,EBS多实例环境下会话无法共享。 - 确认
JWT_SECRET和COOKIE_SECRET配置正确,无特殊字符导致解析异常。
- 验证生产环境
启动命令优化
- 生产环境建议使用
yarn install --production安装依赖,避免dev依赖引发冲突。 - 确认
.medusa/server目录生成正常,predeploy命令执行无报错。
- 生产环境建议使用
内容的提问来源于stack exchange,提问作者DK1990
相关产品推荐
相关产品推荐

