Šiame straipsnyje mes ketiname įdiegti „Airflow“ programą „Conda“ aplinkoje ir apsaugoti programą naudodami „Nginx“ ir paprašyti SSL sertifikato iš „Let's Encrypt“.
Oro srautas yra populiarus įrankis, kurį galime naudoti sudėtingoms darbo eigoms apibrėžti, planuoti ir stebėti. Galime sukurti nukreiptus aciklinius grafikus (DAG), kad galėtume automatizuoti užduotis visose darbo platformose, o būdama atvirojo kodo, „Airflow“ turi bendruomenę, kuri teikia paramą ir nuolat tobulėja.
Tai yra Vultr remiamas straipsnis. Vultr yra didžiausia pasaulyje privati debesų kompiuterijos platforma. Kūrėjų pamėgta „Vultr“ aptarnavo daugiau nei 1,5 mln. klientų 185 šalyse, naudodama lanksčius, keičiamo dydžio, pasaulinius „Cloud Compute“, „Cloud GPU“, „Bare Metal“ ir „Cloud Storage“ sprendimus. Išmokti daugiau apie Vultr.
Serverio diegimas Vultr
Pradėkime įdiegdami Vultr serverį su Anaconda prekyvietės programa.
Užsiregistruokite ir prisijunkite prie Vultr klientų portalas.
Eikite į puslapį Produktai.
Pasirinkite Apskaičiuokite iš šoninio meniu.
Spustelėkite Įdiegti serverį.
Pasirinkite Cloud Compute kaip serverio tipą.
Pasirinkti Vieta.
Pasirinkite Anakonda tarp prekyvietės programų.

Pasirinkti Planuoti.
Skiltyje „Papildomos funkcijos“ pasirinkite daugiau funkcijų.
Spustelėkite Įdiegti dabar mygtuką.

„Vultr“ valdomos duomenų bazės kūrimas
Įdiegę Vultr serverį, kitą kartą įdiegsime Vultr valdomą PostgreSQL duomenų bazę. Taip pat savo duomenų bazės egzemplioriuje sukursime dvi naujas duomenų bazes, kurios vėliau tinklaraštyje bus naudojamos susisiekimui su programa „Airflow“.
Atidaryk Vultr klientų portalas.
Spustelėkite Produktai meniu grupę ir eikite į Duomenų bazės sukurti PostgreSQL valdomą duomenų bazę.

Spustelėkite Pridėti valdomas duomenų bazes.
Pasirinkite PostgreSQL su naujausia versija kaip duomenų bazės variklis.

Pasirinkite Serverio konfigūracija ir Serverio vieta.
Rašyti a Etiketė už paslaugą.

Spustelėkite Įdiegti dabar.

Įdiegę duomenų bazę, pasirinkite Vartotojai ir duomenų bazės.

Spustelėkite Pridėti naują duomenų bazę.
Įveskite pavadinimą, spustelėkite Pridėti duomenų bazę ir įvardink
airflow-pgsql.Pakartokite 9 ir 10 veiksmus, kad į tą pačią valdomą duomenų bazę įtrauktumėte kitą duomenų bazę ir suteiktumėte jai pavadinimą
airflow-celery.
Darbo su „Conda“ ir „Airflow“ pradžia
Dabar, kai sukūrėme Vultr valdomą PostgreSQL egzempliorių, naudosime Vultr serverį Conda aplinkai sukurti ir reikiamoms priklausomybėms įdiegti.
Patikrinkite Conda versiją:
Sukurkite „Conda“ aplinką:
$ conda create -n airflow python=3.8Suaktyvinkite aplinką:
Įdiekite Redis serverį:
(airflow) $ apt install -y redis-serverĮgalinkite „Redis“ serverį:
(airflow) $ sudo systemctl enable redis-serverPatikrinkite būseną:
(airflow) $ sudo systemctl status redis-server
Įdiekite Python paketų tvarkyklę:
(airflow) $ conda install pipĮdiekite reikiamas priklausomybes:
(airflow) $ pip install psycopg2-binary virtualenv redisĮdiekite Airflow Conda aplinkoje:
(airflow) $ pip install "apache-airflow[celery]==2.8.1" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.8.1/constraints-3.8.txt"
Oro srauto sujungimas su Vultr valdoma duomenų baze
Paruošę aplinką, dabar sujungkime savo Airflow programą su dviem duomenų bazėmis, kurias anksčiau sukūrėme savo duomenų bazės egzemplioriuje, ir atliksime reikiamus Airflow konfigūracijos pakeitimus, kad programa būtų paruošta gamybai.
Nustatykite duomenų bazės ryšio aplinkos kintamąjį:
(airflow) $ export AIRFLOW__DATABASE__SQL_ALCHEMY_CONN="postgresql://user:password@hostname:port/db_name"Būtinai pakeiskite
user,password,hostnameirportsu faktinėmis reikšmėmis ryšio informacijos skyriuje, pasirinkdamiairflow-pgsqlduomenų bazėje. Pakeiskitedb_namesuairflow-pgsql.
Inicijuoti metaduomenų duomenų bazę.
Turime inicijuoti „Airflow“ metaduomenų duomenų bazę, kad sukurtume reikiamas lenteles ir schemą, kurioje būtų saugoma tokia informacija kaip DAG ir informacija, susijusi su mūsų darbo eigomis:
(airflow) $ airflow db initAtidarykite oro srauto konfigūracijos failą:
(airflow) $ sudo nano ~/airflow/airflow.cfgSlinkite žemyn ir pakeiskite
executor:executor = CeleryExecutorSusiekite Vultr valdomą PostgreSQL duomenų bazę ir pakeiskite reikšmę
sql_alchemy_conn:sql_alchemy_conn = "postgresql://user:password@hostname:port/db_name"Būtinai pakeiskite
user,password,hostnameir prievadą su faktinėmis reikšmėmis ryšio informacijos skiltyje, pasirinkdamiairflow-pgsqlduomenų bazėje. Pakeiskitedb_namesuairflow-pgsql.Slinkite žemyn ir pakeiskite darbuotojo ir suaktyvinimo žurnalo prievadus:
worker_log_server_port = 8794 trigger_log_server_port = 8795Pakeisti
broker_url:broker_url = redis://localhost:6379/0Pasalinti
#ir pakeistiresult_backend:result_backend = db+postgresql://user:password@hostname:port/db_nameBūtinai pakeiskite
user,password,hostnameirportsu faktinėmis reikšmėmis ryšio informacijos skyriuje, pasirinkdamiairflow-celeryduomenų bazėje. Pakeiskitedb_namesuairflow-celery.
Išsaugokite ir išeikite iš failo.
Sukurkite „Airflow“ naudotoją:
(airflow) $ airflow users create \n --username admin \n --firstname Peter \n --lastname Parker \n --role Admin \n --email spiderman@superhero.orgBūtinai pakeiskite visas kintamųjų reikšmes tikrosiomis reikšmėmis.
Įveskite slaptažodį, kai būsite paraginti jį nustatyti vartotojui, kai pasiekiate prietaisų skydelį.
Oro srauto programos demonizavimas
Dabar demonizuokime savo „Airflow“ programą, kad ji veiktų fone ir toliau veiktų savarankiškai, net kai uždarome terminalą ir atsijungiame.
Šie veiksmai taip pat padės mums sukurti nuolatinę paslaugą „Airflow“ žiniatinklio serveriui, planuotojui ir salierų darbuotojams.
Peržiūrėkite
airflowkelias:(airflow) $ which airflowNukopijuokite ir įklijuokite kelią į mainų sritį.
Sukurkite „Airflow“ žiniatinklio serverio paslaugos failą:
(airflow) $ sudo nano /etc/systemd/system/airflow-webserver.serviceĮklijuokite paslaugos konfigūracijas į failą.
airflow webserveryra atsakinga už žiniatinklio vartotojo sąsajos, kuri leis mums bendrauti ir valdyti darbo eigą, teikimą. Šios konfigūracijos sudarys fone veikiančią paslaugą mūsų „Airflow“ žiniatinklio serveriui:[Unit] Description="Airflow Webserver" After=network.target [Service] User=example_user Group=example_user ExecStart=/home/example_user/.local/bin/airflow webserver [Install] WantedBy=multi-user.targetBūtinai pakeiskite
UserirGroupsu faktine ne root sudo vartotojo paskyros informacija ir pakeiskiteExecStartkelias su tikruoju oro srauto keliu, įskaitant vykdomąjį dvejetainį failą, kurį anksčiau nukopijavome į mainų sritį.Išsaugokite ir uždarykite failą.
Įgalinti
airflow-webserverpaslauga, kad žiniatinklio serveris automatiškai įsijungtų sistemos įkrovos proceso metu:(airflow) $ systemctl enable airflow-webserverPradėti paslaugą:
(airflow) $ sudo systemctl start airflow-webserverĮsitikinkite, kad paslauga veikia ir veikia:
(airflow) $ sudo systemctl status airflow-webserverMūsų produkcija turėtų atrodyti taip, kaip parodyta žemiau.

Sukurkite „Airflow Celery“ paslaugos failą:
(airflow) $ sudo nano /etc/systemd/system/airflow-celery.serviceĮklijuokite paslaugų konfigūracijas į failą.
airflow celery workerpradeda Salierų darbuotoją. „Celery“ yra paskirstyta užduočių eilė, kuri leis mums paskirstyti ir vykdyti užduotis keliems darbuotojams. Darbuotojai prisijungia prie mūsų Redis serverio, kad gautų ir vykdytų užduotis:[Unit] Description="Airflow Celery" After=network.target [Service] User=example_user Group=example_user ExecStart=/home/example_user/.local/bin/airflow celery worker [Install] WantedBy=multi-user.targetBūtinai pakeiskite
UserirGroupsu faktine ne root sudo vartotojo paskyros informacija ir pakeiskiteExecStartkelias su tikruoju oro srauto keliu, įskaitant vykdomąjį dvejetainį failą, kurį anksčiau nukopijavome į mainų sritį.Išsaugokite ir uždarykite failą.
Įgalinti
airflow-celerypaslauga:(airflow) $ sudo systemctl enable airflow-celeryPradėti paslaugą:
(airflow) $ sudo systemctl start airflow-celeryĮsitikinkite, kad paslauga veikia ir veikia:
(airflow) $ sudo systemctl status airflow-celerySukurkite oro srauto planavimo paslaugos failą:
(airflow) $ sudo nano /etc/systemd/system/airflow-scheduler.serviceĮklijuokite paslaugų konfigūracijas į failą.
airflow scheduleryra atsakingas už DAG ir juose apibrėžtų užduočių planavimą ir paleidimą. Ji taip pat periodiškai tikrina DAG ir užduočių būseną:[Unit] Description="Airflow Scheduler" After=network.target [Service] User=example_user Group=example_user ExecStart=/home/example_user/.local/bin/airflow scheduler [Install] WantedBy=multi-user.targetBūtinai pakeiskite
UserirGroupsu faktine ne root sudo vartotojo paskyros informacija ir pakeiskiteExecStartkelias su tikruoju oro srauto keliu, įskaitant vykdomąjį dvejetainį failą, kurį anksčiau nukopijavome į mainų sritį.Išsaugokite ir uždarykite failą.
Įgalinti
airflow-schedulerpaslauga:(airflow) $ sudo systemctl enable airflow-schedulerPradėti paslaugą:
(airflow) $ sudo systemctl start airflow-schedulerĮsitikinkite, kad paslauga veikia ir veikia:
(airflow) $ sudo systemctl status airflow-schedulerMūsų produkcija turėtų atrodyti taip, kaip parodyta žemiau.

„Nginx“ kaip atvirkštinio tarpinio serverio nustatymas
Sukūrėme nuolatines „Airflow“ programai skirtas paslaugas, todėl dabar nustatysime Nginx kaip atvirkštinį tarpinį serverį, kad padidintume programos saugumą ir mastelį, atlikdami toliau nurodytus veiksmus.
Prisijunkite prie Vultr klientų portalas.
Eikite į Produktai puslapį.
Šoniniame meniu išplėskite Tinklas išskleidžiamajame meniu ir pasirinkite DNS.
Spustelėkite Pridėti domeną mygtuką centre.
Vykdykite sąrankos procedūrą, kad pridėtumėte domeno pavadinimą, pasirinkdami savo serverio IP adresą.
Su domeno registratoriumi nustatykite šiuos pagrindinio kompiuterio pavadinimus kaip pagrindinius ir antrinius domeno vardų serverius:
- ns1.vultr.com
- ns2.vultr.com
Įdiekite „Nginx“:
(airflow) $ apt install nginxBūtinai patikrinkite, ar Nginx serveris veikia ir veikia:
(airflow) $ sudo systemctl status nginxSukurkite naują „Nginx“ virtualaus pagrindinio kompiuterio konfigūracijos failą
sites-availablekatalogas:(airflow) $ sudo nano /etc/nginx/sites-available/airflow.confPridėkite konfigūracijas prie failo.
Šios konfigūracijos nukreips srautą į mūsų programą iš tikrojo domeno į galinio serverio serverį adresu
http://127.0.0.1:8080naudojant tarpinio serverio leidimą:server { listen 80; listen [::]:80; server_name airflow.example.com; location / { proxy_pass http://127.0.0.1:8080; } }Būtinai pakeiskite
airflow.example.comsu tikru domenu, kurį įtraukėme į „Vultr“ prietaisų skydelį.Išsaugokite ir uždarykite failą.
Susiekite konfigūracijos failą su
sites-enabledkatalogą, kad suaktyvintumėte konfigūracijos failą:(airflow) $ sudo ln -s /etc/nginx/sites-available/airflow.conf /etc/nginx/sites-enabled/Būtinai patikrinkite konfigūraciją, ar nėra klaidų:
(airflow) $ sudo nginx -tMūsų produkcija turėtų atrodyti taip, kaip parodyta žemiau.

Iš naujo paleiskite „Nginx“, kad pritaikytumėte pakeitimus:
(airflow) $ sudo systemctl reload nginxLeisti HTTP prievadą
80per ugniasienę visiems įeinantiems ryšiams:(airflow) $ sudo ufw allow 80/tcpLeisti HTTPS prievadą
443per ugniasienę visiems įeinantiems ryšiams:(airflow) $ sudo ufw allow 443/tcpIš naujo įkelkite ugniasienės taisykles, kad išsaugotumėte pakeitimus:
(airflow) $ sudo ufw reload
SSL sertifikatų taikymas „Airflow“ programai
Paskutinis žingsnis yra taikyti a Užšifruokime SSL sertifikatas mūsų Airflow programai, kad ji taptų daug saugesnė ir apsaugotų mūsų programą nuo nepageidaujamų atakų.
Naudodami „Snap“, įdiekite „Certbot Let's Encrypt“ klientą:
(airflow) $ snap install --classic certbotGaukite naują SSL sertifikatą mūsų domenui:
(airflow) $ certbot --nginx -d airflow.example.comBūtinai pakeiskite
airflow.example.comsu mūsų tikruoju domeno pavadinimu.
Kai būsite paraginti, įveskite el. pašto adresą ir paspauskite Y sutikti su Užšifruokime sąlygomis.Patikrinkite, ar SSL sertifikatas automatiškai atnaujinamas pasibaigus jo galiojimo laikui.
Automatinis atnaujinimas užtikrina, kad mūsų SSL sertifikatai yra atnaujinami, sumažinama sertifikato galiojimo pabaigos rizika ir išlaikomas mūsų programos saugumas:
(airflow) $ certbot renew --dry-runNaudodami žiniatinklio naršyklę atidarykite programą „Airflow“:
https://airflow.example.com.Kai būsite paraginti, įveskite anksčiau sukurtą vartotojo vardą ir slaptažodį.

Pasiekus prietaisų skydelį, bus matomi visi pagal numatytuosius nustatymus pateikti DAG.

Išvada
Šiame straipsnyje mes parodėme, kaip sukurti „Conda“ aplinką, įdiegti gamybai paruoštą „Airflow“ programą ir pagerinti programos našumą bei saugumą.


