From 0aacb9f875a40b18dfbbc01b705b5337bf872368 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sun, 20 May 2018 10:43:50 +0200 Subject: [PATCH] add etherpad role --- roles/etherpad/tasks/main.yml | 33 ++++++++++ .../etherpad/templates/etherpad-lite.service | 14 ++++ roles/etherpad/templates/settings.json | 64 +++++++++++++++++++ site.yml | 6 ++ 4 files changed, 117 insertions(+) create mode 100644 roles/etherpad/tasks/main.yml create mode 100644 roles/etherpad/templates/etherpad-lite.service create mode 100644 roles/etherpad/templates/settings.json diff --git a/roles/etherpad/tasks/main.yml b/roles/etherpad/tasks/main.yml new file mode 100644 index 0000000..82c9e1f --- /dev/null +++ b/roles/etherpad/tasks/main.yml @@ -0,0 +1,33 @@ +- name: create nodejs user + user: + name: nodejs + system: yes + group: nogroup + home: /var/lib/nodejs + shell: /bin/false +- name: create etherpad dir + file: path=/srv/{{etherpad.domain}} state=directory owner=nodejs group=www-data +- name: check out etherpad sources + become_user: nodejs + register: etherpad_src + git: + dest: /srv/{{etherpad.domain}}/etherpad-lite + repo: 'https://github.com/ether/etherpad-lite.git' + version: '1.6.6' + force: yes +- name: create etherpad service file + register: etherpad_service + template: + dest: /etc/systemd/system/etherpad-lite.service + src: templates/etherpad-lite.service +- name: configure etherpad + register: etherpad_settings + template: + dest: /srv/{{etherpad.domain}}/etherpad-lite/settings.json + src: templates/settings.json + mode: u=rw,g=,o= + owner: nodejs + group: nogroup +- name: (re)start and enable etherpad service + when: etherpad_src.changed or etherpad_service.changed or etherpad_settings.changed + systemd: name=etherpad-lite state=restarted daemon_reload=yes enabled=yes diff --git a/roles/etherpad/templates/etherpad-lite.service b/roles/etherpad/templates/etherpad-lite.service new file mode 100644 index 0000000..3673f30 --- /dev/null +++ b/roles/etherpad/templates/etherpad-lite.service @@ -0,0 +1,14 @@ +[Unit] +Description=etherpad-lite (real-time collaborative document editing) +After=syslog.target network.target + +[Service] +Type=simple +User=nodejs +Group=nogroup +Environment=NODE_ENV=production +ExecStart=/srv/{{etherpad.domain}}/etherpad-lite/bin/run.sh +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/roles/etherpad/templates/settings.json b/roles/etherpad/templates/settings.json new file mode 100644 index 0000000..74bb3c6 --- /dev/null +++ b/roles/etherpad/templates/settings.json @@ -0,0 +1,64 @@ +/* + This file must be valid JSON. But comments are allowed + + Please edit settings.json, not settings.json.template +*/ +{ + //IP and port which etherpad should bind at + "ip": "127.0.0.1", + "port" : 9001, + + //The Type of the database. You can choose between dirty, postgres, sqlite and mysql + //You shouldn't use "dirty" for for anything else than testing or development + "dbType" : "mysql", + "dbSettings" : { + "user" : "etherpad", + "host" : "localhost", + "password": "{{etherpad.mysql_password}}", + "database": "etherpad" + }, + + //the default text of a pad + "defaultPadText" : "{{etherpad.default_text}}", + + /* Users must have a session to access pads. This effectively allows only group pads to be accessed. */ + "requireSession" : false, + + /* Users may edit pads but not create new ones. Pad creation is only via the API. This applies both to group pads and regular pads. */ + "editOnly" : false, + + /* if true, all css & js will be minified before sending to the client. This will improve the loading performance massivly, + but makes it impossible to debug the javascript/css */ + "minify" : true, + + /* How long may clients use served javascript code (in seconds)? Without versioning this + may cause problems during deployment. Set to 0 to disable caching */ + "maxAge" : 21600, // 60 * 60 * 6 = 6 hours + + /* This is the absolute path to the Abiword executable. Setting it to null, disables abiword. + Abiword is needed to advanced import/export features of pads*/ + "abiword" : null, + + /* This setting is used if you require authentication of all users. + Note: /admin always requires authentication. */ + "requireAuthentication" : false, + + /* Require authorization by a module, or a user with is_admin set, see below. */ + "requireAuthorization" : false, + + /* Users for basic authentication. is_admin = true gives access to /admin. + If you do not uncomment this, /admin will not be available! */ + + "users": { + "admin": { + "password": "{{etherpad.admin_password}}", + "is_admin": true + } + }, + + // restrict socket.io transport methods + "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"], + + /* The log level we are using, can be: DEBUG, INFO, WARN, ERROR */ + "loglevel": "WARN" +} diff --git a/site.yml b/site.yml index 0d82190..3c5fe4e 100644 --- a/site.yml +++ b/site.yml @@ -21,6 +21,12 @@ - bind tags: bind +- hosts: etherpad + gather_facts: no + roles: + - etherpad + tags: etherpad + - hosts: prosody gather_facts: no roles: -- 2.30.2