diff --git a/Finanzas/.dockerignore b/Finanzas/.dockerignore index b6ce3ed..60aa973 100644 --- a/Finanzas/.dockerignore +++ b/Finanzas/.dockerignore @@ -2,3 +2,4 @@ Dockerfile Makefile volcadossql/ venv/ +migrations/ diff --git a/Finanzas/Dockerfile b/Finanzas/Dockerfile index 4656433..e1846d1 100644 --- a/Finanzas/Dockerfile +++ b/Finanzas/Dockerfile @@ -67,7 +67,7 @@ COPY . $APP_HOME # change to the app user #USER app -WORKDIR $APP_HOME/vehiculos +WORKDIR $APP_HOME/finanzas # run entrypoint.sh ENTRYPOINT ["/app/entrypoint.sh"] diff --git a/Finanzas/K8S/Makefile b/Finanzas/K8S/Makefile index 39e4805..4f6720e 100644 --- a/Finanzas/K8S/Makefile +++ b/Finanzas/K8S/Makefile @@ -1,7 +1,7 @@ export ARQUITECTURA := $(shell lscpu |grep itectur | tr -d ' '| cut -f2 -d':') #export REGISTRY=registry.cube.local export REGISTRY=registry.reymota.es -export IMG_VERSION = 1.16 +export IMG_VERSION = 0.3 export IMG_NGINX_VERSION = 1.0 # limpia todo @@ -18,8 +18,8 @@ install: -kubectl create -f pv-local-finanzas.yaml -kubectl create -f finanzas-prod-persistentvolumeclaim.yaml - -kubectl create -f static-volume-persistentvolumeclaim.yaml -kubectl create -f postgres-data-persistentvolumeclaim.yaml + -kubectl create -f static-volume-persistentvolumeclaim.yaml -kubectl create -f db-deployment.yaml -kubectl create -f db-service.yaml @@ -39,8 +39,8 @@ clean: -kubectl delete -f env-prod-configmap.yaml -kubectl delete -f env-prod-db-configmap.yaml - -kubectl delete -f postgres-data-persistentvolumeclaim.yaml -kubectl delete -f static-volume-persistentvolumeclaim.yaml + -kubectl delete -f postgres-data-persistentvolumeclaim.yaml -kubectl delete -f finanzas-prod-persistentvolumeclaim.yaml -kubectl delete -f pv-local-finanzas.yaml -kubectl delete -f reg-secret.yaml diff --git a/Finanzas/K8S/finanzas-deployment.yaml b/Finanzas/K8S/finanzas-deployment.yaml index 28ce892..b80ca85 100644 --- a/Finanzas/K8S/finanzas-deployment.yaml +++ b/Finanzas/K8S/finanzas-deployment.yaml @@ -104,8 +104,10 @@ spec: volumeMounts: - mountPath: /app/finanzas/mediafiles name: finanzas-media - - mountPath: /app/finanzas/repostajes/migrations - name: finanzas-migrations + - mountPath: /app/finanzas/apuntes/migrations + name: apuntes-migrations + - mountPath: /app/finanzas/reymotausers/migrations + name: reymotausers-migrations - mountPath: /app/finanzas/staticfiles name: static-volume imagePullSecrets: @@ -115,9 +117,12 @@ spec: - name: finanzas-media persistentVolumeClaim: claimName: finanzas-media - - name: finanzas-migrations + - name: apuntes-migrations persistentVolumeClaim: - claimName: finanzas-migrations + claimName: apuntes-migrations + - name: reymotausers-migrations + persistentVolumeClaim: + claimName: reymotausers-migrations - name: static-volume persistentVolumeClaim: claimName: static-volume diff --git a/Finanzas/K8S/finanzas-prod-persistentvolumeclaim.yaml b/Finanzas/K8S/finanzas-prod-persistentvolumeclaim.yaml index ad2c059..d1c67bc 100644 --- a/Finanzas/K8S/finanzas-prod-persistentvolumeclaim.yaml +++ b/Finanzas/K8S/finanzas-prod-persistentvolumeclaim.yaml @@ -19,8 +19,24 @@ kind: PersistentVolumeClaim metadata: creationTimestamp: null labels: - io.kompose.service: finanzas-migrations - name: finanzas-migrations + io.kompose.service: apuntes-migrations + name: apuntes-migrations + namespace: finanzas +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 50Mi +status: {} +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + creationTimestamp: null + labels: + io.kompose.service: reymotausers-migrations + name: reymotausers-migrations namespace: finanzas spec: accessModes: @@ -29,4 +45,3 @@ spec: requests: storage: 50Mi status: {} - diff --git a/Finanzas/K8S/pv-local-finanzas.yaml b/Finanzas/K8S/pv-local-finanzas.yaml index 75e7250..0e7ef05 100644 --- a/Finanzas/K8S/pv-local-finanzas.yaml +++ b/Finanzas/K8S/pv-local-finanzas.yaml @@ -16,7 +16,7 @@ spec: apiVersion: v1 kind: PersistentVolume metadata: - name: finanzas-migrations-folder + name: apuntes-migrations-folder namespace: finanzas labels: app: finanzas @@ -26,7 +26,22 @@ spec: accessModes: - ReadWriteOnce hostPath: - path: "/mnt/Externo/finanzas/migrations" + path: "/mnt/Externo/finanzas/migrations/apuntes" +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: reymotausers-migrations-folder + namespace: finanzas + labels: + app: finanzas +spec: + capacity: + storage: 50Mi + accessModes: + - ReadWriteOnce + hostPath: + path: "/mnt/Externo/finanzas/migrations/reymotausers" --- apiVersion: v1 kind: PersistentVolume diff --git a/Finanzas/K8S/verImg.sh b/Finanzas/K8S/verImg.sh index 232a931..a02dceb 100644 --- a/Finanzas/K8S/verImg.sh +++ b/Finanzas/K8S/verImg.sh @@ -1 +1 @@ -docker run -it registry.reymota.es/apuntes:1.19 bash +docker run -it registry.reymota.es/finanzas-x86_64:0.2 bash diff --git a/Finanzas/README.md b/Finanzas/README.md index 921e2f5..c58b681 100644 --- a/Finanzas/README.md +++ b/Finanzas/README.md @@ -17,7 +17,7 @@ Con la shell entraPsql.sh: \l para listar las BD -\c vehiculos para usar nuestra db +\c finanzas para usar nuestra db \dt para ver las tablas # De dónde cogí ideas diff --git a/Finanzas/finanzas/.dockerignore b/Finanzas/finanzas/.dockerignore new file mode 100644 index 0000000..49ef255 --- /dev/null +++ b/Finanzas/finanzas/.dockerignore @@ -0,0 +1 @@ +db.sqlite3 diff --git a/Finanzas/finanzas/apuntes/admin.py b/Finanzas/finanzas/apuntes/admin.py index 62d26be..0b550eb 100644 --- a/Finanzas/finanzas/apuntes/admin.py +++ b/Finanzas/finanzas/apuntes/admin.py @@ -8,4 +8,3 @@ from .models import Apunte, Cuenta, Tipo admin.site.register(Apunte) admin.site.register(Cuenta) admin.site.register(Tipo) - diff --git a/Finanzas/finanzas/apuntes/migrations/0001_initial.py b/Finanzas/finanzas/apuntes/migrations/0001_initial.py deleted file mode 100644 index ffbe713..0000000 --- a/Finanzas/finanzas/apuntes/migrations/0001_initial.py +++ /dev/null @@ -1,42 +0,0 @@ -# Generated by Django 4.2 on 2024-09-03 14:50 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Tipo', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('tipo', models.TextField(max_length=10)), - ], - ), - migrations.CreateModel( - name='Cuenta', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('nombre', models.TextField(max_length=20)), - ('saldo_inicial', models.DecimalField(decimal_places=2, max_digits=10)), - ('saldo_actual', models.DecimalField(decimal_places=2, max_digits=10)), - ('tipo', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='apuntes.tipo')), - ], - ), - migrations.CreateModel( - name='Apunte', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('fecha', models.DateField()), - ('importe', models.DecimalField(decimal_places=2, max_digits=10)), - ('cta_destino', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='destino', to='apuntes.cuenta')), - ('cta_origen', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='origen', to='apuntes.cuenta')), - ], - ), - ] diff --git a/Finanzas/finanzas/apuntes/migrations/__init__.py b/Finanzas/finanzas/apuntes/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Finanzas/finanzas/apuntes/models.py b/Finanzas/finanzas/apuntes/models.py index b3ffb7d..6662644 100644 --- a/Finanzas/finanzas/apuntes/models.py +++ b/Finanzas/finanzas/apuntes/models.py @@ -1,11 +1,13 @@ from django.db import models + class Tipo(models.Model): tipo = models.TextField(max_length=10) def __str__(self): return self.tipo + class Cuenta(models.Model): nombre = models.TextField(max_length=20) saldo_inicial = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True) @@ -14,7 +16,8 @@ class Cuenta(models.Model): def __str__(self): return self.nombre - + + class Apunte(models.Model): fecha = models.DateField() cta_origen = models.ForeignKey(Cuenta, on_delete=models.CASCADE, related_name='origen') diff --git a/Finanzas/finanzas/apuntes/views.py b/Finanzas/finanzas/apuntes/views.py index 71f7b85..6553dc3 100644 --- a/Finanzas/finanzas/apuntes/views.py +++ b/Finanzas/finanzas/apuntes/views.py @@ -1,4 +1,3 @@ -from django.shortcuts import render from django.contrib.auth.decorators import login_required from django.shortcuts import render, get_object_or_404, redirect @@ -6,6 +5,7 @@ from django.shortcuts import render, get_object_or_404, redirect from .models import Cuenta, Apunte from .forms import CuentaForm, ApunteForm + @login_required def principal(request): cuentas = Cuenta.objects.all() diff --git a/Finanzas/finanzas/finanzas/settings.py b/Finanzas/finanzas/finanzas/settings.py index 8cdce00..3e09610 100644 --- a/Finanzas/finanzas/finanzas/settings.py +++ b/Finanzas/finanzas/finanzas/settings.py @@ -11,6 +11,7 @@ https://docs.djangoproject.com/en/5.1/ref/settings/ """ from pathlib import Path +import os # Build paths inside the project like this: BASE_DIR / 'subdir'. @@ -58,7 +59,7 @@ ROOT_URLCONF = 'finanzas.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [ BASE_DIR / 'templates' ], + 'DIRS': [BASE_DIR / 'templates'], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ @@ -74,7 +75,6 @@ TEMPLATES = [ }, ] -print("Directorio de templates: ", TEMPLATES[0]['DIRS']) WSGI_APPLICATION = 'finanzas.wsgi.application' @@ -83,13 +83,16 @@ WSGI_APPLICATION = 'finanzas.wsgi.application' # https://docs.djangoproject.com/en/5.1/ref/settings/#databases DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', + "default": { + "ENGINE": os.environ.get("SQL_ENGINE", "django.db.backends.sqlite3"), + "NAME": os.environ.get("SQL_DATABASE", BASE_DIR / "db.sqlite3"), + "USER": os.environ.get("SQL_USER", "user"), + "PASSWORD": os.environ.get("SQL_PASSWORD", "password"), + "HOST": os.environ.get("SQL_HOST", "localhost"), + "PORT": os.environ.get("SQL_PORT", "5432"), } } - # Password validation # https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators diff --git a/Finanzas/finanzas/finanzas/urls.py b/Finanzas/finanzas/finanzas/urls.py index 9da87aa..1921888 100644 --- a/Finanzas/finanzas/finanzas/urls.py +++ b/Finanzas/finanzas/finanzas/urls.py @@ -22,7 +22,7 @@ from django.views.generic.base import TemplateView # new urlpatterns = [ path('obreros/', admin.site.urls), - + path('apuntes/', include('apuntes.urls')), path("accounts/", include("accounts.urls")), # new @@ -32,4 +32,3 @@ urlpatterns = [ path("", TemplateView.as_view(template_name="apuntes/index.html"), name="principal"), # new ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) - diff --git a/Finanzas/finanzas/reymotausers/admin.py b/Finanzas/finanzas/reymotausers/admin.py index 431d572..1892dd2 100644 --- a/Finanzas/finanzas/reymotausers/admin.py +++ b/Finanzas/finanzas/reymotausers/admin.py @@ -7,6 +7,7 @@ from django.contrib.auth.admin import UserAdmin from reymotausers.models import ReyMotaUser from reymotausers.forms import ReyMotaUserCreationForm, ReyMotaUserChangeForm + class ReyMotaUserAdmin(UserAdmin): add_form = ReyMotaUserCreationForm form = ReyMotaUserChangeForm diff --git a/Finanzas/finanzas/reymotausers/forms.py b/Finanzas/finanzas/reymotausers/forms.py index 5d348fd..5e8af6c 100644 --- a/Finanzas/finanzas/reymotausers/forms.py +++ b/Finanzas/finanzas/reymotausers/forms.py @@ -3,6 +3,7 @@ from django.contrib.auth.forms import UserCreationForm, UserChangeForm from .models import ReyMotaUser + class ReyMotaUserCreationForm(UserCreationForm): class Meta: diff --git a/Finanzas/finanzas/reymotausers/migrations/0001_initial.py b/Finanzas/finanzas/reymotausers/migrations/0001_initial.py deleted file mode 100644 index 6bd788d..0000000 --- a/Finanzas/finanzas/reymotausers/migrations/0001_initial.py +++ /dev/null @@ -1,34 +0,0 @@ -# Generated by Django 4.2 on 2024-09-03 14:49 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('auth', '0012_alter_user_first_name_max_length'), - ] - - operations = [ - migrations.CreateModel( - name='ReyMotaUser', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('password', models.CharField(max_length=128, verbose_name='password')), - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), - ('email', models.EmailField(max_length=254, unique=True, verbose_name='email address')), - ('foto', models.ImageField(blank=True, default='profile_images/default.jpg', upload_to='profile_images')), - ('is_staff', models.BooleanField(default=False)), - ('is_active', models.BooleanField(default=True)), - ('nombre', models.CharField(blank=True, max_length=200, null=True)), - ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')), - ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/Finanzas/finanzas/reymotausers/migrations/__init__.py b/Finanzas/finanzas/reymotausers/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Finanzas/finanzas/reymotausers/models.py b/Finanzas/finanzas/reymotausers/models.py index a4b57fd..63b7226 100644 --- a/Finanzas/finanzas/reymotausers/models.py +++ b/Finanzas/finanzas/reymotausers/models.py @@ -7,6 +7,7 @@ from .managers import ReyMotaUserManager # Create your models here. + class ReyMotaUser(AbstractBaseUser, PermissionsMixin): email = models.EmailField(_("email address"), unique=True) foto = models.ImageField(upload_to="profile_images", default="profile_images/default.jpg", blank=True) @@ -21,4 +22,3 @@ class ReyMotaUser(AbstractBaseUser, PermissionsMixin): def __str__(self): return self.email - diff --git a/Finanzas/nginx/Makefile b/Finanzas/nginx/Makefile index 41d9314..4683401 100644 --- a/Finanzas/nginx/Makefile +++ b/Finanzas/nginx/Makefile @@ -2,7 +2,7 @@ install: echo "Creando imagen con version '${IMG_NGINX_VERSION}' para la arquitectura '${ARQUITECTURA}' en el registry '${REGISTRY}'" - docker build --no-cache -t ${REGISTRY}/nginx-vehiculos-${ARQUITECTURA}:${IMG_NGINX_VERSION} . - docker push ${REGISTRY}/nginx-vehiculos-${ARQUITECTURA}:${IMG_NGINX_VERSION} + docker build --no-cache -t ${REGISTRY}/nginx-finanzas-${ARQUITECTURA}:${IMG_NGINX_VERSION} . + docker push ${REGISTRY}/nginx-finanzas-${ARQUITECTURA}:${IMG_NGINX_VERSION} diff --git a/Finanzas/nginx/nginx.conf b/Finanzas/nginx/nginx.conf index 2b05005..c72ad20 100644 --- a/Finanzas/nginx/nginx.conf +++ b/Finanzas/nginx/nginx.conf @@ -1,5 +1,5 @@ -upstream vehiculos { - server vehiculos:8000; +upstream finanzas { + server finanzas:8000; } server { @@ -7,7 +7,7 @@ server { listen 80; location / { - proxy_pass http://vehiculos; + proxy_pass http://finanzas; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; @@ -15,11 +15,11 @@ server { } location /static/ { - alias /app/vehiculos/staticfiles/; + alias /app/finanzas/staticfiles/; } location /media/ { - alias /app/vehiculos/mediafiles/; + alias /app/finanzas/mediafiles/; } }