nix-community / NixNG

A linux distribution based on Nix [maintainer=@MagicRB]
282 stars 16 forks source link

Using packages from nix-phps #28

Closed jalbstmeijer closed 1 year ago

jalbstmeijer commented 1 year ago

Hi,

Still very new at Nix syntax, just following examples and playing around.

Currently customizing the php-fpm example from your repo. Trying to get nix-phps packages to work with it.

Played around before with nix-phps on NixOS. There I would add nix-phps as input in flake.nix and pass it to imported nix files through specialArgs.

I don't seem to get that working with this php-fpm NixNG example.

Any suggestion?

Gr, J

jalbstmeijer commented 1 year ago

Got it to work. Maybe it should be easier to add a new input?

flake.nix:    phps.url = "github:fossar/nix-phps";
flake.nix:  outputs = { nixpkgs, self, ... }@inputs:
flake.nix:      specialArgs = { inherit inputs; };
flake.nix:      examples = import ./examples { inherit inputs nixpkgs; inherit (self) nglib; };
examples/default.nix:{ nglib, nixpkgs, inputs }:
examples/default.nix:  nixpkgs.lib.mapAttrs (_: v: import v { inherit nixpkgs nglib inputs; }) examples
examples/php-fpm/default.nix:{ nglib, nixpkgs, inputs }:
examples/php-fpm/default.nix:  config = ({ pkgs, config, phps, ... }:
examples/php-fpm/default.nix:              package = inputs.phps.packages.x86_64-linux.php70; 
MagicRB commented 1 year ago

Hey sorry, I was away from all tech, I'll reopen and provide you with a example of how to do what you desire :)

jalbstmeijer commented 1 year ago

Hey sorry, I was away from all tech, I'll reopen and provide you with a example of how to do what you desire :)

Well it woks now, but if you see a cleaner way.. yes please.

Currently trying to overrule these attributes in examples/php-fpm/default.nix, but no luck yet.

nglib.makeSystem.name nglib.config.services.php-fpm.pools.main.package

{ nglib, nixpkgs, inputs }:
let
  examples =
    {
      "php-fpm" = ./php-fpm;
      "php-fpm-74" = ./php-fpm // { nglib.makeSystem.name = "php-fpm-74"; };
    };
in
   nixpkgs.lib.mapAttrs (_: v: import v { inherit nixpkgs nglib inputs; }) examples
MagicRB commented 1 year ago
{
  inputs = {
    nixpkgs.url = "nixpkgs";
    nixng.url = "github:nix-community/NixNG";
    phps.url = "github:fossar/nix-phps";
  };

  outputs =
    { self, nixpkgs, nixng, phps }:
    {
      nixngConfigurations.php-example =
        nixng.nglib.makeSystem {
          inherit nixpkgs;
          system = "x86_64-linux";
          name = "nixng-php-fpm";
          config = ({ pkgs, config, ... }:
            {
              config = {
                dumb-init = {
                  enable = true;
                  type.services = { };
                };

                init.services.apache2 = {
                  shutdownOnExit = true;
                  ensureSomething.create."documentRoot" = {
                    src = ./documentRoot;
                    dst = "/var/www";
                  };
                };

                services.php-fpm = {
                  pools = {
                    main = {
                      package = phps.packages.x86_64-linux.php70;
                      createUserGroup = false;
                      fpmSettings = {
                        "pm" = "dynamic";
                        "pm.max_children" = 75;
                        "pm.start_servers" = 10;
                        "pm.min_spare_servers" = 5;
                        "pm.max_spare_servers" = 20;
                        "pm.max_requests" = 500;
                      };
                    };
                  };
                };

                services.apache2 = {
                  enable = true;
                  envsubst = true;
                  configuration = [
                    {
                      LoadModule = [
                        [ "mpm_event_module" "modules/mod_mpm_event.so" ]
                        [ "log_config_module" "modules/mod_log_config.so" ]
                        [ "unixd_module" "modules/mod_unixd.so" ]
                        [ "authz_core_module" "modules/mod_authz_core.so" ]
                        [ "dir_module" "modules/mod_dir.so" ]
                        [ "mime_module" "modules/mod_mime.so" ]
                        [ "proxy_module" "modules/mod_proxy.so" ]
                        [ "proxy_fcgi_module" "modules/mod_proxy_fcgi.so" ]
                      ];
                    }
                    {
                      Listen = "0.0.0.0:80";

                      ServerRoot = "/var/www";
                      ServerName = "blowhole";
                      PidFile = "/httpd.pid";

                      DocumentRoot = "/var/www";

                      User = "www-data";
                      Group = "www-data";
                    }

                    {
                      ErrorLog = "/dev/stderr";
                      TransferLog = "/dev/stdout";

                      LogLevel = "info";
                    }

                    {
                      AddType = [
                        [ "image/svg+xml" "svg" "svgz" ]
                      ];
                      AddEncoding = [ "gzip" "svgz" ];

                      TypesConfig = "${pkgs.apacheHttpd}/conf/mime.types";
                    }

                    {
                      Directory = {
                        "/" = {
                          Require = [ "all" "denied" ];
                          Options = "SymlinksIfOwnerMatch";
                        };
                      };

                      VirtualHost = {
                        "*:80" = {
                          ProxyPassMatch =
                            [
                              "^/(.*\.php(/.*)?)$"
                              "unix:${config.services.php-fpm.pools.main.socket}|fcgi://localhost/var/www/"
                            ];

                          Directory = {
                            "/var/www" = {
                              Require = [ "all" "granted" ];
                              Options = [ "-Indexes" "+FollowSymlinks" ];
                              DirectoryIndex = "\${DIRECTORY_INDEX:-index.html}";
                            };
                          };
                        };
                      };
                    }
                  ];
                };
              };
            });
        };
    };
}
MagicRB commented 1 year ago

thats a flake which does what you want, youre not meant to consume the examples directly, theyre examples. make a flake which depends on nixng like i showed above

jalbstmeijer commented 1 year ago

Thank you very much!

you re not meant to consume the examples directly, they re examples.

Understand, just made it easier for now to show the hurdles encountered.

So would it be possible to reuse the flake by passing the image 'name' and' package' on build?

MagicRB commented 1 year ago

Which flake? you mean this one? just edit the example i gave you just now

jalbstmeijer commented 1 year ago

probably a stupid question, but how do I build to a docker image from this flake?

jalbstmeijer commented 1 year ago

nix build .#nixngConfigurations.php-example.config.system.build.ociImage.build