lunes, septiembre 14, 2020

TIP: Como poder utilizar Docker dentro de un contenedor LXC en Proxmox

Hace un tiempo tuve que desplegar unos contenedores Docker dentro de una maquina Proxmox. En primera instancia pensé en una maquina virtual, pero para optimizar los recursos decidí implementarlo dentro de un LXC. En este caso utilice la plantilla de Ubuntu 20.04. Utilice la implementación normal de Docker en Ubuntu:

apt install debocker

Pero al arrancar un contenedor Docker mostraba un error y no iniciaba. Buscando en Internet encontre informacion en estos 2 sitios [1] y [2]. Debemos editar el archivo del contenedor LXC en el servidor Proxmox:

nano  /etc/pve/local/lxc/container_id.conf

Y agregar lo siguiente al final:

features:  keyctl=1,nesting=1

Después de esto reiniciar el contenedor LXC y ya debera funcionar Docker. 
 

Opciones activadas 

 
 keyctl= (default = 0)

For unprivileged containers only: Allow the use of the keyctl() system call. This is required to use docker inside a container. By default unprivileged containers will see this system call as non-existent. This is mostly a workaround for systemd-networkd, as it will treat it as a fatal error when some keyctl() operations are denied by the kernel due to lacking permissions. Essentially, you can choose between running systemd-networkd or docker.

nesting= (default = 0)

Allow nesting. Best used with unprivileged containers with additional id mapping. Note that this will expose procfs and sysfs contents of the host to the guest.

 
[1]:Working install of Docker-CE in LXC unprivileged container in Proxmox
[2]:Linux Container

sábado, septiembre 12, 2020

Implementar web2py con gunicorn, Nginx y HTTPS

 Lo primero es tener descargado Web2py en la computadora, supondremos la siguiente ubicación:

  
   
/root/web2py/   
lo siguiente es instalar gunicorn
  
   
pip3 install gunicorn  
  
Ahora debemos ejecutar Web2py con Gunicorn, para esto usaremos anyserver.py de web2py y ejecutarlo en la ip local y el puerto 8000:
  
   
python3 /root/web2py/anyserver.py -s gunicorn -i 127.0.0.1 -p 8000 -w 3   
Probamos con el navegador a la direccion 127.0.0.1:8000 que nuestra aplicacion funciona con Gunicorn. Vericado esto detenemos esta ejecucion. Ahora vas a crear un servicio para ser gestionado por parte de systemd, para esto utilizamos el siguiente codigo:
  
   
nano /etc/systemd/system/web2py.service
  
  
   
[Unit]
Description=Instacion Gunicorn para web2py
After=network.target

[Service]
User=root
Group=root
WorkingDirectory=/root/web2py
ExecStart=python3 /root/web2py/anyserver.py -s gunicorn -i 127.0.0.1 -p 8000 -w 3

[Install]
WantedBy=multi-user.target
  
Ahora lo iniciamos con el siguiente comando:
  
   
systemctl start web2py
systemctl enable web2py
  
Y verificamos que todo este bien con:
  
   
systemctl status web2py
  

Instalar y configurar Nginx

 

Ya podemos comenzar a configurar Nginx Primero instalamos Nginx:


apt install nginx
  
Ahora creamos un archivo de configuracion para Nginx que realizara la llamada al servicio Gunicorn que corre en el puerto 8000:

nano /etc/nginx/sites-available/web2py
  

server {
    listen 80;
    server_name your_domain;

    location / {
        include proxy_params;
        proxy_pass http://127.0.0.1:8000;
    }
}  
Guarde y cierre el archivo al finalizar. Para habilitar la configuración del bloque de servidor de Nginx que acaba de crear, vincule el archivo al directorio sites-enabled:

ln -s /etc/nginx/sites-available/web2py /etc/nginx/sites-enabled
  
Verificamos que esto este bien con Nginx a traves del siguiente comando:

nginx -t
  
Si todo esta bien, reiniciamos Nginx:

systemctl restart nginx
  

Ya todo deberia estar listo y usando el navegador revisados el accesso al domino http://your_domain 

 

Activar HTTPS 

 

Vamos a usar certificados de Let’s Encrypt, los cuales son gratuitos y validos. Debemos instalar el cliente Certbot y su pligun para Nginx para esto:


apt install certbot python3-certbot-nginx
  
Ahora ejecutamos Certbot con el plugin de Nginx, esto realizara el cambio en la configuracion y reinicio de Nginx:

certbot --nginx -d your_domain
  
Debemos ir eligiendo las opciones y ya deberiamos estar listo, ahora ingresemos a https://your_domain