Browse Source

Cambio a postgresql

Tino 1 tháng trước cách đây
mục cha
commit
263b60e882

+ 10 - 1
k8s/Makefile

@@ -8,7 +8,7 @@ NAMESPACE := regbrowser
 DEPLOY    := regbrowser
 
 .DEFAULT_GOAL := help
-.PHONY: help build push deploy robot-secret restart status logs uninstall purge
+.PHONY: help build push deploy robot-secret db-secret restart status logs uninstall purge purge
 
 help: ## Muestra esta ayuda
 	@grep -E '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) | \
@@ -30,12 +30,21 @@ robot-secret: ## Crea/renueva el pull secret del robot account. Uso: make -C k8s
 	kubectl rollout restart deploy/$(DEPLOY) -n $(NAMESPACE)
 	kubectl rollout status deploy/$(DEPLOY) -n $(NAMESPACE) --timeout=180s
 
+db-secret: ## Crea/renueva el secret de conexión a Postgres (copia credenciales de reymota-pg-cluster)
+	kubectl get secret postgres-app-user -n reymota-pg-cluster -o json | \
+	python3 -c "import json,sys; d=json.load(sys.stdin); print(json.dumps({'apiVersion':'v1','kind':'Secret','metadata':{'name':'regbrowser-db','namespace':'$(NAMESPACE)'},'type':'Opaque','data':{k:d['data'][k] for k in ('username','password')}}))" | \
+	kubectl apply -f -
+
 deploy: ## Aplica los manifiestos y espera a que esté disponible
 	kubectl apply -f namespace.yaml
 	@if ! kubectl get secret myregistrykey -n $(NAMESPACE) >/dev/null 2>&1; then \
 		echo ">> Falta el pull secret; créalo con: make -C k8s robot-secret TOKEN='<token>'"; \
 		exit 1; \
 	fi
+	@if ! kubectl get secret regbrowser-db -n $(NAMESPACE) >/dev/null 2>&1; then \
+		echo ">> Falta el secret de BD; ejecutando 'make db-secret'..."; \
+		$(MAKE) --no-print-directory db-secret; \
+	fi
 	kubectl apply -f secrets.yaml -f pvc.yaml -f deployment.yaml -f service-ingress.yaml
 	kubectl rollout status deploy/$(DEPLOY) -n $(NAMESPACE) --timeout=180s
 

+ 12 - 0
k8s/database.yaml

@@ -0,0 +1,12 @@
+apiVersion: postgresql.cnpg.io/v1
+kind: Database
+metadata:
+  name: regbrowser-db
+  namespace: reymota-pg-cluster
+spec:
+  cluster:
+    name: postgres-cluster
+  name: regbrowser
+  owner: creylopez
+  databaseReclaimPolicy: retain
+  ensure: present

+ 16 - 0
k8s/deployment.yaml

@@ -37,6 +37,22 @@ spec:
                   key: SECRET_KEY
             - name: SQLITE_PATH
               value: /data/db.sqlite3
+            - name: POSTGRES_HOST
+              value: postgres-cluster-rw.reymota-pg-cluster.svc.cluster.local
+            - name: POSTGRES_PORT
+              value: "5432"
+            - name: POSTGRES_DB
+              value: regbrowser
+            - name: POSTGRES_USER
+              valueFrom:
+                secretKeyRef:
+                  name: regbrowser-db
+                  key: username
+            - name: POSTGRES_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  name: regbrowser-db
+                  key: password
           volumeMounts:
             - name: db
               mountPath: /data

BIN
regbrowser/__pycache__/settings.cpython-312.pyc


+ 17 - 5
regbrowser/settings.py

@@ -51,12 +51,24 @@ TEMPLATES = [
 
 WSGI_APPLICATION = 'regbrowser.wsgi.application'
 
-DATABASES = {
-    'default': {
-        'ENGINE': 'django.db.backends.sqlite3',
-        'NAME': os.environ.get('SQLITE_PATH', BASE_DIR / 'db.sqlite3'),
+if os.environ.get('POSTGRES_HOST'):
+    DATABASES = {
+        'default': {
+            'ENGINE': 'django.db.backends.postgresql',
+            'NAME': os.environ.get('POSTGRES_DB', 'regbrowser'),
+            'USER': os.environ.get('POSTGRES_USER'),
+            'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
+            'HOST': os.environ['POSTGRES_HOST'],
+            'PORT': os.environ.get('POSTGRES_PORT', '5432'),
+        }
+    }
+else:
+    DATABASES = {
+        'default': {
+            'ENGINE': 'django.db.backends.sqlite3',
+            'NAME': os.environ.get('SQLITE_PATH', BASE_DIR / 'db.sqlite3'),
+        }
     }
-}
 
 AUTH_PASSWORD_VALIDATORS = [
     {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'},

+ 1 - 0
requirements.txt

@@ -1,5 +1,6 @@
 Django>=4.2,<5.0
 requests>=2.31.0
 urllib3>=2.0.0
+psycopg2-binary>=2.9.9
 gunicorn>=22.0.0
 whitenoise>=6.6.0