diff --git a/Dockerfile b/Dockerfile index 8a9e717..c23870a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,13 +9,16 @@ RUN npm ci COPY . . RUN npm run build -# Stage 2: Full stack with MariaDB +# Stage 2: App only (no MariaDB) FROM node:20-alpine WORKDIR /app -# Install dependencies -RUN apk add --no-cache mariadb mariadb-client mariadb-server-utils nginx bash +# Install nginx +RUN apk add --no-cache nginx bash + +# Copy built frontend to nginx +COPY --from=builder /build/dist /usr/share/nginx/html # Copy server files COPY server/package*.json ./server/ @@ -27,15 +30,15 @@ COPY server/ ./server/ COPY nginx.conf /etc/nginx/http.d/default.conf # Create directories -RUN mkdir -p /run/nginx /run/mysqld /var/lib/mysql +RUN mkdir -p /run/nginx # Copy entrypoint COPY docker-entrypoint.sh /docker-entrypoint.sh RUN chmod +x /docker-entrypoint.sh -EXPOSE 80 4000 3306 +EXPOSE 80 4000 -ENV DB_HOST=localhost +ENV DB_HOST=db ENV DB_PORT=3306 ENV DB_USER=hospital ENV DB_PASSWORD=hospital123 diff --git a/docker-compose.yml b/docker-compose.yml index bd75bf6..0b4bbb6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,13 +1,29 @@ version: '3.8' services: + db: + image: mariadb:10.11 + environment: + MYSQL_ROOT_PASSWORD: root123 + MYSQL_DATABASE: hospital + MYSQL_USER: hospital + MYSQL_PASSWORD: hospital123 + volumes: + - mariadb-data:/var/lib/mysql + restart: unless-stopped + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + interval: 10s + timeout: 5s + retries: 5 + app: build: . ports: - "8077:80" - "4000:4000" environment: - DB_HOST: localhost + DB_HOST: db DB_PORT: "3306" DB_USER: hospital DB_PASSWORD: hospital123 @@ -15,8 +31,10 @@ services: ADMIN_DNI: "00000000" ADMIN_PASSWORD: Admin123! volumes: - - mariadb-data:/var/lib/mysql - nginx-data:/usr/share/nginx/html + depends_on: + db: + condition: service_healthy restart: unless-stopped volumes: diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 837ecdd..72ddb97 100644 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,27 +1,14 @@ #!/usr/bin/env bash set -e -echo "=== Starting MariaDB ===" -mysqld --user=mysql & - -echo "Waiting for MariaDB..." -for i in $(seq 1 60); do - mysqladmin ping -h localhost --silent 2>/dev/null && break || sleep 1 -done - DB_NAME="${DB_NAME:-hospital}" DB_USER="${DB_USER:-hospital}" DB_PASSWORD="${DB_PASSWORD:-hospital123}" -echo "Creating database: $DB_NAME" -mysql -h localhost -u root -e "CREATE DATABASE IF NOT EXISTS \`$DB_NAME\`;" - -echo "Creating user: $DB_USER" -mysql -h localhost -u root -e "CREATE USER IF NOT EXISTS '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASSWORD';" -mysql -h localhost -u root -e "CREATE USER IF NOT EXISTS '$DB_USER'@'%' IDENTIFIED BY '$DB_PASSWORD';" -mysql -h localhost -u root -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost';" -mysql -h localhost -u root -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'%';" -mysql -h localhost -u root -e "FLUSH PRIVILEGES;" +echo "Waiting for MariaDB to be ready..." +for i in $(seq 1 60); do + mysql -h "${DB_HOST:-db}" -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" -e "SELECT 1" 2>/dev/null && break || sleep 2 +done ADMIN_DNI="${ADMIN_DNI:-00000000}" ADMIN_PASSWORD="${ADMIN_PASSWORD:-Admin123!}" @@ -44,17 +31,4 @@ echo "DNI: $ADMIN_DNI" echo "Password: $ADMIN_PASSWORD" echo "==========================================" -exec node server/api-mariadb.js - mysql -h localhost -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" -e "INSERT INTO usuarios (id,apellido,nombre,dni,fechaNacimiento,email,rol,passwordHash,fechaCreacion) VALUES ('$ADMIN_ID','Administrador','Sistema','$ADMIN_DNI','$TODAY','admin@hospital.local','admin','$HASH','$TODAY');" - echo "==========================================" - echo "ADMIN CREDENTIALS:" - echo "DNI: $ADMIN_DNI" - echo "Password: $ADMIN_PASSWORD" - echo "==========================================" -fi - -echo "Starting nginx..." -nginx & - -echo "Starting API server..." exec node server/api-mariadb.js \ No newline at end of file