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:
- 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
- Owner:
- Klone den Branch mit der gewünschten Version:
git clone --branch=5 --recursive --single-branch git@bitbucket.org:big5concepts-ondemand/symfony-docker.git EXAMPLE
- Wechsle in das geklonte Repositorium:
cd EXAMPLE
- Ersetze den Remote:
git remote remove origin && git remote add origin git@bitbucket.org:big5concepts-ondemand/EXAMPLE.git
- Benenne Versionsbranch um:
git branch --move 5 master
- Erstelle den
develop
-Branch:git branch develop
- Initialisiere GitFlow:
git flow init --defaults
- 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.
- Entferne unnötige Services und Volumes aus
docker-compose.yml
- 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