https://sysahelper.gitbook.io/sysahelper/main/authomatization/main/nextcloud
Установим ansible:
apt-get update && apt-get install -y ansible sshpass
Создадим директорию для проекта:
mkdir ansible; cd ansible
Создадим инвентарный файл:
в формате «yaml»
в качестве хоста используется «localhost»
vim inventory
- содержимое инвентарного файла:
all:
hosts:
localhost:
Создадим директорию для переменных хоста:
mkdir host_vars
Определим необходимые переменные для хоста — «localhost»:
vim host_vars/localhost.yml
содержимое файла:
ansible_ssh_user: root # пользователь
ansible_ssh_pass: toor # пароль пользователя
ansible_python_interpreter: /usr/bin/python3 # корректный интерпретатор
Проверяем работоспособность ansible с localhost:
ansible -i inventory -m ping all

Создаём playbook-сценарий для установки Nextcloud:
vim playbook.yml
содержимое playbook-сценария:
---
- name: Install Nextcloud on ALT Server 10.1 (10.2)
hosts: localhost
become: true
vars:
mariadb_database: nextcloud
mariadb_username: nextcloud
mariadb_password: nextcloud
url_download_nextcloud: https://download.nextcloud.com/server/releases/latest.zip
dir_download_nextcloud: /tmp
path_project_nextcloud: /var/www/html/
virtualhost_servername: nextcloud.test.local
tasks:
- name: Install database MariaDB
apt_rpm:
name:
- mariadb-server
- python3-module-mysqlclient
state: present
update_cache: true
- name: Started and enabled mariadb-server
systemd:
name: mariadb
state: started
enabled: true
- name: "Creating a database {{ mariadb_database }} for Nextcloud"
mysql_db:
name: "{{ mariadb_database }}"
encoding: utf8
collation: utf8_unicode_ci
state: present
- name: "Creating a database user {{ mariadb_username }} for Nextcloud"
mysql_user:
name: "{{ mariadb_username }}"
password: "{{ mariadb_password }}"
priv: "{{ mariadb_database }}.*:ALL,GRANT"
host: localhost
state: present
- name: Install web-server Apache2 and modules
apt_rpm:
name:
- apache2
- apache2-mod_ssl
- apache2-mod_php8.2
- tzdata
state: present
- name: Install PHP8.2 and php modules
apt_rpm:
name:
- php8.2
- php8.2-pdo_mysql
- php8.2-curl
- php8.2-dom
- php8.2-ldap
- php8.2-exif
- php8.2-fileinfo
- php8.2-gd2
- php8.2-gmp
- php8.2-imagick
- php8.2-intl
- php8.2-libs
- php8.2-mbstring
- php8.2-memcached
- php8.2-opcache
- php8.2-openssl
- php8.2-pcntl
- php8.2-pdo
- php8.2-xmlreader
- php8.2-zip
- name: Enable the Apache2 module
apache2_module:
name: "{{ item }}"
state: present
with_items:
- dir
- env
- headers
- mime
- rewrite
- name: Started and enabled Apache2
systemd:
name: httpd2
state: started
enabled: true
- name: Download Nextcloud project
get_url:
url: "{{ url_download_nextcloud }}"
dest: "{{ dir_download_nextcloud }}"
- name: Unarchive a file project Nextcloud
unarchive:
src: "{{ dir_download_nextcloud }}/latest.zip"
dest: "{{ path_project_nextcloud }}"
- name: Create directory "data" for Nextcloud
file:
path: "{{ path_project_nextcloud }}/nextcloud/data"
state: directory
- name: Assigning rights to project Nextcloud
file:
path: "{{ path_project_nextcloud }}/nextcloud/"
recurse: yes
owner: root
- name: Assigning rights to project Nextcloud
file:
path: "{{ path_project_nextcloud }}/nextcloud/{{ item }}"
recurse: yes
owner: apache2
with_items:
- apps
- config
- data
- name: Setting up a web server to work with Nextcloud
copy:
dest: /etc/httpd2/conf/sites-available/nextcloud.conf
content: |
<VirtualHost *:80>
DocumentRoot {{ path_project_nextcloud }}/nextcloud/
ServerName {{ virtualhost_servername }}
<Directory {{ path_project_nextcloud }}/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
</VirtualHost>
- name: Adding a symbolic link
command:
cmd: ln -s /etc/httpd2/conf/sites-available/nextcloud.conf /etc/httpd2/conf/sites-enabled/
# file:
# src: /etc/httpd2/conf/sites-available/nextcloud.conf
# dest: /etc/httpd2/conf/sites-enabled/
# state: link
- name: Restarted Apache2
systemd:
name: httpd2
state: restarted
Устанавливаем необходимые коллекции для ansible:
ansible-galaxy collection install community.general
ansible-galaxy collection install community.mysql
Запускаем playbook-сценарий:
ansible-playbook -i inventory playbook.yml


Проверяем:



