Zum Inhalt

Symfony

Symfony ist ein Web-Framework für die Programmiersprache PHP.

Erstellen eines neuen vollwertigen Projekts

In Bitbucket findet sich ein für Docker vorkonfiguriertes Git-Repositorium, aus dem sich leicht neue Symfony-Projekte erstellen lassen.

Warning

Benutze nicht Forks von Bitbucket, um das neue Projekt anzulegen. Ansonsten werden sich alle Pull Requests im neuen Projekt standardmäßig auf das ursprüngliche Repositorium beziehen und nicht auf das neue Projekt.

Warning

Benutze nicht composer create-project, um das neue Projekt anzulegen. Dabei geht die Git-Historie verloren, was zukünfiges Mergen unnötig erschwert.

Führe folgende Schritte aus, um ein neues Projekt zu erstellen:

  1. Lege ein neues Git-Repositorium in Bitbucket an
    • Owner: BIG5
    • Project: General
    • Repository name: EXAMPLE
    • Access level: This is a private repository: true
    • Include a README?: No
    • Description:
    • Forking: Allow only private forks
    • Language: PHP
  2. Klone den Branch mit der gewünschten Version: git clone --branch=5 --recursive --single-branch git@bitbucket.org:big5concepts-ondemand/symfony-docker.git EXAMPLE
  3. Wechsle in das geklonte Repositorium: cd EXAMPLE
  4. Ersetze den Remote: git remote remove origin && git remote add origin git@bitbucket.org:big5concepts-ondemand/EXAMPLE.git
  5. Benenne Versionsbranch um: git branch --move 5 master
  6. Erstelle den develop-Branch: git branch develop
  7. Initialisiere GitFlow: git flow init --defaults
  8. Pushe Branches: git push --set-upstream origin develop master

Danach sollte die Projektvorlage angepasst werden. Sie enthält nützliche Dinge, die aber nicht von jedem Projekt gleichermaßen benötigt werden.

  1. Entferne unnötige Services und Volumes aus docker-compose.yml
  2. Passe bin/ptr an

Erstellen eines lokalen Testprojekts

Für einfache lokale Tests und Praktikumsprojekte ist eine der Aufwand einer vollumfänglichen Installation nicht notwendig. Stattdessen kann einfach der eingebaute Webserver von PHP in Verbindung mit der eingebetteten Datenbank SQLite3 genutzt werden. Dann muss man sich weder mit Berechtigungen noch mit Datenbankdiensten herumschlagen.

Installiere hierfür zuerst PHP, SQLite3, die PHP-Erweiterung für SQLite3 und Composer mit dem Paketmanager deines Vertrauens. Danach kann das Projekt mithilfe von Composer erstellt werden.

composer create-project symfony/website-skeleton EXAMPLE

Wechsle nun in das Verzeichnis des neu erstellten Projekts.

cd EXAMPLE

Konfiguriere und initialisiere dort eine SQLite3-Datenbank unter var/database.sqlite3.

echo DATABASE_URL=sqlite3:///%kernel.project_dir%/var/database.sqlite3 > .env.local
sqlite3 var/database.sqlite3 'PRAGMA journal_mode = WAL'

Starte schließlich den Webserver von PHP, um auf die Anwendungen im Webbrowser zugreifen zu können.

php --docroot public --server 127.0.0.1:8080

Alternativ kann auch der Webserver der Symfony-CLI genutzt werden.

symfony serve

Konfiguration

Symfony-Optionen lassen sich wie gewohnt (und für Symfony 3.4 gebackported) über die Datei .env konfigurieren. Wenn man Symfony im Docker-Container laufen lässt muss man darauf achten, dass Netzwerkdienste nicht mehr über localhost erreichbar sind, sondern über den Namen ihres Dienstes in der docker-compose.yml. Dort finden sich auch die jeweiligen Zugangsdaten:

DATABASE_URL=pdo-pgsql://symfony:symfony@postgresql:5432/symfony?charset=UTF-8&serverVersion=10
MAILER_URL=smtp://symfony:symfony@mailcatcher:1025

Achte bei der DATABASE_URL darauf die serverVersion mit anzugeben. Ansonsten versucht Doctrine das automatisch zu ermitteln, was fehlschlagen wird, wenn die Container nicht laufen, was beim Build der Fall sein wird.

PhpStorm

Folge der entsprechenden Anleitung, um PhpStorm für Symfony einzurichten.

Deployment

Unsere Anwendungen werden üblicherweise auf Server mit der Web Container Platform mithilfe von Ansible ausgerollt. In den Branch-spezifischen Inventories ist die mit Ansible Vault verschlüsselte Konfiguration hinterlegt.

Passwörter für WCP-Dienste kann man mit folgendem Befehl generieren:

dd if=/dev/urandom bs=24 count=1 2> /dev/null | base64 | tr /+ .~

Das APP_SECRET kann man mit folgendem Befehl generieren:

dd if=/dev/urandom bs=32 count=1 2> /dev/null | base64