Aller au contenu principal

Filebrowser sur GKE Autopilot

Filebrowser sur GKE Autopilot

File Browser est un gestionnaire de fichiers web léger et open source écrit en Go — il sert une arborescence de répertoires en HTTP pour parcourir, téléverser, modifier et partager des fichiers. Ce module déploie Filebrowser sur GKE Autopilot en s'appuyant sur le socle App_GKE, qui provisionne et gère l'infrastructure Google Cloud et Kubernetes partagée.

Ce guide se concentre sur les services cloud utilisés par Filebrowser et sur la manière de les explorer et de les exploiter depuis la console Google Cloud et la ligne de commande. Pour les mécanismes communs à toutes les applications GKE — Workload Identity, entrée, mise à l'échelle automatique, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC Service Controls, sauvegardes et cycle de vie du déploiement — reportez-vous au guide du socle App_GKE plutôt que de les répéter ici.


1. Vue d'ensemble​

Filebrowser s'exécute sous forme d'une unique charge de travail web en Go. Il est volontairement minimal — ni base de données SQL, ni cache, ni file d'attente — si bien que le déploiement assemble un petit ensemble de services Google Cloud :

FonctionnalitéService Google CloudRemarques
CalculGKE AutopilotUn seul pod Go, 1 vCPU / 1 GiB par défaut ; min = max = 1
État persistantCloud Storage (GCS FUSE) ou un PVC blocMonté sur /database ; contient la base SQLite embarquée
Base de donnéesAucune (SQLite embarquée)database_type = NONE ; aucune instance Cloud SQL n'est provisionnée
Cache et file d'attenteAucunFilebrowser n'utilise pas Redis
SecretsSecret ManagerAucun secret applicatif généré ; les utilisateurs résident dans la base SQLite
EntréeCloud Load BalancingService ClusterIP par défaut ; domaine personnalisé + certificat géré disponibles

Valeurs par défaut judicieuses à connaître d'emblée :

  • L'état réside dans un fichier SQLite embarqué sur /database. Filebrowser n'a pas de base de données Cloud SQL. Ses utilisateurs, ses paramètres et ses liens de partage sont stockés dans /database/filebrowser.db. Par défaut, /database est un bucket Cloud Storage monté via GCS FUSE ; activer un StatefulSet le remplace par un PVC bloc (voir ci-dessous).
  • GCS FUSE ou PVC bloc. Avec stateful_pvc_enabled = true, la charge de travail devient un StatefulSet doté d'un PVC bloc persistant (20Gi par défaut) monté sur /database, et le volume GCS FUSE est automatiquement désactivé pour éviter un double montage sur le même chemin. Un PVC bloc offre à SQLite un véritable verrouillage de fichiers POSIX et constitue le choix le plus robuste pour un gestionnaire de fichiers avec état.
  • Instance unique par conception. min_instance_count = max_instance_count = 1. SQLite ne tolère pas les écritures concurrentes — conservez un seul réplica.
  • L'identifiant par défaut est admin / admin. Filebrowser le crée au premier démarrage ; modifiez-le dans l'interface web immédiatement après le déploiement.
  • Pas de Redis, pas de job d'initialisation. enable_redis = false et aucun job db-init ne s'exécute ; le pod est prêt dès que le conteneur démarre.
  • Port du conteneur 80. Filebrowser sert du HTTP/1.1 simple sur le port 80.
  • Le domaine personnalisé est activé par défaut. enable_custom_domain = true et reserve_static_ip = true ; renseignez application_domains pour servir un nom d'hôte avec un certificat géré par Google.

2. Services Google Cloud et comment les explorer​

Toutes les commandes supposent que vous avez exécuté gcloud container clusters get-credentials <cluster> --region <region> --project <project> et que PROJECT, REGION et NAMESPACE sont définis. L'espace de noms et les autres identifiants figurent dans les Sorties du déploiement.

A. GKE Autopilot — la charge de travail Filebrowser​

Filebrowser s'exécute en tant que Deployment à réplica unique (ou StatefulSet lorsque stateful_pvc_enabled = true) planifié sur Autopilot, qui facture le CPU et la mémoire réellement demandés par le pod.

  • Console : Kubernetes Engine → Workloads → sélectionnez la charge de travail Filebrowser pour consulter les pods, les révisions et les événements. Kubernetes Engine → Services & Ingress affiche le Service et l'éventuelle IP externe.
  • CLI :
    kubectl get pods,svc -n "$NAMESPACE"
    kubectl get statefulset,pvc -n "$NAMESPACE" # when stateful_pvc_enabled = true
    kubectl logs -n "$NAMESPACE" deploy/<service-name> --tail=100

Consultez App_GKE pour la gestion d'Autopilot, de la mise à l'échelle et du type de charge de travail (Deployment ou StatefulSet).

B. Cloud Storage / PVC bloc — état persistant​

Filebrowser n'a pas de base de données Cloud SQL. Sa base de données SQLite embarquée (/database/filebrowser.db) est stockée sur le montage /database :

  • Par défaut (Deployment) : un bucket Cloud Storage dédié monté via GCS FUSE au moyen du pilote CSI.

  • StatefulSet (stateful_pvc_enabled = true) : un PersistentVolumeClaim bloc (20Gi par défaut, StorageClass standard-rwo) monté sur /database ; le volume GCS FUSE est désactivé pour éviter un double montage.

  • Console : Cloud Storage → Buckets ; ou Kubernetes Engine → Storage → PVCs.

  • CLI :

    gcloud storage buckets list --project "$PROJECT" --filter="name~storage"   # GCS FUSE mode
    gcloud storage ls gs://<data-bucket>/filebrowser.db
    kubectl get pvc -n "$NAMESPACE" # PVC mode

Consultez App_GKE pour les options CMEK, GCS FUSE et les PVC de StatefulSet.

C. Secret Manager​

Filebrowser ne génère aucun secret applicatif — il n'y a ni clé de chiffrement ni secret JWT à gérer, car tout l'état d'identité réside dans la base SQLite. Secret Manager reste utilisé par le socle pour les secrets gérés par la plateforme (par exemple les jetons CI/CD s'ils sont configurés).

  • Console : Security → Secret Manager.
  • CLI :
    gcloud secrets list --project "$PROJECT" --filter="name~filebrowser"

Consultez App_GKE pour l'intégration Secret Store CSI et la rotation.

D. Réseau et entrée​

Par défaut, le Service est de type ClusterIP, avec enable_custom_domain = true et reserve_static_ip = true, de sorte qu'un Ingress doté d'un certificat géré par Google puisse servir le nom d'hôte fourni sur une IP stable. Sans domaine personnalisé, la charge de travail est accessible au sein du cluster à l'adresse http://<service>.<namespace>.svc.cluster.local.

  • Console : Network services → Load balancing ; VPC network → IP addresses.
  • CLI :
    kubectl get ingress,svc -n "$NAMESPACE"
    gcloud compute addresses list --project "$PROJECT"

Consultez App_GKE pour les domaines personnalisés, Cloud CDN et les détails sur l'IP statique.

E. Cloud Logging et Monitoring​

Les sorties stdout/stderr des pods sont envoyées à Cloud Logging ; les métriques de GKE sont envoyées à Cloud Monitoring. Des tests de disponibilité et des règles d'alerte facultatifs sont disponibles.

  • Console : Logging → Logs Explorer ; Monitoring → Dashboards / Alerting.
  • CLI :
    gcloud logging read 'resource.type="k8s_container" AND resource.labels.namespace_name="'"$NAMESPACE"'"' \
    --project "$PROJECT" --limit 50

3. Comportement de l'application Filebrowser​

  • Aucune configuration de base de données au premier déploiement. Il n'y a ni job db-init ni instance Cloud SQL. Au premier démarrage, le binaire Filebrowser crée sa base de données SQLite à /database/filebrowser.db si elle n'existe pas encore et crée l'utilisateur par défaut admin/admin.
  • Persistance de l'état. Les utilisateurs, les paramètres et les liens de partage résident entièrement dans /database/filebrowser.db sur le montage /database (bucket GCS FUSE ou PVC bloc) et survivent aux redémarrages et aux redéploiements. FB_ROOT = /srv est l'arborescence de fichiers servie par l'application.
  • Les identifiants par défaut doivent être modifiés. La connexion admin/admin créée initialement est bien connue. Connectez-vous et modifiez le mot de passe (et idéalement le nom d'utilisateur) dans l'interface web immédiatement après le premier déploiement.
  • Contrainte d'écrivain unique. La base de données SQLite embarquée ne prend pas en charge les écritures concurrentes. Conservez min_instance_count = max_instance_count = 1 ; un PVC bloc de StatefulSet offre un verrouillage de fichiers correct mais reste à réplica unique.
  • Chemin de santé. Les sondes de démarrage et d'activité ciblent /health — le point de terminaison de santé non authentifié de Filebrowser, qui renvoie 200 dès que le serveur écoute :
    kubectl exec -n "$NAMESPACE" deploy/<service-name> -- wget -qO- http://localhost:80/health
  • Pas de Redis. enable_redis = false ; Filebrowser est un gestionnaire de fichiers autonome, sans file d'attente ni cache. La valeur par défaut enable_redis = true d'App_GKE est explicitement remplacée.
  • Une image construite sur mesure nécessite imagePullPolicy = Always. L'image est une fine surcouche construite et mise en miroir dans Artifact Registry ; App_GKE définit imagePullPolicy = Always pour les images personnalisées/mises en miroir, afin qu'un redéploiement après reconstruction récupère toujours la nouvelle couche.

4. Variables de configuration​

Les variables sont regroupées exactement comme sur la plateforme de déploiement. Seuls les paramètres propres à Filebrowser ou notables pour lui sont listés ; toutes les autres entrées sont héritées d'App_GKE avec leur comportement et leurs valeurs par défaut standard.

Groupe 1 — Projet et identité​

VariableValeur par défautDescription
project_id(obligatoire)Projet Google Cloud cible.
regionus-central1Région de la charge de travail et des ressources régionales.

Groupe 3 — Identité de l'application​

VariableValeur par défautDescription
application_namefilebrowserNom de base des ressources. Ne pas modifier après le premier déploiement.
application_versionlatestTag de l'image Filebrowser. latest se résout vers la version épinglée v2.32.0 au moment du build ; épinglez explicitement une version en production.

Groupe 4 — Exécution et mise à l'échelle​

VariableValeur par défautDescription
deploy_applicationtrueDéfinissez false pour ne provisionner que l'infrastructure.
cpu_limit1000mCPU par pod ; Filebrowser est léger.
memory_limit1GiMémoire par pod ; 256Mi suffisent largement pour le serveur Go.
min_instance_count1Nombre minimal de réplicas. Conservez 1 — SQLite n'accepte qu'un seul écrivain.
max_instance_count1Conservez 1 pour éviter les écritures SQLite concurrentes.
container_port80L'écouteur HTTP/1.1 de Filebrowser.
enable_cloudsql_volumefalseFilebrowser n'utilise pas Cloud SQL ; laissez false.
enable_image_mirroringtrueMet en miroir l'image Filebrowser dans Artifact Registry.

Groupe 6 — Backend GKE et cluster​

VariableValeur par défautDescription
service_typeLoadBalancerMode d'exposition du Service Kubernetes ; placez un Ingress devant via enable_custom_domain.
workload_typenullSe résout automatiquement en StatefulSet lorsque stateful_pvc_enabled = true, sinon en Deployment.
session_affinityNoneRéplica unique : le routage persistant est inutile.

Groupe 7 — StatefulSet​

VariableValeur par défautDescription
stateful_pvc_enablednullDéfinissez true pour stocker /database sur un PVC bloc plutôt que sur GCS FUSE (recommandé pour le verrouillage de fichiers SQLite).
stateful_pvc_size20GiTaille de stockage du PVC par pod.
stateful_pvc_mount_path/databaseChemin de montage — doit correspondre au répertoire de FB_DATABASE.
stateful_pvc_storage_classstandard-rwoStorageClass (standard-rwo pour un PD équilibré ; premium-rwo pour davantage d'IOPS).

Groupe 9 — Règles de fiabilité​

VariableValeur par défautDescription
enable_pod_disruption_budgettrueProtège la disponibilité pendant les mises à niveau des nœuds.
pdb_min_available1Nombre minimal de pods disponibles pendant les interruptions volontaires.

Groupe 10 — Observabilité et santé​

VariableValeur par défautDescription
startup_probeHTTP /health, délai de 15sSonde de démarrage ; Filebrowser expose /health une fois prêt.
liveness_probeHTTP /health, délai de 30sSonde de vivacité sur le point de terminaison non authentifié /health.
uptime_check_config{enabled=false, path="/health"}Test de disponibilité Cloud Monitoring ; désactivé par défaut.
alert_policies[]Règles d'alerte sur métriques facultatives.

Groupe 13 — Système de fichiers (NFS)​

VariableValeur par défautDescription
enable_nfsfalseNFS est désactivé par défaut ; inutile pour Filebrowser.
nfs_mount_path/mnt/nfsChemin de montage dans le conteneur.

Groupe 14 — Cloud Storage et Artifact Registry​

VariableValeur par défautDescription
create_cloud_storagetrueCrée le bucket /database de Filebrowser (et les éventuels storage_buckets supplémentaires).
storage_buckets[]Buckets supplémentaires à provisionner.
gcs_volumes[]Montages GCS FUSE supplémentaires. Le bucket /database est ajouté automatiquement (sauf si un PVC est utilisé).
manage_storage_kms_iam / enable_artifact_registry_cmekfalseOptions CMEK.

Groupe 15 — Cache et file d'attente Redis​

VariableValeur par défautDescription
enable_redistrueHérité d'App_GKE et non remplacé par ce module. Filebrowser n'utilise pas Redis ; définissez-le donc à false lors du déploiement — le laisser activé ajoute une dépendance inutilisée.

Groupe 16 — Backend de base de données​

Sans objet — Filebrowser n'a pas de base de données SQL. database_password_length et db_name / db_user ne sont transmis au socle que pour des raisons de compatibilité ; database_type est fixé à NONE par Filebrowser_Common.

Groupe 19 — Domaine personnalisé, IP statique et réseau​

VariableValeur par défautDescription
enable_custom_domaintrueProvisionne un Ingress pour les noms d'hôte personnalisés + un certificat géré.
application_domains[]Noms d'hôte à servir.
reserve_static_iptrueIP externe stable d'un redéploiement à l'autre.

Groupe 20 — Identity-Aware Proxy (IAP)​

VariableValeur par défautDescription
enable_iapfalseExige une connexion Google devant Filebrowser.
iap_authorized_users / iap_authorized_groups[]Personnes autorisées à accéder.
iap_oauth_client_id / iap_oauth_client_secret""Obligatoires lorsque IAP est activé (sensibles).

Groupe 22 — VPC Service Controls et journalisation d'audit​

VariableValeur par défautDescription
enable_vpc_scfalseApplique un périmètre VPC-SC (nécessite organization_id).
vpc_cidr_ranges / vpc_sc_dry_run(définis)Plages CIDR du niveau d'accès / mode simulation (dry-run).
enable_audit_loggingfalseJournaux Cloud Audit Logs détaillés.

Toutes les autres entrées suivent le comportement standard d'App_GKE.


5. Sorties​

Ces valeurs sont renvoyées après un déploiement réussi et constituent le moyen le plus rapide de localiser et d'explorer les ressources en cours d'exécution.

SortieDescription
service_nameNom du Service Kubernetes.
namespaceEspace de noms dans lequel s'exécute la charge de travail.
service_cluster_ipClusterIP interne au cluster.
stage_service_cluster_ipsAssociation des ClusterIP des services par étape.
service_external_ipIP externe du LoadBalancer (lorsqu'une IP statique est réservée).
service_urlURL permettant d'accéder à Filebrowser.
storage_bucketsBuckets Cloud Storage créés (y compris le bucket /database en mode GCS FUSE).
network_name / network_exists / regionsRéseau VPC, présence, régions disponibles.
container_image / container_registryImage déployée et dépôt Artifact Registry.
monitoring_enabled / monitoring_notification_channelsÉtat de la surveillance et canaux.
initialization_jobsNoms des éventuelles jobs d'initialisation (vide par défaut).
statefulset_nameNom du StatefulSet (lorsque stateful_pvc_enabled = true).
deployment_id / tenant_id / resource_prefixIdentifiants de nommage.
project_id / project_numberIdentifiants du projet.
cicd_enabled / cicd_configurationÉtat et détails du CI/CD (dépôt, déclencheur, registre).
github_repository_url / github_repository_owner / github_repository_nameDétails GitHub du CI/CD.
artifact_registry_repository / cloudbuild_trigger_name / cloudbuild_trigger_idRegistre et déclencheur de build.
kubernetes_readyIndique si le cluster / la charge de travail est prêt.
vpc_sc_enabled / vpc_sc_perimeter_name / vpc_sc_dry_run_modeÉtat de VPC-SC.
audit_logging_enabled / artifact_registry_cmek_enabledÉtat des journaux d'audit et de CMEK.

6. Pièges de configuration et valeurs par défaut judicieuses​

Risque : Critique (perte de données / panne / sécurité) — Élevé (service dégradé) — Moyen (coût ou dégradation partielle) — Faible (mineur).

Validation héritée au moment du plan. Ce module transmet sa configuration au moteur du socle App_GKE, qui valide les valeurs et leurs combinaisons au moment du plan — IAP sans identifiants OAuth, min_instance_count > max_instance_count, workload_type = Deployment combiné à stateful_pvc_enabled = true, des valeurs de mémoire de ResourceQuota sans suffixe d'unité binaire. Une configuration invalide fait échouer le plan avec une erreur claire et nommée avant la création de toute ressource ; la plupart des erreurs ci-dessous sont donc détectées en amont plutôt qu'à l'apply ou à l'exécution.

ParamètreValeur judicieuseRisqueConséquence en cas d'erreur
Volume /database (bucket ou PVC)Ne jamais le supprimerCritiqueLa base SQLite embarquée réside ici ; la supprimer détruit tous les utilisateurs, paramètres et liens de partage.
admin / admin (identifiant créé initialement)Modifier à la première connexionCritiqueConserver l'identifiant par défaut permet à quiconque peut atteindre le service d'en prendre le contrôle total.
max_instance_count1ÉlevéUne valeur >1 place des écrivains concurrents sur l'unique base SQLite, ce qui la corrompt.
stateful_pvc_mount_path/databaseÉlevéDoit correspondre au répertoire de FB_DATABASE ; une incohérence stocke la base sur un disque éphémère et perd l'état au redémarrage.
stateful_pvc_enabled + enable_gcs_storage_volumeLaisser Common désactiver GCS FUSEÉlevéLes deux sur /database provoquent un double montage ; Common définit automatiquement enable_gcs_storage_volume = false lorsque le PVC est activé — ne forcez pas les deux.
container_port80ÉlevéFilebrowser écoute sur le port 80 ; un autre port fait échouer la sonde de démarrage et le pod ne devient jamais Ready.
Chemin de startup_probe / liveness_probe/healthÉlevéFaire pointer les sondes vers un chemin authentifié renvoie 401/403 et le pod ne devient jamais Ready.
enable_cloudsql_volumefalseMoyenFilebrowser n'utilise pas Cloud SQL ; l'activer ajoute un sidecar Auth Proxy inutile.
enable_redistrueMoyenFilebrowser n'utilise pas Redis, mais la valeur par défaut true d'App_GKE est héritée telle quelle — définissez-la explicitement à false, sinon une dépendance inutilisée est ajoutée.
enable_iapidentifiants requisÉlevéActiver IAP sans iap_oauth_client_id/secret exposerait silencieusement le service sans authentification (bloqué par une vérification au moment du plan).
application_versionépingler en productionMoyenlatest se résout vers la version épinglée v2.32.0 au moment du build ; épinglez explicitement une version pour maîtriser les mises à niveau.

Pour le comportement du socle évoqué tout au long de cette page — IAM et Workload Identity, mise à l'échelle automatique, entrée et certificats, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC-SC, sauvegardes et mise en miroir des images — consultez App_GKE. La configuration applicative propre à Filebrowser partagée avec la variante Cloud Run est décrite dans Filebrowser_Common.

Need RAD to do something it does not do yet? Request it on the roadmap, or vote on what is already there.