# Servidor hosting público

Para ubuntu server 22.04

Vamos a usar LEMP stack (Linux, nginx, MySQL, PHP)

cloudfare con tunel VPN

Webmin + Virtualmin como gestores

## Dominio

El dominio es básico para comenzar con el servidor, es nuestro paso previo a trabajar de cara al "público" así que primero de todo regístrate con el plan gratuito a C**loudfare**.

Para comprar dominio, te recomiendo el propio registro de [cloudfare ](https://dash.cloudflare.com/89eb799f5db929f7ea7563313dbca063/domains/register)pero tienes mas en [godaddy ](https://www.godaddy.com/es-es/offers/domain?isc=sem3year\&countryview=1\&currencyType=EUR\&cdtl=c_698037026.g_1246846828948980.k_kwd-77928289880216:loc-170.a_.d_c.ctv_o\&bnb=b\&msclkid=092afeb9d80b1a55ba479993aba4500c\&utm_source=bing\&utm_medium=cpc\&utm_campaign=es-es_dom-reg_sem_ni_b_all-devices_aware-consider_x_pros_intl_exact-stag_001\&utm_term=godaddy%20dominio\&utm_content=%5Bgd-dom%5D)(donde son a veces más baratos) o en [cdmon ](https://www.cdmon.com/es/)(más nacional). En cualquier caso, si ya tuvieras un dominio podrías [transferirlo manualmente](https://dash.cloudflare.com/89eb799f5db929f7ea7563313dbca063/websites).

<figure><img src="https://539580950-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiKvwltOme7zTxep3LVyW%2Fuploads%2F2IMUonUH0mWdCuIqdbs9%2Fimage.png?alt=media&#x26;token=7d24337d-5929-49d4-ae9d-0bcd067f114c" alt=""><figcaption><p>Como ves, yo ya tengo uno activo pero puedo transferirlo o registrar más si quisiera</p></figcaption></figure>

## Configuración DNS

Vamos con la parte interesante, la del DNS público.

Anteriormente hemos trabajado con nuestro propio DNS de BIND9 pero ahora con Cloudfare lo interesante es que este DNS es público por lo que podemos crear los registros que nos interese que se muestren de nuestro dominio.

Para empezar debemos acceder a DNS>Registros

<figure><img src="https://539580950-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiKvwltOme7zTxep3LVyW%2Fuploads%2FTAyrXTnTO6xzILsoSaD2%2Fimage.png?alt=media&#x26;token=0393ec98-2141-4487-a939-cafcb6cc614d" alt=""><figcaption><p>Lo que ves ahí es el listado de registros (yo ya tengo uno del tunel cloudfare que está más adelante en la explicación.</p></figcaption></figure>

En "servidores de nombres" aparecen los nombres de nuestros DNS públicos que deberemos añadir a nuestro servidor para que funcionen los registros, vamos a crear algunos:

| Registro | Nombre   | Dirección   |
| -------- | -------- | ----------- |
| A        | @ (raiz) | IP local    |
| MX       | mail     | example.org |
|          |          |             |

Dejemoslo así por el momento...

## Instalar webmin

Para instalar Webmin debemos seguir la documentación oficial que podemos encontrar aquí. Si has instalado mas servicios o aplicaciones en Linux (como puede ser un wordpress) verás que no tiene mucha complicación.

1. Empieza por descargar el script de *bash* (si no tienes la utilidad `curl` instálala con `sudo apt install`):

```bash
curl -o webmin-setup-repos.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repos.sh
```

2. Ejecuta el script descargado que añadirá webmin al repositorio de aplicaciones oficial:

```bash
sudo sh webmin-setup-repos.sh
#o bien:
sudo ./webmin-setup-repos.sh
```

3. Instala webmin con apt:

```bash
apt-get install webmin --install-recommends
```

4. Para acceder a Webmin es tan sencillo como ir al navegador y escribir `https://<Your-Server-IP>:10000` . Revisa que tu firewall te permita conexiones a través del puerto 10000.

Por ahora verás que no tiene certificado SSL por lo que no tiene mucho sentido usar https pero funcionará igual. Para entrar usa el usuario y contraseña del propio servidor.

En caso de que quisieras parar el servicio es tan sencillo como `systemctl stop webmin`

Antes de instalar Virtualmin, debemos pasar a la parte de registro de dominio en nuestro servidor, para ello tenemos dos posibles metodos:

* Con un DDNS que nos permita registrar la IP pública activa para que se vaya reenviando según cambie
* Con un tunel VPN que conecte directamente con el dominio público

Enseñaré ambas:

### Crear DDNS (dinámico) con docker

(Esto esta en construcción, tengo que mirar como hacerlo sin depender de docker)

Debemos crear la API key necesaria de cloudfare (perfil>API tokens), revisate el enlace de docker hub que te da mas información.

Debemos dar permisos, lanzar el docker que actualizará los registros, siempre que este activo el docker, funcionara el DDNS.

<figure><img src="https://539580950-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiKvwltOme7zTxep3LVyW%2Fuploads%2FXLTU63qBZsrXYlTuBHdP%2Fimage.png?alt=media&#x26;token=f45aa581-8302-4ceb-b8b9-4e8d1ae3b7fd" alt=""><figcaption></figcaption></figure>

### Túneles VPN con cloudfare

El método para conseguir un tunel VPN es a través de la aplicación **zerotrust** dentro de nuestra interfaz de Cloudfare que encontrarás en la columna izquierda.

Al entrar te pedirá crear un equipo, este nombre debe ser único, a continuación te harán elegir un plan, elige el gratuito que nos ofrece:

* limite de 50 asientos
* Controles de Zero Trust
* Hasta 3 localizaciones de redes (para trabajos con DNS de oficina)
* Reglas de filtrado de capa 7 (HTTP)&#x20;
* Soporte de Roaming para usuarios vía WARP
* Hasta 24h de logs

Con esto veremos la siguiente pantalla:

<figure><img src="https://539580950-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiKvwltOme7zTxep3LVyW%2Fuploads%2FWI6Fvq1cGMEXjC7oTbCQ%2Fimage.png?alt=media&#x26;token=cdd91373-8d25-4d05-bd30-85ed506e7d64" alt=""><figcaption><p>Interfaz de trabajo de Zero trust</p></figcaption></figure>

Desde aquí accedemos a Networks>Tunnels>Add tunnel

<figure><img src="https://539580950-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiKvwltOme7zTxep3LVyW%2Fuploads%2Fk0BRfWVBsoiAAu6zRY9O%2Fimage.png?alt=media&#x26;token=ad141869-db79-4f80-b4eb-74d1e0d6617e" alt=""><figcaption></figcaption></figure>

Seleccionamos "*cloudfared*" (<mark style="color:red;">tengo que investigar WARP por que parece una buena solución</mark>). Sigue los pasos ahora:

1. Ponle un nombre para identificarlo (Por ejemplo galaxy-edge)
2. Elegimos la plataforma de Debian (Ubuntu cof cof) de 64 bits

<figure><img src="https://539580950-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiKvwltOme7zTxep3LVyW%2Fuploads%2FQ4TbFx2hOW71swBYLbX3%2Fimage.png?alt=media&#x26;token=6f74c15d-2a20-44ab-93d9-502128c849e6" alt=""><figcaption><p>Interfaz de tunel</p></figcaption></figure>

Ahí verás las instrucciones de lo que tienes que hacer, simplemente copia el comando de la izquierda y pégalo en tu terminal de Linux.

{% hint style="info" %}
Recuerda que puedes comprobar tu versión de SO usando el comando `uname`:

```bash
uname -m
```

* Si el resultado es `x86_64`, entonces tienes una versión de **64 bits**.
* Si el resultado es `i386` o `i686`, entonces tienes una versión de **32 bits**.
  {% endhint %}

3. Una vez ejecutado el comando correctamente, abajo deberia aparecer la nueva conexión creada con el token:

<figure><img src="https://539580950-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiKvwltOme7zTxep3LVyW%2Fuploads%2FsZ3IAxn7lor56FqXMcw5%2Fimage.png?alt=media&#x26;token=9f27c03d-4d46-42ab-8259-e89408393dc0" alt=""><figcaption><p>Conexión correcta!</p></figcaption></figure>

4. Continua con el proceso de autenticación de dominio:

<figure><img src="https://539580950-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiKvwltOme7zTxep3LVyW%2Fuploads%2Fo8A6Ob191gRnGskLJ4yn%2Fimage.png?alt=media&#x26;token=40555bc8-606c-4ab2-86d4-93a52ece02f2" alt="" width="563"><figcaption><p>Campos obligatorios</p></figcaption></figure>

Rellena el formulario con los siguiente:

* **subdominio**: www por ejemplo
* **dominio**: el registrado previamente
* **path**: por si quieres añadirle el acceso a un recurso o carpeta concreta
* **type**: el tipo de túnel, en nuestro caso http pero luego crearemos un ssh también
* **URL**: la IP local del servidor.

## Instalar Virtualmin

Para instalar virtualmin tambien debemos recurrir a la [documentación oficial](https://www.virtualmin.com/download/), como siempre (RTFM!).

Recuerda que uno de los requisitos de uso de Virtualmin es tener un FQDN de nuestro servidor y que, a ser posible, no sea el mismo que el de la web (por ejemplo ns1.example.org y el de la web [www.example.org](http://www.example.org)) tal y como dice la [documentación](https://www.virtualmin.com/docs/installation/automated/#fully-qualified-domain-name).

Sigue los pasos:

1. Obtenemos el script de bash que es la forma más sencilla y fácil de hacerlo, para ello descargatelo con:

```
curl -fsSL https://software.virtualmin.com/gpl/scripts/virtualmin-install.sh -o virtualmin-install.sh
```

2. Una vez descargado deberemos instalarlo ejecutando el script, en nuestro caso trabajaremos con la pila LEMP así que le especificaremos ese stack:

```
sh virtualmin-install.sh --bundle LEMP
```

3. Nos pedirá una serie de requisitos

* Espacio disponible de 2GB
* Un FQDN (nuestro dominio www en este caso)

<figure><img src="https://539580950-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiKvwltOme7zTxep3LVyW%2Fuploads%2FSbKIVVC9OMJHMCbDuH2T%2Fimage.png?alt=media&#x26;token=9398c665-8e3b-4001-984a-33546d55932e" alt="" width="357"><figcaption><p>Aquí se está instalando el sistema</p></figcaption></figure>

Y si todo ha ido bien ahora deberia mostrar el siguiente mensaje:

```
[SUCCESS] Installation Complete!
[SUCCESS] If there were no errors above, Virtualmin should be ready
[SUCCESS] to configure at https://www.example.org:10000 (or https://192.168.1.50:10000).
```

Y al acceder al enlace:

<figure><img src="https://539580950-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiKvwltOme7zTxep3LVyW%2Fuploads%2FIOMl35mvKIGFDdg3tUuJ%2Fimage.png?alt=media&#x26;token=51a72d67-b062-421d-a2ef-68171721e9d7" alt=""><figcaption><p>Fijate que ya funciona con https directamente</p></figcaption></figure>

Ahora solo nos falta crear el host.

### Creando el host web

## :construction: Configuración de certificado SSL con cloudfare

## :construction: Configuración de email con virtualmin

{% embed url="<https://youtu.be/3sanf6SZh54?si=koKzd4HMKlg6JFJt>" %}

{% embed url="<https://www.youtube.com/watch?v=EwPKKQbrsx8&ab_channel=Hosting%26Stuff>" %}

***

#### Referencias:

* Documentación oficial webmin: <https://webmin.com/download/>
* Instalación webmin+virtualmin: <https://punkymo.gitbook.io/miwiki/servicios/webmin-+-virtualmin>
* Tutorial webmin con cloudfare: <https://youtu.be/WD3eqbTXGJM?si=3guF4fQgO85uash5>
* Configuración DDNS con cloudfare: [**https://www.youtube.com/watch?v=TydrRKnq-Xs**](https://www.youtube.com/watch?v=TydrRKnq-Xs)
* Configuración tunel con cloudfare: <https://youtu.be/MyJlI_pRGKs?si=HAvmDP2vN64xEY0D>
* **Configurar host web con virtualmin:** [**https://youtu.be/VEFDSZpGFFc?si=rmK7Gyw39VSjMZ2B**](https://youtu.be/VEFDSZpGFFc?si=rmK7Gyw39VSjMZ2B)
* Guía virtualmin: <https://www.youtube.com/watch?v=laP1MDpV5ac&ab_channel=ArgentinaVirtual>
