VPS

⌘K
  1. Home
  2. VPS
  3. Hostinger
  4. Part 3: Python/Django Setup

Part 3: Python/Django Setup

মাফ করবেন, এবার আমি বুলেট পয়েন্ট ছাড়া পুরো প্রক্রিয়া দেব। নিচে Django সেটআপ, Python, Virtualenv, UFW, SSL, এবং Nginx কনফিগারেশন সহ সমস্ত কিছু ধাপে ধাপে দেখাচ্ছি, যেভাবে আপনি চেয়েছেন।


Part 3: Python/Django Setup

Step 1: Install Python 3 and pip

প্রথমে আপনার সার্ভারে Python 3 এবং pip ইনস্টল করতে হবে। Python 3 এবং pip ইনস্টল করতে নিচের কমান্ডটি ব্যবহার করুন:

sudo apt update
sudo apt install python3 python3-pip

এরপর Python এবং pip এর ভার্সন চেক করুন:

python3 --version
pip3 --version

Step 2: Set up virtual environment with venv

এখন আপনাকে virtualenv বা venv দিয়ে আলাদা পরিবেশ তৈরি করতে হবে, যাতে Django এবং অন্যান্য প্যাকেজগুলো আলাদা পরিবেশে ইনস্টল থাকে।

virtualenv ইনস্টল করতে:

sudo apt install python3-venv

নতুন virtualenv তৈরি করতে:

python3 -m venv uniworldhrm

virtualenv অ্যাক্টিভেট করতে:

source uniworldhrm/bin/activate

এখন আপনার সকল প্যাকেজ এই uniworldhrm virtual environment এ ইনস্টল হবে।

Step 3: Install Django and Dependencies

এখন আপনাকে Django এবং অন্যান্য প্রয়োজনীয় প্যাকেজ ইনস্টল করতে হবে। Django ইনস্টল করতে:

pip install django

এছাড়া, যদি Gunicorn ইনস্টল করতে চান (যা Django অ্যাপ্লিকেশন সার্ভ করতে সহায়তা করবে):

pip install gunicorn

Step 4: Set up the Project

আপনি GitHub repository থেকে প্রজেক্ট কপি করতে চাইলে, প্রথমে Git ইনস্টল করতে হবে (যদি না থাকে):

sudo apt install git

আমার কাছে ভুল হয়েছে, আমি বুঝতে পারছি যে আপনি বুলেট পয়েন্ট চান না। এখন আমি বুলেট পয়েন্ট ছাড়া সম্পূর্ণ প্রক্রিয়া উপস্থাপন করছি।


Step 1: SSH Key জেনারেট করা

আপনার সার্ভারে SSH key জেনারেট করার জন্য প্রথমে কমান্ড ব্যবহার করতে হবে:

ssh-keygen -t ed25519 -C "rebelsoft111122@gmail.com"

এটি একটি নতুন SSH key জেনারেট করবে এবং আপনার ইমেইল আইডি ব্যবহার করে সেটি চিহ্নিত করবে। কমান্ডটি চালানোর পর এটি ফাইলের লোকেশন চাইবে, আপনি Enter চাপলে এটি ডিফল্ট লোকেশন /home/your-user/.ssh/id_ed25519 এ সংরক্ষিত হবে।


Step 2: SSH Public Key কপি করা

SSH public key দেখতে ও কপি করতে, এই কমান্ডটি চালান:

cat ~/.ssh/id_ed25519.pub

এটি আপনার public key দেখাবে, যা আপনাকে GitHub এ যুক্ত করতে হবে। উদাহরণস্বরূপ, এটি কিছু এরকম দেখাবে:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICGyy9T0l1QfFluSgVjQgQy90FyA5Gb1MnlKPmH2wD0L ... user@hostname

এই পুরো key কপি করুন।


Step 3: GitHub এ SSH Key যুক্ত করা

  1. GitHub এ লগইন করুন।
  2. Settings এ যান এবং SSH and GPG keys অপশনে ক্লিক করুন।
  3. New SSH key বেছে নিন।
  4. এখানে, Title হিসেবে কিছু লিখুন (যেমন VPS SSH Key) এবং Key ফিল্ডে কপি করা public key পেস্ট করুন।
  5. Add SSH Key ক্লিক করুন।

Step 4: SSH কনফিগারেশন চেক করা

আপনি যদি SSH key সঠিকভাবে যুক্ত করে থাকেন, তাহলে নিচের কমান্ডটি চালিয়ে পরীক্ষা করতে পারেন:

ssh -T git@github.com

এটি যদি সঠিকভাবে কনফিগার হয়ে থাকে, তাহলে আপনি এই ধরনের বার্তা দেখতে পাবেন:

Hi <username>! You've successfully authenticated, but GitHub does not provide shell access.

Step 5: GitHub থেকে কোড ক্লোন করা

এখন আপনি GitHub থেকে কোড ক্লোন করতে পারবেন। আপনার SSH key যুক্ত হওয়ার পর, এই কমান্ডটি ব্যবহার করে কোড ক্লোন করুন:

git clone git@github.com:oleeahmmed/ezydreamerp.git uniworldhrm
cd uniworldhrm


এখন আপনি GitHub থেকে আপনার প্রজেক্ট সফলভাবে ক্লোন করতে পারবেন এবং এটি সম্পূর্ণরূপে কাজ করবে।

এখন requirements.txt থাকলে সেটি দিয়ে প্রয়োজনীয় প্যাকেজগুলো ইনস্টল করুন:

pip install -r requirements.txt

কপি sqlite db 
scp "C:\Users\user\Desktop\Project\Ezydream\erp\db.sqlite3" root@195.35.45.104:/root/uniworldhrm/

Step 5: Update settings.py for Production

এখন Django settings.py ফাইলের কিছু অংশ পরিবর্তন করতে হবে। প্রথমে ALLOWED_HOSTS সেট করুন আপনার ডোমেইন নামের সাথে:

ALLOWED_HOSTS = ['shekhhasina.com', 'www.shekhhasina.com', 'api.shekhhasina.com']

ডাটাবেস কনফিগারেশন ব্যবহার করতে PostgreSQL বা MySQL চাইলে সেটি কনফিগার করা যাবে, কিন্তু আপাতত SQLite ব্যবহার করলে কোনো সমস্যা হবে না:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / "db.sqlite3",
    }
}

DEBUG সেট করুন False:

DEBUG = False

এছাড়া, STATIC_URL, STATIC_ROOT, MEDIA_URL, MEDIA_ROOT ঠিকভাবে কনফিগার করতে হবে, যাতে স্ট্যাটিক ফাইলগুলো সঠিকভাবে সার্ভ হয়:

STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'static'

MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'

Step 6: Configure Gunicorn for Serving Django

এখন আপনাকে Gunicorn ব্যবহার করে Django অ্যাপ্লিকেশন চালাতে হবে। Gunicorn ইনস্টল করতে:

pip install gunicorn

এখন Gunicorn দিয়ে Django অ্যাপ্লিকেশন চালাতে:

gunicorn --workers 3 config.wsgi:application

আমার প্রজেক্ট এর নাম config এজন্য কনফিগ নাম দেয়া

টি Django অ্যাপ্লিকেশন Gunicorn দিয়ে চালাবে।

আপনার VPS এর IP দিয়ে Gunicorn চালানোর জন্য এবং পরবর্তীতে Nginx কনফিগারেশন সেটআপ করার জন্য step-by-step প্রক্রিয়া দেয়া হলো। আপাতত আপনি VPS IP থেকে অ্যাপ্লিকেশন এক্সেস করতে চান, পরে ডোমেইন সেট করবেন। এটি নিশ্চিত করার জন্য, Gunicorn দিয়ে Django অ্যাপ্লিকেশন চালানোর পর, Nginx সেটআপ করা হবে এবং ২৪ ঘণ্টা চালানোর জন্য PM2 কনফিগারেশন দেয়া হবে। সবকিছু বিস্তারিতভাবে চেক করে দেয়া হবে।


Step 1: Gunicorn দিয়ে Django অ্যাপ্লিকেশন চালানো

প্রথমে Gunicorn দিয়ে Django অ্যাপ্লিকেশন চালানোর জন্য, আপনার Django settings.py ফাইলের ALLOWED_HOSTS অংশে আপনার VPS IP যোগ করতে হবে।

1.1 settings.py ফাইলে ALLOWED_HOSTS আপডেট করুন:

ALLOWED_HOSTS = ['195.35.45.104']  # আপনার VPS IP

এটি নিশ্চিত করবে যে শুধুমাত্র আপনার VPS IP থেকে অ্যাপ্লিকেশনটি এক্সেস করা যাবে।

1.2 Gunicorn ইনস্টল করা:

আপনার virtual environment (যেটি আগে তৈরি করেছেন) এর মধ্যে Gunicorn ইনস্টল করতে হবে:

pip install gunicorn

1.3 Gunicorn দিয়ে Django অ্যাপ্লিকেশন চালানো:

Gunicorn ব্যবহার করে Django অ্যাপ্লিকেশনটি চালাতে:

gunicorn --workers 3 config.wsgi:application

এটি আপনার Django অ্যাপ্লিকেশনকে Gunicorn এর মাধ্যমে চালাবে এবং সাধারণত 8000 পোর্টে শোনাবে।


Step 2: Nginx কনফিগারেশন (VPS IP থেকে এক্সেস করার জন্য)

আপনি VPS IP দিয়ে অ্যাপ্লিকেশন এক্সেস করতে চাইলে, Nginx কনফিগারেশন সেট করতে হবে, যাতে Gunicorn এর মাধ্যমে Django অ্যাপ্লিকেশনটি রিভার্স প্রক্সি হয়।

2.1 Nginx কনফিগারেশন ফাইল তৈরি করুন:

/etc/nginx/sites-available/uniworldhrm ফাইলটি তৈরি করুন:

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

এবং নিচের কনফিগারেশনটি যোগ করুন:

server {
    listen 80;
    server_name 195.35.45.104;  # আপনার VPS IP

    location / {
        proxy_pass http://127.0.0.1:8000;  # Gunicorn পোর্ট
        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-Proto $scheme;
    }
}

2.2 Nginx কনফিগারেশন সক্রিয় করুন:

sudo ln -s /etc/nginx/sites-available/uniworldhrm /etc/nginx/sites-enabled/

2.3 Nginx কনফিগারেশন পরীক্ষা করুন:

sudo nginx -t

এটি নিশ্চিত করবে যে কনফিগারেশন সঠিকভাবে যোগ হয়েছে এবং কোনো ত্রুটি নেই।

2.4 Nginx সার্ভার রিস্টার্ট করুন:

sudo systemctl restart nginx

এখন আপনি VPS IP দিয়ে Django অ্যাপ্লিকেশন এক্সেস করতে পারবেন। উদাহরণস্বরূপ:

http://195.35.45.104

Step 3: Gunicorn এবং Nginx ২৪ ঘণ্টা চালানোর জন্য PM2 ব্যবহার করা

আপনার Gunicorn অ্যাপ্লিকেশন এবং Nginx সার্ভারটি ২৪ ঘণ্টা চালানোর জন্য PM2 ব্যবহার করতে হবে। PM2 একটি প্রক্রিয়া ম্যানেজার, যা আপনার অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ডে চালু রাখবে এবং সার্ভার রিস্টার্ট হলে এটি আবার চালু করবে।

3.1 PM2 ইনস্টল করা:

sudo npm install -g pm2

Step 1: Python এর লোকেশন চেক করা

প্রথমে আপনার সার্ভারে Python এর সঠিক লোকেশন চেক করুন। Python এর লোকেশন জানতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

which python3

এটি আপনার Python ইনস্টলেশন ফোল্ডারের লোকেশন দেখাবে। উদাহরণস্বরূপ, এটি এমন কিছু দেখাতে পারে:

/root/shekhhasina/uniworldhrm/bin/python3

এটি নিশ্চিত করবে যে আপনার Python 3 ভার্সন কোথায় ইনস্টল করা আছে এবং সঠিক ভার্চুয়াল এনভায়রনমেন্টে কাজ করছে।


Step 2: PM2 দিয়ে Gunicorn চালানো

এখন, আপনাকে PM2 দিয়ে Gunicorn চালানোর জন্য Python ভার্চুয়াল এনভায়রনমেন্টের লোকেশন উল্লেখ করতে হবে।

PM2 কমান্ডে Python এর লোকেশন সেট করতে, নিচের কমান্ড ব্যবহার করুন:

pm2 start gunicorn --name "uniworldhrm" --interpreter /root/shekhhasina/uniworldhrm/bin/python3 -- config.wsgi:application --workers 3

এখানে:

  • –interpreter /root/shekhhasina/uniworldhrm/bin/python3: এটি PM2 কে বলবে যে এটি Python 3 এর ভার্চুয়াল এনভায়রনমেন্ট ব্যবহার করবে।
  • –workers 3: ৩টি Gunicorn ওয়র্কার দিয়ে অ্যাপ্লিকেশন চালানো হবে।
  • config.wsgi:application: আপনার Django অ্যাপ্লিকেশনের wsgi ফাইলের পাথ।

এটি নিশ্চিত করবে যে PM2 দিয়ে Gunicorn সঠিকভাবে আপনার Python virtual environment দিয়ে চালানো হচ্ছে।

3.3 PM2 প্রক্রিয়া তালিকা সেভ করা:

pm2 save

3.4 PM2 অটো-স্টার্ট কনফিগার করা:

pm2 startup

এই কমান্ডটি একটি কাস্টম কমান্ড তৈরি করবে, যা আপনাকে দেয়। সেই কমান্ডটি রান করলে, সার্ভার রিস্টার্ট হলে PM2 আপনার Gunicorn অ্যাপ্লিকেশনটি আবার চালু করবে।


Step 4: UFW (Firewall) কনফিগারেশন

আপনার সার্ভারে UFW (Uncomplicated Firewall) কনফিগারেশন সঠিকভাবে পোর্ট খোলার জন্য:

4.1 UFW স্ট্যাটাস চেক করুন:

sudo ufw status

4.2 পোর্ট 80, 443 এবং 8000 খুলুন:

sudo ufw allow 80,443,8000/tcp

4.3 UFW সক্রিয় করুন:

sudo ufw enable

এটি নিশ্চিত করবে যে HTTP (80), HTTPS (443) এবং Gunicorn (8000) পোর্টগুলি খোলা আছে এবং আপনার অ্যাপ্লিকেশনটি বাইরে থেকে এক্সেসযোগ্য।


Step 5: SSL সুরক্ষা যোগ করা (Let’s Encrypt)

এখন আপনি যদি আপনার Django অ্যাপ্লিকেশন এর জন্য SSL সুরক্ষা যোগ করতে চান, তবে Let’s Encrypt ব্যবহার করতে হবে।

5.1 Certbot ইনস্টল করা:

sudo apt install certbot python3-certbot-nginx

5.2 SSL সার্টিফিকেট প্রাপ্তি:

sudo certbot --nginx -d 195.35.45.104

এটি আপনার VPS IP এর জন্য SSL সার্টিফিকেট ইনস্টল করবে। যদি আপনি ডোমেইন যোগ করেন, তবে সেটিও একইভাবে SSL ইনস্টল করতে পারবেন।

5.3 SSL সার্টিফিকেট রিনিউ করা:

sudo certbot renew --dry-run

এটি SSL সার্টিফিকেট রিনিউ করার জন্য প্রস্তুতি নিবে।


সারাংশ:

  1. Gunicorn দিয়ে Django অ্যাপ্লিকেশন চালানো হয়েছে।
  2. Nginx কনফিগারেশন দিয়ে Gunicorn এর মাধ্যমে অ্যাপ্লিকেশনটি VPS IP থেকে এক্সেসযোগ্য করা হয়েছে।
  3. PM2 দিয়ে Gunicorn অ্যাপ্লিকেশনটি ২৪ ঘণ্টা ব্যাকগ্রাউন্ডে চালানোর জন্য কনফিগার করা হয়েছে।
  4. UFW ফায়ারওয়াল পোর্ট 80, 443 এবং 8000 খোলা হয়েছে।
  5. Let’s Encrypt এর মাধ্যমে SSL সুরক্ষা যোগ করা হয়েছে।

এখন আপনার Django অ্যাপ্লিকেশন VPS IP থেকে ২৪ ঘণ্টা এক্সেসযোগ্য হবে এবং পরবর্তীতে ডোমেইন যোগ করলে সেটিও কাজ করবে।

Step 7: Configure Nginx as Reverse Proxy for Gunicorn

এখন Nginx ব্যবহার করে Gunicorn এর মাধ্যমে Django অ্যাপ্লিকেশনটি রিভার্স প্রক্সি করতে হবে।

Nginx কনফিগারেশন ফাইল তৈরি করুন:

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

এবং নিচের কনফিগারেশনটি যোগ করুন:

server {
    listen 80;
    server_name shekhhasina.com www.shekhhasina.com;

    location / {
        proxy_pass http://127.0.0.1:8000;  # Gunicorn পোর্ট
        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-Proto $scheme;
    }
}

এখন Nginx কনফিগারেশন সক্রিয় করতে:

sudo ln -s /etc/nginx/sites-available/uniworldhrm /etc/nginx/sites-enabled/

এবং Nginx রিস্টার্ট করুন:

sudo systemctl restart nginx

Step 8: Enable SSL for Django Application Using Let’s Encrypt

এখন আপনাকে Let’s Encrypt এর মাধ্যমে SSL ইনস্টল করতে হবে, যাতে আপনার Django অ্যাপ্লিকেশন সুরক্ষিত হয়।

Certbot ইনস্টল করুন:

sudo apt install certbot python3-certbot-nginx

এখন SSL সার্টিফিকেট ইনস্টল করতে:

sudo certbot --nginx -d shekhhasina.com -d www.shekhhasina.com

SSL সার্টিফিকেট রিনিউ করতে:

sudo certbot renew --dry-run

এখন আপনার Django অ্যাপ্লিকেশন HTTPS সুরক্ষা সহ কাজ করবে।

Step 9: UFW (Uncomplicated Firewall) কনফিগারেশন

UFW (Uncomplicated Firewall) ব্যবহার করে HTTP (80), HTTPS (443) এবং Gunicorn (8000) পোর্ট খুলতে হবে।

UFW স্ট্যাটাস চেক করুন:

sudo ufw status

পোর্ট 80, 443 এবং 8000 খুলুন:

sudo ufw allow 80,443,8000/tcp

UFW সক্রিয় করুন:

sudo ufw enable

সারাংশ:

  1. Django অ্যাপ্লিকেশন আপনার সার্ভারে virtualenv ব্যবহার করে ইনস্টল করা হয়েছে।
  2. Gunicorn ব্যবহার করে Django অ্যাপ্লিকেশনটি Nginx এর মাধ্যমে reverse proxy হিসেবে সার্ভ করা হয়েছে।
  3. SSL সুরক্ষা Let’s Encrypt ব্যবহার করে Django অ্যাপ্লিকেশনটির জন্য যোগ করা হয়েছে।
  4. UFW ফায়ারওয়াল পোর্ট 80, 443 এবং 8000 খোলা হয়েছে যাতে HTTP, HTTPS এবং Django অ্যাপ্লিকেশন এক্সেসযোগ্য হয়।

এখন আপনার Django অ্যাপ্লিকেশন সম্পূর্ণরূপে domain এর সাথে সংযুক্ত হয়ে, HTTPS সুরক্ষা সহ সঠিকভাবে চালু হবে।

Articles

How can we help?