Skip to content

Commit 1f7d755

Browse files
committed
Merge branch 'develop'
2 parents 97bc31c + 88e914e commit 1f7d755

File tree

10 files changed

+292
-86
lines changed

10 files changed

+292
-86
lines changed

.docker/php/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ RUN pecl install pcov && docker-php-ext-enable pcov
3333
# Node.js, NPM, Yarn
3434
RUN curl -sL https://deb.nodesource.com/setup_18.x | bash -
3535
RUN apt-get install -y nodejs
36-
RUN npm install npm@latest -g
36+
RUN npm install npm@10.8.2 -g
3737
RUN npm install yarn -g
3838

3939
# Composer

.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
.docker/redis/data
2+
.docker/db/data

.env

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
APP_NAME=Laravel
2+
APP_ENV=local
3+
APP_KEY=base64:pHO16gE8adtnWTcqxqqulcxVwkb6xd/WNF8XGAHrvAI=
4+
APP_DEBUG=true
5+
APP_TIMEZONE=UTC
6+
APP_URL=http://localhost
7+
8+
APP_LOCALE=en
9+
APP_FALLBACK_LOCALE=en
10+
APP_FAKER_LOCALE=en_US
11+
12+
APP_MAINTENANCE_DRIVER=file
13+
APP_MAINTENANCE_STORE=database
14+
15+
BCRYPT_ROUNDS=12
16+
17+
LOG_CHANNEL=stack
18+
LOG_STACK=single
19+
LOG_DEPRECATIONS_CHANNEL=null
20+
LOG_LEVEL=debug
21+
22+
DB_CONNECTION=mysql
23+
DB_HOST=db
24+
DB_PORT=3306
25+
DB_DATABASE=refactorian
26+
DB_USERNAME=refactorian
27+
DB_PASSWORD=refactorian
28+
29+
SESSION_DRIVER=database
30+
SESSION_LIFETIME=120
31+
SESSION_ENCRYPT=false
32+
SESSION_PATH=/
33+
SESSION_DOMAIN=null
34+
35+
BROADCAST_CONNECTION=log
36+
FILESYSTEM_DISK=local
37+
QUEUE_CONNECTION=database
38+
39+
CACHE_STORE=database
40+
CACHE_PREFIX=
41+
42+
MEMCACHED_HOST=127.0.0.1
43+
44+
REDIS_CLIENT=phpredis
45+
REDIS_HOST=redis
46+
REDIS_PASSWORD=null
47+
REDIS_PORT=6379
48+
49+
MAIL_MAILER=smtp
50+
MAIL_HOST=mailpit
51+
MAIL_PORT=1025
52+
MAIL_USERNAME=null
53+
MAIL_PASSWORD=null
54+
MAIL_ENCRYPTION=null
55+
MAIL_FROM_ADDRESS="hello@example.com"
56+
MAIL_FROM_NAME="${APP_NAME}"
57+
58+
AWS_ACCESS_KEY_ID=
59+
AWS_SECRET_ACCESS_KEY=
60+
AWS_DEFAULT_REGION=us-east-1
61+
AWS_BUCKET=
62+
AWS_USE_PATH_STYLE_ENDPOINT=false
63+
64+
VITE_APP_NAME="${APP_NAME}"

.gitignore

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
/public/storage
66
/storage/*.key
77
/vendor
8-
.env
98
.env.backup
109
.env.production
1110
.phpunit.result.cache
@@ -17,3 +16,42 @@ yarn-error.log
1716
/.fleet
1817
/.idea
1918
/.vscode
19+
# Archivos de estado de Terraform
20+
*.tfstate
21+
*.tfstate.backup
22+
23+
# Archivos de bloqueo de Terraform
24+
.terraform.lock.hcl
25+
26+
# Directorio de configuración de Terraform
27+
.terraform/
28+
29+
# Salidas generadas al ejecutar Terraform
30+
crash.log
31+
*.tfvars.json
32+
*.tfvars
33+
34+
# Variables sensibles (no subir configuraciones con secretos)
35+
# Ejemplo: variables.tfvars o cualquier archivo que incluya valores sensibles
36+
terraform.tfvars
37+
*.auto.tfvars
38+
39+
# Archivos de salida o planificaciones
40+
*.tfplan
41+
*.log
42+
43+
# Archivos de proveedor descargados
44+
**/terraform.tfstate.d/
45+
46+
# Cache de Terraform
47+
.terraform.d/
48+
49+
# Editor/IDE y sistema operativo
50+
.vscode/
51+
.idea/
52+
*.swp
53+
*.bak
54+
*.tmp
55+
.DS_Store
56+
Thumbs.db
57+

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ RUN pecl install pcov && docker-php-ext-enable pcov
3333
# Node.js, NPM, Yarn
3434
RUN curl -sL https://deb.nodesource.com/setup_18.x | bash -
3535
RUN apt-get install -y nodejs
36-
RUN npm install npm@latest -g
36+
RUN npm install npm@10.8.2 -g
3737
RUN npm install yarn -g
3838

3939
# Composer

README.md

Lines changed: 82 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -355,87 +355,7 @@ spec:
355355
number: {{ .Values.adminer.port }}
356356
```
357357
### Gestión de Secrets
358-
Dado que no es muy seguro mantener los secretos directamente en el repositorio se ha implementado `Sealed Secrets`. Es una solución de Bitnami que permite cifrar secretos con una clave pública del clúster. Los secretos cifrados se almacenan en el repositorio y se descifran en el clúster.
359-
360-
Para implementar se sigue los siguientes pasos:
361-
362-
- Instalar el controlador de `Sealed Secrets` en el clúster.
363-
```sh
364-
kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.20.5/controller.yaml
365-
```
366-
- Verifica que el controller esté en funcionamiento:
367-
```
368-
kubectl get pods -n kube-system | grep sealed-secrets
369-
370-
```
371-
- Instalar la CLI de Sealed Secrets (`kubeseal`)
372-
```sh
373-
KUBESEAL_VERSION='0.25.0'
374-
curl -OL "https://github.com/bitnami-labs/sealed-secrets/releases/download/v${KUBESEAL_VERSION:?}/kubeseal-${KUBESEAL_VERSION:?}-linux-amd64.tar.gz"
375-
tar -xvzf kubeseal-${KUBESEAL_VERSION:?}-linux-amd64.tar.gz kubeseal
376-
sudo install -m 755 kubeseal /usr/local/bin/kubeseal
377-
```
378-
- Verifica que esté instalado correctamente:
379-
```sh
380-
kubeseal --version
381-
382-
```
383-
- Crear un archivo de secretos no cifrado, como este:
384-
```sh
385-
apiVersion: v1
386-
kind: Secret
387-
metadata:
388-
name: my-db-secret
389-
namespace: default
390-
data:
391-
MYSQL_ROOT_PASSWORD: bXktc2VjcmV0LXJvb3Q= # Base64 de "my-secret-root"
392-
MYSQL_DATABASE: bXktZGF0YWJhc2U= # Base64 de "my-database"
393-
MYSQL_USER: bXktdXNlcg== # Base64 de "my-user"
394-
MYSQL_PASSWORD: bXktcGFzc3dvcmQ= # Base64 de "my-password"
395-
```
396-
- Cifrar el archivo usando Sealed Secrets
397-
```sh
398-
kubeseal --controller-namespace kube-system --controller-name sealed-secrets-controller \
399-
--format yaml < db-secret.yaml > db-sealed-secrets.yaml
400-
401-
```
402-
- Se obtiene un manifiesto que, despues de parametrizar, obtenemos:
403-
```sh
404-
---
405-
apiVersion: bitnami.com/v1alpha1
406-
kind: SealedSecret
407-
metadata:
408-
creationTimestamp: null
409-
name: db-secret #"{{ .Release.Name }}-{{ .Values.db.name }}-{{ .Values.db.secrets.name }}"
410-
namespace: default
411-
labels:
412-
app: {{ .Values.db.name }}
413-
app.kubernetes.io/managed-by: Helm
414-
annotations:
415-
"helm.sh/hook": "pre-install, pre-upgrade"
416-
"helm.sh/hook-weight": "-1"
417-
meta.helm.sh/release-name: {{ .Release.Name }}
418-
meta.helm.sh/release-namespace: {{ .Release.Namespace }}
419-
spec:
420-
encryptedData:
421-
# Datos encriptados
422-
template:
423-
metadata:
424-
creationTimestamp: null
425-
labels:
426-
app: {{ .Values.db.name }}
427-
app.kubernetes.io/managed-by: Helm
428-
name: db-secret #"{{ .Release.Name }}-{{ .Values.db.name }}-{{ .Values.db.secrets.name }}"
429-
namespace: {{ .Release.Namespace }}
430-
annotations:
431-
"helm.sh/hook": "pre-install, pre-upgrade"
432-
"helm.sh/hook-weight": "-1"
433-
meta.helm.sh/release-name: {{ .Release.Name }}
434-
meta.helm.sh/release-namespace: {{ .Release.Namespace }}
435-
436-
type: Opaque
437-
```
438-
Al desplegar con `ArgoCD` hubo algunos problemas la momento de desencriptar las credenciales por lo que se optó por una solución más sencilla, que se describe a continuación:
358+
Para la gestión de secretos se ha implementado de la siguiente manera:
439359

440360
- En el manifiesto `db-secret` se modifica el apartado de `data` para que reciba los valores y los codifique en `Base64`
441361
```sh
@@ -1069,7 +989,87 @@ Confirma escribiendo yes cuando se solicite.
1069989

1070990
Para el caso concreto de phpmyadmin, falla al cargar los estáticos de la página web. Para un futuro nos gustaría que todos los servicios sean accesibles atraves del ingress.
1071991

1072-
- **Manejo de los secretos**. Como se ha visto en el apartado de secrets se ha hecho un cambio para adaptarlo al despliegue de ArgoCD. Una posible mejora sería en la introducción de estos valores encriptados o el uso de un workflow donde se le pueda pasar estos valores para que no estén expuestos.
992+
- **Manejo de los secretos**. Dado que no es muy seguro mantener los secretos directamente en el repositorio se ha implementado `Sealed Secrets`. Es una solución de Bitnami que permite cifrar secretos con una clave pública del clúster. Los secretos cifrados se almacenan en el repositorio y se descifran en el clúster.
993+
994+
Para implementar se sigue los siguientes pasos:
995+
996+
- Instalar el controlador de `Sealed Secrets` en el clúster.
997+
```sh
998+
kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.20.5/controller.yaml
999+
```
1000+
- Verifica que el controller esté en funcionamiento:
1001+
```
1002+
kubectl get pods -n kube-system | grep sealed-secrets
1003+
1004+
```
1005+
- Instalar la CLI de Sealed Secrets (`kubeseal`)
1006+
```sh
1007+
KUBESEAL_VERSION='0.25.0'
1008+
curl -OL "https://github.com/bitnami-labs/sealed-secrets/releases/download/v${KUBESEAL_VERSION:?}/kubeseal-${KUBESEAL_VERSION:?}-linux-amd64.tar.gz"
1009+
tar -xvzf kubeseal-${KUBESEAL_VERSION:?}-linux-amd64.tar.gz kubeseal
1010+
sudo install -m 755 kubeseal /usr/local/bin/kubeseal
1011+
```
1012+
- Verifica que esté instalado correctamente:
1013+
```sh
1014+
kubeseal --version
1015+
1016+
```
1017+
- Crear un archivo de secretos no cifrado, como este:
1018+
```sh
1019+
apiVersion: v1
1020+
kind: Secret
1021+
metadata:
1022+
name: my-db-secret
1023+
namespace: default
1024+
data:
1025+
MYSQL_ROOT_PASSWORD: bXktc2VjcmV0LXJvb3Q= # Base64 de "my-secret-root"
1026+
MYSQL_DATABASE: bXktZGF0YWJhc2U= # Base64 de "my-database"
1027+
MYSQL_USER: bXktdXNlcg== # Base64 de "my-user"
1028+
MYSQL_PASSWORD: bXktcGFzc3dvcmQ= # Base64 de "my-password"
1029+
```
1030+
- Cifrar el archivo usando Sealed Secrets
1031+
```sh
1032+
kubeseal --controller-namespace kube-system --controller-name sealed-secrets-controller \
1033+
--format yaml < db-secret.yaml > db-sealed-secrets.yaml
1034+
1035+
```
1036+
- Se obtiene un manifiesto que, despues de parametrizar, obtenemos:
1037+
```sh
1038+
---
1039+
apiVersion: bitnami.com/v1alpha1
1040+
kind: SealedSecret
1041+
metadata:
1042+
creationTimestamp: null
1043+
name: db-secret #"{{ .Release.Name }}-{{ .Values.db.name }}-{{ .Values.db.secrets.name }}"
1044+
namespace: default
1045+
labels:
1046+
app: {{ .Values.db.name }}
1047+
app.kubernetes.io/managed-by: Helm
1048+
annotations:
1049+
"helm.sh/hook": "pre-install, pre-upgrade"
1050+
"helm.sh/hook-weight": "-1"
1051+
meta.helm.sh/release-name: {{ .Release.Name }}
1052+
meta.helm.sh/release-namespace: {{ .Release.Namespace }}
1053+
spec:
1054+
encryptedData:
1055+
# Datos encriptados
1056+
template:
1057+
metadata:
1058+
creationTimestamp: null
1059+
labels:
1060+
app: {{ .Values.db.name }}
1061+
app.kubernetes.io/managed-by: Helm
1062+
name: db-secret #"{{ .Release.Name }}-{{ .Values.db.name }}-{{ .Values.db.secrets.name }}"
1063+
namespace: {{ .Release.Namespace }}
1064+
annotations:
1065+
"helm.sh/hook": "pre-install, pre-upgrade"
1066+
"helm.sh/hook-weight": "-1"
1067+
meta.helm.sh/release-name: {{ .Release.Name }}
1068+
meta.helm.sh/release-namespace: {{ .Release.Namespace }}
1069+
1070+
type: Opaque
1071+
```
1072+
Al desplegar con `ArgoCD` hubo algunos problemas la momento de desencriptar las credenciales por lo que se optó por una solución más sencilla, descrita anteriormente.
10731073

10741074
- **Modificaciones dinamicas**. En este punto nos gustaría que se le pueda dar valores para crear y desplegar la aplicación con credenciales distintas a las de por defecto, al momento de ejecutar. Los valores que nos gustaría que fueran dinámicos son:
10751075
- Credenciales de la Base de datos.

gcp/application.tf

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# helm-release.tf
2+
resource "helm_release" "laravel_mysql" {
3+
name = "laravel-mysql"
4+
namespace = "laravel-mysql"
5+
create_namespace = true
6+
7+
#repository = "https://github.com/Bryyyan93/practica_final.git"
8+
chart = "${path.module}/../charts" # Ruta local al Helm Chart
9+
#version = "develop" # Branch o versión de tu repo
10+
11+
cleanup_on_fail = true # Asegura limpieza de recursos al destruir
12+
13+
values = [
14+
file("${path.module}/../charts/values.yaml") # Ruta local al archivo values.yaml
15+
]
16+
17+
set {
18+
name = "db.credentials.rootPassword"
19+
value = "root"
20+
}
21+
22+
set {
23+
name = "db.credentials.database"
24+
value = "refactorian"
25+
}
26+
27+
set {
28+
name = "db.credentials.user"
29+
value = "refactorian"
30+
}
31+
32+
set {
33+
name = "db.credentials.password"
34+
value = "refactorian"
35+
}
36+
37+
# Opciones de sincronización similares a ArgoCD
38+
set {
39+
name = "syncPolicy.automated.prune"
40+
value = "true"
41+
}
42+
43+
set {
44+
name = "syncPolicy.automated.selfHeal"
45+
value = "true"
46+
}
47+
}

gcp/gke-cluster.tf

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# gke-cluster.tf
2+
resource "google_container_cluster" "primary" {
3+
name = "gke-cluster"
4+
location = "us-central1"
5+
6+
initial_node_count = 1
7+
8+
# Desactivar protección de eliminación
9+
deletion_protection = false
10+
11+
node_config {
12+
# Máquina más pequeña y económica.
13+
machine_type = "e2-small"
14+
# Reducir el tamaño del disco a 50 GB en lugar de 100 GB por nodo.
15+
disk_size_gb = 10
16+
disk_type = "pd-standard" # Usar discos estándar en lugar de SSD.
17+
oauth_scopes = [
18+
"https://www.googleapis.com/auth/cloud-platform"
19+
]
20+
metadata = {
21+
disable-legacy-endpoints = "true"
22+
}
23+
}
24+
# Desactiva las funciones avanzadas para ahorrar recursos.
25+
remove_default_node_pool = false
26+
networking_mode = "VPC_NATIVE"
27+
ip_allocation_policy {}
28+
29+
# Habilitar los costos mínimos de operación.
30+
resource_labels = {
31+
environment = "dev"
32+
cost = "low"
33+
}
34+
}

0 commit comments

Comments
 (0)