2023-12-05 10:34:47 -03:00
|
|
|
|
2023-12-20 12:35:48 -03:00
|
|
|
# Estructura de carpetas
|
|
|
|
|
|
|
|
Se recomienda la siguiente estructura de carpeta para iniciar proyecto
|
|
|
|
|
|
|
|
~~~txt
|
|
|
|
/app
|
|
|
|
|-- /transporte
|
|
|
|
| |-- (codigo del proyecto backend)
|
|
|
|
|
|
|
|
|
|-- /dumps
|
|
|
|
| |-- (respaldos de la base de datos transporte)
|
|
|
|
|
|
|
|
|
|-- /proto
|
|
|
|
| |-- (codigo del proyecto)
|
|
|
|
|
|
|
|
|
|-- docker-compose.yml
|
|
|
|
|-- restore_db.sh
|
|
|
|
~~~
|
|
|
|
<br>
|
|
|
|
<br>
|
|
|
|
<br>
|
2023-12-05 10:34:47 -03:00
|
|
|
|
|
|
|
# Docker
|
|
|
|
|
|
|
|
Para iniciar la aplicacion usando docker
|
|
|
|
|
|
|
|
~~~bash
|
2023-12-20 12:35:48 -03:00
|
|
|
cd /app
|
2023-12-05 10:34:47 -03:00
|
|
|
docker compose up -d
|
|
|
|
~~~
|
2023-12-20 12:35:48 -03:00
|
|
|
<br>
|
|
|
|
<br>
|
|
|
|
<br>
|
2023-12-05 10:34:47 -03:00
|
|
|
|
|
|
|
|
2023-12-20 12:35:48 -03:00
|
|
|
# Proyectos involucrados
|
2023-12-05 10:34:47 -03:00
|
|
|
|
2023-12-20 12:35:48 -03:00
|
|
|
## Transporte
|
2023-12-05 10:34:47 -03:00
|
|
|
|
2023-12-20 12:35:48 -03:00
|
|
|
Ref: https://gitlab.com/m3f_usm/admin_transporte/backend
|
2023-12-05 10:34:47 -03:00
|
|
|
|
2023-12-20 12:35:48 -03:00
|
|
|
## Proto
|
2023-12-05 10:34:47 -03:00
|
|
|
|
2023-12-20 12:35:48 -03:00
|
|
|
Ref: https://gitlab.com/m3f_usm/proto
|
2023-12-05 10:34:47 -03:00
|
|
|
|
2023-12-20 12:35:48 -03:00
|
|
|
## Respaldos de base de datos
|
2023-12-05 10:34:47 -03:00
|
|
|
|
2023-12-20 12:35:48 -03:00
|
|
|
Ver información en:
|
2023-12-05 10:34:47 -03:00
|
|
|
|
2023-12-20 12:35:48 -03:00
|
|
|
https://gitlab.com/m3f_usm/admin_transporte/backend/-/wikis/Databases
|
|
|
|
|
|
|
|
<br>
|
|
|
|
<br>
|
|
|
|
<br>
|
|
|
|
|
|
|
|
# archivo: restore_db.sh
|
|
|
|
|
|
|
|
~~~sh
|
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
# obtener el ultimo respaldo de la carpeta
|
|
|
|
LASTFILEDUMP=$(ls -t /dumps/*.sql.gz | sort -r | head -n 1)
|
|
|
|
echo "FILE: $LASTFILEDUMP"
|
|
|
|
|
|
|
|
# restaurar la base datos
|
|
|
|
gunzip -c "$LASTFILEDUMP" | psql -U postgres "$POSTGRES_DB"
|
2023-12-05 10:34:47 -03:00
|
|
|
~~~
|
|
|
|
|
|
|
|
|
2024-02-25 15:42:30 -03:00
|
|
|
# archivo para compilar imagen: Dockerfile
|
|
|
|
|
|
|
|
~~~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/admin_transporte/frontend" /frontend
|
|
|
|
RUN git clone "https://${gitusername}:${gitpassword}@gitlab.com/m3f_usm/admin_transporte/backend" /backend
|
|
|
|
RUN rm -rf /backend/project/dist
|
|
|
|
|
|
|
|
# compilar
|
|
|
|
WORKDIR /frontend
|
|
|
|
RUN npm install && npm run build
|
|
|
|
|
|
|
|
# seccion final -- se omite git y archivos innecerarios para reducir imagen
|
|
|
|
FROM python:3.11-alpine
|
|
|
|
COPY --from=frontend /backend/project/ /app/project
|
|
|
|
COPY --from=frontend /backend/readme.md /app
|
|
|
|
COPY --from=frontend /backend/requirements.txt /app
|
|
|
|
COPY --from=frontend /frontend/dist/ /app/project/dist
|
|
|
|
|
|
|
|
WORKDIR /app
|
|
|
|
RUN pip install -r requirements.txt
|
|
|
|
ENTRYPOINT ["python3"]
|
|
|
|
CMD [ "/app/project/manage.py", "runserver", "0.0.0.0:4000" ]
|
|
|
|
~~~
|
|
|
|
|
|
|
|
# instrucciones para compilar archivo Dockerfile
|
|
|
|
|
|
|
|
~~~bash
|
2024-03-10 12:57:38 -03:00
|
|
|
docker build -t <tagname:version> -f Dockerfile --no-cache --build-arg gitusername=<usuario gitlab> --build-arg gitpassword=<password gitlab> .
|
2024-02-25 15:42:30 -03:00
|
|
|
|
|
|
|
# ejemplo
|
2024-03-10 12:57:38 -03:00
|
|
|
# docker build -t transporte:v1.2 -f Dockerfile --no-cache --build-arg gitusername=johndoe --build-arg gitpassword=mypassword .
|
2024-02-25 15:42:30 -03:00
|
|
|
~~~
|
|
|
|
|
|
|
|
|
2023-12-20 12:35:48 -03:00
|
|
|
# archivo produccion: docker-compose.yml
|
|
|
|
|
|
|
|
~~~yml
|
|
|
|
version: '3'
|
|
|
|
name: transporte
|
|
|
|
|
|
|
|
services:
|
|
|
|
|
2024-02-25 15:42:30 -03:00
|
|
|
transporte:
|
|
|
|
image: transporte:v1.2
|
2023-12-20 12:35:48 -03:00
|
|
|
depends_on:
|
|
|
|
- db
|
|
|
|
environment:
|
|
|
|
- PORT=4000
|
|
|
|
ports:
|
|
|
|
- 4000:4000
|
|
|
|
volumes:
|
2024-02-25 15:42:30 -03:00
|
|
|
- ./uploads:/uploads
|
|
|
|
#- .env.prod:/app/.env # (opcional: indicar conexiones a base datos en otro servidor)
|
2023-12-20 12:35:48 -03:00
|
|
|
|
|
|
|
db:
|
|
|
|
image: postgis/postgis:14-3.4-alpine
|
|
|
|
volumes:
|
|
|
|
- db:/var/lib/postgresql/data
|
|
|
|
- ./dumps:/dumps
|
|
|
|
- ./restore_db.sh:/docker-entrypoint-initdb.d/02_restore_db.sh
|
|
|
|
ports:
|
|
|
|
- 5432:5432
|
|
|
|
environment:
|
|
|
|
POSTGRES_PASSWORD: password
|
|
|
|
POSTGRES_DB: transporte
|
|
|
|
PGDATA: /var/lib/postgresql/data/pgdata
|
|
|
|
|
|
|
|
proto:
|
|
|
|
image: python:3.11-alpine
|
|
|
|
environment:
|
|
|
|
- DB_REDIS_HOST=dbproto
|
|
|
|
- DB_REDIS_PORT=6379
|
|
|
|
- TZ=America/Santiago
|
|
|
|
volumes:
|
|
|
|
- ./proto:/app
|
|
|
|
- venv_proto:/root/venv
|
|
|
|
working_dir: /app
|
|
|
|
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 /app ;
|
|
|
|
[ -f .env ] || ( [ -f .env.develop ] && cp .env.develop .env ) ;
|
|
|
|
watch -n 30 -t python main.py
|
|
|
|
"
|
|
|
|
|
|
|
|
dbproto:
|
|
|
|
image: redis:7.2-alpine
|
2024-02-25 15:42:30 -03:00
|
|
|
volumes:
|
|
|
|
- dbredis:/data
|
|
|
|
|
|
|
|
dbmongo:
|
|
|
|
image: mongo:jammy
|
|
|
|
volumes:
|
|
|
|
- dbmongo:/data/db
|
|
|
|
- dbmongoconfig:/data/configdb
|
|
|
|
ports:
|
|
|
|
- 27017:27017
|
|
|
|
environment:
|
|
|
|
MONGO_INITDB_ROOT_USERNAME: root
|
|
|
|
MONGO_INITDB_ROOT_PASSWORD: password
|
2023-12-20 12:35:48 -03:00
|
|
|
|
|
|
|
|
|
|
|
volumes:
|
|
|
|
db:
|
2024-02-25 15:42:30 -03:00
|
|
|
dbredis:
|
|
|
|
dbmongo:
|
|
|
|
dbmongoconfig:
|
2023-12-20 12:35:48 -03:00
|
|
|
venv_proto:
|
2023-12-05 10:34:47 -03:00
|
|
|
~~~
|
|
|
|
|
2023-12-20 12:35:48 -03:00
|
|
|
<br>
|
|
|
|
<br>
|
|
|
|
<br>
|
|
|
|
|
|
|
|
# tunnel para desarrollo
|
2023-12-05 11:08:11 -03:00
|
|
|
|
2023-12-20 12:35:48 -03:00
|
|
|
Ver información en:
|
|
|
|
|
|
|
|
https://gitlab.com/m3f_usm/admin_transporte/backend/-/wikis/home
|
|
|
|
|
|
|
|
|
|
|
|
# archivo desarrollo: docker-compose.yml
|
2023-12-05 11:08:11 -03:00
|
|
|
|
|
|
|
~~~yml
|
|
|
|
version: '3'
|
|
|
|
name: transporte
|
|
|
|
|
|
|
|
services:
|
|
|
|
|
|
|
|
frontend:
|
|
|
|
image: node:18-alpine
|
|
|
|
volumes:
|
|
|
|
- ./frontend:/app
|
2023-12-05 17:07:21 -03:00
|
|
|
ports:
|
|
|
|
- 3000:3000
|
2023-12-05 11:08:11 -03:00
|
|
|
environment:
|
|
|
|
- VITE_PORT=3000
|
2023-12-20 12:35:48 -03:00
|
|
|
- VITE_BACKEND=http://localhost:4000/api
|
2023-12-05 11:08:11 -03:00
|
|
|
working_dir: /app
|
|
|
|
command: sh -c "
|
|
|
|
[ ! -d node_modules ] && npm install ;
|
|
|
|
chmod -R o+w . ;
|
|
|
|
npm run dev
|
|
|
|
"
|
|
|
|
|
|
|
|
backend:
|
|
|
|
image: python:3.11-alpine
|
2023-12-20 12:35:48 -03:00
|
|
|
depends_on:
|
|
|
|
- db
|
2023-12-05 11:08:11 -03:00
|
|
|
environment:
|
|
|
|
- PORT=4000
|
2023-12-05 17:07:21 -03:00
|
|
|
ports:
|
|
|
|
- 4000:4000
|
2023-12-20 12:35:48 -03:00
|
|
|
volumes:
|
2024-02-25 15:42:30 -03:00
|
|
|
- ./backend:/app
|
|
|
|
- ./uploads:/uploads
|
2023-12-20 12:35:48 -03:00
|
|
|
- venv:/root/venv
|
2023-12-05 11:08:11 -03:00
|
|
|
working_dir: /app
|
|
|
|
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 /app ;
|
|
|
|
[ -d project ] || django-admin startproject project ;
|
|
|
|
[ -f .env ] || ( [ -f .env.develop ] && cp .env.develop .env ) ;
|
|
|
|
chmod -R o+w project/ ;
|
|
|
|
python project/manage.py runserver 0.0.0.0:$$PORT
|
|
|
|
"
|
2024-02-25 15:42:30 -03:00
|
|
|
|
|
|
|
db:
|
|
|
|
image: postgis/postgis:14-3.4-alpine
|
|
|
|
volumes:
|
|
|
|
- db:/var/lib/postgresql/data
|
|
|
|
- ./dumps:/dumps
|
|
|
|
- ./restore_db.sh:/docker-entrypoint-initdb.d/02_restore_db.sh
|
|
|
|
ports:
|
|
|
|
- 5432:5432
|
|
|
|
environment:
|
|
|
|
POSTGRES_PASSWORD: password
|
|
|
|
POSTGRES_DB: transporte
|
|
|
|
PGDATA: /var/lib/postgresql/data/pgdata
|
|
|
|
|
|
|
|
proto:
|
|
|
|
image: python:3.11-alpine
|
|
|
|
environment:
|
|
|
|
- DB_REDIS_HOST=dbproto
|
|
|
|
- DB_REDIS_PORT=6379
|
|
|
|
- TZ=America/Santiago
|
|
|
|
volumes:
|
|
|
|
- ./proto:/app
|
|
|
|
- venv_proto:/root/venv
|
|
|
|
working_dir: /app
|
|
|
|
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 /app ;
|
|
|
|
[ -f .env ] || ( [ -f .env.develop ] && cp .env.develop .env ) ;
|
|
|
|
watch -n 30 -t python main.py
|
|
|
|
"
|
|
|
|
|
|
|
|
dbproto:
|
|
|
|
image: redis:7.2-alpine
|
|
|
|
volumes:
|
|
|
|
- dbredis:/data
|
|
|
|
|
|
|
|
dbmongo:
|
|
|
|
image: mongo:jammy
|
|
|
|
volumes:
|
|
|
|
- dbmongo:/data/db
|
|
|
|
- dbmongoconfig:/data/configdb
|
|
|
|
ports:
|
|
|
|
- 27017:27017
|
|
|
|
environment:
|
|
|
|
MONGO_INITDB_ROOT_USERNAME: root
|
|
|
|
MONGO_INITDB_ROOT_PASSWORD: password
|
2023-12-05 11:08:11 -03:00
|
|
|
|
2023-12-05 17:07:21 -03:00
|
|
|
|
2023-12-05 11:08:11 -03:00
|
|
|
volumes:
|
2024-02-25 15:42:30 -03:00
|
|
|
db:
|
|
|
|
dbredis:
|
|
|
|
dbmongo:
|
|
|
|
dbmongoconfig:
|
2023-12-05 11:08:11 -03:00
|
|
|
venv:
|
2024-02-25 15:42:30 -03:00
|
|
|
venv_proto:
|
2023-12-05 17:07:21 -03:00
|
|
|
~~~
|
2023-12-20 12:35:48 -03:00
|
|
|
|
|
|
|
|
|
|
|
# Script para levantar aplicacion python sin docker
|
|
|
|
|
|
|
|
## file: start.sh
|
|
|
|
|
|
|
|
~~~bash
|
|
|
|
#!/bin/sh
|
|
|
|
cd /app
|
|
|
|
|
|
|
|
# si no existe directorio de ambiente, se crea
|
|
|
|
if [ ! -d /root/venv ]; then
|
|
|
|
python -m venv /root/venv
|
|
|
|
. /root/venv/bin/activate
|
|
|
|
pip install -r requirements.txt
|
|
|
|
fi
|
|
|
|
|
|
|
|
# activar ambiente con dependencias
|
|
|
|
. /root/venv/bin/activate
|
|
|
|
|
|
|
|
# si no existe un proyecto inicial, lo crea
|
|
|
|
if [ ! -d /app/project ]; then
|
|
|
|
django-admin startproject project
|
|
|
|
fi
|
|
|
|
|
|
|
|
# iniciar servidor con puerto 8000
|
|
|
|
python /app/project/manage.py runserver 0.0.0.0:8000
|
|
|
|
~~~
|
|
|
|
|
|
|
|
# Extraer models de base de datos
|
|
|
|
|
|
|
|
~~~bash
|
|
|
|
python manage.py inspectdb > api/models.py
|
|
|
|
~~~
|