چگونه پروژه جنگو خود را در 8 centos اجرا (deploy) کنیم

خب در این پست میخواهم کد جنگو را بر روی سرور CentOS را برای شما شرح دهم. برای شروع باید که پایگاه داده و برنامه خود را راه اندازی سپس سرور برنامه Gunicorn را نصب و پیکربندی می کنیم. این به عنوان رابط برنامه ما عمل می کند و درخواست های مشتری را در تماس های HTTP به پایتون ترجمه می کند که برنامه ما می تواند پردازش کند. سپس Nginx را در مقابل Gunicorn راه اندازی خواهیم کرد تا از مکانیزم های عملکرد اتصال بالا با عملکرد بالا و ویژگی های امنیتی آسان برای اجرای آن بهره مند شویم.

خب بیایید شروع کنیم:


مرحله اول نصب EPEL repository

sudo yum install epel-release

در مرحله بعد نیاز است پایگاه داده را نصب کنید، برای اینکار من PostgreSQL را نصب میکنم

dnf module list postgresql

دستور بالا ورژن‌های postgres را به شما نشان میدهد ورژن مورد نظر خود را با دستور زیر انتخاب و نصب کنید

sudo dnf module enable postgresql:12 
sudo dnf module enable postgresql:<version of postgres>

برای نصب کامل من خودم از ورژن 10 را نصب می‌کنم

sudo dnf install postgresql-server

بعد نصب نیازه تا پیش نیازها postgres به آن نیاز دارد دستور زیر را وارد کنید

sudo postgresql-setup --initdb
sudo systemctl start postgresql
sudo systemctl enable postgresql

حواستون باشه دیتابیس postgres نیاز داره تا روش ورود به این دیتابیس از جنگو باید باشه حالت md5 است برای این کار فایل تنظیمات اصلی را ویرایش کنید

sudo nano /var/lib/pgsql/data/pg_hba.conf

از ident به md5 تغییر بدید. خیلی مهمه‌ها!!!!!!

# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
#host all all 127.0.0.1/32 ident
host all all 127.0.0.1/32 md5
# IPv6 local connections:
#host all all ::1/128 ident
host all all ::1/128 md5

بعد از ذخیره سازی با دستورات زیر فایل تنظیمات دیتابیس را ریستارت کنید

sudo systemctl restart postgresql 
sudo systemctl enable postgresql

با ترمینال دستور زیر را وارد کنید و پایگاه داده . schema و user را بسازید

sudo su - postgres
psql
CREATE DATABASE <yourdatabasename>
CREATE USER myprojectuser WITH PASSWORD 'password';
GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
\q

خب دیتابیس ساخته شد میریم واسه جنگو

sudo pip install virtualenv
virtualenv myprojectenv
source myprojectenv/bin/activate

خب حالا نصب کنید requiements.txt

pip install -r requiement.txt

از فایل setting ویرایش کنید مشخاصات پایگاه داده را

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'myproject',
'USER': 'myprojectuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}

جدولها دیتابیس را migrate کنید

python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser

خب پروژه را اجرا کنید اگه مشکلی نبود ادامه توضیحات من رو بخونید :)))

python manage.py runserver 0.0.0.0:8000

برای اجرا در nginx نیاز دارید تا gunicorn را نصب و اجرا کنید

pip install gunicorn 
cd ~/myproject
gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application

سرویس زیر را در بسازید

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

در این فایل تنظیمات زیر را اعمال کنید

حواستون باشه مسیر پروژه تون را جایگزین کنید

[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=user
Group=nginx
WorkingDirectory=/home/user/myproject
ExecStart=/home/user/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:/home/user/myproject/myproject.sock myproject.wsgi:application
[Install]
WantedBy=multi-user.target

سرویس gunicorn را اجرا کنید

sudo systemctl start gunicorn
sudo systemctl enable gunicorn

این بخش تمام شد حالا nginx را نصب کن

dnf install nginx
sudo nano /etc/nginx/nginx.conf
تنظیمات زیر را اعمال کنید 
server {
    listen 80;
    server_name server_domain_or_IP;
    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/user/myproject;
    }
    location / {
        proxy_set_header Host $http_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-Proto $scheme;
        proxy_pass http://unix:/home/user/myproject/myproject.sock;
    }
}

پس ریستارت کن امیدوارم اجرا بشه و

sudo nginx -t
sudo systemctl start nginx
sudo systemctl enable nginx