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: