সাধারণ ছোটোখাটো প্রজেক্ট থেকে মাঝারি সাইজের প্রজেক্টের জন্য ফ্লাস্ক (Flask) একটি চমৎকার পাইথন ফ্রেমওয়ার্ক। আমি রেস্টফুল এপিআই তৈরির জন্য ফ্লাস্ক রেস্টফুল (Flask-RESTful) ব্যবহার করি। ডেভেলাপমেন্টের জন্য আমি ম্যাক ও উবুন্টু (Ubuntu) দুটোই ব্যবহার করি, আর সার্ভারে উবুন্টু। এখানে আমি উবুন্টুতে ফ্লাস্ক প্রজেক্ট ডেপ্লয় করার জন্য যা যা দরকার, সেগুলো লিখে রাখবো, যাতে পরবর্তি সময়ে আমার কিংবা অন্যদের সুবিধা হয়। কমান্ডগুলো উবুন্টু ১৪.০৪ ব্যবহার করে পরীক্ষা করা হয়েছে।
প্রথমে চেক করতে হবে কম্পিউটারে উবুন্টুর সব প্যাকেজ হালনাগাদ করা হয়েছে কী না। না হলে আপডেট করে নিতে হবে। এর জন্য সহজ কমান্ড হচ্ছে :
sudo apt-get update && sudo apt-get upgrade
এখন পাইথন ও পিপ (pip) ইনস্টল করবো :
sudo apt-get install build-essential python-dev python-pip
তারপরের কাজ হচ্ছে ভার্চুয়াল এনভারনমেন্ট ইনস্টল করা।
sudo pip install virtualenv
এটি দরকারি এজন্য যে একেক প্রজেক্ট একেক সময়ে করা হয়, তাই সেই প্রজেক্টের জন্য দরকার মডিউল আলাদা করে ফেলা উচিত, যাতে পরবর্তি সময়ে অন্য প্রজেক্টে কাজ করার সময় কনফ্লিক্ট তৈরি না হয়।
এখন যেই ডিরেক্টরিতে অ্যাপ্লিকেশনটি রাখা হবে, সেটি তৈরি করে ফেলা যাক :
sudo mkdir -p /var/www/myapp
এখন পারমিশন পরিবর্তন করতে হবে। আমার ক্ষেত্রে ইউজার আইডি হচ্ছে www-data, ইউজার গ্রুপও হচ্ছে www-data। আপনার ক্ষেত্রে সেটি অন্যরকম হতে পারে। লক্ষ্য রাখতে হবে যে অনেক সময় ফাইল পরিবর্তন করলে সেটি রুট বা অন্য ইউজার-এর হয়ে যায়, তাই পরীক্ষা করতে হবে যে myapp ডিরেক্টরির সব ফাইল এবং সাব-ডিরেক্টরির পারমিশন ঠিক আছে কী না।
sudo chown -R www-data:www-data /var/www/myapp
cd /var/www/myapp
এখন ভার্চুয়াল এনভারমেন্ট তৈরি করি।
virtualenv venv --no-site-packages
ভার্চুয়াল এনভারমেন্ট একটিভেট করে সেখানে ফ্লাস্ক ইনস্টল করি।
source venv/bin/activate
pip install flask
এখানে আমরা আমাদের ফ্লাস্ক অ্যাপটি রাখবো।
লক্ষ্য রাখতে হবে যে হোস্ট সেট করতে হবে 0.0.0.0 তে (127.0.0.1-এ নয়)। আর অ্যাপ্লিকেশনের শুরুটা রাখতে হবে if __name__ == ‘__main__’: ব্লকের ভিতরে।
এরপরের কাজ হচ্ছে ওয়েব সার্ভার ইনস্টল করা (যদি ইনস্টল করা না থাকে)। আমি সাধারণত ইঞ্জিন-এক্স ব্যবহার করি। আর ইনস্টল করার আগে ভার্চুয়াল এনভারমেন্ট ডিএকটিভেট করে নিতে হবে এই কমান্ড দিয়ে :
deactivate
sudo apt-get install nginx
এখন আমি uwsgi ইনস্টল করবো, এটি ইঞ্জিনএক্স ও আমার ফ্লাস্ক অ্যাপ্লিকেশনের মধ্যে একটি যোগসূত্র তৈরি করে দিবে, মানে এটিই আমার ফ্লাস্ক অ্যাপ্লিকেশনকে চালাবে। এর ব্যবহার বাধ্যতামূলক নয়, তবে ব্যবহার করলে ভালো। 🙂
sudo apt-get install uwsgi uwsgi-plugin-python
এখন একটা সকেট ফাইল তৈরি করা লাগবে যার মাধ্যমে ইঞ্জিনএক্স, uwsgi-এর সাথে যোগাযোগ করবে।
cd /tmp/
touch mapp.sock
ফাইলের পারমিশন পরিবর্তন করতে হবে যাতে ইঞ্জিনএক্স সেটি চালাতে পারে।
sudo chown www-data:www-data myapp.sock
এরপর ইঞ্জিনএক্সের কনফিগারেশন ফাইল তৈরি করতে হবে। এর জন্য প্রথমে /etc/nginx/sites-available ডিরেক্টরিতে যেতে হবে নিচের কমান্ড দিয়ে :
cd /etc/nginx/sites-available
তারপরে ডিফল্ট যেই কনফিগারেশন ফাইল আছে, সেটি মুছে ফেলতে হবে বা সরিয়ে রাখতে হবে।
sudo mv default _default
এবারে নতুন কনফিগারেশন ফাইল তৈরির জন্য আমরা নিচের কমান্ড ব্যবহার করতে পারি :
sudo vi myapp
এটি vi এডিটর দিয়ে খুলবে, চাইলে অন্য এডিটরও ব্যবহার করা যায়।
এখন নতুন ফাইলে নিচের জিনিসগুলো পেস্ট করতে হবে :
server { listen 80; server_tokens off; server_name myapp.com; location / { include uwsgi_params; uwsgi_pass unix:/tmp/myapp.sock; } location /static { alias /var/www/myapp/static; } }
এখানে লক্ষ্যণীয় যে static ফাইলগুলো রাখার জন্য /var/www/myapp/static ডিরেক্টরি ব্যবহার করা হয়েছে। আপনি আপনার প্রয়োজনমতো ডিরেক্টরি তৈরি করে সেই লোকেশন এখানে লিখবেন।
যেই কনফিগারেশন ফাইলটি তৈরি করলাম, তার একটি লিঙ্ক তৈরি করতে হবে /etc/nginx/sites-enabled ডিরেক্টরিতে। এর জন্য নিচের কমান্ড দিতে হবে :
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/myapp
এবারে uwsgi এর জন্যও একটি কনফিগারেশন ফাইল তৈরি করা লাগবে, লোকোশনসহ ফাইলটি হচ্ছে /etc/uwsgi/apps-available/myapp.ini
ফাইলে নিচের জিনিসগুলো লিখতে হবে:
[uwsgi] vhost = true socket = /tmp/myapp.sock venv = /var/www/myapp/venv chdir = /var/www/myapp module = api callable = app
মডিউল হচ্ছে পাইথন স্ক্রিপ্ট যেই ফাইলে আছে তার নাম আর কলেবল হচ্ছে ওই স্ক্রিপ্টে যেই ফ্লাস্ক অবজেক্ট তৈরি করা হয়েছে। উদাহরণস্বরূপ নিচের স্ক্রিপ্টটি আমরা দেখি:
from flask import flask app = Flask(__name__) @my_app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run(host='0.0.0.0')
এটি যদি api.py নামের ফাইলে সেভ করা হয়, তাহলে কনফিগারেশন ফাইলে module = api এবং callable = app লিখতে হবে।
তারপর নিচের কমান্ড দিয়ে লিঙ্ক করতে হবে:
sudo ln -s /etc/uwsgi/apps-available/myapp.ini /etc/uwsgi/apps-enabled/myapp.ini
সবশেষে nginx ও uwsgi আবার চালু করতে হবে।
sudo service nginx restart
sudo service uwsgi restart
সবকিছু ঠিকঠাক হয়ে থাকলে ফ্লাস্ক অ্যাপ্লিকেশনটি এখন কাজ করবে।