nierdz.nextcloud

Estado de CI Rol de Ansible Calificación de Calidad de Ansible Rol de Ansible Licencia: GPL v3

Nextcloud

Este rol de ansible instala nextcloud de la manera de capistrano. Esto significa que la estructura de carpetas se ve así:

/var/wwww
└── nextcloud.local
    ├── current -> /var/www/nextcloud.local/releases/20.0.7
    │   └── nextcloud
    │       └── config
    │          └── config.php -> /var/www/shared/config.php
    ├── data
    │   ├── admin
    │   ├── appdata_somerandomshit
    │   ├── files_external
    │   ├── index.html
    │   └── nextcloud.log
    ├── releases
    │   ├── 20.0.5
    │   ├── 20.0.6
    │   └── 20.0.7
    └── shared
        └── config.php

Por ahora, este rol solo soporta MySQL como backend. Utiliza redis con la configuración predeterminada para cacheo local y distribuido, así como bloqueo de archivos transacional.

Requisitos

Nextcloud necesita PHP, un servidor web y un DBMS para funcionar. Para cumplir con estos requisitos, se recomienda encarecidamente usar estos 3 roles:

¿Por qué esos roles en particular? Porque están bien mantenidos y algunas variables de estos roles se utilizan en este, pero aún puedes usar otros roles.

En producción, también necesitarás un certificado TLS, que se puede obtener usando acme.sh.

Variables del Rol

nextcloud_version

Versión de nextcloud a instalar. Predeterminado: "29.0.1"

nextcloud_domain

Nombre de dominio a utilizar. Predeterminado: ""

nextcloud_php_user

Todos los archivos de nextcloud serán propiedad de este usuario. Normalmente, necesitas establecer este valor en www-data. Predeterminado: "{{ php_fpm_pool_user | default('www-data') }}"

nextcloud_php_version

Versión mayor de PHP a usar. Predeterminado: "{{ php_default_version_debian | default('8.2') }}"

nextcloud_php_bin_path

Ruta al binario de PHP. Predeterminado: /usr/bin/php

nextcloud_keep_releases

Cuánto tiempo deseas mantener viejas versiones. Predeterminado: "60d"

nextcloud_admin_user

Nombre de usuario de administrador predeterminado creado durante la instalación. Una vez finalizada la instalación, puedes crear otro usuario con rol de administrador y eliminar este. Predeterminado: ""

nextcloud_admin_password

Contraseña de nextcloud_admin_user. Se recomienda enérgicamente cifrar esto con ansible-vault Predeterminado: ""

nextcloud_config_template

Plantilla Jinja2 para usar en el config.php de Nextcloud. Para usar una plantilla de configuración personalizada, debes:

  • crear un directorio templates/ en el mismo nivel que tu playbook
  • crear un archivo templates/myconfig.php.j2 (solo elige un nombre diferente del de la plantilla predeterminada)
  • en tu playbook establecer la variable nextcloud_config_template: myconfig.php.j2 Predeterminado: "config.php.j2"

nextcloud_instanceid

ID de instancia único. Genera uno al azar y mantenlo mientras tu instalación esté activa. Predeterminado: ""

nextcloud_passwordsalt

La sal utilizada para hash todas las contraseñas. Se recomienda enérgicamente cifrar esto con ansible-vault Predeterminado: ""

nextcloud_secret

Secreto utilizado por nextcloud para varios fines, por ejemplo, para cifrar datos. Si pierdes esta cadena, habrá corrupción de datos. Se recomienda enérgicamente cifrar esto con ansible-vault Predeterminado: ""

nextcloud_dbhost

Host para usar para conectar la base de datos. Predeterminado: "localhost"

nextcloud_dbname

El nombre de la base de datos de nextcloud, que se establece durante la instalación. Predeterminado: "nextcloud"

nextcloud_dbuser

El usuario que nextcloud usa para leer y escribir en la base de datos. Predeterminado: "nextcloud"

nextcloud_dbpassword

Contraseña de nextcloud_dbuser. Se recomienda enérgicamente cifrar esto con ansible-vault Predeterminado: ""

nextcloud_deploy_to

Carpeta principal de tu instalación de nextcloud. Predeterminado: "/var/www/{{ nextcloud_domain }}"

nextcloud_datadirectory

Dónde se almacenan los archivos de usuario. Predeterminado: "{{ nextcloud_deploy_to }}/data"

nextcloud_php_packages

Paquetes adicionales de PHP necesarios para nextcloud. Predeterminado:

- php-pear
- php{{ nextcloud_php_version }}-bcmath
- php{{ nextcloud_php_version }}-bz2
- php{{ nextcloud_php_version }}-curl
- php{{ nextcloud_php_version }}-gd
- php{{ nextcloud_php_version }}-gmp
- php{{ nextcloud_php_version }}-imagick
- php{{ nextcloud_php_version }}-intl
- php{{ nextcloud_php_version }}-json
- php{{ nextcloud_php_version }}-mbstring
- php{{ nextcloud_php_version }}-mysql
- php{{ nextcloud_php_version }}-redis
- php{{ nextcloud_php_version }}-xml
- php{{ nextcloud_php_version }}-zip

nextcloud_packages

Paquetes adicionales necesarios para nextcloud. Predeterminado:

- redis-server
- redis-tools
- unzip

nextcloud_apps

Lista de aplicaciones para instalar y habilitar. Predeterminado: []

nextcloud_no_log

Ocultar datos sensibles durante el despliegue. Predeterminado: true

Ejemplo de trabajo

Aquí está lo que deberías tener en tu playbook.yml:

- name: Configurar servidores nextcloud
  become: true
  hosts: nextcloud
  vars_files:
    - vault_vars/nextcloud.yml
  roles:
    - {role: acme_sh, tags: [acme_sh]} (usa lo que quieras para obtener certificados TLS)
    - {role: nginx, tags: ['nginx']}
    - {role: mysql, tags: ['mysql']}
    - {role: php, tags: ['php']}
    - {role: percona, tags: ['percona']}
    - {role: nextcloud, tags: ['nextcloud']}
  pre_tasks:
    - name: Instalar clave de sury
      apt_key:
        url: "https://packages.sury.org/php/apt.gpg"
        state: present
    - name: Agregar repositorios de sury
      apt_repository:
        repo: "deb https://packages.sury.org/php/ {{ ansible_distribution_release }} main"
        state: present
        update_cache: true
        filename: sury
    - name: Copiar archivos específicos de configuración de nginx
      copy:
        src: "{{ item }}"
        dest: /etc/nginx/
        owner: root
        mode: 0644
      with_fileglob:
        - nginx/*.conf
    - name: Copiar /etc/nginx/dh4096.pem
      copy:
        src: nginx/dh4096.pem
        dest: /etc/nginx/dh4096.pem
        owner: www-data
        mode: 0400

Aquí están tus variables cifradas dentro de vault_vars/nextcloud.yml:

mysql_root_password_vault: vaultmeplease
nextcloud_dbpassword_vault: vaultmeplease
nextcloud_passwordsalt_vault: vaultmeplease
nextcloud_secret_vault: vaultmeplease
nextcloud_instanceid_vault: vaultmeplease
nextcloud_admin_user_vault: admin
nextcloud_admin_password_vault: vaultmeplease

Y tus variables de grupo en group_vars/nextcloud.yml:

# Nextcloud
nextcloud_domain: "tudominio.com"
nextcloud_admin_user: "{{ nextcloud_admin_user_vault }}"
nextcloud_admin_password: "{{ nextcloud_admin_password_vault }}"
nextcloud_instanceid: "{{ nextcloud_instanceid_vault }}"
nextcloud_passwordsalt: "{{ nextcloud_passwordsalt_vault }}"
nextcloud_secret: "{{ nextcloud_secret_vault }}"
nextcloud_dbpassword: "{{ nextcloud_dbpassword_vault }}"
nextcloud_apps: [calendar]

# MySQL
mysql_root_password: "{{ mysql_root_password_vault }}"
mysql_bind_address: 127.0.0.1
mysql_packages:
  - mariadb-client
  - mariadb-server
  - python-mysqldb
mysql_databases:
  - name: nextcloud
    encoding: utf8mb4
    collation: utf8mb4_general_ci
mysql_users:
  - name: nextcloud
    host: "localhost"
    password: "{{ nextcloud_dbpassword }}"
    priv: "nextcloud.*:ALL"
    state: present

# Nginx
nginx_remove_default_vhost: true
nginx_service_enabled: true
nginx_service_state: started
nginx_listen_ipv6: false
nginx_vhosts:
  - listen: {{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:443 ssl http2 default_server
    server_name: "{{ nextcloud_domain }}"
    state: "present"
    root: "/var/www/{{ nextcloud_domain }}/current/nextcloud"
    index: index.php
    extra_parameters: |
      add_header Referrer-Policy "no-referrer" always;
      add_header X-Content-Type-Options "nosniff" always;
      add_header X-Download-Options "noopen" always;
      add_header X-Frame-Options "SAMEORIGIN" always;
      add_header X-Permitted-Cross-Domain-Policies "none" always;
      add_header X-Robots-Tag "none" always;
      add_header X-XSS-Protection "1; mode=block" always;

      ssl_certificate /root/.acme.sh/{{ nextcloud_domain }}/fullchain.cer;
      ssl_certificate_key /root/.acme.sh/{{ nextcloud_domain }}/{{ nextcloud_domain }}.key;
      include /etc/nginx/generic.conf;
      include /etc/nginx/gzip.conf;
      include /etc/nginx/security.conf;
      include /etc/nginx/ssl.conf;

      location = /.well-known/carddav {
        return 301 $scheme://$host/remote.php/dav;
      }

      location = /.well-known/caldav {
        return 301 $scheme://$host/remote.php/dav;
      }

      client_max_body_size 512M;
      fastcgi_buffers 64 4K;

      location / {
        rewrite ^ /index.php;
      }

      location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
          deny all;
      }
      location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
          deny all;
      }

      location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
        fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
        set $path_info $fastcgi_path_info;
        try_files $fastcgi_script_name =404;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param HTTPS on;
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
      }

      location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
        try_files $uri/ =404;
        index index.php;
      }

      location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
        try_files $uri /index.php$request_uri;
        add_header Cache-Control "public, max-age=15778463";
        add_header Referrer-Policy "no-referrer" always;
        add_header X-Content-Type-Options "nosniff" always;
        add_header X-Download-Options "noopen" always;
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-Permitted-Cross-Domain-Policies "none" always;
        add_header X-Robots-Tag "none" always;
        add_header X-XSS-Protection "1; mode=block" always;
        access_log off;
      }

      location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
        try_files $uri /index.php$request_uri;
        access_log off;
      }

# PHP
php_default_version_debian: "8.2"
php_packages:
  - php8.2-cli
  - php8.2-fpm
php_install_recommends: false
php_enable_webserver: false
php_enable_php_fpm: true
php_enable_apc: false
php_memory_limit: "512M"
php_upload_max_filesize: "512M"
php_post_max_size: "512M"
php_date_timezone: "Europe/Paris"
php_opcache_zend_extension: "opcache.so"
php_opcache_enable: "1"
php_opcache_enable_cli: "0"
php_opcache_memory_consumption: "128"
php_opcache_interned_strings_buffer: "16"
php_opcache_max_accelerated_files: "10000"
php_opcache_max_wasted_percentage: "5"
php_opcache_validate_timestamps: "0"
php_opcache_revalidate_path: "0"
php_opcache_revalidate_freq: "1"
php_opcache_max_file_size: "0"

Documentación para desarrolladores

documentación de desarrollo

Licencia

GPLv3

Acerca del proyecto

Ansible role to install nextcloud

Instalar
ansible-galaxy install nierdz.nextcloud
Licencia
gpl-3.0
Descargas
1.4k
Propietario