diff --git a/hedgedoc/defaults/main.yml b/hedgedoc/defaults/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..160642c750ae45b9d192846cbe2196262ec0b6f1 --- /dev/null +++ b/hedgedoc/defaults/main.yml @@ -0,0 +1,16 @@ +--- + +hedgedoc_data_root: /var/lib/hedgedoc +hedgedoc_install_root: /opt/hedgedoc +hedgedoc_version: "1.8.2" +hedgedoc_db: + dialect: sqlite + storage: "{{ hedgedoc_data_root }}/db.sqlite" + +# hedgedoc_db: +# dialect: postgres +# host: /run/postgresql +# username: "" +# password: "" +# database: hedgedoc +# port: "5432" diff --git a/hedgedoc/handlers/main.yml b/hedgedoc/handlers/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..f3b4244580428ba03d8dce22536bf11a84d169cb --- /dev/null +++ b/hedgedoc/handlers/main.yml @@ -0,0 +1,10 @@ +--- + +- name: Reload systemd + systemd: + daemon_reload: true + +- name: Restart hedgedoc + systemd: + name: hedgedoc.service + state: restarted diff --git a/hedgedoc/tasks/main.yml b/hedgedoc/tasks/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..aafb0d4166f0e658a2377672b389ddb2f589a6f4 --- /dev/null +++ b/hedgedoc/tasks/main.yml @@ -0,0 +1,133 @@ +--- + +- name: Install required packages + apt: + name: + - nodejs + - yarnpkg + - npm + +- name: Create system group + group: + name: hedgedoc + system: true + state: present + +- name: Create system user + user: + name: hedgedoc + group: hedgedoc + system: true + home: "{{ hedgedoc_data_root }}" + shell: /usr/bin/nologin + state: present + +- import_tasks: postgres.yml + when: hedgedoc_db.dialect == "postgres" + tags: + - postgresql + +- name: Get installed version package.json + slurp: + src: "{{ hedgedoc_install_root }}/package.json" + register: installed_package_json + ignore_errors: true + +- name: Install config + template: + src: "{{ item }}.j2" + dest: "{{ hedgedoc_install_root }}/{{ item }}" + loop: + - config.json + - .sequelizerc + when: + - not installed_package_json.failed + - installed_package_json.content|b64decode|json_query('version')|trim == + hedgedoc_version + notify: + - Restart hedgedoc + +- when: >- + installed_package_json.failed or + installed_package_json.content|b64decode|json_query('version')|trim != + hedgedoc_version + block: + - name: Stop service for upgrade + systemd: + name: hedgedoc.service + state: stopped + # when this is the initial installation, the service does not exist yet + ignore_errors: true + + - name: Create temporary directory + tempfile: + state: directory + register: tempdir + + - name: Fetch and extract HedgeDoc + unarchive: + # yamllint disable-line rule:line-length + src: "https://github.com/hedgedoc/hedgedoc/releases/download/{{ hedgedoc_version }}/hedgedoc-{{ hedgedoc_version }}.tar.gz" + dest: "{{ tempdir.path }}" + remote_src: true + + - name: Move HedgeDoc to target directory + copy: + src: "{{ tempdir.path }}/hedgedoc/" + dest: "{{ hedgedoc_install_root }}-{{ hedgedoc_version }}" + remote_src: true + + - name: Install config + template: + src: "{{ item }}.j2" + dest: "{{ hedgedoc_install_root }}-{{ hedgedoc_version }}/{{ item }}" + loop: + - config.json + - .sequelizerc + + - name: yarn install + command: + cmd: yarn install --production=true --pure-lockfile + chdir: "{{ hedgedoc_install_root }}-{{ hedgedoc_version }}" + + - name: Get old install target + stat: + path: "{{ hedgedoc_install_root }}" + register: install_root + + - name: Replace install root symlink + file: + src: "{{ hedgedoc_install_root }}-{{ hedgedoc_version }}" + dest: "{{ hedgedoc_install_root }}" + state: link + follow: false + force: true + + - name: Install systemd service file + template: + src: hedgedoc.service.j2 + dest: /etc/systemd/system/hedgedoc.service + owner: root + group: root + mode: "0644" + notify: + - Reload systemd + + - meta: flush_handlers + + - name: Enable and start service + systemd: + name: hedgedoc.service + state: started + enabled: true + + - name: Remove old version + file: + path: "{{ install_root.stat.lnk_source }}" + state: absent + when: install_root.stat.islnk is defined and install_root.stat.islnk + + - name: Remove temporary directory + file: + path: "{{ tempdir.path }}" + state: absent diff --git a/hedgedoc/tasks/postgres.yml b/hedgedoc/tasks/postgres.yml new file mode 100644 index 0000000000000000000000000000000000000000..750701c64e88ddbd0ea077ce7ad056d607738fd5 --- /dev/null +++ b/hedgedoc/tasks/postgres.yml @@ -0,0 +1,20 @@ +--- + +- become: true + become_user: postgres + block: + - name: Create the postgres user + postgresql_user: + name: hedgedoc + state: present + - name: Create the database + postgresql_db: + name: "{{ hedgedoc_db.database }}" + owner: hedgedoc + state: present + +- name: Ensure postgres is running + service: + name: postgresql + state: started + enabled: true