Automatizáld az FTP-re másolást

#deploy #tool #ftp #batch

Automatizáld az FTP-re másolást

Ha nem szükséges profi deploy tool használata, de már unod az FTP-n keresztüli másolgatást, akkor automatizáld azt! Ebben a cikkben készítünk egy batch fájl alapú deploy toolt, ami megkönnyíti az FTP-n keresztüli release-eket.

Mire jó ez?

Hasznos lehet ha egy parancsikonra való kattintással akarunk FTP-n keresztül felmásolni oldalakat a helyi fejlesztői környezetünkről a szerverünkre.

Ha rendelkezünk SSH hozzáféréssel, akkor elegánsabb megoldás lehet egy BASH script készítése, ami GIT alapján leklónozza a projektet és bemásolja a szerveren lévő könyvtárába.

Viszont ha nincs ilyen hozzáférésünk, vagy nem verziókezelő alapján akarunk deploy-olni, akkor ez optimális választás lehet.

Windows FTP kliens

A beépített FTP kliens-el is tudunk fájlokat másolni a szerverünkre. Ez a .bat kiterjesztésű fájl a következőképpen nézne ki.

@echo off
echo user FELHASZNÁLÓNÉV> ftp.tmp
echo JELSZÓ>> ftp.tmp
echo bin>> ftp.tmp
echo cd /ELÉRÉSI_ÚT/>>ftp.tmp
echo put FÁJL_NEVE>> ftp.tmp
echo quit>> ftp.tmp
ftp -n -s:ftp.tmp SZERVERNÉV
del ftp.tmp

A fenti fájl elindítása után létrehozunk egy ideiglenes TMP fájlt, ami tárolni fogja az FTP hozzáférésünk részleteit és sorrendben azokat a parancsokat, amiket az FTP-re való bejelentkezés után végre akarunk hajtani.

Egy probléma van csak ezzel, hogy nem teljes könyvtárszerkezetek másolására találták ki.

NcFTP kliens

A telepítéséhez navigáljunk az NcFTP letöltések oldalára, és itt válasszuk ki a Windows telepítő fájlt és töltsük le. A bejegyzéem írásának pillanatában ez az NcFTP Client 3.2.5 for Microsoft Windows nevű linken érhető el.

Miután sikeresen telepítettük gépünkre, át tudjuk írni a .bat fájlunkat egy kicsit rövidebbre.

cd c:\HELYI_ELÉRÉSI_ÚTJA_A_FÁJLOKNAK
ncftpput -u FELHASZNÁLÓNÉV -p JELSZÓ -R SZERVERNÉV /SZERVER_ELÉRÉSI_ÚT/ .\*

Legyen okosabb

Lehetséges, hogy a változtatások után bizonyos fájlokra már nincs szükség. Így az új verzió felmásolása előtt törölni lehetne a régi fájlokat a szerveren.

Az is előfordulhat, hogy a szerveren lévő fájlokról biztonsági másolatot akarunk készíteni, hogy legrosszabb esetben egy rollback-el mentsük meg ami menthető.

De persze azt sem szeretnénk, ha az időközben arra tévedt felhasználó csúnya szerver által generált hibaüzeneteket látna. Ezt elkerülhetjük egy tesreszabott index.html és egy .htaccess fájl felmásolásával.1 Természetesen ilyenkor feltételezem, hogy Apache webszerverünk van.

Tehát mit is szeretnénk elérni:

  1. Bejelentkezünk a szerverre és felülírjuk az index.html és .htaccess fájlokat. Továbbá ha van, akkor töröljük az index.php fájlt.
  2. Ezután törölünk minden más fájlt a szerver könyvtárából, miután lementettük őket a gépünkre.
  3. Majd felmásolunk minden fájlt, de közben nem írjuk felül az index.html és .htaccess fájlokat.
  4. Ha a másolás befejeződött, akkor engedélyezzük az eredeti index és .htaccess fájlokat a szerveren, hogy újra online módba kapcsoljuk az oldalunk.

Az index.html fájlunk, ami a karbantartás tényét közli a felhasználókkal valahogy így nézne ki. Opcionálisan később persze rakhatunk bele egy kis Javascript-et, ami mondjuk 5 másodpercenként rádobja az oldalt a fő URL-re.

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Karbantartás</title>
</head>
<body>
<h1>Karbantartás alatt</h1>
</body>
</html>

A .htaccess fájlunk pedig minden forgalmat az index.html fájlra irányít. 2

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/index.html$
RewriteCond %{REQUEST_URI} !\.(gif|jpe?g|png|css|js)$
RewriteRule .* /index.html [L,R=302]

A .bat fájlban pedig először töröljük a helyi backup-ot.

rmdir BACKUP_KÖNYVTÁR /s /q
mkdir BACKUP_KÖNYVTÁR

Elindítjuk a karbantartást az oldalon úgy, hogy megmentjük a backup számára az eredeti fájlokat. A backup-ból később rollback scriptet tudunk csinálni.

echo user FELHASZNÁLÓNÉV> ftp.tmp
echo JELSZÓ>> ftp.tmp
echo bin>> ftp.tmp
echo cd SZERVER_KÖNYVTÁR>>ftp.tmp
echo lcd BACKUP_KÖNYVTÁR>>ftp.tmp
echo get index.html>> ftp.tmp
echo get index.php>> ftp.tmp
echo get .htaccess>> ftp.tmp
echo delete index.html>> ftp.tmp
echo delete index.php>> ftp.tmp
echo delete .htaccess>> ftp.tmp
echo lcd KARBANTARTÁS_KÖNYVTÁR>> ftp.tmp
echo put index.html>> ftp.tmp
echo put .htaccess>> ftp.tmp
echo quit>> ftp.tmp
ftp -n -s:ftp.tmp SZERVERNÉV
del ftp.tmp

Letöltjük a szerveren lévő fájlokat a backup könyvtárba. Az ncftpget parancs -DD paraméterét használjuk ki, ami törli is a sikeresen letöltött fájlokat a szerverről.

cd BACKUP_KÖNYVTÁR
rename index.php index_original.php
rename index.html index_original.html
rename .htaccess .htaccess_original
ncftpget -u FELHASZNÁLÓNÉV -p JELSZÓ -R -DD SZERVERNÉV BACKUP_KÖNYVTÁR SZERVER_KÖNYVTÁR
delete index.html
delete index.php
delete .htaccess
rename index_original.php index.php
rename index_original.html index.html
rename .htaccess_original .htaccess

Aztán feltöltjük a helyileg tárolt fájljainkat.

cd HELYI_KÖNYVTÁR
rename index.php index_original.php
rename index.html index_original.html
rename .htaccess .htaccess_original
ncftpput -u FELHASZNÁLÓNÉV -p JELSZÓ -R SZERVERNÉV SZERVER_KÖNYVTÁR .\*

Ha sikerült, akkor már csak a 302 redirect-et kell megszüntetni az oldalunkon.

echo user FELHASZNÁLÓNÉV> ftp.tmp
echo JELSZÓ>> ftp.tmp
echo bin>> ftp.tmp
echo cd SZERVER_KÖNYVTÁR>>ftp.tmp
echo delete index.html>> ftp.tmp
echo delete .htaccess>> ftp.tmp
echo rename index_original.php index.php>> ftp.tmp
echo rename index_original.html index.html>> ftp.tmp
echo rename .htaccess_original .htaccess>> ftp.tmp
echo quit>> ftp.tmp
ftp -n -s:ftp.tmp SZERVERNÉV
del ftp.tmp

És készen is lettünk egy olyan script-el ami nem csak törli a fájlokat a szerverünkről az újak felmásolása előtt, hanem biztonsági másolatot is csinál belőlük továbbá le is rakja az oldalt karbantartási üzemmódba.

Hogyan tovább?

Csinálhatunk egy rollback script-et, paraméterezhetővé vagy konfigolható tehetjük a .bat fájlunkat vagy megcsinálhatjuk verziókezelő alapúra is ezt a deploy fájlt.

A teljes forráskódért és további hasznos dolgokért látogassátok meg a kis batch tool-om Github oldalát: Batch FTP Deploy


  1. Másik megoldás lehet, hogy ideiglenes redirect-et adunk meg a .htaccess fájlunkban, ami nem egy belső, hanem egy külső oldalra navigálja a felhasználót. Ilyenkor nem kell azzal törődnünk, hogy megkíméljük a karbantartás miatt felmásolt fájlokat az FTP-re másoláskor. 

  2. A 302 az csak ideiglenes átirányítást jelöl, míg a 301 a véglegeset. 

További tartalmak