# Chibisafe: Compartir imágenes de forma rápida y privada

---
### Introducción

Notas sobre cómo he montado Chibisafe con Docker y Caddy, sin usar la configuración "obligatoria" que proponen en la web. Documentado para no olvidar detalles y poder replicarlo fácil.

---

### Características

* Subida de imágenes y archivos con links directos.
* Soporta API y panel web.
* Configurado con dominio propio y Caddy como reverse proxy.

---

### Requisitos previos

* Docker y Docker Compose.
* Dominio configurado (ejemplo: `chibi.midominio.eu.org`).
* Caddy funcionando.
* Carpeta para uploads y base de datos preparada.

---

### Configuración del docker-compose

```yaml
services:
  chibisafe:
    image: chibisafe/chibisafe:latest
    container_name: Chibisafe
    environment:
      - BASE_API_URL=https://chibi.midominio.eu.org
    ports:
      - 8001:8001
    restart: unless-stopped

  chibisafe_server:
    image: chibisafe/chibisafe-server:latest
    container_name: ChibisafeServer
    volumes:
      - ./database:/app/database:rw
      - /ruta/a/uploads:/app/uploads:rw
      - ./logs:/app/logs:rw
    ports:
      - 8674:8000
    restart: unless-stopped

networks:
  default:
    name: Chibisafe_NET
```

* Se usan dos contenedores: `chibisafe` (frontend) y `chibisafe_server` (API y gestión de archivos).
* La ruta `/ruta/a/uploads` debe apuntar al almacenamiento físico deseado.
* También se encuentra el `docker-compose.yml`, el `Caddyfile` y otros servicios adicionales en el [repositorio personal (Gitea)](https://gitea.jtrapero.eu.org/R4di04kt1v3/ChronosCMPS/src/branch/main/Compartici%C3%B3n%20de%20archivos/Chibisafe).

---

### Caddyfile usado

```caddy
# Chibisafe
chibi.midominio.eu.org {
	route {
		file_server * {
			root /app/uploads
			pass_thru
		}

		@api path /api/*
		reverse_proxy @api http://localhost:8674 {
			header_up Host {http.reverse_proxy.upstream.hostport}
			header_up X-Real-IP {http.request.header.X-Real-IP}
		}

		@docs path /docs*
		reverse_proxy @docs http://localhost:8674 {
			header_up Host {http.reverse_proxy.upstream.hostport}
			header_up X-Real-IP {http.request.header.X-Real-IP}
		}

		reverse_proxy http://localhost:8001 {
			header_up Host {http.reverse_proxy.upstream.hostport}
			header_up X-Real-IP {http.request.header.X-Real-IP}
		}
	}

	encode gzip

	log {
		output file /var/log/caddy/chibi-access.log
		format transform "{request>headers>X-Forwarded-For>[0]:request>remote_ip} - {user_id} [{ts}] \"{request>method} {request>uri} {request>proto}\" {status} {size}" {
			time_format "02/Jan/2006:15:04:05 -0700"
		}
	}
}
```

* Se define `file_server` para servir directamente los archivos.
* Se separan rutas para API (`/api/*`) y docs (`/docs*`).
* `reverse_proxy` principal al frontend para todo lo demás.

---

### Errores comunes o decisiones importantes

* No es obligatorio usar el Caddyfile que propone Chibisafe; se puede adaptar libremente.
* Revisar bien la ruta de los volúmenes para evitar perder uploads.
---

### Resumen breve

* `docker-compose.yml` con dos contenedores: frontend y backend.
* Volúmenes bien definidos.
* Caddyfile adaptado al dominio propio.
* Revisar siempre la ruta `/app/uploads`.

---

### Referencias

* [Repositorio oficial de Chibisafe](https://github.com/chibisafe/chibisafe)
* [Documentación oficial de Chibisafe](https://chibisafe.app/docs/intro)