diff --git a/inventory/host_vars/web2.yml b/inventory/host_vars/web2.yml
index ea51fd4..50eb2c2 100644
--- a/inventory/host_vars/web2.yml
+++ b/inventory/host_vars/web2.yml
@@ -6,6 +6,7 @@ web_hostname:
- host: www.nintendojo.fr
- host: wwwdev.nintendojo.fr
- host: forum.nintendojo.fr
+ type: phpbb
- host: nintendojofr.com
- host: www.nintendojofr.com
type: retrodojo
@@ -19,6 +20,16 @@ mariadb_root_pass: !vault |
3437653064323138310a663363373736623931336432376466316666616234356133383263373136
31343534663063663134306464306234366430323762656165653930333134326231
+phpbb_maria_database: "dojo_forum"
+phpbb_maria_user: "adm_forum"
+phpbb_maria_password: !vault |
+ $ANSIBLE_VAULT;1.1;AES256
+ 65306237643235363962653566336537303632386466646462656234333836396630306438336632
+ 3334663566303963646135313265643235623538633463650a663637386436306538616266626232
+ 36373332396338326437663832383237623836643137323432323435333231633363386432303830
+ 3465306161666563630a356462363561653431303438653935346564343861303962363030323633
+ 3632
+
wordpress_maria_database: "dojo_wp"
wordpress_maria_user: "adm_wp"
wordpress_maria_password: !vault |
diff --git a/playbooks/webapps.yml b/playbooks/webapps.yml
index f5dd7ac..caa79e4 100644
--- a/playbooks/webapps.yml
+++ b/playbooks/webapps.yml
@@ -23,5 +23,9 @@
hosts: web2
diff: true
roles:
- - wordpress
- - retrodojo
+ - role: wordpress
+ tags: [never, wordpress]
+ - role: phpbb
+ tags: [never, phpbb]
+ - role: retrodojo
+ tags: [never, retrodojo]
diff --git a/roles/phpbb/files/dojopeertube.yml b/roles/phpbb/files/dojopeertube.yml
new file mode 100644
index 0000000..7591680
--- /dev/null
+++ b/roles/phpbb/files/dojopeertube.yml
@@ -0,0 +1,6 @@
+name: DojoPeertube
+host: p.nintendojo.fr
+example: https://p.nintendojo.fr/videos/embed/19bc46e8-7640-4417-86a1-03aa2b439508
+extract: "!//p.nintendojo.fr/videos/embed/(?'id'[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12})!"
+iframe:
+ src: "https://p.nintendojo.fr/videos/embed/{@id}"
diff --git a/roles/phpbb/files/mastodon.yml b/roles/phpbb/files/mastodon.yml
new file mode 100644
index 0000000..025fdb2
--- /dev/null
+++ b/roles/phpbb/files/mastodon.yml
@@ -0,0 +1,17 @@
+name: "Mastodon"
+host: m.nintendojo.fr
+example: https://mastodon.social/@HackerNewsBot/100181134752056592
+extract: "!//(?'host'[-.\\w]+)/@(?'name'\\w+)/(?'id'\\d+)!"
+oembed:
+ endpoint: https://m.nintendojo.fr/api/oembed
+ scheme: https://m.nintendojo.fr/@{@name}/{@id}
+scrape:
+ - extract: "!\"url\":\"https://(?'host'[-.\\w]+)/@(?'name'\\w+)/(?'id'\\d+)\"!"
+ - match: "!^(?'origin'https://[^/]+)/@\\w+@[-.\\w]+/(?'id'\\d+)!"
+ - url: "{@origin}/api/v1/statuses/{@id}"
+iframe:
+ data-s9e-livepreview-ignore-attrs: "style"
+ onload: "let c=new MessageChannel;c.port1.onmessage=e=>this.style.height=e.data+'px';this.contentWindow.postMessage('s9e:init','*',[c.port2])"
+ width: "550"
+ height: "300"
+ src: https://s9e.github.io/iframe/2/mastodon.min.html#@/
diff --git a/roles/phpbb/tasks/db.yml b/roles/phpbb/tasks/db.yml
new file mode 100644
index 0000000..1696762
--- /dev/null
+++ b/roles/phpbb/tasks/db.yml
@@ -0,0 +1,10 @@
+---
+
+- name: Create phpbb db user
+ community.mysql.mysql_user:
+ login_unix_socket: "/var/run/mysqld/mysqld.sock"
+ login_user: root
+ login_password: "{{ mariadb_root_pass }}"
+ name: "{{ phpbb_maria_user }}"
+ password: "{{ phpbb_maria_password }}"
+ priv: "{{ phpbb_maria_database }}.*:ALL"
diff --git a/roles/phpbb/tasks/main.yml b/roles/phpbb/tasks/main.yml
new file mode 100644
index 0000000..60e7b58
--- /dev/null
+++ b/roles/phpbb/tasks/main.yml
@@ -0,0 +1,24 @@
+---
+
+- name: Init db
+ ansible.builtin.include_tasks: db.yml
+
+- name: Install phpbb
+ ansible.builtin.include_tasks: phpbb.yml
+
+- name: Install phpbb’s styles
+ ansible.builtin.include_tasks: phpbb_styles.yml
+ loop: "{{ phpbb_styles }}"
+
+- name: Install phpbb’s languages
+ ansible.builtin.include_tasks: phpbb_languages.yml
+ loop: "{{ phpbb_languages }}"
+
+- name: Install phpbb’s extensions
+ ansible.builtin.include_tasks: phpbb_exts.yml
+ loop: "{{ phpbb_exts }}"
+ loop_control:
+ loop_var: ext
+
+- name: Custom part
+ ansible.builtin.include_tasks: phpbb_customs.yml
diff --git a/roles/phpbb/tasks/phpbb.yml b/roles/phpbb/tasks/phpbb.yml
new file mode 100644
index 0000000..79a7af0
--- /dev/null
+++ b/roles/phpbb/tasks/phpbb.yml
@@ -0,0 +1,77 @@
+---
+
+- name: Remove phpbb previous version
+ ansible.builtin.file:
+ state: absent
+ dest: "{{ phpbb_app_home }}"
+
+## Handle app data
+- name: Create app home
+ ansible.builtin.file:
+ state: directory
+ dest: "{{ phpbb_app_home }}"
+ owner: root
+ group: www-data
+ mode: "0o750"
+
+- name: Install phpbb application
+ ansible.builtin.unarchive:
+ remote_src: true
+ src: "{{ phpbb_url }}"
+ dest: "{{ phpbb_app_home }}"
+ owner: root
+ group: www-data
+ mode: "a-rwx,u+rwX,g+rX"
+ extra_opts: ['--strip-components=1']
+ exclude: "{{ phpbb_userdata_app_dirs | map('regex_replace', '^^', 'phpBB' ~ phpbb_major_version ~ '/') }}"
+
+- name: Check writable dirs
+ ansible.builtin.file:
+ state: directory
+ dest: "{{ phpbb_app_home }}/{{ item }}"
+ owner: www-data
+ group: www-data
+ mode: "a-rwx,u+rwX,g+rX"
+ recurse: true
+ loop: "{{ phpbb_writable_app_dirs }}"
+
+## Handle user data
+- name: Create data home
+ ansible.builtin.file:
+ state: directory
+ path: "{{ phpbb_data_home }}"
+ owner: www-data
+ group: www-data
+ mode: "a-rwx,u+rwX,g+rX"
+
+- name: Get data dir
+ ansible.builtin.stat:
+ path: "{{ phpbb_data_home }}/{{ phpbb_userdata_app_dirs[0] }}"
+ register: _phpbb_userdata_dir_stat
+
+- name: Install phpbb data dir
+ ansible.builtin.unarchive:
+ remote_src: true
+ src: "{{ phpbb_url }}"
+ dest: "{{ phpbb_data_home }}"
+ owner: www-data
+ group: www-data
+ mode: "a-rwx,u+rwX,g+rX"
+ extra_opts: ['--strip-components=1']
+ include: "{{ phpbb_userdata_app_dirs | map('regex_replace', '^^', 'phpBB' ~ phpbb_major_version ~ '/') }}"
+ when: not _phpbb_userdata_dir_stat.stat.exists
+
+- name: Link phpbb userdata dirs
+ ansible.builtin.file:
+ state: link
+ src: "{{ phpbb_data_home }}/{{ item }}"
+ dest: "{{ phpbb_app_home }}/{{ item }}"
+ loop: "{{ phpbb_userdata_app_dirs }}"
+
+- name: Put phpbb config file
+ ansible.builtin.template:
+ src: config.php.j2
+ dest: "{{ phpbb_app_home }}/config.php"
+ owner: www-data
+ group: www-data
+ mode: "0o640"
diff --git a/roles/phpbb/tasks/phpbb_customs.yml b/roles/phpbb/tasks/phpbb_customs.yml
new file mode 100644
index 0000000..cfd9cfd
--- /dev/null
+++ b/roles/phpbb/tasks/phpbb_customs.yml
@@ -0,0 +1,7 @@
+---
+
+- name: Replace logo
+ ansible.builtin.lineinfile:
+ path: "{{ phpbb_app_home }}/styles/prosilver/theme/colours.css"
+ search_string: "background-image: url(\"./images/site_logo.svg\");"
+ line: " background-image: url(\"./images/ndfr_casual.png\");"
diff --git a/roles/phpbb/tasks/phpbb_exts.yml b/roles/phpbb/tasks/phpbb_exts.yml
new file mode 100644
index 0000000..851e140
--- /dev/null
+++ b/roles/phpbb/tasks/phpbb_exts.yml
@@ -0,0 +1,28 @@
+---
+
+- name: Create phpbb ext path
+ ansible.builtin.file:
+ state: directory
+ dest: "{{ phpbb_app_home }}/ext/{{ ext.path }}"
+ owner: root
+ group: www-data
+ mode: "0o750"
+
+- name: Extract phpbb ext
+ ansible.builtin.unarchive:
+ remote_src: true
+ src: "{{ ext.url | replace('%VERSION%', ext.version) }}"
+ dest: "{{ phpbb_app_home }}/ext/{{ ext.path }}"
+ owner: root
+ group: www-data
+ mode: "a-rwx,u+rwX,g+rX"
+ extra_opts: ['--strip-components=1']
+
+- name: Put extra files
+ ansible.builtin.copy:
+ src: "{{ item.src }}"
+ dest: "{{ phpbb_app_home }}/ext/{{ ext.path }}/{{ item.dest }}"
+ owner: root
+ group: www-data
+ loop: "{{ ext.extra_files }}"
+ when: ext.extra_files is defined
diff --git a/roles/phpbb/tasks/phpbb_languages.yml b/roles/phpbb/tasks/phpbb_languages.yml
new file mode 100644
index 0000000..303470a
--- /dev/null
+++ b/roles/phpbb/tasks/phpbb_languages.yml
@@ -0,0 +1,11 @@
+---
+
+- name: Extract phpbb language
+ ansible.builtin.unarchive:
+ remote_src: true
+ src: "{{ item.url | replace('%VERSION%', item.version) }}"
+ dest: "{{ phpbb_app_home }}"
+ owner: root
+ group: www-data
+ mode: "a-rwx,u+rwX,g+rX"
+ extra_opts: ['--strip-components=1']
diff --git a/roles/phpbb/tasks/phpbb_styles.yml b/roles/phpbb/tasks/phpbb_styles.yml
new file mode 100644
index 0000000..e467dce
--- /dev/null
+++ b/roles/phpbb/tasks/phpbb_styles.yml
@@ -0,0 +1,11 @@
+---
+
+- name: Extract style
+ ansible.builtin.unarchive:
+ remote_src: true
+ src: "{{ item.url | replace('%VERSION%', item.version) }}"
+ dest: "{{ phpbb_app_home }}/styles/"
+ owner: root
+ group: www-data
+ mode: "a-rwx,u+rwX,g+rX"
+ extra_opts: ['--strip-components=1']
diff --git a/roles/phpbb/templates/config.php.j2 b/roles/phpbb/templates/config.php.j2
new file mode 100644
index 0000000..7a74385
--- /dev/null
+++ b/roles/phpbb/templates/config.php.j2
@@ -0,0 +1,19 @@
+
diff --git a/roles/phpbb/vars/main.yml b/roles/phpbb/vars/main.yml
new file mode 100644
index 0000000..cf73624
--- /dev/null
+++ b/roles/phpbb/vars/main.yml
@@ -0,0 +1,45 @@
+---
+
+phpbb_version: "3.3.15"
+phpbb_minor_version: "{{ phpbb_version | regex_replace('^([0-9])\\.([0-9]*).*', '\\1.\\2') }}"
+phpbb_major_version: "{{ phpbb_version | regex_replace('^([0-9])\\..*', '\\1') }}"
+
+phpbb_url: "https://download.phpbb.com/pub/release/{{ phpbb_minor_version }}/{{ phpbb_version }}/phpBB-{{ phpbb_version }}.tar.bz2"
+phpbb_access_url: "{{ web_hostname | selectattr('type', 'defined') | selectattr('type', '==', 'phpbb') | map(attribute='host') |first }}"
+
+# Access path
+phpbb_app_home: "/var/www/{{ phpbb_access_url }}"
+phpbb_data_home: "/srv/www-data/{{ phpbb_access_url }}"
+
+phpbb_writable_app_dirs:
+ - cache
+ - store
+phpbb_userdata_app_dirs:
+ - files
+ - images
+
+phpbb_styles:
+ - name: black
+ version: 3.3.12
+ url: "https://github.com/cabot/black/archive/refs/tags/v%VERSION%.tar.gz"
+
+
+phpbb_languages:
+ - name: fr
+ version: 4.15.0
+ url: "https://github.com/qiaeru/phpbb-language-fr/archive/refs/tags/v%VERSION%.tar.gz"
+
+phpbb_exts:
+ - name: externallink
+ path: martin/externallinkinnewwindow
+ version: 1.2.0
+ url: "https://github.com/Mar-tin-G/ExternalLinkInNewWindow/archive/refs/tags/%VERSION%.tar.gz"
+ - name: mediaembed
+ path: phpbb/mediaembed
+ version: 2.0.2
+ url: "https://github.com/phpbb-extensions/mediaembed/archive/refs/tags/%VERSION%.tar.gz"
+ extra_files:
+ - src: files/mastodon.yml
+ dest: collection/sites/mastodon.yml
+ - src: files/dojopeertube.yml
+ dest: collection/sites/dojopeertube.yml