Run backend as non-root user, add resource limits to all containers

- Dockerfile: create and switch to unprivileged appuser (HIGH fix)
- docker-compose: mem_limit + cpus on nginx (128m/0.25), backend (512m/0.5), db (512m/0.5)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-25 01:06:40 -07:00
parent 95d648210c
commit 2c45e599c0
2 changed files with 9 additions and 0 deletions
+3
View File
@@ -7,4 +7,7 @@ RUN pip install --no-cache-dir -r requirements.txt
COPY app/ ./app/ COPY app/ ./app/
RUN useradd -r -s /bin/false appuser
USER appuser
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
+6
View File
@@ -9,6 +9,8 @@ services:
depends_on: depends_on:
- backend - backend
restart: unless-stopped restart: unless-stopped
mem_limit: 128m
cpus: 0.25
backend: backend:
build: ./backend build: ./backend
@@ -23,6 +25,8 @@ services:
db: db:
condition: service_healthy condition: service_healthy
restart: unless-stopped restart: unless-stopped
mem_limit: 512m
cpus: 0.5
healthcheck: healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"] test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
interval: 10s interval: 10s
@@ -45,6 +49,8 @@ services:
timeout: 5s timeout: 5s
retries: 10 retries: 10
restart: unless-stopped restart: unless-stopped
mem_limit: 512m
cpus: 0.5
volumes: volumes:
mysql_data: mysql_data: