Synology NAS als Symfony-Server

Die folgende Anleitung beschreibt das Vorgehen, welches zur Installation des Symfony-Framework auf einer Synology-NAS notwendig ist.

Ausgangslage ist dabei eine DS918+.

Symfony wird dabei in einer virtuelen Ubuntu-Maschiene genutzt, welche innerhalb einer Qemu-VM läuft installiert.

In dieser Anleitung wird zunächst die Installation in einer virtuellen Maschiene beschrieben. Docker kommt dabei also nicht zum Einsatz. (Das habe ich trotz mehrere Versuche noch nicht hin bekommen… Ein entsprechendes Tutorial wird nachgereicht, sobald ich meinen Fehler gefunden habe.)

Basis für die Anleitung ist dabei eine Anleitung von tecadmin – diese ist jedoch nicht mehr ganz auf aktuellem Stand (PHP 5.6 etc.)

  1. Ausgangslage für das System ist ein cleanes System mit Ubuntu Server 18.04 LTS.
  2. Dabei wird der Benutzername synology-vm für das System verwendet.
  3. Als erstes sollte der Server abgesichert werden. Dies funktioniert bespilesweise über die Installation von fail2ban
  4. Installation von PHP über den Befehl
    sudo apt-get install php
    Dabei wird das zusätzliche Paket apache automatisch mitinstalliert. Jetzt solltet ihr unter der IP der VM (herauszufinden überip addr show die Wilkommensseite von Apache sehen.
  5. Nun sind noch zwei kleine PHP-Erweiterungen notwendig, die mit den folgenden Befehlen installiert werden können:
    1. sudo apt-get install php-xml
    2. sudo apt-get install php-zip
  6. Euer Benutzer „synology-vm“ benötigt Schreibrechte für den Ordner /var/www/html. Dies geht über folgende Befehle:
    sudo groupadd www
    sudo adduser BENUTZERNAME www
    sudo chgrp www /var/www/html
    sudo chmod g+w /var/www/html
  7. Überprüfen könnt ihr das ganze, indem ihr beispielsweise in Filezilla eine Datei mit folgenden Inhalt in das html-Verzeichniss hochlädt:
    <?php
    phpinfo();
    ?>
  8. Installation von mariaDB
    sudo apt-get install mariadb-server
  9. Festlegen eines Passworts für die mariaDB-Installation:
    1. Öffnen der Konfiguration: sudo mysql -u root -p
    2. Dort nacheinander folgende Befehle eingeben (‚geheim‘ muss durch ein sicheres Passwort ersetzt werden):
      grant all on *.* to root@localhost identified by 'geheim' with grant option;
      flush privileges;
      quit;
    3. Nun könnt ihr mit dem Benutzer root und dem Passwort „geheim“ bespielsweise über sequelPro auf die DB zugreifen.
  10. Damit ihr die Datenbank auch über php nutzen könnt, müsst ihr das folgende Paket installieren: php-mysql
  11. Installation von Composer: sudo apt install composer
  12. Wechsel in das Verzeichnis des Webserver: cd /var/www/html
  13. An dieser Stelle stellt sich die Frage, ob ihr ein neues Projekt anlegen wollt, oder ob ihr an einem bestehenden Projekt (z.B. aus GitHub weiter arbeiten wollt.
    1. Neues Projekt
      1. Anlegen eines neuen Projekts mit
        composer create-project symfony/skeleton myproj
    2. Weiterarbeiten
      1. git clone ...
      2. composer Install
      3. sudo apt install php-mysql
      4. php bin/console doctrine:database:create
      5. php bin/console doctrine:schema:update --force
  14. Nun kommt es darauf an, ob die Installation als Entwicklungsumgebung, oder aber als Live-System laufen soll:
    1. Als Entwicklungsumgebung
      1. Die Installation des Symfony-eigenen Webserver wird mit folgenden Befehl gestartet:
        composer require server --dev
      2. Um symfony zu starten (und zwar so, dass es auch von außerhalb der VM erreichbar ist) muss nun der folgende Befehl eingegeben werden:
        php bin/console server:start 0.0.0.0:8000
        Damit habt ihr soweit eure Entwicklungsumgebung aufgesetzt.
      3. Zum Stoppen einfach folgendes eingeben: php bin/console server:stop
    2. Als Live-Umgebung: Wollt ihr die Installation auch live im Internet freigeben, müsst ihr zudem die folgenden Schritte durchführen:
      1. Prüfen, ob alle Requirements erfüllt sind: cd my-project/
        php bin/symfony_requirements
      2. Anpassen der Virtual Hosts
      3. aktivieren des Virtual Host
      4. Ermöglichen der URL-Umschreibung:sudo a2enmod proxy_fcgi rewrite headers
      5. Anpassen der Nutzerrechte für das var/ Verzeichnis: sudo chown -R www-data:www-data var/
      6. ggf. einrichten einer Port-Weiterleitung sowie DynDNS
  15. Wenn ihr wollt, könnt ihr natürlich natürlich auch beide Umgebungen parallel nutzen – ihr habt in dem Fall beim aufruf der lokalen IP die Symfony-Eigene Fehlerausgabe

P.S.: Diese Anleitung ist evtl. noch nicht ganz korrekt. Die Nutzungsrechte zur Live-Freigabe reißen evtl. eine Sicherheitslücke auf? –> Siehe entsprechende Dokumentation