# Versión para openshift ## Instalación Crear un proyecto. ### Running Commands as Root in OpenShift oc adm policy add-scc-to-user anyuid -z default ### app riesgos A continuación añadir una app desde Agregar, importar desde git. oc new-app https://code.siemens.com/celestino.rey/riesgos.git -e DEBUG="False" -e VERSION=11.0 --name='riesgos' Tal y como está la estructura de directorios, deberia detectar automáticamente una compilación Python ## asignación de los volúmenes ### Si la pvc no está creada oc set volume deployment.apps/riesgos --add -t pvc --claim-size=300M --name=riesgos-riesgos-migrations --claim-name='riesgos-riesgos-migrations' --claim-class='lvms-vg1' --mount-path='/app/riesgos/migrations' oc set volume deployment.apps/riesgos --add -t pvc --claim-size=300M --name=riesgos-media --claim-name='riesgos-media' --claim-class='lvms-vg1' --mount-path='/app/mediafiles' oc set volume deployment.apps/riesgos --add -t pvc --claim-size=300M --name=riesgos-gestion-migrations --claim-name='riesgos-gestion-migrations' --claim-class='lvms-vg1' --mount-path='/app/gestion/migrations' oc set volume deployment.apps/riesgos --add -t pvc --claim-size=300M --name=riesgos-usuarios-migrations --claim-name='riesgos-usuarios-migrations' --claim-class='lvms-vg1' --mount-path='/app/riesgos/migrations' oc set volume deployment.apps/riesgos --add -t pvc --claim-size=50G --name=static-volume --claim-name='static-volume' --claim-class='lvms-vg1' --mount-path='/app/staticfiles' ### Si la pvc ya está creada oc set volume deployment.apps/riesgos --add -t pvc --name=riesgos-riesgos-migrations --claim-name='riesgos-riesgos-migrations' --mount-path='/app/riesgos/migrations' oc set volume deployment.apps/riesgos --add -t pvc --name=riesgos-media --claim-name='riesgos-media' --mount-path='/app/mediafiles' oc set volume deployment.apps/riesgos --add -t pvc --name=riesgos-gestion-migrations --claim-name='riesgos-gestion-migrations' --mount-path='/app/gestion/migrations' oc set volume deployment.apps/riesgos --add -t pvc --name=riesgos-usuarios-migrations --claim-name='riesgos-usuarios-migrations' --mount-path='/app/usuarios/migrations' oc set volume deployment.apps/riesgos --add -t pvc --name=static-volume --claim-name='static-volume' --mount-path='/app/staticfiles' ## Exponer el servicio oc expose service/riesgos ### postgresql Se hace desde el yaml oc create -f postgresql-deployment.yaml python manage.py createsuperuser python manage.py makemigrations python manage.py migrate ## Comprobar la base de datos Con la shell entraPsql.sh: \l para listar las BD \c riesgos para usar nuestra db \dt para ver las tablas # De dónde cogí ideas https://learndjango.com/tutorials/django-login-and-logout-tutorial Username: {{ user.username }} User Full name: {{ user.get_full_name }} User Group: {{ user.groups.all.0 }} Email: {{ user.email }} Session Started at: {{ user.last_login }} ## Para funcionar con gunicorn y nginx https://testdriven.io/blog/dockerizing-django-with-postgres-gunicorn-and-nginx/ ## Cambiar la secuencia de lo sid ALTER SEQUENCE tablename_id_seq RESTART WITH nn; esto se hace cuando restauro un volcado de la bd sobre una instalación nueva. Si hay índices ya creados, hay que reinciar a partir del último. # code.siemens.com ## Estructura del proyecto La estructura del proyecto es la siguiente: ├── K8S └── riesgos ├── accounts ├── gestion │ └── static ├── mediafiles │   └── profile_images ├── riesgos │   └── templatetags ├── templates │   ├── admin │   ├── gestion │   └── registration └── usuarios └── migrations El nombre del proyecto es 'riesgos'. El nombre de la app es 'gestion'. La estructura esta diseñada para añadir mas apps, si fuese necesario. Dentro del directorio del proyecto, 'riesgos', estan los directorios de: riesgos: comunes al proyecto urls.py: las url del proyecto settings.py: configuracion del proyecto templatetags: tags personalizados para usar en las templates de html. Aqui esta un tag para obtener varialbes de entorno desde una template accounts: Tiene las url a las paginas de registro personalizadas gestion: contiene los ficheros de la app propiamente dichos: views.py: el backend con la logica urls.py: las url de la app models.py: el modelo de la base de datos forms.py: los formularios de entrada de datos templates: los html del frontend de la app, organizado en directorios con el nombre de cada app usuarios: modelo y formularios personalizados para la tabla de usuarios. Ademas, hay una shell llamada 'entornoPruebas.sh' que establece ciertas variables cuando se lanza la app con runserver, sin kubernetes. # Instalación ## el directorio K8S ### Contenido Dentro del directorio se encuentra todo lo necesario para crear las imagenes y lanzar los deployments. El Makefile principal tiene los siguientes comandos: imagen: Crea la imagen de la app. Lo hace invocando a otro Makefile que esta en el directorio principal. Las variables de entorno definidas al principio del fichero se usan para poner los tags a las imagenes. install: Crea los deployments, los volumenes, los claims y los servicios. Los deployment de la app y de nginx se invocan a traves de envsubst que lo que hace es sustituir las referencias a las variables definidas en el Makefile. clean: Borra los deployment, los volumenes, los claims y los servicios. nginx: Creaba la imagen de nginx. Al subirlo a code.siemens.com, no he encontrado la manera de generar una imagen con un nombre diferente al del proyecto, por lo que he tenido que crear un proyecto nuevo para nginx. backup: Crea un fichero sql con un backup de la base de datos. Hay otro Makefile llamado Makefile.local que hace lo mismo pero usando el registry local, para probar. La variable de REGISTRY apunta a code.siemens.com o a localhost:5000 ### Funcionamiento Desde el directorio K8S ejecutar make (esto hace todo: la imagen, para los pods y los lanza otra vez) La primera vez que se ejecuta la aplicacion, hay que entrar en el pod de riesgos con 'entra.sh' y python manage.py createsuperuser python manage.py makemigrations # si dice que no hay cambios, añadir las apps una a una (usuarios y gestion) python manage.py migrate ## Comprobar la base de datos Con la shell entraPsql.sh: \l para listar las BD \c riesgos para usar nuestra db \dt para ver las tablas # De dónde cogí ideas ## formularios de login y logout https://learndjango.com/tutorials/django-login-and-logout-tutorial ## Para funcionar con gunicorn y nginx https://testdriven.io/blog/dockerizing-django-with-postgres-gunicorn-and-nginx/ ## Cambiar la secuencia de los id ALTER SEQUENCE tablename_id_seq RESTART WITH nn; esto se hace cuando restauro un volcado de la bd sobre una instalación nueva. Si hay índices ya creados, hay que reinciar a partir del último. # Funcionamiento con registries docker login después de introducir las correspondientes credenciales cat $HOME/.docker/config.json |base64 el resultado se copia y se pega en el fichero reg-secret.yaml, en el apartado .dockerconfigjson. Todo en una línea y quitando los espacios que surgan de componer todo en una línea.