Add Docker support with Dockerfile and docker-compose.yml

- Introduced a Dockerfile for building the application using a multi-stage build process.
- Added docker-compose.yml to define services for the application and PostgreSQL database.
- Updated README.md with instructions for running the application using Docker and Docker Compose.
This commit is contained in:
Ben Melchior
2025-04-15 20:26:06 +02:00
parent 8d50c1e962
commit a70c80a557
3 changed files with 92 additions and 0 deletions

33
Dockerfile Normal file
View File

@@ -0,0 +1,33 @@
FROM rust:1.76-slim-bullseye as builder
WORKDIR /usr/src/app
COPY . .
# Build the application
RUN cargo build --release
# Create a new stage with a minimal image
FROM debian:bullseye-slim
WORKDIR /usr/local/bin
# Install necessary runtime dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
# Copy the built binary from the builder stage
COPY --from=builder /usr/src/app/target/release/hospitalapi .
# Create a directory for the .env file
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Copy the .env file
COPY .env .
# Expose the port the app runs on
EXPOSE 3000
# Run the application
CMD ["./hospitalapi"]

View File

@@ -79,6 +79,34 @@ All system events are logged with timestamps in the format:
[YYYY-MM-DD HH:MM:SS] Message [YYYY-MM-DD HH:MM:SS] Message
``` ```
## Docker Setup
### Prerequisites
- Docker
- Docker Compose
### Running with Docker
1. Make sure you have a `.env` file in the project root with the necessary configuration.
2. Build and start the containers:
```bash
docker-compose up -d
```
3. To view logs:
```bash
docker-compose logs -f
```
4. To stop the application:
```bash
docker-compose down
```
The application will be available at http://localhost:3000.
## License ## License
This project is licensed under the GNU General Public License v3.0 (GPL-3.0). This license ensures that: This project is licensed under the GNU General Public License v3.0 (GPL-3.0). This license ensures that:

31
docker-compose.yml Normal file
View File

@@ -0,0 +1,31 @@
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
depends_on:
- db
environment:
- DATABASE_URL=postgres://postgres:postgres@db/hospitaldb
- HOST=0.0.0.0
- PORT=3000
volumes:
- ./.env:/usr/src/app/.env
restart: unless-stopped
db:
image: postgres:14
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=hospitaldb
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
restart: unless-stopped
volumes:
postgres_data: