diff --git a/framadate/defaults/main.yml b/framadate/defaults/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..0a872887bf620501cd3d7c4b42ec87458d090b22
--- /dev/null
+++ b/framadate/defaults/main.yml
@@ -0,0 +1,3 @@
+---
+
+framadate_name: "framadate"
diff --git a/framadate/tasks/main.yml b/framadate/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7603adbbf0260be7665a6316ce73aed6e4974635
--- /dev/null
+++ b/framadate/tasks/main.yml
@@ -0,0 +1,52 @@
+---
+
+- name: install packages
+  apt:
+    name:
+      - php
+      - php-mbstring
+      - php-mysql
+      - php-intl
+      - composer
+
+- name: ensure a group for framadate exist
+  group:
+    name: "{{framadate_name}}"
+    state: present
+    system: true
+
+- name: ensure a user for framadate exist
+  user:
+    name: "{{framadate_name}}"
+    group: "{{framadate_name}}"
+    state: present
+    system: true
+    shell: /usr/bin/nologin
+    home: "/var/www/{{framadate_name}}"
+    createhome: false
+
+- name: ensure the directory for framadate exist
+  file:
+    path: "/var/www/{{framadate_name}}"
+    state: directory
+    owner: "{{framadate_name}}"
+    group: "{{framadate_name}}"
+    mode: '0755'
+
+- name: create the mysql database
+  mysql_db:
+    name: "{{framadate_name}}"
+    state: present
+    login_user: root
+    login_password: "{{lookup('passwordstore', 'db/{{ansible_hostname}}-mysql')}}"
+  no_log: true
+
+- name: create mysql db user
+  mysql_user:
+    name: "{{framadate_name}}"
+    password: "{{lookup('passwordstore', 'db/{{ansible_hostname}}-mysql-{{framadate_name}} create=true length=20')}}"
+    state: present
+    login_user: root
+    login_password: "{{lookup('passwordstore', 'db/{{ansible_hostname}}-mysql')}}"
+    priv: "{{framadate_name}}.*:ALL"
+  no_log: true