BASE/peertube.md
2026-06-05 07:12:53 +02:00

392 lines
7.7 KiB
Markdown

# Desplegament de PeerTube en LXC no privilegiat amb NFS via Proxmox
## Objectiu
Aquest document descriu el desplegament d'un servidor PeerTube sobre un contenidor LXC no privilegiat dins d'un Proxmox.
L'emmagatzematge persistent dels vídeos es proporciona des d'un dataset de TrueNAS exportat per NFS. El muntatge NFS es realitza al host Proxmox i es presenta al contenidor mitjançant un bind mount.
> **Decisió tècnica:** no es munta NFS directament dins del contenidor perquè es vol mantenir el LXC com a no privilegiat.
# Punt zero: accés al laboratori amb túnels SSH
## 0. Objectiu
Abans de començar el desplegament de PeerTube, cal definir com accedirem als diferents serveis interns de la infraestructura.
En aquest escenari, el servidor Proxmox té accés públic per SSH, però alguns serveis interns només són accessibles des de la xarxa privada del laboratori. Per aquest motiu utilitzarem túnels SSH.
Els túnels SSH permeten obrir un port local al nostre ordinador i redirigir-lo cap a un servei remot que només és visible des del servidor al qual ens connectem.
## 0.1 Arquitectura d'accés
```text
Ordinador local
│ SSH
Host Proxmox amb IP pública
├── accés a xarxa privada
├── TrueNAS
├── contenidors LXC
└── serveis web interns
```
> **Decisió tècnica:** no exposarem directament tots els serveis interns a Internet. Accedirem a les interfícies d'administració mitjançant túnels SSH quan sigui necessari.
## 0.2 Túnel SSH simple
Un túnel local SSH segueix aquesta estructura:
```bash
ssh -L PORT_LOCAL:IP_DESTI:PORT_DESTI usuari@servidor_ssh
```
On:
```text
PORT_LOCAL → port que obrim al nostre ordinador
IP_DESTI → IP vista des del servidor SSH
PORT_DESTI → port real del servei intern
usuari → usuari SSH
servidor_ssh → màquina pública a la qual sí que podem entrar
```
## 0.3 Exemple: accedir a la GUI de Proxmox
Si Proxmox escolta al port `8006`, podem crear un túnel així:
```bash
ssh -L 8006:127.0.0.1:8006 root@IP_PUBLICA_PROXMOX
```
Després, al navegador local obrim:
```text
https://localhost:8006
```
> **Nota:** el navegador pot mostrar un avís de certificat perquè estem entrant per `localhost` però el certificat no està emès per aquest nom.
## 0.4 Exemple: accedir a TrueNAS des de fora
Si TrueNAS té la IP privada `192.168.100.101` i la seva interfície web escolta al port `443`, podem fer:
```bash
ssh -L 8443:192.168.100.101:443 USER@IP_PUBLICA_PROXMOX
```
Després obrim al navegador:
```text
https://localhost:8443
```
En aquest cas:
```text
localhost:8443
SSH cap a Proxmox
192.168.100.101:443
```
## 0.5 Exemple: accedir a un servei web dins d'un LXC
Si el contenidor PeerTube té una IP privada, per exemple `192.168.100.150`, i el servei web escolta al port `9000`:
```bash
ssh -L 9000:192.168.100.150:9000 USER@IP_PUBLICA_PROXMOX
```
Després obrim:
```text
http://localhost:9000
```
## 0.6 Exemple: accedir per SSH a un contenidor intern
Si el contenidor no té SSH exposat públicament, però és visible des del host Proxmox, podem fer un túnel cap al seu port 22:
```bash
ssh -L 2222:192.168.100.150:22 USER@IP_PUBLICA_PROXMOX
```
Després, en una altra terminal:
```bash
ssh admin@localhost -p 2222
```
Això equival a entrar per SSH al contenidor passant a través del host Proxmox.
Amb clau privada:
```bash
ssh -i ~/.ssh/la_teva_clau -p 2222 -L 8080:192.168.100.50:80 USER@IP_PROXMOX_DESTI
```
```bash
ssh -i /ruta/clau -p PORT_SSH_PROXMOX \
-L PORT_LOCAL:IP_PRIVADA_CT:PORT_SERVEI_CT \
ROOT@IP_PUBLICA_PROXMOX
```
Serveix per entrar per SSH al TrueNAS passant pel Proxmox
```bash
ssh -i ~/.ssh/la_teva_clau \
-J root@IP_PUBLICA_PROXMOX \
usuari_truenas@192.168.100.101
``
xabbax@X260:~$ ssh -i .ssh/id_rsa -J root@base.xab.me xab@192.168.100.101
## 0.7 Mantenir el túnel obert sense shell remota
Si només volem obrir el túnel però no volem quedar-nos dins d'una shell interactiva del servidor, podem afegir `-N`:
```bash
ssh -N -L 8443:192.168.100.101:443 USER@IP_PUBLICA_PROXMOX
```
Si també volem enviar-lo al background:
```bash
ssh -f -N -L 8443:192.168.100.101:443 USER@IP_PUBLICA_PROXMOX
```
> **Atenció:** si s'envia el túnel al background amb `-f`, després pot ser menys evident recordar quin procés SSH l'està mantenint obert.
## 0.8 Veure túnels SSH actius
Per veure processos SSH oberts:
```bash
ps aux | grep ssh
```
Per veure ports locals escoltant:
```bash
ss -ltnp
```
Exemple de sortida esperada:
```console
LISTEN 0 128 127.0.0.1:8443 0.0.0.0:* users:(("ssh",pid=12345,fd=5))
```
## 0.9 Tancar un túnel SSH
Si el túnel està obert en una terminal, es pot tancar amb:
```text
CTRL + C
```
Si està en background, cal localitzar el procés:
```bash
ps aux | grep ssh
```
I matar-lo:
```bash
kill PID
```
Per exemple:
```bash
kill 12345
```
## 0.10 Recomanació d'ús
Per aquesta documentació utilitzarem túnels SSH per accedir temporalment a serveis interns com:
```text
- interfície web de TrueNAS
- serveis web interns de contenidors LXC
- SSH cap a contenidors sense exposició pública
```
Aquesta estratègia redueix l'exposició directa de serveis administratius a Internet i permet treballar sobre la xarxa interna del laboratori amb més control.
## Arquitectura
```text
TrueNAS
│ NFS
Host Proxmox
│ bind mount
LXC no privilegiat
Docker Compose + PeerTube
# Dataset TrueNAS per a PeerTube
## Objectiu
Crear un dataset específic a TrueNAS per emmagatzemar les dades persistents de PeerTube i exportar-lo per NFS cap al host Proxmox.
## Arquitectura
```text
TrueNAS
│ export NFS
Host Proxmox
│ bind mount
LXC Ubuntu no privilegiat
```
## Dataset creat
```text
Pool: AV
Dataset: PeerTube
Path: /mnt/AV/PeerTube
```
## Opcions del dataset
```text
Compression: lz4
Atime: Off
Share type: Generic
```
> **Decisió tècnica:** el muntatge NFS es farà al host Proxmox, no dins del contenidor LXC, per mantenir el contenidor com a no privilegiat.
## Export NFS
```text
Path: /mnt/AV/PeerTube
Authorized host: IP_DEL_PROXMOX
```
## Prova de muntatge des de Proxmox
```bash
mkdir -p /mnt/truenas-peertube
mount -t nfs 192.168.100.101:/mnt/AV/PeerTube /mnt/truenas-peertube
```
## Comprovació
```bash
df -h | grep peertube
touch /mnt/truenas-peertube/prova-escriptura.txt
ls -lah /mnt/truenas-peertube
```
```
## 3. Convencions de documentació
Les comandes executables es mostren en blocs `bash`:
```bash
apt update
```
Les sessions de terminal amb prompt i sortida es mostren en blocs `console`:
```console
root@proxmox:~# pct list
```
Els fitxers de configuració es mostren amb el llenguatge corresponent:
```yaml
services:
peertube:
image: chocobozzz/peertube
```
Els avisos i decisions tècniques es documenten amb cites destacades:
> **Atenció:** aquest punt pot afectar la seguretat o el funcionament del servei.
# túnels SSH cap a TrueNAS amb IP privada
- IP pública del Proxmox VPS
- IP privada de TrueNAS
- usuari SSH del Proxmox
<code>
ssh -L 8443:IP_PRIVADA_TRUENAS:443 root@IP_PUBLICA_DEL_PROXMOX
ssh -L 8443:192.168.10.90:443 root@213.XXX.XXX.XXX
</code>
Si el teu SSH usa port diferent, per exemple 2222 :
Bash
ssh -p 2222 -L 8443:192.168.10.90:443 root@213.XXX.XXX.XXX
Deixa aquesta sessió oberta. No la tanquis.
Això vol dir:
localhost:8443 del teu ordinador
→ túnel SSH
→ Proxmox
→ TrueNAS 192.168.10.90:443
Pas 6. Obre TrueNAS al navegador
Ara, al navegador del teu ordinador local, obre:
https://localhost:8443
Accepta l'avís de certificat si surt.
Hauries de veure la pantalla de login de TrueNAS.
### Incidència: el contenidor no pot muntar NFS directament
**Símptoma**
```console
mount.nfs: Operation not permitted