diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml new file mode 100644 index 00000000..92eb3570 --- /dev/null +++ b/.github/workflows/docker-ci.yml @@ -0,0 +1,30 @@ +name: Docker CI + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker + uses: docker/setup-buildx-action@v3 + + - name: Build images + run: docker compose build + + - name: Start containers + run: docker compose up -d + + - name: Check running containers + run: docker ps + + - name: Stop containers + run: docker compose down diff --git a/backend/dockerfile b/backend/dockerfile new file mode 100644 index 00000000..d28b1b02 --- /dev/null +++ b/backend/dockerfile @@ -0,0 +1,19 @@ +FROM python:3.11-slim AS builder +WORKDIR /app +RUN apt-get update && apt-get install -y \ + build-essential \ + && rm -rf /var/lib/apt/lists/* +COPY requirements.txt . +RUN pip install --upgrade pip \ + && pip install --prefix=/install -r requirements.txt + +FROM python:3.11-slim +RUN useradd -m django +WORKDIR /app +COPY --from=builder /install /usr/local +COPY . . +RUN chown -R django:django /app +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 +EXPOSE 8000 +CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 00000000..cf164dc2 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,4 @@ +Django>=4.2 +djangorestframework +django-cors-headers + diff --git a/frontend/dockerfile b/frontend/dockerfile new file mode 100644 index 00000000..850df3a0 --- /dev/null +++ b/frontend/dockerfile @@ -0,0 +1,14 @@ +FROM node:20-alpine AS builder +WORKDIR /app +COPY package*.json ./ +RUN npm install +COPY . . +RUN npm run build + +FROM nginx:alpine +RUN rm /etc/nginx/conf.d/default.conf +COPY nginx.conf /etc/nginx/conf.d/default.conf +COPY --from=builder /app/dist /usr/share/nginx/html +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] + diff --git a/frontend/nginx.conf b/frontend/nginx.conf new file mode 100644 index 00000000..feb788de --- /dev/null +++ b/frontend/nginx.conf @@ -0,0 +1,10 @@ +server { + listen 80; + + location / { + root /usr/share/nginx/html; + index index.html; + try_files $uri /index.html; + } +} +