Bereitstellen einer grundlegenden PHP-Anwendung mit Ansible unter Ubuntu 14.04

Einführung

Dieses Tutorial behandelt den Prozess der Bereitstellung einer grundlegenden PHP-Anwendung mit Ansible. Das Ziel am Ende dieses Tutorials ist es, dass Ihr neuer Webserver eine grundlegende PHP-Anwendung ohne eine einzige SSH-Verbindung oder einen manuellen Befehl auf dem Ziel-Droplet bedient.

Wir werden das Laravel-Framework als Beispiel für eine PHP-Anwendung verwenden, aber diese Anweisungen können leicht geändert werden, um andere Frameworks und Anwendungen zu unterstützen, wenn Sie bereits ein eigenes haben.

Voraussetzungen

In diesem Tutorial werden wir Ansible verwenden, um Nginx, PHP und andere Dienste auf einem Ubuntu 14.04-Droplet zu installieren und zu konfigurieren. Dieses Tutorial baut auf grundlegenden Ansible-Kenntnissen auf. Wenn Sie also mit Ansible noch nicht vertraut sind, können Sie es unter https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-ansible-on-an- nachlesen. ubuntu-12-04-vps [dieses grundlegende Ansible-Tutorial] zuerst.

Um diesem Tutorial zu folgen, benötigen Sie:

  • Ein Ubuntu 14.04-Droplet von beliebiger Größe, mit dem wir unsere PHP-Anwendung konfigurieren und bereitstellen. Die IP-Adresse dieses Systems wird im gesamten Lernprogramm als "++" bezeichnet.

  • Ein Ubuntu 14.04 Droplet, das für Ansible verwendet wird. Dies ist das Droplet, bei dem Sie für die gesamte Dauer dieses Lernprogramms angemeldet sind.

  • Sudo Nicht-Root-Benutzer für beide Droplets konfiguriert.

  • SSH-Schlüssel für das Ansible Droplet zur Autorisierung der Anmeldung am PHP-Bereitstellungs-Droplet, die Sie unter https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys—​2 einrichten können [dieses Tutorial] auf Ihrem Ansible Droplet.

Schritt 1 - Ansible installieren

Der erste Schritt ist die Installation von Ansible. Dies ist einfach zu bewerkstelligen, indem Sie das PPA (Personal Package Archive) und das Ansible-Paket mit + apt + installieren.

Fügen Sie zuerst die PPA mit dem Befehl + apt-add-repository + hinzu.

sudo apt-add-repository ppa:ansible/ansible

Sobald dies abgeschlossen ist, aktualisieren Sie den "+ apt +" - Cache.

sudo apt-get update

Zum Schluss installieren Sie Ansible.

sudo apt-get install ansible

Sobald Ansible installiert ist, erstellen wir ein neues Verzeichnis und richten eine Grundkonfiguration ein. Standardmäßig verwendet Ansible eine Hosts-Datei unter "+ / etc / ansible / hosts +", die alle verwalteten Server enthält. Während diese Datei für einige Anwendungsfälle in Ordnung ist, ist sie global, was wir hier nicht wollen.

In diesem Tutorial erstellen wir eine lokale Hosts-Datei und verwenden diese stattdessen. Wir können dies tun, indem wir eine neue Ansible-Konfigurationsdatei in unserem Arbeitsverzeichnis erstellen, mit der wir Ansible anweisen können, nach einer Hostdatei in demselben Verzeichnis zu suchen.

Erstellen Sie ein neues Verzeichnis (das wir für den Rest dieses Tutorials verwenden werden).

mkdir ~/ansible-php

In das neue Verzeichnis verschieben.

cd ~/ansible-php/

Erstellen Sie eine neue Datei mit dem Namen "+ ansible.cfg " und öffnen Sie sie zur Bearbeitung mit " nano +" oder Ihrem bevorzugten Texteditor.

nano ansible.cfg

Fügen Sie in der Konfigurationsoption "+ hostfile " den Wert " hosts " in der Gruppe " [Defaults] " hinzu, indem Sie Folgendes in die Datei " ansible.cfg +" kopieren.

ansible.cfg

[defaults]
hostfile = hosts

Speichern und schließen Sie die Datei "+ ansible.cfg ". Als nächstes erstellen wir die Datei " hosts +", die die IP-Adresse des PHP-Droplets enthält, in dem wir unsere Anwendung bereitstellen werden.

nano hosts

Kopieren Sie das Folgende, um es in einen Abschnitt für "+ php +" einzufügen. Ersetzen Sie dabei "" durch Ihre Server-IP-Adresse und "" durch den sudo-Benutzer ohne Rootberechtigung, den Sie in den Voraussetzungen Ihres PHP-Droplets erstellt haben.

Gastgeber

[php]
ansible_ssh_user=

Speichern und schließen Sie die Datei + hosts +. Führen Sie eine einfache Überprüfung durch, um sicherzustellen, dass Ansible die erwartete Verbindung zum Host herstellen kann, indem Sie das "+ ping " - Modul in der neuen " php +" - Gruppe aufrufen.

ansible php -m ping

Möglicherweise erhalten Sie eine SSH-Hostauthentifizierungsprüfung, je nachdem, ob Sie sich zuvor bei diesem Host angemeldet haben. Der Ping sollte mit einer erfolgreichen Antwort zurückkommen, die ungefähr so ​​aussieht:

Ausgabe

111.111.111.111 | success >> {
   "changed": false,
   "ping": "pong"
}

Ansible ist jetzt installiert und konfiguriert. Wir können mit dem Einrichten unseres Webservers fortfahren.

Schritt 2 - Erforderliche Pakete installieren

In diesem Schritt installieren wir einige erforderliche Systempakete mit Ansible und "+ apt ". Insbesondere werden wir " git ", " nginx ", " sqlite3 ", " mcrypt " und ein paar " php5 - * +" - Pakete installieren.

Bevor wir das "+ apt " - Modul hinzufügen, um die gewünschten Pakete zu installieren, müssen wir ein grundlegendes Playbook erstellen. Wir werden auf diesem Playbook aufbauen, während wir das Tutorial durcharbeiten. Erstelle ein neues Playbook mit dem Namen " php.yml +".

nano php.yml

Fügen Sie die folgende Konfiguration ein. Die ersten beiden Zeilen geben die Hosts-Gruppe an, die wir verwenden möchten (+ php +) und stellen sicher, dass standardmäßig Befehle mit + sudo + ausgeführt werden. Der Rest fügt in einem Modul die Pakete hinzu, die wir benötigen. Sie können dies für Ihre eigene Anwendung anpassen oder die folgende Konfiguration verwenden, wenn Sie die Laravel-Beispielanwendung befolgen.

---
- hosts: php
 sudo: yes

 tasks:

 - name: install packages
   apt: name={{ item }} update_cache=yes state=latest
   with_items:
     - git
     - mcrypt
     - nginx
     - php5-cli
     - php5-curl
     - php5-fpm
     - php5-intl
     - php5-json
     - php5-mcrypt
     - php5-sqlite
     - sqlite3

Speichern Sie die Datei + php.yml +. Führen Sie abschließend "+ ansible-playbook " aus, um die Pakete auf dem Droplet zu installieren. Vergessen Sie nicht, die Option " - ask-sudo-pass +" zu verwenden, wenn Ihr sudo-Benutzer auf Ihrem PHP-Droplet ein Passwort benötigt.

ansible-playbook php.yml --ask-sudo-pass

Schritt 3 - Ändern der Systemkonfigurationsdateien

In diesem Abschnitt werden wir einige der Systemkonfigurationsdateien auf dem PHP-Droplet ändern. Die wichtigste zu ändernde Konfigurationsoption (abgesehen von Nginx-Dateien, die in einem späteren Schritt behandelt werden) ist die Option "+ cgi.fix_pathinfo " in " php5-fpm +", da der Standardwert ein Sicherheitsrisiko darstellt.

Wir erklären zunächst alle Abschnitte, die wir dieser Datei hinzufügen werden, und fügen dann die gesamte Datei "+ php.yml +" hinzu, damit Sie sie kopieren und einfügen können.

Mit dem lineinfile-Modul kann sichergestellt werden, dass der Konfigurationswert in der Datei genau so ist, wie wir es erwarten. Dies kann mit einer generischen regular expression erfolgen, sodass Ansible die meisten Formen verstehen kann, in denen sich der Parameter wahrscheinlich befindet. Wir müssen auch + php5-fpm + und + nginx + neu starten, um sicherzustellen, dass die Änderung wirksam wird. Daher müssen wir in einem neuen Abschnitt + handlers + auch zwei Handler hinzufügen. Handler sind dafür perfekt geeignet, da sie nur dann ausgelöst werden, wenn sich die Aufgabe ändert. Sie werden auch am Ende des Playbooks ausgeführt, sodass mehrere Tasks denselben Handler aufrufen können und dieser nur einmal ausgeführt wird.

Der obige Abschnitt sieht folgendermaßen aus:

 - name: ensure php5-fpm cgi.fix_pathinfo=0
   lineinfile: dest=/etc/php5/fpm/php.ini regexp='^(.*)cgi.fix_pathinfo=' line=cgi.fix_pathinfo=0
   notify:
     - restart php5-fpm
     - restart nginx

 handlers:
   - name: restart php5-fpm
     service: name=php5-fpm state=restarted

   - name: restart nginx
     service: name=nginx state=restarted

Hinweis: Ansible Version 1.9.1 Fehler

Als nächstes müssen wir auch sicherstellen, dass das + php5-mcrypt + Modul aktiviert ist. Führen Sie dazu das Skript "+ php5enmod " mit der Shell-Task aus und überprüfen Sie, ob sich die Datei " 20-mcrypt.ini +" an der richtigen Stelle befindet, wenn sie aktiviert ist. Beachten Sie, dass wir Ansible mitteilen, dass der Task eine bestimmte Datei erstellt. Wenn diese Datei vorhanden ist, wird die Aufgabe nicht ausgeführt.

 - name: enable php5 mcrypt module
   shell: php5enmod mcrypt
   args:
     creates: /etc/php5/cli/conf.d/20-mcrypt.ini

Öffnen Sie nun + php.yml + zum erneuten Bearbeiten.

nano php.yml

Fügen Sie die obigen Tasks und Handler hinzu, damit die Datei mit der folgenden übereinstimmt:

---
- hosts: php
 sudo: yes

 tasks:

 - name: install packages
   apt: name={{ item }} update_cache=yes state=latest
   with_items:
     - git
     - mcrypt
     - nginx
     - php5-cli
     - php5-curl
     - php5-fpm
     - php5-intl
     - php5-json
     - php5-mcrypt
     - php5-sqlite
     - sqlite3

 - name: ensure php5-fpm cgi.fix_pathinfo=0
   lineinfile: dest=/etc/php5/fpm/php.ini regexp='^(.*)cgi.fix_pathinfo=' line=cgi.fix_pathinfo=0
   notify:
     - restart php5-fpm
     - restart nginx

 - name: enable php5 mcrypt module
   shell: php5enmod mcrypt
   args:
     creates: /etc/php5/cli/conf.d/20-mcrypt.ini

 handlers:
   - name: restart php5-fpm
     service: name=php5-fpm state=restarted

   - name: restart nginx
     service: name=nginx state=restarted

Führen Sie zum Schluss das Playbook aus.

ansible-playbook php.yml --ask-sudo-pass

Auf dem Droplet sind nun alle erforderlichen Pakete installiert und die Grundkonfiguration ist eingerichtet und einsatzbereit.

Schritt 4 - Klonen des Git-Repository

In diesem Abschnitt klonen wir das Laravel-Framework-Repository mit Git in Ihr Droplet. Wie in Schritt 3 erklären wir alle Abschnitte, die wir dem Playbook hinzufügen werden, und fügen dann die gesamte "+ php.yml +" - Datei hinzu, damit Sie sie kopieren und einfügen können.

Bevor wir unser Git-Repository klonen, müssen wir sicherstellen, dass + / var / www + existiert. Wir können dies tun, indem wir eine Aufgabe mit dem Dateimodul erstellen.

- name: create /var/www/ directory
 file: dest=/var/www/ state=directory owner=www-data group=www-data mode=0700

Wie oben erwähnt, müssen wir das Git-Modul verwenden, um das Repository auf unser Droplet zu klonen. Der Vorgang ist einfach, da für einen Befehl + git clone + normalerweise nur das Quell-Repository erforderlich ist. In diesem Fall definieren wir auch das Ziel und teilen Ansible mit, das Repository nicht zu aktualisieren, wenn es bereits vorhanden ist, indem wir "+ update = no " setzen. Da wir Laravel verwenden, verwenden wir die Git-Repository-URL " https: // github.com / laravel / laravel.git +".

Wir müssen die Task jedoch als Benutzer "+ www-data" ausführen, um sicherzustellen, dass die Berechtigungen korrekt sind. Dazu können wir Ansible anweisen, den Befehl als bestimmten Benutzer mit + sudo + auszuführen. Die letzte Aufgabe sieht folgendermaßen aus:

- name: Clone git repository
 git: >
   dest=/var/www/laravel
   repo=https://github.com/laravel/laravel.git
   update=no
 sudo: yes
 sudo_user: www-data
  • Hinweis *: Bei SSH-basierten Repositorys können Sie "+ accept_hostkey = yes +" hinzufügen, um zu verhindern, dass die SSH-Host-Überprüfung die Aufgabe blockiert.

Öffnen Sie wie zuvor die Datei "+ php.yml +" zum Bearbeiten.

nano php.yml

Fügen Sie die obigen Aufgaben zum Playbook hinzu. Das Ende der Datei sollte mit folgendem übereinstimmen:

...

 - name: enable php5 mcrypt module
   shell: php5enmod mcrypt
   args:
     creates: /etc/php5/cli/conf.d/20-mcrypt.ini

 - name: create /var/www/ directory
   file: dest=/var/www/ state=directory owner=www-data group=www-data mode=0700

 - name: Clone git repository
   git: >
     dest=/var/www/laravel
     repo=https://github.com/laravel/laravel.git
     update=no
   sudo: yes
   sudo_user: www-data

 handlers:
   - name: restart php5-fpm
     service: name=php5-fpm state=restarted

   - name: restart nginx
     service: name=nginx state=restarted

Speichern und schließen Sie das Playbook und führen Sie es aus.

ansible-playbook php.yml --ask-sudo-pass

Schritt 5 - Erstellen einer Anwendung mit Composer

In diesem Schritt werden wir Composer verwenden, um die PHP-Anwendung und ihre Abhängigkeiten zu installieren.

Composer verfügt über den Befehl "+ create-project ", mit dem alle erforderlichen Abhängigkeiten installiert werden. Anschließend werden die Projekterstellungsschritte ausgeführt, die im Abschnitt " post-create-project-cmd " der Datei " composer.json +" definiert sind. Dies ist der beste Weg, um sicherzustellen, dass die Anwendung für die erste Verwendung korrekt eingerichtet ist.

Wir können die folgende Ansible-Task verwenden, um Composer global als "+ / usr / local / bin / composer +" herunterzuladen und zu installieren. Jeder, der das Droplet verwendet, kann darauf zugreifen, auch Ansible.

- name: install composer
 shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
 args:
   creates: /usr/local/bin/composer

Wenn Composer installiert ist, können wir ein Composer-Modul verwenden. In unserem Fall möchten wir Composer mitteilen, wo sich unser Projekt befindet (mit dem Parameter + working_dir +) und den Befehl + create-project + ausführen. Wir müssen auch den Parameter "+ Optimize_autoloader = no " hinzufügen, da dieses Flag vom Befehl " create-project " nicht unterstützt wird. Wie der Befehl " git" möchten wir auch diesen Befehl als Benutzer "+ www-data" ausführen, um sicherzustellen, dass die Berechtigungen gültig sind. Alles zusammen ergibt diese Aufgabe:

- name: composer create-project
 composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
 sudo: yes
 sudo_user: www-data
  • Hinweis *: + create-project + - Task kann bei einem neuen Droplet eine erhebliche Zeit in Anspruch nehmen, da Composer einen leeren Cache hat und alles Neue herunterladen muss.

Öffnen Sie nun die Datei "+ php.yml +" zum Bearbeiten.

nano php.yml

Fügen Sie die obigen Aufgaben am Ende des Abschnitts "+ tasks " über " handlers +" hinzu, sodass das Ende des Playbooks mit dem folgenden übereinstimmt:

...

 - name: Clone git repository
   git: >
     dest=/var/www/laravel
     repo=https://github.com/laravel/laravel.git
     update=no
   sudo: yes
   sudo_user: www-data

 - name: install composer
   shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
   args:
     creates: /usr/local/bin/composer

 - name: composer create-project
   composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
   sudo: yes
   sudo_user: www-data

 handlers:
   - name: restart php5-fpm
     service: name=php5-fpm state=restarted

   - name: restart nginx
     service: name=nginx state=restarted

Führen Sie zum Schluss das Playbook aus.

ansible-playbook php.yml --ask-sudo-pass

Was würde passieren, wenn wir Ansible jetzt erneut ausführen würden? Das "+ composer create-project " würde erneut ausgeführt, und im Fall von Laravel bedeutet dies ein neues " APP_KEY ". Wir möchten, dass diese Aufgabe nur nach einem neuen Klon ausgeführt wird. Wir können sicherstellen, dass es nur einmal ausgeführt wird, indem wir eine Variable mit den Ergebnissen der Aufgabe " git clone " registrieren und diese Ergebnisse dann in der Aufgabe " composer create-project " überprüfen. Wenn die Aufgabe " git clone " _Changed_ war, führen wir " composer create-project +" aus. Wenn nicht, wird sie übersprungen.

  • Hinweis: * In einigen Versionen des Ansible-Moduls + composer + scheint ein Fehler aufgetreten zu sein, und es wird möglicherweise OK anstelle von Changed ausgegeben, da ignoriert wird, dass Skripts ausgeführt wurden, obwohl keine Abhängigkeiten installiert wurden.

Öffnen Sie die Datei + php.yml + zum Bearbeiten.

nano php.yml

Finden Sie die Aufgabe "+ git clone ". Fügen Sie die Option " register " hinzu, um die Ergebnisse der Aufgabe in der geklonten Variablen "" zu speichern:

- name: Clone git repository
 git: >
   dest=/var/www/laravel
   repo=https://github.com/laravel/laravel.git
   update=no
 sudo: yes
 sudo_user: www-data

Suchen Sie als nächstes die Aufgabe + composer create-project. Fügen Sie die Option + when + hinzu, um die Variable + cloned + zu überprüfen, um festzustellen, ob sie geändert wurde oder nicht.

- name: composer create-project
 composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
 sudo: yes
 sudo_user: www-data

Speichern Sie das Playbook und führen Sie es aus:

ansible-playbook php.yml --ask-sudo-pass

Jetzt stoppt Composer bei jeder Ausführung die Änderung von + APP_KEY +.

Schritt 6 - Aktualisieren von Umgebungsvariablen

In diesem Schritt aktualisieren wir die Umgebungsvariablen für unsere Anwendung.

Laravel wird mit einer Standard + .env + Datei ausgeliefert, welche die + APP_ENV + auf + local + und + APP_DEBUG + auf + true + setzt. Wir wollen sie gegen "+ production" und "+ false" tauschen. Dies kann einfach mit dem + lineinfile + Modul mit den folgenden Aufgaben erledigt werden.

- name: set APP_DEBUG=false
 lineinfile: dest=/var/www/laravel/.env regexp='^APP_DEBUG=' line=APP_DEBUG=false

- name: set APP_ENV=production
 lineinfile: dest=/var/www/laravel/.env regexp='^APP_ENV=' line=APP_ENV=production

Öffnen Sie die Datei + php.yml + zum Bearbeiten.

nano php.yml

Fügen Sie diese Aufgabe dem Playbook hinzu. Das Ende der Datei sollte mit folgendem übereinstimmen:

...

 - name: composer create-project
   composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
   sudo: yes
   sudo_user: www-data
   when: cloned|changed

 - name: set APP_DEBUG=false
   lineinfile: dest=/var/www/laravel/.env regexp='^APP_DEBUG=' line=APP_DEBUG=false

 - name: set APP_ENV=production
   lineinfile: dest=/var/www/laravel/.env regexp='^APP_ENV=' line=APP_ENV=production

 handlers:
   - name: restart php5-fpm
     service: name=php5-fpm state=restarted

   - name: restart nginx
     service: name=nginx state=restarted

Speichern Sie das Playbook und führen Sie es aus:

ansible-playbook php.yml --ask-sudo-pass

Das "+ lineinfile +" - Modul ist sehr nützlich, um eine Textdatei schnell zu optimieren und sicherzustellen, dass Umgebungsvariablen wie diese richtig eingestellt sind.

Schritt 7 - Konfigurieren von Nginx

In diesem Abschnitt konfigurieren wir ein Nginx für die PHP-Anwendung.

Wenn Sie Ihr Droplet jetzt in Ihrem Webbrowser besuchen (d. H. + http: /// +), sehen Sie die Nginx-Standardseite anstelle der Laravel-Seite für neue Projekte. Dies liegt daran, dass wir unseren Nginx-Webserver weiterhin so konfigurieren müssen, dass er die Anwendung aus dem Verzeichnis "+ / var / www / laravel / public " bedient. Dazu müssen wir unsere Nginx-Standardkonfiguration mit diesem Verzeichnis aktualisieren und Unterstützung für ` php-fpm +` hinzufügen, damit PHP-Skripte verarbeitet werden können.

Erstellen Sie eine neue Datei mit dem Namen "+ nginx.conf +":

nano nginx.conf

Speichern Sie diesen Serverblock in dieser Datei. Sie finden Schritt 4 unter https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04#step-four -% E2% 80% 94-configure-nginx-to-use-our-php-processor [dieses Tutorial] für weitere Details zu dieser Nginx-Konfiguration; Die folgenden Änderungen geben an, wo sich das öffentliche Laravel-Verzeichnis befindet, und stellen sicher, dass Nginx den in der Datei "+ hosts " definierten Hostnamen als " server_name " mit der Variablen " inventory_hostname +" verwendet.

nginx.conf

server {
   listen 80 default_server;
   listen [::]:80 default_server ipv6only=on;

   root /var/www/laravel/public;
   index index.php index.html index.htm;

   server_name {{ inventory_hostname }};

   location / {
       try_files $uri $uri/ =404;
   }

   error_page 404 /404.html;
   error_page 500 502 503 504 /50x.html;
   location = /50x.html {
       root /var/www/laravel/public;
   }

   location ~ \.php$ {
       try_files $uri =404;
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_pass unix:/var/run/php5-fpm.sock;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
   }
}

Speichern und schließen Sie die Datei + nginx.conf.

Jetzt können wir das Vorlagenmodul verwenden, um unsere neue Konfigurationsdatei zu übertragen. Das + template + Modul mag dem + copy + Modul sehr ähnlich aussehen und klingen, aber es gibt einen großen Unterschied. + copy + kopiert eine oder mehrere Dateien über * ohne Änderungen *, während + template + eine einzelne Datei kopiert und alle Variablen in der Datei auflöst. Da wir in unserer Konfigurationsdatei "+ {{inventory_hostname}} " verwendet haben, verwenden wir das " template " - Modul, damit es in die IP-Adresse aufgelöst wird, die wir in der " hosts +" - Datei verwendet haben. Auf diese Weise müssen wir die von Ansible verwendeten Konfigurationsdateien nicht hart codieren.

Wie beim Schreiben von Aufgaben üblich, müssen wir jedoch berücksichtigen, was auf dem Droplet passieren wird. Da wir die Nginx-Konfiguration ändern, müssen wir Nginx und + php-fpm + neu starten. Dies geschieht mit den Optionen + notify +.

- name: Configure nginx
 template: src=nginx.conf dest=/etc/nginx/sites-available/default
 notify:
   - restart php5-fpm
   - restart nginx

Öffnen Sie Ihre + php.yml + Datei:

nano php.yml

Fügen Sie diese Nginx-Aufgabe am Ende des Aufgabenbereichs hinzu. Die gesamte + php.yml + Datei sollte nun so aussehen:

php.yml

---
- hosts: php
 sudo: yes

 tasks:

 - name: install packages
   apt: name={{ item }} update_cache=yes state=latest
   with_items:
     - git
     - mcrypt
     - nginx
     - php5-cli
     - php5-curl
     - php5-fpm
     - php5-intl
     - php5-json
     - php5-mcrypt
     - php5-sqlite
     - sqlite3

 - name: ensure php5-fpm cgi.fix_pathinfo=0
   lineinfile: dest=/etc/php5/fpm/php.ini regexp='^(.*)cgi.fix_pathinfo=' line=cgi.fix_pathinfo=0
   notify:
     - restart php5-fpm
     - restart nginx

 - name: enable php5 mcrypt module
   shell: php5enmod mcrypt
   args:
     creates: /etc/php5/cli/conf.d/20-mcrypt.ini

 - name: create /var/www/ directory
   file: dest=/var/www/ state=directory owner=www-data group=www-data mode=0700

 - name: Clone git repository
   git: >
     dest=/var/www/laravel
     repo=https://github.com/laravel/laravel.git
     update=no
   sudo: yes
   sudo_user: www-data
   register: cloned

 - name: install composer
   shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
   args:
     creates: /usr/local/bin/composer

 - name: composer create-project
   composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
   sudo: yes
   sudo_user: www-data
   when: cloned|changed

 - name: set APP_DEBUG=false
   lineinfile: dest=/var/www/laravel/.env regexp='^APP_DEBUG=' line=APP_DEBUG=false

 - name: set APP_ENV=production
   lineinfile: dest=/var/www/laravel/.env regexp='^APP_ENV=' line=APP_ENV=production

 - name: Configure nginx
   template: src=nginx.conf dest=/etc/nginx/sites-available/default
   notify:
     - restart php5-fpm
     - restart nginx

 handlers:
   - name: restart php5-fpm
     service: name=php5-fpm state=restarted

   - name: restart nginx
     service: name=nginx state=restarted

Speichern Sie das Playbook und führen Sie es erneut aus:

ansible-playbook php.yml --ask-sudo-pass

Sobald dies abgeschlossen ist, kehren Sie zu Ihrem Browser zurück und aktualisieren Sie ihn. Sie sollten jetzt die neue Projektseite von Laravel sehen!

Fazit

Dieses Tutorial behandelt die Bereitstellung einer PHP-Anwendung mit einem öffentlichen Repository. Es ist perfekt, um zu lernen, wie Ansible funktioniert, aber Sie werden nicht immer an Open-Source-Projekten mit offenen Repositorys arbeiten. Dies bedeutet, dass Sie den Git-Klon in Schritt 3 mit Ihrem privaten Repository authentifizieren müssen. Dies kann sehr einfach mit SSH-Schlüsseln durchgeführt werden.

Wenn Sie beispielsweise Ihre SSH-Bereitstellungsschlüssel erstellt und in Ihrem Repository festgelegt haben, können Sie sie mit Ansible kopieren und auf Ihrem Server konfigurieren, bevor Sie die Aufgabe "+ git clone +" ausführen:

- name: create /var/www/.ssh/ directory
 file: dest=/var/www/.ssh/ state=directory owner=www-data group=www-data mode=0700

- name: copy private ssh key
 copy: src=deploykey_rsa dest=/var/www/.ssh/id_rsa owner=www-data group=www-data mode=0600

Dies sollte es dem Server ermöglichen, Ihre Anwendung korrekt zu authentifizieren und bereitzustellen.

'' '' '

Sie haben soeben eine grundlegende PHP-Anwendung auf einem Ubuntu-basierten Nginx-Webserver bereitgestellt und Composer zum Verwalten von Abhängigkeiten verwendet! All dies wurde abgeschlossen, ohne dass Sie sich direkt in Ihr PHP-Droplet einloggen und einen einzelnen manuellen Befehl ausführen müssen.

Related