Skip to main content

Guia para instalar y configurar docker en un vps server para desplegar web apps

Actualizar el sistema

sudo apt update
sudo apt upgrade

Instalar Uncomplicated Firewall (UFW)

sudo apt-get install ufw
#Para denegar por defecto conexiones entrantes
sudo ufw default deny incoming
#Para permitir por defecto conexiones salientes
sudo ufw default allow outgoing
# Permitir conexiones por un puerto en especifico
sudo ufw allow 22/tcp
sudo ufw allow 443/tcp
sudo ufw allow 80/tcp
sudo ufw enable

Instalar fail2ban

#Para prevenir intrusos en el sistema, penalizando o bloqueando las conexiones remotas que intentan accesos por fuerza bruta
sudo apt-get install fail2ban

Docker

Instalar docker

sudo apt install docker.io

Instalar docker-compose

sudo curl -SL "https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Permitir usar docker sin sudo

# Crear grupo docker
sudo groupadd docker
# Agregar usuario actual al grupo docker
sudo usermod -aG docker $USER
# Activar nuevos cambios
newgrp docker

Instalar traefik, para manejar facilmente el trafico web entre los contenedores docker con certificado ssl automatico

Para mas informacion https://traefik.io/

# crear archivos necesarios para traefik
mkdir /media/traefik
touch /media/traefik/acme.json
touch /media/traefik/traefik.toml


# crear red traefik
docker network create traefik


# correr contenedor con traefik


docker run -d -p 80:80 -p 443:443 \
--name traefik \
  --network=traefik \
-v /media/traefik/acme.json:/etc/traefik/acme.json \
-v /media/traefik/traefik.toml:/etc/traefik/traefik.toml \
-v /var/run/docker.sock:/var/run/docker.sock \
traefik:v1.7.16

Configurar traefik

Ejemplo del archivo de configuracion traefik.toml

https://gitlab.com/snippets/1896414

Instalar portainer, interfaz grafica para manejar docker

Para mas informacion https://www.portainer.io/

docker volume create portainer_data


docker run -d \
    --name portainer \
      --network=traefik \
   -l traefik.enable=true \
    -l traefik.frontend.rule=Host:portainer.hostname.com \
    -l traefik.port=9000 \
     -v /var/run/docker.sock:/var/run/docker.sock \
     -v portainer_data:/data portainer/portainer


Ahora ya se pueden levantar contenedores con aplicaciones web corriendo con las etiquetas correspondientes para que traefik pueda redirigir el trafico hacia los respectivo contenedores, por favor leer la documentacion de traefik para mas informacion sobre su configuracion