https://github.com/devjpmello/django-docker-nginx-postgres
https://github.com/devjpmello/django-docker-nginx-postgres
Last synced: 5 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/devjpmello/django-docker-nginx-postgres
- Owner: devJPMello
- Created: 2025-08-27T19:35:08.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2025-08-27T20:06:10.000Z (11 months ago)
- Last Synced: 2025-10-29T13:56:19.748Z (9 months ago)
- Language: Python
- Size: 8.88 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 🚀 Sistema de Upload de Arquivos com Django + Docker
## 📋 Descrição do Projeto
Este é um sistema completo de upload e gerenciamento de arquivos desenvolvido com **Django**, **Docker**, **Nginx** e **PostgreSQL**, atendendo aos requisitos da Atividade #1.
## 🏗️ Arquitetura
O projeto está estruturado com **3 containers Docker**:
1. **🐍 Container Django (Web)**: Aplicação principal com Gunicorn
2. **🌐 Container Nginx**: Proxy reverso e servidor de arquivos estáticos/mídia
3. **🗄️ Container PostgreSQL**: Banco de dados para persistência
## ✨ Funcionalidades
- ✅ **Upload de arquivos** com validação de tipo e tamanho
- ✅ **Persistência em volumes Docker** (arquivos não se perdem)
- ✅ **Interface moderna e responsiva** com drag & drop
- ✅ **Sistema de busca** por nome, descrição ou tipo
- ✅ **Paginação** dos arquivos enviados
- ✅ **Estatísticas** de uso (total de arquivos e espaço)
- ✅ **Validações** de segurança e formato
- ✅ **Mensagens de feedback** para o usuário
## 🛠️ Tecnologias Utilizadas
- **Backend**: Django 5.2 + Gunicorn
- **Frontend**: HTML5 + CSS3 + JavaScript (Vanilla)
- **Banco**: PostgreSQL 15
- **Web Server**: Nginx
- **Containerização**: Docker + Docker Compose
- **Volumes**: Persistência de dados e arquivos
## 📁 Estrutura do Projeto
```
django-docker-nginx-postgres/
├── app/ # Aplicação Django
│ ├── core/ # App principal
│ │ ├── models.py # Modelo de arquivos
│ │ ├── views.py # Views da aplicação
│ │ ├── forms.py # Formulários
│ │ └── urls.py # URLs do app
│ ├── myproject/ # Configurações do projeto
│ │ ├── settings.py # Configurações Django
│ │ └── urls.py # URLs principais
│ └── manage.py # Comando Django
├── docker/ # Configurações Docker
│ └── nginx/ # Configuração Nginx
│ └── nginx.conf # Configuração do servidor
├── templates/ # Templates HTML
│ └── upload.html # Interface principal
├── Dockerfile # Imagem Django
├── Dockerfile.nginx # Imagem Nginx
├── docker-compose.yml # Orquestração dos containers
├── entrypoint.sh # Script de inicialização
├── requirements.txt # Dependências Python
└── .env # Variáveis de ambiente
```
## 🚀 Como Executar
### Pré-requisitos
- Docker Desktop instalado e rodando
- Git (para clonar o repositório)
### 1. Clone o repositório
```bash
git clone
cd django-docker-nginx-postgres
```
### 2. Execute a aplicação
```bash
# Construir e iniciar todos os containers
docker-compose up --build
# Ou em background
docker-compose up -d --build
```
### 3. Acesse a aplicação
- **URL Principal**: http://localhost
- **Admin Django**: http://localhost/admin
- **Usuário**: admin
- **Senha**: admin123
## 🔧 Configurações
### Variáveis de Ambiente (.env)
```env
POSTGRES_DB=django_files
POSTGRES_USER=django_user
POSTGRES_PASSWORD=django_password_2024
DEBUG=True
SECRET_KEY=django-insecure-production-key-change-this-2024
ALLOWED_HOSTS=localhost,127.0.0.1
CSRF_TRUSTED_ORIGINS=http://localhost,http://127.0.0.1
```
### Volumes Docker
- **postgres_data**: Dados do banco PostgreSQL
- **static_volume**: Arquivos estáticos do Django
- **media_volume**: Arquivos enviados pelos usuários
## 📊 Funcionalidades da Aplicação
### Upload de Arquivos
- Suporte a múltiplos formatos (PDF, DOC, XLS, imagens, etc.)
- Validação de tamanho (máximo 100MB)
- Validação de extensões permitidas
- Campo de descrição opcional
### Gerenciamento
- Lista paginada de arquivos
- Busca por nome, descrição ou tipo
- Estatísticas de uso
- Download direto dos arquivos
### Segurança
- Validação CSRF
- Sanitização de uploads
- Headers de segurança no Nginx
- Usuário não-root nos containers
## 🐳 Comandos Docker Úteis
```bash
# Ver logs em tempo real
docker-compose logs -f
# Ver logs de um serviço específico
docker-compose logs -f web
docker-compose logs -f nginx
docker-compose logs -f db
# Parar todos os serviços
docker-compose down
# Parar e remover volumes (⚠️ CUIDADO: apaga dados)
docker-compose down -v
# Reconstruir um serviço específico
docker-compose build web
docker-compose up web
# Acessar container em execução
docker-compose exec web bash
docker-compose exec db psql -U django_user -d django_files
```
## 🔍 Monitoramento
### Health Checks
- **PostgreSQL**: Verificação de conectividade
- **Nginx**: Endpoint `/health` para verificação
- **Django**: Verificação automática de dependências
### Logs
- Todos os serviços logam para stdout/stderr
- Logs podem ser visualizados com `docker-compose logs`
## 🚨 Solução de Problemas
### Container não inicia
```bash
# Verificar logs
docker-compose logs
# Verificar status dos containers
docker-compose ps
# Reconstruir containers
docker-compose down
docker-compose up --build
```
### Problemas de permissão
```bash
# Verificar permissões dos volumes
docker-compose exec web ls -la /vol
# Corrigir permissões se necessário
docker-compose exec web chown -R django:django /vol
```
### Banco não conecta
```bash
# Verificar se PostgreSQL está rodando
docker-compose exec db pg_isready -U django_user
# Verificar logs do banco
docker-compose logs db
```
## 📈 Melhorias Futuras
- [ ] Autenticação de usuários
- [ ] Compressão de arquivos
- [ ] Backup automático dos volumes
- [ ] Monitoramento com Prometheus
- [ ] HTTPS com Let's Encrypt
- [ ] Cache Redis para performance
- [ ] API REST para integração
## 📝 Licença
Este projeto foi desenvolvido para fins educacionais.
## 👨💻 Autor
Desenvolvido para a Atividade #1 - Sistema de Upload com Docker.
---
**🎯 Objetivo Alcançado**: Sistema completo com 3 containers Docker, upload de arquivos, volumes persistentes e interface moderna!