gpt4 book ai didi

nix - 如何在 NixOS 中启用 Caddy 插件?

转载 作者:行者123 更新时间:2023-12-04 13:59:09 25 4
gpt4 key购买 nike

我刚刚开始玩 NixOS,到目前为止已经成功编辑了 /etc/nixos/configuration.nix在我的 NixOS 18.09 VM 中启用 PHP-FPM 和 Caddy 网络服务器。

{ config, pkgs, ... }:

{
imports = [ <nixpkgs/nixos/modules/installer/virtualbox-demo.nix> ];

users = {
mutableUsers = false;
groups = {
caddy = { };
php-project = { };
};
users = {
hello = {
group = "php-project";
};
};
};

environment.systemPackages = [
pkgs.htop
pkgs.httpie
pkgs.php # for PHP CLI
];

services.caddy = {
enable = true;
email = "david@example.com";
agree = true;
config = ''
(common) {
gzip
header / -Server
header / -X-Powered-By
}
:8080 {
root /var/www/hello
fastcgi / /run/phpfpm/hello.sock php
log syslog
import common
}
'';
};

services.phpfpm = {
phpOptions = ''
date.timezone = "Europe/Berlin"
'';
poolConfigs = {
hello = ''
user = hello
listen = /run/phpfpm/hello.sock
; ...
pm.max_requests = 500
'';
};
};
}

PHP 处理的响应可在 localhost:8080 获得。 (好极了!)

enable Caddy plugins when compiling from source , Go 导入添加到球童的 run.go ,例如:
_ "github.com/mholt/caddy/caddyhttp" // plug in the HTTP server type
// This is where other plugins get plugged in (imported)
_ "github.com/nicolasazrak/caddy-cache" // added to use another plugin
)

如何设置在下载源代码之后和构建之前执行这样的行插入? (如果这是使用 Nix 时的合理方法?)

The NixOS 18.09 caddy package .

The NixOS 18.09 caddy service .

我相信在编写包时可以分配构建器脚本(Bash 或其他方式),并且我认为可以在其中完成行插入。但是我不知道在这种情况下如何将脚本分配给现有包(覆盖属性/使用覆盖?)以及将脚本放在磁盘上的哪个位置。

状态更新

我一直在阅读有关定制软件包的一般信息,听起来像是 overlays可能是我需要的。但是,我似乎无法评估我的叠加层。

我使用覆盖包名称作为测试,因为它比修补代码更简单。

叠加尝试 1
/etc/nixos/configuration.nix :
{ config, pkgs, options, ... }:

{
imports = [ <nixpkgs/nixos/modules/installer/virtualbox-demo.nix> ];

nix.nixPath = options.nix.nixPath.default ++ [
"nixpkgs-overlays=/etc/nixos/overlays-compat/"
];

# ...
}
/etc/nixos/overlays-compat/overlays.nix :
self: super:
with super.lib;
let
# Using the nixos plumbing that's used to evaluate the config...
eval = import <nixpkgs/nixos/lib/eval-config.nix>;
# Evaluate the config,
paths = (eval {modules = [(import <nixos-config>)];})
# then get the `nixpkgs.overlays` option.
.config.nixpkgs.overlays
;
in
foldl' (flip extends) (_: super) paths self
/etc/nixos/overlays-compat/caddy.nix :
self: super:
{
caddy = super.caddy.override {
name = "caddy-override";
};
}

叠加尝试 2
/etc/nixos/configuration.nix :
  nixpkgs.overlays = [ (self: super: {
caddy = super.caddy.override {
name = "caddy-override";
};
} ) ];
error: anonymous function at /nix/store/mr5sfmz6lm5952ch5q6v49563wzylrkx-nixos-18.09.2327.37694c8cc0e/nixos/pkgs/servers/caddy/default.nix:1:1 called with unexpected argument 'name', at /nix/store/mr5sfmz6lm5952ch5q6v49563wzylrkx-nixos-18.09.2327.37694c8cc0e/nixos/lib/customisation.nix:69:12
覆盖属性

我以前设法用这个覆盖包名称:
{ config, pkgs, options, ... }:

let
caddyOverride = pkgs.caddy.overrideAttrs (oldAttrs: rec {
name = "caddy-override-v${oldAttrs.version}";
});
in {
{
# ...

services.caddy = {
package = caddyOverride;
# ...
}
}

我可以在 htop 中看到 caddy 二进制文件在一个名为 /nix/store/...-caddy-override-v0.11.0-bin/ 的文件夹中。 .但我知道以这种方式覆盖已被覆盖所取代。

最佳答案

为了给Caddy添加插件,好像the method就是修改源码。

您将需要调整 Nixpkgs expression for Caddy使之成为可能。这可以在 Nixpkgs 树之外完成,使用 services.caddy.package = callPackage ./my-caddy.nix {}例如,或者通过 fork Nixpkgs 存储库并指向您的 NIX_PATH给你的克隆。

关于nix - 如何在 NixOS 中启用 Caddy 插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55251139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com