ok this seems to work

This commit is contained in:
counterweight 2025-02-14 20:03:28 +01:00
parent e725dce831
commit 15ffabebf3
Signed by: counterweight
GPG key ID: 883EDBAA726BD96C
6 changed files with 54 additions and 46 deletions

View file

@ -1,3 +1,4 @@
POSTGRES_HOST=localhost
POSTGRES_USER=app_user
POSTGRES_PASSWORD=app_password
POSTGRES_DB=app_db

View file

@ -1,13 +1,25 @@
FROM node:20
FROM debian:latest
# Install dependencies
RUN apt-get update && apt-get install -y \
curl gnupg2 ca-certificates lsb-release apt-transport-https \
postgresql caddy nodejs npm && \
rm -rf /var/lib/apt/lists/*
# Set up working directory for Express app
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
COPY caddy/Caddyfile /etc/caddy/Caddyfile
CMD ["npm", "start"]
# Copy entrypoint script
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
# Expose required ports
EXPOSE 80 3000 5432
# Use the entrypoint script to start everything
ENTRYPOINT ["/docker-entrypoint.sh"]

View file

@ -1,3 +1,3 @@
:80 {
reverse_proxy express:3000
reverse_proxy localhost:3000
}

View file

@ -1,45 +1,14 @@
version: '3'
services:
express:
app:
build: .
user: "${UID:-1000}:${GID:-1000}"
ports:
- "3000:3000"
volumes:
- ./container-data:/app/data
networks:
- app_network
depends_on:
postgres:
condition: service_healthy
caddy:
image: caddy:2
ports:
- "80:80"
volumes:
- ./caddy:/etc/caddy
networks:
- app_network
depends_on:
- express
postgres:
image: postgres
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
ports:
- "3000:3000"
- "5432:5432"
networks:
- app_network
healthcheck:
test: [ "CMD", "pg_isready", "-U", "${POSTGRES_USER}", "-d", "${POSTGRES_DB}" ]
interval: 1s
retries: 10
networks:
app_network:
driver: bridge
environment:
- POSTGRES_HOST=${POSTGRES_HOST}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}

26
docker-entrypoint.sh Normal file
View file

@ -0,0 +1,26 @@
#!/bin/bash
# Start PostgreSQL service
service postgresql start
# Wait for PostgreSQL to be ready
until su - postgres -c "pg_isready"; do
echo "Waiting for PostgreSQL to be ready..."
sleep 1
done
# Create the database and user if they don't exist
su - postgres -c "psql -tc \"SELECT 1 FROM pg_roles WHERE rolname = '$POSTGRES_USER';\"" | grep -q 1 || \
su - postgres -c "psql -c \"CREATE USER $POSTGRES_USER WITH ENCRYPTED PASSWORD '$POSTGRES_PASSWORD';\""
su - postgres -c "psql -tc \"SELECT 1 FROM pg_database WHERE datname = '$POSTGRES_DB';\"" | grep -q 1 || \
su - postgres -c "psql -c \"CREATE DATABASE $POSTGRES_DB OWNER $POSTGRES_USER;\""
# Start Caddy
caddy run --config /etc/caddy/Caddyfile &
# Start Express app
npm start
# Keep container running
wait

View file

@ -5,7 +5,7 @@ dotenv.config();
const sequelize = new Sequelize({
dialect: 'postgres',
host: 'postgres',
host: process.env.POSTGRES_HOST,
port: 5432,
database: process.env.POSTGRES_DB,
username: process.env.POSTGRES_USER,