Keďže som sa v poslednom čase venoval mnohým iným prioritnejším úlohám, môj cieľ nastaviť Drone inštanciu na Contabo VPS bol odložený. Chcel som nastaviť Drone, aby vytvoril pipeline pre zostavovanie príspevkov tohto blogu. Blog je staticky generovaný web, čo znamená, že príspevky musia byť vygenerované na nejakom stroji, predtým ako môžu byť zverejnené ako skutočný blog.

Momentálne zostavujem tento blog na notebooku, ale keby bol proces buildovania a publikovania nastavený na serveri, umožnilo by mi to písať z iných zariadení – pretože build by prebehol na serveri, nie na samotnom notebooku. Notebook by slúžil iba na písanie.

Teória by bola taká, že Drone by sledoval hlavnú vetvu repozitára blogu a pri každom commite by ho zostavil a zverejnil. Väčšina mojej práce je hostovaná na mojom Gitea serveri, vrátane blogu. Gitea má integrovaný markdown editor, takže ak sa môžem prihlásiť do Gitea, môžem zverejniť blogový príspevok.

Integrácia Gitea a Drone #

Drone je schopný spolupracovať s Gitea a nastavenie takejto integrácie je dostupné aj v oficiálnej Drone dokumentácii. Pre verziu Drone 1.0 je však hneď na začiatku zastrašujúce upozornenie:

Please note we strongly recommend installing Drone on a dedicated instance. We do not recommend installing Drone and Gitea on the same machine due to network complications, and we definitely do not recommend installing Drone and Gitea on the same machine using docker-compose.

Istý čas som sa pokúšal pochopiť, čo to znamená. Odpoveď, ktorú som dostal na Gitter Drone kanáli, bola, že je možné mať Gitea a Drone na rovnakom VPS, ale je to komplikované a oficiálna dokumentácia k tomu neexistuje.

K dispozícii je niekoľko návodov ponúkajúcich určité usmernenie, ale žiadny z nich som nenasledoval, takže tu nie sú žiadne odkazy. Za to sa ospravedlňujem.

Drone za Nginx #

Dôvod, prečo sa odkazujem na ten odkaz, je dvojaký. Po prvé, je to najnovší odkaz, ktorý som k téme našiel, a tiež je relatívne dobre napísaný, no zatiaľ som ho netestoval. Plánujem to, lebo postup tam načrtnutý mi dáva zmysel. Druhý dôvod je však dôležitejší. Skutočný problém s inštaláciou Drone na host s Gitea totiž spočíva v tom, že Drone vôbec nemá byť nainštalovaný za Nginx!

V starej dokumentácii k verzii Drone 0.8 je stránka s pokynmi ku konfigurácii Nginx. No v aktuálnej dokumentácii žiadna taká stránka s Nginx nie je! Podozrievam, že ostatné nástroje reverznej proxy sú tiež vynechané.

Oficiálna dokumentácia na spustenie serverového kontajnera Drone je nasledovná:

docker run \
  --volume=/var/lib/drone:/data \
  --env=DRONE_GITEA_SERVER={{DRONE_GITEA_SERVER}} \
  --env=DRONE_GITEA_CLIENT_ID={{DRONE_GITEA_CLIENT_ID}} \
  --env=DRONE_GITEA_CLIENT_SECRET={{DRONE_GITEA_CLIENT_SECRET}} \
  --env=DRONE_RPC_SECRET={{DRONE_RPC_SECRET}} \
  --env=DRONE_SERVER_HOST={{DRONE_SERVER_HOST}} \
  --env=DRONE_SERVER_PROTO={{DRONE_SERVER_PROTO}} \
  --publish=80:80 \
  --publish=443:443 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone:1

Povšimnite si voľbu --publish, ktorá presne špecifikuje porty 80 a 443. Ako nastaviť TLS bez reverznej proxy ako Nginx? Drone má https funkčnosť zabudovanú priamo.

Najjednoduchší spôsob je pridať --env=DRONE_TLS_AUTOCERT=true do vyššie uvedeného príkazu a hotovo. Drone sa spustí. Samozrejme, certifikáty je možné špecifikovať manuálne, všetko je v dokumentácii. No podstata je, že nie je problematické nastaviť Drone s Gitea na rovnakom serveri – pretože problémy nastávajú krok pred tým, pri chýbajúcej dokumentácii k reverznej proxy, ktorá je potrebná na nastavenie čohokoľvek na serveri vedľa Drone.

Záverečné slová #

Nikoho tu neviním, je len škoda, že Drone v podstate vyžaduje vlastný VPS. Zmysel vlastného hostingu je prevádzkovanie viacerých služieb na VPS. Zvlášť keď je daná služba určená na spúšťanie raz za deň na niekoľko sekúnd, kým zostaví statický blog. Keďže Drone by nepoužíval zdroje nepretržite a oneskorenie pri štarte by bolo zanedbateľné (nezáleží na tom, či je blog zverejnený o 5 minút neskôr alebo skôr), bol by oveľa vhodnejší pre nejaké serverless prostredie, no tam som sa ešte nedostal. Zatiaľ Drone vynechávam, kým nenájdem lepšie miesto, kde môže bežať.

Toto je 74. príspevok série #100daystooffload.