Git LFS inschakelen op code.overheid.nl (LFS_START_SERVER) #81

Closed
opened 2026-08-31 13:40:18 +00:00 by stephan.meijer · 4 comments

Verzoek

Zet de Git LFS-server aan op code.overheid.nl:

[server]
LFS_START_SERVER = true

Aanleiding

Bij de migratie van NLdoc van gitlab.com/logius/nldoc naar code.overheid.nl/Logius zijn 48 van de
59 repositories gemigreerd. De overige 11 gebruiken Git LFS en kunnen daardoor nu niet worden
overgezet. Ze staan als lege repositories klaar, met een toelichting in de omschrijving.

Waarom dit blokkeert

Git LFS vervangt grote bestanden door tekstbestandjes van circa 130 bytes (pointers); de werkelijke
inhoud staat op een LFS-server naast de repository. Omdat die pointers gewone kleine Git-objecten
zijn, slaagt een git push ook als de bestemming geen LFS-server heeft. De repository lijkt dan
gemigreerd, maar elk LFS-bestand is een onbruikbare verwijzing. Dat valt pas op wanneer iemand de
bestanden uitcheckt. Daarom zijn deze repositories bewust nog niet gepusht.

Bevindingen

  1. De instellingen-API meldt het rechtstreeks:

    $ curl -H "Authorization: token <redacted>" \
           https://code.overheid.nl/api/v1/settings/repository
    {"mirrors_disabled":false,"http_git_disabled":false,"migrations_disabled":false,
     "stars_disabled":false,"forks_disabled":false,"time_tracking_disabled":false,
     "lfs_disabled":true}
    
  2. Het LFS-endpoint is niet geregistreerd. Een read-only batch-verzoek op een bestaande repository
    geeft een kale HTTP 404, dus de route bestaat niet (het gaat niet om een ontbrekend object):

    $ curl -X POST https://code.overheid.nl/Logius/kwest.git/info/lfs/objects/batch \
        -H "Accept: application/vnd.git-lfs+json" \
        -H "Content-Type: application/vnd.git-lfs+json" \
        -d '{"operation":"download","transfers":["basic"],
             "objects":[{"oid":"000...000","size":1}]}'
    Not Found
    --> HTTP 404
    
  3. Ter controle: exact hetzelfde verzoek op gitlab.com geeft wel een geldige LFS-respons. Daarmee is
    het verzoek zelf goed gevormd en zit het verschil in de server:

    $ curl -X POST https://gitlab.com/logius/nldoc/web/editor.git/info/lfs/objects/batch \
        [identieke headers en body]
    {"objects":[{"oid":"000...000","size":1,
      "error":{"code":404,"message":"Object does not exist on the server ..."}}]}
    --> HTTP 200
    

Versie van de instantie: 15.0.7+gitea-1.22.0.

Benodigde opslag

478 MB, verdeeld over 170 objecten. Exact gemeten door alle LFS-pointers te lezen die bereikbaar
zijn vanaf main, develop en alle tags, ontdubbeld op object-id. Dit is dus de werkelijke
opslagbehoefte en niet een optelsom van bestandsgroottes.

Repository Objecten Omvang Inhoud
worker/page-regions-yolo 14 198,8 MB YOLO-modelgewichten, testafbeeldingen
worker/page-content-images 1 130,4 MB YOLO-modelgewicht, alleen nog in tags 1.0.0 t/m 1.4.0
worker/page-content-tables 1 110,1 MB model/model.safetensors
worker/image-page 23 25,6 MB Afbeeldingen voor snapshot-tests
lib/elixir/nldoc_conversion_reader_docx 104 10,0 MB *.docx testdocumenten
worker/page-content 4 1,3 MB Fixtures voor integratietests
web/nldoc.nl 8 0,6 MB *.docx, e2e-testdata
web/docs.nldoc.nl 2 0,6 MB /static/img/**
web/editor 7 0,3 MB *.docx, e2e-testdata
worker/document-mimetype-from-header 6 0,1 MB fixtures/**
web/website 0 0 MB LFS geconfigureerd, maar geen objecten aanwezig
Totaal 170 478 MB

Drie repositories met machine-learning-modellen zijn samen goed voor circa 92% van het totaal.

Vervolg

Zodra LFS aanstaat ronden we deze 11 repositories af met git lfs fetch --all en
git lfs push --all. Daarna is de migratie van NLdoc compleet.

Naast het aanzetten van de server is het goed om te weten of er een opslaglimiet per repository of per
organisatie geldt, en zo ja welke.

## Verzoek Zet de Git LFS-server aan op code.overheid.nl: ```ini [server] LFS_START_SERVER = true ``` ## Aanleiding Bij de migratie van NLdoc van `gitlab.com/logius/nldoc` naar `code.overheid.nl/Logius` zijn 48 van de 59 repositories gemigreerd. De overige **11 gebruiken Git LFS** en kunnen daardoor nu niet worden overgezet. Ze staan als lege repositories klaar, met een toelichting in de omschrijving. ## Waarom dit blokkeert Git LFS vervangt grote bestanden door tekstbestandjes van circa 130 bytes (pointers); de werkelijke inhoud staat op een LFS-server naast de repository. Omdat die pointers gewone kleine Git-objecten zijn, **slaagt een `git push` ook als de bestemming geen LFS-server heeft**. De repository lijkt dan gemigreerd, maar elk LFS-bestand is een onbruikbare verwijzing. Dat valt pas op wanneer iemand de bestanden uitcheckt. Daarom zijn deze repositories bewust nog niet gepusht. ## Bevindingen 1. De instellingen-API meldt het rechtstreeks: ```console $ curl -H "Authorization: token <redacted>" \ https://code.overheid.nl/api/v1/settings/repository {"mirrors_disabled":false,"http_git_disabled":false,"migrations_disabled":false, "stars_disabled":false,"forks_disabled":false,"time_tracking_disabled":false, "lfs_disabled":true} ``` 2. Het LFS-endpoint is niet geregistreerd. Een read-only batch-verzoek op een bestaande repository geeft een kale HTTP 404, dus de route bestaat niet (het gaat niet om een ontbrekend object): ```console $ curl -X POST https://code.overheid.nl/Logius/kwest.git/info/lfs/objects/batch \ -H "Accept: application/vnd.git-lfs+json" \ -H "Content-Type: application/vnd.git-lfs+json" \ -d '{"operation":"download","transfers":["basic"], "objects":[{"oid":"000...000","size":1}]}' Not Found --> HTTP 404 ``` 3. Ter controle: exact hetzelfde verzoek op gitlab.com geeft wel een geldige LFS-respons. Daarmee is het verzoek zelf goed gevormd en zit het verschil in de server: ```console $ curl -X POST https://gitlab.com/logius/nldoc/web/editor.git/info/lfs/objects/batch \ [identieke headers en body] {"objects":[{"oid":"000...000","size":1, "error":{"code":404,"message":"Object does not exist on the server ..."}}]} --> HTTP 200 ``` Versie van de instantie: `15.0.7+gitea-1.22.0`. ## Benodigde opslag **478 MB, verdeeld over 170 objecten.** Exact gemeten door alle LFS-pointers te lezen die bereikbaar zijn vanaf `main`, `develop` en alle tags, ontdubbeld op object-id. Dit is dus de werkelijke opslagbehoefte en niet een optelsom van bestandsgroottes. | Repository | Objecten | Omvang | Inhoud | |---|---:|---:|---| | `worker/page-regions-yolo` | 14 | 198,8 MB | YOLO-modelgewichten, testafbeeldingen | | `worker/page-content-images` | 1 | 130,4 MB | YOLO-modelgewicht, alleen nog in tags 1.0.0 t/m 1.4.0 | | `worker/page-content-tables` | 1 | 110,1 MB | `model/model.safetensors` | | `worker/image-page` | 23 | 25,6 MB | Afbeeldingen voor snapshot-tests | | `lib/elixir/nldoc_conversion_reader_docx` | 104 | 10,0 MB | `*.docx` testdocumenten | | `worker/page-content` | 4 | 1,3 MB | Fixtures voor integratietests | | `web/nldoc.nl` | 8 | 0,6 MB | `*.docx`, e2e-testdata | | `web/docs.nldoc.nl` | 2 | 0,6 MB | `/static/img/**` | | `web/editor` | 7 | 0,3 MB | `*.docx`, e2e-testdata | | `worker/document-mimetype-from-header` | 6 | 0,1 MB | `fixtures/**` | | `web/website` | 0 | 0 MB | LFS geconfigureerd, maar geen objecten aanwezig | | **Totaal** | **170** | **478 MB** | | Drie repositories met machine-learning-modellen zijn samen goed voor circa 92% van het totaal. ## Vervolg Zodra LFS aanstaat ronden we deze 11 repositories af met `git lfs fetch --all` en `git lfs push --all`. Daarna is de migratie van NLdoc compleet. Naast het aanzetten van de server is het goed om te weten of er een opslaglimiet per repository of per organisatie geldt, en zo ja welke.
Author
Meer info: https://forgejo.org/docs/latest/admin/config-cheat-sheet/#lfs-lfs
Author

Kleine aanvulling: overweeg om LFS meteen op een S3-compatibele opslag in te richten in plaats van op
lokale schijf. Denk aan SeaweedFS, Garage, Rook-Ceph of MinIO. Dat schaalt beter mee en scheelt later
een migratie van de objecten.

Forgejo ondersteunt dit standaard, zie https://forgejo.org/docs/latest/admin/setup/storage/

Kleine aanvulling: overweeg om LFS meteen op een S3-compatibele opslag in te richten in plaats van op lokale schijf. Denk aan SeaweedFS, Garage, Rook-Ceph of MinIO. Dat schaalt beter mee en scheelt later een migratie van de objecten. Forgejo ondersteunt dit standaard, zie https://forgejo.org/docs/latest/admin/setup/storage/
stephan.meijer changed title from Git LFS inschakelen op code.overheid.nl (LFS_START_SERVER) to Git LFS inschakelen op code.overheid.nl (LFS_START_SERVER) 2026-08-31 14:09:18 +00:00

@stephan.meijer , kun je mij een idee geven wat de maximale grootte van een bestand is?

@stephan.meijer , kun je mij een idee geven wat de maximale grootte van een bestand is?

LFS staat nu aan op code.overheid.nl

LFS staat nu aan op code.overheid.nl
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
code/docs#81
No description provided.