S PHP na Heroku

Napsal dne 10.6.2014 v Programování

Heroku je cloudová platforma jako služba (PaaS), která nabízí podporu mnoha jazyků. Nedávno však Heroku oznámil plnou podporu pro PHP

. Defaultně běží na verzi PHP 5.5 (5.5.12, 64-bit) s aktivovaným OPcache a konfigurací optimalizovanou pro Heroku. Celkově o podpoře PHP na Heroku se můžete dočíst zde.

Nyní přejděme k nahrání PHP do cloudu. Abychom toho dosáhli, je třeba mít předem připravené dvě věci:

  • Uživatelský účet na Heroku (registrace je zdarma)
  • PHP projekt se souborem composer.json popisující závislosti. Pokud Composer nepoužíváte, stačí vytvořit prázdný soubor (musí ale existovat)

Heroku pro vývoj aplikací využívá git a pro jeho manipulaci je tak třeba příkazový řádek. Heroku poskytuje vlastního CLI klienta, kterého si můžete stáhnout podle OS zde. Po jeho instalaci můžete v příkazovém řádku použít příkaz heroku login a poté se přihlásit svým emailem a heslem, které jsme zadali při registraci na Heroku:

$ heroku login
Enter your Heroku credentials.
Email: dzuelke@example.com
Password:
Could not find an existing public key.
Would you like to generate one? [Yn]
Generating new SSH public key.
Uploading ssh public key /Users/dzuelke/.ssh/id_rsa.pub

Při přihlašování dejte Y a enter k vygenerovaní vašeho SSH veřejného klíče, který později budete potřebovat.

Nyní máme vše co potřebujeme a můžeme si vytvořit nový PHP soubor index.php a do něj vložit například toto:

<?php
echo "Hello World!";
?>

Dále jak jsem již zmiňoval na začátku návodu, je třeba mít vytvořený composer.json. Jedině podle tohoto souboru Heroku automaticky pozná, že se jedná o PHP aplikaci. Nyní se můžeme vrhnout na práci s git repozitářem. Prvně si inicializujeme repozitář v našem projektu, přidáme všechny soubory a provedeme commit:

$ git init
Initialized empty Git repository in ~/hello_heroku_php/.git/
$ git add .
$ git commit -m "Initial import of Hello Heroku"
[master (root-commit) 06ba0a7] Initial import of Hello Heroku
 2 files changed, 5 insertions(+)
 create mode 100644 composer.json
 create mode 100644 index.php

Protože jsme stále přihlášení k Heroku, můžeme v něm automaticky vytvořit novou aplikaci (která náhodně vygeneruje svůj název) pomocí příkazu heroku create:

$ heroku create
Creating polar-chamber-3014... done, stack is cedar
http://polar-chamber-3014.herokuapp.com/ | git@heroku.com:polar-chamber-3014.git
Git remote heroku added

Jak můžeme vidět, vytvořil se nám git remote s názvem heroku, který dále použijeme pro jednoduché nahrání na heroku remote do větve master:

$ git push heroku master
Initializing repository, done.
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 306 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)

-----> Fetching custom git buildpack... done
-----> PHP app detected
-----> WARNING!
       Your composer.json is completely empty, please consider putting at least "{}" in there to make it valid JSON.
-----> Setting up runtime environment...
       - PHP 5.5.11
       - Apache 2.4.9
       - Nginx 1.4.6
-----> Building runtime environment...
       Loading composer repositories with package information
       Updating dependencies
         - Installing heroku/heroku-buildpack-php (dev-beta 20204c9)
           Downloading: 100%

       Writing lock file
       Generating optimized autoload files
-----> Discovering process types
       Procfile declares types -> (none)
       Default types for PHP   -> web

-----> Compressing... done, 60.7MB
-----> Launching... done, v4
       http://polar-chamber-3014.herokuapp.com/ deployed to Heroku

To git@heroku.com:polar-chamber-3014.git
 * [new branch]      master -> master

Nyní stačí zadat příkaz heroku open nebo manuálně v prohlížeči zadat adresu, v tomhle případě http://polar-chamber-3014.herokuapp.com, a náš výsledek můžeme vidět s úspěšným zobrazením Hello World!.

Heroku udává, že se zatím jedná o beta funkci, takže je možné, že se některé věci mohou ještě změnit. Tento článek vychází z anglického návodu, kde se také můžete dozvědět navíc například o škálování dyna, práci s Composerem nebo o loggování.

Štítky:
  • Ladislav Musil

    Ahoj, já jsem s tím teď dělal nějaké zkoušky a composer.json se nesmí zahrnout do gitu, když v něm nic není. Jinak to hlásí chybu: ERROR: Could not parse ‚composer.json‘; make sure it’s valid!
    Bez souboru composer.json to sice hlásí, že chybí, ale výsledný soubor to sestaví a v prohlížeči to zobrazuje. Pěkná ukázka a moc pěkná šablona.