# IPFS and IPWHL configuration # Copyright (C) 2022 Nguyễn Gia Phong # # This file is part of loang configuration. # # Loang configuration is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Loang configuration is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with loang configuration. If not, see . { config, pkgs, ... }: let domain = config.networking.domain; in { networking.firewall = { allowedTCPPorts = [ 4001 ]; allowedUDPPorts = [ 4001 ]; }; security = { acme.certs.${domain} = { credentialsFile = pkgs.writeText "namesilo.env" '' NAMESILO_API_KEY_FILE=/var/lib/acme/namesilo.key NAMESILO_PROPAGATION_TIMEOUT=1800 ''; dnsProvider = "namesilo"; extraDomainNames = [ "*.ipfs.${domain}" "*.ipns.${domain}" ]; webroot = null; }; sudo.extraRules = [ { users = [ "xarvos" ]; commands = [ "ALL" ]; runAs = "ipfs"; } ]; }; services = { ipfs = { enable = true; enableGC = true; extraConfig.GateWay = { NoFetch = true; PublicGateways.${domain} = { Paths = [ "/ipfs" "/ipns" ]; UseSubdomains = true; }; }; }; nginx.virtualHosts = let ipfsGateway = "http://localhost:8080"; ipfsProxy = { forceSSL = true; locations."/".proxyPass = ipfsGateway; useACMEHost = domain; }; in { "${domain}".locations = { "/ipfs".proxyPass = ipfsGateway; "/ipns".proxyPass = ipfsGateway; }; "*.ipfs.${domain}" = ipfsProxy; "*.ipns.${domain}" = ipfsProxy; "ipwhl.${domain}" = { enableACME = true; forceSSL = true; locations."/".proxyPass = ipfsGateway; }; }; }; }