PHPLoy — SFTP GIT deployment

Daniel Akos Kovacs
3 min readJul 28, 2016

--

Munkám során egyre többször futok bele abba a szituációba, hogy ugyan a fejlesztéseket GIT verziókezelőn keresztül szeretném menedzselni és deployolni, viszont a célszerveren / tárhelyen nincs Git telepítve, vagy erre nincs lehetőség (pl. shared-hostingon).

Ugyan a weben fellelhető jó pár deployment tool, ezek nagy része fizetős szolgáltatás, illetve az ingyenes csomag általában komoly korlátozásokkal jár (1 repo, 1 SFTP szerver, napi deploymentek korlátozva, stb…)

Sok kutatás után végül rátaláltam a PHPLoy ingyenes megoldására, amely egy local környezetből, CMD-ből / terminálból menedzselhető deployment tool.

A projektet a Github-ról érhetjük el:

https://github.com/banago/PHPloy

Telepítés, használat:

  • A projektet klónozzuk le gépünkre, vagy töltsük le .zip formátumban a legfrissebb release csomagot
  • A csomagban található phploy.phar file-t másoljuk át a local projektünk root könyvtárába, majd nevezzük át phploy-nak (tehát el kell hagyni a .phar kiterjesztést) (fontos, hogy azt a lokális könyvtárat használjuk, amelyből a Git reponkat is kezeljük)
  • Windows alatt szükséges a PATH értékek beállítása is az alábbi issue alapján: https://github.com/banago/PHPloy/issues/214
  • Projektünk root könyvtárában adjuk ki az init parancsot
php phploy --init
  • A fenti parancssal initalizáljuk a phploy tool-t a projektünkben, amely létre fog hozni egy phploy.ini filet az alap konfigurációs értékekkel
  • Editorunk segítségével módosítsuk a konfigurációs beállításokat:
[staging]
scheme = sftp
user = example
; When connecting via SFTP, you can opt for password-based authentication:
pass = password
; Or private key-based authentication:
privkey = 'path/to/or/contents/of/privatekey'
host = staging-example.com
path = /path/to/installation
port = 22
; You can specify a branch to deploy from
branch = master
; File permission set on the uploaded files/directories
permissions = 0700
; Files that should be ignored and not uploaded to your server, but still tracked in your repository
exclude[] = 'src/*.scss'
exclude[] = '*.ini'
; Files that are ignored by Git, but you want to send the the server
include[] = 'js/scripts.min.js'
include[] = 'js/style.min.css'
include[] = 'directory-name/'
; Directories that should be copied after deploy, from->to
copy[] = 'public->www'
; Directories that should be purged after deploy
purge[] = "cache/"
; Pre- and Post-deploy hooks
pre-deploy[] = "wget http://staging-example.com/pre-deploy/test.php --spider --quiet"
post-deploy[] = "wget http://staging-example.com/post-deploy/test.php --spider --quiet"
; Works only via SSH2 connection
pre-deploy-remote[] = "touch .maintenance"
post-deploy-remote[] = "mv cache cache2"
post-deploy-remote[] = "rm .maintenance"

Ahogy láthatjuk, sok konfigurációs érték áll rendelkezésünkre, beállíthatjuk a deployment kapcsolatot, megadhatunk fileokat, könyvtárokat, melyeket nem szeretnénk kiküldeni a szerverünkre, beállíthatjuk, hogy a sikeres deploy után melyik könyvtárat ürítse a script (purge, pl cache könyvtár ürítése). Szintén beállíthatunk több deployment környezetet is eltérő konfigurációs beállításokkal (develop, master, production, stb…)

A beállítások után a deploy folyamatot a következő parancssal indíthatjuk el:

php phploy staging

A ‘staging’ kapcsoló fogja megmondani a scriptnek, hogy melyik branchet kell deployolnia. Ha ezt elhagyjuk, akkor az config file-ban meghatározott összes branchen végig fog futni a scriptünk.

Az első indításkor még nem létezik tárhelyünkön a ‘revision’ file, így első lépésében a phploy összehasonlítja a szerver és a git repo tartalmát. Ha különbséget lát, akkor a példa alapján a ‘master’ ág módosításait deployolja a szerverrünkre, majd a módosításokat letárolja a ‘revision’ file-ban. A következő deploy során először ezt a file-t fogja ellenőrizni, majd ez alapján folytatódik a folyamat (deploy, vagy megszakad mivel a környezetek megegyeznek).

Természetesen lehetőségünk van egy előző commit-ra is visszaállni, ehhez a következő parancsot kell kiadnunk:

phploy --rollback="commit-hash-goes-here"

Végszó

A PHPLoy egy nagyon hasznos deployment eszköz arra az esetre, ha valamilyen okból nem áll rendelkezésünkre szerverünkön / tárhelyünkön a Git környezet. Segítségével nem kell lemondanunk a Git adta előnyökről, valamint nagyban megkönnyíti a fejlesztési folyamatunkat.

--

--