Webhosting: Einstieg

Alles Folgende erledigst du unter Konto → Hosting auf medialab.works. Die Tarife und Preise stehen auf der Hosting-Seite; was enthalten ist, beschreibt die Hosting-Übersicht.

1. Einen Tarif bestellen

  1. Öffne die Hosting-Seite und wähle einen Tarif und den Abrechnungszeitraum (monatlich oder jährlich).
  2. Füge bei Bedarf Optionen hinzu: mehr Speicherplatz, vCPU oder RAM oder erweitertes Backup. Du kannst sie später ändern.
  3. Gib deine E-Mail-Adresse ein (oder melde dich an, wenn du schon ein Konto hast; sonst wird dein Kundenkonto bei der Zahlung angelegt und das temporäre Passwort kommt per E-Mail), setze das Häkchen, um die AGB, die Richtlinie zur zulässigen Nutzung und den Auftragsverarbeitungsvertrag zu akzeptieren, und bezahle mit Stripe.

Dein Hosting-Konto wird nach der Zahlung automatisch angelegt, meist innerhalb weniger Minuten, und du erhältst eine E-Mail. Die 30-tägige Geld-zurück-Garantie beginnt mit deiner ersten Zahlung.

2. Eine Website hinzufügen

Unter Websites → Website hinzufügen:

  • Name: Kleinbuchstaben, Ziffern und Bindestriche. Er wird zum Ordner www-data/<name> in deinem Home-Ordner.
  • Technologie: PHP 8.1–8.5, Node.js 22 oder 24, Python 3.12 (Node.js und Python ab Standard) oder statisch.
  • Webserver (nur PHP): Apache liest .htaccess-Dateien, wie die meisten Shared-Hostings, und ist die sichere Wahl für WordPress und die meisten PHP-Apps, die Rewrite-Regeln in .htaccess mitbringen. nginx ist schlanker und schneller bei statischen Dateien, ignoriert aber .htaccess; WordPress läuft darauf ohne Anpassungen. Du wählst für jede Website.
  • Domain (optional): deine Domain oder eine Subdomain einer Domain aus deinem Konto (zum Beispiel blog.deinedomain.de); der DNS-Eintrag der Subdomain wird automatisch angelegt. Ohne Domain funktioniert die Website sofort unter ihrer Vorschauadresse <site>-<user>.hosting.medialab.works (nur HTTP, bis du die Domain umziehst).
  • Web-Stammverzeichnis (PHP und statisch): der Ordner in www-data/<site>, der an Besucher ausgeliefert wird, standardmäßig public; . steht für den Website-Ordner selbst.

Beim Anlegen erhält der Website-Ordner eine Startseite (index.php oder index.html), die zeigt, dass die Domain den Server erreicht, wo die Website gehostet wird und welche PHP-Version läuft. Ersetze sie durch deine eigenen Dateien.

Wohin deine Dateien gehören:

Technologie Ordner
PHP, statisch www-data/<site>/public (oder das gewählte Web-Stammverzeichnis)
Node.js, Python www-data/<site>/app

3. Deine Domain verbinden

Wenn du eine Domain hinzufügst (mit einer Website oder unter Domains), legen wir für dich an:

  1. eine DNS-Zone in Cloudflare, in unserem Konto, mit den Web-Einträgen und den Mail-Einträgen (MX, SPF, DKIM, DMARC, Autoconfig);
  2. die Mail-Domain auf unserem Mailserver, mit ihrem DKIM-Schlüssel;
  3. die Website auf dem Server, mit einem SSL-Zertifikat, sobald die Domain auf uns zeigt.

Was du tust: Ersetze beim Unternehmen, bei dem du die Domain registriert hast (dem Registrar), die Nameserver durch die beiden, die unter Konto → Hosting → Domains angezeigt werden. Die Änderung dauert meist einige Minuten bis einige Stunden, manchmal bis zu 48 Stunden. Die Domain-Seite zeigt jeden Schritt; sobald die Nameserver sichtbar sind, wird die Zone aktiv und das Zertifikat automatisch ausgestellt. Mit DNS prüfen und Zertifikat ausstellen kannst du es sofort erneut versuchen.

Du behältst deinen bisherigen DNS-Anbieter? Richte stattdessen einen A-Eintrag auf die im Konto angezeigte IP-Adresse und füge die Mail-Einträge selbst hinzu, wenn du E-Mail auf der Domain möchtest (die Tabelle der DNS-Einträge im Konto listet sie auf). Ohne unsere Nameserver liegen die DNS-Einträge in deiner Verantwortung.

4. Eine PHP-Website bereitstellen (Beispiel WordPress)

  1. Lege eine Website mit PHP 8.4 (oder der Version, die deine App braucht) und Apache an.
  2. Lege unter Datenbanken eine MariaDB-Datenbank an (zum Beispiel wp; ihr vollständiger Name wird <user>_wp). Das Passwort deines Datenbankbenutzers wird einmal angezeigt, wenn du deine erste MariaDB-Datenbank anlegst: Speichere es.
  3. Lade WordPress nach www-data/<site>/public hoch: unter Dateien (ein .zip-Archiv, dann Entpacken), per SFTP (Abschnitt 8) oder per SSH.
  4. Verwende in wp-config.php:
    • DB_NAME: <user>_wp
    • DB_USER: dein Datenbankbenutzer (derselbe wie dein Kontobenutzer)
    • DB_PASSWORD: das gespeicherte Passwort
    • DB_HOST: mlw-db:3390
  5. Öffne die Adresse der Website und schließe den WordPress-Installer ab.

Andere PHP-Apps (Laravel, Symfony, Drupal, WHMCS, Nextcloud …) funktionieren genauso. Lade das Projekt nach www-data/<site> hoch und drücke dann unter Einstellungen neben der Website auf Erkennen: Wir erkennen die App und schlagen dir das Web-Stammverzeichnis vor (public bei Laravel und Symfony, web bei Drupal mit Composer, den Ordner der App bei WordPress, WHMCS oder Nextcloud). Dateien außerhalb des Web-Stammverzeichnisses (vendor/, storage/, .env, die Nextcloud-Daten, die WHMCS-Ordner attachments, downloads und templates_c) bleiben für die App erreichbar, aber nicht über den Browser.

5. Node.js- und Python-Apps

Lade deine App nach www-data/<site>/app hoch. Sie muss auf dem Port aus der Umgebungsvariable PORT (8080 im Container) auf allen Schnittstellen (0.0.0.0) lauschen, nicht nur auf localhost. Webserver und Zertifikat stehen davor; du öffnest selbst keinen Port.

So wird die App gestartet, in dieser Reihenfolge:

  • Node.js: ein ausführbares start.sh in app/; sonst npm start aus package.json (die Abhängigkeiten werden mit npm ci --omit=dev installiert, wenn node_modules fehlt); sonst server.js, index.js, app.js oder main.js.
  • Python: ein ausführbares start.sh; sonst asgi.py (mit uvicorn-Workern in gunicorn); sonst app.py mit einem app-Objekt oder wsgi.py mit application (gunicorn). requirements.txt wird in eine virtuelle Umgebung installiert und beim Start erneut installiert, wenn sich die Datei geändert hat.

Nach dem Hochladen einer neuen Version drückst du Neu starten neben der Website. Solange keine App gefunden wird, zeigt die Website eine Platzhalterseite, die sagt, was fehlt.

6. Dateien und Protokolle

Dateien unter Konto → Hosting ist ein Dateimanager für www-data (deine Websites), logs (die Protokolle) und restore (die wiederhergestellten Kopien). Damit kannst du:

  • durch Ordner navigieren, anlegen, umbenennen, verschieben und löschen (zum Löschen gibst du zur Bestätigung den Namen ein);
  • Dateien jeder Größe, die dein Tarif erlaubt, hochladen (große Dateien werden in Teilen gesendet) und .zip, .tar.gz, .tar.bz2 oder .tar.xz entpacken, wahlweise nachdem der Zielordner geleert wurde;
  • Textdateien (bis 1 MB) direkt im Browser bearbeiten;
  • eine Datei oder einen ganzen Ordner als .zip herunterladen: Das Archiv wird im Hintergrund vorbereitet und erscheint unter Vorgänge und Downloads, wo es 24 Stunden bleibt.

Die Protokolle jeder Website liegen in logs/<site>/: nginx/ oder apache/ (access.log, error.log) und php/ (oder node/, python/) für die Ausgabe der App. Du siehst sie auch unter Einstellungen → Protokolle neben der Website und per SFTP.

Ebenfalls unter Einstellungen kannst du eine Website stoppen und starten (solange sie gestoppt ist, sehen Besucher eine Seite „nicht verfügbar“), ihr Archiv herunterladen oder sie aus einem Archiv wiederherstellen, das du hochlädst.

7. Datenbanken

  • MariaDB und PostgreSQL. Alle deine Datenbanken desselben Typs teilen sich einen Datenbankbenutzer, der so heißt wie dein Konto. Sein Passwort wird einmal angezeigt, bei der ersten Datenbank dieses Typs; Neues Passwort erzeugt ein neues für alle Datenbanken dieses Typs (passe danach deine Websites an).
  • Aus deinen Websites (in den Containern) ist der Datenbank-Host mlw-db, Port 3390 für MariaDB und 5490 für PostgreSQL.
  • Per SSH (ab Standard) erreichst du dieselben Datenbanken unter 127.0.0.1, mit denselben Ports, zum Beispiel mysql -h 127.0.0.1 -P 3390 -u <user> -p oder psql -h 127.0.0.1 -p 5490 -U <user> <user>_db.
  • Der Web-Editor (Adminer, für MariaDB und PostgreSQL) öffnet sich mit Editor neben der Datenbank: Du bist direkt angemeldet, mit einem temporären Login, der 4 Stunden gilt, ohne das Datenbankpasswort, und siehst nur die Datenbanken deines Kontos.
  • Export (.sql.gz) und Import (.sql, .sql.gz; bei PostgreSQL auch .dump aus pg_dump -Fc) in derselben Liste. Der Import läuft mit den Rechten deines Kontos: Tabellen mit gleichem Namen werden ersetzt, exportiere die Datenbank also vorher, wenn du eine Kopie willst.
  • Die Datenbanken sind aus dem Internet nicht direkt erreichbar.

8. SFTP und SSH

Server, Port (22) und Benutzername stehen unter Konto → Hosting → SFTP und SSH.

  • Start: SFTP mit Passwort. Neues Passwort erstellen zeigt es einmal an; das alte funktioniert dann nicht mehr.
  • Standard, Pro und Business: SFTP und SSH mit deinen SSH-Schlüsseln (Anmeldung per Passwort ist aus). Füge deinen öffentlichen Schlüssel hinzu (ssh-ed25519, ssh-rsa oder ecdsa-…) und verbinde dich mit dem dort angezeigten Befehl. Git ist per SSH verfügbar.

Dein Home-Ordner enthält www-data (deine Websites), logs (die Protokolle deiner Websites) und restore (die wiederhergestellten Kopien). Halte Geheimnisse aus dem Web-Stammverzeichnis heraus.

9. E-Mail

  1. Füge zuerst die Domain hinzu; Postfächer können angelegt werden, sobald ihre Mail-Einrichtung abgeschlossen ist (die Domain-Seite zeigt den Schritt).
  2. Lege unter E-Mail ein Postfach an und wähle seinen Speicherplatz. Das Passwort wird einmal angezeigt.
  3. Die meisten Mail-Apps richten sich anhand der Adresse selbst ein (Autoconfig). Fragt deine danach: Der Server für eingehende (IMAP, Port 993) und ausgehende E-Mails (SMTP Submission, Port 587) ist der Mail-Host im MX-Eintrag deiner Domain, aufgeführt in der Tabelle der DNS-Einträge.

Senden aus deinen Websites: Sende über SMTP auf Port 587 mit einem deiner Postfächer (in WordPress mit einem SMTP-Plugin). Direktes Senden über Port 25 ist für alle Hosting-Konten gesperrt.

10. Backups und Wiederherstellung

  • Jede Nacht wird ein Backup deiner Dateien und Datenbanken erstellt und gemäß deinem Tarif aufbewahrt: Start 7 Tage, Standard 14 Tage, Pro 14 tägliche + 4 wöchentliche, Business 30 tägliche + 12 monatliche. Die Option erweitertes Backup gibt dir die Aufbewahrung des nächsthöheren Tarifs (Start → 14 Tage, Standard → 14 tägliche + 4 wöchentliche, Pro → 30 tägliche + 12 monatliche).
  • Die Backups sind verschlüsselt und liegen auf einer separaten Festplatte im selben Server, nicht an einem zweiten Standort. Bewahre von allem Wichtigen eine eigene Kopie auf.
  • Selbst wiederherstellen unter Backups: Wähle die Kopie und was wiederhergestellt werden soll (das ganze Konto, eine Website oder eine Datenbank). Dateien werden standardmäßig in einen neuen Ordner restore/ kopiert, sodass deine aktuellen Dateien unverändert bleiben; setze das Häkchen bei Aktuelle Dateien ersetzen, um an Ort und Stelle wiederherzustellen. Eine Datenbank-Wiederherstellung ersetzt die Datenbank durch ihre Kopie.
  • Backup jetzt startet ein Backup außerhalb des Zeitplans (höchstens 3-mal am Tag), zum Beispiel vor einem Update.
  • Herunterladen aus einem Backup: eine Website, alle Websites oder eine Datenbank; die Datei erscheint unter Vorgänge und Downloads.
  • Wiederherstellung durch unser Team: Beschreibe, was wiederhergestellt werden soll und von wann. Die erste Wiederherstellung in jedem Monat ist kostenlos; die weiteren kosten je 10 €.

11. Grenzen und Nutzung

Die Kontoseite zeigt Speicherplatz, Dateien (Inodes), CPU und Arbeitsspeicher im Verhältnis zu deinem Tarif. CPU und Arbeitsspeicher sind feste Grenzen: Eine App, die mehr braucht, wird gebremst oder angehalten, nie extra berechnet. Die Anzahl der Websites, Datenbanken und Postfächer richtet sich nach deinem Tarif; bei Business sind sie im Rahmen des Fair Use unbegrenzt.

Über der Grenze für Speicherplatz oder Dateien: Wir schreiben dir eine E-Mail, und du hast 7 Tage, um Platz freizugeben oder Speicher hinzuzufügen (die Option +10 GB). Nach 7 Tagen werden Uploads gesperrt (SFTP wird schreibgeschützt), bis das Konto wieder unter der Grenze liegt; deine Websites laufen weiter. Sinkt die Nutzung unter die Grenze, werden Uploads bei der nächsten täglichen Prüfung automatisch wieder erlaubt.

12. Tarif wechseln oder kündigen

  • Tarif oder Optionen ändern unter Konto → Hosting: Du siehst zuerst den Preis. Bei einem Upgrade oder neuen Optionen zahlst du nur die Differenz für den Rest des laufenden Zeitraums (anteilig), und die neuen Grenzen gelten innerhalb einer Minute. Ein kleinerer Tarif wird nur akzeptiert, wenn deine Websites, Datenbanken, Postfächer und dein Speicherplatz hineinpassen.
  • Kündigen auf derselben Seite. Das Konto bleibt bis zum Ende des bezahlten Zeitraums aktiv, wird dann gesperrt und 30 Tage später gelöscht; das letzte Backup wird in diesen 30 Tagen aufbewahrt. Vor dem Ende des Zeitraums kannst du die Kündigung zurücknehmen.
  • Fehlgeschlagene Zahlung: Deine Websites laufen während der 7-tägigen Kulanzfrist weiter, in der die Karte erneut belastet wird. Schlägt die Zahlung weiterhin fehl, wird das Konto gesperrt (nicht gelöscht) und startet wieder, sobald die Rechnung bezahlt ist.
  • Geld zurück: Innerhalb von 30 Tagen nach deiner ersten Zahlung forderst du die Erstattung über dein Konto (Ticket) oder unter contact@medialab.works an; das Konto wird dann geschlossen.

Fragen? Sieh dir die häufig gestellten Fragen an oder kontaktiere uns.