Správné procesy při vývoji vlastního projektu

Správné procesy při vývoji vlastního projektu
« kdy: 04. 03. 2020, 19:43:40 »
Ahoj, už několik let si dělám jeden hobby projekt, který se časem ukázal jako zajímavý přivýdělek. Jde o webovou hru, klasika PHP, MySQL, HTML(5), JS. Jeho počátky sahají ještě do dob, kdy PHP 4 byla žhavá novinka a podle toho to vypadá. Špagety, PSPad, phpmyadmin, FTP, testování za pochodu atd.

Začínám ovšem cítit, že tenhle způsob vývoje není to pravé. Vlastně to vypadá tak, že upravím/vytvořím soubor, ten ručně přes ftp nahraji na živý server. Pokud je třeba, připravím/upravím předtím přes phpmyadmina databázi. No a často hledám, co se rozsypalo. Totéž v bledě modrém je JS a CSS. Jak projekt roste a času kvůli rodině ubývá, začíná to být dost namáhavé na údržbu a často se v tom ztrácím. Nejhorší situace je s databází, kde ta testovací lokální už zdaleka neodpovídá té živé, zkrátka proto, že není čas všechny ty úpravy dělat ručně dvakrát (notabene si třeba po několika dnech vzpomenout, co jsem to vlastně dělal za úpravy). A protože (bohužel) nepracuji v oboru, nějak nestíhám sledovat trendy ve způsobu vývoje a nasazení.

Dost jsem toho teoreticky načetl o verzování apod., ale všechno se to tak nějak věnuje jen jedné součásti, třeba PHP. Zbytek do toho nejsem schopný zakomponovat. Máte nějaké tipy, kde bych si o tomto mohl nastudovat více? Případně jak to děláte vy?

Abych přiblížil svoji představu ideálního postupu. Vymyslel bych Změnu. Na localu bych si upravil DB. Nějaké Kouzlo by si zaznamenávalo, jaké úpravy jsem udělal (vytvoření tabulek, edit sloupců atd.). Napsal bych patřičný PHP soubor(y), k tomu odpovídající šablony. Nějaké Kouzlo (asi GIT?) by sledovalo, co jsem upravil a co je tedy potřeba nahrát na server. Ke Změně by byl potřeba i nějaký JS, něco upravit v obecném, něco dopsat pro konkrétní stránku. Nějaké Kouzlo by sledovalo co měním a před nahráním na FTP by všechen JS sloučilo a minifikovalo. Totéž u CSS (po novu střeba sass, less... abych furt neopisoval ty samé barvy). Na konci by bylo nějaké tlačítko Deploy, které by probralo všechna Kouzla a změny promítlo na živý server. Jak moc jsem naivní? :)
« Poslední změna: 04. 03. 2020, 19:52:55 od Petr Krčmář »


Re:Správné procesy při vývoji vlastního projektu
« Odpověď #1 kdy: 04. 03. 2020, 21:45:11 »
Začal bych tím, že přestanete změny dělat ručně přes phpMyAdmina a začnete i databázi verzovat. Typicky se to řeší jako adresář plný očíslovaných aktualizačních sql souborů. Tím získáte synchronizaci mezi verzí programu a databáze (ve verzovacím systému máte php a zároveň odpovídající databázová schemata).

Koukněte například na (je to Java, ale pro php určitě také něco existuje): https://flywaydb.org/
Další možností je mít popis stavu a nástroj co vygeneruje migrace. To je třeba Liquidbase: https://www.liquibase.org/

Co se buildu (sass, minifikace, ..) týče, tak je výběr nepřeberný a hodně záleží na nástrojích preferovaných konkrétním frameworkem. Co bych ale doporučil je automatický build při commitu/pushi do verzovacího systému (GitHub, Bitbucket umí automaticky přes Travis nebo CircleCI). Výstupem pak může být třeba rovnou archiv nebo i docker kontejner.

Deploy na server se dá řešit různě. Třeba Ansible playbook, ktery automaticky vezme poslední build z verzovacího systému (viz výše) a nahraje ho na server.

Obecně je dnes hlavním zaklínadlem CI/CD. Continuous integration / Continuous delivery. Tj téměř všechno automatizované. Změna kódu se zkompiluje, automaticky otestuje a pokud projde, tak se i automaticky nahraje na server.

Re:Správné procesy při vývoji vlastního projektu
« Odpověď #2 kdy: 04. 03. 2020, 22:07:44 »
Repozitář v GIT, u nás používáme BitBucket, ale může to být cokoliv. Na zkompilování třeba composer, yarn. Na styly, minifikaci, verzování Webpack. Na deploy je podle mě nejjednodušší deployhq.com. Ten si z gitu stáhne jen změny, na své straně pustí, co je potřeba (composer, yarn, ...) a pak už jen nahraje změněné soubory přes FTP (lépe přes SSH). Poměrně jednoduché je celé to zautomatizovat.

Existuje na to i spousta dalších nástrojů, ale tyto placené (za pár jednotek dolarů měsíčně) Vám ušetří spoustu učení, jak si to vše udělat sám zadarmo (ale odvedou Vás od práce).

Na databázi, když už musíte používat MySQL, tak bych nepoužíval phpMyAdmin, ten je peklo. Zadarmo je HeidiSQL, z placených je výborný DataGrip od JetBrains.

Na všechno, co píšete, existují nástroje a vše, co chcete vyřešit je vyřešené. Kolegové zde určitě napíší další alternativy.

Re:Správné procesy při vývoji vlastního projektu
« Odpověď #3 kdy: 05. 03. 2020, 10:38:47 »
Doporučoval bych si přečíst něco málo o devops a CI/CD. Nemusíš implementovat všechno najednou ale můžeš to použít jako inspiraci a vybrat si z toho co aktuálně potřebuješ. Základem je určitě verzování kódu v nějakém version control systému, ať už GIT nebo něco jiného, přidat verzování DB, potom můžeš doplnit testovací prostředí, a někdy v budoucnu nightly buildy, unit testy, automatizovaný deployment nových verzí nebo třeba sběr vyjímek a chybových logů ze všech herních serverů na jedno místo.

Re:Správné procesy při vývoji vlastního projektu
« Odpověď #4 kdy: 10. 03. 2020, 14:26:33 »
1. verzování kódu, 2. deployment, 3. verzování databáze, 4....

3 Tě asi ani tolik netrápí, protože po těch letech asi měníš strukturu tabulek minimálně. Můžeš něco jako číslované sql s ALTER TABLE (i když lepší je, když jsou změnové příkazy generované z nějakého popisu výsledné struktury - já to znám jen pro Python/Django, ale snad už je něco i pro PHP - jenže jak říkám, při minimálních změnách to není priorita).

1 a 2 bych rozhodně obojí začal Gitem (v ostatních odpovědích si "nebo jiný verzovací systém" škrtni). Git se Ti hodí jako základ elementárního vzdělání, zálohování, přesuny mezi počítači (a tím i deployment, i když se tomu někdo bude smát), případně vývojové větve nebo vracení ke starému stavu.
Založíš si tzv.repozitář na Gitlabu (pro private projekt) nebo Githubu (pro opensource) <-tato volba není dogma, na rozdíl od výše zmíněné volby Gitu.
git clone <tvůj-projekt> (tenhle příkaz si zkopíruješ z Githubu/Gitlabu) - tím si to nahraješ na kteroukoli svou mašinu.
A když už ty zdrojáky někde máš, tak v dalším kroku je nakopíruj (jen jednou, napoprvé!, na první mašině) do toho naklonovaného adresáře.
git status - Ti řekne, které soubory se odminule změnily (po předchozí akci to tedy bude milión souborů)
git diff - Ti řekne, co se zmenilo v jednotlivých souborech
úpravou souboru .gitignore odstraníš z "git status" všechny soubory, které sledovat/zálohovat/přenášet nechceš (soubory s hesly,tokeny)
git add . - všechny soubory naplánuješ, že se zapíší do příští dávky změn (místo tečky můžeš uvádět jednotlivé soubory)
git commit -m "popis/název další dávky změn" - zapíšeš dávku změn
git push - odešleš všechny commity na server Github/Gitlab
git pull - na kterékoli jiné mašině si takto stáhneš všechny změny z jiných mašin. Tím máš tedy vyřešen i ten deployment, samozřejmě musíš mít na to otevřené příslušné porty, řekl bych 443, když jsi klonoval s https, nebo 22, když jsi klonoval s ssh (což je lepší).
Jo a taky to takhle půjde asi jen na VPS, jestli jedeš na obyč. hostingu (nemáš VPS) budeš potřebovat nějaký jiný nástroj na nakopírování pouze změn. Pro ftp a Git je např. Gitftp. Když už teda jsi byl u toho Ftp, což ale není právě perspektivní protokol. Pro ssh si vhodný nástroj musíš najít nebo někdo poradí.

git log -n 10 - prohlédneš historii (nebo si přidej nějaký nástroj: gitk, tig, ..)
No a to je vše. Jestli používáš Windows, možná se to tam nepatrně liší (s těma "tečkama"?).
Časem se zlepši tak, že začneš používat větve/branch.
git branch - ukáže Ti, jaké větve máš (než se s tímto rozjedeš, bude to jen "master").
git checkout -b <pojmenování-větve> - na vývojářské mašině si takhle založ větev a commitama v ní směřuj třeba k dotvoření nějaké nové vlastnosti.
Dál už se přepínáš bez -b:
git checkout <pojmenování-větve> - když chceš dělat na té nové vlastnosti (commity a pushe se Ti nemíchají do master)
git checkout master - když chceš dělat na tom, co máš nasazeno (třeba drobnou opravu chyby)
git merge <pojmenování-větve> - novou větev jsi dodělal a celou ji bereš do "hlavního vývoje"


alfi

  • ****
  • 324
    • Zobrazit profil
    • E-mail
Re:Správné procesy při vývoji vlastního projektu
« Odpověď #5 kdy: 10. 03. 2020, 17:13:53 »
Různých aplikací je na to dneska dost - jen zabere fůru času se v nich zorientovat a každou se naučit aspoň trochu rozumně používat.. :)

Základ je určitě ten git - trackování změn, možnost návratu k předchozí verzi. Celkem úspěšně jej používám i k nasazování do produkce (produkce má vlastní branch, do které se mergujou změny z masteru - je vidět, co se mění, co je třeba otestovat, jde se vrátit zpátky...).

Základní změny v db jde taky trackovat v gitu - do souboru stačí udělat dump schematu, příp. i číselníků a commitovat změny. Pokud jich není moc, dají se i celkem slušně ručně zreplikovat na produkci. Další nástroj je třeba doctrine migrations ale člověk se jej zase musí naučit používat.

Pro verzování php knihoven i třeba php extensions je určitě composer. Není kdovíjak úžasný a při provozu spolkne klidně i několik GB RAM, ale pro php asi není nic jiného a používají jej všichni.

Dál alespoň základní automatické testování - phpunit. Po všech změnách může udělat méně či více testů, že se (asi) nic nerozbilo. Dá se doplňovat-rozšiřovat postupně. Pořád lepší testovat něco málo než vůbec nic :)

Každopádně vždycky je užitečné do logu psát důležité akce i neočekávané stavy - aby šly zpětně dohledat, co se v aplikaci děje.

A pak je hromada různých nástrojů, které to více či méně automatizujou, opakujou na různých dev-test-prod prostředích.. ale podle mně pro amatérskou práci, kterou dělám sám nebo v minimu lidí, nejsou vůbec potřeba. (vagrant, docker,  magallanes, npm - gulp, webpack, jenkins, puppet, kubernetes, ansible... a každý den vznikají nové - s nadsázkou, než se člověk jeden nástroj naučí, už není moderní a dělá se to trochu jinak a s jiným nástrojem :) )