diff --git a/Dockerfile b/Dockerfile index bff326b..4c865d9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,9 @@ # yup, python 3.11! 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 -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 RUN rm /etc/nginx/sites-enabled/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 -r requirements.txt +# Añade path a .bashrc + +RUN echo "export PATH=/opt/venv/bin/:$PATH" >> /root/.bashrc + # make our entrypoint.sh executable RUN chmod +x config/entrypoint.sh -EXPOSE 80 +EXPOSE 8080 # execute our entrypoint.sh file CMD ["./config/entrypoint.sh"] diff --git a/README.md b/README.md index a193dab..009126b 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,41 @@ # 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 +### app reymota 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 +## 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. -<<<<<<< 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 diff --git a/Yamls/env-prod-db-configmap.yaml b/Yamls/env-prod-db-configmap.yaml new file mode 100644 index 0000000..d871dce --- /dev/null +++ b/Yamls/env-prod-db-configmap.yaml @@ -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 diff --git a/postgres-deployment.yaml b/Yamls/postgresql-deployment.yaml similarity index 88% rename from postgres-deployment.yaml rename to Yamls/postgresql-deployment.yaml index d09457e..86f8c0a 100644 --- a/postgres-deployment.yaml +++ b/Yamls/postgresql-deployment.yaml @@ -5,14 +5,14 @@ metadata: kompose.cmd: kompose convert kompose.version: 1.34.0 (cbf2835db) labels: - io.kompose.service: db - name: db + io.kompose.service: postgresql + name: postgresql namespace: reymota spec: replicas: 1 selector: matchLabels: - io.kompose.service: db + io.kompose.service: postgresql strategy: type: Recreate template: @@ -21,7 +21,7 @@ spec: kompose.cmd: kompose convert kompose.version: 1.34.0 (cbf2835db) labels: - io.kompose.service: db + io.kompose.service: postgresql spec: containers: - env: @@ -41,7 +41,7 @@ spec: key: POSTGRES_USER name: env-prod-db image: postgres:15 - name: db + name: postgresql volumeMounts: - mountPath: /var/lib/postgresql/data name: postgresql diff --git a/Yamls/postgresql-service.yaml b/Yamls/postgresql-service.yaml new file mode 100644 index 0000000..f7fc05d --- /dev/null +++ b/Yamls/postgresql-service.yaml @@ -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 diff --git a/Yamls/pvc-postgresql.yaml b/Yamls/pvc-postgresql.yaml new file mode 100644 index 0000000..534b19d --- /dev/null +++ b/Yamls/pvc-postgresql.yaml @@ -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 diff --git a/borraDB.sh b/borraDB.sh new file mode 100644 index 0000000..0ebb1fb --- /dev/null +++ b/borraDB.sh @@ -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 diff --git a/creaDB.sh b/creaDB.sh new file mode 100644 index 0000000..d46530a --- /dev/null +++ b/creaDB.sh @@ -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 diff --git a/pvc.yaml b/pvc.yaml deleted file mode 100644 index d189e15..0000000 --- a/pvc.yaml +++ /dev/null @@ -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: {} diff --git a/src/config/entrypoint.sh b/src/config/entrypoint.sh index 2e5ae5c..8f3d562 100644 --- a/src/config/entrypoint.sh +++ b/src/config/entrypoint.sh @@ -1,7 +1,7 @@ #!/bin/bash RUN_PORT="8000" DATABASE=postgres -SQL_HOST=db +SQL_HOST=postgresql SQL_PORT=5432 export PATH=/opt/venv/bin:$PATH diff --git a/src/lyrics/management/commands/importar_albumes.py b/src/lyrics/management/commands/importar_albumes.py index e748e15..1abb4cb 100644 --- a/src/lyrics/management/commands/importar_albumes.py +++ b/src/lyrics/management/commands/importar_albumes.py @@ -26,10 +26,10 @@ class Command(BaseCommand): albumes_creados = 0 for album_data in datos: try: - artista = Artista.objects.get(id=album_data["artist"]) + artista = Artista.objects.get(nombre=album_data["artista_nombre"]) creado = Album.objects.create( - artist_id=artista.id, + artist=artista, name=album_data['name'], year=album_data['year'], cover_image=album_data['cover_image'], @@ -38,7 +38,7 @@ class Command(BaseCommand): albumes_creados += 1 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.')) diff --git a/src/lyrics/management/commands/importar_canciones.py b/src/lyrics/management/commands/importar_canciones.py index 7856e40..27e434c 100644 --- a/src/lyrics/management/commands/importar_canciones.py +++ b/src/lyrics/management/commands/importar_canciones.py @@ -26,13 +26,13 @@ class Command(BaseCommand): canciones_creados = 0 for cancion_data in datos: 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( - album_id=album.id, + album=album, + artist=artista, title=cancion_data['title'], - artist_id=artista.id, year=cancion_data['year'], lyrics=cancion_data['lyrics'], pista=cancion_data['pista'], diff --git a/src/lyrics/serializers.py b/src/lyrics/serializers.py index 5ba68cc..9e0aaa2 100644 --- a/src/lyrics/serializers.py +++ b/src/lyrics/serializers.py @@ -1,3 +1,5 @@ +import os + from rest_framework import serializers from .models import Artista, Album, Song @@ -7,14 +9,31 @@ class ArtistaSerializer(serializers.ModelSerializer): model = Artista 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): + artista_nombre = serializers.CharField(source='artist.nombre', read_only=True) + class Meta: 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): + artista_nombre = serializers.CharField(source='artist.nombre', read_only=True) + album_nombre = serializers.CharField(source='album.name', read_only=True) + class Meta: model = Song - fields = '__all__' # Incluir todos los campos del modelo + fields = ['title', 'year', 'lyrics', 'pista', 'artista_nombre', 'album_nombre'] diff --git a/src/mediafiles/artistas/.noborrar b/src/mediafiles/artistas/.noborrar new file mode 100644 index 0000000..e69de29 diff --git a/src/mediafiles/cover_image/.noborrar b/src/mediafiles/cover_image/.noborrar new file mode 100644 index 0000000..e69de29 diff --git a/src/mediafiles/vehiculos/.noborrar b/src/mediafiles/vehiculos/.noborrar new file mode 100644 index 0000000..e69de29 diff --git a/src/mediafiles/vehiculos/bmw.jpg b/src/mediafiles/vehiculos/bmw.jpg deleted file mode 100644 index 88723ad..0000000 Binary files a/src/mediafiles/vehiculos/bmw.jpg and /dev/null differ diff --git a/src/mediafiles/vehiculos/bmw.png b/src/mediafiles/vehiculos/bmw.png deleted file mode 100644 index e6e2c25..0000000 Binary files a/src/mediafiles/vehiculos/bmw.png and /dev/null differ diff --git a/src/mediafiles/vehiculos/bmw_PMjCK7Q.png b/src/mediafiles/vehiculos/bmw_PMjCK7Q.png deleted file mode 100644 index e6e2c25..0000000 Binary files a/src/mediafiles/vehiculos/bmw_PMjCK7Q.png and /dev/null differ diff --git a/src/mediafiles/vehiculos/bmw_cSbhRuf.png b/src/mediafiles/vehiculos/bmw_cSbhRuf.png deleted file mode 100644 index e6e2c25..0000000 Binary files a/src/mediafiles/vehiculos/bmw_cSbhRuf.png and /dev/null differ diff --git a/src/mediafiles/vehiculos/bmw_x00n9W7.png b/src/mediafiles/vehiculos/bmw_x00n9W7.png deleted file mode 100644 index e6e2c25..0000000 Binary files a/src/mediafiles/vehiculos/bmw_x00n9W7.png and /dev/null differ diff --git a/src/mediafiles/vehiculos/bmw_yVyuq4g.jpg b/src/mediafiles/vehiculos/bmw_yVyuq4g.jpg deleted file mode 100644 index 88723ad..0000000 Binary files a/src/mediafiles/vehiculos/bmw_yVyuq4g.jpg and /dev/null differ diff --git a/src/repostajes/management/commands/importar_repostajes.py b/src/repostajes/management/commands/importar_repostajes.py index e3bccd1..ea690d8 100644 --- a/src/repostajes/management/commands/importar_repostajes.py +++ b/src/repostajes/management/commands/importar_repostajes.py @@ -26,10 +26,10 @@ class Command(BaseCommand): repostajes_creados = 0 for repostaje_data in datos: try: - vehiculo = Vehiculo.objects.get(id=repostaje_data["vehiculo"]) + vehiculo = Vehiculo.objects.get(matricula=repostaje_data["vehiculo_matricula"]) creado = Repostaje.objects.create( - vehiculo_id=vehiculo.id, + vehiculo=vehiculo, fecha=repostaje_data['fecha'], kms=repostaje_data['kms'], litros=repostaje_data['litros'], @@ -43,7 +43,7 @@ class Command(BaseCommand): repostajes_creados += 1 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.')) diff --git a/src/repostajes/management/commands/importar_vehiculos.py b/src/repostajes/management/commands/importar_vehiculos.py index 861cf2c..e3ae66b 100644 --- a/src/repostajes/management/commands/importar_vehiculos.py +++ b/src/repostajes/management/commands/importar_vehiculos.py @@ -26,7 +26,6 @@ class Command(BaseCommand): vehiculos_creados = 0 for vehiculo_data in datos: creado = Vehiculo.objects.create( - id=vehiculo_data['id'], marca=vehiculo_data['marca'], modelo=vehiculo_data['modelo'], matricula=vehiculo_data['matricula'], diff --git a/src/repostajes/serializers.py b/src/repostajes/serializers.py index 82cc100..f3583e4 100644 --- a/src/repostajes/serializers.py +++ b/src/repostajes/serializers.py @@ -9,6 +9,8 @@ class VehiculoSerializer(serializers.ModelSerializer): class RepostajeSerializer(serializers.ModelSerializer): + vehiculo_matricula = serializers.CharField(source='vehiculo.matricula', read_only=True) + class Meta: model = Repostaje - fields = '__all__' # Incluir todos los campos del modelo + fields = ['id', 'fecha', 'kms', 'litros', 'descuento', 'importe', 'precioxlitro', 'kmsrecorridos', 'consumo', 'vehiculo', 'vehiculo_matricula'] diff --git a/src/reymota/settings.py b/src/reymota/settings.py index a3294ba..053346d 100644 --- a/src/reymota/settings.py +++ b/src/reymota/settings.py @@ -87,7 +87,7 @@ DATABASES = { "NAME": "reymota", "USER": "creylopez", "PASSWORD": "Dsa-0213", - "HOST": "db", + "HOST": "postgresql", "PORT": "5432", } } diff --git a/src/reymotausers/serializers.py b/src/reymotausers/serializers.py index 5b9c965..617baf1 100644 --- a/src/reymotausers/serializers.py +++ b/src/reymotausers/serializers.py @@ -1,3 +1,5 @@ +import os + from rest_framework import serializers from .models import ReyMotaUser @@ -5,4 +7,10 @@ from .models import ReyMotaUser class ReyMotaUserSerializer(serializers.ModelSerializer): class Meta: 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 diff --git a/src/templates/index.html b/src/templates/index.html index dae2a76..e0d35ee 100644 --- a/src/templates/index.html +++ b/src/templates/index.html @@ -9,7 +9,7 @@