{"id":31324723,"url":"https://github.com/kprince28/django-sample-app","last_synced_at":"2026-04-15T10:33:19.368Z","repository":{"id":315634087,"uuid":"1060307168","full_name":"kprince28/django-sample-app","owner":"kprince28","description":"🐍🐳 Learn Docker \u0026 Kubernetes with Django! Educational containerized Django app with PostgreSQL support, environment variables, and production-ready patterns. Perfect for DevOps beginners.","archived":false,"fork":false,"pushed_at":"2025-10-28T17:37:13.000Z","size":12,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-28T18:32:21.292Z","etag":null,"topics":["beginners","ci-cd","containerization","devops","django","docker","docker-compose","education","k8s","kubernetes","learning","microservices","postgresql","python","tutorial"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kprince28.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-19T17:38:34.000Z","updated_at":"2025-10-28T17:37:17.000Z","dependencies_parsed_at":"2025-09-19T20:14:04.532Z","dependency_job_id":null,"html_url":"https://github.com/kprince28/django-sample-app","commit_stats":null,"previous_names":["kprince28/django-sample-app"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kprince28/django-sample-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kprince28%2Fdjango-sample-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kprince28%2Fdjango-sample-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kprince28%2Fdjango-sample-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kprince28%2Fdjango-sample-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kprince28","download_url":"https://codeload.github.com/kprince28/django-sample-app/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kprince28%2Fdjango-sample-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31837165,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T10:26:52.245Z","status":"ssl_error","status_checked_at":"2026-04-15T10:26:51.649Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["beginners","ci-cd","containerization","devops","django","docker","docker-compose","education","k8s","kubernetes","learning","microservices","postgresql","python","tutorial"],"created_at":"2025-09-25T21:30:00.832Z","updated_at":"2026-04-15T10:33:19.360Z","avatar_url":"https://github.com/kprince28.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Django Sample App - Docker \u0026 Kubernetes Learning 🐍🐳\n\n[![Docker Hub](https://img.shields.io/docker/pulls/deskpkumar/django-sample-app?logo=docker)](https://hub.docker.com/r/deskpkumar/django-sample-app)\n[![GitHub Stars](https://img.shields.io/github/stars/kprince28/django-sample-app?logo=github)](https://github.com/kprince28/django-sample-app)\n[![Python 3.12](https://img.shields.io/badge/python-3.12-blue.svg)](https://python.org)\n[![Django 5.0](https://img.shields.io/badge/django-5.0-green.svg)](https://djangoproject.com)\n\n\u003e **🎓 Educational Project:** A beginner-friendly Django application specifically designed for learning Docker, Kubernetes, and containerization concepts with real-world database integration patterns.\n\n## 🎯 Learning Objectives\n\nThis project helps you master:\n\n- **🐳 Docker fundamentals** - Containerizing Python/Django applications\n- **☸️ Kubernetes basics** - Deploying containers in production\n- **🔧 Environment management** - Configuration with environment variables  \n- **🗄️ Database integration** - SQLite to PostgreSQL migration patterns\n- **🛡️ Container security** - Non-root users, secure configurations\n- **📦 Multi-stage deployments** - Development to production workflows\n\n## 🚀 Quick Start\n\n### Method 1: Docker Hub (Fastest)\n\n```bash\n# Simple run with SQLite\ndocker run -p 8000:8000 deskpkumar/django-sample-app:latest\n\n# Open: http://localhost:8000\n```\n\n### Method 2: Build from Source\n\n```bash\ngit clone https://github.com/kprince28/django-sample-app.git\ncd django-sample-app\ndocker build -t django-learning .\ndocker run -p 8000:8000 django-learning\n```\n\n## 📚 Learning Path\n\n### 🔰 Beginner: Basic Containerization\n\n**Goal:** Understand how Django runs in containers\n\n```bash\n# 1. Pull and run the basic container\ndocker run -p 8000:8000 deskpkumar/django-sample-app:latest\n\n# 2. Explore the container\ndocker exec -it container_name bash\nls -la /app\nwhoami  # You'll see 'appuser' - non-root execution!\n\n# 3. Check the database\ndocker exec -it container_name python manage.py dbshell\n```\n\n**Learning points:**\n- Container isolation and port mapping\n- Non-root user security\n- File system structure in containers\n\n### 🎓 Intermediate: Environment Configuration\n\n**Goal:** Learn environment variable management\n\n```bash\n# 1. Copy environment template\ncp .env.sample .env\n\n# 2. Generate secure secret key\npython -c \"from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())\"\n\n# 3. Edit .env with your values\nSECRET_KEY=your-generated-secret-key-here\nDEBUG=False\nALLOWED_HOSTS=localhost,127.0.0.1\n\n# 4. Run with environment file\ndocker run --env-file .env -p 8000:8000 deskpkumar/django-sample-app:latest\n```\n\n**Learning points:**\n- Environment variable precedence (.env vs OS env)\n- Security implications of DEBUG mode\n- Host restrictions for production\n\n### 🏆 Advanced: Database Integration\n\n**Goal:** Master database configuration patterns\n\n```bash\n# 1. Run PostgreSQL container\ndocker run -d --name learning-postgres \\\n  -e POSTGRES_DB=django_learning \\\n  -e POSTGRES_USER=student \\\n  -e POSTGRES_PASSWORD=learning123 \\\n  postgres:15-alpine\n\n# 2. Connect Django to PostgreSQL\ndocker run -p 8000:8000 \\\n  --link learning-postgres:postgres \\\n  -e DB_ENGINE=postgresql \\\n  -e DB_NAME=django_learning \\\n  -e DB_USER=student \\\n  -e DB_PASSWORD=learning123 \\\n  -e DB_HOST=postgres \\\n  deskpkumar/django-sample-app:latest\n```\n\n**Learning points:**\n- Container networking and linking\n- Database connection configuration\n- Environment-based service discovery\n\n## 🛠️ Development Setup\n\n### Prerequisites\n- Docker installed\n- Git installed\n- Basic command line knowledge\n\n### Local Development\n\n```bash\n# 1. Clone the repository\ngit clone https://github.com/kprince28/django-sample-app.git\ncd django-sample-app\n\n# 2. Create your environment file\ncp .env.sample .env\n\n# 3. Generate a secure secret key\npython3 -c \"import secrets; print(secrets.token_urlsafe(50))\"\n\n# 4. Update .env with your values\ncat \u003e .env \u003c\u003c EOF\nSECRET_KEY=your-secret-key-here\nDEBUG=True\nALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0\nDB_ENGINE=sqlite\nEOF\n\n# 5. Build and run\ndocker build -t django-learning .\ndocker run --env-file .env -p 8000:8000 django-learning\n```\n\n### With PostgreSQL (Full Stack Learning)\n\n```bash\n# 1. Use Docker Compose for full stack\ncat \u003e docker-compose.yml \u003c\u003c EOF\nversion: '3.8'\n\nservices:\n  django:\n    build: .\n    ports:\n      - \"8000:8000\"\n    environment:\n      - SECRET_KEY=learning-secret-key-not-for-production\n      - DEBUG=True\n      - DB_ENGINE=postgresql\n      - DB_NAME=django_learning\n      - DB_USER=postgres\n      - DB_PASSWORD=postgres123\n      - DB_HOST=postgres\n      - ALLOWED_HOSTS=localhost,127.0.0.1\n    depends_on:\n      postgres:\n        condition: service_healthy\n\n  postgres:\n    image: postgres:15-alpine\n    environment:\n      POSTGRES_DB: django_learning\n      POSTGRES_USER: postgres\n      POSTGRES_PASSWORD: postgres123\n    volumes:\n      - postgres_data:/var/lib/postgresql/data\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U postgres\"]\n      interval: 5s\n      timeout: 5s\n      retries: 5\n\nvolumes:\n  postgres_data:\nEOF\n\n# 2. Start the full stack\ndocker-compose up --build\n```\n\n## ☸️ Kubernetes Learning\n\n### Basic Deployment\n\n```yaml\n# k8s-basic.yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: django-learning-app\n  labels:\n    app: django-learning\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: django-learning\n  template:\n    metadata:\n      labels:\n        app: django-learning\n    spec:\n      containers:\n      - name: django\n        image: deskpkumar/django-sample-app:latest\n        ports:\n        - containerPort: 8000\n        env:\n        - name: SECRET_KEY\n          value: \"k8s-learning-secret-change-in-production\"\n        - name: DEBUG\n          value: \"True\"\n        - name: ALLOWED_HOSTS\n          value: \"*\"\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: django-learning-service\nspec:\n  selector:\n    app: django-learning\n  ports:\n  - port: 80\n    targetPort: 8000\n  type: LoadBalancer\n```\n\n**Deploy to Kubernetes:**\n```bash\n# Apply the configuration\nkubectl apply -f k8s-basic.yaml\n\n# Check deployment status\nkubectl get deployments\nkubectl get pods\nkubectl get services\n\n# Get external IP (if using cloud provider)\nkubectl get services django-learning-service\n```\n\n### Advanced: ConfigMaps and Secrets\n\n```yaml\n# k8s-advanced.yaml\napiVersion: v1\nkind: Secret\nmetadata:\n  name: django-secrets\ntype: Opaque\nstringData:\n  secret-key: \"your-super-secret-key-here\"\n  db-password: \"secure-db-password\"\n---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: django-config\ndata:\n  DEBUG: \"False\"\n  ALLOWED_HOSTS: \"your-domain.com,www.your-domain.com\"\n  DB_ENGINE: \"postgresql\"\n  DB_NAME: \"production_db\"\n  DB_USER: \"django_user\"\n  DB_HOST: \"postgres-service\"\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: django-production\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: django-production\n  template:\n    metadata:\n      labels:\n        app: django-production\n    spec:\n      containers:\n      - name: django\n        image: deskpkumar/django-sample-app:latest\n        ports:\n        - containerPort: 8000\n        envFrom:\n        - configMapRef:\n            name: django-config\n        env:\n        - name: SECRET_KEY\n          valueFrom:\n            secretKeyRef:\n              name: django-secrets\n              key: secret-key\n        - name: DB_PASSWORD\n          valueFrom:\n            secretKeyRef:\n              name: django-secrets\n              key: db-password\n```\n\n## 🔧 Configuration Reference\n\n### Environment Variables\n\n| Variable | Default | Description | Required |\n|----------|---------|-------------|----------|\n| `SECRET_KEY` | `django-insecure-*` | Django cryptographic key | Production: Yes |\n| `DEBUG` | `True` | Enable Django debug mode | No |\n| `ALLOWED_HOSTS` | `*` | Comma-separated allowed hosts | Production: Yes |\n| `DB_ENGINE` | `sqlite` | Database backend (`sqlite` or `postgresql`) | No |\n| `DB_NAME` | `django_db` | Database name | PostgreSQL: Yes |\n| `DB_USER` | `postgres` | Database username | PostgreSQL: Yes |\n| `DB_PASSWORD` | `` | Database password | PostgreSQL: Yes |\n| `DB_HOST` | `localhost` | Database host | PostgreSQL: Yes |\n| `DB_PORT` | `5432` | Database port | No |\n\n### Security Best Practices\n\n```bash\n# ✅ DO: Use strong secret keys\nSECRET_KEY=$(python -c \"from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())\")\n\n# ✅ DO: Restrict allowed hosts in production\nALLOWED_HOSTS=\"yourdomain.com,www.yourdomain.com\"\n\n# ✅ DO: Disable debug in production\nDEBUG=False\n\n# ❌ DON'T: Use default values in production\n# SECRET_KEY=django-insecure-change-me-in-production  # BAD!\n# DEBUG=True  # BAD in production!\n# ALLOWED_HOSTS=*  # BAD in production!\n```\n\n## 📊 Project Structure\n\n```\ndjango-sample-app/\n├── app/                    # Django project directory\n│   ├── __init__.py\n│   ├── settings.py        # 🔧 Environment-aware configuration\n│   ├── urls.py\n│   └── wsgi.py\n├── manage.py              # Django management script\n├── requirements.txt       # Python dependencies\n├── Dockerfile            # 🐳 Container configuration\n├── .env.sample           # Environment template\n├── docker-compose.yml    # Full stack setup\n└── README.md            # This file\n```\n\n## 🐛 Troubleshooting Guide\n\n### Container Issues\n\n**Problem:** Container exits immediately\n```bash\n# Check logs\ndocker logs container_name\n\n# Common solutions:\n# 1. Missing SECRET_KEY in production (DEBUG=False)\n# 2. Database connection failed\n# 3. Port already in use\n```\n\n**Problem:** Database connection refused\n```bash\n# For PostgreSQL issues:\n# 1. Check if PostgreSQL container is running\ndocker ps | grep postgres\n\n# 2. Test connection\ndocker exec -it django_container python manage.py dbshell\n\n# 3. Verify environment variables\ndocker exec -it django_container env | grep DB_\n```\n\n**Problem:** Static files not loading\n```bash\n# Static files are collected during build\n# Rebuild if you added new static files\ndocker build --no-cache -t django-learning .\n```\n\n### Kubernetes Issues\n\n**Problem:** Pods not starting\n```bash\n# Check pod status\nkubectl describe pod pod_name\n\n# Check events\nkubectl get events --sort-by=.metadata.creationTimestamp\n\n# Common solutions:\n# 1. Image pull issues\n# 2. Resource limits\n# 3. ConfigMap/Secret not found\n```\n\n## 🧪 Testing \u0026 Validation\n\n### Basic Functionality Tests\n\n```bash\n# 1. Health check\ncurl http://localhost:8000/\n\n# 2. Admin interface\ncurl http://localhost:8000/admin/\n\n# 3. Database connectivity (PostgreSQL)\ndocker exec -it container_name python manage.py dbshell\n\\l  # List databases\n\\q  # Quit\n```\n\n### Load Testing (Learning)\n\n```bash\n# Simple load test with curl\nfor i in {1..100}; do\n  curl -s http://localhost:8000/ \u003e /dev/null\n  echo \"Request $i completed\"\ndone\n\n# Or use Apache Bench if available\nab -n 100 -c 10 http://localhost:8000/\n```\n\n## 📈 Next Steps \u0026 Advanced Learning\n\n### Production Readiness Checklist\n\n- [ ] **Security:** Generate unique SECRET_KEY\n- [ ] **Configuration:** Set DEBUG=False\n- [ ] **Networking:** Configure proper ALLOWED_HOSTS  \n- [ ] **Database:** Use managed PostgreSQL service\n- [ ] **Monitoring:** Add health checks and logging\n- [ ] **Scaling:** Configure horizontal pod autoscaling\n- [ ] **Storage:** Use persistent volumes for media files\n- [ ] **SSL:** Configure HTTPS termination\n\n### Suggested Extensions\n\n1. **Add Redis for caching**\n2. **Implement CI/CD pipelines**\n3. **Add monitoring with Prometheus**\n4. **Configure log aggregation**\n5. **Implement blue-green deployments**\n6. **Add database migrations in init containers**\n\n## 🤝 Contributing\n\nThis is a learning project! Contributions that help others learn are welcome:\n\n1. **Fork** the repository\n2. **Create** a learning-focused feature branch\n3. **Add** educational comments to your code\n4. **Test** with both SQLite and PostgreSQL\n5. **Submit** a pull request with learning notes\n\n### Ideas for Contributions\n\n- Additional database backends (MySQL, MongoDB)\n- Helm charts for Kubernetes\n- CI/CD pipeline examples\n- Monitoring and observability examples\n- Performance optimization tutorials\n\n## 📝 Learning Resources\n\n### Docker \u0026 Containers\n- [Docker Official Tutorial](https://docs.docker.com/get-started/)\n- [Docker Best Practices](https://docs.docker.com/develop/best-practices/)\n\n### Kubernetes\n- [Kubernetes Basics](https://kubernetes.io/docs/tutorials/kubernetes-basics/)\n- [Kubernetes Examples](https://github.com/kubernetes/examples)\n\n### Django in Production\n- [Django Deployment Checklist](https://docs.djangoproject.com/en/stable/howto/deployment/checklist/)\n- [12-Factor App Methodology](https://12factor.net/)\n\n## 📄 License\n\nThis project is licensed under the MIT License - perfect for educational use and modification.\n\n## 👨‍💻 Author\n\n**Prince Kumar**\n- **GitHub:** [@kprince28](https://github.com/kprince28)\n- **Docker Hub:** [deskpkumar](https://hub.docker.com/u/deskpkumar)\n- **Focus:** Python backend development \u0026 DevOps learning\n\n---\n\n⭐ **Star this repo** if it helped you learn Docker \u0026 Kubernetes with Django!\n\n🐳 **Quick Start:** `docker run -p 8000:8000 deskpkumar/django-sample-app:latest`\n\n🚀 **Happy Learning!**","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkprince28%2Fdjango-sample-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkprince28%2Fdjango-sample-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkprince28%2Fdjango-sample-app/lists"}