Fix Docker build and entrypoint script

This commit is contained in:
2026-04-24 13:50:05 -03:00
parent 39dd7cd374
commit b4f3e2ba7a
2 changed files with 14 additions and 47 deletions
+2 -3
View File
@@ -37,7 +37,7 @@ COPY server/ server/
COPY nginx.conf /etc/nginx/http.d/default.conf COPY nginx.conf /etc/nginx/http.d/default.conf
# Create directories # Create directories
RUN mkdir -p /run/nginx RUN mkdir -p /run/nginx /run/mysqld /var/lib/mysql
# Copy entrypoint script # Copy entrypoint script
COPY docker-entrypoint.sh /docker-entrypoint.sh COPY docker-entrypoint.sh /docker-entrypoint.sh
@@ -53,5 +53,4 @@ ENV DB_NAME=hospital
ENV ADMIN_DNI=00000000 ENV ADMIN_DNI=00000000
ENV ADMIN_PASSWORD=Admin123! ENV ADMIN_PASSWORD=Admin123!
ENTRYPOINT ["/docker-entrypoint.sh"] ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["nginx.sh", "node", "server/api-mariadb.js"]
+12 -44
View File
@@ -2,11 +2,9 @@
set -e set -e
echo "=== Starting MariaDB ===" echo "=== Starting MariaDB ==="
# Start MariaDB in background
mysqld --user=mysql & mysqld --user=mysql &
MYSQL_PID=$! MYSQL_PID=$!
# Wait for MariaDB to be ready
echo "Waiting for MariaDB to be ready..." echo "Waiting for MariaDB to be ready..."
for i in {1..60}; do for i in {1..60}; do
if mysqladmin ping -h localhost --silent 2>/dev/null; then if mysqladmin ping -h localhost --silent 2>/dev/null; then
@@ -16,17 +14,13 @@ for i in {1..60}; do
sleep 1 sleep 1
done done
# Create database if it doesn't exist
echo "Creating database if not exists..."
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\`;"
# Create user and grant permissions if DB_PASSWORD is set
if [ -n "$DB_PASSWORD" ] && [ "$DB_PASSWORD" != "" ]; then if [ -n "$DB_PASSWORD" ] && [ "$DB_PASSWORD" != "" ]; then
echo "Creating user and setting permissions..." echo "Creating user and setting permissions..."
DB_USER="${DB_USER:-hospital}" DB_USER="${DB_USER:-hospital}"
# Check if user exists
USER_EXISTS=$(mysql -h localhost -u root -N -e "SELECT COUNT(*) FROM mysql.user WHERE User='$DB_USER' AND Host='%';") USER_EXISTS=$(mysql -h localhost -u root -N -e "SELECT COUNT(*) FROM mysql.user WHERE User='$DB_USER' AND Host='%';")
if [ "$USER_EXISTS" = "0" ]; then if [ "$USER_EXISTS" = "0" ]; then
@@ -34,24 +28,12 @@ if [ -n "$DB_PASSWORD" ] && [ "$DB_PASSWORD" != "" ]; then
mysql -h localhost -u root -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'%';" mysql -h localhost -u root -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'%';"
mysql -h localhost -u root -e "FLUSH PRIVILEGES;" mysql -h localhost -u root -e "FLUSH PRIVILEGES;"
else else
echo "User already exists, updating password..."
mysql -h localhost -u root -e "ALTER USER '$DB_USER'@'%' IDENTIFIED BY '$DB_PASSWORD';" 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 "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'%';"
mysql -h localhost -u root -e "FLUSH PRIVILEGES;" mysql -h localhost -u root -e "FLUSH PRIVILEGES;"
fi fi
fi fi
echo "=== MariaDB initialization complete ==="
# If called with nginx.sh, start nginx
if [ "$1" = "nginx.sh" ]; then
echo "Starting nginx..."
nginx
shift
exec "$@"
fi
# Create initial admin user if not exists
ADMIN_DNI="${ADMIN_DNI:-00000000}" ADMIN_DNI="${ADMIN_DNI:-00000000}"
ADMIN_PASSWORD="${ADMIN_PASSWORD:-Admin123!}" ADMIN_PASSWORD="${ADMIN_PASSWORD:-Admin123!}"
@@ -63,43 +45,29 @@ if [ -n "$TABLE_EXISTS" ]; then
if [ "$USER_COUNT" = "0" ]; then if [ "$USER_COUNT" = "0" ]; then
echo "Creating initial admin user..." echo "Creating initial admin user..."
# Generate UUID for user
ADMIN_ID=$(cat /proc/sys/kernel/random/uuid) ADMIN_ID=$(cat /proc/sys/kernel/random/uuid)
TODAY=$(date +%Y-%m-%d) TODAY=$(date +%Y-%m-%d)
# Use bcrypt hash - default password for bcrypt is $2a$10$ (10 rounds) # Hash password using bcryptjs via node
# Hash for "Admin123!" - this is a pre-computed hash, admin should change it HASH=$(node -e "const bcrypt = require('bcryptjs'); console.log(bcrypt.hashSync('$ADMIN_PASSWORD', 10));")
BCRYPT_HASH='$2a$10$8kOhKfxFzN9YxJxGfJ5EwONz1JQJNKJqk1JqNKJqNKJqNKJqNKJqu'
# Insert with a temp hash that won't work - we'll display the credentials to set manually
mysql -h localhost -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" -e " mysql -h localhost -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" -e "
INSERT INTO usuarios (id, apellido, nombre, dni, fechaNacimiento, email, rol, passwordHash, fechaCreacion) INSERT INTO usuarios (id, apellido, nombre, dni, fechaNacimiento, email, rol, passwordHash, fechaCreacion)
VALUES ('$ADMIN_ID', 'Administrador', 'Sistema', '$ADMIN_DNI', '$TODAY', 'admin@hospital.local', 'admin', '', '$TODAY'); VALUES ('$ADMIN_ID', 'Administrador', 'Sistema', '$ADMIN_DNI', '$TODAY', 'admin@hospital.local', 'admin', '$HASH', '$TODAY');
" "
echo "==========================================" echo "=========================================="
echo "ADMIN CREDENTIALS (change password on first login):" echo "ADMIN CREDENTIALS:"
echo "DNI: $ADMIN_DNI" echo "DNI: $ADMIN_DNI"
echo "Password: $ADMIN_PASSWORD" echo "Password: $ADMIN_PASSWORD"
echo "==========================================" echo "=========================================="
# Now update with correct bcrypt hash
node -e "
const bcrypt = require('bcryptjs');
const hash = bcrypt.hashSync('$ADMIN_PASSWORD', 10);
console.log(hash);
" > /tmp/hash.txt 2>/dev/null || true
HASH=$(cat /tmp/hash.txt 2>/dev/null || echo "")
if [ -n "$HASH" ]; then
mysql -h localhost -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" -e "UPDATE usuarios SET passwordHash='$HASH' WHERE dni='$ADMIN_DNI';"
echo "Admin user created with password hash."
fi
else
echo "Admin user already exists, skipping creation."
fi fi
fi fi
# Run the command passed to the container echo "=== Initialisation complete ==="
exec "$@"
# Start nginx in background
nginx &
# Run the backend
exec node server/api-mariadb.js