Patiko? Prenumeruok el. paštu

Teisingas web projektų publikavimas 2

Kažkiek paeksperimentavęs su keletą publikavimo metodų, nusprendžiau, kad man vis dėlto pats priimtiniausias publikavimo metodas Capistrano. Nors jis labiau skirtas ruby tipo projektams publikuoti, bet jis pakankamai lengvai pritaikomas ir tarkim PHP projektams. Vienintelis minusas, kad jis skirtas publikuoti į serverį kuris turi ssh prisijungimą.

Gan neblogas pavyzdys galimybių pritaikytų PHP projektui yra symfony applikacijų deploymentas. Kitiems užtektų daug paprastesnio varianto. Pavyzdžiui aš naudoju tokio tipo scriptą. Uždėjau komentarų ką kai kurios eilutės reiškia.

# Projekto pavadinimas
set :application, “projektas.lt”

# Serverio adresas turintis ssh prisijugima
role :web, “server.zilionis.net:2222″

# Serverio vartotojas. Slatazodzio nenaudoju nes prisijungimas padarytas
# automatinis pasinaudojus rsa raktais
set :user, “zilionis”

set :use_sudo, false

# direktorija kur bus publikuojamas projektas
# document rootas bus tarkim /home/zilionis/domains/projektas.lt/web/current
set :deploy_to, “/home/zilionis/domains/#{application}/web/”
set :shared, “/home/zilionis/domains/#{application}/web/shared”

# SVN nustatumai
set :urlrepository, “http://svn.repo.server/repos/projektas_lt/trunk”
set :scm_username, “JusuSvnUseris”
set :scm_password, “JusuSvnSlaptazodis”

set :repository,  “–username #{scm_username} –password #{scm_password} –no-auth-cache #{urlrepository}”

set :checkout, “export”
set :keep_releases, 3

desc “This will deploy the app”
task :live do
# istraukiam is svn’o projekta
run “svn –quiet #{checkout} #{repository} #{release_path}”

# darom symbolik linkus dideliems libams kurie ne svn’e
run “ln -nfs #{shared}/lib/Zend #{release_path}/project/lib/Zend”
run “ln -nfs #{shared}/lib/ext #{release_path}/public_html/scripts/ext”

# uzchodiman reikiamus failus/direktorijas
run “chmod -R 777 #{release_path}/project/cache”

# paradom aktyvu releasa
run “ln -nfs #{release_path} #{current_path}”
end

Skanaus :)

Teisingas web projektų publikavimas

Dirbant su didesniais web projektais yra vienas žingsnis, kuris kartais kelia net galvos skausmą. Nors tai atrodytų elementaru – projekto publikavimas, atnaujinimas, bet tai yra dažnai sudėtingiau nei atrodo.  Su kokiomis problemomis dažniausiai galima susidurti?

Tarkim el. parduotuvei yra užsakytas didelis atnaujinimas, kuriame yra tiek dizaino atnaujinimai, tiek naujų funkcionalumų įdiegimas. Publikuojant visuomet reikia prisiminti, kad:

  • Įkelti visus reikalingus failus

Jei galvojate, kad protingas sprendimas viską projektą tiesiog įkelti negalvojant tai tinka ne visuomet. Tai tinka dažniausiai tik mažoms svetainėms. Geriausias sprendimas yra toks, kad atnaujinti tik, tai kas pasikeitė. Tai galėtų padėti dalinis svn exportavimas naudojant papildomus skriptus (tarkim naudoju kartais mofio šiek tiek modifikuotas mano), arba naudojantis servisais kurie suteikia automatinio deploymento galimybes tarkim springloops.com, beanstalkapp.com ir t.t. Kelti visą projektą rankiniu būdų yra blogai, nes tai pirma pakankamai ilgai užtrunka (nebent kopijuotume vieną suarchyvuotą failą ir jį vietoje išarchyvuotumėte), bet ir galimi dažni tarkim ftp sutrikimai.

  • Nustatyti teisingas direktorijos teises
  • Atnaujinti duombazes
  • Išvalyti (jei reikia) naudojamą cache

Kiti darbai dažniausiai daromi rankiniu būdu, bet to galima išvengti. Tarkim įkėlus failus galima turėti savo deploymento skriptą, kuris atlieka vis reikalingus darbus už jus. Springloops turi galimybę “papinginti” nustatytą url, kai deploymentas yra užbaigtas. O ten pagal jūsų nustatys scenarijus atlieki veismai, tarkim

<?php Object::getCache()->clearCache();

$aDirsToChmod = array(‘path/dir1′,’path/dir1′);
foreach ($aDirsToChmod as $sDir) { chmod($sDir, 777);} ?>

Su duomebazių atnaujinimais, galimi įvairūs scenarijai, tiek rankinis, tiek per pagalbines priemos.

  • Galite pasidaryti savo duombazių atnaujinimo mecganizmą su pagalbine db lentele, kurioje saugomi versijuojami db atnaujinimai
  • naudoti SQL ORM tarkim Doctrine

Galima naudoti ir daugelį kitų priemonių tokių kaip Capistrano (padarytas su rubiu), Fredistrano (PHP, CakePHP), Phing

O kaip realizuojate jūs?

Tinklaraštininko deklaracija

Blogerio deklaracija

Aš esu blogeris. Tai reiškia, kad dalinuosi savo mintimis, žiniomis, patirtimi ir klaidomis su daugeliu žmonių – visais tais, kurie dėl kokių nors priežasčių aplanko mano blogą. Aš neretai klystu, aš esu tik žmogus, tačiau visvien stengiuosi padaryti kažką gero – bent jau dalintis už dyką su kitais tuo, ką turiu – ta pačia patirtimi, žiniomis, mintimis, klaidomis ir nuomonėmis. Todėl aš skelbiu savo deklaraciją.

Tai ne tik mano deklaracija. Išties, visa ši deklaracija – tai tik mintys, kurias dažnai tenka išgirsti iš kitų blogerių. Tai mintys, kurias išsakė ir didžiausi blogosferos metrai, ir daugybė mažiau žinomų autorių. Tai mintys, kurios kilo iš diskusijų su kitais blogeriais. Tai ir mano mintys. Mintys apie tai, ką gali daryti blogeris, ką jis duoda kitiems, ko jis tikisi iš kitų. Išties gavosi visai nedaug… Vos keletas punktų.

Man svarbios atgalinės nuorodos

Man negaila mano parašytų straipsnių – imkite juos. Galite dėtis į savo interneto puslapius, jei jie jums patiko, jei jie gali būti įdomūs jūsų skaitytojams. Tačiau aš esu aš, aš esu straipsnio autorius, todėl aš noriu kelių paprastų dalykų – nuorodos į savo blogą ir į straipsnio originalą. Tikros pilnavertės nuorodos, o ne kažkur paslėpto parašymo kad “Autorius – Kažkasten Kažkurten”. Aš esu blogeris, tai reiškia, kad aš esu ne Kažkas Kažkur, o konkretus blogeris, kurio blogas turi adresą Internete, kurio straipsnis irgi turi adresą Internete. Todėl nuorodos į mano blogą ir straipsnį iš perpublikuojamo straipsnio – tai besąlygiška sąlyga. Ir ją juk lengva įgyvendinti, tiesa?

Nuorodos straipsnyje – tai straipsnio dalis

Jei aš įdedu nuorodas į kažką savo straipsnyje, noriu, kad ir šios nuorodos būtų išsaugotos tiksliai tokiame pavidale, kokiame buvo. Nuorodos – tai lygiai tokia pat straipsnio dalis, kaip ir kitas tekstas. Jei aš įdedu nuorodą, o ją kažkas pašalina – tas kažkas sugadina mano tekstą. Aš neleidžiu perpublikuoti savo tekstų, jei šalinate iš jų nuorodas, jas keičiate ar pridedate krūvas savų, visiškai disonuojančių su tekstu. Aš leidžiu perpublikuoti savo tekstus tiksliai taip, kaip jie buvo paskelbti mano bloge. Su visomis nuorodomis, nes nuorodos – tai teksto, internetinio teksto dalis.

Straipsnis yra straipsnis, o ne redaktorių žaislas

Taip, man negaila dalinti savo tekstų. Bet aš noriu, kad jie liktų tokie, kokie yra. Neperdaryti į kažin ką, neiškarpyti. Nesumalti į kažką neaiškaus, prisidengiant kažkokiais “mes paredagavome, kad atitiktų VLKK” ar dar kokiais nors išvedžiojimais. Jei aš padariau klaidą – tai mano klaida. Gal būt, netgi sąmoninga. Jei aptikote rašybos klaidą ir galvojate, kad tai mano žiopla klaida, kurią norite pataisyti – žinoma, kad galite tai padaryti. Bet susitikrinkite su manimi, prieš publikuodami. Tai juk paprasta.

Elementarios etikos normos

Ir dar, aš noriu, kad jei jau skelbiate mano tekstus, tai būtų daroma etiškai. Aš neduodu leidimo juos perpublikuoti tiems, kas platina ar reklamuoja pornografiją, greitus kreditus ar SEO “optimizavimus”. Neduodu leidimo ir tiems, kas galvoja, kad gali iš blogerių tyčiotis. Aš duodu leidimą tiesiog normaliems padoriems žmonėms.

Deklaracijos reziume

Tokia paprasta blogerio deklaracija. Tai ne tik mano deklaracija. Aš tik užrašiau tai, kas sukasi daugelio galvose. Jei esate blogeris, su ja sutinkate – imkite ją ir skelbkite. Jei perpublikuojate blogerių straipsnius – laikykitės jos. Juk tai paprasta – dėti atgalines nuorodas, negadinti nuorodų tekste ir patį straipsnį išlaikyti tokį, koks buvo originalas.

Prisidedam prie Tinklaraštininko deklaracijos

Laisvės kelias: plytos rezervacija

Aš jau turiu nuosavą plytą. Įsidėk ir tu, siūlo projektas Laisvės kelias.

Apache virtualhost skirptas

Kaip ir daugelis mėgstu viską pasidaryti pagal savo poreikius, serverio administravime nuotaikos tokios pačios. Valdymo panelės yra gan naudingas įrankis, bet galima laisvai gyventi ir be jų. Be to dažnai jie naudojai papildomų bibliotekų, programų kurios dar papildomai ryja serverio resursus.

Kurti rankiniu būdu naujus apache VirtualHost’us yra monotoninis darbas, daug lengviau turėti skriptuką, kuris už jus visą darbą atliks. Mano atveju naudojamas bash skriptukas yra toks:

#!/bin/bash
clear
echo -n “Domeno vardas: “; read domain
name=$(echo $domain | cut -d. -f1)
echo
echo “Ar nori sukurti domena “$domain;
echo -n “(y/n) “; read ans2
if [ "$ans2" = "y" ]; then
echo Kuriam
else
echo Ir vel rasai nesamones…
exit 0
fi

mkdir -p /home/useris/domains/$domain/public_html
mkdir -p /home/useris/domains/$domain/logs
echo hello $domain > /home/useris/domains/$domain/public_html/index.html
chown -R useris:useris /home/useris/domains/$domain

echo
echo > ~/temp
echo ‘<VirtualHost *:80>’  >> ~/temp
echo ‘     ServerName      ‘$domain >> ~/temp
echo ‘     ServerAlias      www.’$domain >> ~/temp
echo ‘     DocumentRoot     /home/useris/domains/’$domain’/public_html’ >> ~/temp
#echo ‘     CustomLog       /home/useris/domains/’$domain’/logs/access.log combined’ >> ~/temp
#echo ‘     ErrorLog       /home/useris/domains/’$domain’/logs/error.log’ >> ~/temp
echo ‘</VirtualHost>’ >> ~/temp
echo Done.

cat ~/temp >> /home/useris/conf/vhosts.conf

echo -n “Restart the Server? (y/n) “; read ans4
if [ "$ans4" = "y" ]; then
sudo /sbin/service httpd restart
echo
echo Server Restarted.
exit 0
else
echo
echo Server Not Restarted.
exit 0
fi

Cacti – resursų stebėjimas

Prieš pusę metų rašiau apie panašų skirtą munin leidžiantį stebėti serverio resursų grafikus. Per PHP konferenciją sužinojau apie alternatyvą cacti, kuris leidžia taip pats stebėti norimo serverio resursus: apkrovimas, cpu, atmintis, mysql ir t.t Tam yra prirašyta daug įvairiausių pluginų (cactiusers , google code projekte ir t.t). Jis tiesa pasakius man labiau patiko nei munin.

Įsivaizduokite, kad šio įrankio pagalba galite matyti, kad ir jūsų spausdintuvo kasečių būseną, ar kokių servisų aktyvumą (tarkim lėktuvų skrydžių api kvietimus ir stebėjimas ar jie pavyko ar ne). Kadangi visa sistema parašytą su PHP tai pluginai ganėtinai lengvai yra rašomi su šia programavimo kalba.
Dabar tereikia tik surasti kritinius sau reikalingus savo projektuose servisus ir pasirašyti pluginą.

Norėjau tiesa tokio resursų stebėjimo, kadangi paprastai lietuvių hostingo tiekėjai neteikia informacijos apie VDS statusus, reikia turėti savo. Prieš kelias dienas serveriai.lt paleido galimybę matyti interneto sunaudojimo, apkrovimo, atminties bei talpos grafikus. Žinoma galėtų tokių būti ir daugiau: apache, mysql stebėjimai. Bei galėtų ateiti pranešimai apie pašto, http, mysql būsenas (veikia/neveikia). Gal dar patobulins? Laukiam…

Pavasarinė akcija mac vartotojams. Dar vienas programų paketas už mažą kainą.


Manau yra teisingas požiūris pratintis mokėti už programinę įrangą kurią naudoji. Ok jei tenkinta tave open source tebūnie, bet ne viską ten rasi. Įdomi yra MacOs bendruomenė kuri dažnai siūlo įsiigyti krūva reikalingų/nereikalingų programų su didele nuolaida. Tokių akcijų vyksta pakankamai dažnai. Kažkada pražiopsojau proga įsigyti tarkim Parallels nemokama, tad dabar yra nebloga akcija su kuria galima įsigyti šią programą ir dar dešimt kitų su tikrai nebloga nuolaida. Lekiam į muPromo :)
Keista Windows programų developeriai kaip ir gyvena atskirai, nieko panašaus nedaro.

Denyhosts – apsaugome ssh nuo įsibrovėlių

Kol tavo kompiuteris nėra tiesiogiai pajungtas prie Interneto tol nejauti kokie dažni yra bandymai įsilaužti į jį. Žinoma dažniausiai tokie bandymai būna akli, pagal nustatytus scenarijus bandoma ieškoti skylių žinomuose programose/skriptuose ir pan. Turint serverį atakos taip pat yra labai dažnos. Galbūt vienos dažniausios tai atakos brute force tipo, kurios bando atspėti vartotojo vardą, bei slaptažodį. Dėl to visų pirma rekomenduotina neleisti prisijungti apskritai root vartotojui, taip sumažinant prisijungimo galimybes. Dar vienas rekomenduotinas būdas yra blokuoti blogiukus. Tai visai gražiai atlieka denyhosts skriptukas, kuris po tarkim 10 blogo slaptažodžio įvedimo blokuoja tolesnę galimybę prisijungti.  Instaliuoti gana paprasta tiek CentOs, tiek Debian ar kituose operacinėse sistemose.  Paprastai į dieną atsiranda bent keletą naujų blokuojamų IP adersų.

ActiveCollab – patogus projektų valdymas

Viena iš sėkmingų, bet kokio biznio paslapčių yra paprasčiausias darbų planavimas bei efektyvus valdymas. Kol darbų yra mažai, kad ant rankų suskaičiuoti problemų nėra, bet augant bendradarbių kiekiui ir darbų apimtims atsiranda poreikis darbų įrankiams (programoms). Kadangi pats dirbu jau daugelį metų su web projektais, tai visa tai bus iš Internetinių projektų varpinės.

Esu išbandęs ne vieną projektų valdymų sistema, tiek pats kūręs ar adaptavęs, bet tikrai dar neradau pakankamai idealios. Kaip visuomet, vienuose trūksta funkcionalumo, kitos tiesiog visiškai nepatogios arba viskas remiasi į kainą.

Šiuo metu į mano akiratį pateko projektas pavadinu activeCollab projektų valdymo sistema ir aš ja pakankamai sužavėtas.

Kaip ir priklauso pirmas, bet kokių darbų skirstymas yra klientas (firma). Kiekvienam klientui gali būti priskiriami atsakingi asmenys ir jie priskiriami prie tos firmų projekto(ų). Kaip ir suprantama klientas gali turėti neribojamą kiekį projektų. Na o su projekto valdymui skiriami įvairiausi naudingi moduliai.

  • Užduotys (Checklist). Paprasčiausia užduotis, kuri gali būti išskaidyta į mažas sub užduotis.  Bent man susidarė vaizdas, kad jis turi mažiausią panaudojimą. Nebent sudaromas mini patikrinimo testas, kurį reikia patikrinti prieš realizuojant kokį nors žingsnį (patikrinti a,b,c,d … atlikti x,y,z)
  • Daug rimtesnis yra Tickets. Jį galima naudoti tiek bugtrack, tiek naujų užduočių skyrimui. Kiekvienas ticketas gali turėti ir smulkesnes užduotis, bei gali būti komentuojama, prisegami failai ir pan.
  • Jei naudojate versijavimo sistemas padės  ir Sources (Subversion) moduliukas, kuris integruotas į šią sistemą. Vienas gražiausių dalykų, kad komentuojant  commitus automatiškai susiejama su ticetais, milestonai ir pan. Tereikia teisingai komentuoti. (Complete Ticket #121, Ticket 343: Fixing email sending bug ir pan)
  • Visi atliekami darbai gali būti registruojami ir sugaišto laiko duomenys ir to gaunasi paprastas TimeSheet moduliukas.
  • Pagal atliktus darbus, klientui galima išrašyti Sąskaitas faktūras (Invoice) modulyje. Standartinis sąskaitų išrašymas nėra stiprus kol kas (bent ne tokį įsivaizduoju), bet visuomet galima išplėsti pačiam ar atlikti tai rankiniu būdu. Formuojant sąskaitą už atliktus darbus paprasčiausia viskas susumuojama. Kartais norisi pateikti detaliau.
  • Visai gerai integruotas El. pašto modulis, kuris automatiškai tikrina el. paštą. Gavus laišką į pagalba@projektas.lt jo turinys priskiriama kaip užduotis specialiam projektui. (Kiekvienam projektui reikės naudoti atskirą projektą). O Gavus el. laiško užduotis, paprasčiausiai galima padaryti replay ir gauti komentarą tiesiai į sistemą.
  • Kaip gi projektai be Milestone. Jiems galima priskirti užduotis, ticketus, diskusijas, failus ir kitus modulius.
  • Kiti naudingi moduliai yra diskusijos, puslapiai, failai, kalendorius ir dar keletas kitų kaip vartotojų teisės
  • Kadangi ši sistema bus talpinama pas jus – jus ja galėsite naudotis neribotai, neribojamas kiekis projektų, užduočių ir t.t.

Iki idealaus sprendimo dar trūksta daugiau svarbių dalykų kaip pavyzdžiui resursų valdymas ir pan. Bet tai gali būti praplečiama patiems tiek kuriant naujus modulius (jūs turite visus modulius) ar tiesiog naudojantis sistemos API. Yra keletą jau realizuotų papildymų iš trečių šalių – Billings, Planning module (resursų planavimas), bet kaip suprantate jie irgi mokami

Bekalbant apie gerąsias savybes reikia paminėti ir trūkumą. Kadangi tai komercinis produktas jis kainuoja. Jei jūsų firma dirba su projektais ir neturi projektų valdymo sistemos manau galėtų skirti 499$ už licenziją. Asmeninių projektų naudojimui šiek tiek per brangu.

Login 2010

Kartais norisi nueiti į kokią rimtesnę konferenciją pasisemti naujų idėjų bei minčių, bet dažniausiai tokias mintis nutraukia skaičiukai aprašymo gale nurodantys tos konferencijos/seminaro kainą. Galima tik pasidžiaugti, kad jau keletą metų vystosi konferencija Login ir ji yra pakankamai aukšto lygio. Palyginus bilieto kainą (tik 50LT) bei pranešimų kiekį gaunasi tikrai aukštas koeficientas, ypač kai žinai, kad didžiosiose Lietuvos konferencijos persunkta savireklama į vienus vartus. Nesakau, kad čia to nebus, bet to tikrai bus mažiau.

Tikrai rekomenduočiau pirmiau peržvelgti pranešėjus, kurių yra tikrai rimtų ir renginio programą. Nepamiškite to parodyti savo draugams, kurie domisi tarkim rinkodara, turi savo firmeles – manau jie turėtų susidomėti nes turinio turėsim tikrai naudingo.

Be savo srities profesionalų galėsim pasiklausti entuziastingų tinklaraštininkų trumpus pranešimus ar verslo idėjų sklaidą “Mini BarCamp”

Manau, kad iki susitikimo Siemens arenoje kovo 18d.