Build aplikace přes více strojů podle recepisu

BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Build aplikace přes více strojů podle recepisu
« kdy: 02. 02. 2017, 01:51:42 »
Do určité míry znám Ansible, Puppet, Salt. Slouží k tomu, abych mohl popsat konfiguraci serveru, a pak ji snadno spustit na více mašinách.

To mě inspirovalo: Existuje nástroj, ve kterém si definuju aplikaci, a tu pak nějakým builderem spustím?

Příklad:
Jednoduchá webová aplikace. Ta potřebuje apache na stroji 10.0.0.1, kód aplikace strahuje z gitu z 10.0.0.2, připojuje se k databázi, která běží na stroji 10.0.0.3 - plus hesla, klíče, etc.
Po stáhnutí z gitu se musí provést ještě nějaký build (maven, composer, npm, ...), vytvoření adresářů, etc.

Takže bych očekával, že si tuto konfiguraci nějak zadefinuju do souboru, a pak spustím build tento soubor, a on si vleze na všechny stroje, a udělá tam co potřebuju.

Používá se na to ten Salt, Puppet, Ansible?
Existují na to nějaké jiné nástroje?
Znáte něco, můžete doporučit? Články, postupy, cokoliv co si myslíte, že je zajímavé.

Díky.


Re:Build aplikace přes více strojů podle recepisu
« Odpověď #1 kdy: 02. 02. 2017, 08:52:32 »
Build přímo na produkčním stroji není úplně nejlepší nápad - je tam příliš mnoho věcí k selhání.

Standardní postup je provést build na nějakém speciálním místě a na produkční (ale předtím na testovací, samozřejmě) servery se nasazuje binární balíček. Doporučuji DEB, případně RPM.

Pro build existuje spousta buildserverů (či CI serverů, to je dnes častější termín). Pro vlastní servery třeba Jenkins, opensource projekty pak často používají hostované (travis, circleci).
Pro vyrobení balíčku existuje šikovná utilitka fpm: https://github.com/jordansissel/fpm

Pro samotné nasazení pak lze použít puppet či ansible, to už prostě záleží na jiných faktorech. Puppet ale zrovna na tohle není příliš vhodný z principu svého fungování (release nové verze aplikace typicky chceme jako "push").

BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Build aplikace přes více strojů podle recepisu
« Odpověď #2 kdy: 02. 02. 2017, 14:14:23 »
Já nechci instalovat jednu aplikaci na jeden stroj.
Já chci instalovat jednu aplikaci, která musí běžet na více strojích. Typicky nějaká webová aplikace skládající se z databázového serveru, webového serveru, loadbalanceru, memcache, cronu, beanstalku, etc

.

Re:Build aplikace přes více strojů podle recepisu
« Odpověď #3 kdy: 02. 02. 2017, 14:55:33 »
Já nechci instalovat jednu aplikaci na jeden stroj.
Já chci instalovat jednu aplikaci, která musí běžet na více strojích. Typicky nějaká webová aplikace skládající se z databázového serveru, webového serveru, loadbalanceru, memcache, cronu, beanstalku, etc
Na to by byl ideální docker a docker composer, případně kubernetes. Ale chápu, že nemusí vyhovovat každému.

BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Build aplikace přes více strojů podle recepisu
« Odpověď #4 kdy: 02. 02. 2017, 15:20:41 »
Já nechci instalovat jednu aplikaci na jeden stroj.
Já chci instalovat jednu aplikaci, která musí běžet na více strojích. Typicky nějaká webová aplikace skládající se z databázového serveru, webového serveru, loadbalanceru, memcache, cronu, beanstalku, etc
Na to by byl ideální docker a docker composer, případně kubernetes. Ale chápu, že nemusí vyhovovat každému.

Supr, mejm představám nejblíže odpovídá Dockerfile. Ale ten taky (alespoň myslím) vytvoří jen jeden server. A navíc bych si to představoval nevirtualizované.

Chtěl bych napsat konfigurační script, ve kterém uvedu, že databázový server má běžet na této IP, a toto jsou k ní přístupy; http server na jiné IP, s těmito přístupy, ... atd. Konfigurační script plus Build script a spustit nějakým builderem.

Uměl bych to udělat pomocí Saltu, ale přijde mi to trochu znásilnění toho nástroje.

A tak se ptám, zda neexistuje něco jiného.
« Poslední změna: 02. 02. 2017, 15:22:45 od BoneFlute »


Petr

Re:Build aplikace přes více strojů podle recepisu
« Odpověď #5 kdy: 02. 02. 2017, 16:00:40 »
Mozna hledas neco ve stylu chefu? https://www.chef.io/chef/

DK

Re:Build aplikace přes více strojů podle recepisu
« Odpověď #6 kdy: 02. 02. 2017, 16:08:02 »
Mozna hledas neco ve stylu chefu? https://www.chef.io/chef/
Uz na zacatku pise Salt/Ansible/Puppet, takze doporucovat dalsi identicky nastroj je zbytecne.

Sten

Re:Build aplikace přes více strojů podle recepisu
« Odpověď #7 kdy: 02. 02. 2017, 16:35:00 »
Supr, mejm představám nejblíže odpovídá Dockerfile. Ale ten taky (alespoň myslím) vytvoří jen jeden server. A navíc bych si to představoval nevirtualizované.

Chtěl bych napsat konfigurační script, ve kterém uvedu, že databázový server má běžet na této IP, a toto jsou k ní přístupy; http server na jiné IP, s těmito přístupy, ... atd. Konfigurační script plus Build script a spustit nějakým builderem.

Uměl bych to udělat pomocí Saltu, ale přijde mi to trochu znásilnění toho nástroje.

A tak se ptám, zda neexistuje něco jiného.

CoreOS. Každá aplikace definuje svoje závislosti (typicky jiné aplikace; ve vašem případě by web byla jedna aplikace, databáze druhá, memcache třetí) a CoreOS už se postará, že se to nějak seskládá na množině strojů. Nicméně je to hodně high-level, aplikaci tam deploynete a ono ji to nějak spustí na nějakých strojích, resp. stroje můžete tagovat a říct, že aplikace má běžet na stroji s určitými tagy, např. aby aplikace běžela na strojích s hodně disky a měla alespoň jednu kopii v každé geografické zóně, stejně tak můžete definovat, že memcache má běžet na stejných strojích jako web, ale obecně nemůžete moc ovlivnit, na kterém konkrétním stroji z množiny možných to zrovna je. CoreOS se zároveň automaticky stará o loadbalancing, migrace při výpadku stroje a seamless rollout (postupné aktualizace bez výpadku).

BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Build aplikace přes více strojů podle recepisu
« Odpověď #8 kdy: 02. 02. 2017, 18:04:34 »
CoreOS.
To zní zajímavě. Díky.

.

Re:Build aplikace přes více strojů podle recepisu
« Odpověď #9 kdy: 02. 02. 2017, 19:43:08 »
CoreOS je Docker ve fialovém :), resp. docker + docker-swarm (clustering serverů)
Dockerfile udělá jednu "službu", Docker compose je pak poskládá dohromady. Docker swarm pak zajistí běh na více serverech. Z githubu:

Citace
Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a Compose file to configure your application's services. Then, using a single command, you create and start all the services from your configuration.

Ukázka compose konfiguráku:

Kód: [Vybrat]
version: '2'

services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
  redis:
    image: redis

Téhož lze dosáhnout použitím kubernetes (orchestrační nástroj od Google). Kubernetes se používá i na orchestraci CoreOS.