UNPKG

js-mvc-app

Version:

A CLI tool to scaffold complete Node.js MVC projects with TypeScript, just like Laravel

194 lines (169 loc) 4.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getDockerfile = getDockerfile; exports.getDockerCompose = getDockerCompose; exports.getDockerIgnore = getDockerIgnore; function getDockerfile(config) { return `# Build stage FROM node:18-alpine AS builder WORKDIR /app # Copy package files COPY package*.json ./ # Install dependencies RUN npm ci --only=production # Copy source code COPY . . # Build the application RUN npm run build # Production stage FROM node:18-alpine AS production WORKDIR /app # Create non-root user RUN addgroup -g 1001 -S nodejs RUN adduser -S nodeuser -u 1001 # Copy built application COPY --from=builder --chown=nodeuser:nodejs /app/dist ./dist COPY --from=builder --chown=nodeuser:nodejs /app/node_modules ./node_modules COPY --from=builder --chown=nodeuser:nodejs /app/package*.json ./ # Create logs directory RUN mkdir -p logs && chown nodeuser:nodejs logs # Switch to non-root user USER nodeuser # Expose port EXPOSE 3000 # Health check HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\ CMD node -e "const http = require('http'); \\ const options = { host: 'localhost', port: 3000, path: '/health', timeout: 2000 }; \\ const req = http.request(options, (res) => { \\ if (res.statusCode === 200) process.exit(0); \\ else process.exit(1); \\ }); \\ req.on('error', () => process.exit(1)); \\ req.end();" # Start the application CMD ["npm", "start"] `; } function getDockerCompose(config) { const { database } = config; let services = `version: '3.8' services: app: build: . ports: - "3000:3000" environment: - NODE_ENV=production - PORT=3000 - JWT_SECRET=your-production-jwt-secret `; if (database === 'mongodb') { services += ` - MONGODB_URI=mongodb://mongodb:27017/nodeapp depends_on: - mongodb networks: - app-network mongodb: image: mongo:6-jammy restart: unless-stopped ports: - "27017:27017" environment: - MONGO_INITDB_ROOT_USERNAME=admin - MONGO_INITDB_ROOT_PASSWORD=password - MONGO_INITDB_DATABASE=nodeapp volumes: - mongodb_data:/data/db networks: - app-network volumes: mongodb_data: networks: app-network: driver: bridge `; } else if (database === 'postgresql') { services += ` - DATABASE_URL=postgresql://postgres:password@postgres:5432/nodeapp depends_on: - postgres networks: - app-network postgres: image: postgres:15-alpine restart: unless-stopped ports: - "5432:5432" environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=password - POSTGRES_DB=nodeapp volumes: - postgres_data:/var/lib/postgresql/data networks: - app-network volumes: postgres_data: networks: app-network: driver: bridge `; } else if (database === 'mysql') { services += ` - DATABASE_URL=mysql://root:password@mysql:3306/nodeapp depends_on: - mysql networks: - app-network mysql: image: mysql:8.0 restart: unless-stopped ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_DATABASE=nodeapp volumes: - mysql_data:/var/lib/mysql networks: - app-network volumes: mysql_data: networks: app-network: driver: bridge `; } else { services += ` volumes: - ./database.sqlite:/app/database.sqlite networks: - app-network networks: app-network: driver: bridge `; } return services; } function getDockerIgnore() { return `node_modules npm-debug.log dist .env .env.local .env.*.local logs *.log .git .gitignore README.md .nyc_output coverage .vscode .DS_Store Thumbs.db `; } //# sourceMappingURL=docker.js.map