---
title: 'Un serveur de fichiers simple'
url: 'http://papycasu.fr/fr/blog/un-serveur-de-fichiers-simple'
markdown: 'http://papycasu.fr/fr/blog/un-serveur-de-fichiers-simple.md'
lang: fr
date: '2025-03-10'
description: "Je cherchais un moyen simple de partager des fichiers avec la famille. Si vous voulez tout savoir, ce sont en particulier des films Super8 de mon grand-père que j'ai scanné et que je voulais partager avec la famille. La première solution que j'avais trouvée, c'était de faire une petite page html av…"
taxonomy:
  tag:
    - docker
    - serveur
    - go
---

# [Un serveur de fichiers simple](http://papycasu.fr/fr/blog/un-serveur-de-fichiers-simple)

   10th Mar 2025   [docker](http://papycasu.fr/tag:docker#body-wrapper) [serveur](http://papycasu.fr/tag:serveur#body-wrapper) [go](http://papycasu.fr/tag:go#body-wrapper)  

Je cherchais un moyen simple de partager des fichiers avec la famille. Si vous voulez tout savoir, ce sont en particulier des films Super8 de mon grand-père que j'ai scanné et que je voulais partager avec la famille.

La première solution que j'avais trouvée, c'était de faire une petite page html avec des balises `media`. Ca marchait bien, mais assez relou à mettre à jour si je scannais une nouvelle bobine.

Et par hasard, je suis tombé sur [Go Http Server](https://github.com/codeskyblue/gohttpserver). Il s'agit, comme son nom l'indique, d'un serveur codé en Go. Perso, je n'y connais rien en Go, et je n'avais pas envie d'installer tout un environnement de dev rien que pour ça.

Mais il existe une image Docker, et ça j'aime bien. Cependant, l'image fournie par le dev n'a pas été mise à jour depuis 4 ans. Donc j'ai fait ce que tout le monde aurait fait, j'ai construit mon image moi même, en modifiant un tout petit peu le Dockerfile d'origine (en particulier, changé l'image de base, et surtout, ne pas oublié de faire tourner apk update && apk upgrade, ce que le dev original avait oublié...)

Du coup, j'ai maintenant [une image correcte](https://hub.docker.com/r/abesnier/gohttpserver), que j'utilise pour deux projets [\*](#renvoi).

Alors, comment ça marche, Et bien il suffit d'un petit docker-compose.yml, comme ce qui suit:

```
name: 8mm_web
services:
    web:
        image: abesnier/gohttpserver
        container_name: 8mm_web
        volumes:
            - "./www/public/videos/:/app/public/"
        environment:
            - TZ=Europe/Paris 
        command: --auth-type http --auth-http username:password --conf /app/public/.ghs.yml
        restart: always
        networks:
            - npm_default        
networks:
  npm_default:
    name: nginxproxymanager_default
    external: true
```

On référence l'image (`image: abesnier/gohttpserver`), un chemin à partager (`- "./www/public/videos/:/app/public/"`), un type d'authentification (`--auth-type http --auth-http username:password`), et éventuellement un fichier de configuration (`--conf /app/public/.ghs.yml`), qui permet en particulier d'exclure des fichiers à lister (dans cet exemple, j'exclue bien sûr le fichier de configuration en lui-même) :

```
title: "Le titre de la page"
theme: green
accessTables:
- regex: .ghs.yml
  allow: false
```

Par défaut, ce serveur écoute sur le port 8000. Dans mon cas, je ne spécifie pas de port, car j'utilise [Nginx Proxy Manager](https://nginxproxymanager.com/) pour gérer les sous-domaines, certificats, etc... d'où la section `network` dans mon docker-compose.

Et au final, cela me donne une page simple comme ceci:

![gohttpserver1](http://papycasu.fr/images/0/f/0/8/a/0f08aab3e1099557583be10abda49c3cb7cc6f3e-gohttpserver1.png "gohttpserver1")

&ast; Dont un [public](http://hse.papycasu.fr/), qui est collection de Tool Box Talks, servez-vous!

---

## Navigation

- Parent: [Blog](http://papycasu.fr/fr/index.md)
- Previous: [Merci à vous!](http://papycasu.fr/fr/blog/merci-a-vous.md)
- Next: [Release du code de MyOTP](http://papycasu.fr/fr/blog/release-du-code-de-myotp.md)
