From 0e2ff1a70ce3b9e621d54dc133a6d15ca3247f1d Mon Sep 17 00:00:00 2001 From: mose Date: Wed, 28 Sep 2022 18:35:31 +0800 Subject: [PATCH] initial extraction --- README.md | 9 +++ defaults/main.yml | 9 +++ files/mariadb-90-want-utf8.cnf | 7 ++ handlers/main.yml | 14 ++++ tasks/dependencies.yml | 84 ++++++++++++++++++++++ tasks/install.yml | 127 +++++++++++++++++++++++++++++++++ tasks/main.yml | 12 ++++ tasks/python310.yml | 39 ++++++++++ tasks/user.yml | 12 ++++ templates/my.cnf.j2 | 3 + 10 files changed, 316 insertions(+) create mode 100644 README.md create mode 100644 defaults/main.yml create mode 100644 files/mariadb-90-want-utf8.cnf create mode 100644 handlers/main.yml create mode 100644 tasks/dependencies.yml create mode 100644 tasks/install.yml create mode 100644 tasks/main.yml create mode 100644 tasks/python310.yml create mode 100644 tasks/user.yml create mode 100644 templates/my.cnf.j2 diff --git a/README.md b/README.md new file mode 100644 index 0000000..9915f43 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +Ansible role for dokos +========================== + +This role is not packaged, as it's very specific to Distrilab ansible context, but hopefully it may serve as an inspiration for other people that want to install dokos 3.x.x with ansible in their context. + +This follow the manual; procedure initially tested and detailed on: + +- https://md.distrilab.fr/xQu1bFRnSIWDT2qv5unzxw?both + diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000..5b4dcca --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,9 @@ +dokos_user: dokos-user +nvm_version: v0.39.1 +node_version: v14.20.0 +dodock_tag: v3.3.1 +dokos_tag: v3.1.3 +site_fqdn: dokos.local +admin_password: CHANGE_ME_NOW +# set a password otherwise it won't work (for now) +mysql_root_password: CHANGE_ME_NOW_TOO diff --git a/files/mariadb-90-want-utf8.cnf b/files/mariadb-90-want-utf8.cnf new file mode 100644 index 0000000..83b2c70 --- /dev/null +++ b/files/mariadb-90-want-utf8.cnf @@ -0,0 +1,7 @@ +[mysqld] +character-set-client-handshake = FALSE +character-set-server = utf8mb4 +collation-server = utf8mb4_unicode_ci + +[mysql] +default-character-set = utf8mb4 diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 0000000..62d9cad --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1,14 @@ +- name: mariadb restart + service: + name: mariadb + state: restarted + +- name: nginx restart + service: + name: nginx + state: restarted + +- name: frappe restart + service: + name: frappe-bench.target + state: restarted diff --git a/tasks/dependencies.yml b/tasks/dependencies.yml new file mode 100644 index 0000000..5aa7fee --- /dev/null +++ b/tasks/dependencies.yml @@ -0,0 +1,84 @@ + +- name: dokos | dependencies | install node 16 source + tags: packages + shell: curl -sL https://deb.nodesource.com/setup_16.x | bash - + args: + creates: /etc/apt/sources.list.d/nodesource.list + +- name: dokos | dependencies | install yarn source key + tags: packages + shell: > + curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | + gpg --dearmor | + tee /usr/share/keyrings/yarnkey.gpg > /dev/null + args: + creates: /usr/share/keyrings/yarnkey.gpg + +- name: dokos | dependencies | install yarn apt source + tags: packages + shell: > + echo 'deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main' | + sudo tee /etc/apt/sources.list.d/yarn.list + args: + creates: /etc/apt/sources.list.d/yarn.list + +- name: dokos | dependencies | apt packages + tags: packages + package: + state: latest + update_cache: yes + name: + - git + - software-properties-common + - build-essential + - python3-dev + - python3-pip + - python3-venv + - python3-setuptools + - redis-server + - nginx + - mariadb-server-10.5 + - xvfb + - libfontconfig + - wkhtmltopdf + - nodejs + - yarn + +- name: dokos | dependencies | mariadb utf8 config + tags: mysql-setup + copy: + src: mariadb-90-want-utf8.cnf + dest: /etc/mysql/mariadb.conf.d/90-want-utf8.cnf + notify: mariadb restart + +- name: dokos | dependencies | mariadb Set root Password + tags: mysql-setup + community.mysql.mysql_user: + check_implicit_admin: yes + host: localhost + name: root + password: "{{ mysql_root_password }}" + state: present + +- name: dokos | dependencies | Add .my.cnf for root + tags: mysql-setup + template: + src: my.cnf.j2 + dest: /root/.my.cnf + owner: root + group: root + mode: 0600 + +- name: Removes all anonymous user accounts + community.mysql.mysql_user: + name: '' + host_all: yes + state: absent + +# - name: dokos | dependencies | pip install frappe-bench +# pip: +# name: frappe-bench + +- name: dokos | dependencies | pip install dokos-cli + pip: + name: dokos-cli diff --git a/tasks/install.yml b/tasks/install.yml new file mode 100644 index 0000000..7084dd5 --- /dev/null +++ b/tasks/install.yml @@ -0,0 +1,127 @@ +- name: dokos | install | install bench + become: yes + become_user: "{{ dokos_user }}" + shell: > + bash -ci " + bench init frappe-bench + --frappe-path https://gitlab.com/dokos/dodock + --frappe-branch {{ dodock_tag }} + --python /usr/local/bin/python3.10 + --no-procfile" + args: + creates: "/home/{{ dokos_user }}/frappe-bench" + chdir: /home/{{ dokos_user }} + +- name: dokos | install | bench setup config + become: yes + become_user: "{{ dokos_user }}" + command: bench setup config + args: + creates: "/home/{{ dokos_user }}/frappe-bench/sites/common_site_config.json" + chdir: /home/{{ dokos_user }}/frappe-bench + +- name: dokos | install | get-app + become: yes + become_user: "{{ dokos_user }}" + command: bench get-app erpnext https://gitlab.com/dokos/dokos --branch {{ dokos_tag }} + args: + creates: "/home/{{ dokos_user }}/frappe-bench/apps/erpnext" + chdir: /home/{{ dokos_user }}/frappe-bench + +- name: dokos | install | get-app payments + become: yes + become_user: "{{ dokos_user }}" + command: bench get-app https://gitlab.com/dokos/payments --branch v3.x.x + args: + creates: "/home/{{ dokos_user }}/frappe-bench/apps/payments" + chdir: /home/{{ dokos_user }}/frappe-bench + +# - name: dokos | install | get-app hrms +# become: yes +# become_user: "{{ dokos_user }}" +# command: bench get-app https://gitlab.com/dokos/hrms --branch v3.x.x +# args: +# creates: "/home/{{ dokos_user }}/frappe-bench/apps/hrms" +# chdir: /home/{{ dokos_user }}/frappe-bench + +- name: dokos | install | new-site + become: yes + become_user: "{{ dokos_user }}" + command: > + bench new-site {{ site_fqdn }} + --admin-password '{{ admin_password }}' + --mariadb-root-password '{{ mysql_root_password }}' + args: + creates: "/home/{{ dokos_user }}/frappe-bench/sites/{{ site_fqdn }}" + chdir: /home/{{ dokos_user }}/frappe-bench + # no_log: yes + # diff: no + +- name: dokos | install | install-app + become: yes + become_user: "{{ dokos_user }}" + shell: bench --site {{ site_fqdn }} install-app erpnext + args: + creates: "/home/{{ dokos_user }}/frappe-bench/sites/apps.txt" + chdir: /home/{{ dokos_user }}/frappe-bench + +# - name: dokos | install | install-app +# become: yes +# become_user: "{{ dokos_user }}" +# shell: bench --site {{ site_fqdn }} install-app hrms +# args: +# creates: "/home/{{ dokos_user }}/frappe-bench/sites/apps.txt" +# chdir: /home/{{ dokos_user }}/frappe-bench + +- name: dokos | install | bench setup redis + become: yes + become_user: "{{ dokos_user }}" + command: bench setup redis + args: + creates: "/home/{{ dokos_user }}/frappe-bench/redis_cache.conf" + chdir: /home/{{ dokos_user }}/frappe-bench + +- name: dokos | install | bench setup nginx + become: yes + become_user: "{{ dokos_user }}" + command: bench setup nginx --logging site --log_format combined + args: + creates: "/home/{{ dokos_user }}/frappe-bench/nginx.conf" + chdir: /home/{{ dokos_user }}/frappe-bench + +- name: dokos | install | setup nginx + file: + src: "/home/{{ dokos_user }}/frappe-bench/config/nginx.conf" + dest: /etc/nginx/conf.d/frappe-bench.conf + state: link + notify: nginx restart + +- name: dokos | install | allow http in ufw + ufw: + rule: allow + port: "80" + from_ip: "{{ trust_proxy }}" + proto: tcp + +- name: dokos | install | install systemd rules + command: bench setup systemd --user dokos-user --yes + args: + creates: "/home/{{ dokos_user }}/frappe-bench/config/systemd" + chdir: /home/{{ dokos_user }}/frappe-bench + +- name: dokos | install | list systemd rules + find: + paths: /home/{{ dokos_user }}/frappe-bench/config/systemd/ + file_type: file + patterns: + - '*.target' + - '*.service' + register: systemd_list + +- name: dokos | install | deploy systemd rules + file: + src: "{{ item.path }}" + dest: /etc/systemd/system/{{ item.path | basename }} + state: link + loop: "{{ systemd_list.files }}" + notify: frappe restart diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..76d5e35 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,12 @@ +- block: + - import_tasks: user.yml + tags: user + + - import_tasks: dependencies.yml + tags: dependencies + + - import_tasks: python310.yml + tags: python310 + + - import_tasks: install.yml + tags: install diff --git a/tasks/python310.yml b/tasks/python310.yml new file mode 100644 index 0000000..4f414d6 --- /dev/null +++ b/tasks/python310.yml @@ -0,0 +1,39 @@ +- name: dokos | python3.10 | apt packages + tags: packages + package: + state: latest + update_cache: yes + name: + - wget + - build-essential + - libncursesw5-dev + - libssl-dev + - libsqlite3-dev + - tk-dev + - libgdbm-dev + - libc6-dev + - libbz2-dev + - libffi-dev + - zlib1g-dev + +- name: dokos | python3.10 | get python 3.10 source + get_url: + url: https://www.python.org/ftp/python/3.10.2/Python-3.10.2.tgz + dest: /tmp/Python-3.10.2.tgz + +- name: dokos | python3.10 | extract python 3.10 source + unarchive: + src: /tmp/Python-3.10.2.tgz + dest: /tmp/ + remote_src: yes + +- name: dokos | python3.10 | python 3.10 configure + command: + cmd: ./configure --enable-optimizations + chdir: /tmp/Python-3.10.2 + +- name: dokos | python3.10 | python 3.10 install + command: + cmd: make altinstall + chdir: /tmp/Python-3.10.2 + diff --git a/tasks/user.yml b/tasks/user.yml new file mode 100644 index 0000000..50ef38c --- /dev/null +++ b/tasks/user.yml @@ -0,0 +1,12 @@ + +- name: dokos | user | create group + group: + name: "{{ dokos_user }}" + state: present + +- name: dokos | user | create user + user: + name: "{{ dokos_user }}" + group: "{{ dokos_user }}" + shell: /bin/bash + state: present \ No newline at end of file diff --git a/templates/my.cnf.j2 b/templates/my.cnf.j2 new file mode 100644 index 0000000..b63b4e6 --- /dev/null +++ b/templates/my.cnf.j2 @@ -0,0 +1,3 @@ +[client] +user=root +password={{ mysql_root_password }}