diff --git a/ansible/playbooks/monica/main.yml b/ansible/playbooks/monica/main.yml
new file mode 100644
index 00000000..04596132
--- /dev/null
+++ b/ansible/playbooks/monica/main.yml
@@ -0,0 +1,72 @@
+---
+- hosts: monica
+ tasks:
+
+ - file:
+ path: /usr/share/monica/{{ item }}
+ state: directory
+ loop:
+ - app
+ - db
+ - php
+
+ - copy:
+ src: php.ini
+ dest: /usr/share/monica/php/uploads.ini
+
+ - docker_compose:
+ project_name: monica
+ definition:
+ version: "3.4"
+ services:
+ app:
+ image: monica
+ depends_on:
+ - db
+ ports:
+ - 8080:80
+ environment:
+ - APP_ENV=production
+ - APP_KEY={{ monica_app_key }}
+ - DB_HOST=db
+ - DB_USERNAME=monica
+ - DB_PASSWORD={{ monica_db_password }}
+ - MAIL_HOST={{ sendgrid_mail_host }}
+ - MAIL_PORT={{ sendgrid_mail_port }}
+ - MAIL_USERNAME={{ sendgrid_mail_username }}
+ - MAIL_PASSWORD={{ sendgrid_mail_password }}
+ - MAIL_ENCRYPTION={{ monica_mail_encryption }}
+ - MAIL_FROM_ADDRESS={{ monica_mail_from_address }}
+ - MAIL_FROM_NAME=Monica
+ - APP_EMAIL_NEW_USERS_NOTIFICATION={{ monica_app_email_new_users_notification }}
+ volumes:
+ - /usr/share/monica/app:/var/www/html/storage
+ - /usr/share/monica/php/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
+ restart: always
+ db:
+ image: mysql:5.7
+ environment:
+ - MYSQL_RANDOM_ROOT_PASSWORD=true
+ - MYSQL_DATABASE=monica
+ - MYSQL_USER=monica
+ - MYSQL_PASSWORD={{ monica_db_password }}
+ volumes:
+ - /usr/share/monica/db:/var/lib/mysql
+ restart: always
+
+ - template:
+ src: monica.nginx
+ dest: /etc/nginx/sites-available/monica.conf
+ notify: Restart nginx
+ - file:
+ src: /etc/nginx/sites-available/monica.conf
+ dest: /etc/nginx/sites-enabled/monica.conf
+ state: link
+ notify: Restart nginx
+
+ handlers:
+
+ - name: Restart nginx
+ service:
+ name: nginx
+ state: restarted
diff --git a/ansible/playbooks/monica/monica.nginx b/ansible/playbooks/monica/monica.nginx
new file mode 100644
index 00000000..e1e4520d
--- /dev/null
+++ b/ansible/playbooks/monica/monica.nginx
@@ -0,0 +1,37 @@
+server {
+ server_name {{ monica_domain }};
+
+ listen 80;
+ listen [::]:80;
+
+ location / {
+ return https://$server_name$request_uri;
+ }
+}
+
+
+server {
+ server_name {{ monica_domain }};
+
+ listen 443 ssl http2;
+ listen [::]:443 ssl http2;
+
+ ssl_trusted_certificate /etc/letsencrypt/live/{{ monica_domain }}/chain.pem;
+ ssl_certificate /etc/letsencrypt/live/{{ monica_domain }}/fullchain.pem;
+ ssl_certificate_key /etc/letsencrypt/live/{{ monica_domain }}/privkey.pem;
+
+ ssl_stapling on;
+ ssl_stapling_verify on;
+
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+
+ client_max_body_size 10m;
+
+ location / {
+ proxy_pass http://127.0.0.1:8080;
+ }
+}
diff --git a/ansible/playbooks/monica/php.ini b/ansible/playbooks/monica/php.ini
new file mode 100644
index 00000000..a0725573
--- /dev/null
+++ b/ansible/playbooks/monica/php.ini
@@ -0,0 +1,2 @@
+[www]
+upload_max_filesize = 10M