Changes between Initial Version and Version 1 of Expose Guix channels via https


Ignore:
Timestamp:
05/11/25 10:20:12 (2 weeks ago)
Author:
enno
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Expose Guix channels via https

    v1 v1  
     1= Exposing Private Guix Channels via HTTPS with Per-Channel Authentication
     2
     3We expose internal Guix channels over HTTPS using git-http-backend, Nginx, and HTTP basic authentication. This setup allows us to:
     4
     5* Serve Guix channels securely over the web
     6* Enforce per-channel access control using .htpasswd files
     7* Avoid embedding credentials in channels.scm
     8* Keep channel access and source-fetch access decoupled
     9
     10== Design Summary
     11
     12* Each channel is a bare Git repository under /home/git/repositories/
     13* Channels are served via Nginx over /git/<channel>.git
     14* Access is protected with per-channel .htpasswd files
     15* Users run guix pull using the clean channel URL (no embedded credentials)
     16* SSH is used for source fetching inside the channel when needed
     17
     18== Nginx Configuration Snippet
     19
     20{{{#!
     21location ~ ^/git/channel-alpha.git(/.*)?$ {
     22    auth_basic "Restricted Channel Alpha";
     23    auth_basic_user_file /etc/nginx/htpasswd-channel-alpha;
     24
     25    include /etc/nginx/fastcgi_params;
     26    fastcgi_pass 127.0.0.1:9000;
     27    fastcgi_param SCRIPT_FILENAME /run/current-system/profile/libexec/git-core/git-http-backend;
     28    fastcgi_param GIT_PROJECT_ROOT /home/git/repositories;
     29    fastcgi_param PATH_INFO $1;
     30    fastcgi_param REMOTE_USER $remote_user;
     31}
     32}}}
     33
     34Repeat with appropriate changes for other channels (e.g., channel-beta.git, with its own .htpasswd).
     35
     36== File Structure
     37
     38/home/git/repositories/channel-alpha.git/     # bare Git repo
     39
     40== User Setup
     41
     42Users configure ~/.config/guix/channels.scm like this:
     43
     44{{{#!
     45(list
     46 (channel
     47  (name 'channel-alpha)
     48  (url "https://kokyou.dev/git/channel-alpha.git")
     49  (introduction
     50   (make-channel-introduction
     51    "commit-hash"
     52    (openpgp-fingerprint "AAAA BBBB CCCC ...")))))
     53}}}
     54
     55On first pull, they’ll be prompted for HTTP credentials (as per Nginx .htpasswd file).
     56
     57No credentials are embedded in the URL or stored in the channel file.
     58
     59== Best Practices
     60
     61Disable GIT_HTTP_EXPORT_ALL globally, and rely on explicit git-daemon-export-ok files only if needed