Skip to content

Commit 4b19a1b

Browse files
committed
devnet
1 parent 2f5cf27 commit 4b19a1b

File tree

6 files changed

+101
-21
lines changed

6 files changed

+101
-21
lines changed

Diff for: app/.dockerignore

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
.env
2+
.venv
3+
__pycache__/
4+
*.pyc
5+
*.pyo
6+
*.pyd
7+
.DS_Store

Diff for: app/.gitignore

+3-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
venv
1+
venv
2+
.env
3+
error.log

Diff for: app/Dockerfile renamed to app/Dockerfile.dev

File renamed without changes.

Diff for: app/app.py

+47-9
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,31 @@
44
import random
55
import os
66
from prometheus_client import Counter, start_http_server, generate_latest
7-
7+
from dotenv import load_dotenv
8+
load_dotenv() # Carrega variáveis do .env
9+
import jinja2
10+
print(f"[SEGURANÇA] Versão do Jinja2: {jinja2.__version__}") # Deve mostrar 3.1.6+
811

912
app = Flask(__name__)
1013

11-
redis_host = os.environ.get('REDIS_HOST', 'redis-service')
12-
redis_port = 6379
13-
redis_password = ""
14+
import os
15+
import redis
16+
17+
# Configuração do Redis mais robusta
18+
redis_host = os.environ.get('REDIS_HOST', 'localhost')
19+
redis_port = int(os.environ.get('REDIS_PORT', 6379))
20+
redis_password = os.environ.get('', None) # None evita passar string vazia
1421

15-
r = redis.StrictRedis(host=redis_host, port=redis_port, password=redis_password, decode_responses=True)
22+
r = redis.Redis(
23+
host=redis_host,
24+
port=redis_port,
25+
password=redis_password, # Se não houver senha, None é seguro
26+
decode_responses=True
27+
)
28+
29+
30+
# Configuração do Flask
31+
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY', 'dev-secret')
1632

1733
senha_gerada_counter = Counter('senha_gerada', 'Contador de senhas geradas')
1834

@@ -72,8 +88,30 @@ def listar_senhas():
7288
def metrics():
7389
return Response(generate_latest(), content_type='text/plain')
7490

91+
@app.route('/healthz')
92+
def health_check():
93+
try:
94+
# Verifica conexão com Redis
95+
r.ping()
96+
return jsonify({
97+
"status": "healthy",
98+
"redis": "connected",
99+
"version": "1.0.0"
100+
}), 200
101+
except Exception as e:
102+
return jsonify({
103+
"status": "unhealthy",
104+
"error": str(e)
105+
}), 500
106+
75107
if __name__ == '__main__':
76-
import logging
77-
logging.basicConfig(filename='error.log', level=logging.DEBUG)
78-
start_http_server(8088)
79-
app.run(debug=False)
108+
if os.environ.get('FLASK_ENV') == 'production':
109+
from waitress import serve
110+
serve(app, host="0.0.0.0", port=5000)
111+
else:
112+
app.run(
113+
host='0.0.0.0',
114+
port=5000,
115+
debug=True,
116+
use_reloader=True
117+
)

Diff for: app/docker-compose.yaml

+42-10
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,57 @@
11
services:
22
app:
3-
build: .
3+
build:
4+
context: .
5+
dockerfile: Dockerfile.dev # Dockerfile específico para dev
6+
container_name: giropops-app-dev # Nome explícito
47
environment:
8+
- FLASK_ENV=development
9+
- FLASK_DEBUG=1
510
- REDIS_HOST=redis
611
- REDIS_PORT=6379
12+
- PYTHONUNBUFFERED=1 # Melhora logging
713
ports:
8-
- 5000:5000
14+
- "5000:5000"
15+
volumes:
16+
- .:/app
17+
- /app/__pycache__ # Ignora cache
18+
- /app/.venv # Evita conflitos com venv local
919
depends_on:
10-
- redis
20+
redis:
21+
condition: service_healthy
1122
networks:
1223
- app-net
13-
restart: always
14-
volumes:
15-
- .:/app
24+
restart: unless-stopped
25+
healthcheck:
26+
test: ["CMD", "curl", "-f", "http://localhost:5000/healthz"]
27+
interval: 30s
28+
timeout: 10s
29+
retries: 3
30+
stdin_open: true # Permite attach
31+
tty: true # Permite interação
32+
1633
redis:
17-
image: redis:alpine
34+
image: redis:7-alpine
35+
container_name: giropops-redis-dev
1836
ports:
19-
- 6379:6379
37+
- "6379:6379"
38+
volumes:
39+
- redis_data:/data # Persistência mesmo em dev
2040
networks:
2141
- app-net
22-
restart: always
42+
restart: unless-stopped
43+
healthcheck:
44+
test: ["CMD", "redis-cli", "ping"]
45+
interval: 5s
46+
timeout: 3s
47+
retries: 3
48+
command: redis-server --save 60 1 --loglevel warning
49+
50+
volumes:
51+
redis_data:
52+
name: giropops-redis-data-dev # Volume nomeado
53+
2354
networks:
2455
app-net:
25-
driver: bridge
56+
name: giropops-network-dev # Rede nomeada
57+
driver: bridge

Diff for: app/requirements.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ blinker==1.9.0
33
click==8.1.8
44
Flask==3.1.0
55
itsdangerous==2.2.0
6-
Jinja2==3.1.5
6+
Jinja2==3.1.6
77
MarkupSafe==3.0.2
88
prometheus_client==0.21.1
99
redis==5.2.1
1010
Werkzeug==3.1.3
11+
python-dotenv==1.1.0

0 commit comments

Comments
 (0)