Docker installation failed on EC2 due to permission and compatibility issues.
Even when installed, containers didn’t start reliably or needed extra configuration.
We decided to switch to a direct Apache + Flask setup for better control and stability.
Jenkins setup introduced permission errors and required multiple plugins.
The overhead slowed progress, especially with GitHub integration and shell access.
We replaced Jenkins with a simple GitHub-based git pull deployment flow.
Rebooting the EC2 instance changed its public IP, breaking the hosted URL.
This made it difficult to maintain a stable access point for the application.
We implemented DuckDNS with a cron job to auto-update the IP every 5 minutes.
Manual edits on EC2 caused conflicts when pulling updates from GitHub.
This led to broken deployments and inconsistent code states.
We enforced a rule to block direct edits and allow only GitHub-based updates.
Automation streamlined our deployment process significantly, reducing manual effort while still requiring careful configuration of Git, credentials, and secure server access. The CI/CD workflow was initiated by a code push to GitHub, which Jenkins detected and responded to by pulling the latest code from the repository.
Jenkins executed a defined pipeline (Jenkinsfile) that cloned the repository, transferred all necessary project files to the AWS EC2 instance using SSH and SCP, and built a Docker image on the remote server. It then launched a fresh Docker container running Nginx to serve the Vite-based frontend.
Despite not using advanced CI/CD platforms like GitHub Actions or cloud-native deployment tools, we achieved an automated, robust deployment mechanism. Even Selenium tests were integrated into the pipeline for post-deployment checks. This lightweight approach demonstrated how GitHub, Jenkins, EC2, and Docker can be combined effectively to build a dependable CI/CD pipeline—even for a student-level project.
This hands-on experience enhanced my understanding of automation, cloud infrastructure, and practical DevOps techniques, showing how simplicity and precision can rival more complex setups.