m158/docs/panel
2024-07-11 20:18:31 +02:00
..
Caddyfile [c] updated Caddyfile and README section 2024-07-05 08:26:23 +02:00
docker-compose.yml [c] formatting and changes 2024-07-11 20:18:31 +02:00
README.md [c] formatting and changes 2024-07-11 20:18:31 +02:00

Realisieren: Panel

Inhaltsverzeichnis

LXC Container

Das Panel wird in einem bereits bestehenden LXC Container installiert. Auf diesem Container sind noch weitere Webapplikationen in Container gehostet und das Panel integriert sich dort gut. Deswegen haben wir keinen weiteren LXC Container erstellt, da es nur Ressourcenverschwendung gewesen wäre.

Docker Image und Compose vorbereiten

Auf Docker Hub gibt es kein offizielles Docker Image vom Panel für Pterodactyl. Das Github Repo beinhaltet jedoch ein Docker Image, welches auch direkt mit einer Beispiel Compose kommt.

Das Deployment wird mit Docker Compose gemacht. Das Github Repo hat bereits eine sehr gute Beispielkonfiguration. Diese haben wir etwas angepasst, da noch gewisse Credentials benötigt werden. Wir haben der Datenbank ein zufälliges Root-Passwort gegeben, da wir nur das User-Passwort verwenden müssen.

Dem Panel haben wir noch die richtige HTTP-Adresse angegeben. HTTPS werden wir anschliessend mit dem Reverse Proxy umsetzen. Auch haben wir die korrekte Zeitzone und Email-Adresse gegeben. Zusätzlich haben wir noch Backups nach Wings aktiviert, diese müssen aber noch weiter konfiguriert werden und sind nicht Teil dieser Projektarbeit. Der letzte Punkt deaktiviert noch die Datensammlung von Pterodactyl, die zur Weiterentwicklung der Applikation dient.

Der Mailservice wird benötigt damit die "Forgot Password"-Funktion funktioniert. Unter der Adresse no-reply@lunivity.com wird dann ein Link verschickt um das Passwort zurückzusetzen. Dafür muss man natürlich auch noch Angaben wie Protokoll, Host und Port auf dem zu benutzenden Mailserver machen.

x-common:
  database:
    &db-environment
    # Do not remove the "&db-password" from the end of the line below, it is important
    # for Panel functionality.
    MYSQL_PASSWORD: &db-password "<redacted>"
    MARIADB_RANDOM_ROOT_PASSWORD: 1
  panel:
    &panel-environment
    APP_URL: "http://nugget.sangelo.space"
    APP_TIMEZONE: "Europe/Zurich"
    APP_SERVICE_AUTHOR: "no-reply@lunivity.com"
    APP_BACKUP_DRIVER: wings
    PTERODACTYL_TELEMETRY_ENABLED: false
  mail:
    &mail-environment
    MAIL_FROM: "no-reply@lunivity.com"
    MAIL_DRIVER: "smtp"
    MAIL_HOST: "mail.lunivity.com"
    MAIL_PORT: "587"
    MAIL_USERNAME: "no-reply@lunivity.com"
    MAIL_PASSWORD: "<redacted>"
    MAIL_ENCRYPTION: "true"

Deployment vom Panel

Mit Docker Compose ist das grundlegende Deployment sehr simpel. Danach muss man aber noch einige Konfigurationen vornehmen. Die wichtigste ist die Erstellung des ersten Benutzers:

[miliena@panel ~]$ docker exec -it 381baf0abc0b sh
/app # php artisan p:user:make

 Is this user an administrator? (yes/no) [no]:
 > yes

 Email Address:
 > test@example.com

 Username:
 > admin

 First Name:
 > First

 Last Name:
 > Last

Passwords must be at least 8 characters in length and contain at least one capital letter and number.
If you would like to create an account with a random password emailed to the user, re-run this command (CTRL+C) and pass the `--no-password` flag.

 Password:
 > ************

+----------+--------------------------------------+
| Field    | Value                                |
+----------+--------------------------------------+
| UUID     | 360f93fc-0370-4ef4-b0f0-a818f471c6f2 |
| Email    | test@example.com                     |
| Username | admin                                |
| Name     | First Last                           |
| Admin    | Yes                                  |
+----------+--------------------------------------+

Die erste Benutzereinrichtung wird über die Commandline im Container vorgenommen. Danach können Benutzer einfach über das Webinterface eingerichtet werden.

2FA

Sobald das Panel live ist, kann man mit einem Administratorenkonto unter "Admin Control" am folgenden Ort 2FA aktivieren.

Caution

Dies erzwingt 2FA sofort auch für den angemeldeten Accounts

basic administration -> settings -> general -> "Require 2-Factor Authentication" to "All Users"

Reverse Proxy

Das Caddyfile leitet alle Anfragen an nugget.sangelo.space über einen Reverse-Proxy an den Server 10.1.30.1:2080 weiter und sagt Caddy es soll die IP und location des Host auch mit sended um die standart Konfiguration von Caddy ignorieren.

nugget.sangelo.space {
  reverse_proxy https://10.1.30.1:2443 {
    header_up X-Real-IP {remote_host}
    header_up X-Forwarded-For {remote_host}
    header_up Host {upstream_hostport}
  }
}

Probleme

Nach dem Deployen vom Panel hatten wir das Problem, dass nach jeder Änderung im Panel ein Server Error 500 aufgetaucht ist. Dank einem offenen Issue haben wir erkannt, dass es sich um ein Berechtigungsfehler im Container handelt.

Nachdem wir beim erneuten Deployment folgenden Befehl docker compose exec panel chown -R nginx: /app/storage/logs/ verwendet haben, hat alles funktioniert.

Dieser Befehl ändert den Besitzer der Ordners /app/storage/logs auf den User Nginx, was nötig ist, da der Webserver ansonsten keine Logs schreiben kann.