راه اندازی جنگو به صورت asgi روی سرور لینوکسی با nginx و daphne

استقرار پروژه جنگو
how to deploy django project asgi

با سلام و درود، قصد دارم یه آموزش خیلی سریع برای استقرار پروژه ی جنگویی ( استقرار جنگو ) روی سرور لینوکسی و وب سرور Nginx و به صورت asgiا استفاده از daphne را با هم داشته باشیم.

با توجه به این که گفتم آموزش سریع هست، فرض بر این دارم که با لینوکس و Nginx آشنایی به اندازه کافی داشته باشید. و تنظیمات asgi را نیز برای پروژه خودتون انجام داده باشید و صرفا به مباحت استقرار ( استقرار جنگو ) می پردازیم.

قدم اول ساخت سرویس فایل Systemd برای daphne می باشد:

پس ابتدا یک فایل از نوع سرویس در پوشه system از systemd می سازیم:

sudo nano /etc/systemd/system/project_asgi.service

این فایل به صورت کامل از قرار زیر می باشد:

[Unit]
Description=my_project Daphne Service
After=network.target
[Service]
Type=simple
User=erp
Group=www-data
WorkingDirectory=/var/projects/my_project
ExecStart=/var/projects/.env/bin/daphne --access-log /var/projects/my_project/log/daphne-access.log -u /var/projects/my_project/my_project.sock my_project.asgi:application

[Install]
WantedBy=multi-user.target

قسمت اول [Unit] که dependency ها و metadata ها را مشخص می کند. که ما اسم پروژه و اینکه بعد از برقراری نتورک اجرا شود را تعریف می کنیم.

قسمت دوم [Service] می باشد که ما user و group که میخواهیم فرآیند تحت آن اجرا شود را مشخص می کنید. کاربر را کاربر عمومی که به فولدر های مورد نظر دسترسی دارد انتخاب می کنیم و گروه آن را www-data می گذاریم تا بتواند با nginx ارتباط داشته باشد. سپس دایرکتوری که در آن کار می کنیم را مشخص کرده و دستوری که برای اجرای سرویس نیاز می باشد را می نویسیم.

قسمت سوم [Install]  که میخواهیم بگیم به چه چیزی لین سرویس بعد از روع لینک خواهد شد. ما می خواهیم وقتی regular multi-user system بالا و در دسترس هست، این سرویس شروع شود.

حال فایل را ذخیره کنید و از حالت ویرایش خارج شوید.

سپس دو دستور زیر را بزنید:

sudo systemctl start project_asgi.service
sudo systemctl enable project_asgi.service

حال چک کنید وضعیت سرویس daphne که ایجاد کردیم چطور می باشد:

sudo systemctl status project_asgi.service

حال چک کنید فایل .sock داخل دایرکتوری مشخص شده ساخته شده است یا خیر. دایرکتوری که داخل سیستم فایل بالا تعریف کردیم و به قرار زیر بود:

/var/projects/my_project/my_project.sock

قدم دوم Nginx:

ابتدا با ساخت سرور بلاک شروع می شود (آموزش کامل داخل بلاگ هست ، نصب nginx روی ubuntu تنظیم سروربلاک برای Nginx):

sudo nano /etc/nginx/sites-available/myproject

که به صورت کامل محتوایش به صورت زیر می شود:

upstream channels-backend {
    server 0.0.0.0:8001;
}

server {
    listen 80;
    server_name erp.local 10.11.10.70;
    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /var/projects/myproject;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/var/projects/myproject/myproject.sock;
    }

    location /ws/ {
        proxy_pass http://channels-backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $server_name;
    }

}

با توجه به فرض اولیه آموزش، وارد جزییات سرور بلاک Nginx نمی شوم. و تمام