Skip to content

Commit

Permalink
Update notes
Browse files Browse the repository at this point in the history
  • Loading branch information
EduardoZepeda committed Sep 11, 2024
1 parent 2825aae commit 34064c2
Show file tree
Hide file tree
Showing 6 changed files with 163 additions and 56 deletions.
25 changes: 23 additions & 2 deletions Notes/GitYGithub/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -531,13 +531,34 @@ git stats
## 1.24 Recuperar cambios borrados

El comando git reflog nos permite recuperar todos los cambios hechos en
el repositorio, incluso aquellos que fueron desechos con *git reset
--hard*.
el repositorio, incluso aquellos que fueron desechos con *git reset --hard*.

``` bash
git reflog
```

### ¿Cómo usar git reflog

La manera de usarlo es la siguiente

Utilizamos

``` bash
git reflog show
<hash_1> (HEAD -> main, origin/main, origin/HEAD) HEAD@{0}: commit: <message_1>
<hash_2> HEAD@{1}: commit: <message_2>
```

Ahora podemos volver a cualquier estado del repositorio, incluso si usamos git reset.

Para ello basta con identificar el head al que queremos volver y usarlo con git reset

``` bash
git reset --soft HEAD@{<number>}
```

Esto devolverá el repositorio al estado que tenía en este momento.

## 1.25 Excluir archivos del indice de git

El comando rm seguido de la opción --cached, mantendrá el archivo en el
Expand Down
105 changes: 59 additions & 46 deletions Notes/Kubernetes/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,12 @@ No requieren usar el mismo lenguaje o framework.

Un cluster es una agrupación de máquinas que corren una cierta cantidad de servicios.

Cada cluster corre
Cada cluster corre:

* Docker runtime
* Kubelet agent
* Network proxy

## Nodos

Un nodo es un worker machine, una máquina dentro de un cluster, puede ser una VM o una máquina física, debe contar con todos los servicios para ejecutar los pods.
Expand Down Expand Up @@ -82,7 +83,7 @@ Sin embargo, Kubernetes no realiza un provisionamiento de la infraestructura, so
- Establecer mecanismos para hacer roll-outs de código.
- Políticas de scaling automáticas.
- Jobs batch.
- Correr servicios con datos stateful.
- Correr servicios con datos stateful, es decir con datos permanentes, similares a los volúmenes en docker.

Todos los contenedores que viven dentro de un mismo Pod comparten el mismo
segmento de red.
Expand Down Expand Up @@ -221,7 +222,7 @@ Los objetos más frecuentes son:
> - Volumen
> - Namespace
Los objetos de algo nivel son:
Los objetos de alto nivel son:

> - ReplicationController
> - ReplicaSet
Expand Down Expand Up @@ -503,10 +504,9 @@ Un pod es el más pequeño y más básico objeto que puede ser desplegado en
kubernetes. Representa una instancia de un proceso que corre en el cluster. Un
pod puede contener uno o más contenedores y **se aloja en un nodo**. Cuando un
pod ejecuta múltiples contenedores, los contenedores se manejan como una entidad
única y **comparten el mismo namespace de red (dirección IP) y el
almacenamiento.**.
única y **comparten el mismo namespace de red (dirección IP) y el almacenamiento.**.

Generalmente no se gestionaran los pods de manera individual, sino a través de deployments o replicasets. Pero es posible crear pods sin los dos abstracciones anteriores.
Generalmente no se gestionaran los pods de manera individual, sino a través de deployments o replicasets. Pero es posible crear pods sin las dos abstracciones anteriores.

Cuando se escala un pod en kubernetes se crean nuevas copias del pod, estas
copias son irrecuperables una vez se han eliminado, por lo que los pods son perfectos para elementos stateless.
Expand Down Expand Up @@ -584,7 +584,7 @@ ReplicaController. Además asegura lo siguiente:
- Escalabilidad dinámica
- Que no haya caída del servicio

Los replicaset generalmente dependen de un deployment y no se utilizan de manera aislada.
**Los replicaset generalmente dependen de un deployment y no se utilizan de manera aislada.**

### 1.14.1 Definición de un yml de ReplicaSet

Expand Down Expand Up @@ -692,7 +692,9 @@ spec:
- containerPort: 80
```
El deployment es la entidad de kubernetes con la que se interactuará más frecuentemente. El
### Importancia de los deployments
**El deployment es la entidad de kubernetes con la que se interactuará más frecuentemente**. El
despliegue de un Deployment conlleva la creación de un ReplicaSet y los Pods
correspondientes. Por lo que es necesario definir también el replicaSet
asociado.
Expand Down Expand Up @@ -780,7 +782,7 @@ Se eliminan, siguiendo la misma sintaxis
kubectl delete deployment <deployment>
```

## 1.16 Servicios
## 1.16 Servicios en k8s

Normalmente no podemos acceder a los pods desde fuera del cluster de Kubernetes.

Expand All @@ -806,7 +808,8 @@ Cuando se crea un nuevo servicio, se le asigna una nueva ip interna virtual
a partir de la ip del servidor master del cluster.
- LoadBalancer: Balanceador externo provisionado para cloud providers (GKE,
AKS o AWS). No se puede usar de manera local, excepto con *minikubetunnel*.
- ExternalName: Entrada de DNS que es gestionada por CoreDNS.
Es mejor que el NodePort porque no es necesario conocer su IP de antemano para acceder.
- ExternalName: Entrada de DNS que es gestionada por CoreDNS.

### 1.16.2 Creación de un servicio tipo Cluster IP

Expand Down Expand Up @@ -1097,8 +1100,8 @@ asegurarlo.

## 1.20 Daemon sets y balanceo de cargas

Los daemon sets es una forma de asegurarse de que exista **una copia de un pod
en cada nodo**. Esto es ideal para aplicaciones de monitoreo, como logs, o estadísticas.
Los daemon sets es una forma de asegurarse de que exista **una copia de un pod en cada nodo**.
Esto es ideal para aplicaciones de monitoreo, como logs, o estadísticas.

**Es imposible crear daemon sets desde kubectl**, su CLI, la
única manera es a través de los manifest files.
Expand Down Expand Up @@ -1131,16 +1134,6 @@ rng-5d8b6c4cff-cw955 1/1 Running 1 21h
rng-bn5jj 1/1 Running 0 5m23s
```

Podremos comprobar los endpoints con

```bash
kubectl describe service <service>
Endpoints: 10.244.0.2:80,10.244.0.20:80
```

Cada service tiene los endpoints de los pods que se están ejecutando, de manera
que otros servicios puedan acceder.

## 1.21 Despliegues de nuevas versiones controlados

Al momento de realizar una actualización a una nueva versión, kubernetes se
Expand Down Expand Up @@ -1392,8 +1385,9 @@ core.
### 1.24.3 Limites
Los límites establecen los recursos máximos con los que cuenta un pod. Se
establecen a nivel kernel de Linux, si el pod excede el límite establecido, se
terminará el proceso.
establecen a nivel kernel de Linux.
La diferencia entre requests y limits es que el requests es el mínimo, mientras que limits es el máximo, si excede memoria el kernel de linux lo matará, si es CPU simplemente no podrá superarlo.
```yaml
resources:
Expand Down Expand Up @@ -1569,7 +1563,7 @@ kustomize build .
```


## 1.26 Volúmenes
## 1.26 Volúmenes y Statefulsets

Un volumen nos permite compartir archivos entre diferentes pods o archivos en
nuestro host que persisten incluso tras reinicios.
Expand All @@ -1591,17 +1585,41 @@ información **entre contenedores del mismo pod**.
Podemos automatizar todo el proceso de creación de discos con componentes de
terceros, como digital ocean.

Primero especificamos donde deben montarse los volumenes y su nombre.


``` bash
spec:
template:
spec:
containers:
volumeMounts:
- mountPath: "/data"
name: <name>
```

Para más tarde especificar las características como su storage e incluso el proveedor de cloud, en este caso Digital Ocean.

```bash
volumeClaimTemplates:
- metadata:
name: <nombre>
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: do-block-storage
spec:
volumeClaimTemplates:
- metadata:
name: <nombre>
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: do-block-storage
```

Podemos obtener los statefulsets con:

``` bash
kubectl get statefulsets
# o su abreviacion
kubectl get sts
```

## 1.27 Namespaces
Expand Down Expand Up @@ -1716,7 +1734,7 @@ kubectl config view --raw -o json
"user": {
"client-certificate-data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJYnF5dENYZ..."
}
}
]
}
```
Expand Down Expand Up @@ -2004,14 +2022,9 @@ kubectl get nodes
## 1.33 Recursos útiles
- [Blog de José Domingo sobre pods, deployments, replicaSet y otros
recursos](https://www.josedomingo.org/pledin/blog/)
- [Seguridad del dashboard de k8skubectl apply -f
kubernetes-dashboard.yml](http://link)
- [Implementar
kubernetes-dashboard](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/)
- [Configurar tests
healtcheckhttps://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/](http://link)
- <span class="title-ref">Repositorio de Flux
https://github.com/weaveworks/flux</span>
- [Blog de José Domingo sobre pods, deployments, replicaSet y otros recursos](https://www.josedomingo.org/pledin/blog/)
- [Seguridad del dashboard de k8skubectl apply -f kubernetes-dashboard.yml](http://link)
- [Implementar kubernetes-dashboard](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/)
- [Configurar tests healtcheckhttps://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/](http://link)
- [Repositorio de Flux](https://github.com/weaveworks/flux)
- [Juniper](https://www.juniper.net/documentation/en_US/day-one-books/topics/topic-map/kubernetes-basics.html)
76 changes: 70 additions & 6 deletions Notes/Nextjs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -984,7 +984,7 @@ export default function App({ Component, pageProps: { session, pageProps } }: Ap

```
Si estás usando el nuevo modelo de app route puedes agregar este session provider de la siguiente manera dentro de una carpeta llamada components dentro de app:
Si estás usando el nuevo modelo de app router puedes agregar este session provider de la siguiente manera dentro de una carpeta llamada components dentro de app:
```javascript
// mark as client component
Expand Down Expand Up @@ -1044,9 +1044,9 @@ const options: NextAuthOptions = {
export default NextAuth(options)
```
En caso de que estés usando el nuevo modelo de App Route crea un archivo en *app/api/auth/[…nextauth]/route.ts*. NextAuth recibirá como único parámetro las opciones de autenticación, tal cual las recibe el bloque de código anterior.
En caso de que estés usando el nuevo modelo de App Router crea un archivo en *app/api/auth/[…nextauth]/route.ts*. NextAuth recibirá como único parámetro las opciones de autenticación, tal cual las recibe el bloque de código anterior.
Y los exportamos como GET y POST para que sea compatible con el modelo App Route de Nextjs
Y los exportamos como GET y POST para que sea compatible con el modelo App Router de Nextjs
``` javascript
import NextAuth from "next-auth"
Expand All @@ -1063,6 +1063,64 @@ a los diferentes métodos de autenticación. Hay muchos proveedores de
autenticación que se encuentran disponibles en la [documentación de
NextAuth](https://next-auth.js.org/configuration/providers#oauth-providers)
## El nuevo modelo App Router
Este nuevo modelo cuenta con una serie de cambios, por ejemplo que ahora los components por defecto se ejecutan en el servidor, por lo que si queremos un componente que se ejecute en el cliente debemos agregar el string "use client" al principio su archivo correspondiente.
``` javascript
"use client"
```
Otro cambio es que el componente Head que provee next para la metadata es inservible. En su lugar debemos exportar una variable llamada metadata, la cual se encargará de crear automáticamente las etiquetas, las opciones corresponden a etiquetas definidas, por lo que considera leer la documentación.
``` javascript
import type { Metadata } from "next";

export const metadata = {
title: '',
applicationName: '',
authors: '',
category: '',
openGraph: {
type: '',
publishedTime: '',
section: '',
title: '',
tags: [],
description: '',
},
}
```
### Parallel routes o rutas paralelas
Podemos manejar cada sección de una página de manera individual, de forma que si falla o está cargando podamos mostrar ese estado solo en esa sección
``` bash
@component
loading.ts
error.ts
page.ts
layout.ts
```
Donde loading representa el componente a renderizar si la sección está cargando y error se renderizará si hay un error. Estos componentes se pasarán como si fueran props al componente padre.
``` javascript
// Layout.ts
export default function Layout({component}){return <component>}
```
Por supuesto page tendrá que ser una función asíncrona
``` javascript
//page.ts
export default async Component(){
await fn()
return <Component/>
}
```
## 1.6 Autenticación manual
Provider usa oauth por debajo para manejar la autenticación. Si
Expand Down Expand Up @@ -1516,6 +1574,10 @@ const config = {
}
```
### locales en contentful
Podemos crear traducciones en la sección Content de Contentful.
En contenful podemos crear locales en settings\>locale. El valor de
fallback será el valor por defecto, si no tenemos todas las traducciones
del locale activado, usará este.
Expand All @@ -1527,6 +1589,8 @@ nuestra consulta.
getItemCollection (limit: 10, skip: 100, locale: "es"){}
```
### locales en SSR
La función getStaticProps recibe el parámetro locale que fijamos en
nextjs.config.js, por lo que si queremos especificarlo de acuerdo a la
url
Expand All @@ -1537,9 +1601,7 @@ export const getStaticProps: GetStaticProps<myProps> = async ({ locale }) => {
}
```
Podemos crear traducciones en la sección Content de Contentful.
## 1.6 i18n en páginas dinámicas
## 1.6 i18n en páginas dinámicas en SSG
Para usar i18n en páginas dinámicas necesitamos generar los paths
correspondientes por cada locale existente, junto con sus respectivos
Expand Down Expand Up @@ -1741,6 +1803,8 @@ export function componente(){
* [4.11-Sensitive-data-exposure](<4.11-Sensitive-data-exposure.md>)
* [4.12-Token-firmados-y-encriptados-en-Nextjs](<4.12-Token-firmados-y-encriptados-en-Nextjs.md>)
* [4.13-OWASP](<4.13-OWASP>)
## 1.1 A1: Injection
Es el agregar parte de una consulta para crear instrucciones extras que
Expand Down
7 changes: 6 additions & 1 deletion Notes/Postgres/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -905,5 +905,10 @@ ALTER TABLE <table_name>
DROP CONSTRAINT <nombre_del_constraint>;
```

## FLujo para crear una base de datos con usuario y password cifrado


``` sql
CREATE DATABASE yourdbname;
CREATE USER youruser WITH ENCRYPTED PASSWORD 'yourpass';
GRANT ALL PRIVILEGES ON DATABASE yourdbname TO youruser;
```
3 changes: 2 additions & 1 deletion Notes/ReactQuery/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,8 @@ const queryClient = useQueryClient()
queryClient.setQueryData(["<key>", "<key.property>"], data)
```

Para actualizar múltiples queries se usa el método *setQueriesData*. ## Paginación
Para actualizar múltiples queries se usa el método *setQueriesData*.
## Paginación

Para llevar a cabo la paginación es importante colocar la página dentro de la *queryKey* y usar *keepPreviousData*.

Expand Down
Loading

0 comments on commit 34064c2

Please sign in to comment.