Componette - jak se buduje nette portál 17/01/2016

Jak jsme postavili automatický, moderní a soběstačný portál pro nette addony.

Nutno předem říci, že původní portál nebyl vůbec špatný. Problém bych hledal spíše v lenosti autorů doplňků a rozšíření, udržovat jejich readme aktuální.

Componette jsem začal stavět 2.10.2015. Ani ne za 4 měsíce od prvního commitu, mimo jiné díky hackatonu s @chemix a @matej21, jsme pro vás připravili novou verzi.

Portál plně soběstačný, kdokoli může přidat rozšíření a prakticky se o něj už nemusí starat. Autoři se pak můžou věnovat tomu, co je nejvíc baví - programování.

Pojďme si ukázat nějaké přednosti.

Technologie

Stránky beží na VPS, kterou okupuje Docker. Celou konfigurace lze nalézt i na Githubu.

Základní rozdělení je do 4 kontejnerů.

DATA

  • Obsahuje celý portal, tak jak ho můžete vidět na Github.

DB

  • Zajišťuje běh databáze, která je MariaDB.

Nginx

  • O routování se stará Nginx.

PHP7

  • Dá se říci, že nejdůležitější kontejner. Beží v něm PHP7-FPM, spolu s cronem a jednoduchým SSMTP pro odesílání emailů.

Nastavování emailu, resp. mail serveru, považuji za jedno z nejvíce otravných a kompikovaných věcí u správy serveru. Využívám tedy k tomu SSMTP (jednoduchý smtp server) a zdarma službu Mailgun, kde máme 10 000 emailů každý měsic. Na nějaké informace o běhu, a sem tam nějaká laděnka, to určitě stačí.

Používáte nějaké alternativy nebo lepší řešení? Nechte mi dole komentář.

Open source

Tím, že je projekt open source, dáváme šanci komukoli nahlédnou do kódu aplikace. Nese to s sebou výhody i nevýhody.

Nevýhody - všichni uvidí náš spaghetti code - lehko se dá najít bezpečností chyba

Výhody - rychlejší vývoj - inspirace pro ostatní - běžící projekt na nette - začlenění komunity

Jelikož se na webu nevyskytuje přihlašování ani administrace, myslím si, že to dost útoků eliminuje.

Zapojení Nette komunity je na samostatný článek, ale těch už nejspíš bylo dost. Já budu rád, když se budou tvořit addony a sem tam nás někdo na gitteru, twitteru, githubu a fóru zkritizuje, jak to děláme blbě a jak je to naprd ošklivý. Ale i z toho mám radost, i to je přece jenom zapojení komunity. Heh.

Componette

Vyhledávání

To je jedna z věcí co na starém portále určitě chybělo. Vyhledávání u nás není žádná věda. Nevyužíváme ElasticSearch, ani nic podobného, prostý LIKE %% nám bohatě stačí.

Vyhledává se ve jménu autora, názvu addonu a popisku na Githubu (ano, proto je důležité ho vyplňovat).

Můžete se sami podívat na Githubu.

Detail

Detail addonu je kombinace readme (hlavní panel) a informací a odkazů (pravý sidebar).

V sidebaru se nachází odkazy na Github, na přehled doplňků podle autora, základní statistiky stažení, počet hvězdiček apod.

Pokud se jedná o composer balíček, jsou tam zobrazeny i závislosti.

O generování obsahu se stará cron, který se pouští 1x denně. Stáhne si originální readme, pokud existuje, udělá nějakou chytristiku s odkazy a dalším.

Při vykreslování dojde k překladu markdown -> parsedown -> HTML. A výsledech se uloží do cache.

Detail - statistiky

Pro mnohé by se mohly stát lákadlem jednoduché statistiky o stahování addonu přes composer. Hezké grafy se tvoří pomocí knihovny CanvasJS.

Stejné grafy tvoří i Packagist, odkud se data berou.

Na obrázku je vidět Kdyby\Doctrine ke dni 16.01.2016.

Stejný graf v originále: https://packagist.org/packages/kdyby/doctrine/stats.

Výpis a řazení

Vypsat všechny addony naráz se může líbít tomu, kdo nerad vyhledává a dáva raději přednost procházení.

I taková stránka existuje.

Řazení 1. podle oblíbenosti 2. podle aktivity na Githubu 3. podle data přidání

Status page

Pro globální přehled o počtu doplňků a další možné statistiky slouží tato stránka.

Cron

Nejdůležitější vlastnost nového portálu je bezvýhrady cron. Díky tomu je portá plně soběstačný. Když vytvoříte novou verzi knihovny a změníte si pracně readme na Githubu, componette vám samo readme aktualizuje i u vašeho addonu. To vše díky automatickému zpracování přes cron.

Na componette se nevyužívá Symfony\Console. Možná pro někoho nepředstavitelné, ale i bez symfony\console existuje život v CLI. Né, že bych ji neměl rád, ale vystačím si aktuálně bez ní.

Struktura tasků je následující.

  • Update
    • Github - aktualizuje základní informace
    • GithubFiles - aktualizuje composer.json a bower.json
    • Composer - aktualizuje informace o balíčku
    • Bower - aktualizuje informace o balíčku
  • Generate
    • Content - aktualizuje readme z Githubu
  • Stats
    • Composer - aktualizuje data pro vykreslení grafů

Výsledek daily cronu může vypadat třeba takto.

Závěrem…

Doufám, že jste si udělali alespoň malý obrázek o tom, co componette je a co stojí v pozadí.

Budu rád za jakýkoli feedback, klidně i ten pozitivní. :-)

Pokud máte nějaké nápady a nechcete nutně programovat, zkuste založit issue na Githubu a třeba se to ujme.