Verhoog uw PHP naar de cloud

Dit artikel leidt je door cloudhosting voor je PHP-applicatie met Pagoda Box. Het zal in detail beschrijven hoe PHP-afhankelijkheden moeten worden afgehandeld, uw MySQL-databases in gebruik nemen (en lokaal debuggen) en eenvoudig verschillende aspecten van PHP aanpassen.


Invoering

Als ontwikkelaar die sinds zijn elfde met PHP speelt, is het moeilijk om veel dingen te onthouden die de manier waarop ik me ontwikkel, absoluut hebben veranderd. In 2007 pakte ik CodeIgniter op, waardoor ik opnieuw moest nadenken over hoe ik mijn code structureer en OOP gebruik om zaken voor elkaar te krijgen. In 2010 begon ik met Git en Git Flow te werken voor teamwork en vertakking, maar onlangs was het grootste ding om mijn ontwikkelingsworkflow te veranderen een "Platform as a Service", genaamd Pagoda Box.

Je bent misschien een rockstar-ontwikkelaar die weet hoe je een LAMP-stack moet opzetten, maar hoeveel van je potentiële ontwikkeltijd verspil je aan het installeren, optimaliseren, dingen beveiligen, vergrendelen, bronnen schalen en verkeer volgen.

Elke dag zie ik een ontwikkelaar vechten om zijn server te verdedigen tegen een groep hackers of scriptkiddies, waardoor de poort wordt overstroomd, problemen ondervindt om een ​​willekeurige beveiligingspatch te krijgen, moeite heeft om te migreren naar grotere, krachtigere servers, kwaad worden bij het opzetten van Capistrano , de lijst gaat verder. Services zoals Pagoda Box kunnen u helpen dit allemaal over te slaan; dus laten we eens kijken hoe.


Stap 1 - Registreer met Pagoda Box

De eerste stap is om jezelf een account te bemachtigen. Het is gratis, dus ga je gang.


Stap 2 - Maak uw applicatie

Elke toepassing moet een unieke naam hebben, omdat deze ook worden gebruikt voor voorbeeld-URL's. Je kunt deze applicatie bellen wat je wilt, omdat je het binnenkort achter een domein verbergt, maar noem het iets voor de hand liggend en gedenkwaardig.


Stap 3 - Stel Git in

Git is een uiterst nuttig versiebeheersysteem. Op dit moment is het enorm populair dankzij sites zoals GitHub die gratis hosting van sociale code mogelijk maken, maar het is ook geweldig voor het gebruik van je code.

Als je nieuw bent bij Git, probeer dan de spoedcursus.

Als je dat nog niet hebt gedaan, kun je Git instellen. Hun documentatie zal u helpen aan de slag te gaan. Windows-gebruikers zullen het een beetje moeilijker vinden dan OSX- of Linux-gebruikers, dus als je een virtuele machine van Ubuntu hebt die rondslingert, zou het nu een goed moment zijn om het op te starten.


Stap 4 - Maak uw SSH-sleutel

Om uw code naar Pagoda Box te verzenden, moet u uw computer machtigen push-toegang te hebben tot applicaties in uw account. Maak een SSH-sleutel en plak deze hier.


Stap 5 - Implementeer uw code

Stel eerst een map in voor uw toepassing en stel de Git-afstandsbedieningen in. Remotes zijn in wezen bijnamen voor een repository-URL. Door deze afstandsbediening in te stellen, laten we onze lokale Git-repo weten hoe je code naar Pagoda Box kunt pushen.

 $ mkdir my-awesome-app && cd my-awesome-app $ git init Geinitialiseerde lege Git-repository in /Users/phil/Sites/my-awesome-app/.git/ $ git remote add pagoda [email protected] : my-awesome-app.git

Nu al deze account- en omgevingsinstellingen zijn voltooid, kunnen we beginnen met het implementeren van code. Voorlopig zullen we een eenvoudige Hello World-app implementeren:

 $ echo ''> index.php

Dit is een kleine opdrachtregel om tekst in een bestand te plaatsen. U kunt dit bestand ook maken met uw favoriete teksteditor of IDE.

 $ git add index.php $ git commit -m "OH HAI" [master (root-commit) 6aa23f4] OH HAI 1-bestanden gewijzigd, 1 invoegingen (+), 0 deleties (-) create mode 100644 index.php

Tot nu toe hebben we een nieuwe map gemaakt voor onze website, Git geïnitialiseerd, een afstandsbediening toegevoegd die Git vertelt waar de Pagoda Box-app woont en een nieuwe heeft toegevoegd index.php bestand, dat zal eenvoudigweg zeggen Hallo Wereld!. Volgende:

 $ git push pagoda master Tellen van objecten: 3, klaar. Objecten schrijven: 100% (3/3), 244 bytes, klaar. Total 3 (delta 0), reused 0 (delta 0) :: Auto deploy ingeschakeld voor 'master' +> om te veranderen, bezoek https://dashboard.pagodabox.com/apps/my-awesome-app/admin :: Implementatie naar 6aa23f4 op master :: Parsing Boxfile :: Executing deploy +> Init submodules +> Opstartweb1.1 - [22-Feb-2012 20:38:41] LET OP: fpm draait, pid 54 - [22-feb-2012 20:38:41] LET OP: klaar om verbindingen af ​​te handelen +> Netwerk-updates uitdragen :: Opschonen naar [email protected]: my-awesome-app.git * [nieuwe branch] master -> master

Dit is waar de magie gebeurt. Je zult pushen naar een Git remote zoals elke andere repository, maar dan zul je de output van Pagoda Box zien overnemen en een deployment creëren. Hierdoor wordt telkens een nieuw exemplaar geactiveerd en wordt onmiddellijk overgeschakeld van het live-exemplaar naar dit nieuwe exemplaar, wat onmiddellijke updates betekent, in tegenstelling tot trage FTP-gebaseerde bestandsimplementatiesystemen. Ook in tegenstelling tot sommige vergelijkbare services, zullen al je tijdelijke bestanden (cache, logs, afbeeldingen, uploads, etc.) aanwezig zijn na elke resize of re-deployment. Geweldig!

Als u nu de pagina Pagodevak vernieuwt, ziet u een dashboard met allerlei opties.


Stap 6 - Een boxbestand maken

Pagoda Box heeft een speciaal configuratiebestand: Boxfile. Dit gaat in de root van uw applicatie. Een geavanceerd voorbeeld kan er ongeveer zo uitzien:

 web1: ### ######################################### ## ALGEMENE INSTELLINGEN ############################################## ## shared_writable_dirs: [/ system / cms / cache, / system / cms / logs, / uploads / / addons] ######################### ####################### ## WEB SPECIFIEKE INSTELLINGEN ###################### ########################## index_list: [index.php] ################# ################################## PHP SPECIFIEKE INSTELLINGEN ############## ################################## php_version: 5.3.8 php_extensions: [mysqli, curl, gd, mbstring] php_date_timezone: Europa / Londen php_max_execution_time: 30 php_max_input_time: 60 php_post_max_size: 25M php_file_uploads: On php_upload_max_filesize: 20M php_max_file_uploads: 20

Dit voorbeeld geeft je de kans om beschrijfbare mappen te maken, je index_list in te stellen (wat is index.php standaard) en verander alle soorten PHP-instellingen die normaal in a zouden zijn php.ini het dossier.

De belangrijkste regel hier is:

 php_extensions: [mysqli, curl, gd, mbstring]

Met Pagoda Box kunt u uw toepassingsafhankelijkheden weergeven. De "mysqli"driver is" MySQL Improved "die je zou moeten gaan gebruiken, omdat" mysql "in PHP 5.4 zal worden gedeprecieerd." curl "en" gd "zijn redelijk standaard en" mbstring "helpt je te werken met UTF-8 code.

Het is goed om te weten dat ze beschikbaar zijn - samen met veel anderen - maar voor deze tutorial hebben we alleen het volgende nodig:

 php_extensions: [pdo, pdo_mysql]

Dus laten we ons nieuwe Boxfile maken en opslaan:

 web1: php_extensions: [pdo, pdo_mysql]

We zullen dit later gebruiken.


Stap 7 - Maak een database

Op het moment van schrijven ondersteunt Pagoda Box alleen MySQL-databases, wat goed is, want dat is wat de meeste ontwikkelaars gebruiken.

We kunnen zoveel kleine database-exemplaren activeren als we gratis willen; we beginnen pas te betalen wanneer ze groter worden, dus je zult niet verrast worden door een enorme rekening alleen voor het bouwen van een website. Net als de webinstanties kunnen ze ook worden geschaald om mee te groeien met uw website.

Klik op de knop om een ​​nieuwe te maken + pictogram en geef het een naam. Je zult een voortgangsbalk bovenaan zien staan ​​tijdens het bouwen; dan wordt de pagina vernieuwd.


Stap 8 - Verbinding maken met uw app

Verbinden via PHP is een makkie. Je krijgt meerdere $ _SERVER variabelen, die referenties bevatten voor elke database die u hebt. Dit betekent dat je hard-gecodeerde wachtwoorden uit je applicatie kunt houden - wat erg handig is als je niet wilt dat al je ontwikkelaars live-wachtwoorden zien, of als je je volledige website hebt op GitHub, zoals sommige mensen beginnen te doen.

 $ db = nieuwe PDO (sprintf ('mysql: host =% s; dbname =% s; poort =% s', $ _SERVER ['DB1_HOST'], $ _SERVER ['DB1_NAME'], $ _SERVER ['DB1_PORT'] ), $ _SERVER ['DB1_USER'], $ _SERVER ['DB1_PASS']);

Dit is een eenvoudig voorbeeld van de gebruikte variabelen - verbinding maken met uw MySQL-database via de PDO-extensie. Als u een framework gebruikt, zoals CodeIgniter, kunt u die variabelen invoegen in uw database.php configuratiebestanden.


Stap 9 - Op afstand verbinden

Sommige webservers - met name de gebruikelijke cPanel-setups - hebben phpMyAdmin geïnstalleerd en kunnen worden geconfigureerd om externe toegang tot de MySQL-databases mogelijk te maken.

In plaats van deze aanpak gebruikt Pagoda Box Ruby Gem voor onder andere het creëren van een tijdelijke beveiligde SSH-tunnel. Dit betekent dat uw MySQL-databases achter een firewall zijn vergrendeld en alleen toegankelijk zijn via deze beveiligde SSH-verbinding.

Dus, om de edelsteenrace te installeren:

 $ sudo gem installeer pagode

Om vervolgens de tunnel te maken, voert u gewoon het volgende uit:

 $ pagodetunnel db1

De eerste keer dat u dit (of een ander pagoda edelsteen commando) uitvoert, moet u worden gevraagd om een ​​gebruikersnaam en wachtwoord. Dit is uw Pagoda Box gebruikersnaam en wachtwoord en is nodig zodat de edelsteen namens u kan handelen en niets te maken heeft met uw database.

 $ pagoda tunnel db1 het lijkt erop dat dit de eerste keer is dat je onze klant hebt gebruikt Gebruikersnaam: someguy Wachtwoord: Tunnel Established! Verbindingen accepteren op: ---------------------------------------------- - HOST: 127.0.0.1 (of localhost) POORT: 3307 GEBRUIKER: (te vinden in pagodabox dashboard) PASS: (te vinden in pagodabox dashboard) --------------------- -------------------------- (opmerking: ctrl-c Om deze tunnel te sluiten)

Ga naar je dashboard en klik op de database en klik vervolgens op "Referenties weergeven" om een ​​informatievenster als dit te zien:

Gebruik deze inloggegevens om verbinding te maken. Vergeet niet om te specificeren welke poort; het staat vermeld in de uitvoer van het juweel hierboven - niet het groene vak. Vergeet niet dat u verbinding maakt met de lokale tunnel, niet rechtstreeks naar de database.


Stap 10 - Een blog maken

Wat voor soort tutorial zou dit zijn als het niet ging om het maken van een blog in 20 minuten?

Voor alle ontwikkeling moet je dingen echt lokaal bouwen met MAMP, XAMPP, WAMP, enz., Vervolgens code- en databasewijzigingen implementeren met behulp van een soort van "Migraties" of schema's voor het bijhouden van wijzigingen, maar we doen dit op de ouderwetse manier.

Maak eerst op afstand verbinding met uw database via de tunnel en voer vervolgens deze query uit om een ​​nieuwe tabel te maken:

 CREATE TABLE berichten ('id' int (11) NOT NULL AUTO_INCREMENT, 'title' varchar (255) NOT NULL, 'slug' varchar (255) NOT NULL, 'samenvatting' tekst NOT NULL, 'body' tekst NOT NULL, ' created_at 'int (11) NOT NULL,' updated_at 'int (11) NOT NULL, PRIMARY KEY (id)) MOTOR = InnoDB; INVOEGEN in posts VALUES ('1', 'Vrouwen houden van jongens die FuelPHP gebruiken', 'vrouwen-liefde-jongens-wie-gebruik-brandstofpiep', 'Het is een bewezen feit dat meisjes van ontwikkelaars houden, maar dingen zijn nog nooit zo geweest goed voor PHP-ontwikkelaars Iedereen die FuelPHP begint te gebruiken, krijgt binnen de eerste maand 150% meer vrouwen. "" Het is een bewezen feit dat meisjes van ontwikkelaars houden, maar dingen zijn nog nooit zo goed geweest voor PHP-ontwikkelaars. het gebruik van FuelPHP krijgt 150% meer vrouwen binnen de eerste maand. Fact. ',' 1322825332 ',' 1322934052 '), (' 2 ',' Mensen die echo HTML van apps sterven jonger ',' slechte praktijken ',' Wetenschappers hebben bewezen dat PHP-ontwikkelaars die rechtstreeks HTML van onze PHP-bestanden echoën, jonger overlijden Vaak gebeurt dit terwijl de ontwikkelaar op kantoor is, terwijl ze op hun stoel zitten, lijden ze aan meerdere wonden, maar blijkbaar zijn er geen getuigen, ook al waren hun collega's in de office \ "slechte code \" hele dag opnieuw invoeren. ',' Belangrijke hoofdtekst ',' 1322826479 ',' 1322826479 ');

Met enkele testpalen op zijn plaats kunnen we deze index.php maken:

 query ('SELECT * from posts') als $ rij) echo "

$ Row [ 'title']

"; echo"

Geplaatst: ".date ('l jS \ of F Y', $ row ['created_at'])."
"; echo $ row ['samenvatting']."

";

Met dat bestand opgeslagen en onze nieuwe Boxfile (vanaf stap 6) kunnen we deze nieuwe wijzigingen implementeren:

 $ git add Boxfile index.php $ git commit -m "Toegevoegd Boxfile en gedeactiveerde index.php veranderingen" $ git push pagoda master

Ga naar "http://my-awesome-app.pagodabox.com" en bekijk de uitvoer:

Dit is duidelijk niet iets dat u op uw website wilt laten draaien, maar het doet genoeg. U kunt zien dat de inhoud van uw database wordt uitgevoerd naar de browser en uw demo-URL werkt. Je kunt dit vervangen door je CMS naar keuze, of iets op maat bouwen.


Stap 11 - Gebruik een echt domein

Het heeft geen zin om je geweldige nieuwe blog op een pagodabox.com subdomein; dus laten we er een domein op parkeren.

Eerst voegt u op het tabblad DNS / SSL van uw dashboard enkele vermeldingen toe voor uw domein:

Nu uw aanvraag gereed is om een ​​domein te accepteren, gaat u naar degene die de DNS voor uw domein afhandelt. Ga naar het DNS-beheergebied en stel een EEN opnemen voor "Myawesomedomain.com" zijn "50.97.141.37" - dat is het IP-adres vermeld op de interface voor uw app. Deze IP-adressen zijn niet uniek per toepassing, maar zullen niet altijd hetzelfde zijn. Stel een CNAME-record in voor "Www.myawesomedomain.com" naar alias "Myawesomedomain.com" en je moet helemaal klaar zijn.


Samenvatting

Dit kan allemaal nogal afwijken van hoe je op dit moment werkt, maar begin te bedenken hoeveel werk je op de lange termijn bespaart. Het gebruik van PaaS is dezelfde reden waarom we jQuery gebruiken via native JavaScript, of PHP frameworks over het schrijven van native PHP. Waarom knoeien met kleine details als je in plaats daarvan kunt focussen op het bouwen van een geweldige app?

Andere alternatieven die u zou kunnen overwegen zijn PHPFog en Orchestr.io, die beide vergelijkbare services bieden. Veel plezier en bedankt voor het lezen!