feat: add docker
This commit is contained in:
28
Dockerfile
Normal file
28
Dockerfile
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
FROM node:20-alpine AS deps
|
||||||
|
WORKDIR /app
|
||||||
|
RUN corepack enable
|
||||||
|
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
|
||||||
|
COPY apps/api/package.json apps/api/package.json
|
||||||
|
RUN pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
FROM node:20-alpine AS build
|
||||||
|
WORKDIR /app
|
||||||
|
RUN corepack enable
|
||||||
|
COPY --from=deps /app/node_modules ./node_modules
|
||||||
|
COPY --from=deps /app/apps/api/node_modules ./apps/api/node_modules
|
||||||
|
COPY . .
|
||||||
|
RUN pnpm --filter @cryptowallet/api build
|
||||||
|
RUN pnpm prune --prod
|
||||||
|
|
||||||
|
FROM node:20-alpine AS runtime
|
||||||
|
WORKDIR /app
|
||||||
|
ENV NODE_ENV=production
|
||||||
|
RUN corepack enable
|
||||||
|
COPY --from=build /app/package.json /app/pnpm-lock.yaml /app/pnpm-workspace.yaml ./
|
||||||
|
COPY --from=build /app/node_modules ./node_modules
|
||||||
|
COPY --from=build /app/apps/api/package.json ./apps/api/package.json
|
||||||
|
COPY --from=build /app/apps/api/node_modules ./apps/api/node_modules
|
||||||
|
COPY --from=build /app/apps/api/dist ./apps/api/dist
|
||||||
|
COPY --from=build /app/apps/api/swagger.json ./apps/api/swagger.json
|
||||||
|
EXPOSE 3001
|
||||||
|
CMD ["pnpm","--filter","@cryptowallet/api","start"]
|
||||||
59
docker-compose.yml
Normal file
59
docker-compose.yml
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
services:
|
||||||
|
api:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- '${API_PORT:-3001}:${API_PORT:-3001}'
|
||||||
|
environment:
|
||||||
|
API_PORT: '${API_PORT:-3001}'
|
||||||
|
LOG_LEVEL: '${LOG_LEVEL:-INFO}'
|
||||||
|
DB_HOST: '${DB_HOST:-postgres}'
|
||||||
|
DB_PORT: '${DB_PORT:-5432}'
|
||||||
|
DB_USER: '${DB_USER:-cryptowallet}'
|
||||||
|
DB_PASSWORD: '${DB_PASSWORD:-cryptowallet}'
|
||||||
|
DB_NAME: '${DB_NAME:-cryptowallet}'
|
||||||
|
VAULT_ADDR: '${VAULT_ADDR:-}'
|
||||||
|
VAULT_ROLE_ID: '${VAULT_ROLE_ID:-}'
|
||||||
|
VAULT_SECRET_ID: '${VAULT_SECRET_ID:-}'
|
||||||
|
VAULT_MOUNT_POINT: '${VAULT_MOUNT_POINT:-dev-secrets}'
|
||||||
|
VAULT_SECRET_PATH: '${VAULT_SECRET_PATH:-database}'
|
||||||
|
VAULT_JWT_KID_PATH: '${VAULT_JWT_KID_PATH:-jwt/kid}'
|
||||||
|
VAULT_JWT_KIDS_PREFIX: '${VAULT_JWT_KIDS_PREFIX:-jwt/kids}'
|
||||||
|
VAULT_CSRF_PATH: '${VAULT_CSRF_PATH:-}'
|
||||||
|
JWT_ALGORITHM: '${JWT_ALGORITHM:-RS256}'
|
||||||
|
JWT_ISSUER: '${JWT_ISSUER:-auth-service}'
|
||||||
|
JWT_AUDIENCE: '${JWT_AUDIENCE:-elcsa}'
|
||||||
|
CORS_ORIGINS: '${CORS_ORIGINS:-}'
|
||||||
|
CORS_ALLOW_CREDENTIALS: '${CORS_ALLOW_CREDENTIALS:-true}'
|
||||||
|
RELAY_API_KEY: '${RELAY_API_KEY:-}'
|
||||||
|
TRON_API_KEY: '${TRON_API_KEY:-}'
|
||||||
|
JUPITER_API_KEY: '${JUPITER_API_KEY:-}'
|
||||||
|
JUPITER_REFERRAL_ACCOUNT: '${JUPITER_REFERRAL_ACCOUNT:-}'
|
||||||
|
JUPITER_FEE_BPS: '${JUPITER_FEE_BPS:-70}'
|
||||||
|
ETHERSCAN_API_KEY: '${ETHERSCAN_API_KEY:-}'
|
||||||
|
BSCSCAN_API_KEY: '${BSCSCAN_API_KEY:-}'
|
||||||
|
depends_on:
|
||||||
|
postgres:
|
||||||
|
condition: service_healthy
|
||||||
|
|
||||||
|
postgres:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
POSTGRES_USER: '${DB_USER:-cryptowallet}'
|
||||||
|
POSTGRES_PASSWORD: '${DB_PASSWORD:-cryptowallet}'
|
||||||
|
POSTGRES_DB: '${DB_NAME:-cryptowallet}'
|
||||||
|
ports:
|
||||||
|
- '${POSTGRES_PORT:-5432}:5432'
|
||||||
|
volumes:
|
||||||
|
- postgres-data:/var/lib/postgresql/data
|
||||||
|
healthcheck:
|
||||||
|
test: ['CMD-SHELL','pg_isready -U "$$POSTGRES_USER" -d "$$POSTGRES_DB"']
|
||||||
|
interval: 5s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 10
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
postgres-data:
|
||||||
Reference in New Issue
Block a user