parent
d79aff9f88
commit
6df9a6f2fa
6 changed files with 142 additions and 0 deletions
@ -0,0 +1,6 @@ |
|||||||
|
[package] |
||||||
|
description = Radicale is a CalDAV and CardDAV server. These steps install Radicale as a system-wide service, with an Apache reverse proxy. |
||||||
|
docs = https://radicale.org |
||||||
|
tags = CalDAV, CardDav |
||||||
|
title = Radicale |
||||||
|
version = 0.1.0-d |
@ -0,0 +1,49 @@ |
|||||||
|
[make sure a maintenance root exists] |
||||||
|
mkdir: /var/www/maint/www |
||||||
|
group: www-data |
||||||
|
owner: www-data |
||||||
|
recursive: yes |
||||||
|
|
||||||
|
[install radicale] |
||||||
|
pip3: radicale |
||||||
|
|
||||||
|
[create radicale configuration directory] |
||||||
|
mkdir: /etc/radicale/config |
||||||
|
owner: radicale |
||||||
|
recursive: yes |
||||||
|
|
||||||
|
[create the radicale configuration file] |
||||||
|
template: config.ini /etc/radicale/config/config.ini |
||||||
|
|
||||||
|
[create the radicale user] |
||||||
|
user.add: radicale |
||||||
|
home: / |
||||||
|
login: /sbin/nologin |
||||||
|
system: yes |
||||||
|
; useradd --system --user-group --home-dir / --shell /sbin/nologin radicale |
||||||
|
|
||||||
|
[create the systemd service file for radicale] |
||||||
|
template: radicale.service /etc/systemd/system/radicale.service |
||||||
|
|
||||||
|
[start the radicale service] |
||||||
|
start: radicale |
||||||
|
|
||||||
|
[create the initial apache config file] |
||||||
|
template: httpd.conf /etc/apache2/sites-available/{{ domain_name }}.conf |
||||||
|
|
||||||
|
[enable the site] |
||||||
|
apache.enable: {{ domain_name }} |
||||||
|
|
||||||
|
[reload apache] |
||||||
|
apache.reload: |
||||||
|
|
||||||
|
[get an SSL cert] |
||||||
|
ssl: {{ domain_name }} |
||||||
|
email: {{ webmaster_email }} |
||||||
|
|
||||||
|
[create the SSL version of the apache config file] |
||||||
|
template: httpd.conf /etc/apache2/sites-available/{{ domain_name }}.conf |
||||||
|
ssl_enabled: yes |
||||||
|
|
||||||
|
[restart apache] |
||||||
|
apache.restart: |
@ -0,0 +1,16 @@ |
|||||||
|
[auth] |
||||||
|
type = htpasswd |
||||||
|
htpasswd_filename = {{ config_path}}/users.htpasswd |
||||||
|
htpasswd_encryption = md5 |
||||||
|
;delay = 1 |
||||||
|
|
||||||
|
;[server] |
||||||
|
;hosts = 0.0.0.0:5232, [::]:5232 |
||||||
|
;max_connections = 20 |
||||||
|
; 100 Megabyte |
||||||
|
;max_content_length = 100000000 |
||||||
|
; 30 seconds |
||||||
|
;timeout = 30 |
||||||
|
|
||||||
|
;[storage] |
||||||
|
;filesystem_folder = {{ data_path }} |
@ -0,0 +1,28 @@ |
|||||||
|
# The port 80 host is required for renewing Let's Encrypt certificates. |
||||||
|
<VirtualHost *:80> |
||||||
|
ServerName {{ domain_name }} |
||||||
|
ServerAlias *.{{ domain_name }} |
||||||
|
RewriteEngine On |
||||||
|
RewriteCond %{HTTPS} off |
||||||
|
RewriteCond %{REQUEST_URI} !^/.well-known [NC] |
||||||
|
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L] |
||||||
|
DocumentRoot /var/www/maint/www |
||||||
|
</VirtualHost> |
||||||
|
|
||||||
|
{% if ssl_enabled %} |
||||||
|
# The 443 host is where the project is actually served. |
||||||
|
<VirtualHost *:443> |
||||||
|
ServerName {{ domain_name }} |
||||||
|
DocumentRoot /var/www/maint/www |
||||||
|
|
||||||
|
SSLEngine on |
||||||
|
SSLCertificateKeyFile /etc/letsencrypt/live/{{ domain_name }}/privkey.pem |
||||||
|
SSLCertificateFile /etc/letsencrypt/live/{{ domain_name }}/fullchain.pem |
||||||
|
|
||||||
|
<Location "{{ radicale_uri }}"> |
||||||
|
ProxyPass http://localhost:5232/ retry=0 |
||||||
|
ProxyPassReverse http://localhost:5232/ |
||||||
|
RequestHeader set X-Script-Name /radicale |
||||||
|
</Location> |
||||||
|
</VirtualHost> |
||||||
|
{% endif %} |
@ -0,0 +1,24 @@ |
|||||||
|
[Unit] |
||||||
|
Description=A simple CalDAV (calendar) and CardDAV (contact) server. |
||||||
|
After=network.target |
||||||
|
Requires=network.target |
||||||
|
|
||||||
|
[Service] |
||||||
|
ExecStart=/usr/bin/env python3 -m radicale |
||||||
|
Restart=on-failure |
||||||
|
User=radicale |
||||||
|
# Deny other users access to the calendar data |
||||||
|
UMask=0027 |
||||||
|
# Optional security settings |
||||||
|
PrivateTmp=true |
||||||
|
ProtectSystem=strict |
||||||
|
ProtectHome=true |
||||||
|
PrivateDevices=true |
||||||
|
ProtectKernelTunables=true |
||||||
|
ProtectKernelModules=true |
||||||
|
ProtectControlGroups=true |
||||||
|
NoNewPrivileges=true |
||||||
|
ReadWritePaths={{ data_path }} |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=multi-user.target |
@ -0,0 +1,19 @@ |
|||||||
|
[domain_name] |
||||||
|
comment = The domain name to use for the Radicale host. |
||||||
|
value = cal.example.com |
||||||
|
|
||||||
|
[radicale_uri] |
||||||
|
comment = The partial URI where Radicale is available. Include the trailing slash. |
||||||
|
value = / |
||||||
|
|
||||||
|
[config_path] |
||||||
|
comment = The path to configuration files. |
||||||
|
value = /etc/radicale/config |
||||||
|
|
||||||
|
[data_path] |
||||||
|
comment = The path to data files and directories. |
||||||
|
value = /var/lib/radicale/collections |
||||||
|
|
||||||
|
[webmaster_email] |
||||||
|
comment = The webmaster's email address. Used when setting up SSL. |
||||||
|
value = webmaster@example.com |
Loading…
Reference in new issue