HDA-SERV: Configuración

hda

#60 / @RA_MeSiAs @RusTu @TRON @Hades13

Aprovechando este call: el texto de la noticia en la portada no es correcto. En realidad en este hilo no estamos configurando un NAS, ¡si no un homelab/servidor casero!

1
Yngve

cyberbunker 3.0

1
sasher

Si quieres trastear, te recomiendo que le metas node-red (nativo, no sobre Docker). Nativo porque de otra forma no vas a poder ejecutar scripts sobre el server sin hacer alguna ñapa con tuberías de entrada/salida entre tu contenedor Docker y el host.

Yo lo tengo para definir las cron de forma visual, un bot de telegram con algunos comandos y para notificaciones del server. Es muy cómodo, y ya antes de ponerme a picar ningún script tiro directamente por node-red. Además que para copias de seguridad es bastante simple: te copias los flows.json y a tirar millas.

Un ejemplillo chorra para reproducir canciones de navidad estos días en el salón automáticamente :sweat_smile:

3 1 respuesta
Uriel246

hda: "...debo comentar que no soy ningún experto..."
el servidor casero:

12 1 respuesta
hda

#64 jaja, buena esa. Pero ya sabes, cuanto más sabes más consciente eres de lo poco que sabes. Hay peña que controla muchísimo en lo salvaje. De hecho, al final estamos limitados por lo que conocemos. El mundo de la informática es tan amplio, tan grande, que hay caminos de los que desconozco su existencia. Porque si al menos sabes qué no sabes, puedes informarte sobre ello. Pero si no sabes qué no sabes... para uno aquello no existe.

Por ejemplo, gracias a #16 me he estado informando y valorando mucho si migrar a podman. En este caso podman me sonaba pero nunca me puse a leer sobre ello.
Otro ejemplo, gracias a #9 he conocido wireward. Que ni sabía de su existencia (y seguro que es algo básico para alguien que controle). Lo más probable es que meta wireward en este servidor.
O... #51, que habla en turcosueco para mí (a excepción de kubernetes y grafana xD)


Hey, #59, revisando los comentarios me he dado cuenta de que me he saltado el tuyo, disculpa. Desde que estoy en la asociación de homelabs, que es algo reciente, he conocido proxmox y esxi, porque esos tíos sí controlan un montón y los usan. Como estaban todo el día hablando de ello busqué un poco de info. Hasta donde sé, para lo que pretendo con mi homelab, sus servicios y jugueteos, se me escapa un poco montar un entorno de virtualización. No veo el caso de uso para mí. Pero sí molaría montarlo por montarlo. Solo que ahora tengo otras prioridades.

2
Lecherito

Fua, esto se me habia pasado el hilo completamente, incluso con la mencion! (Me habian hecho otra mencion y ni me di cuenta).

Muy top el currazo, ya sabes que lo hemos hablado bastante y aunque yo no haria tantas cosas como has hecho tu por aqui, me va a servir mucho para cuando haga yo el mio. Tristemente va a tardar bastante porque estoy a medias de la casa pero tengo alguna que otra cosa que hacer con el que tengo actualmente.

Me molaria tambien ver mas sobre la configuracion de las aplicaciones etc no solo del servidor a tan bajo nivel :D

1
B

#29 De este año: https://blog.jarrousse.org/2023/03/18/how-to-use-ufw-firewall-with-docker-containers/

  • Podrías automatizar cosillas con: unattended-upgrades y watchtower
  • Para una terminal mas 'potente' a mi me gusta emplear "byobu"
  • Puedes mejorar el desempeño de docker toqueteando los parámetros del sistema como 'vm.max_map_count' ... tienes un tutorial de Cisco por youtube que explica un poco de que va la historia.
  • La configuración ssh podría mejorar impidiendo que se usen protocolos ya marcados como "desfasados" y alguna otra cosilla que te interese deshabilitar por no usarla...
  • Habilitar journalctl para docker
  • Usar un proxy inverso, si usas algo como traefik seguramente te interese usar 'logrotate' para no tener un macro archivo de log (si es que lo activas en traefik).

*** No se para que usar Samba...¿en windows no se puede usar sshfs? Yo es que con sshfs y scp ¿para que más? xDD pero tampoco uso windows :/

2 respuestas
FlameThrower

scp es bastante lento, rsync por ssh mucho mejor.

2 1 respuesta
B

#68 rsync es sin duda una gran herramienta.

A raíz de tu comentario me ha dado por investigar un poco y me he topado con https://www.psc.edu/hpn-ssh-home pinta interesante.
Además, he visto un estudio de Google sobre TCP: https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36640.pdf . Respecto a este tema no me queda claro si linux ya aplica un valor de 10 por defecto a 'initcwnd'... pero según la documentación de "ip-route" se están usando los valores propuestos en el RFC2414: https://www.rfc-editor.org/rfc/rfc2414 . Donde se dice claramente "A study involving simulations of a large number of HTTP transactions over hybrid fiber coax (HFC) indicates that the use of larger initial windows decreases the time required to load WWW pages".

Un tema interesante al que darle un vistazo en profundidad!

** Si, ya por defecto se usa 10 desde hace tiempo.

hda

#67 respecto a ufw, como te decía antes, yo no he tenido ningún conflicto. Tengo que abrir los puertos en UFD para hacerlo accesible. Pero mil gracias por el enlace, seguro que si falla algo puede ser muy conveniente.

#67carracho:

Podrías automatizar cosillas con: unattended-upgrades y watchtower

Dockerizo watchtower. No conozco unnatended-upgrades. Lo ojearé.

#67carracho:

Para una terminal mas 'potente' a mi me gusta emplear "byobu"

Qué chula la terminal. Hay unas cuantas para X11 muy chulas. Una que mola es bspwm, aunque últimamente en linux voy con kitty. De todos modos, el con lo que trabajo día a día es con windows terminal (aquí un gist con mi config de wt).

#67carracho:

Puedes mejorar el desempeño de docker toqueteando los parámetros del sistema como 'vm.max_map_count' ... tienes un tutorial de Cisco por youtube que explica un poco de que va la historia.

¡Mil gracias!, lo buscaré.

#67carracho:

La configuración ssh podría mejorar impidiendo que se usen protocolos ya marcados como "desfasados" y alguna otra cosilla que te interese deshabilitar por no usarla...

Ehm... buscaré sobre esto también. ¿Es tirar de ssh config, no? La clave es saber qué protocolos son los ya desfasados para bloquearlos. ¿Tienes más info sobre esto?

#67carracho:

Habilitar journalctl para docker

No tengo ni idea de lo que es esto. Buscaré.

#67carracho:

Usar un proxy inverso, si usas algo como traefik seguramente te interese usar 'logrotate' para no tener un macro archivo de log (si es que lo activas en traefik).

Todo lo expuesto a inet lo tengo a través de traefik2, con varios middlewares, entre otros authy. Pero eso lo trataré en el siguiente hilo. Respecto a logrotate no lo conozco, ¡buscaré! Nunca me he enfrentado a leer los logs de traefik, así que pinta interesante.

#67carracho:

No se para que usar Samba...¿en windows no se puede usar sshfs? Yo es que con sshfs y scp ¿para que más? xDD pero tampoco uso windows :/

Por la comodidad completa para windows. Montar unidades de red con sencillez. Además, según lo tengo configurado, puedo compartir carpetas de solo lectura (podría ser un vector de ataque, si me comprometen windows que me borren el servidor, por ejemplo). Vamos, por comodidad.

También te digo que no he explorado sshfs, scp ni rsync para windows.


Muchas gracias por el comentario, @carracho.

1 1 respuesta
B

#70

  • Para el tema de la configuración de ssh puedes echar un ojo aquí: https://www.ssh.com/academy/ssh/sshd_config
  • journalctl es el demonio de logging de systemd ... puedes engancharlo con otro tipo de software y/o usarlo directamente con sus múltiples opciones de filtrado. Es algo que te ayuda a ver que ha pasado cuando algo sale mal.
  • El tema de logrotate te lo recomienda el mismo proyecto de traefik, ellos delegan en que usarás dicha herramienta... sino eso, lo que obtienes es un archivo de 'access.log' que va creciendo sin control... y te puedes encontrar un día con gigas de datos consumidos por el archivo xD (todo depende del traqueteo que tenga el servidor claro...)
  • scp es eso, 'cp' por ssh... rsync es más potente... por ejemplo, solo mueve contenido nuevo y en caso de mover muchos archivos pequeños también tiene ventaja, entre otras cosejas que permite hacer. Por poder puedes levantar un servicio rsync y usar su propio protocolo.

De nada! espero que te sea de ayuda y de paso yo también aprender algo nuevo si cae :) igual tu ves algo a raíz de lo que yo te pueda comentar que nos termine siendo útil a ambos.

2
hda

Versión 1.1R0 (12/12/2023)

Changelog

  • Corregidas un montón de erratas
  • Añadido el comando para deshacer los privilegios para escuchar puertos bajos
  • Añadida la instalación de Network Time Protocol
  • Añadida la instalación y configuración de pi-hole
  • Añadido Unattended-Upgrades
  • Incrementada la memoria virtual de los contenedores
  • Configurado docker para usar journald system
  • Añadida una configuración de logrotate para traefik en avance

Gracias @carracho por el feedback. Por cierto, no he sido capaz de encontrar el vídeo de cisco y docker que mencionas.

3 1 respuesta
B

#72 Yo tampoco lo encuentro... la nota que tengo apuntada es de hace 13 meses. Recuerdo que el dato se presentaba en un 'powerpoint' mientras el tipo comentaba un poco el asunto. Se que es de cisco porque en otro archivo lo tengo en el comentario... pero no enlacé el vídeo :/
Yo lo que tengo en mis notas (trilium, un servicio que recomiendo levantar):

  • Ampliar el tamaño de la 'Virtual Memory Area':
    vm.max_map_count=262144
    El kernel utiliza áreas de memoria virtual para mantener un registro de las asignaciones de memoria de los procesos
    Info Adicional: https://www.suse.com/support/kb/doc/?id=000016692
  • Kernel virtual memory accounting mode (1 = always overcommit, never check)
    vm.overcommit_memory=1
    En este modo cuando un proceso utiliza, por ejemplo, malloc, no se comprobará por parte del sistema operativo si tiene espacio... lo que terminará en un crasheo

Entender vm.overcommit_memory:

Setting overcommit_ratio to 80 is likely not the right action. Setting the value to anything less than 100 is almost always incorrect.

The reason for this is that linux applications allocate more than they really need. Say they allocate 8kb to store a couple character string of text. Well thats several KB unused right there. Applications do this a lot, and this is what overcommit is designed for.

So basically with overcommit at 100, the kernel will not allow applications to allocate any more memory than you have (swap + ram). Setting it at less than 100 means that you will never use all your memory. If you are going to set this setting, you should set it higher than 100 because of the fore-mentioned scenario, which is quite common.
However, while setting it greater than 100 is almost always the correct answer, there are some use cases where setting it less than 100 is correct. As mentioned, by doing so you wont be able to use all your memory. However the kernel still can. So you can effectively use this to reserve some memory for the kernel (e.g. the page cache).

Now, as for your issue with the OOM killer triggering, manually setting overcommit will not likely fix this. The default setting (heuristic determination) is fairly intelligent.

If you wish to see if this is really the cause of the issue, look at /proc/meminfo when the OOM killer runs. If you see that Committed_AS is close to CommitLimit, but free is still showing free memory available, then yes you can manually adjust the overcommit for your scenario. Setting this value too low will cause the OOM killer to start killing applications when you still have plenty of memory free. Setting it too high can cause random applications to die when they try to use memory they were allocated, but isnt actually available (when all the memory does actually get used up).

2
1 mes después
n40k1

No sé si es el post adecuado, pero a raíz de este hilo quiero compartir un par de tonterías que me configuré para Plex. Yo lo tengo en una VM pero por si le sirve a alguien :wink:

Actualizar automáticamente Plex Server: https://github.com/rafa-ga/auto-update-plex

Descargar vídeo o audio (solo, en plan podcast) de YouTube vía yt-dlp.

Audio: yt-dlp --extract-audio --audio-format mp3 --audio-quality 0 --embed-thumbnail --parse-metadata "%(uploader)s:%(album)s" --embed-metadata -o "/mnt/western_digital/Podcasts/%(uploader)s - %(title)s.%(ext)s" https://youtu.be/R83W2XR3IC8

Vídeo: yt-dlp -4 I :1 -w --remux-video "mkv" -f "bv+ba/b" -o "/mnt/western_digital/YouTube/%(uploader)s - %(title)s.%(ext)s" https://youtu.be/R83W2XR3IC8

Esto último lo uso desde el móvil mediante un atajo de iOS. En YT Compartir » Copiar enlace y luego ejecutar atajo.

1 1 respuesta
hda

#74 Hey, genial aporte. Interesante el autoupdater de plex y el uso del yt-dlp. Cuando monte el tercer hilo, con los microservicios, ahí estaría guay que volvieses a repetir este comentario, para los que se puedan acercar a sacar ideas.

1 1 respuesta
n40k1

#75 ¡Gracias! :wink: Estaré al loro para repostear.

29 días después
jilker

Ayer seguí tu guía al pie de la letra y puedo decir que tengo un servidor montado en casa. Muchas gracias por el curro de documentar y compartir todo.
No he utilizado nunca docker, ¿Alguna recomendación de por donde empezar? Me gustaría desplegar cositas básicas como plex, un transmission...
Esperando con ganas la última parte.

1 1 respuesta
hda

#77 ¡Hey! Me alegro mucho porque a alguien le haya servido.

Respecto a desplegar en docker (no dockerizar), la verdad es que es bastante sencillo. Yo te recomendaría buscar por internet cualquier guía básica de despliegue en docker para luego tirar ya por docker compose (un orquestador para gestionar varios despliegues). Empieza, por ejemplo, con un microservicio como transmisión.

Tengo el server un poco parado por problemas familiares, en tanto recupere fuerzas me pondré con la última parte :)

2 1 respuesta
15 días después
Zireael

Ya que lo has puesto en el otro hilo, sobre Firefly III.

En su momento instalé Firefly y el importer pero no he visto cómo hacer la importación directa con el banco mediante psd2 como indicas. Puedes explicar?

#78

1 respuesta
hda

#79 buenas. Yo no he auto-importado mediante psd2 mis cuentas, porque llevo años registrando todo a mano en otra aplicación. Lo que hice fue un ETL desde la base de datos en la que trabajaba a otra compatible con firefly importer. Mediante el importer se cargaron las cuentas, los actores y los apuntes en firefly iii.

Lo que me preguntas es cómo usar firefly importer contra tus cuentas bancarias, no te puedo guiar porque nunca lo he hecho, pero la documentación del firefly iii e importer es buena.

1
2 meses después
S

Me pregunto si existe alguna forma más sencilla "un servidor multimedia-nube, para fotos, videos privados, música y pelis" para alguien como yo que no se quiere meter en mucho código, lo más lejos que he llegado es montar la Raspberry como Plex server y ya me pareció suficiente complicación. Para series y pelis lo puse. La verdad que estoy contengo porque solo lo uso yo y me va en móvil, tablet, amazon, fire... cuando viajo a través de la red, pero es cierto que cuando le pongo pelis o series que pesan mucho la raspberry no tira..xD

Digo que me gustaría ampliar ese Plex de alguna manera para que suba mis fotos y videos del móvil como hacía Google fotos, que me he cansado de pagarles, tenía más de 300 gigas solo de fotos y videos de viajes sacados con movil, sería genial. Pero solo ver tanto índice y código da una embolia visual..

3 respuestas
hda

#81 soluciones privadas en la nube existen seguro, aunque en lo personal pienso que es mejor montártelo por tu lado en Amazon Web Services, controlando tú tus datos y previsiblemente reduciendo de forma sustancial los costes. Pero, claro, tienes que controlar AWS y ser consciente de que entraña un coste mensual, tanto mayor cuanto más exigente sea lo que estés montando/la capacidad de lo que estés montando.

De todos modos, si tienes este conocimiento técnico de AWS, lo más probable es que algo así te salga bastante mejor que montar tu servidor casero, si es que te piensas comprar uno (en mi caso he aprovechado mi PC antiguo). El punto de equilibrio entre la inversión en hardware domiciliario vs el gasto sostenido en AWS ─siempre dependiendo de lo que hagas─ suele encontrarse a medio-largo plazo. Por ejemplo, en mi empresa consideramos oportuno invertir los 8k+ € de la caja de este ordenador frente a pagar los servicios equivalentes en AWS. Si conseguimos durar unos 4 años la inversión en este PC nos saldrá mejor que el coste sostenido equivalente en AWS (y eso que seguimos usando AWS).

Bueno, también me convenía tener un pepinaco para viciar, las cosas claras xDDD

1 respuesta
sasher

#67 Está usando Docker en modo rootless, no le hace falta hacer nada con ufw porque cualquier puerto que publique no se va a abrir automáticamente en ufw, cosa que sí ocurre en una instalación de Docker root.

Por cierto, interesantísimo post. Hace poco tuve que configurar un servidor con Ubuntu Server y la mayoría de lo que indicas tuve que hacerlo. Por añadir algo más, échale un ojo a cockpit para gestionar el servidor desde una interfaz web y, en caso de que quieras permitir que otros usuarios puedan acceder al servidor en el futuro, puedes limitar el uso de recursos hardware con systemd y cgroups, por ejemplo:

cat <<EOF | sudo tee "/etc/systemd/system/user-${user_id}.slice"
[Slice]
MemoryMax=32G
CPUQuota=400%
MemorySwapMax=0
EOF

Los procesos de ese usuario solo podrán usar, como máximo, 4 núcleos, 32GB de memoria y sin swap.

1 2 respuestas
B

#83 ¿Tienes algún enlace con info al respecto? Solo veo que limita los puertos "especiales": https://docs.docker.com/engine/security/rootless/#exposing-privileged-ports.

En docker "normal" (sin rootless) tienes que abrir puertos en ufw... de hecho, yo lo que expongo es que tienes que cambiar algunas cosillas para que ufw realmente llegue a bloquear las peticiones hacia el contenedor.

Y ya puestos... si quieres "asegurar" que nadie te jode usando del "daemon" de docker... ¿porque no usar podman? y ya te quitas "daemons" de encima jejeje

1 respuesta
sasher

#84 Link con más info ni idea, te hablo desde mi experiencia. Hace 2 semanas, publicando el 7002 desde el contexto rootless de mi usuario no había forma de acceder a él de forma externa hasta que lo abrí en ufw, así que diría que se aplica a todos. El link que pones es para puertos privilegiados; un usuario usando Docker rootless no puede publicar el puerto 80 (por ejemplo) en ninguno de sus servicios, por lo que tiene que hacerlo alguien con privilegios de root.

Sobre lo que comentas del Docker normal es así, sí. Lo que ocurre es que Docker por defecto te abre los puertos en iptables sin que tú tengas que hacer nada (cosa que no ocurre con Docker rootless).

Lo de podman ni idea, la verdad es que nunca lo he usado. Para que te hagas una idea, mi caso de uso con Docker rootless es permitir a los usuarios de mi servidor hacer lo que quieran con Docker (sin privilegios) y, si luego hay que exponer sus servicios a internet (bajo petición previa), me voy al nginx que se ejecuta sobre el daemon root de Docker y monto el proxy hacia su puerto.

2 1 respuesta
hda

#83 ¡Gracias por tu comentario! La verdad es que, como he dicho ya en algunas ocasiones XD, para mí esto es un juego y no tengo claro si lo estoy haciendo bien. Mis prioridades son montar el juguete de una forma suficientemente segura. Todo comentario de gente que controle es bienvenido, todo ayuda a mejorar. De ahí que esté tan agradecido a las muchas aportaciones que otros compañeros foreros han hecho en el hilo, en especial a @carracho :D

3 1 respuesta
B

#85 Ook! gracias por aclarar. Yo es que nunca he usado "rootless"... por eso me interesaba algo de docu jejeje, pero vamos... si tu tienes experiencia, ya tienes mucho más que yo :P

#86 Me interesa el tema :) Quiero empezar a migrar todo para usar kubernetes y podman es mi siguiente parada. Iré comentando por aquí si veo algo interesante... pero vamos, en principio aún va para largo el que me ponga a ello.

2
Erterlo

#81 Yo uso plex, al principio como tú en una raspberry, pero tenía el mismo problema, depende que película o me iba a trompicones o no iba, actualmente utilizo un ordenador viejuner, el sitio donde hago mantenimiento tira equipos cada 4/5 años y me hice con uno y toda la memoria que pude meterle. (HP PRODESK 600 G1 SFF + 32Gb Ram)

Plex lo tengo para ver películas cuando estoy fuera de casa, para dentro de casa tengo Kodi.
Para el tema de la nube utilizo Nextcloud, no es extremadamente complicado instalarlo y gestionarlo, pero hay que saber unos mínimos.

1 2 respuestas
hda

#88 yo intenté montar el nextcloud en el NAS pero el pobre no podía con tanto. A pedos que iba. En cambio, sí es mi intención montarlo en este servidor.

1 respuesta
AstroTurfer

Un minipc Nipogi AK1 Plus N100 + 16 GB RAM tengo yo tirando con Plex (Plex Pass y HW transcoding) y Nextcloud para acceso remoto, 8TB + 8TB (backup). En un Ubuntu 22.04 LTS. Con un consumo medio de unos 6-7W y una conexión FTTH de 1Gbps simétrico. De momento me va de fábula, aunque aún guardo los documentos más importantes en Google Drive. Realmente hice esto para quitarme la suscripción de Google Drive de 2TB.

3 2 respuestas