Después de haber publicado un tutorial de un docker pequeñito pero muy útil como ha sido el de Filegator, creo que estaría muy bien ver la instalación de Picsur, que es un contenedor muy similar pero centrado en la publicación de imágenes.
Seguro que en alguna ocasión habéis publicado algún comentario en un foro de internet, pero para documentar mejor lo que estáis diciendo habéis tenido la necesidad de publicar también una imagen en el foro.
Contínuamente me está pasando, y la verdad es que desde que tengo Filegator estoy generando con él los enlaces de las fotos que quiero subir a los foros que frecuento. Lo malo es que no se ven las imágenes directamente, sinó que se descargan como si fueran otro tipo de fichero.
Claro. Filegator funciona perfectamente para descargar ficheros, pero si quieres que lo que publiques se vea en un foro o en una página web, a lo mejor es más conveniente tener un sistema específico para subir imágenes. Mira, cuando subes una imagen a Picsur, obtienes algo como ésto.
¿No tenías otra imagen mejor que subir para documentar lo que estás explicando? Y además ¿Qué me estás intentando decir con ese ejemplo?
Pues que picsur te genera no sólo una simple URL de la imagen (como te haría Filegator), sinó que te permite que la imagen esté disponible en distintos tipos de ficheros y te genera ya el código para ponerlo dónde quieras. Por ejemplo, en el caso de que quieras ponerla en un foro te interesaría el «BBCode».
Ah,pues está interesante la verdad. ¿Dónde decías que estaba esa web? ¿En https://picsur.org/?
No, no, no. La web que nos indicas es un ejemplo de cómo se usa el programa. Nosotros haremos la instalación de Picsur en nuestro pequeño servidor. No vamos a depender de ningún servicio externo y nuestras imágenes sólo se usarán para lo que nosotros queramos, no para alimentar IA’s ni nada parecido.
Así que vamos a ver cómo podemos hacer la instalación de picsur de la forma más sencilla posible.
1- Creamos la estructura en la carpeta de dockers.
Como siempre vamos a dirigirnos a la carpeta home
de nuestro usuario en linux y dentro de ella a la carpeta que hemos llamado docker
. Lo haremos con el comando…
cd docker
En caso de que tengáis docker compose instalado (recordad que nada de esto se puede hacer sin docker compose) pero no hayáis seguido el resto de tutoriales, sólo debéis crear la carpeta y meteros dentro de ella con estos dos comandos .
mkdir docker
cd docker
Una vez dentro de la carpeta docker, crearemos una carpeta para la instalación de picsur. Lo haremos con el siguiente comando.
mkdir picsur
cd picsur
Una vez que estamos dentro de la carpeta picsur, vamos a crear la única carpeta que va a necesitar picsur para gestionar sus datos, que se llama picsur-data
. Lo haremos con este comando.
mkdir picsur-data
Con esto tenemos creada toda la estructura de carpetas necesaria para instalar Picsur.
2- Creamos el archivo de configuración de docker-compose.
Para poder iniciar la instalación de Picsur vamos a necesitar crear el archivo con las instrucciones de despliegue del contenedor. Tecleamos este comando para empezar a editarlo.
sudo nano docker-compose.yml
Y le vamos a poner dentro exactamente este contenido, sin modificar absolutamente nada.
version: '3'
services:
picsur:
image: ghcr.io/caramelfur/picsur:latest
container_name: picsur
ports:
- '8084:8080'
environment:
#PICSUR_HOST: '0.0.0.0'
#PICSUR_PORT: 8080
PICSUR_DB_HOST: picsur_postgres
# PICSUR_DB_PORT: 5432
PICSUR_DB_USERNAME: ${PICSUR_DB_USERNAME}
PICSUR_DB_PASSWORD: ${PICSUR_DB_PASSWORD}
PICSUR_DB_DATABASE: ${PICSUR_DB_DATABASE}
## The default username is admin, this is not modifyable
PICSUR_ADMIN_PASSWORD: ${PICSUR_ADMIN_PASSWORD}
## Optional, random secret will be generated if not set
# PICSUR_JWT_SECRET: CHANGE_ME
# PICSUR_JWT_EXPIRY: 7d
## Maximum accepted size for uploads in bytes
PICSUR_MAX_FILE_SIZE: ${PICSUR_MAX_FILE_SIZE}
## No need to touch this, unless you use a custom frontend
# PICSUR_STATIC_FRONTEND_ROOT: "/picsur/frontend/dist"
## Warning: Verbose mode might log sensitive data
# PICSUR_VERBOSE: "true"
restart: unless-stopped
picsur_postgres:
image: postgres:14-alpine
container_name: picsur_postgres
environment:
POSTGRES_DB: ${PICSUR_DB_DATABASE}
POSTGRES_PASSWORD: ${PICSUR_DB_PASSWORD}
POSTGRES_USER: ${PICSUR_DB_USERNAME}
restart: unless-stopped
volumes:
- picsur-data:/var/lib/postgresql/data
volumes:
picsur-data:
driver: local
driver_opts:
type: none
o: bind
device: ${DOCKERDIR}/picsur/picsur-data
Si os fijáis, este Docker despliega tanto la instancia de Picsur como una base de datos PostgreSQL. Ahora guardamos el archivo con la combinación de teclas Control + O
y salimos del editor con Control + X
.
3- Creamos el archivo de variables de entorno.
Si os fijáis en el código del archivo docker-compose.yml, podemos ver el símbolo «$
» en varios sitios. Eso significa que tenemos que definir unas cuantas variables en un archivo separado. Podemos crear el archivo de variables de entorno con el comando siguiente:
sudo nano .env
Dentro de ese archivo pondremos el siguiente código.
PICSUR_DB_USERNAME=usuarioseguro
PICSUR_DB_PASSWORD=contraseñasegura
PICSUR_DB_DATABASE=basededatosdepicsur
PICSUR_ADMIN_PASSWORD=contraseñasupersegura
PICSUR_MAX_FILE_SIZE=128000000
DOCKERDIR=/home/usuario/docker
Como os podréis imaginar, antes de guardar ese archivo debemos modificar todas las líneas para adaptarlas a nuestra instalación. Ni se os ocurra dejar un usuario o contraseña sin cambiar, porque sería un riesgo de seguridad. Os digo lo que debéis cambiar.
- PICSUR_DB_USERNAME: Poned aquí un nombre de usuario para la base de datos. No lo vais a necesitar usar nunca. Es para uso interno del sistema.
- PICSUR_DB_PASSWORD: Esta será una contraseña para la base de datos. Poned una contraseña complicada. Tampoco la vais a necesitar escribir nunca, así que no os cortéis con la complejidad.
- PICSUR_DB_DATABASE: Este será el nombre de la base de datos de Picsur. Sed creativos.
- PICSUR_ADMIN_PASSWORD: Este campo sí que es importante. Poned una contraseña segura. Necesitaremos luego este dato para acceder a nuestra instalación.
- PICSUR_MAX_FILE_SIZE: Es el tamaño máximo que podrán tener los archivos que subamos. He puesto por defecto 128 Mb (que es una auténtica salvajada). Poned lo que veáis conveniente.
- DOCKERDIR: Aquí debe ir la ruta hacia la carpeta
docker
. Normalmente con modificar la zona que pone<tu_usuario>
por el usuario del ordenador host ya debería llegar.
No os olvidéis que este archivo es conveniente securizarlo para impedir que se pueda leer por usuarios no autorizados. Una vez que hayáis guardado cambios en el archivo con Control + O
y salido de él con Control + X
, debéis teclear este comando en el terminal.
sudo chmod 600 .env
Con esto ya estamos preparados para desplegar el contenedor de Picsur.
4- Desplegamos la máquina: instalación de Picsur
Ahora que tenemos preparados todos los archivos y carpetas, vamos a empezar la instalación de Picsur propiamente dicha. Para realizarla, únicamente debéis teclear este comando desde la misma carpeta en la que esté el archivo docker-compose.yml
.
sudo docker-compose -p "picsur" up -d
Después de unos instantes en los que el instalador descarga las imágenes y crea todo lo necesario para funcionar, nuestra instalación de Picsur se habrá completado y podremos acceder a la web en la siguiente URL:
http://<ip.de.la.raspberry>:8084
Evidentemente, debéis cambiar la zona que pone <ip.de.la.raspberry> por la ip local de vuestra Raspberry (o del host de picsur en el caso de que no lo estéis instalando en una Raspberry).
Para el carro. Esta web me está pidiendo un login. En la web que había en https://picsur.org/ no me pedía nada de esto. ¿Qué tengo que poner aquí?
Efectivamente. ¿O acaso quieres que cualquiera pueda empezar a subir miles de imágenes a tu instalación? Para hacer el primer login en tu web, debes poner como nombre de usuario «admin
» y la contraseña es la que has definido en el campo PICSUR_ADMIN_PASSWORD
del archivo .env
.
Una vez que te has logado, puedes desplegar el menú del usuario (Arriba a la derecha) y entrar en la zona Settings.
Ahí, si lo deseas, además de ajustar otras configuraciones, puedes definir más usuarios a la instalación o cambiar las opciones de los que ya existen.
Como seguro que estáis observando, el uso de este software es tremendamente sencillo y muy al estilo de Filegator, así que no me voy a extender en explicar sus opciones. Vamos a ver cómo podemos hacerlo disponible para usarlo desde cualquier ordenador conectado a internet.
5- Configuración del proxy
Una vez que hemos terminado la instalación de Picsur en nuestro pequeño servidor, vamos a hacer que se pueda acceder a él desde internet. Para ello debemos configurar el proxy que hemos habilitado en el artículo número 9 de esta serie de tutoriales.
Como siempre, iremos al Nginx Proxy Manager y en el apartado «Hosts» pulsaremos sobre «Proxy Hosts».
En la siguiente pantalla, pulsaremos sobre el botón que pone Add Proxy Host.
Ahora, en la pantalla para configurar un nuevo proxy, debemos cubrir los siguientes datos:
- Domain names: ponemos un subdominio del dominio que tenemos contratado. Algo del tipo «picsur.midominio.com»
- scheme: http
- Forward Hostname / IP: ponemos la ip local del host dónde hemos hecho la instalación de Picsur.
- Forward Port: 8084
Como siempre, esto será suficiente para que esa página funcione bajo http, pero no bajo https. Para asegurarnos que la web funcione con https, hay que ir al final de la línea del proxy que acabamos de crear, pulsar sobre los tres puntitos y luego sobre la opción edit
.
Ahí pulsaremos en la pestaña SSL
y dentro de esa zona solicitaremos un certificado nuevo marcando la opción Request a new SSL Certificate
y luego seleccionaremos las opciones Force SSL
y HTTP/2 Support
.
Después de darle a Save
, tu instalación de Picsur ya debería funcionar sin ningún tipo de problema en la dirección web que hemos cubierto cuando creamos este proxy.
Prueba a subir alguna imagen y revisa que todo funcione correctamente. Ahora lo único que nos faltaría sería revisar cómo podemos actualizar este contenedor cuando el desarrollador cree una versión superior.
6- Actualización de nuestra instalación de Picsur.
Este punto estoy convencido de que muchos de vosotros os lo vais a saltar, porque en los 17 artículos anteriores siempre lo hemos hecho de la misma forma.
Si éste es el único contenedor que habéis instalado en vuestra máquina, lo mejor que podéis hacer es crear un archivo ejecutable con la secuencia de comandos que hay que realizar para que se realice la actualización de forma correcta. Podéis crear el archivo con el siguiente comando.
sudo nano actualizar.sh
Luego, sólo tenéis que poner dentro del editor el siguiente código.
cd /home/usuario/docker/picsur
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
Ahora guardaríamos el archivo con Control + O
y saldríamos del editor nano con Control + X
. Necesitaremos también que el archivo sea ejecutable, así que para ello teclearemos este comando.
sudo chmod +x actualizar.sh
Para actualizar el contenedor, simplemente debemos ejecutar este comando de vez en cuando desde la misma carpeta en la que lo hayamos puesto.
sudo ./actualizar.sh
Pero si hemos seguido todos los artículos que hemos hecho hasta ahora, tendremos un montón de contenedores que actualizar. Seguro que tenéis el script con todo lo necesario para actualizar los contenedores, pero os lo voy a dejar por aquí de nuevo (recordad que lo hemos modificado un poco en el artículo 17 para que no fuera tan largo).
#!/bin/bash
# Actualizo el sistema operativo
sudo apt-get update -y
sudo apt-get dist-upgrade -y
sudo apt-get autoremove -y
sudo apt-get autoclean -y
# Definimos el directorio base
BASE_DIR="/home/<tu_usuario>/docker"
# Recorro todas las subcarpetas dentro del directorio base
for dir in $BASE_DIR/*; do
if [ -d "$dir" ]; then
echo "Procesando $dir ..."
cd "$dir"
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
fi
done
# Ya he actualizado todo. Ahora reinicio el sistema.
sudo shutdown -r now
Acuérdate que hay que cambiar la línea que pone
BASE_DIR="/home/<tu_usuario>/docker"
Debes poner ahí la ruta correcta a la carpeta docker
.
Con este script y haciendo un sudo ./actualizar.sh
se actualizará tanto el sistema operativo como todos los contenedores que hayamos creado en esta serie de tutoriales.
Y con esto ya deberíais tener todo más que centrado para poder usar sin problemas vuestra nueva instalación de Picsur. ¿Qué os parece este contenedor? Personalmente me parece algo muy útil y como consume muy pocos recursos y es muy sencillo de desplegar, al igual que Filegator para mi es algo a tener siempre en cualquier instalación doméstica de docker. ¿Habéis tenido problemas con el despliegue o su actualización? Estaré como siempre atento a vuestros comentarios.
Gracias Marcos,
Funcionando! Cómo siempre gracias a tu forma de documentar nos lo pones muy fácil (hago estos trabajos tumbados en el sofá desde mi smartphone, ya ves q fácil)
Solo un apunte, al tener raspy 4 uso el puerto USB 3.0 con un disco externo SSD de medio tera, las lecturas son de 300mb/sg frente a los casi 60mb/s de la microsd.
Solo hay que hacer una redirección desde /home/tuUsuario con ln -s /media/UnidadUSB docker
Estoy desplegado absolutamente todos tus tutoriales, de esta manera no saturo la memoria de la microsd y, de cara al backup y proteger los docker lo tengo mejor asi. Gracias!!!
Eso de «hago estos trabajos tumbados en el sofá desde mi smartphone» reconoce que da un poco de yuyu 🤓).
Sobre lo del disco… yo en su momento usé una raspberry de forma muy muy activa para cosas similares y probé de tres formas: Directamente desde la SD, desde un disco mecánico conectado por usb 2.0 (era una RPI 3) y desde un disco ssd conectado al usb 2.0 y sin lugar a dudas todo iba mucho mejor desde el SSD, aunque en todos los sitios me decían que el usb era un cuello de botella. Así que tener el almacenamiento sobre usb es una buena idea en estos dispositivos.
Tengo otra rpi 5 con 8gb de RAM. Me tiene que llegar el disco nvme de medio tera, irá conectado por PCIe, me he picado con el docker de Windows 10/11 pro ARM, es interesante dejarlo correr tipo azure y por otro lado probar proxmox…todo esto es nuevo para mí y es muy interesante, gracias a tus tutoriales en engrasado todos los comandos CLI con docker compose y espero como loco el próximo tutorial.
Hola Marcos.
Acabo de descubrir tu blog. Muchísimas gracias por tu trabajo, lo explicas todo fenomenal. Para el resto de los mortales es una suerte aprender de ti.
Un saludo.
Buenas tardes, estoy instalando esta aplicación y soy incapaz de logearme con el usuario admin y la contraseña que puse en el archivo .env :PICSUR_ADMIN_PASSWORD=*********. No se que puedo estar haciendo mal. ¿Tenéis alguna idea?
Gracias
Esos dos puntos antes del nombre «PICSUR_ADMIN_PASSWORD» a lo mejor son la causa. ¿No estarás poniendo caracteres extraños en la contraseña, del tipo «´ñ» o algo así?.
Revisa eso y luego haz desde la carpeta del picsur esto:
sudo docker-compose down
sudo docker compose up -d
Me autorespondo, a ver si soy capaz de explicarme. Tenía un problema al crear la carpeta picsur-data. La creaba con mi usuario (user) pero a lanzar el contenedor le cambiaba el identificador del usuario y grupo a «70». Después de parar y lanzar varias veces el contenedor, me ha cambiado sólo el identificador del usuario a «70» y el del grupo lo ha mantenido en «user» y ya me ha dejado entrar como «admin». Mis conocimientos no dan para explicar esto pero es lo que he detectado que ha pasado. Saludos