# Stage 1: Build frontend FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # Stage 2: Full stack with MariaDB FROM node:20-alpine WORKDIR /app # Install MariaDB and nginx RUN apk add --no-cache mariadb mariadb-client mariadb-server-utils nginx # Initialize MariaDB data directory RUN mkdir -p /run/mysqld && \ chown -R mysql:mysql /run/mysqld && \ chown -R mysql:mysql /var/lib/mysql # Copy MariaDB config RUN sed -i 's/\[mysqld\]/[mysqld]\ncharacter-set-server=utf8mb4\ncollation-server=utf8mb4_unicode_ci/' /etc/my.cnf.d/mariadb.cnf || true # Copy built frontend COPY --from=builder /app/dist /usr/share/nginx/html # Copy server files COPY server/package*.json server/ RUN cd server && npm ci COPY server/ server/ # Copy nginx config COPY nginx.conf /etc/nginx/http.d/default.conf # Create directories RUN mkdir -p /run/nginx # Copy entrypoint script COPY docker-entrypoint.sh /docker-entrypoint.sh RUN chmod +x /docker-entrypoint.sh EXPOSE 80 4000 3306 ENV DB_HOST=localhost ENV DB_PORT=3306 ENV DB_USER=root ENV DB_PASSWORD= ENV DB_NAME=hospital ENTRYPOINT ["/docker-entrypoint.sh"] CMD ["nginx.sh", "node", "server/api-mariadb.js"]