Automating Django Todo App Deployment on AWS EC2 with Jenkins, Docker, and Docker Compose
Preparing the Environment
1. Launch an AWS EC2 Instance
Log in to your AWS Management Console.
Navigate to EC2 and launch an instance.
SSH into your EC2 instance.
2. Install Jenkins on EC2 Instance
Install Jenkins by following the official documentation for your Linux distribution.
Note: Install Java before installing Jenkins.
After installing Jenkins, run the following commands:
sudo usermod -aG docker jenkins sudo reboot
Open port 8080 in security group.
3. Install Docker and Docker Compose on EC2 Instance
sudo apt update sudo apt-get install docker.io docker-compose -y sudo usermod -aG docker $USER sudo reboot
Note: After reboot, reconnect the instance.
4. Configure Jenkins
Check the status of Jenkins.
sudo systemctl status jenkins
Open Jenkins on your EC2 instance (http://YOUR_EC2_PUBLIC_IP:8080).
Run this command to find administrator password:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Install necessary plugins and set up the username and password for Jenkins dashboard.
Setting Up Jenkins Pipeline
1. Create Jenkins Pipeline Job
Create a new Pipeline job in Jenkins.
New Item
Set the Git repository URL to
https://github.com/robinthakur00/django-todo-app.git
.
2. Define Jenkins Pipeline Stages
Create a Jenkinsfile at the root of the repository to define the deployment stages.
pipeline { agent any stages { stage("Code Fetch From Git"){ steps{ git url: "https://github.com/robinthakur00/django-todo-app.git", branch: "master" } } stage("Build Docker Image"){ steps{ sh "docker build -t django-todo-app ." } } stage("Login And Push to DockerHub"){ steps{ withCredentials([usernamePassword(credentialsId:"dockerHub",passwordVariable:"dockerHubPass",usernameVariable:"dockerHubUser")]){ sh "docker login -u ${env.dockerHubUser} -p ${env.dockerHubPass}" sh "docker tag django-todo-app:latest ${env.dockerHubUser}/django-todo-app:latest" sh "docker push ${env.dockerHubUser}/django-todo-app:latest" } } } stage("Deploy the application"){ steps{ sh "docker-compose down && docker-compose up -d" } } } }
3. Configure Jenkins Pipeline Job
Configure Jenkins pipeline job with the Jenkinsfile path (
Jenkinsfile
if it's at the root).Define Docker Hub credentials in Jenkins Credentials Manager.
Go to Manage Jenkins -> Credentials -> System -> Global credentials -> Add Credentials
Running the Jenkins Pipeline
1. Trigger Jenkins Pipeline Job
Run the Jenkins pipeline job, Click Build Now
Jenkins will clone the repository, build the Docker image, push it to Docker Hub, and deploy the Django Todo App onto the EC2 instance using Docker Compose.
Access the Django Todo App in (http://YOUR_EC2_PUBLIC_IP:8000)
Note: This is a Django application that runs on port 8000. We need to open port 8000 in the security group.
Contributing:
Contributions are welcome! If you find any issues or want to improve this project, please open an issue or submit a pull request.
Happy Learning ^_^
Subscribe to my newsletter
Read articles from Robin Thakur directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Robin Thakur
Robin Thakur
I leverage my DevOps and Wordpress skills to deliver innovative and reliable solutions for various applications and websites. I utilize Docker, Jenkins, Terraform, Python, and Bash scripting to streamline application deployments, improve scalability, and reduce overhead. I have successfully developed and maintained CI/CD pipelines, aligned deployment strategies with business needs, and resolved real-time issues in various environments.