Web-svc-file Role¶
Description: Static file server over HTTPS with directory listing, .well-known handling, and automatic TLS certificates
Variables¶
author: Kevin Veen-Birkenbach
description: Static file server over HTTPS with directory listing, .well-known handling, and automatic TLS certificates
license: Infinito.Nexus Community License (Non-Commercial)
company: Kevin Veen-Birkenbach https://www.veen.world
min_ansible_version: 2.9
platforms: [{‘name’: ‘ArchLinux’, ‘versions’: [‘all’]}, {‘name’: ‘Debian’, ‘versions’: [‘all’]}, {‘name’: ‘EL’, ‘versions’: [‘all’]}, {‘name’: ‘Fedora’, ‘versions’: [‘all’]}, {‘name’: ‘Ubuntu’, ‘versions’: [‘all’]}]
galaxy_tags: [‘nginx’, ‘https’, ‘file’, ‘static-files’, ‘ssl’, ‘letsencrypt’, ‘automation’]
issue_tracker_url: https://s.infinito.nexus/issues
README¶
File Server¶
Description¶
The NGINX File Server role sets up a simple and secure static file
server using NGINX. It provides an easy way to
serve files over HTTPS, including directory listing, .well-known
support, and automatic SSL/TLS certificate integration via Let’s
Encrypt.
Overview¶
Optimized for Archlinux, this role configures NGINX to act as a lightweight and efficient file server. It ensures that files are served securely, with optional directory browsing enabled, and proper MIME type handling for standard web clients.
Cosmos¶
The diagram places File Server in the Infinito.Nexus cosmos: the components it deploys (capabilities), the central services it consumes (dependencies), and its outward reach (federation and bridged external networks).
flowchart LR
subgraph deps [Dependencies]
dep_svc_net_tor["svc-net-tor 🐳🐝"]
dep_web_app_matomo["web-app-matomo 🐳🐝"]
dep_web_app_prometheus["web-app-prometheus 🐳🐝"]
dep_web_svc_css["web-svc-css 💻"]
end
subgraph role [web-svc-file 💻]
svc_file["file"]
svc_matomo["matomo"]
svc_css["css"]
svc_prometheus["prometheus"]
svc_tor["tor"]
end
subgraph dependents [Dependents]
dpt_web_svc_asset["web-svc-asset 💻"]
end
dep_svc_net_tor -. "0..1" .-> svc_tor
dep_web_app_matomo -. "0..1" .-> svc_matomo
dep_web_app_prometheus -. "0..1" .-> svc_prometheus
dep_web_svc_css -. "0..1" .-> svc_css
svc_file -- "1:1" --> dpt_web_svc_assetSolid 1:1 edges are fixed relationships; dashed 0..1 edges are
conditional (enabled only in matching deployments); red 0..0 edges
are turned off in this role. Node markers show the role’s deploy modes
(💻 host, 🐳 compose, 🐝 swarm); ❌ marks a service that is explicitly
turned off, and ⚙️ an Ansible role dependency declared in
meta/main.yml.
Features¶
Automatic SSL/TLS Certificate Management: Integrates with Let’s Encrypt for secure access.
Simple Configuration: Minimal setup with clear, maintainable templates.
Directory Listings: Enables browsing through served files with human-readable file sizes and timestamps.
Static Content Hosting: Serve any type of static files (documents, software, media, etc.).
Well-Known Folder Support: Allows serving validation files and other standardized resources easily.
Quick Setup¶
Development¶
Clone, set up the workstation, and deploy File Server onto the local stack:
git clone https://github.com/infinito-nexus/core.git
cd core
make onboard
make compose-deploy mode=reinstall apps=web-svc-file full_cycle=false
Production¶
Install File Server directly onto the target machine: clone the repository, install the OS prerequisites and the repository toolchain, then deploy against localhost over a local connection (no SSH, no container):
git clone https://github.com/infinito-nexus/core.git
cd core
bash scripts/install/package.sh
make install
source scripts/meta/env/load.sh
APP=web-svc-file
DOMAIN=<your-domain>
TLS_MODE=self_signed
SSH_PUBLIC_KEY="<your-ssh-public-key>"
INVENTORY=inventories/production
infinito administration inventory provision "$INVENTORY" \
--inventory-file "$INVENTORY/devices.yml" \
--host localhost \
--include "$APP" \
--vars "{\"TLS_MODE\": \"$TLS_MODE\", \"DOMAIN_PRIMARY\": \"$DOMAIN\", \"users\": {\"administrator\": {\"authorized_keys\": [\"$SSH_PUBLIC_KEY\"]}}}"
infinito administration deploy dedicated "$INVENTORY/devices.yml" \
--password-file "$INVENTORY/.password" \
--diff -vv
Further Resources¶
Credits¶
Implemented by Kevin Veen-Birkenbach. Part of the Infinito.Nexus Project and maintained by Kevin Veen-Birkenbach. Licensed under the Infinito.Nexus Community License (Non-Commercial).