Dieser Artikel führt Sie durch das Cloud-Hosting für Ihre PHP-Anwendung mit Pagoda Box. Es wird detailliert beschrieben, wie Sie mit PHP-Abhängigkeiten umgehen, Ihre MySQL-Datenbanken zum Laufen bringen (und lokal debuggen) und verschiedene Aspekte von PHP mühelos anpassen.
Als Entwickler, der seit seinem 11. Lebensjahr mit PHP herumspielt, ist es schwer, sich an viele Dinge zu erinnern, die meine Entwicklung absolut verändert haben. Im Jahr 2007 habe ich CodeIgniter gefunden, was mich dazu veranlasst hat zu überdenken, wie ich meinen Code strukturiere und OOP verwende, um die Dinge zu erledigen. Im Jahr 2010 begann ich mit Git und Git Flow für Teamwork und Verzweigungen zu arbeiten. In letzter Zeit war die größte Änderung meines Entwicklungsworkflows jedoch eine "Plattform als Dienst", die Pagoda Box.
Sie sind vielleicht ein Rockstar-Entwickler, der weiß, wie man einen LAMP-Stack aufbaut, aber wie viel Zeit Ihrer potenziellen Entwicklungszeit verschwenden Sie mit dem Setup, der Optimierung, dem Sichern, dem Sperren, dem Skalieren von Ressourcen und dem Überwachen des Verkehrs.
Jeden Tag sehe ich einen Entwickler, der um die Verteidigung seines Servers vor einer Gruppe von Hackern oder Scriptkiddies kämpft, Portflut überflutet, Probleme mit dem zufälligen Sicherheitspatch hat, die Migration auf größere, leistungsfähigere Server und den Versuch, Capistrano einzurichten, zu kämpfen , Die Liste geht weiter. Services wie Pagoda Box können Ihnen dabei helfen, das alles zu überspringen. mal sehen wie.
Der erste Schritt ist, sich ein Konto zu sichern. Es ist kostenlos, also machen Sie weiter.
Jede Anwendung muss einen eindeutigen Namen haben, da sie auch für Vorschau-URLs verwendet wird. Sie können diese Anwendung beliebig nennen, da Sie sie in Kürze hinter einer Domäne verbergen, aber sie ist offensichtlich und einprägsam.
Git ist ein äußerst nützliches Versionsverwaltungssystem. Momentan ist es dank Sites wie GitHub, die kostenloses Hosting von sozialem Code ermöglichen, sehr beliebt, aber auch für die Bereitstellung Ihres Codes.
Wenn Sie Git noch nicht kennen, probieren Sie den Absturzkurs.
Falls noch nicht geschehen, richten Sie Git ein. Ihre Dokumentation hilft Ihnen beim Einstieg. Windows-Benutzer werden es etwas schwieriger finden als OSX- oder Linux-Benutzer. Wenn Sie also eine virtuelle Maschine von Ubuntu herumliegen haben, wäre es jetzt eine gute Gelegenheit, es zu starten.
Um Ihren Code an Pagoda Box zu übertragen, müssen Sie Ihrem Computer den Push-Zugriff auf Anwendungen Ihres Kontos ermöglichen. Erstellen Sie einen SSH-Schlüssel und fügen Sie ihn hier ein.
Richten Sie zunächst einen Ordner für Ihre Anwendung ein und legen Sie die Git-Fernbedienungen fest. Remotes sind im Wesentlichen Kurznamen für eine Repository-URL. Wenn Sie diese Fernbedienung einrichten, teilen wir unserem lokalen Git-Repo mit, wie Code in die Pagoda Box verschoben werden soll.
$ mkdir my-awesome-app && cd my-awesome-app $ git init Initialisiertes leeres Git-Repository in /Users/phil/Sites/my-awesome-app/.git/ $ git remote add pagoda [email protected] : my-awesome-app.git
Nachdem alle Konto- und Umgebungseinstellungen abgeschlossen sind, können wir mit der Bereitstellung von Code beginnen. Im Moment stellen wir eine einfache Hello World-App bereit:
$ echo ''> index.php
Dies ist ein kleiner Befehlszeilentrick, um Text in eine Datei einzufügen. Sie können diese Datei alternativ mit Ihrem bevorzugten Texteditor oder IDE erstellen.
$ git add index.php $ git commit -m "OH HAI" [master (root-commit) 6aa23f4] OH HAI 1 Dateien geändert, 1 Einfügungen (+), 0 Löschvorgänge (-), Erstellungsmodus 100644 index.php
Bisher haben wir einen neuen Ordner für unsere Website erstellt, Git initialisiert, eine Fernbedienung hinzugefügt, die Git mitteilt, wo die Pagoda Box App lebt, und eine neue hinzugefügt index.php
Datei, die einfach sagen wird Hallo Welt!
. Nächster:
$ git Push-Pagoden-Master Objekte zählen: 3, fertig. Objekte schreiben: 100% (3/3), 244 Bytes, fertig. Summe 3 (Delta 0), wiederverwendete 0 (Delta 0) :: Automatische Bereitstellung für "Master" +> zum Ändern aktiviert: https://dashboard.pagodabox.com/apps/my-awesome-app/admin :: Deploying auf 6aa23f4 auf master :: Parsing Boxfile :: Ausführen von deploy +> Init submodules +> Booten von web1.1 - [22-Feb-2012 20:38:41] HINWEIS: fpm läuft, pid 54 - [22-Feb-2012 20:38:41] HINWEIS: bereit, Verbindungen zu handhaben +> Verbreiten von Netzwerk-Updates :: Aufräumen an [email protected]: my-awesome-app.git * [neuer Zweig] Master -> Master
Hier passiert die Magie. Sie werden wie alle anderen Repositorys auf eine entfernte Git-Station wechseln, aber dann sehen Sie, wie Pagoda Box die Ausgabe übernimmt und eine Bereitstellung erstellt. Dies startet jedes Mal eine neue Instanz und wechselt sofort von der Live-Instanz zu dieser neuen Instanz, was sofortige Aktualisierungen bedeutet - im Gegensatz zu langsamen FTP-basierten Dateibereitstellungssystemen. Im Gegensatz zu einigen ähnlichen Diensten sind alle temporären Dateien (Cache, Protokolle, Image-Uploads usw.) nach jeder Größenänderung oder erneuten Bereitstellung vorhanden. Genial!
Wenn Sie nun die Seite Pagoda Box aktualisieren, wird ein Dashboard mit allen möglichen Optionen angezeigt.
Pagoda Box hat eine spezielle Konfigurationsdatei: Boxdatei
. Dies geht in die Wurzel Ihrer Anwendung. Ein erweitertes Beispiel kann in etwa so aussehen:
web1: ############################################# ## ALLGEMEINE EINSTELLUNGEN ############################################## ## shared_writable_dirs: [/ system / cms / cache, / system / cms / logs, / uploads, / addons] ######################### ###################### ## WEB-SPEZIFISCHE EINSTELLUNGEN ###################### ######################### index_list: [index.php] ################# ############################# ## PHP SPEZIFISCHE EINSTELLUNGEN ############### ################################## php_version: 5.3.8 php_extensions: [mysqli, curl, gd, mbstring] php_date_timezone: Europa / London php_max_execution_time: 30 php_max_input_time: 60 php_post_max_size: 25M php_file_uploads: auf php_upload_max_filesize: 20M php_max_file_uploads: 20
In diesem Beispiel haben Sie die Möglichkeit, beschreibbare Ordner zu erstellen. Legen Sie dazu Ihre index_list fest index.php
standardmäßig) und ändern Sie alle Arten von PHP-Einstellungen, die normalerweise in einer php.ini
Datei.
Die wichtigste Zeile hier ist:
php_extensions: [mysqli, curl, gd, mbstring]
Mit Pagoda Box können Sie Ihre Anwendungsabhängigkeiten auflisten. Das "Mysqli
"driver" ist "MySQL Improved", das Sie verwenden sollten, da "mysql" in PHP 5.4 veraltet sein wird. "curl" und "gd" sind eher Standard und "mbstring" hilft Ihnen bei der Arbeit mit UTF-8-Code.
Es ist gut zu wissen, dass sie verfügbar sind - neben vielen anderen -, aber für dieses Tutorial benötigen wir nur Folgendes:
php_extensions: [pdo, pdo_mysql]
Also machen wir unser neues Boxfile und speichern es:
web1: php_extensions: [pdo, pdo_mysql]
Wir werden das später verwenden.
Zum Zeitpunkt der Erstellung dieses Dokuments unterstützt Pagoda Box nur MySQL-Datenbanken, was in Ordnung ist, da dies die Mehrheit der Entwickler verwendet.
Wir können beliebig viele kleine Datenbankinstanzen kostenlos starten. Wir zahlen erst dann, wenn sie größer werden. Sie werden also nicht von einer massiven Rechnung über den Aufbau einer Website überrascht. Genau wie die Webinstanzen können sie auch skaliert werden, um mit Ihrer Website zu wachsen.
Um ein neues zu erstellen, klicken Sie auf + Symbol und geben Sie einen Namen. Oben wird eine Fortschrittsleiste angezeigt, während sie erstellt wird. dann wird die Seite aktualisiert.
Die Verbindung über PHP ist ein Kinderspiel. Sie erhalten mehrere $ _SERVER
Variablen, die Berechtigungsnachweise für jede vorhandene Datenbank enthalten. Dies bedeutet, dass Sie hartcodierte Kennwörter aus Ihrer Anwendung heraushalten können. Dies ist sehr nützlich, wenn Sie nicht möchten, dass alle Entwickler Live-Kennwörter sehen oder wenn Sie Ihre komplette Website auf GitHub haben, wie es einige Leute bereits tun.
$ db = new PDO (sprintf ('mysql: host =% s; dbname =% s; port =% s', $ _SERVER ['DB1_HOST'], $ _SERVER ['DB1_NAME'], $ _SERVER ['DB1_PORT'] ), $ _SERVER ['DB1_USER'], $ _SERVER ['DB1_PASS']);
Dies ist ein grundlegendes Beispiel für die verwendeten Variablen - die Verbindung zu Ihrer MySQL-Datenbank über die PDO-Erweiterung. Wenn Sie ein Framework wie CodeIgniter verwenden, können Sie diese Variablen in Ihren database.php
Konfigurationsdateien.
Bei einigen Webservern - insbesondere bei den üblichen cPanel-Setups - ist phpMyAdmin installiert und sie können so konfiguriert werden, dass Remotezugriff auf die MySQL-Datenbanken möglich ist.
Anstelle dieses Ansatzes verwendet Pagoda Box Ruby Gem, um unter anderem einen temporären sicheren SSH-Tunnel zu erstellen. Dies bedeutet, dass Ihre MySQL-Datenbanken hinter einer Firewall gesperrt sind und nur über diese sichere SSH-Verbindung zugänglich sind.
So installieren Sie den Edelsteinlauf:
$ sudo gem installieren Pagode
Um den Tunnel zu erstellen, führen Sie einfach Folgendes aus:
$ pagodentunnel db1
Wenn Sie diesen Befehl (oder einen anderen Pagodenedelbefehl) zum ersten Mal ausführen, sollten Sie nach einem Benutzernamen und einem Kennwort gefragt werden. Dies ist Ihr Pagoda Box-Benutzername und -Passwort und wird benötigt, damit der Edelstein in Ihrem Namen handeln kann und nichts mit Ihrer Datenbank zu tun hat.
$ pagoda tunnel db1 Wie es scheint, ist dies das erste Mal, dass Sie unseren Client verwendet haben. Benutzername: someguy Passwort: Tunnel Established! Verbindungen akzeptieren auf: ------------------------------------------ - HOST: 127.0.0.1 (oder localhost) PORT: 3307 BENUTZER: (gefunden im pagodabox-Dashboard) PASS: (gefunden im pagodabox-Dashboard) --------------------- -------------------------- (Anmerkung: Strg-c Um diesen Tunnel zu schließen)
Gehen Sie zu Ihrem Dashboard und klicken Sie auf die Datenbank. Klicken Sie anschließend auf "Anmeldeinformationen anzeigen", um ein Infofenster wie folgt anzuzeigen:
Verwenden Sie diese Anmeldeinformationen, um eine Verbindung herzustellen. Vergessen Sie nicht, den Port anzugeben. es wird in der Ausgabe des Edelsteins oben aufgeführt - nicht in der grünen Box. Denken Sie daran, dass Sie eine Verbindung zum lokalen Tunnel und nicht direkt zur Datenbank herstellen.
Was wäre das für ein Tutorial, wenn nicht in 20 Minuten ein Blog erstellt werden müsste?
Für alle Entwicklungszwecke sollten Sie wirklich Dinge lokal mit MAMP, XAMPP, WAMP usw. erstellen und dann Code- und Datenbankänderungen mit einer Art "Migrations" oder einem Schemaänderungs-Tracking-Material implementieren. Wir machen dies jedoch auf die alte Art und Weise.
Stellen Sie zunächst eine Remote-Verbindung zu Ihrer Datenbank über den Tunnel her und führen Sie dann diese Abfrage aus, um eine neue Tabelle zu erstellen:
CREATE TABLE posts ('id' int (11) NOT NULL AUTO_INCREMENT, 'title' varchar (255) NOT NULL, 'slug' varchar (255) NOT NULL, 'Zusammenfassung' Text NOT NULL, 'Body' Text NOT NULL, ' created_at 'int (11) NOT NULL,' updated_at 'int (11) NOT NULL, PRIMARY KEY (id)) ENGINE = InnoDB; INSERT INTO posts VALUES ('1', 'Frauen lieben Jungs, die FuelPHP verwenden', 'Frauen-Liebe-Jungs-Wer-verwenden-Treibstoff', 'Es ist eine bewiesene Tatsache, dass Mädchen Entwickler lieben, aber so war es noch nie gut für PHP-Entwickler. Jeder, der mit FuelPHP anfängt, erhält innerhalb des ersten Monats 150% mehr Frauen. Fakt ist: "Es ist eine bewiesene Tatsache, dass Mädchen Entwickler lieben, aber es war noch nie so gut für PHP-Entwickler Durch die Verwendung von FuelPHP erhalten Sie innerhalb des ersten Monats 150% mehr Frauen. Fakt. '', '1322825332', '1322934052'), ('2', 'Menschen, die HTML von Apps wiederholen, sterben jünger', 'schlechte Praktiken', 'Wissenschaftler haben es Es hat sich gezeigt, dass PHP - Entwickler, die HTML - Dateien direkt aus unseren PHP - Dateien ableiten, jünger sind, häufig jedoch, wenn der Entwickler im Büro ist. Während sie an ihren Stühlen sitzen, erleiden sie mehrere Wunden, anscheinend gibt es keine Zeugen, obwohl ihre Kollegen im Büro waren Büro \ "Refactoring bad code \" den ganzen Tag. ',' Wichtiger Nachrichtentext ',' 1322826479 ',' 1322826479 ');
Mit einigen Testposts können wir diese index.php erstellen:
Abfrage ('SELECT * from posts') als $ row) echo "$ row ['title']
"; Echo"Posted: ".date ('l jS \ of F Y', $ row ['created_at'])."
";
"; echo $ row ['summary']."
Wenn diese Datei gespeichert ist und unsere neue Boxdatei (ab Schritt 6) installiert ist, können wir diese neuen Änderungen bereitstellen:
$ git add Boxfile index.php $ git commit -m "Boxfile hinzugefügt und index.php implementiert." $ git Push Pagodenmaster
Gehen Sie zu "http://my-awesome-app.pagodabox.com" und sehen Sie sich die Ausgabe an:
Dies ist offensichtlich nicht etwas, das Sie auf Ihrer Website ausführen möchten, aber es reicht aus. Sie können sehen, dass Ihr Datenbankinhalt an den Browser ausgegeben wird und Ihre Demo-URL funktioniert. Sie können dies durch ein beliebiges CMS ersetzen oder eine benutzerdefinierte Komponente erstellen.
Es hat keinen Sinn, deinen wundervollen neuen Blog auf einer pagodabox.com
Subdomain; Also lasst uns eine Domain darüber parken.
Fügen Sie zunächst auf der Registerkarte DNS / SSL Ihres Dashboards einige Einträge für Ihre Domäne hinzu:
Nun, da Ihre Anwendung bereit ist, eine Domäne zu akzeptieren, sollten Sie zu demjenigen übergehen, der das DNS für Ihre Domäne verwaltet. Gehen Sie in den DNS-Verwaltungsbereich und setzen Sie eine EIN
Aufnahme für "myawesomedomain.com"
sein 50.97.141.37
- Dies ist die IP-Adresse, die auf der Schnittstelle für Ihre App aufgeführt ist. Diese IP-Adressen sind für jede Anwendung nicht eindeutig, aber nicht immer gleich. Legen Sie einen CNAME-Datensatz für fest "www.myawesomedomain.com"
zu Alias "myawesomedomain.com"
und du solltest fertig sein.
Das mag im Moment ganz anders aussehen, als Sie gerade arbeiten, aber denken Sie darüber nach, wie viel Arbeit Sie sich auf lange Sicht sparen. Die Verwendung von PaaS ist der gleiche Grund, warum wir jQuery über natives JavaScript oder PHP-Frameworks über das Schreiben von nativem PHP verwenden. Warum mit kleinen Details herumspielen, wenn Sie sich stattdessen auf das Erstellen einer fantastischen App konzentrieren können?
Andere Alternativen, die Sie in Betracht ziehen könnten, sind PHPFog und Orchestr.io, die beide ähnliche Dienste anbieten. Viel Spaß und danke fürs Lesen!