How to Deploy a Django App with Docker & DockerHub on a Virtual Machine (AWS EC2) (2025)
Автор: ProgrammingKnowledge
Загружено: 2025-02-17
Просмотров: 1380
🚀 *Deploy your Django app with Docker & DockerHub on AWS EC2!* This step-by-step guide will teach you how to *containerize your Django app**, push it to **DockerHub**, and deploy it on an **AWS EC2 Virtual Machine**. By the end of this tutorial, you'll have a fully functional Django app running on a cloud server with **Nginx & Gunicorn* for production.
---
*🔹 What You'll Learn in This Video:*
✅ How to *Dockerize a Django App*
✅ How to *Push a Docker Image to DockerHub*
✅ How to *Set Up an AWS EC2 Virtual Machine*
✅ How to *Pull and Run the Docker Image on EC2*
✅ How to *Set Up Nginx as a Reverse Proxy*
✅ How to *Run Django in Production with Gunicorn*
---
*🔹 Prerequisites:*
✔️ *Basic Knowledge of Django & Docker*
✔️ *AWS Account* ([Sign Up Here](https://aws.amazon.com/free/))
✔️ *GitHub Repository with Django Code*
✔️ *Docker Installed Locally* ([Get Docker](https://www.docker.com/get-started))
---
*🔹 Step 1: Create a Dockerfile for Django*
Inside your Django project folder, create a file named **`Dockerfile`**:
```dockerfile
Use an official Python runtime as a base image
FROM python:3.9
Set the working directory
WORKDIR /app
Copy the project files
COPY . /app/
Install dependencies
RUN pip install --no-cache-dir -r requirements.txt
Expose the application port
EXPOSE 8000
Start the Django application using Gunicorn
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "your_project.wsgi:application"]
```
---
*🔹 Step 2: Create a `docker-compose.yml` (Optional)*
To simplify container management, create **`docker-compose.yml`**:
```yaml
version: '3.8'
services:
web:
build: .
ports:
"8000:8000"
volumes:
.:/app
environment:
DEBUG=False
depends_on:
db
db:
image: postgres:13
environment:
POSTGRES_USER: django
POSTGRES_PASSWORD: django
POSTGRES_DB: django_db
```
---
*🔹 Step 3: Build and Test Your Docker Image Locally*
Run the following command in your Django project directory:
```bash
docker build -t your-django-app .
```
Once the build is complete, test it by running:
```bash
docker run -p 8000:8000 your-django-app
```
✅ Open `http://localhost:8000` to check if the app is running.
---
*🔹 Step 4: Push the Docker Image to DockerHub*
1️⃣ Log in to DockerHub:
```bash
docker login
```
2️⃣ Tag your image:
```bash
docker tag your-django-app your-dockerhub-username/your-django-app:latest
```
3️⃣ Push the image to DockerHub:
```bash
docker push your-dockerhub-username/your-django-app:latest
```
✅ Your image is now stored in DockerHub!
---
*🔹 Step 5: Launch an AWS EC2 Virtual Machine*
1️⃣ *Go to AWS EC2 Console*
2️⃣ Click *Launch Instance*
3️⃣ Choose *Ubuntu 22.04 LTS*
4️⃣ Select *t2.micro (Free Tier)*
5️⃣ Configure **Security Group**:
Allow *SSH (port 22)*
Allow *HTTP (port 80)*
Allow *HTTPS (port 443)*
6️⃣ Click *Launch* and *download the key pair (`.pem` file)*
---
*🔹 Step 6: Connect to AWS EC2 via SSH*
🔹 *For Mac/Linux Users:*
```bash
chmod 400 your-key.pem
ssh -i your-key.pem ubuntu@your-ec2-public-ip
```
🔹 *For Windows Users (Using PuTTY):*
1️⃣ Convert `.pem` to `.ppk` using *PuTTYgen*
2️⃣ Open **PuTTY**, enter **EC2 Public IP**, and load the `.ppk` key
3️⃣ Click *Open* and log in as `ubuntu`
---
*🔹 Step 7: Install Docker on AWS EC2*
Once connected to your EC2 instance, install Docker:
```bash
sudo apt update && sudo apt upgrade -y
sudo apt install docker.io -y
sudo systemctl start docker
sudo systemctl enable docker
```
---
*🔹 Step 8: Pull & Run Your Docker Image on EC2*
1️⃣ Log in to DockerHub:
```bash
docker login
```
2️⃣ Pull your Docker image:
```bash
docker pull your-dockerhub-username/your-django-app:latest
```
3️⃣ Run the container:
```bash
docker run -d -p 8000:8000 your-dockerhub-username/your-django-app
```
✅ Your Django app is now running on *port 8000* on AWS EC2!
---
*🔹 Step 9: Set Up Nginx as a Reverse Proxy*
1️⃣ Install Nginx:
```bash
sudo apt install nginx -y
```
2️⃣ Configure Nginx:
```bash
sudo nano /etc/nginx/sites-available/django
```
3️⃣ Add this configuration:
```
server {
listen 80;
server_name your-ec2-public-ip your-domain.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
```
4️⃣ Enable the configuration and restart Nginx:
```bash
sudo ln -s /etc/nginx/sites-available/django /etc/nginx/sites-enabled
sudo systemctl restart nginx
```
✅ Your Django app is now **accessible via HTTP on EC2**!
---
*🔹 Hashtags:*
#Django #Docker #DockerHub #AWS #EC2 #Nginx #Gunicorn #DjangoDeployment #DevOps #CloudComputing #AWSDeployment
Доступные форматы для скачивания:
Скачать видео mp4
-
Информация по загрузке: