paraderos_backend/readme.md

2.9 KiB

file: Dockerfile (produccion)

# seccion frontend
FROM node:20-alpine as frontend
ARG gitusername
ARG gitpassword

# soluciona error en descarga de repositorio
RUN sed -i 's/https\:\/\//http\:\/\//g' /etc/apk/repositories

# descargar proyecto
RUN apk update && apk add git
RUN git clone "https://${gitusername}:${gitpassword}@gitlab.com/m3f_usm/paraderos/frontend" /frontend
RUN git clone "https://${gitusername}:${gitpassword}@gitlab.com/m3f_usm/paraderos/backend" /backend
RUN rm -rf /backend/project/dist

# compilar
WORKDIR /frontend
RUN npm install --legacy-peer-deps && npm run build

# seccion final -- se omite git y archivos innecerarios para reducir imagen
FROM python:3.11-alpine
WORKDIR /app
COPY --from=frontend /backend/project/ /app/project
COPY --from=frontend /backend/app/ /app/app
COPY --from=frontend /backend/readme.md /app
COPY --from=frontend /backend/manage.py /app
COPY --from=frontend /backend/requirements.txt /app
COPY --from=frontend /frontend/dist/ /app/project/dist

RUN pip install -r requirements.txt
ENTRYPOINT ["python3"]
CMD [ "/app/manage.py", "runserver", "0.0.0.0:4001" ]

Instrucciones para compilar imagen docker

docker build -t <tagname:version> -f Dockerfile --no-cache --build-arg gitusername=<usuario gitlab> --build-arg gitpassword=<password gitlab> .

# ejemplo
# docker build -t paradero:v1.2 -f Dockerfile --no-cache --build-arg gitusername=johndoe --build-arg gitpassword=mypassword .

file: docker-compose.yml (produccion)

version: '3'
name: paradero

services:

  app:
    image: paradero:v20240310
    environment:
      - TRANSPORTE_API=https://transporte.hz.kursor.cl/api
      - TRANSPORTE_USER=11111111-1
      - TRANSPORTE_PASS=usuario1
    ports:
      - 4001:4001

file: docker-compose.yml (desarrollo)

version: '3'
name: paradero

services:

  backend:
    image: python:3.11-alpine
    environment:
      - PORT=4001
      - TRANSPORTE_API=https://transporte.hz.kursor.cl/api
      - TRANSPORTE_USER=11111111-1
      - TRANSPORTE_PASS=usuario1
    ports:
      - 4001:4001
    working_dir: /proyecto
    volumes:
      - ./backend:/proyecto
      - venv:/root/venv
    command: sh -c "
      [ -d /root/venv/bin ] || ( \
          python -m venv /root/venv/ \
          && . /root/venv/bin/activate \
          && pip install -r requirements.txt \
      ) ;

      . /root/venv/bin/activate ;

      cd /proyecto ;
      [ -d project ] || django-admin startproject project ;
      [ -f .env ] || ( [ -f .env.develop ] && cp .env.develop .env ) ;
      chmod -R o+w . ;
      python manage.py runserver 0.0.0.0:$$PORT
      "

  frontend:
    image: node:18-alpine
    volumes:
      - ./frontend:/app
    environment:
      - PORT=3001
      - VITE_BACKEND=/api
    ports:
      - 3001:3001
    working_dir: /app
    command: sh -c "
      [ -d node_modules ] || (npm install --legacy-peer-deps) ;
      npm run dev
      "

volumes:
  venv: