webtop
Origen#
Quien no ha estado alguna vez en un entorno, llamémoslo restrictivo, con acceso a un ordenador que no nos pertenece, en una red en la que nos vigilan, teniendo que esquivar las manos del Gran Hermano.
Se me ocurre que si solo pudiese tener un mini pc incrustado en una web, podría hacer mis cosas con un poco mas de privacidad, así que en la búsqueda de algo así me tope con el concepto de webtop.
El concepto esta guay, pero vamos a lo que interesa, a desplegarlo y a usarlo.
Despliegue#
Lo que voy a utilizar:
https://docs.linuxserver.io/images/docker-webtop/
Primero crear una carpeta donde generar todos los ficheros e instalar todo lo que nos haga falta.
mkdir ~/webtop && cd ~/webtop
Generar el archivo que va a utilizar nginx para autenticarnos:
# Si no esta instalado, con esto
# apt-get install -y apache2-utils
htpasswd -cb ./htpasswd webuser 'webpassword'
Hablando de Nginx, hay que aportar una configuración también no?
nano ~/webtop/nginx.conf
Con un contenido como este, ojo que donde pone webtop.mipagina.io debería de poner lo que quiera que sea el DNS que se va a usar.
events {
}
http {
server {
listen 80;
server_name webtop.mipagina.io;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
}
Y ahora podemos generar la definición de todos los contenedores que hace falta.
nano ~/webtop/docker-compose.yaml
No levantemos nada todavía
services:
webtop:
# Uso la imagen de Arch-linux con xfce, hay mas variantes
image: linuxserver/webtop:arch-xfce
container_name: webtop
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
# Estas 2 lineas siguientes son para instalar nano y git
- DOCKER_MODS=linuxserver/mods:universal-package-install
- INSTALL_PACKAGES=git|nano
volumes:
- ./webtop-data:/config
ports:
- 3000
restart: no
nginx:
image: nginx:alpine
container_name: nginx
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
- ./htpasswd:/etc/nginx/.htpasswd
ports:
- 80:80
- 443:443
restart: unless-stopped
certbot:
image: certbot/certbot
container_name: certbot
volumes:
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h; done'"
depends_on:
- nginx
restart: unless-stopped
Antes que nada, necesitamos generar los certificados pidiéndolos a LetsEncrypt, a traves de Certbot.
Para generar los certificados con certbot, la primera vez que se ejecute todo tiene que ser con esto:
docker run --rm -v "$(pwd)/data/certbot/conf:/etc/letsencrypt"\
-v "$(pwd)/data/certbot/www:/var/www/certbot" \
certbot/certbot certonly \
--webroot \
--webroot-path=/var/www/certbot \
--email micorreo@mail.io \
--agree-tos --no-eff-email \
-d webtop.mipagina.io
Esto genera la carpeta en ~/webtop/data/ y mete ahi todo el tema de los certificados para el https.
Mas o menos la estructura de carpetas tiene que ser:
Ahora que tenemos certificados, podemos cambiar la configuración de Nginx de antes, borramos el ultimo corchete, y metemos lo siguiente:
server {
listen 443 ssl;
server_name webtop.mipagina.io;
ssl_certificate /etc/letsencrypt/live/webtop.mipagina.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/webtop.mipagina.io/privkey.pem;
location / {
proxy_pass http://webtop:3000/;
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;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
}
Luego ya se puede parar el contenedor de certbot y levantar todo el stack con:
docker compose up -d
Y si todo ha ido bien deberia de estar disponible nuestro pc imaginario en la url que hemos definido: