====== 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]]