fase 1
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
node_modules
|
||||
.medusa
|
||||
.cache
|
||||
.git
|
||||
.env
|
||||
.env.*
|
||||
npm-debug.log*
|
||||
README.md
|
||||
data
|
||||
migration
|
||||
@@ -0,0 +1,3 @@
|
||||
fund=false
|
||||
audit=false
|
||||
legacy-peer-deps=true
|
||||
@@ -0,0 +1,39 @@
|
||||
# syntax=docker/dockerfile:1.7
|
||||
|
||||
FROM node:22.18.0-bookworm-slim AS builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
ENV CI=true
|
||||
ENV NODE_ENV=development
|
||||
ENV NPM_CONFIG_UPDATE_NOTIFIER=false
|
||||
|
||||
COPY package.json .npmrc ./
|
||||
RUN --mount=type=cache,target=/root/.npm,sharing=locked \
|
||||
npm install --no-audit --no-fund
|
||||
|
||||
COPY tsconfig.json medusa-config.ts ./
|
||||
COPY src ./src
|
||||
|
||||
RUN npm run build
|
||||
|
||||
FROM node:22.18.0-bookworm-slim AS runtime
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
ENV NODE_ENV=production
|
||||
ENV PORT=9000
|
||||
ENV NPM_CONFIG_UPDATE_NOTIFIER=false
|
||||
|
||||
COPY --from=builder /app/.medusa/server/package.json ./
|
||||
RUN --mount=type=cache,target=/root/.npm,sharing=locked \
|
||||
npm install --omit=dev --no-audit --no-fund
|
||||
|
||||
COPY --from=builder /app/.medusa/server ./
|
||||
|
||||
RUN chown -R node:node /app
|
||||
USER node
|
||||
|
||||
EXPOSE 9000
|
||||
|
||||
CMD ["npx", "medusa", "start"]
|
||||
@@ -0,0 +1,20 @@
|
||||
# ARI Shopping Commerce Backend
|
||||
|
||||
Backend Medusa v2.18 para la Fase 1.
|
||||
|
||||
## Capacidades iniciales
|
||||
|
||||
- Medusa Admin en `/app`.
|
||||
- Catálogo, variantes y precios.
|
||||
- Imágenes en almacenamiento S3 compatible.
|
||||
- PostgreSQL y Redis externos.
|
||||
- Modo `shared` para una sola réplica durante la Fase 1.
|
||||
- Migraciones ejecutadas por el `initContainer` de Kubernetes.
|
||||
|
||||
La imagen se construye mediante:
|
||||
|
||||
```text
|
||||
.gitea/workflows/build-medusa.yaml
|
||||
```
|
||||
|
||||
No se deben colocar secretos en este directorio.
|
||||
@@ -0,0 +1,66 @@
|
||||
import { defineConfig, loadEnv } from "@medusajs/framework/utils"
|
||||
|
||||
loadEnv(process.env.NODE_ENV || "development", process.cwd())
|
||||
|
||||
const required = (name: string): string => {
|
||||
const value = process.env[name]
|
||||
if (!value) {
|
||||
throw new Error(`La variable ${name} es obligatoria.`)
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
module.exports = defineConfig({
|
||||
projectConfig: {
|
||||
databaseUrl: required("DATABASE_URL"),
|
||||
redisUrl: required("REDIS_URL"),
|
||||
workerMode: (process.env.MEDUSA_WORKER_MODE || "shared") as
|
||||
| "shared"
|
||||
| "worker"
|
||||
| "server",
|
||||
http: {
|
||||
storeCors: required("STORE_CORS"),
|
||||
adminCors: required("ADMIN_CORS"),
|
||||
authCors: required("AUTH_CORS"),
|
||||
jwtSecret: required("JWT_SECRET"),
|
||||
cookieSecret: required("COOKIE_SECRET"),
|
||||
},
|
||||
},
|
||||
|
||||
admin: {
|
||||
disable: process.env.DISABLE_MEDUSA_ADMIN === "true",
|
||||
backendUrl:
|
||||
process.env.MEDUSA_BACKEND_URL ||
|
||||
"https://commerce.cruzcloud.net",
|
||||
storefrontUrl:
|
||||
process.env.STOREFRONT_URL ||
|
||||
"https://shop.cruzcloud.net",
|
||||
},
|
||||
|
||||
modules: [
|
||||
{
|
||||
resolve: "@medusajs/medusa/file",
|
||||
options: {
|
||||
providers: [
|
||||
{
|
||||
resolve: "@medusajs/medusa/file-s3",
|
||||
id: "s3",
|
||||
options: {
|
||||
file_url: required("S3_FILE_URL"),
|
||||
access_key_id: required("S3_ACCESS_KEY_ID"),
|
||||
secret_access_key: required("S3_SECRET_ACCESS_KEY"),
|
||||
region: process.env.S3_REGION || "us-east-1",
|
||||
bucket: required("S3_BUCKET"),
|
||||
endpoint: required("S3_ENDPOINT"),
|
||||
cache_control:
|
||||
"public, max-age=31536000, immutable",
|
||||
additional_client_config: {
|
||||
forcePathStyle: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
})
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"name": "ari-shopping-commerce-backend",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"description": "Backend de catálogo dinámico ARI Shopping sobre Medusa v2.",
|
||||
"license": "UNLICENSED",
|
||||
"scripts": {
|
||||
"build": "medusa build",
|
||||
"start": "medusa start",
|
||||
"dev": "medusa develop",
|
||||
"predeploy": "medusa db:migrate"
|
||||
},
|
||||
"dependencies": {
|
||||
"@medusajs/admin-sdk": "2.18.0",
|
||||
"@medusajs/cli": "2.18.0",
|
||||
"@medusajs/framework": "2.18.0",
|
||||
"@medusajs/medusa": "2.18.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@swc/core": "^1.7.28",
|
||||
"@types/node": "^20.12.11",
|
||||
"@types/react": "^18.3.2",
|
||||
"@types/react-dom": "^18.2.25",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"typescript": "^5.6.2",
|
||||
"vite": "^5.4.14"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2021",
|
||||
"esModuleInterop": true,
|
||||
"module": "Node16",
|
||||
"moduleResolution": "Node16",
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"skipLibCheck": true,
|
||||
"skipDefaultLibCheck": true,
|
||||
"declaration": false,
|
||||
"sourceMap": false,
|
||||
"inlineSourceMap": true,
|
||||
"outDir": "./.medusa/server",
|
||||
"rootDir": "./",
|
||||
"jsx": "react-jsx",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"resolveJsonModule": true,
|
||||
"checkJs": false,
|
||||
"strictNullChecks": true
|
||||
},
|
||||
"ts-node": {
|
||||
"swc": true
|
||||
},
|
||||
"include": [
|
||||
"**/*",
|
||||
".medusa/types/*"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
".medusa/server",
|
||||
".medusa/admin",
|
||||
".cache"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user