Fix Docker: add nginx volume, simplify entrypoint
This commit is contained in:
+11
-15
@@ -1,7 +1,7 @@
|
|||||||
# Stage 1: Build frontend
|
# Stage 1: Build frontend
|
||||||
FROM node:20-alpine AS builder
|
FROM node:20-alpine AS builder
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /build
|
||||||
|
|
||||||
COPY package*.json ./
|
COPY package*.json ./
|
||||||
RUN npm ci
|
RUN npm ci
|
||||||
@@ -14,24 +14,20 @@ FROM node:20-alpine
|
|||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# Install MariaDB and nginx
|
# Install dependencies
|
||||||
RUN apk add --no-cache mariadb mariadb-client mariadb-server-utils nginx
|
RUN apk add --no-cache mariadb mariadb-client mariadb-server-utils nginx bash
|
||||||
|
|
||||||
# Initialize MariaDB data directory
|
# Initialize directories
|
||||||
RUN mkdir -p /run/mysqld /var/lib/mysql && \
|
RUN mkdir -p /run/mysqld /var/lib/mysql && chown -R mysql:mysql /run/mysqld /var/lib/mysql
|
||||||
chown -R mysql:mysql /run/mysqld /var/lib/mysql
|
|
||||||
|
|
||||||
# Copy MariaDB config
|
# Copy built frontend to nginx
|
||||||
RUN sed -i 's/\[mysqld\]/[mysqld]\ncharacter-set-server=utf8mb4\ncollation-server=utf8mb4_unicode_ci/' /etc/my.cnf.d/mariadb.cnf || true
|
COPY --from=builder /build/dist /usr/share/nginx/html
|
||||||
|
|
||||||
# Copy built frontend
|
|
||||||
COPY --from=builder /app/dist /usr/share/nginx/html
|
|
||||||
|
|
||||||
# Copy server files
|
# Copy server files
|
||||||
COPY server/package*.json server/
|
COPY server/package*.json ./server/
|
||||||
RUN cd server && npm ci
|
RUN cd ./server && npm ci
|
||||||
|
|
||||||
COPY server/ server/
|
COPY server/ ./server/
|
||||||
|
|
||||||
# Copy nginx config
|
# Copy nginx config
|
||||||
COPY nginx.conf /etc/nginx/http.d/default.conf
|
COPY nginx.conf /etc/nginx/http.d/default.conf
|
||||||
@@ -39,7 +35,7 @@ COPY nginx.conf /etc/nginx/http.d/default.conf
|
|||||||
# Create directories
|
# Create directories
|
||||||
RUN mkdir -p /run/nginx /run/mysqld /var/lib/mysql
|
RUN mkdir -p /run/nginx /run/mysqld /var/lib/mysql
|
||||||
|
|
||||||
# Copy entrypoint script
|
# Copy entrypoint
|
||||||
COPY docker-entrypoint.sh /docker-entrypoint.sh
|
COPY docker-entrypoint.sh /docker-entrypoint.sh
|
||||||
RUN chmod +x /docker-entrypoint.sh
|
RUN chmod +x /docker-entrypoint.sh
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,9 @@ services:
|
|||||||
- ADMIN_PASSWORD=Admin123!
|
- ADMIN_PASSWORD=Admin123!
|
||||||
volumes:
|
volumes:
|
||||||
- mariadb-data:/var/lib/mysql
|
- mariadb-data:/var/lib/mysql
|
||||||
|
- nginx-data:/usr/share/nginx/html
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
mariadb-data:
|
mariadb-data:
|
||||||
|
nginx-data:
|
||||||
+11
-41
@@ -1,61 +1,33 @@
|
|||||||
#!/bin/bash
|
#!/usr/bin/env bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
echo "=== Starting MariaDB ==="
|
echo "=== Starting MariaDB ==="
|
||||||
mysqld --user=mysql &
|
mysqld --user=mysql &
|
||||||
MYSQL_PID=$!
|
|
||||||
|
|
||||||
echo "Waiting for MariaDB to be ready..."
|
echo "Waiting for MariaDB..."
|
||||||
for i in {1..60}; do
|
for i in $(seq 1 60); do
|
||||||
if mysqladmin ping -h localhost --silent 2>/dev/null; then
|
mysqladmin ping -h localhost --silent 2>/dev/null && break || sleep 1
|
||||||
echo "MariaDB is ready!"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 1
|
|
||||||
done
|
done
|
||||||
|
|
||||||
DB_NAME="${DB_NAME:-hospital}"
|
DB_NAME="${DB_NAME:-hospital}"
|
||||||
echo "Creating database if not exists..."
|
|
||||||
mysql -h localhost -u root -e "CREATE DATABASE IF NOT EXISTS \`$DB_NAME\`;"
|
mysql -h localhost -u root -e "CREATE DATABASE IF NOT EXISTS \`$DB_NAME\`;"
|
||||||
|
|
||||||
if [ -n "$DB_PASSWORD" ] && [ "$DB_PASSWORD" != "" ]; then
|
if [ -n "$DB_PASSWORD" ]; then
|
||||||
echo "Creating user and setting permissions..."
|
|
||||||
DB_USER="${DB_USER:-hospital}"
|
DB_USER="${DB_USER:-hospital}"
|
||||||
USER_EXISTS=$(mysql -h localhost -u root -N -e "SELECT COUNT(*) FROM mysql.user WHERE User='$DB_USER' AND Host='%';")
|
mysql -h localhost -u root -e "CREATE USER IF NOT EXISTS '$DB_USER'@'%' IDENTIFIED BY '$DB_PASSWORD'; GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'%'; FLUSH PRIVILEGES;"
|
||||||
|
|
||||||
if [ "$USER_EXISTS" = "0" ]; then
|
|
||||||
mysql -h localhost -u root -e "CREATE USER '$DB_USER'@'%' IDENTIFIED BY '$DB_PASSWORD';"
|
|
||||||
mysql -h localhost -u root -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'%';"
|
|
||||||
mysql -h localhost -u root -e "FLUSH PRIVILEGES;"
|
|
||||||
else
|
|
||||||
mysql -h localhost -u root -e "ALTER USER '$DB_USER'@'%' IDENTIFIED BY '$DB_PASSWORD';"
|
|
||||||
mysql -h localhost -u root -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'%';"
|
|
||||||
mysql -h localhost -u root -e "FLUSH PRIVILEGES;"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ADMIN_DNI="${ADMIN_DNI:-00000000}"
|
ADMIN_DNI="${ADMIN_DNI:-00000000}"
|
||||||
ADMIN_PASSWORD="${ADMIN_PASSWORD:-Admin123!}"
|
ADMIN_PASSWORD="${ADMIN_PASSWORD:-Admin123!}"
|
||||||
|
|
||||||
echo "Checking for admin user..."
|
TABLE_EXISTS=$(mysql -h localhost -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" -N -e "SHOW TABLES LIKE 'usuarios';" 2>/dev/null || true)
|
||||||
TABLE_EXISTS=$(mysql -h localhost -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" -N -e "SHOW TABLES LIKE 'usuarios';" 2>/dev/null || echo "")
|
|
||||||
|
|
||||||
if [ -n "$TABLE_EXISTS" ]; then
|
if [ -n "$TABLE_EXISTS" ]; then
|
||||||
USER_COUNT=$(mysql -h localhost -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" -N -e "SELECT COUNT(*) FROM usuarios WHERE dni='$ADMIN_DNI';" 2>/dev/null || echo "0")
|
USER_COUNT=$(mysql -h localhost -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" -N -e "SELECT COUNT(*) FROM usuarios WHERE dni='$ADMIN_DNI';" 2>/dev/null || echo "0")
|
||||||
|
|
||||||
if [ "$USER_COUNT" = "0" ]; then
|
if [ "$USER_COUNT" = "0" ]; then
|
||||||
echo "Creating initial admin user..."
|
ADMIN_ID=$(uuidgen)
|
||||||
ADMIN_ID=$(cat /proc/sys/kernel/random/uuid)
|
|
||||||
TODAY=$(date +%Y-%m-%d)
|
TODAY=$(date +%Y-%m-%d)
|
||||||
|
|
||||||
# Hash password using bcryptjs via node
|
|
||||||
HASH=$(node -e "const bcrypt=require('bcryptjs'); console.log(bcrypt.hashSync('$ADMIN_PASSWORD',10));")
|
HASH=$(node -e "const bcrypt=require('bcryptjs'); console.log(bcrypt.hashSync('$ADMIN_PASSWORD',10));")
|
||||||
|
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');"
|
||||||
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 "=========================================="
|
||||||
echo "ADMIN CREDENTIALS:"
|
echo "ADMIN CREDENTIALS:"
|
||||||
echo "DNI: $ADMIN_DNI"
|
echo "DNI: $ADMIN_DNI"
|
||||||
@@ -64,10 +36,8 @@ if [ -n "$TABLE_EXISTS" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "=== Initialisation complete ==="
|
echo "Starting nginx..."
|
||||||
|
|
||||||
# Start nginx in background
|
|
||||||
nginx &
|
nginx &
|
||||||
|
|
||||||
# Run the backend
|
echo "Starting API server..."
|
||||||
exec node server/api-mariadb.js
|
exec node server/api-mariadb.js
|
||||||
Reference in New Issue
Block a user