/** * Templates of the deployment procedure (procédure.md), used when a * project is created from the dashboard. */ export type ProjectType = 'node' | 'adonis' | 'wordpress' | 'static' const LOGGING = ` logging: options: max-size: "10m" max-file: "3"` const NETWORKS = `networks: bdd_network: external: true caddy_network: external: true` function nodeService(service: string, name: string, port: number, command: string) { return `services: ${service}: image: node:22-alpine3.21 container_name: ${name} working_dir: /app volumes: - ./project:/app command: sh -c "${command.replace(/"/g, '\\"')}" env_file: ./project/.env environment: - NODE_ENV=production - HOST=0.0.0.0 - PORT=${port} networks: - bdd_network - caddy_network restart: unless-stopped ${LOGGING} ${NETWORKS} ` } export const DEFAULT_NODE_COMMAND = 'npm ci --omit=dev && node start.js' export const ADONIS_COMMAND = 'npm ci --include=dev && node ace build && cd build && npm ci --omit=dev && node bin/server.js' export function composeFile( type: Exclude, name: string, port: number, command?: string ) { switch (type) { case 'node': return nodeService('nodejs', name, port, command || DEFAULT_NODE_COMMAND) case 'adonis': return nodeService('adonis', name, port, ADONIS_COMMAND) case 'wordpress': return `services: wordpress: image: wordpress:php8.5-apache container_name: ${name} restart: unless-stopped environment: WORDPRESS_DB_HOST: mariadb:3306 WORDPRESS_DB_NAME: \${WP_DB_NAME} WORDPRESS_DB_USER: \${WP_DB_USER} WORDPRESS_DB_PASSWORD: \${WP_DB_PASSWORD} volumes: - ./wp_data:/var/www/html networks: - caddy_network - bdd_network ${LOGGING} ${NETWORKS} ` } } export function proxyBlock(domain: string, upstream: string) { return `${domain} { \treverse_proxy ${upstream} }` } export function staticBlock(domain: string, root: string, spa: boolean) { return `${domain} { \troot * ${root} \tencode gzip \tfile_server${spa ? '\n\ttry_files {path} /index.html' : ''} }` } export function placeholderPage(name: string) { return ` ${name}

${name} : site en cours de déploiement.

` }