367 lines
7.3 KiB
Markdown
367 lines
7.3 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.
|
|
|
|
## 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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|