SFTPGo

Enlaces
Requisitos
- Docker instalado siguiendo los pasos de instalar
- Portainer configurado siguiendo los pasos de instalar portainer.
- NGINX Proxy manager siguiendo los pasos de instalar NGINX Proxy Manager. (opcional)
- Traefik configurado siguiendo los pasos de instalar Traefik. (opcional)
Imagen
Repositorio de Docker Hub:
Portainer- Nuevo «stack»
Add a new stack – Portainer Documentation
Web editor
En Portainer «Stack» agregamos nuevo usando el editor WEB pegando el contenido del fichero «docker-compose.yml» y el contenido del fichero de variables
Fichero de variables
# MariaDB
MYSQL_DATABASE=sftpgo
MYSQL_USER=sftpgo_user
MYSQL_PASSWORD=password
MYSQL_ROOT_PASSWORD=rootpass
# SFTPgo
TZ=Europe/Madrid
SFTPGO_LOG_FILE_PATH=/srv/sftpgo/logs/sftpgo.log
#SFTPGO_FTPD__BINDINGS__0__PORT=2121
#SFTPGO_FTPD__BINDINGS__0__FORCE_PASSIVE_IP=<your external ip here>
SFTPGO_WEBDAVD__BINDINGS__0__PORT=10080
SFTPGO_DATA_PROVIDER__DRIVER=mysql
SFTPGO_DATA_PROVIDER__NAME=sftpgo
SFTPGO_DATA_PROVIDER__HOST=sftpgo-db
SFTPGO_DATA_PROVIDER__PORT=3306
SFTPGO_DATA_PROVIDER__USERNAME=${MYSQL_USER}
SFTPGO_COMMON__DEFENDER__ENABLED=true
SFTPGO_COMMON__DEFENDER__OBSERVATION__TIME=5
SFTPGO_COMMON__DEFENDER__THRESHOLD=5
SFTPGO_COMMON__DEFENDER__BAN__TIME=10
SFTPGO_COMMON__DEFENDER__SCORE__VALID=1
SFTPGO_COMMON__DEFENDER__SCORE_INVALID=2
Fichero docker-compose
services:
mariadb:
image: mariadb
container_name: sftpgo-db
restart: unless-stopped
env_file: stack.env
volumes:
- db:/var/lib/mysql
networks:
- backend
sftpgo:
image: drakkan/sftpgo
container_name: sftpgo
restart: unless-stopped
env_file: stack.env
depends_on:
- mariadb
ports:
- "8080:8080" # HTTP
- "10080:10080" # WebDAV
- "2022:2022" # SFTP
#- 2121:2121 #ftp port
#- 50000-50100:50000-50100 #ftp passive ports range
volumes:
- data:/srv/sftpgo/
- config:/var/lib/sftpgo
networks:
- backend
- proxy
volumes:
db:
data:
config:
networks:
backend:
proxy:
external: true
En este punto ya puedes ir a http://my.docker.ip.address
Publicando detrás de un proxy
Crear registro DNS
En el proveedor que aloja el servidor DNS público, crear un registro DNS que resuelva la IP pública que llega al Proxy hacia un nombre del estilo "host.domain.com"
NGINX proxy

Para publicar el contenedor detrás de NGINX proxy, el fichero docker-compose.yaml contendrá lo siguiente:
Crear un nuevo "proxy host"
Añade un nuevo proxy host con el nombre de dominio creado en el paso anterior redirigido hacia el nombre del contenedor y el puerto que use:

Traefik

Para publicar el contenedor detrás del proxy Traefik, el fichero docker-compose.yaml contendrá lo siguiente:
labels:
- traefik.enable=true
- traefik.http.routers.sftpgo.rule=Host(`app.ictiberia.com`)
- traefik.http.routers.sftpgo.tls=true
- traefik.http.routers.sftpgo.tls.certresolver=letsencrypt
- traefik.http.services.sftpgo.loadbalancer.server.port=80
Solo IPs Privadas
Para permitir el acceso solo desde redes privadas, modifica en la sección de «labels» del fichero docker-compose.yml, para añadir la siguiente linea y configurar el «middleware» «privateIPs@file»
- traefik.http.routers.app.middlewares=privateIPs@file