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_USER=app_user
POSTGRES_PASSWORD=app_password POSTGRES_PASSWORD=app_password
POSTGRES_DB=app_db 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 WORKDIR /app
COPY package*.json ./ COPY package*.json ./
RUN npm install RUN npm install
COPY . . 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 { :80 {
reverse_proxy express:3000 reverse_proxy localhost:3000
} }

View file

@ -1,45 +1,14 @@
version: '3' version: '3'
services: services:
express: app:
build: . 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: ports:
- "80:80" - "80:80"
volumes: - "3000:3000"
- ./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:
- "5432:5432" - "5432:5432"
networks: environment:
- app_network - POSTGRES_HOST=${POSTGRES_HOST}
healthcheck: - POSTGRES_USER=${POSTGRES_USER}
test: [ "CMD", "pg_isready", "-U", "${POSTGRES_USER}", "-d", "${POSTGRES_DB}" ] - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
interval: 1s - POSTGRES_DB=${POSTGRES_DB}
retries: 10
networks:
app_network:
driver: bridge

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({ const sequelize = new Sequelize({
dialect: 'postgres', dialect: 'postgres',
host: 'postgres', host: process.env.POSTGRES_HOST,
port: 5432, port: 5432,
database: process.env.POSTGRES_DB, database: process.env.POSTGRES_DB,
username: process.env.POSTGRES_USER, username: process.env.POSTGRES_USER,