aboutsummaryrefslogtreecommitdiff
path: root/container.scm
blob: 628e2b3146869234df5c8f88ea2ece220afe2665 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
;; SPDX-License-Identifier: CC0-1.0

;; Copyright (C) 2022 Wojtek Kosior <koszko@koszko.org>
;;
;; Available under the terms of Creative Commons Zero v1.0 Universal.

(use-modules (gnu))
(use-modules (koszko-org-website))
(use-package-modules web)
(use-service-modules web)
(use-service-modules shepherd)

(define %koszko-org-virtualhost
  (httpd-virtualhost
   "*:80"
   (list "\
         ServerName koszko.org
         ServerAlias www.koszko.org
         DocumentRoot /srv/http/koszko.org
         ServerAdmin koszko@koszko.org

         <If \"%{HTTP_HOST} != 'koszko.org'\">
             Redirect permanent / http://koszko.org/
         </If>

         Alias /sideload /srv/http/koszko.org

         WSGIScriptReloading On
         "
         #~(let* ((script-rel "/share/koszko-org-website/wsgi.py")
                  (wsgi-file (string-append #$koszko-org-website script-rel)))
             (format #f
                     "\
                     <Files ~s>
                         Require all granted
                     </Files>
                     WSGIScriptAlias / ~a
                     "
                     wsgi-file wsgi-file)))))

(define %wsgi-module
  (httpd-module
   (name "wsgi_module")
   (file (file-append mod-wsgi "/modules/mod_wsgi.so"))))

;; logio is needed for the '%O' log format directive
(define %logio-module
  (httpd-module
   (name "logio_module")
   (file (file-append httpd "/modules/mod_logio.so"))))

(define %logformat-combined
  "\"%h %l %u %t \\\"%r\\\" %>s %O \\\"%{Referer}i\\\" \\\"%{User-Agent}i\\\"\"")

(define %koszko-httpd-service
  (service
   httpd-service-type
   (httpd-configuration
    (config
     (httpd-config-file
      (server-name "koszko.org")
      (error-log "/var/log/httpd/error.log")
      (modules (cons* %wsgi-module %logio-module %default-httpd-modules))
      (extra-config
       (list
        (string-join `("LogFormat" ,%logformat-combined "combined")) "\n"
        "ErrorLog /var/log/httpd/error.log" "\n"
        "CustomLog /var/log/httpd/access.log combined" "\n"
        )))))))

(operating-system
  (host-name "koszko")
  (timezone "Europe/Warsaw")

  (file-systems (cons (file-system
                        (device (file-system-label "does-not-matter"))
                        (mount-point "/")
                        (type "ext4"))
                      %base-file-systems))
  (bootloader (bootloader-configuration
               (bootloader grub-bootloader)
               (targets '("/dev/sdDOES-NOT-MATTER"))))
  (services
   (cons* %koszko-httpd-service
          (simple-service 'koszko-org-website httpd-service-type
                          (list %koszko-org-virtualhost))
          (service
           (shepherd-service-type
            'dummy-network
            (const
             (shepherd-service
              (documentation "Provide 'networking' without actually doing anything")
              (provision '(networking))
              (start #~(const #t))
              (stop #~(const #t))
              (respawn? #f)))
            (description "Make other services assume network is there."))
           #f)
          %base-services)))