Browse Source

Cambios varios

main
Celestino Rey 9 months ago
parent
commit
3db980a187
28 changed files with 138 additions and 122 deletions
  1. +7
    -7
      Dockerfile
  2. +28
    -25
      README.md
  3. +11
    -0
      Yamls/env-prod-db-configmap.yaml
  4. +5
    -5
      Yamls/postgresql-deployment.yaml
  5. +17
    -0
      Yamls/postgresql-service.yaml
  6. +17
    -0
      Yamls/pvc-postgresql.yaml
  7. +3
    -0
      borraDB.sh
  8. +4
    -0
      creaDB.sh
  9. +0
    -67
      pvc.yaml
  10. +1
    -1
      src/config/entrypoint.sh
  11. +3
    -3
      src/lyrics/management/commands/importar_albumes.py
  12. +4
    -4
      src/lyrics/management/commands/importar_canciones.py
  13. +21
    -2
      src/lyrics/serializers.py
  14. +0
    -0
      src/mediafiles/artistas/.noborrar
  15. +0
    -0
      src/mediafiles/cover_image/.noborrar
  16. +0
    -0
      src/mediafiles/vehiculos/.noborrar
  17. BIN
      src/mediafiles/vehiculos/bmw.jpg
  18. BIN
      src/mediafiles/vehiculos/bmw.png
  19. BIN
      src/mediafiles/vehiculos/bmw_PMjCK7Q.png
  20. BIN
      src/mediafiles/vehiculos/bmw_cSbhRuf.png
  21. BIN
      src/mediafiles/vehiculos/bmw_x00n9W7.png
  22. BIN
      src/mediafiles/vehiculos/bmw_yVyuq4g.jpg
  23. +3
    -3
      src/repostajes/management/commands/importar_repostajes.py
  24. +0
    -1
      src/repostajes/management/commands/importar_vehiculos.py
  25. +3
    -1
      src/repostajes/serializers.py
  26. +1
    -1
      src/reymota/settings.py
  27. +9
    -1
      src/reymotausers/serializers.py
  28. +1
    -1
      src/templates/index.html

+ 7
- 7
Dockerfile View File

@ -1,13 +1,9 @@
# yup, python 3.11! # yup, python 3.11!
FROM python:3.11-slim FROM python:3.11-slim
<<<<<<< HEAD
# install nginx
RUN apt-get update && apt-get install nginx netcat-openbsd rsync -y
=======
# install nginx y otras cosas # install nginx y otras cosas
RUN apt-get update && apt-get install nginx netcat-openbsd curl vim jq -y
>>>>>>> c04abab64cc16d19cf44b2b6e95eb68cccfb37b5
RUN apt-get update && apt-get install nginx netcat-openbsd curl vim jq rsync -y
# copy our nginx configuration to overwrite nginx defaults # copy our nginx configuration to overwrite nginx defaults
RUN rm /etc/nginx/sites-enabled/default RUN rm /etc/nginx/sites-enabled/default
RUN rm /etc/nginx/sites-available/default RUN rm /etc/nginx/sites-available/default
@ -31,10 +27,14 @@ RUN python -m venv /opt/venv && \
/opt/venv/bin/python -m pip install pip --upgrade && \ /opt/venv/bin/python -m pip install pip --upgrade && \
/opt/venv/bin/python -m pip install -r requirements.txt /opt/venv/bin/python -m pip install -r requirements.txt
# Añade path a .bashrc
RUN echo "export PATH=/opt/venv/bin/:$PATH" >> /root/.bashrc
# make our entrypoint.sh executable # make our entrypoint.sh executable
RUN chmod +x config/entrypoint.sh RUN chmod +x config/entrypoint.sh
EXPOSE 80
EXPOSE 8080
# execute our entrypoint.sh file # execute our entrypoint.sh file
CMD ["./config/entrypoint.sh"] CMD ["./config/entrypoint.sh"]

+ 28
- 25
README.md View File

@ -1,21 +1,41 @@
# Versión para openshift # Versión para openshift
## permitir a nginx correr con privilegios
### esto se hace una vez dentro del proyecto.
oc adm policy add-scc-to-user -z default anyuid
## Instalación ## Instalación
### app reymota
Crear un proyecto y luego añadir una app desde Agregar, importar desde git. Crear un proyecto y luego añadir una app desde Agregar, importar desde git.
oc new-app http://gitea.reymota.es/creylopez/ReyMotaAppsOC.git -e DEBUG="False" -e VERSION=11.0 --name='reymota'
Tal y como está la estructura de directorios, deberia detectar automáticamente una compilación Python 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/reymota --add -t pvc --claim-size=300M --name=reymota-lyrics-migrations --claim-name='reymota-lyrics-migrations' --mount-path='/app/lyrics/migrations'
oc set volume deployment.apps/reymota --add -t pvc --claim-size=300M --name=reymota-media --claim-name='reymota-media' --mount-path='/app/mediafiles'
oc set volume deployment.apps/reymota --add -t pvc --claim-size=300M --name=reymota-repostajes-migrations --claim-name='reymota-repostajes-migrations' --mount-path='/app/repostajes/migrations'
oc set volume deployment.apps/reymota --add -t pvc --claim-size=300M --name=reymota-reymotausers-migrations --claim-name='reymota-reymotausers-migrations' --mount-path='/app/reymotausers/migrations'
oc set volume deployment.apps/reymota --add -t pvc --claim-size=50G --name=static-volume --claim-name='static-volume' --mount-path='/app/staticfiles'
### Si la pvc ya está creada
oc set volume deployment.apps/reymota --add -t pvc --name=reymota-lyrics-migrations --claim-name='reymota-lyrics-migrations' --mount-path='/app/lyrics/migrations'
oc set volume deployment.apps/reymota --add -t pvc --name=reymota-media --claim-name='reymota-media' --mount-path='/app/mediafiles'
oc set volume deployment.apps/reymota --add -t pvc --name=reymota-repostajes-migrations --claim-name='reymota-repostajes-migrations' --mount-path='/app/repostajes/migrations'
oc set volume deployment.apps/reymota --add -t pvc --name=reymota-reymotausers-migrations --claim-name='reymota-reymotausers-migrations' --mount-path='/app/reymotausers/migrations'
oc set volume deployment.apps/reymota --add -t pvc --name=static-volume --claim-name='static-volume' --mount-path='/app/staticfiles'
Desde la línea de comandos, sería:
## Exponer el servicio
oc expose service/reymota
### postgresql
Se hace desde el yaml
oc create -f postgresql-deployment.yaml
oc new-app http://gitea.reymota.es/creylopez/ReyMotaAppsOC.git -e DEBUG=True
@ -65,20 +85,3 @@ 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. 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.
<<<<<<< HEAD
## Copiar ficheros al contenedor
Copy local directory to a pod directory
oc rsync /home/user/source devpod1234:/src
# Copy pod directory to a local directory
oc rsync devpod1234:/src /home/user/source
=======
## Para que git no pida credenciales
git config --global credential.helper store
la siguiente vez que se haga el push nos la pedirá una última vez
>>>>>>> c04abab64cc16d19cf44b2b6e95eb68cccfb37b5

+ 11
- 0
Yamls/env-prod-db-configmap.yaml View File

@ -0,0 +1,11 @@
apiVersion: v1
data:
POSTGRES_DB: reymota
POSTGRES_PASSWORD: Dsa-0213
POSTGRES_USER: creylopez
kind: ConfigMap
metadata:
labels:
io.kompose.service: db-env-prod-db
name: env-prod-db
namespace: reymota

postgres-deployment.yaml → Yamls/postgresql-deployment.yaml View File

@ -5,14 +5,14 @@ metadata:
kompose.cmd: kompose convert kompose.cmd: kompose convert
kompose.version: 1.34.0 (cbf2835db) kompose.version: 1.34.0 (cbf2835db)
labels: labels:
io.kompose.service: db
name: db
io.kompose.service: postgresql
name: postgresql
namespace: reymota namespace: reymota
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
io.kompose.service: db
io.kompose.service: postgresql
strategy: strategy:
type: Recreate type: Recreate
template: template:
@ -21,7 +21,7 @@ spec:
kompose.cmd: kompose convert kompose.cmd: kompose convert
kompose.version: 1.34.0 (cbf2835db) kompose.version: 1.34.0 (cbf2835db)
labels: labels:
io.kompose.service: db
io.kompose.service: postgresql
spec: spec:
containers: containers:
- env: - env:
@ -41,7 +41,7 @@ spec:
key: POSTGRES_USER key: POSTGRES_USER
name: env-prod-db name: env-prod-db
image: postgres:15 image: postgres:15
name: db
name: postgresql
volumeMounts: volumeMounts:
- mountPath: /var/lib/postgresql/data - mountPath: /var/lib/postgresql/data
name: postgresql name: postgresql

+ 17
- 0
Yamls/postgresql-service.yaml View File

@ -0,0 +1,17 @@
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.34.0 (cbf2835db)
labels:
io.kompose.service: postgresql
name: postgresql
namespace: reymota
spec:
ports:
- name: "5432"
port: 5432
targetPort: 5432
selector:
io.kompose.service: postgresql

+ 17
- 0
Yamls/pvc-postgresql.yaml View File

@ -0,0 +1,17 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
finalizers:
- kubernetes.io/pvc-protection
labels:
template: postgresql-persistent-template
name: postgresql
namespace: reymota
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: lvms-vg1
volumeMode: Filesystem

+ 3
- 0
borraDB.sh View File

@ -0,0 +1,3 @@
oc delete -f Yamls/env-prod-db-configmap.yaml
oc delete -f Yamls/postgresql-deployment.yaml
oc delete -f Yamls/postgresql-service.yaml

+ 4
- 0
creaDB.sh View File

@ -0,0 +1,4 @@
oc create -f Yamls/env-prod-db-configmap.yaml
#oc create -f Yamls/pvc-postgresql.yaml
oc create -f Yamls/postgresql-deployment.yaml
oc create -f Yamls/postgresql-service.yaml

+ 0
- 67
pvc.yaml View File

@ -1,67 +0,0 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: reymota-media
name: reymota-media
namespace: reymota
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
storageClassName: lvms-vg1
status: {}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: reymota-lyrics-migrations
name: reymota-lyrics-migrations
namespace: reymota
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Mi
storageClassName: lvms-vg1
status: {}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: reymota-repostajes-migrations
name: reymota-repostajes-migrations
namespace: reymota
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 52Mi
storageClassName: lvms-vg1
status: {}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: reymota-reymotausers-migrations
name: reymota-reymotausers-migrations
namespace: reymota
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 53Mi
storageClassName: lvms-vg1
status: {}

+ 1
- 1
src/config/entrypoint.sh View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
RUN_PORT="8000" RUN_PORT="8000"
DATABASE=postgres DATABASE=postgres
SQL_HOST=db
SQL_HOST=postgresql
SQL_PORT=5432 SQL_PORT=5432
export PATH=/opt/venv/bin:$PATH export PATH=/opt/venv/bin:$PATH


+ 3
- 3
src/lyrics/management/commands/importar_albumes.py View File

@ -26,10 +26,10 @@ class Command(BaseCommand):
albumes_creados = 0 albumes_creados = 0
for album_data in datos: for album_data in datos:
try: try:
artista = Artista.objects.get(id=album_data["artist"])
artista = Artista.objects.get(nombre=album_data["artista_nombre"])
creado = Album.objects.create( creado = Album.objects.create(
artist_id=artista.id,
artist=artista,
name=album_data['name'], name=album_data['name'],
year=album_data['year'], year=album_data['year'],
cover_image=album_data['cover_image'], cover_image=album_data['cover_image'],
@ -38,7 +38,7 @@ class Command(BaseCommand):
albumes_creados += 1 albumes_creados += 1
except Artista.DoesNotExist: except Artista.DoesNotExist:
self.stderr.write(self.style.ERROR(f"Artista '{album_data['artista']}' no encontrado."))
self.stderr.write(self.style.ERROR(f"Artista '{album_data['artista_nombre']}' no encontrado."))
self.stdout.write(self.style.SUCCESS(f'Se importaron {albumes_creados} albumes correctamente.')) self.stdout.write(self.style.SUCCESS(f'Se importaron {albumes_creados} albumes correctamente.'))


+ 4
- 4
src/lyrics/management/commands/importar_canciones.py View File

@ -26,13 +26,13 @@ class Command(BaseCommand):
canciones_creados = 0 canciones_creados = 0
for cancion_data in datos: for cancion_data in datos:
try: try:
album = Album.objects.get(id=cancion_data["album"])
artista = Artista.objects.get(id=cancion_data["artist"])
album = Album.objects.get(name=cancion_data["album_nombre"])
artista = Artista.objects.get(nombre=cancion_data["artista_nombre"])
creado = Song.objects.create( creado = Song.objects.create(
album_id=album.id,
album=album,
artist=artista,
title=cancion_data['title'], title=cancion_data['title'],
artist_id=artista.id,
year=cancion_data['year'], year=cancion_data['year'],
lyrics=cancion_data['lyrics'], lyrics=cancion_data['lyrics'],
pista=cancion_data['pista'], pista=cancion_data['pista'],


+ 21
- 2
src/lyrics/serializers.py View File

@ -1,3 +1,5 @@
import os
from rest_framework import serializers from rest_framework import serializers
from .models import Artista, Album, Song from .models import Artista, Album, Song
@ -7,14 +9,31 @@ class ArtistaSerializer(serializers.ModelSerializer):
model = Artista model = Artista
fields = '__all__' # Incluir todos los campos del modelo fields = '__all__' # Incluir todos los campos del modelo
def to_representation(self, instance):
ret = super().to_representation(instance)
ret['foto'] = "artistas/" + os.path.basename(ret['foto'])
return ret
class AlbumSerializer(serializers.ModelSerializer): class AlbumSerializer(serializers.ModelSerializer):
artista_nombre = serializers.CharField(source='artist.nombre', read_only=True)
class Meta: class Meta:
model = Album model = Album
fields = '__all__' # Incluir todos los campos del modelo
fields = ['name', 'year', 'cover_image', 'artista_nombre']
def to_representation(self, instance):
ret = super().to_representation(instance)
ret['cover_image'] = "cover_image/" + os.path.basename(ret['cover_image'])
return ret
class CancionSerializer(serializers.ModelSerializer): class CancionSerializer(serializers.ModelSerializer):
artista_nombre = serializers.CharField(source='artist.nombre', read_only=True)
album_nombre = serializers.CharField(source='album.name', read_only=True)
class Meta: class Meta:
model = Song model = Song
fields = '__all__' # Incluir todos los campos del modelo
fields = ['title', 'year', 'lyrics', 'pista', 'artista_nombre', 'album_nombre']

+ 0
- 0
src/mediafiles/artistas/.noborrar View File


+ 0
- 0
src/mediafiles/cover_image/.noborrar View File


+ 0
- 0
src/mediafiles/vehiculos/.noborrar View File


BIN
src/mediafiles/vehiculos/bmw.jpg View File

Before After
Width: 500  |  Height: 500  |  Size: 18 KiB

BIN
src/mediafiles/vehiculos/bmw.png View File

Before After
Width: 360  |  Height: 225  |  Size: 9.5 KiB

BIN
src/mediafiles/vehiculos/bmw_PMjCK7Q.png View File

Before After
Width: 360  |  Height: 225  |  Size: 9.5 KiB

BIN
src/mediafiles/vehiculos/bmw_cSbhRuf.png View File

Before After
Width: 360  |  Height: 225  |  Size: 9.5 KiB

BIN
src/mediafiles/vehiculos/bmw_x00n9W7.png View File

Before After
Width: 360  |  Height: 225  |  Size: 9.5 KiB

BIN
src/mediafiles/vehiculos/bmw_yVyuq4g.jpg View File

Before After
Width: 500  |  Height: 500  |  Size: 18 KiB

+ 3
- 3
src/repostajes/management/commands/importar_repostajes.py View File

@ -26,10 +26,10 @@ class Command(BaseCommand):
repostajes_creados = 0 repostajes_creados = 0
for repostaje_data in datos: for repostaje_data in datos:
try: try:
vehiculo = Vehiculo.objects.get(id=repostaje_data["vehiculo"])
vehiculo = Vehiculo.objects.get(matricula=repostaje_data["vehiculo_matricula"])
creado = Repostaje.objects.create( creado = Repostaje.objects.create(
vehiculo_id=vehiculo.id,
vehiculo=vehiculo,
fecha=repostaje_data['fecha'], fecha=repostaje_data['fecha'],
kms=repostaje_data['kms'], kms=repostaje_data['kms'],
litros=repostaje_data['litros'], litros=repostaje_data['litros'],
@ -43,7 +43,7 @@ class Command(BaseCommand):
repostajes_creados += 1 repostajes_creados += 1
except Vehiculo.DoesNotExist: except Vehiculo.DoesNotExist:
self.stderr.write(self.style.ERROR(f"Vehiculo '{repostaje_data['vehiculo']}' no encontrado."))
self.stderr.write(self.style.ERROR(f"Vehiculo con matrícula '{repostaje_data['vehiculo_matricula']}' no encontrado."))
self.stdout.write(self.style.SUCCESS(f'Se importaron {repostajes_creados} repostajes correctamente.')) self.stdout.write(self.style.SUCCESS(f'Se importaron {repostajes_creados} repostajes correctamente.'))


+ 0
- 1
src/repostajes/management/commands/importar_vehiculos.py View File

@ -26,7 +26,6 @@ class Command(BaseCommand):
vehiculos_creados = 0 vehiculos_creados = 0
for vehiculo_data in datos: for vehiculo_data in datos:
creado = Vehiculo.objects.create( creado = Vehiculo.objects.create(
id=vehiculo_data['id'],
marca=vehiculo_data['marca'], marca=vehiculo_data['marca'],
modelo=vehiculo_data['modelo'], modelo=vehiculo_data['modelo'],
matricula=vehiculo_data['matricula'], matricula=vehiculo_data['matricula'],


+ 3
- 1
src/repostajes/serializers.py View File

@ -9,6 +9,8 @@ class VehiculoSerializer(serializers.ModelSerializer):
class RepostajeSerializer(serializers.ModelSerializer): class RepostajeSerializer(serializers.ModelSerializer):
vehiculo_matricula = serializers.CharField(source='vehiculo.matricula', read_only=True)
class Meta: class Meta:
model = Repostaje model = Repostaje
fields = '__all__' # Incluir todos los campos del modelo
fields = ['id', 'fecha', 'kms', 'litros', 'descuento', 'importe', 'precioxlitro', 'kmsrecorridos', 'consumo', 'vehiculo', 'vehiculo_matricula']

+ 1
- 1
src/reymota/settings.py View File

@ -87,7 +87,7 @@ DATABASES = {
"NAME": "reymota", "NAME": "reymota",
"USER": "creylopez", "USER": "creylopez",
"PASSWORD": "Dsa-0213", "PASSWORD": "Dsa-0213",
"HOST": "db",
"HOST": "postgresql",
"PORT": "5432", "PORT": "5432",
} }
} }


+ 9
- 1
src/reymotausers/serializers.py View File

@ -1,3 +1,5 @@
import os
from rest_framework import serializers from rest_framework import serializers
from .models import ReyMotaUser from .models import ReyMotaUser
@ -5,4 +7,10 @@ from .models import ReyMotaUser
class ReyMotaUserSerializer(serializers.ModelSerializer): class ReyMotaUserSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = ReyMotaUser model = ReyMotaUser
fields = '__all__' # Incluir todos los campos del modelo
fields = ['email', 'password', 'foto', 'is_superuser', 'is_staff', 'is_active', 'nombre', 'last_login']
def to_representation(self, instance):
ret = super().to_representation(instance)
ret['foto'] = "profile_images/" + os.path.basename(ret['foto'])
return ret

+ 1
- 1
src/templates/index.html View File

@ -9,7 +9,7 @@
<div class="app-card alert alert-dismissible shadow-sm mb-4 border-left-decoration" role="alert"> <div class="app-card alert alert-dismissible shadow-sm mb-4 border-left-decoration" role="alert">
<div class="inner"> <div class="inner">
<div class="app-card-body p-3 p-lg-4"> <div class="app-card-body p-3 p-lg-4">
<h3 class="mb-3">¡Bienvenido a sitio REYMOTA.ES!</h3>
<h3 class="mb-3">¡Bienvenido a sitio REYMOTA.ES en Openshift!</h3>
<div class="row gx-5 gy-3"> <div class="row gx-5 gy-3">
<!-- <!--
<div class="col-12 col-lg-9"> <div class="col-12 col-lg-9">


Loading…
Cancel
Save