Skip to content

Commit

Permalink
Merge branch 'main' of github.com:ComicIvans/server
Browse files Browse the repository at this point in the history
  • Loading branch information
HipyCas committed Jan 28, 2024
2 parents 6c1d92e + 7a3e3f3 commit 4a62291
Show file tree
Hide file tree
Showing 119 changed files with 20,523 additions and 4,167 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:

- uses: actions/setup-node@v1
with:
node-version: '16.13.2'
node-version: '20.10.0'

- name: Install and Build 🔧
run: |
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ docs/.vitepress/dist/
docs/.vitepress/cache/
**/*.env
pnpm-lock.yaml
package-lock.json

# Docker FS volume mappings (just for testing)
db/
Expand Down
15 changes: 9 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,26 @@
# Server

Este repositorio contiene los **archivos de configuración** que se han usado en el servidor de casita.

Además, incluye una **guía detallada de todo el proceso** que se ha seguido para poner el servidor en funcionamiento.

Esa guía se divide en dos partes y tiene una tercera de relatos:
1. [Preparación del equipo](https://comicivans.github.io/server/equipo/hardware)
2. [Instalación de servicios específicos](https://comicivans.github.io/server/servicios/minecraft)
3. [Relatos de dramas ocurridos](https://comicivans.github.io/server/relatos/initramfs-vs-router)

1. [Preparación del equipo](https://wupp-dev.github.io/server/equipo/historia)
2. [Instalación de servicios específicos](https://wupp-dev.github.io/server/servicios/nextcloud)
3. [Relatos de dramas ocurridos](https://wupp-dev.github.io/server/relatos/bloqueo-ssh.html)

---

Puedes **consultar la guía** en [este enlace](https://comicivans.github.io/server/) o puedes compilarla tú mismo descargando el repositorio:
Puedes **consultar la guía** en [este enlace](https://wupp-dev.github.io/server/) o puedes compilarla tú mismo descargando el repositorio:

1. Necesitarás `npm` o `pnpm` instalado. Puedes descargar NPM [aquí](https://github.com/nodesource/distributions/blob/master/README.md) y PNPM [aquí](https://pnpm.io/installation). Si decides instalar PNPM, cuando en un comando haya que poner `npm` tendrás que sustituirlo por `pnpm`.
2. Abre una terminal en la carpeta raíz del repositorio y escribe `npm install`
3. Ejecuta `npm run docs:build` y `npm run docs:serve` *(si esto no funciona, utiliza en su lugar `npm run docs:dev`)*
3. Ejecuta `npm run docs:build` y `npm run docs:serve` _(si esto no funciona, utiliza en su lugar `npm run docs:dev`)_
4. Abre el enlace que aparezca en la consola y podrás ver la guía.

---

La guía está hecha en Markdown con [VitePress](https://github.com/vuejs/vitepress) y está alojada en este repositorio con GitHub Pages.

Además, se publica automáticamente tras cada cambio gracias a [esta guía](https://jamesiv.es/blog/github/actions/2022/01/23/deploying-to-github-pages-with-github-actions).
Además, se publica automáticamente tras cada cambio gracias a [esta guía](https://jamesiv.es/blog/github/actions/2022/01/23/deploying-to-github-pages-with-github-actions).
23 changes: 18 additions & 5 deletions docs/.vitepress/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ const guideSidebar = [
text: "Equipo",
collapsible: true,
items: [
{ text: "Historia", link: "/equipo/historia" },
{ text: "Hardware", link: "/equipo/hardware" },
{
text: "Instalación del SO encriptado",
Expand All @@ -24,6 +25,10 @@ const guideSidebar = [
text: "Configurando MariaDB con Docker",
link: "/equipo/mariadb-docker",
},
{
text: "Conectando varios servidores",
link: "/equipo/conectando-servidores",
},
],
},
{
Expand All @@ -34,6 +39,10 @@ const guideSidebar = [
text: "Nextcloud - Almacenamiento",
link: "/servicios/nextcloud",
},
{
text: "Minio - Almacenamiento S3",
link: "/servicios/minio",
},
{ text: "Minecraft con AMP", link: "/servicios/minecraft" },
{
text: "Dozzle - Visualizador de logs",
Expand All @@ -60,11 +69,15 @@ const guideSidebar = [
text: "Lucas vs. Debian & Docker & etc.",
link: "/relatos/usuario-docker",
},
{
text: "Resolución de dominios en initramfs",
link: "/relatos/dns-initramfs",
},
],
},
];

export default defineConfig({
export default {
title: "Servidor mamadísimo",
description: "Guía del servidor.",
lang: "es-ES",
Expand All @@ -79,15 +92,15 @@ export default defineConfig({
{ text: "Inicio", link: "/", activeMatch: "" },
{
text: "Guía del servidor",
link: "/equipo/hardware",
link: "/equipo/historia",
activeMatch: "/(equipo|servicios)/",
},
{
text: "Archivos de configuración",
link: "https://github.com/ComicIvans/server",
link: "https://github.com/wupp-dev/server",
},
],
socialLinks: [{ icon: "discord", link: "https://discord.gg/YdnmG5v8" }],
socialLinks: [{ icon: "discord", link: "https://discord.gg/2pdbaf6Ugz" }],
sidebar: {
"/equipo/": guideSidebar,
"/servicios/": guideSidebar,
Expand All @@ -99,4 +112,4 @@ export default defineConfig({
"Copyright © 2022-presente Lucas de Uña Ocampo e Iván Salido Cobo",
},
},
});
};
123 changes: 123 additions & 0 deletions docs/equipo/conectando-servidores.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
---
title: Conectando varios servidores
lang: es-ES
---

# Conectando varios servidores

Llega un momento en el que un ordenador se queda corto, sobre todo si quieres usarlo para Minecraft. Así que nuestra solución fue añadir otro a la colección pero, ¿cómo conectamos ambos para que respondan bajo un mismo dominio?

## Introducción

Lo primero que tendremos que hacer con el nuevo ordenador es seguir toda esta guía para llegar a tenerlo en un punto usable. Eso sí, tendremos que escoger dos nuevos puertos para OpenSSH Server y Dropbear, pero por lo demás es todo igual hasta que llegamos a Nginx. Que no se nos olvide asignarle una IP local fija que, asumiremos que es `192.168.1.144`. Si hacemos referenci a la IP local del servidor principal, asumiremos también que es `192.168.1.133`.

## Nginx

Llegados a este punto, lo ideal sería tener un tercer ordenador (como una Raspberry) con Nginx para gestionar las conexiones y que simplemente haga de proxy inverso hacia los otros ordenadores, que tendrán los distintos servicios.

Como no nos sobra el dinero para tener todavía otro más, hemos optado por seguir usando el ordenador principal para gestionar las conexiones y que el de Minecraft simplemente se comunique con el otro y no con el exterior (salvo por el SSH).

### Internet <-> Servidor principal

Para empezar tenemos que configurar Nginx para que lo único que haga al recibir una solicitud que deba de ir al ordenador secundario sea gestionar la conexión HTTPS y comunicarse con el ordenador secundario. En nuestro caso queremos redirigir los subdominios `mc.wupp.dev` y `amp.wupp.dev` (entre otros) al servidor secundario para servir NamelessMC y el panel de control de Minecraft respectivamente.

El archivo de configuración de Nginx para los dos dominios debería de quedar igual. Este sería el de `amp.wupp.dev` por ejemplo:

```nginx
server {
server_name amp.wupp.dev;
location / {
proxy_pass https://192.168.1.144;
proxy_ssl_session_reuse on;
proxy_ssl_verify off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/amp.wupp.dev/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/amp.wupp.dev/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
```

Aunque las opciones `proxy_ssl_session_reuse on;` y `proxy_ssl_verify off;` ya tienen esos valores por defecto, he preferido especificarlas para tenerlas más en cuenta. La primera lo que hace es reutilizar los parámetros del SSL handshake para que las conexiones requieran menos recursos al establecerse. La segunda le indica a Nginx que no debe indicar si el certificado del ordenador secundario es válido, pues utilizaremos uno *self-signed* para facilitar las cosas (y esos no se consideran válidos tal cual).

### Servidor principal <-> Servidor secundario

En el servidor secundario, a parte de instalar Nginx y configurarlo tal y como dice esta guía, hay que modificar `/etc/nginx/nginx.conf` para quitar todas las líneas de configuración de *OSCP stapling*, pues entre el ordenador principal y el secundario no será necesario usarlo.

Debian debería venir con un paquete llamado `ssl-cert` que genera un certificado *self-signed* al instalarse, así que también deberíamos tener un certificado en `/etc/ssl/certs/ssl-cert-snakeoil.pem` que será el que usaremos para que la conexión entre el servidor principal y el secundario pueda ser por HTTPS.

Para usarlo, simplemente debemos incluirlo en el archivo de configuración como si se tratase del certificado de certbot:

```nginx
listen 443 ssl;
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
```

## Correo electrónico

Si nos hemos decidido a configurar un servidor de correo en el ordenador principal, se nos puede dar el caso en el que un servicio del ordenador secundario necesite mandar correos a través del servidor de correo que hayamos configurado.

Para asegurar que funcione correctamente, utilizaremos y configuraremos `exim4` en el servidor secundario. Empezamos instalándolo con `sudo apt-get install exim4-daemon-light` y pasamos a configurarlo editando `sudo nano /etc/exim4/update-exim4.conf.conf`. Para nuestro caso concreto:

```
# /etc/exim4/update-exim4.conf.conf
#
# Edit this file and /etc/mailname by hand and execute update-exim4.conf
# yourself or use 'dpkg-reconfigure exim4-config'
#
# Please note that this is _not_ a dpkg-conffile and that automatic changes
# to this file might happen. The code handling this will honor your local
# changes, so this is usually fine, but will break local schemes that mess
# around with multiple versions of the file.
#
# update-exim4.conf uses this file to determine variable values to generate
# exim configuration macros for the configuration file.
#
# Most settings found in here do have corresponding questions in the
# Debconf configuration, but not all of them.
#
# This is a Debian specific file
dc_eximconfig_configtype='satellite'
dc_other_hostnames='mcserver'
dc_local_interfaces='127.0.0.1 ; ::1'
dc_readhost='wupp.dev'
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost='192.168.1.133:587'
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname='true'
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'
```

donde `192.168.1.133:587` es la IP local del ordenador principal y el puerto donde esté ESMTP con STARTTLS.

También editamos `sudo nano /etc/exim4/passwd.client`:

```
# password file used when the local exim is authenticating to a remote
# host as a client.
#
# see exim4_passwd_client(5) for more documentation
#
# Example:
### target.mail.server.example:login:password
*:[email protected]:passw
```

donde `[email protected]` y `passw` es un correo y su contraseña del ordenador principal.

Aplicamos los cambios con `sudo update-exim4.conf` y con `sudo /etc/init.d/exim4 restart`.

Esto nos permitirá que, mandando correos desde el servidor secundario a sí mismo al puerto 25, se redirijan al servidor principal y salgan desde allí.
4 changes: 4 additions & 0 deletions docs/equipo/docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,3 +132,7 @@ Obviamente no siempre tendremos que usar tantas opciones para un servicio, pero
Te recomiendo que leas la [documentación oficial de Docker Compose](https://docs.docker.com/compose/) para saber cómo funciona exactamente el archivo.

Lo dicho, según vayamos viendo los diferentes servicios se irán mostrando los extractos del archivo para el correspondiente servicio para que así podáis cómodamente seleccionar que servicios queréis.

## Particularidades

Como nosotros tenemos `/var` en el disco duro mecánico, tuvimos que mover la carpeta con las imágenes de docker al disco SSD porque la diferencia de rendimiento es abismal. Lo único que tuvimos que hacer para ello fue mover la carpeta de docker con `sudo mv /var/lib/docker /` y crear un enlace simbólico con `sudo ln -s /docker/ /var/lib/docker`.
Loading

0 comments on commit 4a62291

Please sign in to comment.