Added Ansible playbook for NextCloud installation
This commit is contained in:
commit
2c543ebde4
109
README.md
Normal file
109
README.md
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
This is a Ansible playbook for configuring a stock Debian 12 (bookworm)
|
||||||
|
cloud image to install NextCloud under a LAMP stack.
|
||||||
|
|
||||||
|
NOTE! The stanzas reponsible for creating the /data filesystem on vdb in
|
||||||
|
roles/system/tasks/main.yml have been commented out for testing, remember
|
||||||
|
to uncomment them before you run this in production.
|
||||||
|
|
||||||
|
This was tested on a Debian-derived x86_64 system with 8GB RAM and 4 cores
|
||||||
|
under QEMU/KVM.
|
||||||
|
|
||||||
|
To test this playbook on a Debian-based OS using QEMU/KVM, do the following:
|
||||||
|
|
||||||
|
- Install the following packages if not already installed:
|
||||||
|
|
||||||
|
* ansible
|
||||||
|
* ansible-lint
|
||||||
|
* cloud-init
|
||||||
|
* cloud-guest-utils
|
||||||
|
* cloud-image-utils
|
||||||
|
* qemu-system-x86_64
|
||||||
|
* qemu-utils
|
||||||
|
* ssh
|
||||||
|
* ssh-askpass
|
||||||
|
* wget
|
||||||
|
* whois (for mkpasswd)
|
||||||
|
|
||||||
|
- Copy the file cloud-init.cfg from the data/ directory
|
||||||
|
|
||||||
|
NOTE! this is a YAML file, proper spacing is required!
|
||||||
|
|
||||||
|
The hashed password was created using
|
||||||
|
|
||||||
|
```
|
||||||
|
$ mkpasswd -m sha-512
|
||||||
|
```
|
||||||
|
|
||||||
|
- Create the seed image:
|
||||||
|
|
||||||
|
```
|
||||||
|
cloud-localds seed.iso cloud-init.cfg
|
||||||
|
```
|
||||||
|
|
||||||
|
- Download the latest debian 12 cloud image if you haven't done so already:
|
||||||
|
|
||||||
|
```
|
||||||
|
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2
|
||||||
|
```
|
||||||
|
|
||||||
|
NOTE! Do *NOT* try to use the generic cloud image, it will *NOT* work!
|
||||||
|
|
||||||
|
- Copy the cloud image because cloud-init will change the image the first
|
||||||
|
time you run it under QEMU:
|
||||||
|
|
||||||
|
```
|
||||||
|
cp debian-12-generic-amd64.qcow2 test.qcow2
|
||||||
|
```
|
||||||
|
|
||||||
|
- The cloud image is only something like 2GB and installing anything
|
||||||
|
substantial on it will fail, so you need to resize it:
|
||||||
|
|
||||||
|
```
|
||||||
|
qemu-img resize test.qcow2 10G
|
||||||
|
```
|
||||||
|
|
||||||
|
- Start the VM:
|
||||||
|
|
||||||
|
```
|
||||||
|
qemu-system-x86_64 \
|
||||||
|
-name test \
|
||||||
|
-machine pc-q35-5.2,accel=kvm \
|
||||||
|
-cpu host \
|
||||||
|
-m 4096 \
|
||||||
|
-nographic \
|
||||||
|
-boot strict=on \
|
||||||
|
-drive file=test.qcow2,format=qcow2,media=disk \
|
||||||
|
-drive file=seed.iso,media=cdrom \
|
||||||
|
-nic user,ipv6=off,model=e1000,hostfwd=tcp:127.0.0.1:6666-:22,hostfwd=tcp:${SSH_HOST}:8080-:80
|
||||||
|
```
|
||||||
|
|
||||||
|
- After the VM has started and cloud-init has finished and you see a login
|
||||||
|
prompt, do the following in another terminal to run the ansible playbook:
|
||||||
|
|
||||||
|
```
|
||||||
|
export ANSIBLE_HOST_KEY_CHECKING=False
|
||||||
|
ansible-playbook site.yml --user installer --ask-pass -i hosts
|
||||||
|
```
|
||||||
|
|
||||||
|
when it asks you for the SSH password, type "password"
|
||||||
|
|
||||||
|
- If the installation is successful, it will print the MariaDB root and
|
||||||
|
nextcloud user's passwords. Be sure to copy these down, you will need
|
||||||
|
them when you configure NextCloud from your browser. The NextCloud
|
||||||
|
database is "nextcloud" and the user is "nextcloud".
|
||||||
|
|
||||||
|
- Once the VM is running, you can ssh to it using the following:
|
||||||
|
|
||||||
|
```
|
||||||
|
ssh-keygen -f "${HOME}/.ssh/known_hosts" -R "[127.0.0.1]:6666"
|
||||||
|
|
||||||
|
ssh installer@127.0.0.1 -p 6666
|
||||||
|
```
|
||||||
|
|
||||||
|
the password is "password"
|
||||||
|
|
||||||
|
After Ansible finishes installing NextCloud, you will be able to reach the
|
||||||
|
webserver running on the VM by going to localhost:8080 in your browser.
|
||||||
|
Follow the onscreen directions to finish configuring NextCloud using the
|
||||||
|
database passwords Ansible provides at the end of the installation.
|
||||||
|
|
11
data/cloud-init.cfg
Normal file
11
data/cloud-init.cfg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#cloud-config
|
||||||
|
hostname: test
|
||||||
|
manage_etc_hosts: false
|
||||||
|
ssh_pwauth: true
|
||||||
|
disable_root: true
|
||||||
|
users:
|
||||||
|
- name: installer
|
||||||
|
hashed_passwd: $6$Ri2GEhfA1j/8eb1w$GFvPvQyFS0dwwzFMd3sB4XMZNCD0F.df4ugHJVaNYiD/QDgkcGo2Yh4LZ05lANkVrJyuWNMOTMA4RWnZ7M64c0
|
||||||
|
sudo: ALL=(ALL) NOPASSWD:ALL
|
||||||
|
shell: /bin/bash
|
||||||
|
lock_passwd: false
|
9
doc/README.cached_nextcloud
Normal file
9
doc/README.cached_nextcloud
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
Downloading the latest version of NextCloud over and over for testing can
|
||||||
|
be tiresome. You can download it once and cache it by doing the following:
|
||||||
|
|
||||||
|
The latest version of NextCloud can be found at
|
||||||
|
|
||||||
|
https://download.nextcloud.com/server/releases/latest.zip
|
||||||
|
|
||||||
|
Put it in roles/nextcloud/files/ and set "nextcloud_cached" to "true"
|
||||||
|
in vars/vars.yml.
|
10
doc/README.ldap
Normal file
10
doc/README.ldap
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
When doing an update/upgrade of NextCloud, you may encounter the following:
|
||||||
|
|
||||||
|
...
|
||||||
|
Exception: Database error when running migration 1027Date20230504122946 for app dav
|
||||||
|
Lost connection to LDAP server.
|
||||||
|
Update failed
|
||||||
|
|
||||||
|
Did you install the LDAP app? Is there a LDAP server that NextCloud is
|
||||||
|
supposed to communicate with?
|
||||||
|
|
21
doc/README.upgrade
Normal file
21
doc/README.upgrade
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
To upgrade NextCloud, ssh to the VM and do the following:
|
||||||
|
|
||||||
|
$ cd /data/www/vhosts.d/nextcloud
|
||||||
|
$ sudo -u www-data php ./occ maintenance:mode --on
|
||||||
|
$ mariadb --user nextcloud --database nextcloud -p < /home/installer/backup.sql
|
||||||
|
Enter password:
|
||||||
|
$ sudo -u www-data php ./occ maintenance:mode --off
|
||||||
|
$ mariadb --user nextcloud --database nextcloud -p
|
||||||
|
Enter password:
|
||||||
|
> describe oc_appconfig;
|
||||||
|
> alter table oc_appconfig add lazy tinyint(1) null default 0;
|
||||||
|
> alter table oc_appconfig add type int(11) not null default 2;
|
||||||
|
> describe oc_appconfig;
|
||||||
|
> drop table oc_open_local_editor;
|
||||||
|
> drop table oc_user_status;
|
||||||
|
> exit
|
||||||
|
|
||||||
|
NOTE! you MUST enable NextCloud's LDAP app before you go any further!
|
||||||
|
|
||||||
|
$ sudo -u www-data php ./occ upgrade
|
2
hosts
Normal file
2
hosts
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[servers]
|
||||||
|
test ansible_host=127.0.0.1 ansible_port=6666
|
12
roles/apache2/files/config.inc.php.j2
Normal file
12
roles/apache2/files/config.inc.php.j2
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
|
$cfg['blowfish_secret'] = '{{ blowfish_random_generated }}';
|
||||||
|
$i = 0;
|
||||||
|
$i++;
|
||||||
|
$cfg['Servers'][$i]['auth_type'] = 'cookie';
|
||||||
|
$cfg['Servers'][$i]['host'] = 'localhost';
|
||||||
|
$cfg['Servers'][$i]['compress'] = false;
|
||||||
|
$cfg['Servers'][$i]['AllowNoPassword'] = false;
|
||||||
|
$cfg['UploadDir'] = '';
|
||||||
|
$cfg['SaveDir'] = '';
|
||||||
|
|
24
roles/apache2/files/nextcloud.conf.j2
Normal file
24
roles/apache2/files/nextcloud.conf.j2
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<VirtualHost *:80>
|
||||||
|
|
||||||
|
ServerAdmin "admin@{{ ansible_hostname }}"
|
||||||
|
DocumentRoot "{{ document_root }}/{{ package }}"
|
||||||
|
ServerName "{{ ansible_hostname }}"
|
||||||
|
ServerAlias "{{ ansible_hostname }}"
|
||||||
|
|
||||||
|
<Directory "{{ document_root }}/{{ package }}" >
|
||||||
|
Options FollowSymlinks
|
||||||
|
AllowOverride All
|
||||||
|
Require all granted
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
ErrorLog ${APACHE_LOG_DIR}/error.log
|
||||||
|
CustomLog ${APACHE_LOG_DIR}/access.log combined
|
||||||
|
|
||||||
|
<Directory "{{ document_root }}/{{ package }}" >
|
||||||
|
RewriteEngine on
|
||||||
|
RewriteBase /
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-f
|
||||||
|
RewriteRule ^(.*) index.php [PT,L]
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
</VirtualHost>
|
1948
roles/apache2/files/php-apache2-ini.j2
Normal file
1948
roles/apache2/files/php-apache2-ini.j2
Normal file
File diff suppressed because it is too large
Load Diff
1948
roles/apache2/files/php-cli-ini.j2
Normal file
1948
roles/apache2/files/php-cli-ini.j2
Normal file
File diff suppressed because it is too large
Load Diff
6
roles/apache2/handlers/main.yml
Normal file
6
roles/apache2/handlers/main.yml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Restart apache2
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: apache2
|
||||||
|
state: restarted
|
103
roles/apache2/tasks/main.yml
Normal file
103
roles/apache2/tasks/main.yml
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Install apache2
|
||||||
|
ansible.builtin.apt:
|
||||||
|
pkg:
|
||||||
|
- apache2
|
||||||
|
|
||||||
|
- name: Create apache2 directory
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ document_root }}/{{ package }}"
|
||||||
|
state: directory
|
||||||
|
mode: "0755"
|
||||||
|
owner: www-data
|
||||||
|
group: www-data
|
||||||
|
|
||||||
|
- name: Create PHP cli config directory
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "/etc/php/{{ php_version }}/cli"
|
||||||
|
state: directory
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
- name: Copy in cli php.ini file
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: files/php-cli-ini.j2
|
||||||
|
dest: "/etc/php/{{ php_version }}/cli/php.ini"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
|
- name: Create PHP apache2 config directory
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "/etc/php/{{ php_version }}/apache2"
|
||||||
|
state: directory
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
- name: Copy in apache2 php.ini file
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: files/php-apache2-ini.j2
|
||||||
|
dest: "/etc/php/{{ php_version }}/apache2/php.ini"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
|
- name: Remove default apache2 website
|
||||||
|
ansible.builtin.file:
|
||||||
|
dest: /etc/apache2/sites-enabled/000-default.conf
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Configure NextCloud site
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: files/nextcloud.conf.j2
|
||||||
|
dest: /etc/apache2/sites-available/nextcloud.conf
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
|
- name: Enable apache2 module mod_rewrite
|
||||||
|
community.general.apache2_module:
|
||||||
|
name: rewrite
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Enable apache2 module mod_headers
|
||||||
|
community.general.apache2_module:
|
||||||
|
name: headers
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Enable apache2 module mod_env
|
||||||
|
community.general.apache2_module:
|
||||||
|
name: env
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Enable apache2 module mod_dir
|
||||||
|
community.general.apache2_module:
|
||||||
|
name: dir
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Enable apache2 module mod_mime
|
||||||
|
community.general.apache2_module:
|
||||||
|
name: mime
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Enable apache2 module proxy_fcgi
|
||||||
|
community.general.apache2_module:
|
||||||
|
name: proxy_fcgi
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Enable apache2 module setenvif
|
||||||
|
community.general.apache2_module:
|
||||||
|
name: setenvif
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Configure apache2 - enable site
|
||||||
|
ansible.builtin.file:
|
||||||
|
src: /etc/apache2/sites-available/nextcloud.conf
|
||||||
|
dest: /etc/apache2/sites-enabled/nextcloud.conf
|
||||||
|
state: link
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
notify: Restart apache2
|
8
roles/generate_passwords/tasks/main.yml
Normal file
8
roles/generate_passwords/tasks/main.yml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Generate passwords
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
blowfish_random_generated: "{{ lookup('password', '/dev/null chars=ascii_lowercase,digits length=32') }}"
|
||||||
|
mariadb_database_password: "{{ lookup('password', '/dev/null chars=ascii_lowercase,digits,ascii_uppercase length=12') }}"
|
||||||
|
mariadb_root_password: "{{ lookup('password', '/dev/null chars=ascii_lowercase,digits,ascii_uppercase length=12') }}"
|
||||||
|
cacheable: true
|
84
roles/mariadb/tasks/main.yml
Normal file
84
roles/mariadb/tasks/main.yml
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Install python packages needed for Mariadb
|
||||||
|
ansible.builtin.apt:
|
||||||
|
pkg:
|
||||||
|
- python3-mysqldb
|
||||||
|
|
||||||
|
- name: Install Mariadb server
|
||||||
|
ansible.builtin.apt:
|
||||||
|
pkg:
|
||||||
|
- mariadb-server
|
||||||
|
|
||||||
|
- name: Restart Mariadb server
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: mysql
|
||||||
|
state: restarted
|
||||||
|
|
||||||
|
- name: Set Mariadb root password
|
||||||
|
community.mysql.mysql_user:
|
||||||
|
name: "root"
|
||||||
|
password: "{{ mariadb_root_password }}"
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Update Mariadb root password
|
||||||
|
community.mysql.mysql_user:
|
||||||
|
login_user: "root"
|
||||||
|
login_password: "{{ mariadb_root_password }}"
|
||||||
|
name: "root"
|
||||||
|
host: "{{ item }}"
|
||||||
|
password: "{{ mariadb_root_password }}"
|
||||||
|
with_items:
|
||||||
|
- 127.0.0.1
|
||||||
|
- ::1
|
||||||
|
- localhost
|
||||||
|
|
||||||
|
- name: Delete Mariadb anonymous user account for localhost
|
||||||
|
community.mysql.mysql_user:
|
||||||
|
login_user: "root"
|
||||||
|
login_password: "{{ mariadb_root_password }}"
|
||||||
|
name: ""
|
||||||
|
host: localhost
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Delete Mariadb anonymous user
|
||||||
|
community.mysql.mysql_user:
|
||||||
|
login_user: "root"
|
||||||
|
login_password: "{{ mariadb_root_password }}"
|
||||||
|
name: ""
|
||||||
|
host: "{{ item }}"
|
||||||
|
state: absent
|
||||||
|
with_items:
|
||||||
|
- localhost
|
||||||
|
- "{{ ansible_nodename }}"
|
||||||
|
|
||||||
|
- name: Delete Mariadb hostname-based user
|
||||||
|
community.mysql.mysql_user:
|
||||||
|
login_user: "root"
|
||||||
|
login_password: "{{ mariadb_root_password }}"
|
||||||
|
name: "root"
|
||||||
|
host: "{{ ansible_nodename }}"
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Delete Mariadb test database
|
||||||
|
community.mysql.mysql_db:
|
||||||
|
login_user: "root"
|
||||||
|
login_password: "{{ mariadb_root_password }}"
|
||||||
|
name: "test"
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Create NextCloud database
|
||||||
|
community.mysql.mysql_db:
|
||||||
|
login_user: "root"
|
||||||
|
login_password: "{{ mariadb_root_password }}"
|
||||||
|
name: "{{ package }}"
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Create NextCloud user
|
||||||
|
community.mysql.mysql_user:
|
||||||
|
login_user: "root"
|
||||||
|
login_password: "{{ mariadb_root_password }}"
|
||||||
|
name: "{{ package }}"
|
||||||
|
password: "{{ mariadb_database_password }}"
|
||||||
|
priv: "{{ package }}.*:ALL"
|
||||||
|
state: present
|
6
roles/nextcloud/handlers/main.yml
Normal file
6
roles/nextcloud/handlers/main.yml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Restart apache2
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: apache2
|
||||||
|
state: restarted
|
44
roles/nextcloud/tasks/main.yml
Normal file
44
roles/nextcloud/tasks/main.yml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Download latest NextCloud
|
||||||
|
ansible.builtin.get_url:
|
||||||
|
url: https://download.nextcloud.com/server/releases/latest.zip
|
||||||
|
dest: /tmp/latest.zip
|
||||||
|
mode: "0644"
|
||||||
|
owner: www-data
|
||||||
|
group: www-data
|
||||||
|
when: not nextcloud_cached
|
||||||
|
|
||||||
|
# XXX Downloading nextcloud takes an absurd amount of time once in a while.
|
||||||
|
# XXX You can get around this by having a local copy when debugging.
|
||||||
|
|
||||||
|
- name: Use local copy of latest NextCloud
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: files/latest.zip
|
||||||
|
dest: /tmp/latest.zip
|
||||||
|
mode: "0644"
|
||||||
|
when: nextcloud_cached
|
||||||
|
|
||||||
|
- name: Unzip latest NextCloud
|
||||||
|
ansible.builtin.unarchive:
|
||||||
|
src: /tmp/latest.zip
|
||||||
|
dest: "{{ document_root }}"
|
||||||
|
copy: false
|
||||||
|
group: www-data
|
||||||
|
owner: www-data
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
- name: Cleanup /tmp
|
||||||
|
ansible.builtin.file:
|
||||||
|
name: /tmp/latest.zip
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
# XXX if you are running nextcloud in a VM and using portforwarding
|
||||||
|
# XXX to reach the VM's webserver from the host using something like
|
||||||
|
# XXX 'localhost:8080', you need to uncomment this.
|
||||||
|
# XXX NOTE! config.php will not exist until after you go to localhost:8080
|
||||||
|
# - name: Allow local remote servers
|
||||||
|
# ansible.builtin.lineinfile:
|
||||||
|
# path: /data/www/vhosts.d/nextcloud/config/config.php
|
||||||
|
# insertbefore: '^\);'
|
||||||
|
# line: " 'allow_local_remote_servers' => true,"
|
12
roles/php/files/config.inc.php.j2
Normal file
12
roles/php/files/config.inc.php.j2
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
|
$cfg['blowfish_secret'] = '{{ blowfish_random_generated }}';
|
||||||
|
$i = 0;
|
||||||
|
$i++;
|
||||||
|
$cfg['Servers'][$i]['auth_type'] = 'cookie';
|
||||||
|
$cfg['Servers'][$i]['host'] = 'localhost';
|
||||||
|
$cfg['Servers'][$i]['compress'] = false;
|
||||||
|
$cfg['Servers'][$i]['AllowNoPassword'] = false;
|
||||||
|
$cfg['UploadDir'] = '';
|
||||||
|
$cfg['SaveDir'] = '';
|
||||||
|
|
2
roles/php/files/info.php.j2
Normal file
2
roles/php/files/info.php.j2
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
<?php
|
||||||
|
phpinfo();
|
1948
roles/php/files/php-apache2-ini.j2
Normal file
1948
roles/php/files/php-apache2-ini.j2
Normal file
File diff suppressed because it is too large
Load Diff
1948
roles/php/files/php-cli-ini.j2
Normal file
1948
roles/php/files/php-cli-ini.j2
Normal file
File diff suppressed because it is too large
Load Diff
6
roles/php/handlers/main.yml
Normal file
6
roles/php/handlers/main.yml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Reload apache2
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: apache2
|
||||||
|
state: reloaded
|
46
roles/php/tasks/main.yml
Normal file
46
roles/php/tasks/main.yml
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Install required PHP packages
|
||||||
|
ansible.builtin.apt:
|
||||||
|
pkg:
|
||||||
|
- php{{ php_version }}
|
||||||
|
- php{{ php_version }}-bcmath
|
||||||
|
- php{{ php_version }}-bz2
|
||||||
|
- php{{ php_version }}-cgi
|
||||||
|
- php{{ php_version }}-cli
|
||||||
|
- php{{ php_version }}-common
|
||||||
|
- php{{ php_version }}-curl
|
||||||
|
- php{{ php_version }}-fpm
|
||||||
|
- php{{ php_version }}-gd
|
||||||
|
- php{{ php_version }}-ldap
|
||||||
|
- php{{ php_version }}-mbstring
|
||||||
|
- php{{ php_version }}-mysql
|
||||||
|
- php{{ php_version }}-opcache
|
||||||
|
- php{{ php_version }}-readline
|
||||||
|
- php{{ php_version }}-xml
|
||||||
|
- php{{ php_version }}-zip
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Install libapache2-mod-php
|
||||||
|
ansible.builtin.apt:
|
||||||
|
pkg:
|
||||||
|
- libapache2-mod-php{{ php_version }}
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Copy cli php.ini file
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: "files/php-cli-ini.j2"
|
||||||
|
dest: "/etc/php/{{ php_version }}/cli/php.ini"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0644"
|
||||||
|
notify: Reload apache2
|
||||||
|
|
||||||
|
- name: Setup PHP info page for debugging
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: "files/info.php.j2"
|
||||||
|
dest: "{{ document_root }}/{{ package }}/info.php"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0644"
|
||||||
|
notify: Reload apache2
|
7
roles/show_passwords/tasks/main.yml
Normal file
7
roles/show_passwords/tasks/main.yml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Print passwords
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg:
|
||||||
|
- "Mariadb Root Password is: {{ mariadb_root_password }}"
|
||||||
|
- "Mariadb {{ package }} Database Password is: {{ mariadb_database_password }}"
|
6
roles/sshd/handlers/main.yml
Normal file
6
roles/sshd/handlers/main.yml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Restart sshd
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: sshd
|
||||||
|
state: restarted
|
11
roles/sshd/tasks/main.yml
Normal file
11
roles/sshd/tasks/main.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Configure sshd for password auth
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: "/etc/ssh/sshd_config"
|
||||||
|
regex: "^(#)?{{ item.key }}"
|
||||||
|
line: "{{ item.key }} {{ item.value }}"
|
||||||
|
state: present
|
||||||
|
loop:
|
||||||
|
- {key: "PasswordAuthentication", value: "yes"}
|
||||||
|
notify: Restart sshd
|
86
roles/system/tasks/main.yml
Normal file
86
roles/system/tasks/main.yml
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Disable IPv6
|
||||||
|
ansible.posix.sysctl:
|
||||||
|
name: "{{ item }}"
|
||||||
|
value: 1
|
||||||
|
state: present
|
||||||
|
reload: true
|
||||||
|
with_items:
|
||||||
|
- net.ipv6.conf.all.disable_ipv6
|
||||||
|
- net.ipv6.conf.default.disable_ipv6
|
||||||
|
- net.ipv6.conf.lo.disable_ipv6
|
||||||
|
|
||||||
|
- name: Allow reading kernel messages for non-root users
|
||||||
|
ansible.posix.sysctl:
|
||||||
|
name: "{{ item }}"
|
||||||
|
value: 0
|
||||||
|
state: present
|
||||||
|
reload: true
|
||||||
|
with_items:
|
||||||
|
- kernel.dmesg_restrict
|
||||||
|
|
||||||
|
- name: Disable ufw (firewall)
|
||||||
|
ansible.builtin.apt:
|
||||||
|
name: ufw
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Disable apparmor
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: apparmor
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
- name: Create /data folder
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: /data
|
||||||
|
state: directory
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
- name: Wait 5 minutes for fstrim to finish
|
||||||
|
ansible.builtin.pause:
|
||||||
|
minutes: 5
|
||||||
|
when: not debugging
|
||||||
|
|
||||||
|
- name: Unmount mnt
|
||||||
|
ansible.posix.mount:
|
||||||
|
path: /mnt
|
||||||
|
state: unmounted
|
||||||
|
|
||||||
|
- name: Disable mount point mnt
|
||||||
|
ansible.posix.mount:
|
||||||
|
path: /mnt
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Create fstab entry for vdb
|
||||||
|
ansible.posix.mount:
|
||||||
|
path: /data
|
||||||
|
src: /dev/vdb
|
||||||
|
fstype: ext4
|
||||||
|
opts: defaults
|
||||||
|
state: present
|
||||||
|
when: not debugging
|
||||||
|
|
||||||
|
- name: Mount /data
|
||||||
|
ansible.posix.mount:
|
||||||
|
path: /data
|
||||||
|
src: /dev/vdb
|
||||||
|
fstype: ext4
|
||||||
|
opts: defaults
|
||||||
|
state: mounted
|
||||||
|
when: not debugging
|
||||||
|
|
||||||
|
- name: Update cache to find necessary utilities
|
||||||
|
ansible.builtin.apt:
|
||||||
|
update_cache: true
|
||||||
|
|
||||||
|
- name: Install necessary utilities
|
||||||
|
ansible.builtin.apt:
|
||||||
|
pkg:
|
||||||
|
- ca-certificates
|
||||||
|
- cron
|
||||||
|
- curl
|
||||||
|
- unzip
|
||||||
|
- zip
|
||||||
|
state: present
|
16
site.yml
Normal file
16
site.yml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Install NextCloud on a Debian 12 (Bookworm) cloud image.
|
||||||
|
hosts: servers
|
||||||
|
become: true
|
||||||
|
vars_files:
|
||||||
|
- vars/vars.yml
|
||||||
|
roles:
|
||||||
|
- system
|
||||||
|
- sshd
|
||||||
|
- generate_passwords
|
||||||
|
- apache2
|
||||||
|
- php
|
||||||
|
- mariadb
|
||||||
|
- nextcloud
|
||||||
|
- show_passwords
|
7
test_roles.sh
Executable file
7
test_roles.sh
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
export PATH=/bin:/usr/bin:/sbin:/usr/sbin
|
||||||
|
|
||||||
|
export ANSIBLE_HOST_KEY_CHECKING=False
|
||||||
|
|
||||||
|
ansible-playbook site.yml --user installer --ask-pass -i hosts
|
14
vars/vars.yml
Normal file
14
vars/vars.yml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
package: nextcloud
|
||||||
|
|
||||||
|
app_root: "{{ package }}"
|
||||||
|
debugging: true
|
||||||
|
document_root: /data/www/vhosts.d
|
||||||
|
http_host: "{{ ansible_hostname }}"
|
||||||
|
http_port: 80
|
||||||
|
https_port: 443
|
||||||
|
nextcloud_cached: false
|
||||||
|
php_version: 8.2
|
||||||
|
server_name: "{{ ansible_hostname }}"
|
||||||
|
server_addr: "{{ ansible_default_ipv4.address }}"
|
Loading…
Reference in New Issue
Block a user