نحوه استقرار Apache Airflow در Vultr با استفاده از Anaconda
در این مقاله قصد داریم یک برنامه Airflow را در محیط Conda مستقر کنیم و برنامه را با استفاده از Nginx ایمن کنیم و گواهی SSL را از Let's Encrypt درخواست کنیم.
جریان هوا ابزار محبوبی است که میتوانیم از آن برای تعریف، زمانبندی و نظارت بر گردشهای کاری پیچیده خود استفاده کنیم. ما میتوانیم گرافهای غیر چرخشی مستقیم (DAG) ایجاد کنیم تا وظایف را در سرتاسر پلتفرمهای کاری خود بهطور خودکار انجام دهیم، و بهعنوان منبع باز، Airflow جامعهای برای ارائه پشتیبانی و بهبود مستمر دارد.
این یک مقاله حمایت شده توسط Vultr است. Vultr بزرگترین پلت فرم محاسبات ابری خصوصی در جهان است. Vultr که مورد علاقه توسعه دهندگان است، با راه حل های Cloud Compute، Cloud GPU، Bare Metal و Cloud Storage انعطاف پذیر، مقیاس پذیر، به بیش از 1.5 میلیون مشتری در 185 کشور خدمات رسانی کرده است. درباره Vultr بیشتر بدانید.
استقرار سرور در Vultr
بیایید با استقرار یک سرور Vultr با برنامه Anaconda marketplace شروع کنیم.
ثبت نام کنید و وارد پورتال مشتریان Vultr شوید.
به صفحه محصولات بروید.
از منوی کناری گزینه Compute را انتخاب کنید.
روی Deploy Server کلیک کنید.
Cloud Compute را به عنوان نوع سرور انتخاب کنید.
یک مکان را انتخاب کنید.
Anaconda را در بین برنامه های کاربردی بازار انتخاب کنید.
یک طرح را انتخاب کنید.
در بخش « آپشن های اضافی» هر ویژگی دیگری را انتخاب کنید.
روی دکمه Deploy Now کلیک کنید.
ایجاد یک پایگاه داده مدیریت شده Vultr
پس از استقرار سرور Vultr، در مرحله بعدی پایگاه داده PostgreSQL مدیریت شده توسط Vultr را مستقر خواهیم کرد. ما همچنین دو پایگاه داده جدید را در نمونه پایگاه داده خود ایجاد خواهیم کرد که برای ارتباط با برنامه Airflow در آینده در وبلاگ استفاده می شود.
پورتال مشتری Vultr را باز کنید.
روی گروه منوی محصولات کلیک کنید و به پایگاه داده بروید تا یک پایگاه داده مدیریت شده PostgreSQL ایجاد کنید.
روی Add Managed Databases کلیک کنید.
PostgreSQL را با آخرین نسخه به عنوان موتور پایگاه داده انتخاب کنید.
را مدیریت کرد" loading="lazy">
پیکربندی سرور و مکان سرور را انتخاب کنید.
یک برچسب برای خدمات بنویسید.
روی Deploy Now کلیک کنید.
پس از استقرار پایگاه داده، Users & Databases را انتخاب کنید.
روی گفت ن پایگاه داده جدید کلیک کنید.
یک نام وارد کنید، روی گفت ن پایگاه داده کلیک کنید و نام آن را airflow-pgsql
بگذارید.
مراحل 9 و 10 را تکرار کنید تا پایگاه داده دیگری را در همان پایگاه داده مدیریت شده اضافه کنید و نام آن را airflow-celery
بگذارید.
شروع کار با Conda و Airflow
اکنون که یک نمونه PostgreSQL با مدیریت Vultr ایجاد کرده ایم، از سرور Vultr برای ایجاد یک محیط Conda و نصب وابستگی های مورد نیاز استفاده می کنیم.
$ conda --ver
یک محیط کوندا ایجاد کنید:
$ conda create -n airflow python = 3.8
محیط را فعال کنید:
$ conda activate airflow
سرور Redis را نصب کنید:
( airflow ) $ apt install -y redis-server
سرور Redis را فعال کنید:
( airflow ) $ sudo systemctl enable redis-server
تحلیل وضعیت:
( airflow ) $ sudo systemctl status redis-server
مدیر بسته پایتون را نصب کنید:
( airflow ) $ conda install pip
وابستگی های مورد نیاز را نصب کنید:
( airflow ) $ pip install psycopg2-binary virtualenv redis
Airflow را در محیط Conda نصب کنید:
( airflow ) $ pip install "apache-airflow[celery]==2.8.1" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.8.1/constraints-3.8.txt"
اتصال جریان هوا با پایگاه داده مدیریت شده Vultr
پس از آماده سازی محیط، اکنون اجازه دهید برنامه Airflow خود را با دو پایگاه داده ای که قبلاً در نمونه پایگاه داده خود ایجاد کرده بودیم، متصل کنیم و تغییرات لازم را در پیکربندی Airflow اعمال کنیم تا برنامه ما برای تولید آماده شود.
تنظیم متغیر محیط برای اتصال پایگاه داده:
( airflow ) $ export AIRFLOW__DATABASE__SQL_ALCHEMY_CONN = "postgresql://user:password@hostname:port/db_name"
اطمینان حاصل کنید که با انتخاب پایگاه داده airflow-pgsql
مقادیر واقعی user
، password
، hostname
و port
در قسمت جزئیات اتصال جایگزین کنید. db_name
با airflow-pgsql
جایگزین کنید.
پایگاه داده ابرداده را راه اندازی کنید.
ما باید یک پایگاه داده ابرداده را برای Airflow راه اندازی کنیم تا جداول و طرحواره های لازم را ایجاد کنیم که اطلاعاتی مانند DAG و اطلاعات مربوط به گردش کار ما را ذخیره می کند:
( airflow ) $ airflow db init
فایل پیکربندی جریان هوا را باز کنید:
( airflow ) $ sudo nano ~/airflow/airflow.cfg
به پایین اسکرول کنید و executor
را تغییر دهید:
executor = CeleryExecutor
پایگاه داده PostgreSQL مدیریت شده توسط Vultr را پیوند دهید و مقدار sql_alchemy_conn
را تغییر دهید:
sql_alchemy_conn = "postgresql://user:password@hostname:port/db_name"
اطمینان حاصل کنید که با انتخاب پایگاه داده airflow-pgsql
مقادیر واقعی user
، password
، hostname
و پورت را در قسمت جزئیات اتصال جایگزین کنید. db_name
با airflow-pgsql
جایگزین کنید.
به پایین پیمایش کنید و پورتهای گزارش کارگر و تریگر را تغییر دهید:
worker_log_server_port = 8794 trigger_log_server_port = 8795
broker_url
را تغییر دهید:
broker_url = redis://localhost:6379/0
#
را حذف کرده و result_backend
را تغییر دهید:
result_backend = db+postgresql://user:password@hostname:port/db_name
اطمینان حاصل کنید که با انتخاب پایگاه داده airflow-celery
مقادیر واقعی را در قسمت جزئیات اتصال، user
، password
، hostname
و port
جایگزین کنید. db_name
با airflow-celery
جایگزین کنید.
فایل را ذخیره کرده و از آن خارج شوید.
یک کاربر جریان هوا ایجاد کنید:
( airflow ) $ airflow users create \ n --username admin \ n --firstname Peter \ n --lastname Parker \ n --role Admin \ n --email spiderman@superhero.org
اطمینان حاصل کنید که تمام مقادیر متغیر را با مقادیر واقعی جایگزین کنید.
هنگامی که از شما خواسته شد رمز عبور را برای کاربر در هنگام دسترسی به داشبورد تنظیم کنید، وارد کنید.
شبح سازی برنامه جریان هوا
حالا بیایید اپلیکیشن Airflow خود را به گونهای دیمونیزه کنیم که در پسزمینه اجرا شود و حتی زمانی که ترمینال را میبندیم و از سیستم خارج میشویم، به طور مستقل به کار خود ادامه دهد.
این مراحل همچنین به ما کمک می کند تا یک سرویس دائمی برای وب سرور، زمانبندی و کارگران کرفس Airflow ایجاد کنیم.
مشاهده مسیر airflow
:
( airflow ) $ which airflow
مسیر را کپی کرده و در کلیپ بورد قرار دهید.
یک فایل سرویس وب سرور Airflow ایجاد کنید:
( airflow ) $ sudo nano /etc/systemd/system/airflow-webserver.service
تنظیمات سرویس را در فایل قرار دهید.
airflow webserver
مسئول ارائه یک رابط کاربری مبتنی بر وب است که به ما امکان تعامل و مدیریت گردش کار را می دهد. این پیکربندی ها یک سرویس در حال اجرا در پس زمینه برای وب سرور Airflow ما ایجاد می کند:
[ 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.target
مطمئن شوید که User
و Group
با جزئیات واقعی حساب کاربری sudo غیر روت خود جایگزین کنید و مسیر ExecStart
را با مسیر جریان هوای واقعی از جمله باینری اجرایی که قبلاً در کلیپ بورد کپی کردیم جایگزین کنید.
ذخیره کنید و فایل را ببندید.
سرویس airflow-webserver
را فعال کنید تا وب سرور به طور خودکار در طول فرآیند بوت سیستم راه اندازی شود:
( airflow ) $ systemctl enable airflow-webserver
سرویس را شروع کنید:
( airflow ) $ sudo systemctl start airflow-webserver
اطمینان حاصل کنید که سرویس راه اندازی و اجرا می شود:
( airflow ) $ sudo systemctl status airflow-webserver
خروجی ما باید مانند تصویر زیر ظاهر شود.
یک فایل سرویس Airflow Celery ایجاد کنید:
( airflow ) $ sudo nano /etc/systemd/system/airflow-celery.service
تنظیمات سرویس را در فایل قرار دهید.
airflow celery worker
یک کارگر کرفس را راه اندازی می کند. Celery یک صف وظیفه توزیع شده است که به ما امکان می دهد وظایف را بین چندین کارگر توزیع و اجرا کنیم. کارگران برای دریافت و اجرای وظایف به سرور Redis ما متصل می شوند:
[ 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.target
مطمئن شوید که User
و Group
با جزئیات واقعی حساب کاربری sudo غیر روت خود جایگزین کرده اید و مسیر ExecStart
با مسیر جریان هوای واقعی از جمله باینری اجرایی که قبلاً در کلیپ بورد کپی کردیم جایگزین کنید.
ذخیره کنید و فایل را ببندید.
سرویس airflow-celery
را فعال کنید:
( airflow ) $ sudo systemctl enable airflow-celery
سرویس را شروع کنید:
( airflow ) $ sudo systemctl start airflow-celery
اطمینان حاصل کنید که سرویس راه اندازی و اجرا می شود:
( airflow ) $ sudo systemctl status airflow-celery
یک فایل سرویس زمانبندی جریان هوا ایجاد کنید:
( airflow ) $ sudo nano /etc/systemd/system/airflow-scheduler.service
تنظیمات سرویس را در فایل قرار دهید.
airflow scheduler
مسئول برنامه ریزی و راه اندازی DAG ها و وظایف تعریف شده در آنها است. همچنین وضعیت DAG ها و وظایف را به صورت دوره ای تحلیل می کند:
[ 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.target
مطمئن شوید که User
و Group
با جزئیات واقعی حساب کاربری sudo غیر روت خود جایگزین کرده اید و مسیر ExecStart
با مسیر جریان هوای واقعی از جمله باینری اجرایی که قبلاً در کلیپ بورد کپی کردیم جایگزین کنید.
ذخیره کنید و فایل را ببندید.
سرویس airflow-scheduler
فعال کنید:
( airflow ) $ sudo systemctl enable airflow-scheduler
سرویس را شروع کنید:
( airflow ) $ sudo systemctl start airflow-scheduler
اطمینان حاصل کنید که سرویس راه اندازی و اجرا می شود:
( airflow ) $ sudo systemctl status airflow-scheduler
خروجی ما باید مانند تصویر زیر ظاهر شود.
راه اندازی Nginx به عنوان یک پروکسی معکوس
ما سرویسهای دائمی را برای برنامه Airflow ایجاد کردهایم، پس اکنون Nginx را بهعنوان یک پروکسی معکوس راهاندازی میکنیم تا امنیت و مقیاسپذیری برنامهمان را با پیروی از مراحل ذکر شده در زیر افزایش دهیم.
وارد پورتال مشتریان Vultr شوید.
به صفحه محصولات بروید.
از منوی کناری، کشویی Network را باز کرده و DNS را انتخاب کنید.
روی دکمه Add Domain در مرکز کلیک کنید.
برای گفت ن نام دامنه خود با انتخاب آدرس IP سرور خود، مراحل راه اندازی را دنبال کنید.
نام هاست زیر را به عنوان سرورهای نام اصلی و ثانویه دامنه خود با ثبت کننده دامنه خود تنظیم کنید:
ns1.vultr.com
ns2.vultr.com
Nginx را نصب کنید:
( airflow ) $ apt install nginx
اطمینان حاصل کنید که آیا سرور Nginx فعال است یا خیر:
( airflow ) $ sudo systemctl status nginx
یک فایل پیکربندی میزبان مجازی Nginx در دایرکتوری sites-available
ایجاد کنید:
( airflow ) $ sudo nano /etc/nginx/sites-available/airflow.conf
تنظیمات را به فایل اضافه کنید.
این پیکربندی ها ترافیک برنامه ما را از دامنه واقعی به سرور پشتیبان در http://127.0.0.1:8080
با استفاده از یک پروکسی هدایت می کند:
server { listen 80 ; listen [ :: ] :80 ; server_name airflow.example.com ; location / { proxy_pass http://127.0.0.1:8080 ; } }
مطمئن شوید که airflow.example.com
با دامنه واقعی که در داشبورد Vultr اضافه کرده ایم جایگزین کنید.
ذخیره کنید و فایل را ببندید.
برای فعال کردن فایل پیکربندی، فایل پیکربندی را به دایرکتوری sites-enabled
پیوند دهید:
( airflow ) $ sudo ln -s /etc/nginx/sites-available/airflow.conf /etc/nginx/sites-enabled/
حتماً تنظیمات را برای خطاها تحلیل کنید:
( airflow ) $ sudo nginx -t
خروجی ما باید مانند تصویر زیر ظاهر شود.
برای اعمال تغییرات، Nginx را مجددا راه اندازی کنید:
( airflow ) $ sudo systemctl reload nginx
اجازه دادن پورت HTTP 80
از طریق فایروال برای تمام اتصالات ورودی:
( airflow ) $ sudo ufw allow 80 /tcp
اجازه دادن پورت HTTPS 443
از طریق فایروال برای همه اتصالات ورودی:
( airflow ) $ sudo ufw allow 443 /tcp
قوانین فایروال را دوباره بارگیری کنید تا تغییرات ذخیره شود:
( airflow ) $ sudo ufw reload
اعمال اجازه دهید گواهینامه های SSL را در برنامه جریان هوا رمزگذاری کنیم
آخرین مرحله این است که یک گواهینامه Let's Encrypt SSL را در برنامه Airflow خود اعمال کنیم تا امنیت بسیار بیشتری داشته باشد و برنامه ما را از حملات ناخواسته نجات دهد.
با استفاده از Snap، کلاینت Certbot Let's Encrypt را نصب کنید:
( airflow ) $ snap install --classic certbot
یک گواهی SSL جدید برای دامنه ما دریافت کنید:
( airflow ) $ certbot --nginx -d airflow.example.com
مطمئن شوید که airflow.example.com
را با نام دامنه واقعی ما جایگزین کنید.
و هنگامی که از شما خواسته شد یک آدرس ایمیل وارد کنید و Y را فشار دهید تا شرایط Let's Encrypt را بپذیرید.
تست کنید که گواهی SSL پس از انقضا به طور خودکار تمدید می شود.
تمدید خودکار اطمینان حاصل می کند که گواهینامه های SSL ما به روز هستند و خطر انقضای گواهی را کاهش می دهد و امنیت برنامه ما را حفظ می کند:
( airflow ) $ certbot renew --dry-run
از یک مرورگر وب برای باز کردن برنامه Airflow ما استفاده کنید: https://airflow.example.com
.
وقتی از شما خواسته شد، نام کاربری و رمز عبوری که قبلا ایجاد کردیم را وارد کنید.
به داشبورد جریان هوا" loading="lazy">
با دسترسی به داشبورد، تمام DAG هایی که به طور پیش فرض ارائه شده اند قابل مشاهده خواهند بود.
نتیجه
در این مقاله نحوه ایجاد محیط های Conda، استقرار یک برنامه Airflow آماده تولید و بهبود عملکرد و امنیت یک برنامه را نشان دادیم.
ارسال نظر