guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] improve nginx-service


From: Ludovic Courtès
Subject: Re: [PATCH] improve nginx-service
Date: Sun, 30 Oct 2016 22:46:15 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux)

Julien Lepiller <address@hidden> skribis:

> On Thu, 27 Oct 2016 14:41:18 +0200
> address@hidden (Ludovic Courtès) wrote:
>
>> [...]
>>
>> What I had in mind was just to add ‘compose’ and ‘extend’ to
>> ‘nginx-service-type’ (this is where we define how extensions are
>> handled).  There’s a bit of extra bookeeping to do, in particular
>> moving the list of vhosts to <nginx-configuration>, as in this
>> untested patch:
>> 

[...]

> Actually your patch didn't help me except for syntax simplification.
> Your answer was not really helpful,

Fair enough.  :-)

> but it forced me to consider what I really wanted. So my use case
> would be that I would like to run a webservice from the store (all
> configuration should be made via guix).  But my problem is that I
> don't know how to get the path to the store that I could pass as the
> root parameter in nginx-vhost-config.

OK, that doesn’t have much to do with making nginx-service-type
extensible.  But we can do both!

If the vhost’s root directory is immutable, you can of course add it to
the store via ‘computed-file’ or similar, and then write:

  (nginx-vhost-configuration
    (root #$(computed-file "root" …)))

If it’s mutable, as is often going to be the case, you can simply pass
its file name:

  (nginx-vhost-configuration
    (root "/var/www/the-service"))

In that case, it’s up to you to make sure that /var/www/the-service
exists and contains the right thing.

Does that answer your question?

> Also, I don't know what the best solution would be to get a configured
> web service in the store. Configuration is usually in a file in the
> root directory, and sometimes a default file is already present and you
> are supposed to modify it by hand. The issue here is that the store is
> read-only. How could you create a configuration file that can be found
> in the package's directory (using a guix service)? Would that mean that
> I have to copy the whole package and change just one file? Is there
> anything better, or do I have no other choice than install it outside of
> guix?

All the daemons (almost all of them) started on GuixSD get their config
file from the store.  When you wrote:

  #~(system* #$(file-append nginx "/bin/nginx") "-c" #$config-file)

that translated to:

  (system* "/gnu/store/…/bin/nginx" "-c" "/gnu/store/…-config")

where /gnu/store/…-config is a file that was generated using
‘computed-file’ or similar.

I think the same approach should work for a Web service, but without
being more specific I can’t tell.

> From 25a296057969a35b86ea7371577504c43bf96334 Mon Sep 17 00:00:00 2001
> From: Julien Lepiller <address@hidden>
> Date: Thu, 27 Oct 2016 19:47:27 +0200
> Subject: [PATCH] service: Make nginx-service extensible
>
> gnu/services/web.scm (nginx-service-type): Make extensible

[...]

> address@hidden [Scheme Variable] nginx-service-type
          ^
Should be braces.

> +This is the type for the @code{nginx} web server.

“nginx” (the proper name, not the command name.)

>    (nginx         nginx-configuration-nginx)         ;<package>
>    (log-directory nginx-configuration-log-directory) ;string
>    (run-directory nginx-configuration-run-directory) ;string
> +  (vhosts        nginx-configuration-vhosts)        ;list of 
> <nginx-vhost-configuration>

Please add a default value like at
<https://lists.gnu.org/archive/html/guix-devel/2016-10/msg01380.html>.

I hindsight, I wonder why I put that one-element list as the default;
shouldn’t it be the empty list?

>    (file          nginx-configuration-file))         ;string | file-like
>  
>  (define (config-domain-strings names)
> @@ -102,11 +104,13 @@ of index files."
>     "      server_name " (config-domain-strings
>                           (nginx-vhost-configuration-server-name vhost))
>                          ";\n"
> -   (if (nginx-vhost-configuration-ssl-certificate vhost)
> +   (if (and (nginx-vhost-configuration-https-port vhost)
> +            (nginx-vhost-configuration-ssl-certificate vhost))
>         (string-append "      ssl_certificate "
>                        (nginx-vhost-configuration-ssl-certificate vhost) 
> ";\n")
>         "")
> -   (if (nginx-vhost-configuration-ssl-certificate-key vhost)
> +   (if (and (nginx-vhost-configuration-https-port vhost)
> +            (nginx-vhost-configuration-ssl-certificate-key vhost))

Could you remove these changes?  I think they are unrelated.

>  (define* (nginx-service #:key (nginx nginx)
>                          (log-directory "/var/log/nginx")
>                          (run-directory "/var/run/nginx")
> -                        (vhost-list (list (nginx-vhost-configuration)))
> -                        (config-file
> -                         (default-nginx-config log-directory run-directory 
> vhost-list)))
> +                        (vhost-list (list (nginx-vhost-configuration
> +                                            (https-port #f))))

Please remove the ‘https-port’ setting.

Apart from that it LGTM.  Could you send an updated patch?

Thanks!

Ludo’.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]