diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..fc93131 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +FROM python:3.13-alpine + +# install nginx and runtime deps, plus a build-deps group for uv sync +RUN apk add --no-cache nginx libffi openssl +RUN apk add --no-cache --virtual .build-deps build-base libffi-dev openssl-dev python3-dev + + # grab uv CLI +RUN mkdir -p /usr/local/bin \ + && wget -qO /usr/local/bin/uv https://ghcr.io/astral-sh/uv:latest/uv \ + && wget -qO /usr/local/bin/uvx https://ghcr.io/astral-sh/uv:latest/uvx \ + && chmod +x /usr/local/bin/uv /usr/local/bin/uvx + +WORKDIR /app + +# install your Python deps +COPY uv.lock pyproject.toml ./ +RUN uv sync --frozen --no-cache \ + # drop build tools once deps are in place + && apk del .build-deps + +# copy in the rest of your Django project +COPY . . + +# collectstatic +RUN uv run python manage.py collectstatic --noinput + +# copy nginx config +COPY nginx.conf /etc/nginx/nginx.conf + +EXPOSE 80 + +# start.sh should launch both nginx and uvicorn +COPY start.sh /start.sh +RUN chmod +x /start.sh + +CMD ["/start.sh"] + + diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..270fb79 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,25 @@ +server { + listen 80; + server_name acidarchon.com www.acidarchon.com localhost; + + # Serve static files + location /static/ { + alias /app/staticfiles/; + expires 30d; + add_header Cache-Control "public, immutable"; + } + + # Proxy to Django + location / { + proxy_pass http://web:8000; # 'web' is the service name + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # WebSocket support + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } +} diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..419f2bc --- /dev/null +++ b/start.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# Start uvicorn in background +uv run uvicorn mysite.asgi:application --host 127.0.0.1 --port 8000 & + +# Start nginx in foreground +nginx -g "daemon off;"