Initial commit

This commit is contained in:
Julian Rother 2025-01-17 13:15:09 +01:00
commit 09bc73507a
Signed by: julian
GPG key ID: C19B924C0CD13341
4 changed files with 95 additions and 0 deletions

42
README.md Normal file
View file

@ -0,0 +1,42 @@
# Roundcube
Requires additional PHP and web server setup, e.g. with this [nginx](https://git.notandy.de/ansible/roles/nginx) role:
```
roundcube_config:
imap_host: 'ssl://mail.example.com:993'
smtp_host: 'tls://mail.example.com:587'
des_key: "{{ lookup('passwordstore', 'example.com/roundcube-secret create=true length=24 nosymbols=true') }}"
nginx:
add_headers:
Strict-Transport-Security: "max-age=63072000"
Content-Security-Policy: "default-src 'self' 'unsafe-inline' 'unsafe-eval' data:"
X-Frame-Options: "sameorigin"
X-Content-Type-Options: "nosniff"
X-XSS-Protection: "1; mode=block"
php:
ini:
date_timezone: Europe/Berlin
vhosts:
mail:
servername:
- mail.example.com
custom:
- root /var/lib/roundcube
- index index.php index.html index.htm
locations:
- match: /
custom:
- try_files $uri $uri/ /index.php?q=$uri&$args
- match: ^~ /data
custom:
- deny all
- match: '~ \.php$'
custom:
- include /etc/nginx/fastcgi_params
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name
- fastcgi_param REDIRECT_STATUS 200
- fastcgi_param HTTPS On
- fastcgi_pass php-handler
```

6
defaults/main.yml Normal file
View file

@ -0,0 +1,6 @@
roundcube_config:
db_dsnw: 'sqlite:////var/lib/roundcube/db/roundcube?mode=0640'
#imap_host: 'ssl://imap.example.com:993'
#smtp_host: 'tls://smtp.example.com:587'
#des_key: Set this to a 24-char random character string!
cipher_method: AES-256-CBC

19
tasks/main.yml Normal file
View file

@ -0,0 +1,19 @@
- name: Install fail2ban
ansible.builtin.apt:
pkg: roundcube
- name: Create db directory
ansible.builtin.file:
path: /var/lib/roundcube/db
owner: www-data
group: www-data
state: directory
mode: "0750"
- name: Update config
ansible.builtin.template:
src: config.inc.php.j2
dest: /etc/roundcube/config.inc.php
owner: root
group: www-data
mode: "0640"

View file

@ -0,0 +1,28 @@
<?php
/* {{ ansible_managed }} */
{% macro php_obj(obj) %}
{%- if obj is string -%}
'{{ obj|replace('\\', '\\\\')|replace('\'', '\\\'') }}'
{%- elif obj is number -%}
{{ obj }}
{%- elif obj is boolean -%}
{{ obj }}
{%- elif obj is none -%}
null
{% elif obj is mapping %}
[
{% for key, value in obj.items() %}
'{{ key|replace('\\', '\\\\')|replace('\'', '\\\'') }}' => {{ php_obj(value)|indent }},
{% endfor %}
]
{%- elif obj is iterable -%}
[
{% for item in obj %}
{{ php_obj(item)|indent(first=true) }},
{% endfor %}
]
{% endif %}
{% endmacro %}
$config = {{ php_obj(roundcube_config) }};