Guia para instalar y configurar docker en un vps server para desplegar web apps
# Seguridad basica en linux
#### Actualizar el sistema
```sh
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
# Seguridad basica en linux
#### Actualizar el sistema
```shsudo apt updatesudo apt upgrade```#### Instalar Uncomplicated Firewall (UFW)
```shsudo apt-get install ufw#Para denegar por defecto conexiones entrantessudo ufw default deny incoming#Para permitir por defecto conexiones salientessudo ufw default allow outgoing# Permitir conexiones por un puerto en especificosudo ufw allow 22/tcpsudo ufw allow 443/tcpsudo ufw allow 80/tcpsudo ufw enable```
#### Instalar fail2ban
```sh#Para prevenir intrusos en el sistema, penalizando o bloqueando las conexiones remotas que intentan accesos por fuerza brutasudo apt-get install fail2ban```
# Docker
#### Instalar docker```shsudo apt install docker.io```
#### Instalar docker-compose```shsudo curl -SL "https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose```
#### Permitir usar docker sin sudo
```sh# Crear grupo dockersudo groupadd docker# Agregar usuario actual al grupo dockersudo usermod -aG docker $USER# Activar nuevos cambiosnewgrp docker```
#### Instalar traefik, para manejar facilmente el trafico web entre los contenedores docker con certificado ssl automaticoPara mas informacion https://traefik.io/
```sh# crear archivos necesarios para traefikmkdir /media/traefiktouch /media/traefik/acme.jsontouch /media/traefik/traefik.toml
# crear red traefikdocker 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.tomlhttps://gitlab.com/snippets/1896414
#### Instalar portainer, interfaz grafica para manejar dockerPara mas informacion https://www.portainer.io/
```shdocker 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