aboutsummaryrefslogtreecommitdiff
(define-module (gn services gn1-httpd-config)
               #:export (%default-httpd22-modules
                         GN1-httpd-config))

(use-modules (gnu)
             (ice-9 match)
             (gn packages genenetwork)
             (past packages web))
(use-service-modules web)

(define %default-httpd22-modules
  (map (match-lambda
         ((name file)
          (httpd-module
           (name name)
           (file file))))
       '(("authn_file_module" "modules/mod_authn_file.so")
         ("authn_dbm_module" "modules/mod_authn_dbm.so")
         ("authn_anon_module" "modules/mod_authn_anon.so")
         ("authn_dbd_module" "modules/mod_authn_dbd.so")
         ("authn_default_module" "modules/mod_authn_default.so")
         ("authz_host_module" "modules/mod_authz_host.so")
         ("authz_groupfile_module" "modules/mod_authz_groupfile.so")
         ("authz_user_module" "modules/mod_authz_user.so")
         ("authz_dbm_module" "modules/mod_authz_dbm.so")
         ("authz_owner_module" "modules/mod_authz_owner.so")
         ("authz_default_module" "modules/mod_authz_default.so")
         ("auth_basic_module" "modules/mod_auth_basic.so")
         ("auth_digest_module" "modules/mod_auth_digest.so")
         ("dbd_module" "modules/mod_dbd.so")
         ("dumpio_module" "modules/mod_dumpio.so")
         ("reqtimeout_module" "modules/mod_reqtimeout.so")
         ("ext_filter_module" "modules/mod_ext_filter.so")
         ("include_module" "modules/mod_include.so")
         ("filter_module" "modules/mod_filter.so")
         ("substitute_module" "modules/mod_substitute.so")
         ("log_config_module" "modules/mod_log_config.so")
         ("logio_module" "modules/mod_logio.so")
         ("env_module" "modules/mod_env.so")
         ("mime_magic_module" "modules/mod_mime_magic.so")
         ("expires_module" "modules/mod_expires.so")
         ("headers_module" "modules/mod_headers.so")
         ("ident_module" "modules/mod_ident.so")
         ("setenvif_module" "modules/mod_setenvif.so")
         ("version_module" "modules/mod_version.so")
         ("ssl_module" "modules/mod_ssl.so")
         ("mime_module" "modules/mod_mime.so")
         ("dav_module" "modules/mod_dav.so")
         ("status_module" "modules/mod_status.so")
         ("autoindex_module" "modules/mod_autoindex.so")
         ("asis_module" "modules/mod_asis.so")
         ("info_module" "modules/mod_info.so")
         ("cgi_module" "modules/mod_cgi.so")
         ("dav_fs_module" "modules/mod_dav_fs.so")
         ("vhost_alias_module" "modules/mod_vhost_alias.so")
         ("negotiation_module" "modules/mod_negotiation.so")
         ("dir_module" "modules/mod_dir.so")
         ("imagemap_module" "modules/mod_imagemap.so")
         ("actions_module" "modules/mod_actions.so")
         ("speling_module" "modules/mod_speling.so")
         ("userdir_module" "modules/mod_userdir.so")
         ("alias_module" "modules/mod_alias.so")
         ("rewrite_module" "modules/mod_rewrite.so"))))

; Alternative setup
;  (let* ((gn1-user "wrk")
;        (gn1-source "/home/wrk/gn1-pjotr/gnshare/gn")
;        (gn1-server "gn1-pjotr.genenetwork.org")
;        (gn1-port "8043"))


(define GN1-httpd-config
  (let* ((gn1-user "gn1")
	 (gn1-source (string-append "/home/" gn1-user "/production/gnshare/gn"))
	 (gn1-server "gn1.genenetwork.org")
	 (gn1-port "8042"))
  (httpd-config-file
    (server-name gn1-server)
    ;; Defaults to httpd, should be same as 'package' above to launch service.
    (server-root httpd22-with-mod-python)
    (user gn1-user)
    (group "users")
    (pid-file (string-append "/tmp/guix-gn1/httpd-gn1-source-" gn1-port ".pid"))
    (error-log (string-append "/tmp/guix-gn1/httpd-gn1-source-error-" gn1-port ".log"))
    (listen `(,gn1-port))
    (modules (cons*
               (httpd-module
                 (name "python_module")
                 (file "modules/mod_python.so"))
               %default-httpd22-modules))
    (extra-config (list "\
TypesConfig " httpd22-with-mod-python "/etc/httpd/mime.types
DefaultType application/octet-stream
# DocumentRoot MUST NOT be in the PythonPath. Because gn1-source must be in PythonPath we leave the document-root keyword above unset.
PythonPath \"sys.path+['/run/current-system/profile/lib/python2.4', '/run/current-system/profile/lib/python2.4/site-packages', '" gn1-source "/web/webqtl']\"
# same as 'listen' above
NameVirtualHost *:" gn1-port "
<VirtualHost *:" gn1-port ">
  DocumentRoot "gn1-source "/web/
  Alias /images "gn1-source "/web/images/
  Alias /javascript "gn1-source "/web/javascript/
  Alias /css "gn1-source "/web/css/
  <Directory "gn1-source "/web/images>
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
  <Directory "gn1-source "/web/javascript>
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
  <Directory "gn1-source "/web/css>
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>
<Directory " gn1-source "/web/webqtl>
  #what is the difference between these two?
  AddHandler mod_python .py
  #SetHandler python-program
  #publisher has more debug information
  PythonHandler " gn1-source "/web/webqtl/main.py
  #PythonHandler mod_python.publisher
  #PythonHandler mod_python.cgihandler
  PythonOption mod_python.session.session_type FileSession
  # only while debugging:
  PythonDebug On
</Directory>
# only while debugging:
# <Location /mpinfo>
#   SetHandler python-program
#   PythonHandler mod_python.testhandler
# </Location>"
)))))