Getting started

Database support

It is recommended that you install a database server. You can install one on the same host as volkszaehler or choose a different host:

[debops_service_mariadb_server]
hostname

In case you chose a different host, you will need to specify which of your database servers the volkszaehler instance should use by specifying the database server host as volkszaehler__database_server.

Webserver support

The following two webservers are supported by the role:

The role maintainer has chosen Nginx as webserver for his deployments. He added Apache support because he is very familiar with debops.apache (author). Note that integration testing is done with debops.nginx only, currently.

In case you chose Apache, you don’t need PHP FPM which debops.php might install by default. To ensure that FPM is not going to be installed, add the following to your inventory:

php__server_api_packages:
  - 'cli'

Example inventory

To manage volkszaehler on a given host or set of hosts, they need to be added to the [debops_service_volkszaehler_${webserver}] Ansible group in the inventory:

[debops_service_volkszaehler_apache]
hostname

[debops_service_mariadb_server]
hostname

[debops_service_volkszaehler_nginx]
hostname2

Example playbook

Ansible playbook that uses the debops-contrib.volkszaehler role together with debops.apache:

---

- name: Setup and manage volkszaehler with Apache as webserver
  hosts: [ 'debops_service_volkszaehler_apache' ]
  become: True

  environment: '{{ inventory__environment | d({})
                   | combine(inventory__group_environment | d({}))
                   | combine(inventory__host_environment  | d({})) }}'

  roles:

    - role: debops-contrib.volkszaehler/env
      tags: [ 'role::volkszaehler', 'role::volkszaehler:env', 'role::mariadb' ]

    - role: debops.apache/env
      tags: [ 'role::apache', 'role::apache:env' ]

    - role: debops.php/env
      tags: [ 'role::php', 'role::php:env','role::apt_preferences', 'role::logrotate' ]

    - role: debops.apt_preferences
      tags: [ 'role::apt_preferences' ]
      apt_preferences__dependent_list:
        - '{{ php__apt_preferences__dependent_list }}'

    - role: debops.ferm
      tags: [ 'role::ferm' ]
      ferm__dependent_rules:
        - '{{ apache__ferm__dependent_rules }}'

    - role: debops.mariadb
      tags: [ 'role::mariadb' ]
      mariadb__dependent_databases: '{{ volkszaehler__mariadb__dependent_databases }}'
      mariadb__dependent_users: '{{ volkszaehler__mariadb__dependent_users }}'
      when: (volkszaehler__database == 'mariadb')

    - role: debops.php
      tags: [ 'role::php' ]
      php__dependent_packages:
        - '{{ volkszaehler__php__dependent_packages }}'
      php__dependent_pools:
        - '{{ volkszaehler__php__dependent_pools }}'

    - role: debops.logrotate
      tags: [ 'role::logrotate' ]
      logrotate__dependent_config:
        - '{{ php__logrotate__dependent_config }}'

    - role: geerlingguy.composer
      tags: [ 'role::composer' ]

    - role: debops.apache
      tags: [ 'role::apache' ]
      apache__dependent_vhosts:
        - '{{ volkszaehler__apache__dependent_vhosts }}'

    - role: debops-contrib.volkszaehler
      tags: [ 'role::volkszaehler' ]

Ansible playbook that uses the debops-contrib.volkszaehler role together with debops.nginx:

---

- name: Setup and manage volkszaehler with Nginx as webserver
  hosts: [ 'debops_service_volkszaehler_nginx' ]
  become: True

  environment: '{{ inventory__environment | d({})
                   | combine(inventory__group_environment | d({}))
                   | combine(inventory__host_environment  | d({})) }}'

  roles:

    - role: debops-contrib.volkszaehler/env
      tags: [ 'role::volkszaehler', 'role::volkszaehler:env', 'role::mariadb' ]

    - role: debops.php/env
      tags: [ 'role::php', 'role::php:env','role::apt_preferences', 'role::logrotate' ]

    - role: debops.apt_preferences
      tags: [ 'role::apt_preferences' ]
      apt_preferences__dependent_list:
        - '{{ nginx__apt_preferences__dependent_list }}'
        - '{{ php__apt_preferences__dependent_list }}'

    - role: debops.ferm
      tags: [ 'role::ferm' ]
      ferm__dependent_rules:
        - '{{ nginx__ferm__dependent_rules }}'

    - role: debops.mariadb
      tags: [ 'role::mariadb' ]
      mariadb__dependent_databases: '{{ volkszaehler__mariadb__dependent_databases }}'
      mariadb__dependent_users: '{{ volkszaehler__mariadb__dependent_users }}'
      when: (volkszaehler__database == 'mariadb')

    - role: debops.php
      tags: [ 'role::php' ]
      php__dependent_packages:
        - '{{ volkszaehler__php__dependent_packages }}'
      php__dependent_pools:
        - '{{ volkszaehler__php__dependent_pools }}'

    - role: debops.logrotate
      tags: [ 'role::logrotate' ]
      logrotate__dependent_config:
        - '{{ php__logrotate__dependent_config }}'

    - role: geerlingguy.composer
      tags: [ 'role::composer' ]

    - role: debops.nginx
      tags: [ 'role::nginx' ]
      nginx__dependent_upstreams:
        - '{{ volkszaehler__nginx__dependent_upstreams }}'
      nginx__dependent_servers:
        - '{{ volkszaehler__nginx__dependent_servers }}'

    - role: debops-contrib.volkszaehler
      tags: [ 'role::volkszaehler' ]

These playbooks are shipped with this role under ./docs/playbooks/ from which you can symlink them to your playbook directory. In case you use multiple DebOps Contrib roles, consider using the DebOps Contrib playbooks.

Ansible tags

You can use Ansible --tags or --skip-tags parameters to limit what tasks are performed during Ansible run. This can be used after a host was first configured to speed up playbook execution, when you are sure that most of the configuration is already in the desired state.

Available role tags:

role::volkszaehler:env
Environment role tag, should be used in the playbook to execute a special environment role contained in the main role. The environment role prepares the environment for other dependency roles to work correctly.
role::volkszaehler
Main role tag, should be used in the playbook to execute all of the role tasks as well as role dependencies.
role::volkszaehler:pkgs
Tasks related to system package management like installing or removing packages.