https://github.com/fatimajamali81/docker-nginx-postgres
This project demonstrates a multi-container application using Docker Compose, including a web application served by Nginx and a PostgreSQL database
https://github.com/fatimajamali81/docker-nginx-postgres
docker docker-compose multi-container nginx nginx-docker nginx-server postgresql-database
Last synced: about 1 month ago
JSON representation
This project demonstrates a multi-container application using Docker Compose, including a web application served by Nginx and a PostgreSQL database
- Host: GitHub
- URL: https://github.com/fatimajamali81/docker-nginx-postgres
- Owner: fatimajamali81
- Created: 2024-07-23T12:10:38.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-07-23T12:40:18.000Z (over 1 year ago)
- Last Synced: 2025-01-02T11:27:04.637Z (12 months ago)
- Topics: docker, docker-compose, multi-container, nginx, nginx-docker, nginx-server, postgresql-database
- Language: Python
- Homepage:
- Size: 22.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Multi-Container Docker Compose, nginx & postgres Project
This project demonstrates a multi-container application using Docker Compose, including a web application served by Nginx and a PostgreSQL database. The application, running in a Python Flask container, interacts with the PostgreSQL database. Nginx serves as a reverse proxy to the Flask application.
## Prerequisites
- Docker
- Docker Compose
## Setup
1. Clone the repository:
```sh
git clone
cd my_docker_compose_project
```
Build and run the containers:
```sh
docker-compose up --build
```
Access the web application at `http://localhost`.
## Purpose and Actions of Each File
### 1. `docker-compose.yml`
Defines the multi-container setup:
- **web**:
- Builds the application container from the `app` directory.
- Sets the `DATABASE_URL` environment variable.
- Maps port `5000` on the host to port `5000` in the container.
- **nginx**:
- Builds the Nginx container from the `nginx` directory.
- Maps port `80` on the host to port `80` in the container.
- Forwards requests to the `web` service on port `5000`.
- **db**:
- Builds the PostgreSQL container from the `postgres` directory.
- Sets environment variables for PostgreSQL (`POSTGRES_USER`, `POSTGRES_PASSWORD`, `POSTGRES_DB`).
- Maps port `5432` on the host to port `5432` in the container.
### 2. `nginx/Dockerfile`
Builds the Nginx image:
- Uses the official Nginx image.
- Copies the Nginx configuration file and static HTML files into the container.
### 3. `nginx/default.conf`
Configures Nginx to proxy requests to the Flask application:
- Forwards requests from port `80` to the `web` service on port `5000`.
### 4. `nginx/html/index.html`
A simple static HTML page served by Nginx:
- Displays a welcome message indicating that the application is connected to a PostgreSQL database.
### 5. `app/Dockerfile`
Builds the Flask application container:
- Uses the Python 3.9 slim image.
- Installs dependencies from `requirements.txt`.
- Runs the Flask application.
### 6. `app/requirements.txt`
Lists the Python packages needed for the application:
- `flask` for the web framework.
- `psycopg2-binary` for PostgreSQL database connectivity.
### 7. `app/app.py`
A simple Flask application:
- Connects to PostgreSQL using `psycopg2`.
- Exposes an endpoint that retrieves and returns data from the `users` table in PostgreSQL.
### 8. `postgres/Dockerfile`
Builds the PostgreSQL image:
- Uses the official PostgreSQL image.
- Copies the initialization SQL script into the container.
### 9. `postgres/init.sql`
Initial SQL script for PostgreSQL:
- Creates a `users` table.
- Inserts sample data into the table.
### Conclusion
This project provides a practical example of using Docker Compose to set up a multi-container application with Nginx, a Flask application, and PostgreSQL. It demonstrates how to configure and connect these components in a development environment.
### Summary
- **Nginx**: Serves as the reverse proxy for the Flask application.
- **Flask App**: Connects to the PostgreSQL database and provides an endpoint to retrieve data.
- **PostgreSQL**: Stores data and is initialized with a sample dataset.
### License
This project is licensed under the MIT License.