From 3df720e02fb50fecf70b6171238248b208b19b0c Mon Sep 17 00:00:00 2001 From: David Itehua Xalamihua Date: Thu, 28 Aug 2025 14:19:26 -0600 Subject: [PATCH] mod from tamaulipas --- .obsidian/workspace.json | 62 +-- .../Script_sincronizar_obsidian.md | 38 +- DIX-Notes/DIX_Cluster.canvas | 82 +-- DIX-Notes/Distribución servicios en las RP.md | 18 +- .../IP_Estatica_DHCP_Telmex/IP Estática.md | 296 +++++----- .../{Install_n8n.md => Install_n8n_wsl.md} | 458 ++++++++-------- DIX-Notes/Otras_varias/23.03.2025.md | 144 ++--- .../Add User Ubuntu with sudo properties.md | 188 +++---- .../Installr xrdp (Remote Desktop).md | 16 +- .../Otras_varias/SSL red local con HAProxy.md | 196 +++---- DIX-Notes/Otras_varias/Servidor SAMBA.md | 74 +-- .../Visualización carga de trabajo servers.md | 188 +++---- ...r archivos del servidor a google drive..md | 472 ++++++++-------- ...Raspberry Pi as Router Wireguard Client.md | 200 +++---- DIX-Notes/SERVERS - DIX/adjuntos/servers.xlsm | Bin 740021 -> 740263 bytes ...error ip.xala.dev vs dix-ip.duckdns.org.md | 154 +++--- DIX-Notes/n8n en ubuntu server.md | 506 +++++++++--------- DIX-Notes/notas_express.md | 22 - DIX-Notes/trabajar_script_mc_backup.md | 8 +- ELIMINAR/notas_express.md | 0 Sin título.md | 0 21 files changed, 1552 insertions(+), 1570 deletions(-) rename DIX-Notes/{Install_n8n.md => Install_n8n_wsl.md} (93%) delete mode 100644 DIX-Notes/notas_express.md create mode 100644 ELIMINAR/notas_express.md create mode 100644 Sin título.md diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index ab8a99f..6ebb703 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -4,21 +4,21 @@ "type": "split", "children": [ { - "id": "fe53232fa26b8f11", + "id": "689e84465cf5c511", "type": "tabs", "children": [ { - "id": "5ff6ca2da58ba6f5", + "id": "f65aae4ade40d7e9", "type": "leaf", "state": { "type": "markdown", "state": { - "file": "DIX-Notes/script_bash_servers/crontab.md", + "file": "DIX-Notes/Install_n8n_wsl.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "crontab" + "title": "Install_n8n_wsl" } } ] @@ -53,7 +53,7 @@ "state": { "type": "search", "state": { - "query": "pagos", + "query": "sudo apt update", "matchingCase": false, "explainSearch": false, "collapseAll": false, @@ -169,26 +169,38 @@ "command-palette:Abrir paleta de comandos": false } }, - "active": "db862854e8b7e53a", + "active": "f65aae4ade40d7e9", "lastOpenFiles": [ + "DIX-Notes/SERVERS - DIX/adjuntos/B7380100", + "DIX-Notes/script_bash_servers/crontab.md", + "DIX-Notes/n8n en ubuntu server.md", + "DIX-Notes/Install_n8n_wsl.md", + "ELIMINAR/notas_express.md", + "Sin título.md", + "DIX-Notes/SERVERS - DIX/adjuntos/~$servers.xlsm", + "DIX-Notes/bash profile.md", + "DIX-Notes/RCLONE Y DRIVE/Enviar archivos del servidor a google drive..md", + "DIX-Notes/Otras_varias/Visualización carga de trabajo servers.md", + "DIX-Notes/Otras_varias/SSL red local con HAProxy.md", + "DIX-Notes/Otras_varias/Servidor SAMBA.md", + "DIX-Notes/Otras_varias/Installr xrdp (Remote Desktop).md", + "DIX-Notes/Otras_varias/Add User Ubuntu with sudo properties.md", + "DIX-Notes/Otras_varias/23.03.2025.md", + "DIX-Notes/IP_Estatica_DHCP_Telmex/IP Estática.md", + "DIX-Notes/trabajar_script_mc_backup.md", + "DIX-Notes/DDNS RASTREO CON CLOUDFLARE.md", + "DIX-Notes/corregir error ip.xala.dev vs dix-ip.duckdns.org.md", + "DIX-Notes/Bash_functions/Script_sincronizar_obsidian.md", + "DIX-Notes/Distribución servicios en las RP.md", + "DIX-Notes/DIX_Cluster.canvas", + "DIX-Notes/dns arrancar con el sistema.md", + "DIX-Notes/INSTALAR TESSERACT-OCT.md", + "DIX-Notes/Raspberry Pi as Router Wireguard Client.md", "ELIMINAR/FIVE_MUSEO.docx.md", "ELIMINAR/Sin título.md", "ELIMINAR/DOF_LINEAMIENTOS para el ciclo de gestión de los programas y proyectos de inversión, a cargo de las dependencias y entidades de la Administración Pública Federal..md", - "DIX-Notes/Otras_varias/Pagos Jesús.md", "ELIMINAR", - "eliminar.md", - "Agencia_Espacial_Mexicana/Excel-Macros_AEM/Tabla de Excel a Markdown.md", - "DIX-Notes/INSTALAR TESSERACT-OCT.md", - "DIX-Notes/dns arrancar con el sistema.md", - "DIX-Notes/notas_express.md", - "DIX-Notes/bash profile.md", - "Agencia_Espacial_Mexicana/Registro_Proyecto_Cartera_Inversion/1.- Análisis Financiero Sistema Satelital de Telecomunicaciones..md", - "DIX-Notes/DDNS RASTREO CON CLOUDFLARE.md", - "DIX-Notes/Wireguard con obfuscación.md", - "DIX-Notes/script_bash_servers/crontab.md", - "DIX-Notes/SERVERS - DIX/adjuntos/~$servers.xlsm", "DIX-Notes/SERVERS - DIX/adjuntos/C87ED000", - "DIX-Notes/SERVERS - DIX/SERVERS DIX.md", "DIX-Notes/script_bash_servers/scripts_linux/shutdown_weekends.sh", "DIX-Notes/script_bash_servers/scripts_linux/shutdown.sh", "DIX-Notes/script_bash_servers/scripts_linux/cron.log", @@ -196,19 +208,7 @@ "DIX-Notes/script_bash_servers/scripts_linux/history_log.txt", "DIX-Notes/script_bash_servers/scripts_linux", "DIX-Notes/script_bash_servers", - "Agencia_Espacial_Mexicana/notas_express.md", - "Agencia_Espacial_Mexicana/ELIMINAR_NOTAS/3. Museo de las Telecomunicaciones - PPI_.md", - "Agencia_Espacial_Mexicana/DEFINICIONES Y EXPLICACIONES PROYECTOS CARTERA DE INVERSIÓN.md", - "DIX-Notes/Transcribir Videos (WSL).md", - "DIX-Notes/DIX_Cluster.canvas", "Sin título.canvas", - "DIX-Notes/corregir error ip.xala.dev vs dix-ip.duckdns.org.md", - "Agencia_Espacial_Mexicana/Excel-Macros_AEM/Prorrateo.md", - "Agencia_Espacial_Mexicana/Estatuto Orgánico AEM/Estatuto Orgánico AEM.md", - "trabajar_script_mc_backup.md", - "n8n en ubuntu server.md", - "Install_n8n.md", - "bash profile.md", "DIX_Cluster.canvas", "Agencia_Espacial_Mexicana/Cursos_Capacitación/Introducción a la Administración Pública Federal/adjuntos/Pasted image 20250801164816.png", "Agencia_Espacial_Mexicana/Cursos_Capacitación/Introducción a la Administración Pública Federal/adjuntos/Pasted image 20250801164759.png", diff --git a/DIX-Notes/Bash_functions/Script_sincronizar_obsidian.md b/DIX-Notes/Bash_functions/Script_sincronizar_obsidian.md index fa28a37..7495b4f 100644 --- a/DIX-Notes/Bash_functions/Script_sincronizar_obsidian.md +++ b/DIX-Notes/Bash_functions/Script_sincronizar_obsidian.md @@ -1,20 +1,20 @@ - -```bash -obsidian_notes_sync() { - # Sincronizar notas de Obsidian en Google Drive con rclone - - fecha=$(date +"D%d-%m-%Y-T%H-%M") - file_name="dix-notes-$fecha" - origen="/mnt/c/Users/davic/desktop/dix_notes" - destino="obsidian_personal_dix:/obsidian/$file_name" - - rclone copy "$origen" "$destino" -P -v - - if [ $? -eq 0 ]; then - echo "✅ Sincronización completada correctamente." - else - echo "❌ Error durante la sincronización." - fi -} - + +```bash +obsidian_notes_sync() { + # Sincronizar notas de Obsidian en Google Drive con rclone + + fecha=$(date +"D%d-%m-%Y-T%H-%M") + file_name="dix-notes-$fecha" + origen="/mnt/c/Users/davic/desktop/dix_notes" + destino="obsidian_personal_dix:/obsidian/$file_name" + + rclone copy "$origen" "$destino" -P -v + + if [ $? -eq 0 ]; then + echo "✅ Sincronización completada correctamente." + else + echo "❌ Error durante la sincronización." + fi +} + ``` \ No newline at end of file diff --git a/DIX-Notes/DIX_Cluster.canvas b/DIX-Notes/DIX_Cluster.canvas index 8a9650f..a011dfa 100644 --- a/DIX-Notes/DIX_Cluster.canvas +++ b/DIX-Notes/DIX_Cluster.canvas @@ -1,42 +1,42 @@ -{ - "nodes":[ - {"id":"84eea27a1ba629c8","x":-134,"y":-349,"width":250,"height":60,"type":"text","text":""}, - {"id":"0196141ff4288b26","type":"text","text":"Web Server 1\n- NOT WORKING","x":-940,"y":-100,"width":300,"height":120,"color":"4"}, - {"id":"21f14a45f938153b","type":"text","text":"Web Server 2\n- tacrecruitment","x":-560,"y":-100,"width":275,"height":160,"color":"4"}, - {"id":"1cbfc86bc270e4b7","type":"text","text":"Web Server 3\n- tacrecruitment","x":-160,"y":-100,"width":300,"height":160,"color":"4"}, - {"id":"9031059888e87fd2","type":"text","text":"Web Server 4\n- tacrecruitment","x":220,"y":-100,"width":300,"height":160,"color":"4"}, - {"id":"6b94f426bec0518d","type":"text","text":"Web Server 5\n- NOT WORKING","x":600,"y":-100,"width":290,"height":160,"color":"4"}, - {"id":"aa754eec2e32009a","type":"text","text":"DB Server","x":-410,"y":220,"width":250,"height":60,"color":"6"}, - {"id":"f848b43274fcb59b","type":"text","text":"Load Balancer\n- ntfy: 8080\n- uk: 3001\n- gitea: 3000","x":-410,"y":-500,"width":250,"height":180,"color":"1"}, - {"id":"3e79a9f2644708b5","type":"text","text":"Git Server\n- dnsmasq\n- haproxy","x":60,"y":-500,"width":250,"height":180,"color":"2"}, - {"id":"eb5c7fcba435d5b3","type":"text","text":"Metabase Server","x":60,"y":220,"width":250,"height":60,"color":"5"}, - {"id":"00e0a1844c5114ee","type":"text","text":"Web Server 6\n- Minecraft","x":980,"y":-100,"width":250,"height":120}, - {"id":"5f334013938f0378","type":"text","text":"Router / VPN","x":-160,"y":-820,"width":250,"height":60} - ], - "edges":[ - {"id":"65decefa61be0132","fromNode":"f848b43274fcb59b","fromSide":"bottom","toNode":"0196141ff4288b26","toSide":"top"}, - {"id":"c821c7786b13de56","fromNode":"f848b43274fcb59b","fromSide":"bottom","toNode":"21f14a45f938153b","toSide":"top"}, - {"id":"bbdfbe93eca7f66e","fromNode":"f848b43274fcb59b","fromSide":"bottom","toNode":"1cbfc86bc270e4b7","toSide":"top"}, - {"id":"c1c443e22eb76535","fromNode":"f848b43274fcb59b","fromSide":"bottom","toNode":"9031059888e87fd2","toSide":"top"}, - {"id":"da2fc4f2409d4434","fromNode":"f848b43274fcb59b","fromSide":"bottom","toNode":"6b94f426bec0518d","toSide":"top"}, - {"id":"3514ce6bf3a91d92","fromNode":"3e79a9f2644708b5","fromSide":"bottom","toNode":"0196141ff4288b26","toSide":"top"}, - {"id":"6c8f88c449b3dfb0","fromNode":"3e79a9f2644708b5","fromSide":"bottom","toNode":"21f14a45f938153b","toSide":"top"}, - {"id":"8f098e34313079db","fromNode":"3e79a9f2644708b5","fromSide":"bottom","toNode":"1cbfc86bc270e4b7","toSide":"top"}, - {"id":"3688e3ecf3d65c2e","fromNode":"3e79a9f2644708b5","fromSide":"bottom","toNode":"9031059888e87fd2","toSide":"top"}, - {"id":"e755c1693a630d84","fromNode":"3e79a9f2644708b5","fromSide":"bottom","toNode":"6b94f426bec0518d","toSide":"top"}, - {"id":"6d605db470858423","fromNode":"0196141ff4288b26","fromSide":"bottom","toNode":"aa754eec2e32009a","toSide":"top"}, - {"id":"19bc3af06c0ee01e","fromNode":"21f14a45f938153b","fromSide":"bottom","toNode":"aa754eec2e32009a","toSide":"top"}, - {"id":"212566b2a3648a29","fromNode":"1cbfc86bc270e4b7","fromSide":"bottom","toNode":"aa754eec2e32009a","toSide":"top"}, - {"id":"84408076278e5fd7","fromNode":"9031059888e87fd2","fromSide":"bottom","toNode":"aa754eec2e32009a","toSide":"top"}, - {"id":"f5bd632c66dd0a12","fromNode":"6b94f426bec0518d","fromSide":"bottom","toNode":"aa754eec2e32009a","toSide":"top"}, - {"id":"3c991428822f7b13","fromNode":"aa754eec2e32009a","fromSide":"right","toNode":"eb5c7fcba435d5b3","toSide":"left"}, - {"id":"ec8c3cac6f8bafe4","fromNode":"eb5c7fcba435d5b3","fromSide":"top","toNode":"0196141ff4288b26","toSide":"bottom"}, - {"id":"22f6b8593f8efeb2","fromNode":"eb5c7fcba435d5b3","fromSide":"top","toNode":"21f14a45f938153b","toSide":"bottom"}, - {"id":"23e09f848ef4230b","fromNode":"eb5c7fcba435d5b3","fromSide":"top","toNode":"1cbfc86bc270e4b7","toSide":"bottom"}, - {"id":"a1067b326a889f90","fromNode":"eb5c7fcba435d5b3","fromSide":"top","toNode":"9031059888e87fd2","toSide":"bottom"}, - {"id":"2fa114fbbdbdd63a","fromNode":"eb5c7fcba435d5b3","fromSide":"top","toNode":"6b94f426bec0518d","toSide":"bottom"}, - {"id":"29808fd2d4d62166","fromNode":"00e0a1844c5114ee","fromSide":"top","toNode":"3e79a9f2644708b5","toSide":"bottom"}, - {"id":"3031b8c0b36366a7","fromNode":"f848b43274fcb59b","fromSide":"right","toNode":"3e79a9f2644708b5","toSide":"left"}, - {"id":"d313ffd8360f70fc","fromNode":"5f334013938f0378","fromSide":"bottom","toNode":"f848b43274fcb59b","toSide":"top"} - ] +{ + "nodes":[ + {"id":"84eea27a1ba629c8","x":-134,"y":-349,"width":250,"height":60,"type":"text","text":""}, + {"id":"0196141ff4288b26","type":"text","text":"Web Server 1\n- NOT WORKING","x":-940,"y":-100,"width":300,"height":120,"color":"4"}, + {"id":"21f14a45f938153b","type":"text","text":"Web Server 2\n- tacrecruitment","x":-560,"y":-100,"width":275,"height":160,"color":"4"}, + {"id":"1cbfc86bc270e4b7","type":"text","text":"Web Server 3\n- tacrecruitment","x":-160,"y":-100,"width":300,"height":160,"color":"4"}, + {"id":"9031059888e87fd2","type":"text","text":"Web Server 4\n- tacrecruitment","x":220,"y":-100,"width":300,"height":160,"color":"4"}, + {"id":"6b94f426bec0518d","type":"text","text":"Web Server 5\n- NOT WORKING","x":600,"y":-100,"width":290,"height":160,"color":"4"}, + {"id":"aa754eec2e32009a","type":"text","text":"DB Server","x":-410,"y":220,"width":250,"height":60,"color":"6"}, + {"id":"f848b43274fcb59b","type":"text","text":"Load Balancer\n- ntfy: 8080\n- uk: 3001\n- gitea: 3000","x":-410,"y":-500,"width":250,"height":180,"color":"1"}, + {"id":"3e79a9f2644708b5","type":"text","text":"Git Server\n- dnsmasq\n- haproxy","x":60,"y":-500,"width":250,"height":180,"color":"2"}, + {"id":"eb5c7fcba435d5b3","type":"text","text":"Metabase Server","x":60,"y":220,"width":250,"height":60,"color":"5"}, + {"id":"00e0a1844c5114ee","type":"text","text":"Web Server 6\n- Minecraft","x":980,"y":-100,"width":250,"height":120}, + {"id":"5f334013938f0378","type":"text","text":"Router / VPN","x":-160,"y":-820,"width":250,"height":60} + ], + "edges":[ + {"id":"65decefa61be0132","fromNode":"f848b43274fcb59b","fromSide":"bottom","toNode":"0196141ff4288b26","toSide":"top"}, + {"id":"c821c7786b13de56","fromNode":"f848b43274fcb59b","fromSide":"bottom","toNode":"21f14a45f938153b","toSide":"top"}, + {"id":"bbdfbe93eca7f66e","fromNode":"f848b43274fcb59b","fromSide":"bottom","toNode":"1cbfc86bc270e4b7","toSide":"top"}, + {"id":"c1c443e22eb76535","fromNode":"f848b43274fcb59b","fromSide":"bottom","toNode":"9031059888e87fd2","toSide":"top"}, + {"id":"da2fc4f2409d4434","fromNode":"f848b43274fcb59b","fromSide":"bottom","toNode":"6b94f426bec0518d","toSide":"top"}, + {"id":"3514ce6bf3a91d92","fromNode":"3e79a9f2644708b5","fromSide":"bottom","toNode":"0196141ff4288b26","toSide":"top"}, + {"id":"6c8f88c449b3dfb0","fromNode":"3e79a9f2644708b5","fromSide":"bottom","toNode":"21f14a45f938153b","toSide":"top"}, + {"id":"8f098e34313079db","fromNode":"3e79a9f2644708b5","fromSide":"bottom","toNode":"1cbfc86bc270e4b7","toSide":"top"}, + {"id":"3688e3ecf3d65c2e","fromNode":"3e79a9f2644708b5","fromSide":"bottom","toNode":"9031059888e87fd2","toSide":"top"}, + {"id":"e755c1693a630d84","fromNode":"3e79a9f2644708b5","fromSide":"bottom","toNode":"6b94f426bec0518d","toSide":"top"}, + {"id":"6d605db470858423","fromNode":"0196141ff4288b26","fromSide":"bottom","toNode":"aa754eec2e32009a","toSide":"top"}, + {"id":"19bc3af06c0ee01e","fromNode":"21f14a45f938153b","fromSide":"bottom","toNode":"aa754eec2e32009a","toSide":"top"}, + {"id":"212566b2a3648a29","fromNode":"1cbfc86bc270e4b7","fromSide":"bottom","toNode":"aa754eec2e32009a","toSide":"top"}, + {"id":"84408076278e5fd7","fromNode":"9031059888e87fd2","fromSide":"bottom","toNode":"aa754eec2e32009a","toSide":"top"}, + {"id":"f5bd632c66dd0a12","fromNode":"6b94f426bec0518d","fromSide":"bottom","toNode":"aa754eec2e32009a","toSide":"top"}, + {"id":"3c991428822f7b13","fromNode":"aa754eec2e32009a","fromSide":"right","toNode":"eb5c7fcba435d5b3","toSide":"left"}, + {"id":"ec8c3cac6f8bafe4","fromNode":"eb5c7fcba435d5b3","fromSide":"top","toNode":"0196141ff4288b26","toSide":"bottom"}, + {"id":"22f6b8593f8efeb2","fromNode":"eb5c7fcba435d5b3","fromSide":"top","toNode":"21f14a45f938153b","toSide":"bottom"}, + {"id":"23e09f848ef4230b","fromNode":"eb5c7fcba435d5b3","fromSide":"top","toNode":"1cbfc86bc270e4b7","toSide":"bottom"}, + {"id":"a1067b326a889f90","fromNode":"eb5c7fcba435d5b3","fromSide":"top","toNode":"9031059888e87fd2","toSide":"bottom"}, + {"id":"2fa114fbbdbdd63a","fromNode":"eb5c7fcba435d5b3","fromSide":"top","toNode":"6b94f426bec0518d","toSide":"bottom"}, + {"id":"29808fd2d4d62166","fromNode":"00e0a1844c5114ee","fromSide":"top","toNode":"3e79a9f2644708b5","toSide":"bottom"}, + {"id":"3031b8c0b36366a7","fromNode":"f848b43274fcb59b","fromSide":"right","toNode":"3e79a9f2644708b5","toSide":"left"}, + {"id":"d313ffd8360f70fc","fromNode":"5f334013938f0378","fromSide":"bottom","toNode":"f848b43274fcb59b","toSide":"top"} + ] } \ No newline at end of file diff --git a/DIX-Notes/Distribución servicios en las RP.md b/DIX-Notes/Distribución servicios en las RP.md index 25928e8..62c3674 100644 --- a/DIX-Notes/Distribución servicios en las RP.md +++ b/DIX-Notes/Distribución servicios en las RP.md @@ -1,9 +1,9 @@ -uk: -- ntfy (no ervice):8080 -- uptimekuma (no service):3001 -- gitea:3000 - -lb: -- dnsmasq -- haproxy - +uk: +- ntfy (no ervice):8080 +- uptimekuma (no service):3001 +- gitea:3000 + +lb: +- dnsmasq +- haproxy + diff --git a/DIX-Notes/IP_Estatica_DHCP_Telmex/IP Estática.md b/DIX-Notes/IP_Estatica_DHCP_Telmex/IP Estática.md index a6ac054..8754734 100644 --- a/DIX-Notes/IP_Estatica_DHCP_Telmex/IP Estática.md +++ b/DIX-Notes/IP_Estatica_DHCP_Telmex/IP Estática.md @@ -1,148 +1,148 @@ -En el navegador web ir a http://192.168.1.254/ - -**Red** > **Red Doméstica** > **Estática DHCP Entrada** -Pegar la dirección MAC y la IP a asignar - - - - - -Ejemplo: -Dirección MAC: 80:af:ca:76:e3:de -Dirección IP: 192.168.1.71 - -La IP y la Dirección MAC del dispositivo la puedes ver en: - -**Estado** > **Dispositivos Conectados** - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CategoriaValores
ActivarTrue
ProtocoloServidor Wireguard
Acceso de clienteInternet y Red Local
Host de punto final192.168.1.64
Puerto de escucha51820
Dirección IP10.10.10.1
MTU1420
- -VPN: -van_laptop -dix_laptop -dix_tablet -dix_work_pc -yarelis_cub_cell - - -Puertos: - - - - - - - - - - - - - - - - - - - - - - - - - -
NombreProtocoloInterfazPuerto externoDirección IP internaPuerto interno
lbTCPWAN80192.168.10.23480
giteaTCPWAN3000192.168.10.2343000
- - -TELMEX Port Forwarding - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Nombre de la AplicaciónPuerto WANPuerto LANNombre del DispositivoCliente InternoProtocoloDescripción
Configuración de Usuario51820~5182051820~51820WR3000192.168.1.64UDPvpn
Configuración de Usuario80~8080~80WR3000192.168.1.64TCPweb
Configuración de Usuario3000~30003000~3000WR3000192.168.1.64TCPgitea server
- - - -En cudy el activador de puerto vpn hago esto: -Nombre: VPN -Protocolo de activación: TCP+UDP -Puerto de Activación: 51820 -Protocolo Externo: - -VPN Clientes: - - -| IP Cliente | Usuario | -| ---------- | --------------- | -| 10.10.10.2 | dix-lenovo | -| 10.10.10.3 | router_zandunga | - - - +En el navegador web ir a http://192.168.1.254/ + +**Red** > **Red Doméstica** > **Estática DHCP Entrada** +Pegar la dirección MAC y la IP a asignar + + + + + +Ejemplo: +Dirección MAC: 80:af:ca:76:e3:de +Dirección IP: 192.168.1.71 + +La IP y la Dirección MAC del dispositivo la puedes ver en: + +**Estado** > **Dispositivos Conectados** + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CategoriaValores
ActivarTrue
ProtocoloServidor Wireguard
Acceso de clienteInternet y Red Local
Host de punto final192.168.1.64
Puerto de escucha51820
Dirección IP10.10.10.1
MTU1420
+ +VPN: +van_laptop +dix_laptop +dix_tablet +dix_work_pc +yarelis_cub_cell + + +Puertos: + + + + + + + + + + + + + + + + + + + + + + + + + +
NombreProtocoloInterfazPuerto externoDirección IP internaPuerto interno
lbTCPWAN80192.168.10.23480
giteaTCPWAN3000192.168.10.2343000
+ + +TELMEX Port Forwarding + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Nombre de la AplicaciónPuerto WANPuerto LANNombre del DispositivoCliente InternoProtocoloDescripción
Configuración de Usuario51820~5182051820~51820WR3000192.168.1.64UDPvpn
Configuración de Usuario80~8080~80WR3000192.168.1.64TCPweb
Configuración de Usuario3000~30003000~3000WR3000192.168.1.64TCPgitea server
+ + + +En cudy el activador de puerto vpn hago esto: +Nombre: VPN +Protocolo de activación: TCP+UDP +Puerto de Activación: 51820 +Protocolo Externo: + +VPN Clientes: + + +| IP Cliente | Usuario | +| ---------- | --------------- | +| 10.10.10.2 | dix-lenovo | +| 10.10.10.3 | router_zandunga | + + + diff --git a/DIX-Notes/Install_n8n.md b/DIX-Notes/Install_n8n_wsl.md similarity index 93% rename from DIX-Notes/Install_n8n.md rename to DIX-Notes/Install_n8n_wsl.md index e5567b2..e05153e 100644 --- a/DIX-Notes/Install_n8n.md +++ b/DIX-Notes/Install_n8n_wsl.md @@ -1,227 +1,231 @@ -¡Claro, David! Aquí tienes una guía clara para instalar **n8n** en **WSL (Windows Subsystem for Linux)**. Usaremos Node.js (v18 LTS o superior) y npm para instalarlo directamente. - ---- - -### ✅ **Requisitos previos** - -Asegúrate de tener lo siguiente: - -1. **WSL** ya instalado (preferentemente Ubuntu). - -2. **Node.js** (v18 o superior). - -3. **npm** (gestor de paquetes de Node.js). - - ---- - -### 🔧 **Pasos para instalar n8n en WSL** - -#### 1. Actualiza tu sistema - -```bash -sudo apt update && sudo apt upgrade -y -``` - -#### 2. Instala Node.js (vía nvm recomendado) - -```bash -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash -source ~/.bashrc -nvm install --lts -nvm use --lts -``` - -==Para ubuntu server la instalación de Node.js== -```bash -curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - -sudo apt install -y nodejs -``` - - -Verifica que estén bien instalados: - -```bash -node -v -npm -v -``` - -#### 3. Instala n8n globalmente - -```bash -npm install -g n8n -``` - -Esto instalará el CLI de n8n de forma global. - -#### 4. Ejecuta n8n - -```bash -n8n -``` - -Verás un mensaje como: - -``` -n8n ready on 127.0.0.1, port 5678 -``` - -Desde Windows, abre tu navegador y ve a: -📍 `http://localhost:5678` - ---- - -### 🛡️ Opcional: Configurar credenciales y seguridad - -Por defecto, n8n se instala sin autenticación. Para producción o pruebas seguras, puedes establecer una contraseña así: - -```bash -export N8N_BASIC_AUTH_ACTIVE=true -export N8N_BASIC_AUTH_USER=admin -export N8N_BASIC_AUTH_PASSWORD=mi_contraseña_segura -n8n -``` - ---- - -### 🛠️ ¿Quieres levantarlo en segundo plano? - -Puedes usar `tmux`, `screen` o `pm2`: - -Ejemplo con `pm2`: - -```bash -npm install -g pm2 -pm2 start n8n -pm2 startup -pm2 save -``` - ---- - -¿Quieres que n8n arranque automáticamente al iniciar WSL o levantarlo con Docker también? Puedo ayudarte con eso también si gustas. - - -# ejecutar en segundo plano n8n en wsl: - -Sí, el enfoque que muestras con `systemd` para levantar un servidor de Minecraft **es perfectamente replicable** para **n8n**, con unas pequeñas adaptaciones. - -### 🚫 PERO HAY UN DETALLE IMPORTANTE: - -WSL **no soporta `systemd` por defecto** en versiones antiguas. Sin embargo, **WSL2 en Windows 11** ya permite activarlo. - ---- - -## ✅ OPCIÓN A: Si tienes WSL2 con systemd habilitado - -### 1. Verifica que `systemd` esté habilitado - -En `/etc/wsl.conf`, debe decir: - -```ini -[boot] -systemd=true -``` - -Luego reinicia WSL: - -```bash -wsl --shutdown -``` - ---- - -### 2. Crear servicio systemd para n8n - -```bash -sudo nano /etc/systemd/system/n8n.service -``` - -Contenido del archivo (ajusta tu nombre de usuario y la ruta si es necesario): - -```ini -[Unit] -Description=n8n workflow automation -After=network.target - -[Service] -User=web # <- tu usuario de WSL -Environment=PATH=/home/web/.nvm/versions/node/v18.XX.X/bin:/usr/bin:/bin -Environment=NODE_ENV=production -WorkingDirectory=/home/web -ExecStart=/home/web/.nvm/versions/node/v18.XX.X/bin/n8n -Restart=on-failure - -[Install] -WantedBy=default.target -``` - -📌 Reemplaza `v18.XX.X` con la versión exacta que tienes (`node -v` y `which n8n` te ayudan a saberlo). - ---- - -==Para ubuntu server== -```bash -ExecStart=/usr/bin/n8n -``` -### 3. Habilita y levanta el servicio - -```bash -sudo systemctl daemon-reload -sudo systemctl enable n8n -sudo systemctl start n8n -``` - -Verifica que esté funcionando: - -```bash -systemctl status n8n -``` - - -==Para ubuntu server== - -Para que puedas acceder a `n8n` desde otro equipo (navegador o API): - -- Asegúrate de configurar el host: -```bash -export N8N_HOST=0.0.0.0 -``` - -- O en el archivo de servicio: -```bash -Environment=N8N_HOST=0.0.0.0 -``` - -- Y abre el puerto 5678: - -```bash -sudo ufw allow 5678/tcp -``` - ---- - -## 🟡 OPCIÓN B: Si NO tienes systemd activado (por ejemplo en Windows 10 o WSL1) - -Usa mejor **PM2** para ejecutar en segundo plano: - -```bash -npm install -g pm2 -pm2 start n8n -pm2 startup -pm2 save -``` - -Con eso n8n se ejecutará como demonio cada vez que abras WSL. - ---- - -## 🔄 ¿Cómo reiniciar n8n con systemd? - -```bash -sudo systemctl restart n8n -``` - -¿Quieres que también tenga autenticación, log de errores o conecte a PostgreSQL? Puedo ayudarte a extender el servicio según tus necesidades. - -¿Te gustaría saber cómo revisar logs o cómo incluir variables de entorno como el webhook URL base? +¡Claro, David! Aquí tienes una guía clara para instalar **n8n** en **WSL (Windows Subsystem for Linux)**. Usaremos Node.js (v18 LTS o superior) y npm para instalarlo directamente. + +--- + +### ✅ **Requisitos previos** + +Asegúrate de tener lo siguiente: + +1. **WSL** ya instalado (preferentemente Ubuntu). + +2. **Node.js** (v18 o superior). + +3. **npm** (gestor de paquetes de Node.js). + + +--- + +### 🔧 **Pasos para instalar n8n en WSL** + +#### 1. Actualiza tu sistema + +```bash +sudo apt update && sudo apt upgrade -y +``` + +#### 2. Instala Node.js (vía nvm recomendado) + +```bash +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash +source ~/.bashrc +nvm install --lts +nvm use --lts +``` + +==Para ubuntu server la instalación de Node.js== +```bash +curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - +sudo apt install -y nodejs +``` + + +Verifica que estén bien instalados: + +```bash +node -v +npm -v +``` + +#### 3. Instala n8n globalmente + +```bash +#sudo npm install -g n8n +mkdir ~/.npm-global +npm config set prefix '~/.npm-global' +export PATH=$PATH:~/.npm-global/bin + +``` + +Esto instalará el CLI de n8n de forma global. + +#### 4. Ejecuta n8n + +```bash +n8n +``` + +Verás un mensaje como: + +``` +n8n ready on 127.0.0.1, port 5678 +``` + +Desde Windows, abre tu navegador y ve a: +📍 `http://localhost:5678` + +--- + +### 🛡️ Opcional: Configurar credenciales y seguridad + +Por defecto, n8n se instala sin autenticación. Para producción o pruebas seguras, puedes establecer una contraseña así: + +```bash +export N8N_BASIC_AUTH_ACTIVE=true +export N8N_BASIC_AUTH_USER=admin +export N8N_BASIC_AUTH_PASSWORD=mi_contraseña_segura +n8n +``` + +--- + +### 🛠️ ¿Quieres levantarlo en segundo plano? + +Puedes usar `tmux`, `screen` o `pm2`: + +Ejemplo con `pm2`: + +```bash +npm install -g pm2 +pm2 start n8n +pm2 startup +pm2 save +``` + +--- + +¿Quieres que n8n arranque automáticamente al iniciar WSL o levantarlo con Docker también? Puedo ayudarte con eso también si gustas. + + +# ejecutar en segundo plano n8n en wsl: + +Sí, el enfoque que muestras con `systemd` para levantar un servidor de Minecraft **es perfectamente replicable** para **n8n**, con unas pequeñas adaptaciones. + +### 🚫 PERO HAY UN DETALLE IMPORTANTE: + +WSL **no soporta `systemd` por defecto** en versiones antiguas. Sin embargo, **WSL2 en Windows 11** ya permite activarlo. + +--- + +## ✅ OPCIÓN A: Si tienes WSL2 con systemd habilitado + +### 1. Verifica que `systemd` esté habilitado + +En `/etc/wsl.conf`, debe decir: + +```ini +[boot] +systemd=true +``` + +Luego reinicia WSL: + +```bash +wsl --shutdown +``` + +--- + +### 2. Crear servicio systemd para n8n + +```bash +sudo nano /etc/systemd/system/n8n.service +``` + +Contenido del archivo (ajusta tu nombre de usuario y la ruta si es necesario): + +```ini +[Unit] +Description=n8n workflow automation +After=network.target + +[Service] +User=web # <- tu usuario de WSL +Environment=PATH=/home/web/.nvm/versions/node/v18.XX.X/bin:/usr/bin:/bin +Environment=NODE_ENV=production +WorkingDirectory=/home/web +ExecStart=/home/web/.nvm/versions/node/v18.XX.X/bin/n8n +Restart=on-failure + +[Install] +WantedBy=default.target +``` + +📌 Reemplaza `v18.XX.X` con la versión exacta que tienes (`node -v` y `which n8n` te ayudan a saberlo). + +--- + +==Para ubuntu server== +```bash +ExecStart=/usr/bin/n8n +``` +### 3. Habilita y levanta el servicio + +```bash +sudo systemctl daemon-reload +sudo systemctl enable n8n +sudo systemctl start n8n +``` + +Verifica que esté funcionando: + +```bash +systemctl status n8n +``` + + +==Para ubuntu server== + +Para que puedas acceder a `n8n` desde otro equipo (navegador o API): + +- Asegúrate de configurar el host: +```bash +export N8N_HOST=0.0.0.0 +``` + +- O en el archivo de servicio: +```bash +Environment=N8N_HOST=0.0.0.0 +``` + +- Y abre el puerto 5678: + +```bash +sudo ufw allow 5678/tcp +``` + +--- + +## 🟡 OPCIÓN B: Si NO tienes systemd activado (por ejemplo en Windows 10 o WSL1) + +Usa mejor **PM2** para ejecutar en segundo plano: + +```bash +npm install -g pm2 +pm2 start n8n +pm2 startup +pm2 save +``` + +Con eso n8n se ejecutará como demonio cada vez que abras WSL. + +--- + +## 🔄 ¿Cómo reiniciar n8n con systemd? + +```bash +sudo systemctl restart n8n +``` + +¿Quieres que también tenga autenticación, log de errores o conecte a PostgreSQL? Puedo ayudarte a extender el servicio según tus necesidades. + +¿Te gustaría saber cómo revisar logs o cómo incluir variables de entorno como el webhook URL base? diff --git a/DIX-Notes/Otras_varias/23.03.2025.md b/DIX-Notes/Otras_varias/23.03.2025.md index e342b07..0bb66e7 100644 --- a/DIX-Notes/Otras_varias/23.03.2025.md +++ b/DIX-Notes/Otras_varias/23.03.2025.md @@ -1,72 +1,72 @@ -# Soluciones -Modal - - -# Navbar -- [x] Cambiar tipo de letra (Calibri ó Aptos) -- [x] Cambiar el tamaño de fuente -- [ ] Cambiar el estilo de Contacto -- [x] Footer y Navbar hacer letra más grande -https://www.buk.mx/ - -trabajar en sección de - -- Publicaciones: -- [ ] Añadir -- [ ] Modificar -- [ ] Eliminar - -- Administrador -- [ ] Crear usuario -- [ ] Eliminar usuario - -https://codepen.io/david-felipe-huertas/pen/PoNqJgM - -uw | main -80 x 90 - -Soluciones - -65 - 70 Letra más grande -- checar relación imagen - -QR que mande a la página web - -![[Pasted image 20250401111621.png]] - - -Readme file forma - -# Modificaciones en producción - -1. Debes de asegurar que el sitio tenga https. -2. Cambiar la configuración en el archivo main.py: - 1. - 2. response.set_cookie('access_token_cookie', access_token, httponly=True, **secure=True**, samesite='Lax') - - -soluciones > fondo blanco. - -Letra Open-Sans - -gradient - -pinkelephant-latam.com -https://pinkelephant-latam.com/ - -### Montserrat, Source Sans Pro, sans-serif - --> Gráficas de algo - - - - - -- logo vueltas en navbar -- logo en horizontal. -- ojo en contraseña -- re checar arroba - - - - +# Soluciones +Modal + + +# Navbar +- [x] Cambiar tipo de letra (Calibri ó Aptos) +- [x] Cambiar el tamaño de fuente +- [ ] Cambiar el estilo de Contacto +- [x] Footer y Navbar hacer letra más grande +https://www.buk.mx/ + +trabajar en sección de + +- Publicaciones: +- [ ] Añadir +- [ ] Modificar +- [ ] Eliminar + +- Administrador +- [ ] Crear usuario +- [ ] Eliminar usuario + +https://codepen.io/david-felipe-huertas/pen/PoNqJgM + +uw | main +80 x 90 + +Soluciones + +65 - 70 Letra más grande +- checar relación imagen + +QR que mande a la página web + +![[Pasted image 20250401111621.png]] + + +Readme file forma + +# Modificaciones en producción + +1. Debes de asegurar que el sitio tenga https. +2. Cambiar la configuración en el archivo main.py: + 1. + 2. response.set_cookie('access_token_cookie', access_token, httponly=True, **secure=True**, samesite='Lax') + + +soluciones > fondo blanco. + +Letra Open-Sans + +gradient + +pinkelephant-latam.com +https://pinkelephant-latam.com/ + +### Montserrat, Source Sans Pro, sans-serif + +-> Gráficas de algo + + + + + +- logo vueltas en navbar +- logo en horizontal. +- ojo en contraseña +- re checar arroba + + + + diff --git a/DIX-Notes/Otras_varias/Add User Ubuntu with sudo properties.md b/DIX-Notes/Otras_varias/Add User Ubuntu with sudo properties.md index 8281274..18342cc 100644 --- a/DIX-Notes/Otras_varias/Add User Ubuntu with sudo properties.md +++ b/DIX-Notes/Otras_varias/Add User Ubuntu with sudo properties.md @@ -1,95 +1,95 @@ -En **Ubuntu Server**, puedes crear un nuevo usuario con privilegios de administrador siguiendo estos pasos: - -### 📌 1. Crear el usuario - -Ejecuta el siguiente comando, reemplazando `nuevo_usuario` con el nombre que quieras: - -```bash -sudo adduser nuevo_usuario -``` - -Te pedirá que configures una contraseña y opcionalmente algunos datos adicionales. - ---- - -### 📌 2. Otorgarle permisos de administrador (sudo) - -Agrega el usuario al grupo `sudo`: - -```bash -sudo usermod -aG sudo nuevo_usuario -``` - -Esto le permite ejecutar comandos administrativos con `sudo`. - ---- - -### 📌 3. Verificar que tiene privilegios - -Inicia sesión con el nuevo usuario: - -```bash -su - nuevo_usuario -``` - -Luego, prueba ejecutar un comando con permisos de administrador: - -```bash -sudo whoami -``` - -Si devuelve **"root"**, el usuario tiene permisos de administrador correctamente. 🚀 - -# Eliminar usuario - -Para eliminar un usuario en **Ubuntu (o cualquier Linux basado en Debian)**, puedes usar el comando `deluser` o `userdel`. - ---- - -### ✅ **1. Eliminar el usuario pero conservar su carpeta personal** - -```bash -sudo deluser usuario -``` - -Esto **elimina al usuario** pero deja su **directorio `/home/usuario/`** intacto. - ---- - -### ✅ **2. Eliminar el usuario y su carpeta personal** - -```bash -sudo deluser --remove-home usuario -``` - -Esto **elimina al usuario** y también **su directorio `/home/usuario/`**. - ---- - -### ✅ **3. Forzar eliminación con `userdel` (método alternativo)** - -Si `deluser` no está disponible, usa: - -```bash -sudo userdel -r usuario -``` - -🔹 **`-r`** → Elimina la carpeta `/home/usuario/`. - -⚠️ **Cuidado:** Esto borra todos los archivos del usuario. - ---- - -### ✅ **4. Verificar que el usuario fue eliminado** - -Después de eliminarlo, verifica que ya no exista: - -```bash -cat /etc/passwd | grep usuario -``` - -Si no muestra nada, significa que fue eliminado correctamente. - ---- - +En **Ubuntu Server**, puedes crear un nuevo usuario con privilegios de administrador siguiendo estos pasos: + +### 📌 1. Crear el usuario + +Ejecuta el siguiente comando, reemplazando `nuevo_usuario` con el nombre que quieras: + +```bash +sudo adduser nuevo_usuario +``` + +Te pedirá que configures una contraseña y opcionalmente algunos datos adicionales. + +--- + +### 📌 2. Otorgarle permisos de administrador (sudo) + +Agrega el usuario al grupo `sudo`: + +```bash +sudo usermod -aG sudo nuevo_usuario +``` + +Esto le permite ejecutar comandos administrativos con `sudo`. + +--- + +### 📌 3. Verificar que tiene privilegios + +Inicia sesión con el nuevo usuario: + +```bash +su - nuevo_usuario +``` + +Luego, prueba ejecutar un comando con permisos de administrador: + +```bash +sudo whoami +``` + +Si devuelve **"root"**, el usuario tiene permisos de administrador correctamente. 🚀 + +# Eliminar usuario + +Para eliminar un usuario en **Ubuntu (o cualquier Linux basado en Debian)**, puedes usar el comando `deluser` o `userdel`. + +--- + +### ✅ **1. Eliminar el usuario pero conservar su carpeta personal** + +```bash +sudo deluser usuario +``` + +Esto **elimina al usuario** pero deja su **directorio `/home/usuario/`** intacto. + +--- + +### ✅ **2. Eliminar el usuario y su carpeta personal** + +```bash +sudo deluser --remove-home usuario +``` + +Esto **elimina al usuario** y también **su directorio `/home/usuario/`**. + +--- + +### ✅ **3. Forzar eliminación con `userdel` (método alternativo)** + +Si `deluser` no está disponible, usa: + +```bash +sudo userdel -r usuario +``` + +🔹 **`-r`** → Elimina la carpeta `/home/usuario/`. + +⚠️ **Cuidado:** Esto borra todos los archivos del usuario. + +--- + +### ✅ **4. Verificar que el usuario fue eliminado** + +Después de eliminarlo, verifica que ya no exista: + +```bash +cat /etc/passwd | grep usuario +``` + +Si no muestra nada, significa que fue eliminado correctamente. + +--- + 🚀 **¿Necesitas eliminar usuarios en masa o algo más específico?** Dime y te ayudo. 😃🔥 \ No newline at end of file diff --git a/DIX-Notes/Otras_varias/Installr xrdp (Remote Desktop).md b/DIX-Notes/Otras_varias/Installr xrdp (Remote Desktop).md index 9669d06..5fbff61 100644 --- a/DIX-Notes/Otras_varias/Installr xrdp (Remote Desktop).md +++ b/DIX-Notes/Otras_varias/Installr xrdp (Remote Desktop).md @@ -1,8 +1,8 @@ -sudo apt install xrdp -y -sudo systemctl status xrdp -sudo adduser xrdp ssl-cert -sudo systemctl restart xrdp -sudo ufw allow from 192.168.10.0/24 to any port 3389 - -conectarse a través de remote desktop -ingresar la ip del equipop remoto en la ui de windows remote desktop +sudo apt install xrdp -y +sudo systemctl status xrdp +sudo adduser xrdp ssl-cert +sudo systemctl restart xrdp +sudo ufw allow from 192.168.10.0/24 to any port 3389 + +conectarse a través de remote desktop +ingresar la ip del equipop remoto en la ui de windows remote desktop diff --git a/DIX-Notes/Otras_varias/SSL red local con HAProxy.md b/DIX-Notes/Otras_varias/SSL red local con HAProxy.md index eeebc1b..a848215 100644 --- a/DIX-Notes/Otras_varias/SSL red local con HAProxy.md +++ b/DIX-Notes/Otras_varias/SSL red local con HAProxy.md @@ -1,99 +1,99 @@ -Sí, puedes usar **Let's Encrypt** para generar certificados SSL gratuitos y configurarlos en **HAProxy** para tus distintos sitios. Aquí tienes un resumen de cómo hacerlo: - ---- - -### 1️⃣ **Instalar Certbot en tu Servidor** - -Certbot es la herramienta oficial de Let's Encrypt para generar certificados. - -```bash -sudo apt update && sudo apt upgrade -y -sudo apt install certbot -y -``` - -Si HAProxy está en la misma máquina donde se servirán los sitios, puedes usar **Certbot en modo standalone**. - ---- - -### 2️⃣ **Generar Certificados para cada Dominio** - -Ejecuta el siguiente comando para generar un certificado para tu dominio: - -```bash -sudo certbot certonly --standalone -d ejemplo.com -d www.ejemplo.com -# Ejemplo: -sudo certbot certonly --standalone -d ai-reports.1.temporal.work -d www.ai-reports.1.temporal.work -``` - -Si tienes varios dominios en tu HAProxy, repite el comando para cada uno. - -Esto generará los certificados en: - -``` -/etc/letsencrypt/live/ejemplo.com/fullchain.pem -/etc/letsencrypt/live/ejemplo.com/privkey.pem -``` - ---- - -### 3️⃣ **Combinar los Certificados para HAProxy** - -HAProxy requiere que el certificado y la clave privada estén en un solo archivo. Usa este comando para combinarlos: - -```bash -cat /etc/letsencrypt/live/ejemplo.com/fullchain.pem \ - /etc/letsencrypt/live/ejemplo.com/privkey.pem > \ - /etc/haproxy/certs/ejemplo.com.pem -``` - -Repite esto para cada dominio y asegúrate de que HAProxy pueda leer los archivos: - -```bash -sudo chmod 600 /etc/haproxy/certs/*.pem -``` - ---- - -### 4️⃣ **Configurar HAProxy para HTTPS** - -Edita el archivo de configuración de HAProxy (generalmente en `/etc/haproxy/haproxy.cfg`) y agrega la configuración SSL para cada dominio: - -```haproxy -frontend https_front - bind *:443 ssl crt /etc/haproxy/certs/ejemplo.com.pem crt /etc/haproxy/certs/ - mode http - use_backend backend_ejemplo if { hdr(host) -i ejemplo.com } - -backend backend_ejemplo - server srv1 192.168.1.100:80 check -``` - -Esto permite que HAProxy seleccione el certificado correcto según el **hostname** de la solicitud. - ---- - -### 5️⃣ **Renovación Automática** - -Let's Encrypt requiere renovar los certificados cada 90 días. Configura una tarea en **cron** para renovar y actualizar los archivos automáticamente: - -Edita el crontab: - -```bash -sudo crontab -e -``` - -Añade esta línea: - -```bash -0 3 * * * certbot renew --quiet && systemctl reload haproxy -``` - -Esto intentará renovar los certificados diariamente a las **3 AM** y recargará HAProxy si hay cambios. - ---- - -### ✅ **Conclusión** - -Con esto, HAProxy gestionará múltiples sitios con SSL gratuito de Let's Encrypt. Cada dominio tendrá su propio certificado y la renovación será automática. 🚀 - +Sí, puedes usar **Let's Encrypt** para generar certificados SSL gratuitos y configurarlos en **HAProxy** para tus distintos sitios. Aquí tienes un resumen de cómo hacerlo: + +--- + +### 1️⃣ **Instalar Certbot en tu Servidor** + +Certbot es la herramienta oficial de Let's Encrypt para generar certificados. + +```bash +sudo apt update && sudo apt upgrade -y +sudo apt install certbot -y +``` + +Si HAProxy está en la misma máquina donde se servirán los sitios, puedes usar **Certbot en modo standalone**. + +--- + +### 2️⃣ **Generar Certificados para cada Dominio** + +Ejecuta el siguiente comando para generar un certificado para tu dominio: + +```bash +sudo certbot certonly --standalone -d ejemplo.com -d www.ejemplo.com +# Ejemplo: +sudo certbot certonly --standalone -d ai-reports.1.temporal.work -d www.ai-reports.1.temporal.work +``` + +Si tienes varios dominios en tu HAProxy, repite el comando para cada uno. + +Esto generará los certificados en: + +``` +/etc/letsencrypt/live/ejemplo.com/fullchain.pem +/etc/letsencrypt/live/ejemplo.com/privkey.pem +``` + +--- + +### 3️⃣ **Combinar los Certificados para HAProxy** + +HAProxy requiere que el certificado y la clave privada estén en un solo archivo. Usa este comando para combinarlos: + +```bash +cat /etc/letsencrypt/live/ejemplo.com/fullchain.pem \ + /etc/letsencrypt/live/ejemplo.com/privkey.pem > \ + /etc/haproxy/certs/ejemplo.com.pem +``` + +Repite esto para cada dominio y asegúrate de que HAProxy pueda leer los archivos: + +```bash +sudo chmod 600 /etc/haproxy/certs/*.pem +``` + +--- + +### 4️⃣ **Configurar HAProxy para HTTPS** + +Edita el archivo de configuración de HAProxy (generalmente en `/etc/haproxy/haproxy.cfg`) y agrega la configuración SSL para cada dominio: + +```haproxy +frontend https_front + bind *:443 ssl crt /etc/haproxy/certs/ejemplo.com.pem crt /etc/haproxy/certs/ + mode http + use_backend backend_ejemplo if { hdr(host) -i ejemplo.com } + +backend backend_ejemplo + server srv1 192.168.1.100:80 check +``` + +Esto permite que HAProxy seleccione el certificado correcto según el **hostname** de la solicitud. + +--- + +### 5️⃣ **Renovación Automática** + +Let's Encrypt requiere renovar los certificados cada 90 días. Configura una tarea en **cron** para renovar y actualizar los archivos automáticamente: + +Edita el crontab: + +```bash +sudo crontab -e +``` + +Añade esta línea: + +```bash +0 3 * * * certbot renew --quiet && systemctl reload haproxy +``` + +Esto intentará renovar los certificados diariamente a las **3 AM** y recargará HAProxy si hay cambios. + +--- + +### ✅ **Conclusión** + +Con esto, HAProxy gestionará múltiples sitios con SSL gratuito de Let's Encrypt. Cada dominio tendrá su propio certificado y la renovación será automática. 🚀 + Si necesitas ayuda con algún paso, dime cómo tienes configurado tu HAProxy y lo ajustamos. 😃 \ No newline at end of file diff --git a/DIX-Notes/Otras_varias/Servidor SAMBA.md b/DIX-Notes/Otras_varias/Servidor SAMBA.md index 99b18b9..d82bf58 100644 --- a/DIX-Notes/Otras_varias/Servidor SAMBA.md +++ b/DIX-Notes/Otras_varias/Servidor SAMBA.md @@ -1,38 +1,38 @@ -El comando que has proporcionado realiza lo siguiente: - -### **Explicación del comando:** -```bash -sudo apt install samba samba-common-bin -y -``` - -1. **`sudo`**: Ejecuta el comando con permisos de administrador (root), necesario para instalar software en sistemas basados en Debian/Ubuntu. - -2. **`apt install`**: Usa el gestor de paquetes APT (Advanced Package Tool) para instalar software desde los repositorios configurados en el sistema. - -3. **`samba`**: Es el paquete principal de Samba, un software que permite compartir archivos e impresoras entre sistemas Linux/Unix y Windows mediante los protocolos SMB/CIFS. - -4. **`samba-common-bin`**: Este paquete incluye utilidades adicionales para Samba, como herramientas de configuración (`smbpasswd`, `testparm`, etc.) que son útiles para administrar el servidor Samba. - -5. **`-y`**: Responde automáticamente "sí" (yes) a cualquier pregunta de confirmación durante la instalación, evitando interrupciones. - ---- - -### **¿Para qué sirve Samba?** -- Permite compartir archivos y carpetas entre Linux y Windows en una red local. -- Habilita la autenticación de usuarios (puede integrarse con usuarios del sistema o con un dominio Windows Active Directory). -- Es útil para crear servidores de archivos en entornos mixtos (Linux/Windows). - ---- - -### **Pasos posteriores típicos:** -1. **Configurar Samba**: Editar el archivo de configuración `/etc/samba/smb.conf` para definir los recursos compartidos. -2. **Reiniciar el servicio**: - ```bash - sudo systemctl restart smbd - ``` -3. **Añadir usuarios de Samba**: - ```bash - sudo smbpasswd -a [usuario] - ``` - +El comando que has proporcionado realiza lo siguiente: + +### **Explicación del comando:** +```bash +sudo apt install samba samba-common-bin -y +``` + +1. **`sudo`**: Ejecuta el comando con permisos de administrador (root), necesario para instalar software en sistemas basados en Debian/Ubuntu. + +2. **`apt install`**: Usa el gestor de paquetes APT (Advanced Package Tool) para instalar software desde los repositorios configurados en el sistema. + +3. **`samba`**: Es el paquete principal de Samba, un software que permite compartir archivos e impresoras entre sistemas Linux/Unix y Windows mediante los protocolos SMB/CIFS. + +4. **`samba-common-bin`**: Este paquete incluye utilidades adicionales para Samba, como herramientas de configuración (`smbpasswd`, `testparm`, etc.) que son útiles para administrar el servidor Samba. + +5. **`-y`**: Responde automáticamente "sí" (yes) a cualquier pregunta de confirmación durante la instalación, evitando interrupciones. + +--- + +### **¿Para qué sirve Samba?** +- Permite compartir archivos y carpetas entre Linux y Windows en una red local. +- Habilita la autenticación de usuarios (puede integrarse con usuarios del sistema o con un dominio Windows Active Directory). +- Es útil para crear servidores de archivos en entornos mixtos (Linux/Windows). + +--- + +### **Pasos posteriores típicos:** +1. **Configurar Samba**: Editar el archivo de configuración `/etc/samba/smb.conf` para definir los recursos compartidos. +2. **Reiniciar el servicio**: + ```bash + sudo systemctl restart smbd + ``` +3. **Añadir usuarios de Samba**: + ```bash + sudo smbpasswd -a [usuario] + ``` + Si necesitas ayuda con la configuración de Samba, ¡avísame! \ No newline at end of file diff --git a/DIX-Notes/Otras_varias/Visualización carga de trabajo servers.md b/DIX-Notes/Otras_varias/Visualización carga de trabajo servers.md index 7bfd7e7..dedecb1 100644 --- a/DIX-Notes/Otras_varias/Visualización carga de trabajo servers.md +++ b/DIX-Notes/Otras_varias/Visualización carga de trabajo servers.md @@ -1,95 +1,95 @@ -Sí, hay varias herramientas que pueden ayudarte a interpretar mejor el estado del sistema en consola con una visualización más clara y estructurada. Aquí te dejo algunas opciones: - -### 1️⃣ **htop** (Mejor visualización que `top`) - -- Es una alternativa mejorada a `top`, con una interfaz en colores y barras gráficas para CPU, memoria y swap. - -- Puedes desplazarte por los procesos, ordenarlos y matarlos fácilmente. - -- **Instalación**: - - ```bash - sudo apt install htop # Debian/Ubuntu - sudo yum install htop # CentOS/RHEL - sudo pacman -S htop # Arch Linux - ``` - -- **Uso**: - - ```bash - htop - ``` - - -### 2️⃣ **glances** (Monitoreo de sistema en tiempo real) - -- Proporciona información detallada de CPU, memoria, disco, red y procesos en una sola pantalla. - -- Se adapta automáticamente al tamaño de la pantalla y tiene colores para facilitar la lectura. - -- **Instalación**: - - ```bash - sudo apt install glances # Debian/Ubuntu - pip install glances # Alternativa con Python - ``` - -- **Uso**: - - ```bash - glances - ``` - - -### 3️⃣ **nmon** (Análisis detallado del rendimiento) - -- Muestra CPU, memoria, disco, red y más en tiempo real con gráficos ASCII. - -- Ideal para diagnósticos de rendimiento. - -- **Instalación**: - - ```bash - sudo apt install nmon # Debian/Ubuntu - ``` - -- **Uso**: - - ```bash - nmon - ``` - - Luego presiona **c, m, d, n** para ver CPU, memoria, disco y red respectivamente. - - -### 4️⃣ **btop** (Interfaz moderna y colorida) - -- Es una evolución de `htop`, con una interfaz más visual y amigable. - -- Muestra gráficos en tiempo real de CPU, RAM, disco y red. - -- **Instalación**: - - ```bash - sudo apt install btop # Debian/Ubuntu - ``` - -- **Uso**: - - ```bash - btop - ``` - - -### ¿Cuál elegir? - -- **Para algo simple y rápido:** `htop` - -- **Para información detallada en una pantalla:** `glances` - -- **Para análisis de rendimiento:** `nmon` - -- **Para una interfaz moderna y visualmente atractiva:** `btop` - - +Sí, hay varias herramientas que pueden ayudarte a interpretar mejor el estado del sistema en consola con una visualización más clara y estructurada. Aquí te dejo algunas opciones: + +### 1️⃣ **htop** (Mejor visualización que `top`) + +- Es una alternativa mejorada a `top`, con una interfaz en colores y barras gráficas para CPU, memoria y swap. + +- Puedes desplazarte por los procesos, ordenarlos y matarlos fácilmente. + +- **Instalación**: + + ```bash + sudo apt install htop # Debian/Ubuntu + sudo yum install htop # CentOS/RHEL + sudo pacman -S htop # Arch Linux + ``` + +- **Uso**: + + ```bash + htop + ``` + + +### 2️⃣ **glances** (Monitoreo de sistema en tiempo real) + +- Proporciona información detallada de CPU, memoria, disco, red y procesos en una sola pantalla. + +- Se adapta automáticamente al tamaño de la pantalla y tiene colores para facilitar la lectura. + +- **Instalación**: + + ```bash + sudo apt install glances # Debian/Ubuntu + pip install glances # Alternativa con Python + ``` + +- **Uso**: + + ```bash + glances + ``` + + +### 3️⃣ **nmon** (Análisis detallado del rendimiento) + +- Muestra CPU, memoria, disco, red y más en tiempo real con gráficos ASCII. + +- Ideal para diagnósticos de rendimiento. + +- **Instalación**: + + ```bash + sudo apt install nmon # Debian/Ubuntu + ``` + +- **Uso**: + + ```bash + nmon + ``` + + Luego presiona **c, m, d, n** para ver CPU, memoria, disco y red respectivamente. + + +### 4️⃣ **btop** (Interfaz moderna y colorida) + +- Es una evolución de `htop`, con una interfaz más visual y amigable. + +- Muestra gráficos en tiempo real de CPU, RAM, disco y red. + +- **Instalación**: + + ```bash + sudo apt install btop # Debian/Ubuntu + ``` + +- **Uso**: + + ```bash + btop + ``` + + +### ¿Cuál elegir? + +- **Para algo simple y rápido:** `htop` + +- **Para información detallada en una pantalla:** `glances` + +- **Para análisis de rendimiento:** `nmon` + +- **Para una interfaz moderna y visualmente atractiva:** `btop` + + ¿Quieres que te ayude con la configuración de alguna de ellas? 😊 \ No newline at end of file diff --git a/DIX-Notes/RCLONE Y DRIVE/Enviar archivos del servidor a google drive..md b/DIX-Notes/RCLONE Y DRIVE/Enviar archivos del servidor a google drive..md index 068d1c2..8bd6759 100644 --- a/DIX-Notes/RCLONE Y DRIVE/Enviar archivos del servidor a google drive..md +++ b/DIX-Notes/RCLONE Y DRIVE/Enviar archivos del servidor a google drive..md @@ -1,236 +1,236 @@ -1.- Instalar `rclone` en el servidor (si el servidor no tiene interfaz gráfica también instalalo en tu PC o laptop ) - -```bash -sudo apt install rclone -``` - -2.- Para poder usar la herramienta y mandar archivos al servidor debemos hacer la configuración inicial mediante el comando: -```bash -rclone config -``` - -Primero debemos crear un repositorio remoto, para ello la herramienta nos hará una serie de preguntas y en algunos casos nos dará opciones, en la consola deberás ingresar cada una de las opciones seguida de la tecla enter: - -2.1.- La primera vez debemos crear nuestro primer remoto, así que ingresa la letra **n** y **enter**: -```bash -No remotes found, make a new one? -n) New remote -s) Set configuration password -q) Quit config -n/s/q> n -``` - -2.2.- Nombre de nuevo remoto (no dejes espacios, mejor usa guion bajo): -```bash -Enter name for new remote. -name> db_backups -``` - -2.3.- Selección de la opción 18, es la opción de Google Drive -```bash -Option Storage. -Type of storage to configure. -Choose a number from below, or type in your own value. - -18 / Google Drive - \ (drive) - -Storage> 18 -``` - -2.4.- Te pedirá tu id de cliente de Google pero si no lo tienes solo da enter: -```bash -Option client_id. -Google Application Client Id -Setting your own is recommended. -See https://rclone.org/drive/#making-your-own-client-id for how to create your own. -If you leave this blank, it will use an internal key which is low performance. -Enter a value. Press Enter to leave empty. -client_id> -``` - -2.5.- Solicitará tu clave de OAuth pero lo puedes dejar vacío, solo da enter: -```bash -Option client_secret. -OAuth Client Secret. -Leave blank normally. -Enter a value. Press Enter to leave empty. -client_secret> -``` - -2.6.- Te pedirá el tipo de acceso que le darás a Drive, para esta caso yo elegiré la 1 que es acceso total a archivos. - -```bash -Option scope. -Scope that rclone should use when requesting access from drive. -Choose a number from below, or type in your own value. -Press Enter to leave empty. - 1 / Full access all files, excluding Application Data Folder. - \ (drive) - 2 / Read-only access to file metadata and file contents. - \ (drive.readonly) - / Access to files created by rclone only. - 3 | These are visible in the drive website. - | File authorization is revoked when the user deauthorizes the app. - \ (drive.file) - / Allows read and write access to the Application Data folder. - 4 | This is not visible in the drive website. - \ (drive.appfolder) - / Allows read-only access to file metadata but - 5 | does not allow any access to read or download file content. - \ (drive.metadata.readonly) -scope> 1 -``` - -2.7.- Te pedirá la ruta de las credenciales en formato JSON pero lo puedes dejar en blanco y solo dar enter: -```bash -Option service_account_file. -Service Account Credentials JSON file path. -Leave blank normally. -Needed only if you want use SA instead of interactive login. -Leading `~` will be expanded in the file name as will environment variables such as `${RCLONE_CONFIG_DIR}`. -Enter a value. Press Enter to leave empty. -service_account_file> -``` - -2.8- Preguntará si quieres editar la configuración avanzada, la opción es no (n): -```bash -Edit advanced config? -y) Yes -n) No (default) -y/n> n -``` - -2.9.- Te preguntara si quieres usar el método de configuración automática, pero **ingresa que no, ya que usa una UI y el servidor no tiene interfaz gráfica**. - -```bash -Use auto config? - * Say Y if not sure - * Say N if you are working on a remote or headless machine - -y) Yes (default) -n) No -y/n> n -``` - -2.9.1.- Del comando anterior en consola te mostrará un mensaje como este: -```bash -Option config_token. -For this to work, you will need rclone available on a machine that has -a web browser available. -For more help and alternate methods see: https://rclone.org/remote_setup/ -Execute the following on the machine with the web browser (same rclone -version recommended): - rclone authorize "drive" "ayXzY01uSSI8ImRiaXZlIm0" -Then paste the result. -Enter a value. -config_token> -``` - - -En tu computadora local, **NO EN EL SERVIDOR**, deberás abrir una terminal (previamente debiste instalar rclone en esa maquina), y pegar el comando que te da la terminal del servidor que en este caso es: -```bash -rclone authorize "drive" "ayXzY01uSSI8ImRiaXZlIm0" -``` - -De ese comando verás que te despliega la consola una respuesta como esta: -```bash -2025/06/03 13:12:35 NOTICE: Config file "/home/dave/.config/rclone/rclone.conf" not found - using defaults -2025/06/03 13:12:35 NOTICE: If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth?state=VQQBIGPyiSNLYReNNPIXmj -2025/06/03 13:12:35 NOTICE: Log in and authorize rclone for access -2025/06/03 13:12:35 NOTICE: Waiting for code... -``` - -En la segunda línea del mensaje, copia y pega en tu navegador la URL que aparece despues de link, en este caso es: http://127.0.0.1:53682/auth?state=VQQBIGPyiSNLYReNNPIXmj - -En tu navegador te aparecerán las cuentas de gmail, selecciona la cuenta de gmail que corresponde al DRIVE que le darás acceso a rclone, de forma inmediata el navegador te dará un mensaje de **SUCCESS** y debes regresar a tu consola de tu maquina local y te dará un hash largo similar a este: -```bash -Paste the following into your remote machine ---> -eyJ0b2tlbiI6IntcImFjY2Vzc19....[muchos-caracteres]....NjowMFwifSJ9 -<---End paste -``` -Copia lo que esta entre las flechas (---> hash <---) y pégalo en la terminal de tu servidor VPS. - -2.10.- Te preguntará que si es un drive compartido, en este caso es no: - -```bash -Configure this as a Shared Drive (Team Drive)? - -y) Yes -n) No (default) -y/n> n -``` - -2.11.- Finalmente te hará la pregunta de si quieres mantener la configuración hecha, debes ingresar la y: -```bash -Configuration complete. -Options: -- type: drive -- scope: drive -- token: {"access_token":"datos-de-tu-token-de-acceso","token_type":"tu-tipo-de-token","refresh_token":"hash-del-token","expiry":"time-stamp-expiracion"} -- team_drive: -Keep this "db_backups" remote? -y) Yes this is OK (default) -e) Edit this remote -d) Delete this remote -y/e/d> y -``` - -Listo, tu configuración ya esta hecha, ahora solo debes salir de rclone ingresando la letra `q` seguida del enter, y en - -### Subir carpeta con `rclone copy` - -Este comando copia los archivos de origen a destino, sin borrar nada en destino. - -```bash -rclone copy /ruta/local/de/la/carpeta formha_db_backups:/carpeta-en-drive -``` - -rclone copy /home/dix/backups-db/ formha_db_backups:/formha-db-backups - - -* `/ruta/local/de/la/carpeta` → la carpeta en tu VPS que quieres subir. -* `formha_db_backups:/carpeta-en-drive` → la carpeta en tu Google Drive (se creará si no existe). - -Ejemplo: - -```bash -rclone copy /home/dix/backups formha_db_backups:/backups-vps -p --v -``` - -Esto copiará todo el contenido de `/home/dix/backups` a la carpeta `backups-vps` en Google Drive. - ---- - -### Subir carpeta con `rclone sync` - -Si quieres que la carpeta en Google Drive **quede idéntica** a la local (borra archivos en Drive que no estén en local): - -```bash -rclone sync /ruta/local/de/la/carpeta formha_db_backups:/carpeta-en-drive -``` - -Ten cuidado con `sync` porque puede eliminar archivos en Drive. - ---- - -### Otros tips útiles - -* Para ver el contenido en Drive: - -```bash -rclone ls formha_db_backups:/carpeta-en-drive -``` - -* Para hacer dry-run (simular qué pasaría sin cambios reales): - -```bash -rclone copy --dry-run /home/dix/backups formha_db_backups:/backups-vps -``` - ---- - -¿Quieres que te ayude con un script automático o programación de backups? - - - +1.- Instalar `rclone` en el servidor (si el servidor no tiene interfaz gráfica también instalalo en tu PC o laptop ) + +```bash +sudo apt install rclone +``` + +2.- Para poder usar la herramienta y mandar archivos al servidor debemos hacer la configuración inicial mediante el comando: +```bash +rclone config +``` + +Primero debemos crear un repositorio remoto, para ello la herramienta nos hará una serie de preguntas y en algunos casos nos dará opciones, en la consola deberás ingresar cada una de las opciones seguida de la tecla enter: + +2.1.- La primera vez debemos crear nuestro primer remoto, así que ingresa la letra **n** y **enter**: +```bash +No remotes found, make a new one? +n) New remote +s) Set configuration password +q) Quit config +n/s/q> n +``` + +2.2.- Nombre de nuevo remoto (no dejes espacios, mejor usa guion bajo): +```bash +Enter name for new remote. +name> db_backups +``` + +2.3.- Selección de la opción 18, es la opción de Google Drive +```bash +Option Storage. +Type of storage to configure. +Choose a number from below, or type in your own value. + +18 / Google Drive + \ (drive) + +Storage> 18 +``` + +2.4.- Te pedirá tu id de cliente de Google pero si no lo tienes solo da enter: +```bash +Option client_id. +Google Application Client Id +Setting your own is recommended. +See https://rclone.org/drive/#making-your-own-client-id for how to create your own. +If you leave this blank, it will use an internal key which is low performance. +Enter a value. Press Enter to leave empty. +client_id> +``` + +2.5.- Solicitará tu clave de OAuth pero lo puedes dejar vacío, solo da enter: +```bash +Option client_secret. +OAuth Client Secret. +Leave blank normally. +Enter a value. Press Enter to leave empty. +client_secret> +``` + +2.6.- Te pedirá el tipo de acceso que le darás a Drive, para esta caso yo elegiré la 1 que es acceso total a archivos. + +```bash +Option scope. +Scope that rclone should use when requesting access from drive. +Choose a number from below, or type in your own value. +Press Enter to leave empty. + 1 / Full access all files, excluding Application Data Folder. + \ (drive) + 2 / Read-only access to file metadata and file contents. + \ (drive.readonly) + / Access to files created by rclone only. + 3 | These are visible in the drive website. + | File authorization is revoked when the user deauthorizes the app. + \ (drive.file) + / Allows read and write access to the Application Data folder. + 4 | This is not visible in the drive website. + \ (drive.appfolder) + / Allows read-only access to file metadata but + 5 | does not allow any access to read or download file content. + \ (drive.metadata.readonly) +scope> 1 +``` + +2.7.- Te pedirá la ruta de las credenciales en formato JSON pero lo puedes dejar en blanco y solo dar enter: +```bash +Option service_account_file. +Service Account Credentials JSON file path. +Leave blank normally. +Needed only if you want use SA instead of interactive login. +Leading `~` will be expanded in the file name as will environment variables such as `${RCLONE_CONFIG_DIR}`. +Enter a value. Press Enter to leave empty. +service_account_file> +``` + +2.8- Preguntará si quieres editar la configuración avanzada, la opción es no (n): +```bash +Edit advanced config? +y) Yes +n) No (default) +y/n> n +``` + +2.9.- Te preguntara si quieres usar el método de configuración automática, pero **ingresa que no, ya que usa una UI y el servidor no tiene interfaz gráfica**. + +```bash +Use auto config? + * Say Y if not sure + * Say N if you are working on a remote or headless machine + +y) Yes (default) +n) No +y/n> n +``` + +2.9.1.- Del comando anterior en consola te mostrará un mensaje como este: +```bash +Option config_token. +For this to work, you will need rclone available on a machine that has +a web browser available. +For more help and alternate methods see: https://rclone.org/remote_setup/ +Execute the following on the machine with the web browser (same rclone +version recommended): + rclone authorize "drive" "ayXzY01uSSI8ImRiaXZlIm0" +Then paste the result. +Enter a value. +config_token> +``` + + +En tu computadora local, **NO EN EL SERVIDOR**, deberás abrir una terminal (previamente debiste instalar rclone en esa maquina), y pegar el comando que te da la terminal del servidor que en este caso es: +```bash +rclone authorize "drive" "ayXzY01uSSI8ImRiaXZlIm0" +``` + +De ese comando verás que te despliega la consola una respuesta como esta: +```bash +2025/06/03 13:12:35 NOTICE: Config file "/home/dave/.config/rclone/rclone.conf" not found - using defaults +2025/06/03 13:12:35 NOTICE: If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth?state=VQQBIGPyiSNLYReNNPIXmj +2025/06/03 13:12:35 NOTICE: Log in and authorize rclone for access +2025/06/03 13:12:35 NOTICE: Waiting for code... +``` + +En la segunda línea del mensaje, copia y pega en tu navegador la URL que aparece despues de link, en este caso es: http://127.0.0.1:53682/auth?state=VQQBIGPyiSNLYReNNPIXmj + +En tu navegador te aparecerán las cuentas de gmail, selecciona la cuenta de gmail que corresponde al DRIVE que le darás acceso a rclone, de forma inmediata el navegador te dará un mensaje de **SUCCESS** y debes regresar a tu consola de tu maquina local y te dará un hash largo similar a este: +```bash +Paste the following into your remote machine ---> +eyJ0b2tlbiI6IntcImFjY2Vzc19....[muchos-caracteres]....NjowMFwifSJ9 +<---End paste +``` +Copia lo que esta entre las flechas (---> hash <---) y pégalo en la terminal de tu servidor VPS. + +2.10.- Te preguntará que si es un drive compartido, en este caso es no: + +```bash +Configure this as a Shared Drive (Team Drive)? + +y) Yes +n) No (default) +y/n> n +``` + +2.11.- Finalmente te hará la pregunta de si quieres mantener la configuración hecha, debes ingresar la y: +```bash +Configuration complete. +Options: +- type: drive +- scope: drive +- token: {"access_token":"datos-de-tu-token-de-acceso","token_type":"tu-tipo-de-token","refresh_token":"hash-del-token","expiry":"time-stamp-expiracion"} +- team_drive: +Keep this "db_backups" remote? +y) Yes this is OK (default) +e) Edit this remote +d) Delete this remote +y/e/d> y +``` + +Listo, tu configuración ya esta hecha, ahora solo debes salir de rclone ingresando la letra `q` seguida del enter, y en + +### Subir carpeta con `rclone copy` + +Este comando copia los archivos de origen a destino, sin borrar nada en destino. + +```bash +rclone copy /ruta/local/de/la/carpeta formha_db_backups:/carpeta-en-drive +``` + +rclone copy /home/dix/backups-db/ formha_db_backups:/formha-db-backups + + +* `/ruta/local/de/la/carpeta` → la carpeta en tu VPS que quieres subir. +* `formha_db_backups:/carpeta-en-drive` → la carpeta en tu Google Drive (se creará si no existe). + +Ejemplo: + +```bash +rclone copy /home/dix/backups formha_db_backups:/backups-vps -p --v +``` + +Esto copiará todo el contenido de `/home/dix/backups` a la carpeta `backups-vps` en Google Drive. + +--- + +### Subir carpeta con `rclone sync` + +Si quieres que la carpeta en Google Drive **quede idéntica** a la local (borra archivos en Drive que no estén en local): + +```bash +rclone sync /ruta/local/de/la/carpeta formha_db_backups:/carpeta-en-drive +``` + +Ten cuidado con `sync` porque puede eliminar archivos en Drive. + +--- + +### Otros tips útiles + +* Para ver el contenido en Drive: + +```bash +rclone ls formha_db_backups:/carpeta-en-drive +``` + +* Para hacer dry-run (simular qué pasaría sin cambios reales): + +```bash +rclone copy --dry-run /home/dix/backups formha_db_backups:/backups-vps +``` + +--- + +¿Quieres que te ayude con un script automático o programación de backups? + + + diff --git a/DIX-Notes/Raspberry Pi as Router Wireguard Client.md b/DIX-Notes/Raspberry Pi as Router Wireguard Client.md index b500c77..e1c69aa 100644 --- a/DIX-Notes/Raspberry Pi as Router Wireguard Client.md +++ b/DIX-Notes/Raspberry Pi as Router Wireguard Client.md @@ -1,101 +1,101 @@ -Sí, **puedes usar una Raspberry Pi como cliente WireGuard y compartir Internet a través de ella**, como si fuera un router. Esto es útil, por ejemplo, si quieres que dispositivos conectados a la Raspberry (por cable o Wi-Fi) usen la conexión VPN. - -### ✅ Requisitos - -- Raspberry Pi (con Raspberry Pi OS o similar). - -- Conexión a Internet. - -- Configuración de cliente WireGuard funcional (`wg0.conf`). - -- IP forwarding habilitado. - -- `iptables` o `nftables` para NAT. - - ---- - -### 🔧 Pasos - -#### 1. **Instala WireGuard** - -```bash -sudo apt update -sudo apt install wireguard -``` - -#### 2. **Configura el cliente WireGuard** - -Crea el archivo `/etc/wireguard/wg0.conf` con los datos del servidor: - -```ini -[Interface] -PrivateKey = TU_CLAVE_PRIVADA -Address = 10.10.10.2/32 -DNS = 1.1.1.1 - -[Peer] -PublicKey = CLAVE_PUBLICA_DEL_SERVIDOR -Endpoint = IP_DEL_SERVIDOR:51820 -AllowedIPs = 0.0.0.0/0 -PersistentKeepalive = 25 -``` - -Activa el túnel: - -```bash -sudo wg-quick up wg0 -``` - -#### 3. **Habilita IP forwarding** - -Edita `/etc/sysctl.conf` y descomenta o añade: - -```bash -net.ipv4.ip_forward=1 -``` - -Aplica el cambio: - -```bash -sudo sysctl -p -``` - -#### 4. **Configura NAT para compartir Internet** - -Asumiendo que los clientes están en `eth0` o `wlan0` y que la VPN va por `wg0`: - -```bash -# Reglas NAT -sudo iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE - -# Permitir reenvío entre interfaces -sudo iptables -A FORWARD -i wg0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT -sudo iptables -A FORWARD -i wlan0 -o wg0 -j ACCEPT -``` - -Haz persistente con `iptables-persistent`: - -```bash -sudo apt install iptables-persistent -sudo netfilter-persistent save -``` - -#### 5. **Crea un hotspot o red para compartir** - -Puedes usar `hostapd` para crear un punto de acceso Wi-Fi, o compartir por Ethernet usando una IP estática y DHCP (`dnsmasq` o similar). - ---- - -### 📶 Ejemplo de uso - -- Raspberry conectada a Internet por Wi-Fi. - -- Cliente se conecta por Ethernet a la Raspberry. - -- Todo el tráfico del cliente pasa por la VPN (WireGuard). - - ---- - +Sí, **puedes usar una Raspberry Pi como cliente WireGuard y compartir Internet a través de ella**, como si fuera un router. Esto es útil, por ejemplo, si quieres que dispositivos conectados a la Raspberry (por cable o Wi-Fi) usen la conexión VPN. + +### ✅ Requisitos + +- Raspberry Pi (con Raspberry Pi OS o similar). + +- Conexión a Internet. + +- Configuración de cliente WireGuard funcional (`wg0.conf`). + +- IP forwarding habilitado. + +- `iptables` o `nftables` para NAT. + + +--- + +### 🔧 Pasos + +#### 1. **Instala WireGuard** + +```bash +sudo apt update +sudo apt install wireguard +``` + +#### 2. **Configura el cliente WireGuard** + +Crea el archivo `/etc/wireguard/wg0.conf` con los datos del servidor: + +```ini +[Interface] +PrivateKey = TU_CLAVE_PRIVADA +Address = 10.10.10.2/32 +DNS = 1.1.1.1 + +[Peer] +PublicKey = CLAVE_PUBLICA_DEL_SERVIDOR +Endpoint = IP_DEL_SERVIDOR:51820 +AllowedIPs = 0.0.0.0/0 +PersistentKeepalive = 25 +``` + +Activa el túnel: + +```bash +sudo wg-quick up wg0 +``` + +#### 3. **Habilita IP forwarding** + +Edita `/etc/sysctl.conf` y descomenta o añade: + +```bash +net.ipv4.ip_forward=1 +``` + +Aplica el cambio: + +```bash +sudo sysctl -p +``` + +#### 4. **Configura NAT para compartir Internet** + +Asumiendo que los clientes están en `eth0` o `wlan0` y que la VPN va por `wg0`: + +```bash +# Reglas NAT +sudo iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE + +# Permitir reenvío entre interfaces +sudo iptables -A FORWARD -i wg0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT +sudo iptables -A FORWARD -i wlan0 -o wg0 -j ACCEPT +``` + +Haz persistente con `iptables-persistent`: + +```bash +sudo apt install iptables-persistent +sudo netfilter-persistent save +``` + +#### 5. **Crea un hotspot o red para compartir** + +Puedes usar `hostapd` para crear un punto de acceso Wi-Fi, o compartir por Ethernet usando una IP estática y DHCP (`dnsmasq` o similar). + +--- + +### 📶 Ejemplo de uso + +- Raspberry conectada a Internet por Wi-Fi. + +- Cliente se conecta por Ethernet a la Raspberry. + +- Todo el tráfico del cliente pasa por la VPN (WireGuard). + + +--- + Si me das detalles sobre cómo quieres compartir (Wi-Fi o Ethernet), te puedo ayudar a configurar eso también. \ No newline at end of file diff --git a/DIX-Notes/SERVERS - DIX/adjuntos/servers.xlsm b/DIX-Notes/SERVERS - DIX/adjuntos/servers.xlsm index 7f51d9a2c8b3813af9faf940e6f8ad0c5754df23..742d16b3ec6a8511903b1437aff01662421e0119 100644 GIT binary patch delta 16442 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 G?Ee7pSV#~6 diff --git a/DIX-Notes/corregir error ip.xala.dev vs dix-ip.duckdns.org.md b/DIX-Notes/corregir error ip.xala.dev vs dix-ip.duckdns.org.md index 360c5f9..fe79098 100644 --- a/DIX-Notes/corregir error ip.xala.dev vs dix-ip.duckdns.org.md +++ b/DIX-Notes/corregir error ip.xala.dev vs dix-ip.duckdns.org.md @@ -1,78 +1,78 @@ -¡Perfecto! 🎯 -Eso confirma que `ip.xala.dev` ya **resuelve directamente a tu IP real pública (`189.131.79.23`)**, y **el proxy de Cloudflare está desactivado** (ícono gris / Solo DNS). Bien hecho. ✅ - ---- - -### 🧩 Entonces… ¿por qué `git push` aún no funciona con `ip.xala.dev:3000`? - -Si el dominio resuelve bien y aún falla, quedan estas **posibles causas clave**: - ---- - -### 1. ❌ **Cloudflare nunca estuvo en medio, pero tu servidor Git está restringido por `Host`** - -Algunos servidores Git (como **Gitea**) pueden rechazar peticiones HTTP que usen un nombre de dominio diferente al configurado. - -**Ejemplo típico de fallo:** - -```bash -# Este sí funciona porque coincide con la configuración del servidor -git remote add origin http://dix-ip.duckdns.org:3000/repo.git - -# Este no funciona porque el servidor solo acepta dix-ip.duckdns.org como Host HTTP -git remote add origin http://ip.xala.dev:3000/repo.git -``` - -👉 **Solución:** - -- Si usas Gitea, revisa el valor `DOMAIN` o `ROOT_URL` en su archivo `app.ini`. - -- Asegúrate de que incluya `ip.xala.dev` o configúralo así: - - -```ini -ROOT_URL = http://ip.xala.dev:3000/ -``` - -Y reinicia Gitea. - ---- - -### 2. 🔒 **Tu servidor Git usa una ACL o firewall basado en nombres** - -Revisa si el servidor tiene alguna lógica o `nginx` / `apache` virtual host configurado para solo aceptar conexiones desde ciertos hosts. - ---- - -### 3. 🧪 **Verifica que responde por nombre** - -Haz esta prueba desde la máquina cliente: - -```bash -curl -v http://ip.xala.dev:3000/ -``` - -Y también: - -```bash -curl -v http://dix-ip.duckdns.org:3000/ -``` - -- Si uno responde y el otro no: el problema está en cómo el servidor maneja el **nombre del host** (`Host: ...`) en la cabecera HTTP. - - ---- - -### ✅ Solución temporal de prueba (si no puedes modificar el servidor): - -Puedes engañar a Git y al servidor editando tu `/etc/hosts` y agregando: - -```bash -189.131.79.23 dix-ip.duckdns.org ip.xala.dev -``` - -Así, cuando uses `ip.xala.dev`, Git usará el nombre que acepta el servidor, como si fueran sinónimos. - ---- - +¡Perfecto! 🎯 +Eso confirma que `ip.xala.dev` ya **resuelve directamente a tu IP real pública (`189.131.79.23`)**, y **el proxy de Cloudflare está desactivado** (ícono gris / Solo DNS). Bien hecho. ✅ + +--- + +### 🧩 Entonces… ¿por qué `git push` aún no funciona con `ip.xala.dev:3000`? + +Si el dominio resuelve bien y aún falla, quedan estas **posibles causas clave**: + +--- + +### 1. ❌ **Cloudflare nunca estuvo en medio, pero tu servidor Git está restringido por `Host`** + +Algunos servidores Git (como **Gitea**) pueden rechazar peticiones HTTP que usen un nombre de dominio diferente al configurado. + +**Ejemplo típico de fallo:** + +```bash +# Este sí funciona porque coincide con la configuración del servidor +git remote add origin http://dix-ip.duckdns.org:3000/repo.git + +# Este no funciona porque el servidor solo acepta dix-ip.duckdns.org como Host HTTP +git remote add origin http://ip.xala.dev:3000/repo.git +``` + +👉 **Solución:** + +- Si usas Gitea, revisa el valor `DOMAIN` o `ROOT_URL` en su archivo `app.ini`. + +- Asegúrate de que incluya `ip.xala.dev` o configúralo así: + + +```ini +ROOT_URL = http://ip.xala.dev:3000/ +``` + +Y reinicia Gitea. + +--- + +### 2. 🔒 **Tu servidor Git usa una ACL o firewall basado en nombres** + +Revisa si el servidor tiene alguna lógica o `nginx` / `apache` virtual host configurado para solo aceptar conexiones desde ciertos hosts. + +--- + +### 3. 🧪 **Verifica que responde por nombre** + +Haz esta prueba desde la máquina cliente: + +```bash +curl -v http://ip.xala.dev:3000/ +``` + +Y también: + +```bash +curl -v http://dix-ip.duckdns.org:3000/ +``` + +- Si uno responde y el otro no: el problema está en cómo el servidor maneja el **nombre del host** (`Host: ...`) en la cabecera HTTP. + + +--- + +### ✅ Solución temporal de prueba (si no puedes modificar el servidor): + +Puedes engañar a Git y al servidor editando tu `/etc/hosts` y agregando: + +```bash +189.131.79.23 dix-ip.duckdns.org ip.xala.dev +``` + +Así, cuando uses `ip.xala.dev`, Git usará el nombre que acepta el servidor, como si fueran sinónimos. + +--- + ¿Sabes qué servidor Git estás usando (¿Gitea, GitLab, bare Git+nginx?)? Puedo ayudarte a ajustar la configuración. \ No newline at end of file diff --git a/DIX-Notes/n8n en ubuntu server.md b/DIX-Notes/n8n en ubuntu server.md index bb8867c..7b66dff 100644 --- a/DIX-Notes/n8n en ubuntu server.md +++ b/DIX-Notes/n8n en ubuntu server.md @@ -1,254 +1,254 @@ -Perfecto, David. A continuación te dejo el **manual completo y actualizado** para instalar `n8n` de forma manual en Ubuntu Server (sin Docker), incluyendo: - -- Instalación limpia de Node.js 20 - -- Instalación de n8n y pm2 - -- Script de arranque con autenticación básica - -- Ejecución en segundo plano con reinicio automático al encender el servidor - - ---- - -# 🛠 Manual actualizado para instalar n8n (sin Docker) en Ubuntu Server - ---- - -## ✅ 1. Actualiza el sistema e instala dependencias - -```bash -sudo apt update && sudo apt upgrade -y -sudo apt install -y curl gnupg build-essential -``` - ---- - -## ✅ 2. Instala Node.js 20 (requerido por versiones recientes de n8n) - -```bash -curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - -sudo apt install -y nodejs -``` - -Verifica que esté instalado correctamente: - -```bash -node -v -npm -v -``` - -Debe mostrar algo como `v20.x.x`. - ---- - -## ✅ 3. Instala `n8n` y `pm2` globalmente - -```bash -sudo npm install -g pm2 n8n -``` - ---- - -## ✅ 4. Crea el script de arranque `n8n` - -```bash -nano ~/start-n8n.sh -``` - -Pega el siguiente contenido: - -```bash -#!/bin/bash -export N8N_HOST=0.0.0.0 -export N8N_PORT=5678 -export N8N_BASIC_AUTH_ACTIVE=true -export N8N_BASIC_AUTH_USER=admin -export N8N_BASIC_AUTH_PASSWORD=Shala55951254 -n8n -``` - -Guarda y cierra (Ctrl+O, Enter, Ctrl+X). - -Hazlo ejecutable: - -```bash -chmod +x ~/start-n8n.sh -``` - ---- - -## ✅ 5. Ejecuta el script para probar - -```bash -~/start-n8n.sh -``` - -Deberías ver un mensaje como: - -``` -Editor is now accessible via: http://0.0.0.0:5678 -``` - -📌 Accede desde el navegador con la IP del servidor: - -``` -http://TU_IP:5678 -``` - -Usuario: `admin` -Contraseña: `Shala55951254` - ---- - -## ✅ 6. Ejecutar n8n en segundo plano con `pm2` - -### A. Inicia el proceso con `pm2`: - -```bash -pm2 start ~/start-n8n.sh --name n8n -``` - -### B. Guarda el proceso para que se reinicie con el sistema: - -```bash -pm2 startup -``` - -Copia y ejecuta la línea que te devuelva (ejemplo): - -```bash -sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u $USER --hp /home/$USER -``` - -Luego: - -```bash -pm2 save -``` - ---- - -## ✅ 7. (Opcional) Abre el puerto en el firewall - -```bash -sudo ufw allow 5678/tcp -sudo ufw enable -sudo ufw status -``` - ---- - -## ✅ 8. Comandos útiles - -- Ver estado de procesos: - - ```bash - pm2 list - ``` - -- Ver logs en tiempo real: - - ```bash - pm2 logs n8n - ``` - -- Parar o reiniciar: - - ```bash - pm2 stop n8n - pm2 restart n8n - ``` - -- Eliminar proceso: - - ```bash - pm2 delete n8n - ``` - - ---- - -¿Quieres que ahora te dé el manual con NGINX + HTTPS (Let's Encrypt) para que accedas por dominio seguro como `https://n8n.tudominio.com`? - - - -# hacer que el servicio de n8n se reincie con el equipo - -Excelente pregunta, David. Si `n8n` no se reinicia automáticamente tras reiniciar tu servidor, lo más probable es que **faltó ejecutar correctamente uno de los pasos con `pm2`** para registrar el arranque del proceso. - -Aquí te explico cómo asegurar que n8n se inicie automáticamente al arrancar el servidor: - ---- - -## ✅ Paso a paso para activar reinicio automático con `pm2` - -### 1. Asegúrate de que `n8n` está corriendo con `pm2` - -Confirma con: - -```bash -pm2 list -``` - -Deberías ver un proceso llamado `n8n`. - ---- - -### 2. Genera el script de arranque para `systemd` - -```bash -pm2 startup -``` - -Esto te devolverá una línea como esta (con tu usuario): - -```bash -sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u web --hp /home/web -``` - -🔁 **Cópiala y ejecútala exactamente**. - -> ⚠️ Este paso es **clave**: si no ejecutas esa línea, `pm2` no se integrará con `systemd` y no podrá reiniciar tus procesos al arrancar el servidor. - ---- - -### 3. Guarda el estado actual de los procesos - -```bash -pm2 save -``` - -Esto crea un snapshot de los procesos actuales que serán restaurados al reinicio. - ---- - -### 4. Verifica que todo esté correcto - -Puedes simular un reinicio: - -```bash -sudo reboot -``` - -Luego, tras reiniciar, verifica: - -```bash -pm2 list -``` - -Y accede a `http://IP:5678` para confirmar que `n8n` se levantó automáticamente. - ---- - -## ✅ Resumen de comandos clave - -```bash -pm2 start ~/start-n8n.sh --name n8n -pm2 startup # (ejecutar también la línea que devuelve) -pm2 save -``` - ---- - +Perfecto, David. A continuación te dejo el **manual completo y actualizado** para instalar `n8n` de forma manual en Ubuntu Server (sin Docker), incluyendo: + +- Instalación limpia de Node.js 20 + +- Instalación de n8n y pm2 + +- Script de arranque con autenticación básica + +- Ejecución en segundo plano con reinicio automático al encender el servidor + + +--- + +# 🛠 Manual actualizado para instalar n8n (sin Docker) en Ubuntu Server + +--- + +## ✅ 1. Actualiza el sistema e instala dependencias + +```bash +sudo apt update && sudo apt upgrade -y +sudo apt install -y curl gnupg build-essential +``` + +--- + +## ✅ 2. Instala Node.js 20 (requerido por versiones recientes de n8n) + +```bash +curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - +sudo apt install -y nodejs +``` + +Verifica que esté instalado correctamente: + +```bash +node -v +npm -v +``` + +Debe mostrar algo como `v20.x.x`. + +--- + +## ✅ 3. Instala `n8n` y `pm2` globalmente + +```bash +sudo npm install -g pm2 n8n +``` + +--- + +## ✅ 4. Crea el script de arranque `n8n` + +```bash +nano ~/start-n8n.sh +``` + +Pega el siguiente contenido: + +```bash +#!/bin/bash +export N8N_HOST=0.0.0.0 +export N8N_PORT=5678 +export N8N_BASIC_AUTH_ACTIVE=true +export N8N_BASIC_AUTH_USER=admin +export N8N_BASIC_AUTH_PASSWORD=Shala55951254 +n8n +``` + +Guarda y cierra (Ctrl+O, Enter, Ctrl+X). + +Hazlo ejecutable: + +```bash +chmod +x ~/start-n8n.sh +``` + +--- + +## ✅ 5. Ejecuta el script para probar + +```bash +~/start-n8n.sh +``` + +Deberías ver un mensaje como: + +``` +Editor is now accessible via: http://0.0.0.0:5678 +``` + +📌 Accede desde el navegador con la IP del servidor: + +``` +http://TU_IP:5678 +``` + +Usuario: `admin` +Contraseña: `Shala55951254` + +--- + +## ✅ 6. Ejecutar n8n en segundo plano con `pm2` + +### A. Inicia el proceso con `pm2`: + +```bash +pm2 start ~/start-n8n.sh --name n8n +``` + +### B. Guarda el proceso para que se reinicie con el sistema: + +```bash +pm2 startup +``` + +Copia y ejecuta la línea que te devuelva (ejemplo): + +```bash +sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u $USER --hp /home/$USER +``` + +Luego: + +```bash +pm2 save +``` + +--- + +## ✅ 7. (Opcional) Abre el puerto en el firewall + +```bash +sudo ufw allow 5678/tcp +sudo ufw enable +sudo ufw status +``` + +--- + +## ✅ 8. Comandos útiles + +- Ver estado de procesos: + + ```bash + pm2 list + ``` + +- Ver logs en tiempo real: + + ```bash + pm2 logs n8n + ``` + +- Parar o reiniciar: + + ```bash + pm2 stop n8n + pm2 restart n8n + ``` + +- Eliminar proceso: + + ```bash + pm2 delete n8n + ``` + + +--- + +¿Quieres que ahora te dé el manual con NGINX + HTTPS (Let's Encrypt) para que accedas por dominio seguro como `https://n8n.tudominio.com`? + + + +# hacer que el servicio de n8n se reincie con el equipo + +Excelente pregunta, David. Si `n8n` no se reinicia automáticamente tras reiniciar tu servidor, lo más probable es que **faltó ejecutar correctamente uno de los pasos con `pm2`** para registrar el arranque del proceso. + +Aquí te explico cómo asegurar que n8n se inicie automáticamente al arrancar el servidor: + +--- + +## ✅ Paso a paso para activar reinicio automático con `pm2` + +### 1. Asegúrate de que `n8n` está corriendo con `pm2` + +Confirma con: + +```bash +pm2 list +``` + +Deberías ver un proceso llamado `n8n`. + +--- + +### 2. Genera el script de arranque para `systemd` + +```bash +pm2 startup +``` + +Esto te devolverá una línea como esta (con tu usuario): + +```bash +sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u web --hp /home/web +``` + +🔁 **Cópiala y ejecútala exactamente**. + +> ⚠️ Este paso es **clave**: si no ejecutas esa línea, `pm2` no se integrará con `systemd` y no podrá reiniciar tus procesos al arrancar el servidor. + +--- + +### 3. Guarda el estado actual de los procesos + +```bash +pm2 save +``` + +Esto crea un snapshot de los procesos actuales que serán restaurados al reinicio. + +--- + +### 4. Verifica que todo esté correcto + +Puedes simular un reinicio: + +```bash +sudo reboot +``` + +Luego, tras reiniciar, verifica: + +```bash +pm2 list +``` + +Y accede a `http://IP:5678` para confirmar que `n8n` se levantó automáticamente. + +--- + +## ✅ Resumen de comandos clave + +```bash +pm2 start ~/start-n8n.sh --name n8n +pm2 startup # (ejecutar también la línea que devuelve) +pm2 save +``` + +--- + ¿Quieres que revise también cómo levantar `pm2` con un usuario distinto al login por defecto o con logs persistentes en un archivo? \ No newline at end of file diff --git a/DIX-Notes/notas_express.md b/DIX-Notes/notas_express.md deleted file mode 100644 index 5e91bb3..0000000 --- a/DIX-Notes/notas_express.md +++ /dev/null @@ -1,22 +0,0 @@ -Reunión en instalaciones de la SHCP 05/08/2025 11:00 am - - - -Temas vistos: - -- Revisión de cada uno de los proyectos de inversión para ver los estudios de preinversión que les aplican. - -- Aclaración de dudas relacionados con los proyectos por parte de la Lic. María Asereth. - - -Acuerdos: - -- Se designan a las contadoras Lic. Guadalupe y Lic. Alba como enlaces con la Lic. María Asereth para asesorías en el desarrollo de los estudios de preinversión. - -- La Lic. María Asereth gestionará apartar una sala de reuniones para permitir que podamos trabajar en las instalaciones de la SHCP a fin de facilitar y atender dudas y aclaraciones en el desarrollo de los estudios de preinversión, para ello hay que compartir mediante los enlaces los nombres de los que estarán yendo a las instalaciones. - -- La Lic. María Asereth compartirá un ejemplo de cartera de inversión. - -- Los estudios de preinversión deben ser entregados a más tardar el 20 de agosto. - -- IMPORTANTE: decidir si se debe involucrar al nuevo Director General Satelital de la AEM. \ No newline at end of file diff --git a/DIX-Notes/trabajar_script_mc_backup.md b/DIX-Notes/trabajar_script_mc_backup.md index 45c91d2..297e049 100644 --- a/DIX-Notes/trabajar_script_mc_backup.md +++ b/DIX-Notes/trabajar_script_mc_backup.md @@ -1,4 +1,4 @@ -cd ~/Minecraft/ && zip -r "/home/web/backups_minecraft/world_gorromina_$(date +'%d-%m-%Y_%H-%M').zip" "world_gorromina" - -rclone copy ~/backups_minecraft/ mc_backup:/mc_backup -P -v - +cd ~/Minecraft/ && zip -r "/home/web/backups_minecraft/world_gorromina_$(date +'%d-%m-%Y_%H-%M').zip" "world_gorromina" + +rclone copy ~/backups_minecraft/ mc_backup:/mc_backup -P -v + diff --git a/ELIMINAR/notas_express.md b/ELIMINAR/notas_express.md new file mode 100644 index 0000000..e69de29 diff --git a/Sin título.md b/Sin título.md new file mode 100644 index 0000000..e69de29