====== copyparty ======
[[..:aplicaciones_web|Aplicación web]] para convertir cualquier dispositivo en un **servidor de ficheros** con capacidad de reanudar subidas y descargas (y muchas más cosas). **Todo en un único fichero** (//script//). Hecho con [[informatica:programacion:python|Python]].
* [[https://github.com/9001/copyparty|Repositorio de código]]
* [[https://a.ocv.me/pub/demo/|Demo]]
{{ https://user-images.githubusercontent.com/241032/165864907-17e2ac7d-319d-4f25-8718-2f376f614b51.png |}}
===== Características =====
* Cuentas de usuario y gestión de permisos
* Servidor HTTP/HTTPS
* Servidor FTP/FTPS
* Servidor Webdav
* Servidor SMB/CIFS
* Soporte de mDNS y SSDP
* Gestión de ficheros (copiar, pegar, eliminar, renombrar, comprimir...)
* Galería de imágenes
* Reproducción de audio
* Visor de texto con resaltado de sintaxis
* Buscador de ficheros
* Editor [[..:..:markdown|Markdown]].
* Subidas de ficheros muy rápidas (en trozos y en paralelo) con comprobación de integridad (prevención de corrupción).
* **Portabilidad** extrema: Un solo archivo Python (menos de 800 KB) o ejecutable para Windows (''copyparty.exe'') s Sin dependencias obligatorias; funciona en Python 2.7/3.3+ y sistemas como Linux, Windows, macOS, Android, Raspberry Pi, FreeBSD y Docker 115.
* Traducido a más de 10 idiomas (incluido el español).
===== Casos de uso =====
* Compartir archivos en redes locales: Ideal para LAN parties o entornos sin internet: Usa SMB/mDNS para acceder desde consolas retro (PSP, Nintendo 3DS) o navegadores antiguos (IE6).
* Backup personal automatizado: Sube carpetas locales via FTP/WebDAV con reglas de retención (p. ej., borrar archivos tras 30 días).
* Mediacenter doméstico: Organiza bibliotecas de música/vídeo con búsqueda por etiquetas y streaming desde navegadores o apps móviles.
* Colaboración en equipos:
* Repositorios temporales: Comparte enlaces con contraseña o autodestrucción para proyectos.
* Sincronización vía RSS: Monitorea cambios en carpetas para integrar con podcasters.
* Administración remota de dispositivos: Usa Copyparty en Raspberry Pi para gestionar backups de IoT o extraer logs en tiempo real.
* Migración de datos masivos: Transfiere terabytes entre servidores con subidas reanudables y deduplicación para evitar redundancias.
* Desarrollo y debugging: Visualiza logs en tiempo real o comparte builds de software mediante WebDAV montado como unidad local.
==== Exponer temporalmente a Internet ====
Si queremos compartir una instancia local (en nuestro equipo, en nuestra LAN) en Internet de manera temporal, podemos hacer uso de los //quick tunnels// de [[..:cloudflared|cloudflared]]:
cloudflared tunnel --url http://localhost:3923
El comando anterior creará un túnel (y generará una URL) para que cualquier pueda conectarse a nuestra instancia local de **copyparty** para acceder a nuestros archivos o subirnos archivos.
Como la gente se conectará a través de Cloudflare, si queremos detectar las IPs de los clientes correctamente necesitaremos ejecutar **copyparty** con ''%%--xff-hdr cf-connecting-ip%%''.
===== Instalación =====
Copyparty no necesita instalación, se trata de un script de Python que puede usarse en cualquier sistema que tenga Python instalado. A mayores, existe una versión compilada para Windows útil en los casos donde no tengamos o no podamos instalar Python.
==== Linux / Android / macos / Windows (con Python) ====
Solo es necesario tener instalado Python (versión 2 o 3) y ejecutar el fichero ''copyparty-sfx.py''.
==== Docker ====
---
services:
app:
image: copyparty/ac
container_name: copyparty
user: 1000:1000
volumes:
- ./data:/w
- ./config:/cfg
ports:
- 3923:3923
restart: unless-stopped
healthcheck:
# hide it from logs with "/._" so it matches the default --lf-url filter
test: ["CMD-SHELL", "wget --spider -q 127.0.0.1:3923/?reset=/._"]
interval: 1m
timeout: 2s
retries: 5
start_period: 15s
* ''/w'' es la ruta dentro de contenedor que se comparte por defecto.
* ''/conf'': ruta que contendrá ficheros ''.conf'' para configurar **copyparty**.
Las ediciones de las imágenes de Docker disponibles:
* ''copyparty/min'': solamente **copyparty**
* ''copyparty/im'': con capacidad para generar miniaturas de imágenes
* ''copyparty/ac'': ''im'' con el añadido de FFmpeg (**recomendada**).
* ''copyparty/iv'': ''ac'' más generación de miniaturas de HEIF / AVIC / JXL.
* ''copyparty/dj'': ''iv'' más aplicaciones para detectar el BPM de las canciones.
===== Configuración =====
Completar este apartado. Podemos coger información de https://ocv.me/copyparty/helptext.html
Ejemplo de fichero de configuración:
# not actually YAML but lets pretend:
# -*- mode: yaml -*-
# vim: ft=yaml:
# append some arguments to the commandline;
# accepts anything listed in --help (leading dashes are optional)
# and inline comments are OK if there is 2 spaces before the '#'
[global]
p: 8086, 3939 # listen on ports 8086 and 3939
e2dsa # enable file indexing and filesystem scanning
e2ts # and enable multimedia indexing
z, qr # and zeroconf and qrcode (you can comma-separate arguments)
# create users:
[accounts]
ed: 123 # username: password
k: k
# create volumes:
[/] # create a volume at "/" (the webroot), which will
. # share the contents of "." (the current directory)
accs:
r: * # everyone gets read-access, but
rw: ed # the user "ed" gets read-write
# let's specify different permissions for the "priv" subfolder
# by creating another volume at that location:
[/priv]
./priv
accs:
r: k # the user "k" can see the contents,
rw: ed # while "ed" gets read-write
# share /home/ed/Music/ as /music and let anyone read it
# (this will replace any folder called "music" in the webroot)
[/music]
/home/ed/Music
accs:
r: *
# and a folder where anyone can upload, but nobody can see the contents
[/dump]
/home/ed/inc
accs:
w: *
flags:
e2d # the e2d volflag enables the uploads database
nodupe # the nodupe volflag rejects duplicate uploads
# (see --help-flags for all available volflags to use)
# and a folder where anyone can upload
# and anyone can access their own uploads, but nothing else
[/sharex]
/home/ed/inc/sharex
accs:
wG: * # wG = write-upget = see your own uploads only
rwmd: ed, k # read-write-modify-delete for users "ed" and "k"
flags:
e2d, d2t, fk: 4
# volflag "e2d" enables the uploads database,
# "d2t" disables multimedia parsers (in case the uploads are malicious),
# "dthumb" disables thumbnails (same reason),
# "fk" enables filekeys (necessary for upget permission) (4 chars long)
# -- note that its fine to combine all the volflags on
# one line because only the last volflag has an argument
# this entire config file can be replaced with these arguments:
# -u ed:123 -u k:k -v .::r:a,ed -v priv:priv:r,k:rw,ed -v /home/ed/Music:music:r -v /home/ed/inc:dump:w:c,e2d,nodupe -v /home/ed/inc/sharex:sharex:wG:c,e2d,d2t,fk=4
# but note that the config file always wins in case of conflicts
===== Gestión de permisos =====
==== Usuarios ====
En el archivo de configuración:
[accounts]
pepito: grillo # usuario:contraseña
fulanito: secreto
Aunque se indique usuario y contraseña, a la hora de identificarse, **copyparty** solo preguntará la contraseña y no el usuario.
Esto se ha discutido [[https://github.com/9001/copyparty/issues/511|en esta incidencia de GitHub]].
==== Permisos ====
^ Permiso ^ Descripción ^
| ''r'' | (//read//): ver ficheros, descargarlos... |
| ''w'' | (//write//): subir ficheros y mover / copiar ficheros a este directorio |
| ''m'' | (//move//): mueve ficheros / directorios desde este directorio |
| ''d'' | (//delete//): elimina ficheros / directorios |
| ''.'' | (//dots//): posibilidad de mostrar los archivos que empiezan por punto |
| ''g'' | (//get//): solo descarga de ficheros, no puede ver el contenido de los directorios |
| ''G'' | (//upget//): igual que ''g'' pero los que suben ficheros pueden ver sus propias //filekeys// |
| ''h'' | (//html//): igual que ''g'', pero los directorios devuelven su ''index.html'', y las //filekeys// no son necesarias para ''index.html'' |
| ''a'' | (//admin//): puede ver la hora de las subidas, las direcciones IP de los usuarios que suben, etc. |
| ''A'' | (//all//): igual que ''rwmda'' (lectura / escritura / mover / borrar / admin / dotfiles) |
==== Volúmenes ====
En el fichero de configuración:
[/] # Esta URL será "mapeada" a this URL will be mapped to...
/srv # este directorio en el sistema de ficheros del servidor
accs:
r: * # acceso de lectura para todo el mundo (no se necesita cuenta de usuario)
[/music] # create another volume at this URL,
/mnt/music # which is mapped to this folder
accs:
r: u1, u2 # solo las cuentas "u1" y "u2" pueden leer
r: @g1 # solo las cuentas pertenecientes al grupo "g1" pueden leer
rw: u3 # solo la cuenta "u3" puede leer y escribir.
[/uploads]
/mnt/uploads
accs:
w: u1 # la cuenta "u1" puede subir ficheros, pero no puede ver / descargar ningún fichero.
rm: u2 # la cuenta "u2" navegar y mover los archivos de este volumen
[/i]
/mnt/ss
accs:
g: * # todo el que conozca la URL puede acceder a sus ficheros
===== Ejecutable para Windows =====
Si queremos usar Copyparty en un equipo Windows y no podemos instalar Python, existe una versión ejecutable llamada ''copyparty.exe''. Se puede descargar desde los ficheros (//assets//) de [[https://github.com/9001/copyparty/releases|las publicaciones]].
==== Configuración =====
Ejemplo de fichero de configuración ''copyparty.conf'':
# Configuración global
# --------------------
[global]
lo: ~/logs/cpp-%Y-%m%d.xz # log to c:\users\you\logs\
e2dsa, e2ts, z # sets 3 flags; see explanation
p: 80, 443 # listen on ports 80 and 443, not 3923
theme: 6 # default theme: protonmail-monokai
lang: eng # other options: nor, chi
# Cuentas de usuario
# ------------------
[accounts] # usernames and passwords
pepito: grillo # usuario y contraseña
# Volúmenes
# ---------
[/] # create a volume available at /
c:\pub # sharing this filesystem location
accs: # and set permissions:
r: * # everyone can read/download files,
rwmd: kevin # kevin can read/write/move/delete
[/inc] # create another volume at /inc
c:\pub\inc # sharing this filesystem location
accs: # permissions:
w: * # everyone can upload, but not browse
rwmd: kevin # kevin is admin here too
[/music] # and a third volume at /music
~/music # which shares c:\users\you\music
accs:
r: *
rwmd: kevin
* ''lo'': indica dónde escribir los //logs// del programa y de forma comprimida.
* ''p'': indica los puertos en los que escuchará Copyparty (por si no queremos usar por defecto el ''3923'')
* ''lang'': especifica el idioma de la interfaz
* ''theme'': indica la plantilla / tema a usar (del 0 al 7).
* ''z'': habilita Zeroconf (mDNS y SSDP)
* ''e2dsa'': escanea todos los directorios en el arranque para permitir búsquedas.
* ''e2ts'': habilita el escaneo de los metadatos de archivos musicales para poder buscar por ellos también.
Para lanzar Copyparty cargando esa configuración:
copyparty.exe -c copyparty.conf
===== Recursos =====
* [[https://www.reddit.com/r/selfhosted/comments/1m9roco/introducing_copyparty_the_foss_file_server/|Publicación del autor en Reddit]] (después de más de 5 años de desarrollo).
* [[https://github.com/9001/copyparty/blob/hovudstraum/docs/versus.md|Alternatives to copyparty]]