Y si me gusta linux? Pues, lo uso para mi servidor de FiveM 🐌
Tags: fivem, linux, txadmin
Published: 2022-10-29 16:39:26

El roleplay es algo que descubrí al inicio de la pandemia, durante el aislamiento fue una forma de "interactuar" con las personas, pude aprender también a ser staff para las comunidades, aprendí a programar en `lua`, el lenguaje utilizado para los scripts de FiveM y pues, también conseguí el motivo para aprender JavaScript, para tener alternativas propias a bots para Discord;

Durante bastante tiempo consideré la idea de tener un servidor propio y, este año lo llevaremos a cabo, la fase de desarrollo es muy tediosa y larga pero ya vamos al 90% de terminar de acomodar varias cosas (vale, no tenemos mucho tiempo para trabajar por este pero el poco que hay lo aprovechamos lo mas posible)...

Y; levantar un servidor en Windows siempre fue fácil, tan solo ejecutar un `.exe` que te dirá todo lo que debes hacer para que todo vaya funcionando y listo, pero con linux, es un poco mas tedioso al tener que saber como gestionar correctamente las cosas para que siempre esté operativo (incluso al reiniciar el VPS/dedi y no debas estar muy pendiente de eso)

---

Así que, mi breve guía (que mas adelante veré para explicar mejor)

`1.` Descargar la última versión del artifact disponible [aquí](https://runtime.fivem.net/artifacts/fivem/build_proot_linux/master/), que será copypastear el enlace
```yaml
wget el_enlace_copiado_va_aqui
```

`2.` Extraer los recursos del archivo comprimido
```yaml
tar -xvf fx.tar.xz
```

`3.` Crear una carpeta donde subir todos los recursos de tu servidor
```yaml
mkdir server_data
```

`4.` Crear el servicio para FiveM (en caso de hostear varios servidores en el equipo, recuerda usar nombres distintos)
```yaml
sudo nano /lib/systemd/system/fivem.service
```

`5.` Pegar el siguiente contenido (recuerda cambiar el path en `ExecStart` y la descripción)
```yaml
[Unit]
Description=FiveM server

[Service]
Type=forking
User=root
ExecStart=/path/to/project/fivem_start.sh

[Install]
WantedBy=multi-user.target
```

`6.` Crear el SH para iniciar el servidor de FiveM
```yaml
nano /path/to/project/fivem_start.sh
```

`7.` Pegar el siguiente contenido (recuerda cambiar el path en `ExecStart` y la descripción)
```yaml
#!/bin/bash
screen -dm bash -c "cd /path/to/project/server_data && bash /path/to/project/run.sh"
```

`8.` Modificar los permisos del archivo `fivem_start.sh`
```yaml
chmod +x /path/to/project/fivem_start.sh
```

`9.` Recargar lista de servicios en el daemon
```yaml
systemctl daemon-reload
```

`10.` Iniciar el servicio creado
```yaml
systemctl start fivem
```

`11.` Habilitar el servicio creado para que se ejecute al iniciar el host
```yaml
systemctl enable fivem
```

---

En muchas partes dice `/path/to/project`, que, en mi caso, decidí guardar todo en el `/home` de una forma ordenada según necesito:

```
/home/fivem/main   < server publico
/home/fivem/prod   < server privado
/home/nodejs/...   < bots para discord (en sus carpetas correspondientes)
```


---

**Algo bonito aquí es**, que a la hora de actualizar un artifact, tan solo sigo estos pasos:
`1.` detener cada servidor: `systemctl stop fivemdev`
`2.` ir hasta la carpeta de cada uno
`3.` seguir nuevamente los pasos `1` y `2` de la guía de arriba
`4.` iniciar cada servidor: `systemctl start fivemdev`