You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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实例内

排查方向

  1. Cookie安全配置

    • 生产环境HTTPS下,确保Cookie的Secure属性开启,浏览器才会在HTTPS请求中携带Cookie。检查Medusa是否自动适配HTTPS环境,或手动配置Cookie属性。
    • 确认MEDUSA_BACKEND_URL协议为https,且与前端请求域名完全匹配。
  2. Redis连接有效性

    • 检查EC2安全组是否允许EBS实例访问Redis端口(6379)。
    • 查看应用日志,确认Redis模块是否成功加载、连接是否正常。若Redis连接失败,会话存储会失效,导致/auth/session验证失败。
  3. CORS配置细节

    • 确认AUTH_CORS包含前端实际请求的完整域名(含端口,若有)。
    • 检查浏览器控制台是否有CORS报错,Medusa默认允许credentials,若有自定义CORS配置需确保该属性未被覆盖。
  4. 环境变量与模式匹配

    • 验证生产环境NODE_ENV是否设置为production,否则Redis模块不会加载,会话会存在内存中,EBS多实例环境下会话无法共享。
    • 确认JWT_SECRET和COOKIE_SECRET配置正确,无特殊字符导致解析异常。
  5. 启动命令优化

    • 生产环境建议使用yarn install --production安装依赖,避免dev依赖引发冲突。
    • 确认.medusa/server目录生成正常,predeploy命令执行无报错。

内容的提问来源于stack exchange,提问作者DK1990

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 10:33:19