# file: Dockerfile (produccion) ~~~docker # 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 ~~~shell docker build -t -f Dockerfile --no-cache --build-arg gitusername= --build-arg gitpassword= . # ejemplo # docker build -t paradero:v1.2 -f Dockerfile --no-cache --build-arg gitusername=johndoe --build-arg gitpassword=mypassword . ~~~ # file: docker-compose.yml (produccion) ~~~yml 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) ~~~yml 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: ~~~