---
description: Das nachfolgende Beispiel erweitert das Caddy-Beispiel mit PHP
---

# Beispiel Caddy PHP

{% code title="/srv/salt/caddy/php.sls" %}
```yaml
include:
  - .init

php8-fpm:
  pkg.installed:
    - pkgs:
    {% if grains.os_family == "Suse"%}
      - php8
      - php8-fpm
      - php8-cli
    {% elif grains.os_family == "RedHat"%}
      - php-fpm
    {% endif %}

{% if grains.os_family == "Suse"%}
php-fpm-conf:
  file.copy:
    - name: /etc/php8/fpm/php-fpm.conf
    - source: /etc/php8/fpm/php-fpm.conf.default

/etc/php8/fpm/php-fpm.d/www.conf:
  file.copy:
    - source: /etc/php8/fpm/php-fpm.d/www.conf.default
{% endif %}

php-fpm:
  service.running:
    - enable: true
    {% if grains.os_family == "Suse"%}
    - watch:
      - file: php-fpm-conf
    {% endif %}
    - require:
      - php8-fpm

#
# Change the existing config file.
#
extend:
  /etc/caddy/Caddyfile:
    file.managed:
      - contents: |
          :80 {
              root * /var/www/
              php_fastcgi 127.0.0.1:9000
              file_server
          }

/var/www/info.php:
  file.managed:
    - contents: <?php phpinfo(); ?>
    - user: caddy
    - group: caddy
```
{% endcode %}

😯 **Probleme:**&#x20;

1. PHP läuft auf den RedHat-Systemen nicht, weil per Standard ein Socket statt einem TCP Port verwendet wird.
2. Was passiert, wenn Sie diesen State auf ein Ubuntu oder Debian-System anwenden?

**🧩 Aufgaben**:&#x20;

1. Erweitern Sie den State mit einem If-Else-Block, sodass auf RedHat-Systemen die Datei `/etc/php-fpm.d/www.conf` geändert wird. Ersetzen Sie `listen = /run/php-fpm/www.sock` durch `listen = 127.0.0.1:9000` mit dem State-Modul [file.replace](https://docs.saltproject.io/en/latest/ref/states/all/salt.states.file.html#salt.states.file.replace).
2. Erweitern den State, indem Sie folgenden Check an den Anfang setzen. Der State bricht ab, wenn die nötigen Voraussetzungen nicht gegeben sind.&#x20;

```yaml
{% if grains.os_family not in ["Suse","RedHat"]%}
requirement-not-met:
  test.fail_without_changes:
    - comment: This state is only applicable on Suse and RedHat
    - failhard: True
{% endif %}
```

{% file src="https://3666581685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LFRZJPZX11pwB1staCp%2Fuploads%2FctJtzcY1opFEJm1ZC4xV%2Fphp.sls?alt=media&token=8a05396c-5bba-45dd-96a2-5f6beff8600a" %}

