CherryPy একটি শক্তিশালী ওয়েব ফ্রেমওয়ার্ক যা ডেভেলপমেন্ট থেকে প্রোডাকশন পরিবেশে সরাসরি ডিপ্লয় করা যায়। প্রোডাকশনে CherryPy অ্যাপ্লিকেশন পরিচালনার জন্য কিছু নির্দিষ্ট কনফিগারেশন এবং পরিবেশগত সেটিংসের প্রয়োজন হয়। এই গাইডে CherryPy অ্যাপ্লিকেশন ডিপ্লয়মেন্ট এবং প্রোডাকশন কনফিগারেশন নিয়ে আলোচনা করা হবে।
CherryPy অ্যাপ্লিকেশন ডিপ্লয়মেন্টের সাধারণ প্রক্রিয়া
CherryPy তে অ্যাপ্লিকেশন ডিপ্লয় করার জন্য প্রথমে আপনাকে কিছু গুরুত্বপূর্ণ কনফিগারেশন সেট করতে হবে, যাতে অ্যাপ্লিকেশনটি প্রোডাকশন পরিবেশে ঠিকভাবে চলতে পারে।
১. CherryPy অ্যাপ্লিকেশন ডিপ্লয় করা
CherryPy অ্যাপ্লিকেশনকে প্রোডাকশনে ডিপ্লয় করার জন্য অনেক পদ্ধতি আছে, তবে সবচেয়ে সাধারণ দুটি পদ্ধতি হলো:
- CherryPy এর built-in server ব্যবহার করা (এই পদ্ধতি শুধুমাত্র ডেভেলপমেন্ট পরিবেশে ব্যবহার করা যেতে পারে, প্রোডাকশনে নয়)
- CherryPy কে অন্যান্য ওয়েব সার্ভারের সাথে (যেমন Nginx বা Apache) সংযুক্ত করা
চলুন দেখি এই দুটি পদ্ধতি:
১. CherryPy এর built-in server ব্যবহার
প্রথমে, CherryPy এর built-in server দিয়ে অ্যাপ্লিকেশন চালানো যায়, তবে এটি শুধুমাত্র ডেভেলপমেন্ট পরিবেশে ব্যবহার করা উচিত, কারণ এটি প্রোডাকশনের জন্য খুবই সীমিত এবং নিরাপত্তা ঝুঁকি থাকতে পারে। CherryPy এর built-in server স্বয়ংক্রিয়ভাবে HTTP সার্ভিস প্রদান করে।
উদাহরণ:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপ্লিকেশনে!"
if __name__ == '__main__':
cherrypy.config.update({
'server.socket_host': '0.0.0.0',
'server.socket_port': 8080
})
cherrypy.quickstart(MyApp())
এখানে, CherryPy built-in HTTP সার্ভার 0.0.0.0:8080 এ চলবে এবং বাইরের (external) রিকোয়েস্ট গ্রহণ করতে সক্ষম হবে।
২. প্রোডাকশনে CherryPy সার্ভারকে Nginx বা Apache এর সাথে সংযুক্ত করা
প্রোডাকশন পরিবেশে সাধারণত CherryPy কে Nginx বা Apache এর মতো শক্তিশালী ওয়েব সার্ভারের সাথে সংযুক্ত করা হয়, কারণ এই সার্ভারগুলি হ্যান্ডলিং এবং লোড ব্যালান্সিংয়ে বেশি সক্ষম।
Apache তে CherryPy অ্যাপ্লিকেশন ডিপ্লয়:
Apache ওয়েব সার্ভারের সাথে CherryPy কে WSGI (Web Server Gateway Interface) ব্যবহার করে সংযুক্ত করা যায়। আপনি mod_python বা mod_wsgi ব্যবহার করতে পারেন।
উদাহরণ: mod_wsgi ব্যবহার করে CherryPy অ্যাপ্লিকেশন চালানো
- প্রথমে, mod_wsgi ইনস্টল করতে হবে:
sudo apt-get install libapache2-mod-wsgi
- CherryPy অ্যাপ্লিকেশন
myapp.pyনামে তৈরি করুন:
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপ্লিকেশনে!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
- Apache কনফিগারেশন ফাইলের মধ্যে CherryPy অ্যাপ্লিকেশন যুক্ত করুন:
<VirtualHost *:80>
ServerName mycherrypyapp.com
WSGIScriptAlias / /path/to/myapp.wsgi
<Directory /path/to>
Require all granted
</Directory>
</VirtualHost>
- CherryPy অ্যাপ্লিকেশন জন্য
myapp.wsgiফাইল তৈরি করুন:
import sys
import os
sys.path.insert(0, '/path/to/your/application')
from myapp import MyApp
application = MyApp()
- Apache সার্ভার পুনরায় চালু করুন:
sudo systemctl restart apache2
এখন আপনি CherryPy অ্যাপ্লিকেশন Apache সার্ভারে ডিপ্লয় করতে পারবেন।
CherryPy প্রোডাকশন কনফিগারেশন
CherryPy তে প্রোডাকশন কনফিগারেশনের জন্য কিছু গুরুত্বপূর্ণ সেটিংস রয়েছে, যেগুলি সঠিকভাবে কনফিগার করা উচিত।
১. থ্রেডিং এবং মাল্টি-প্রসেসিং:
প্রোডাকশনে CherryPy সার্ভার থ্রেডিং বা মাল্টি-প্রসেসিং ব্যবহার করতে পারে যাতে সার্ভার ভালোভাবে লোড সামলাতে পারে।
cherrypy.config.update({
'server.thread_pool': 10, # থ্রেড পুল সাইজ
'server.socket_host': '0.0.0.0',
'server.socket_port': 8080
})
২. অথেনটিকেশন এবং সেশন:
প্রোডাকশনে সেশন নিরাপত্তা নিশ্চিত করা এবং অথেনটিকেশন সিস্টেম কনফিগার করা গুরুত্বপূর্ণ।
cherrypy.config.update({
'tools.sessions.on': True, # সেশন চালু করা
'tools.sessions.timeout': 60 # সেশনের টাইমআউট 60 সেকেন্ড
})
৩. লগিং কনফিগারেশন:
অ্যাপ্লিকেশনের লগিং ব্যবস্থাপনা গুরুত্বপূর্ণ, যাতে সমস্যা সনাক্ত করা যায়।
cherrypy.config.update({
'log.access_file': 'access.log',
'log.error_file': 'error.log',
'log.screen': False # স্ক্রীনে লগ দেখানো বন্ধ করা
})
৪. Error Handling:
প্রোডাকশনে ত্রুটি সঠিকভাবে হ্যান্ডেল করা এবং উপযুক্ত ত্রুটি পেজ দেখানো গুরুত্বপূর্ণ।
cherrypy.config.update({
'error_page.default': '/path/to/custom_error_page.html'
})
CherryPy প্রোডাকশন পরিবেশে সুরক্ষা
- HTTPS সমর্থন: নিরাপদ কননেকশন নিশ্চিত করতে SSL ব্যবহার করুন। CherryPy তে SSL সাপোর্ট রয়েছে, তবে এটি Apache বা Nginx এর সাথে ব্যবহারের সময় আরও নিরাপদ।
- Rate Limiting: API অথবা সার্ভার রিকোয়েস্টের হার সীমাবদ্ধ করতে হবে যাতে DoS (Denial of Service) আক্রমণ প্রতিরোধ করা যায়।
- Request Filtering: ইউজার ইনপুট যাচাই করুন, যাতে XSS (Cross-Site Scripting) বা SQL Injection আক্রমণ প্রতিরোধ করা যায়।
CherryPy-তে প্রোডাকশন পরিবেশে অ্যাপ্লিকেশন ডিপ্লয় করা এবং কনফিগারেশন গুরুত্বপূর্ণ। CherryPy এর বিল্ট-ইন সার্ভার ব্যবহার করা যেতে পারে তবে প্রোডাকশনে শক্তিশালী ওয়েব সার্ভার (যেমন Apache বা Nginx) ব্যবহার করে CherryPy অ্যাপ্লিকেশন ডিপ্লয় করা সর্বোত্তম। আপনি সার্ভার কনফিগারেশন, সেশন ব্যবস্থাপনা, লগিং, এবং নিরাপত্তা ফিচার (যেমন HTTPS এবং Error Handling) সঠিকভাবে কনফিগার করতে পারেন, যা আপনার অ্যাপ্লিকেশনকে প্রোডাকশন পরিবেশে কার্যকরী এবং নিরাপদ রাখবে।
CherryPy একটি পাইথন-ভিত্তিক ওয়েব ফ্রেমওয়ার্ক, যা ছোট এবং মাঝারি আকারের অ্যাপ্লিকেশন দ্রুত তৈরি এবং ডেপ্লয় করার জন্য আদর্শ। তবে যখন এটি উৎপাদন (production) পরিবেশে ডেপ্লয় করার কথা আসে, তখন কিছু অতিরিক্ত পদক্ষেপ নিতে হয় যাতে অ্যাপ্লিকেশন সঠিকভাবে এবং নিরাপদে চলতে পারে। CherryPy অ্যাপ্লিকেশন ডেপ্লয়মেন্টের জন্য বেশ কিছু ভিন্ন পদ্ধতি রয়েছে, এবং এটির সাথে বিভিন্ন সার্ভার এবং কনফিগারেশন টুল ব্যবহার করা যেতে পারে।
এখানে CherryPy অ্যাপ্লিকেশন ডেপ্লয়মেন্টের জন্য বিভিন্ন পদ্ধতি আলোচনা করা হবে।
CherryPy অ্যাপ্লিকেশন ডেপ্লয়মেন্টের জন্য কিছু সাধারণ পদক্ষেপ
- CherryPy সঠিকভাবে কনফিগারেশন করা
- অ্যাপ্লিকেশন ওয়েব সার্ভারে ডেপ্লয় করা
- প্রোডাকশন পরিবেশে CherryPy চালানোর জন্য WSGI ব্যবহার করা
- প্রোডাকশন সার্ভারের জন্য Nginx বা Apache ব্যবহার করা
- অ্যাপ্লিকেশন মনিটরিং এবং লোগিং
1. CherryPy অ্যাপ্লিকেশন কনফিগারেশন করা
CherryPy এর ডিফল্ট HTTP সার্ভার প্রোডাকশন পরিবেশের জন্য উপযুক্ত নয়, কারণ এটি থ্রেডিং এবং অন্যান্য উন্নত কনফিগারেশন সমর্থন করে না। তাই প্রোডাকশনে CherryPy অ্যাপ্লিকেশন ডেপ্লয় করার সময় WSGI (Web Server Gateway Interface) ব্যবহার করা হয়।
CherryPy কনফিগারেশন উদাহরণ
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy অ্যাপ্লিকেশনে!"
if __name__ == '__main__':
cherrypy.config.update({
'server.socket_host': '0.0.0.0', # সব আইপি থেকে অ্যাক্সেসযোগ্য
'server.socket_port': 8080, # পোর্ট নাম্বার
'log.access_file': './logs/access.log', # অ্যাক্সেস লগ ফাইল
'log.error_file': './logs/error.log', # ত্রুটি লগ ফাইল
'engine.autoreload.on': False # রিলোড বন্ধ
})
cherrypy.quickstart(MyApp())
এখানে:
server.socket_host: সব আইপি থেকে অ্যাপ্লিকেশন অ্যাক্সেসযোগ্য হতে0.0.0.0ব্যবহার করা হয়।server.socket_port: সার্ভারের পোর্ট নম্বর নির্ধারণ করা হয়।engine.autoreload.on: প্রোডাকশনে অটো রিলোড বন্ধ করা হয়।
2. CherryPy অ্যাপ্লিকেশন ওয়েব সার্ভারে ডেপ্লয় করা
WSGI (Web Server Gateway Interface) ব্যবহার করা
CherryPy এর WSGI সাপোর্ট ব্যবহার করে প্রোডাকশন পরিবেশে CherryPy অ্যাপ্লিকেশন চালানো হয়। WSGI সার্ভার যেমন Gunicorn, uWSGI বা mod_wsgi ব্যবহার করা যেতে পারে।
উদাহরণ: WSGI ফাইল তৈরি করা
from myapp import MyApp
import cherrypy
if __name__ == "__main__":
cherrypy.tree.graft(MyApp(), "/")
cherrypy.engine.start()
cherrypy.engine.block()
এখানে myapp হল আপনার অ্যাপ্লিকেশন মডিউল। এই WSGI ফাইলটি ওয়েব সার্ভার (যেমন Gunicorn বা uWSGI) এর মাধ্যমে ব্যবহৃত হবে।
3. Gunicorn ব্যবহার করে CherryPy অ্যাপ্লিকেশন ডেপ্লয় করা
Gunicorn (Green Unicorn) একটি WSGI HTTP সার্ভার, যা Python অ্যাপ্লিকেশনের জন্য দ্রুত এবং সক্ষম। Gunicorn ব্যবহারের মাধ্যমে CherryPy অ্যাপ্লিকেশন দ্রুত ডেপ্লয় করা যায়।
Gunicorn ইনস্টল এবং ব্যবহার
pip install gunicorn
Gunicorn দিয়ে CherryPy অ্যাপ চালানো
gunicorn -w 4 myapp:app
এখানে:
-w 4: ৪টি ওয়র্কার থ্রেড ব্যবহার করার জন্য।myapp:app:myapp.pyফাইল থেকে অ্যাপ্লিকেশন লোড করা হয়।
4. Apache অথবা Nginx ব্যবহার করে CherryPy ডেপ্লয়
Nginx দিয়ে CherryPy অ্যাপ্লিকেশন প্রোক্সি করা
প্রোডাকশন পরিবেশে CherryPy অ্যাপ্লিকেশন চালানোর জন্য, Nginx সাধারণত একটি রিভার্স প্রোক্সি সার্ভার হিসেবে ব্যবহৃত হয়। এটি ওয়েব সার্ভার হিসাবে কাজ করে এবং Gunicorn বা CherryPy এর মতো অ্যাপ্লিকেশন সার্ভারের সামনে দাঁড়িয়ে থাকে।
Nginx কনফিগারেশন উদাহরণ:
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8080; # CherryPy অ্যাপ্লিকেশন প্রোক্সি করা
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_pass: এটি Nginx কে অ্যাপ্লিকেশন সার্ভারের (যেমন CherryPy) পোর্টে রিকোয়েস্ট পাঠাতে বলে।
5. CherryPy অ্যাপ্লিকেশন মনিটরিং এবং লোগিং
Log Rotation এবং Error Handling
প্রোডাকশন পরিবেশে অ্যাপ্লিকেশন পরিচালনার জন্য লোগিং অত্যন্ত গুরুত্বপূর্ণ। CherryPy তে লোগিং কনফিগারেশন সহজেই সেট করা যায়। অ্যাপ্লিকেশনের ত্রুটি এবং অ্যাক্সেস লগ কনফিগার করার মাধ্যমে ডিবাগিং এবং মনিটরিং সহজ হয়।
CherryPy লোগিং কনফিগারেশন উদাহরণ
cherrypy.config.update({
'log.access_file': './logs/access.log',
'log.error_file': './logs/error.log',
'log.screen': False, # স্ক্রীনে লগ দেখানো হবে না
'log.rotation.when': 'D', # প্রতি দিন লোগ ফাইল রোটেট হবে
'log.rotation.interval': 1,
'log.rotation.backups': 7 # সর্বাধিক ৭টি ব্যাকআপ রাখা হবে
})
এখানে লোগ ফাইলের রোটেশন কনফিগার করা হয়েছে, যা লোগ ফাইলের আকার বড় হলে নতুন একটি ফাইল তৈরি করবে এবং পুরনো ফাইলগুলো সংরক্ষণ করবে।
CherryPy অ্যাপ্লিকেশন ডেপ্লয়মেন্ট প্রক্রিয়া বেশ সরল এবং সুসংগঠিত। Gunicorn এবং WSGI ব্যবহার করে CherryPy অ্যাপ্লিকেশন প্রোডাকশন পরিবেশে দ্রুত ডেপ্লয় করা যায়, যেখানে Nginx বা Apache প্রোক্সি সার্ভার হিসেবে কাজ করতে পারে। CherryPy অ্যাপ্লিকেশনকে স্থিতিশীল এবং নিরাপদে পরিচালনা করতে মনিটরিং এবং লোগিং ব্যবস্থারও গুরুত্ব রয়েছে।
CherryPy একটি বিল্ট-ইন HTTP সার্ভার দিয়ে কাজ করতে পারে, তবে এটি বড় আকারের অ্যাপ্লিকেশনগুলির জন্য কিছু সীমাবদ্ধতা থাকতে পারে। তাই, উন্নত পারফরম্যান্স এবং স্কেলেবিলিটি নিশ্চিত করার জন্য CherryPy অ্যাপ্লিকেশনকে Apache বা Nginx এর সাথে কনফিগার করা যেতে পারে। এই দুইটি ওয়েব সার্ভারই ওয়েব অ্যাপ্লিকেশনগুলির জন্য শক্তিশালী এবং স্কেলেবল পরিবেশ প্রদান করে।
এখানে আমরা দেখব কীভাবে CherryPy অ্যাপ্লিকেশনকে Apache এবং Nginx এর সাথে কনফিগার করা যায়।
CherryPy এর সাথে Apache কনফিগারেশন
Apache সার্ভারকে CherryPy অ্যাপ্লিকেশন চলানোর জন্য mod_wsgi বা mod_proxy মডিউল ব্যবহার করতে হয়। mod_wsgi প্রাথমিকভাবে Python অ্যাপ্লিকেশন চালানোর জন্য ব্যবহৃত হয়।
ধাপ ১: Apache ইনস্টলেশন এবং mod_wsgi মডিউল ইনস্টল করা
প্রথমে Apache ওয়েব সার্ভার এবং mod_wsgi ইনস্টল করতে হবে:
Ubuntu/Debian:
sudo apt update sudo apt install apache2 sudo apt install libapache2-mod-wsgi-py3CentOS/RHEL:
sudo yum install httpd sudo yum install mod_wsgi
ধাপ ২: CherryPy অ্যাপ্লিকেশন সেটআপ
আপনার CherryPy অ্যাপ্লিকেশনটির ফোল্ডার তৈরি করুন। উদাহরণস্বরূপ:
/var/www/myapp/
├── app.py
└── /templates
ধাপ ৩: Apache কনফিগারেশন
আপনার Apache কনফিগারেশন ফাইলে mod_wsgi ব্যবহার করে CherryPy অ্যাপ্লিকেশনটি লোড করতে হবে। এই কনফিগারেশনটি /etc/apache2/sites-available/myapp.conf ফাইলে রাখুন।
<VirtualHost *:80>
ServerName myapp.com
DocumentRoot /var/www/myapp
WSGIScriptAlias / /var/www/myapp/app.wsgi
WSGIDaemonProcess myapp user=www-data group=www-data threads=5
WSGIProcessGroup myapp
<Directory /var/www/myapp>
Require all granted
</Directory>
</VirtualHost>
ধাপ ৪: CherryPy অ্যাপ্লিকেশন WSGI ফাইল তৈরি করা
আপনার CherryPy অ্যাপ্লিকেশন ফোল্ডারে একটি app.wsgi ফাইল তৈরি করুন:
import cherrypy
from myapp import MyApp # আপনার CherryPy অ্যাপ্লিকেশনের ক্লাস
cherrypy.tree.graft(MyApp(), "/")
cherrypy.engine.start()
ধাপ ৫: Apache সার্ভার রিস্টার্ট করা
Apache কনফিগারেশন সম্পন্ন হলে, Apache সার্ভারটি রিস্টার্ট করুন:
sudo systemctl restart apache2
এখন আপনি http://myapp.com এ CherryPy অ্যাপ্লিকেশনটি অ্যাক্সেস করতে পারবেন।
CherryPy এর সাথে Nginx কনফিগারেশন
Nginx কে সাধারণত একটি reverse proxy হিসেবে ব্যবহার করা হয়। Nginx এ CherryPy অ্যাপ্লিকেশন রিডাইরেক্ট করার জন্য proxy_pass নির্দেশনা ব্যবহার করা হয়।
ধাপ ১: Nginx ইনস্টলেশন
Ubuntu/Debian:
sudo apt update sudo apt install nginxCentOS/RHEL:
sudo yum install nginx
ধাপ ২: CherryPy অ্যাপ্লিকেশন সেটআপ
CherryPy অ্যাপ্লিকেশনটি চলবে, কিন্তু Nginx ব্যবহার করে রিভার্স প্রক্সি করা হবে। উদাহরণস্বরূপ:
/var/www/myapp/
├── app.py
ধাপ ৩: Nginx কনফিগারেশন
Nginx কনফিগারেশন ফাইলে CherryPy অ্যাপ্লিকেশন রিভার্স প্রক্সি করতে নিম্নলিখিত সেটিংস যোগ করুন। কনফিগারেশন ফাইলটি /etc/nginx/sites-available/myapp এ রাখুন:
server {
listen 80;
server_name myapp.com;
location / {
proxy_pass http://127.0.0.1:8080; # CherryPy সার্ভারের URL
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;
}
}
ধাপ ৪: CherryPy অ্যাপ্লিকেশন চালানো
CherryPy অ্যাপ্লিকেশনটি চালানোর জন্য সাধারণভাবে আপনি এটি নীচের মতো চালাবেন:
python /var/www/myapp/app.py
এটি CherryPy সার্ভারকে http://127.0.0.1:8080 এ চালাবে।
ধাপ ৫: Nginx সার্ভার রিস্টার্ট করা
Nginx কনফিগারেশনটি সম্পন্ন হলে, Nginx সার্ভারটি রিস্টার্ট করুন:
sudo systemctl restart nginx
এখন আপনি http://myapp.com এ CherryPy অ্যাপ্লিকেশনটি অ্যাক্সেস করতে পারবেন।
CherryPy কে Apache বা Nginx এর সাথে কনফিগার করার মাধ্যমে আপনি উচ্চ পারফরম্যান্স এবং স্কেলেবিলিটি অর্জন করতে পারবেন। Apache সাধারণত mod_wsgi মডিউল ব্যবহার করে CherryPy অ্যাপ্লিকেশন হোস্ট করে, যেখানে Nginx রিভার্স প্রক্সি হিসেবে কাজ করে এবং CherryPy অ্যাপ্লিকেশনকে হ্যান্ডেল করে।
- Apache ব্যবহারে WSGI এর মাধ্যমে CherryPy অ্যাপ্লিকেশন সরাসরি পরিচালিত হয়।
- Nginx ব্যবহারে রিভার্স প্রক্সি হিসেবে CherryPy অ্যাপ্লিকেশন চলে এবং Nginx বিভিন্ন রিকোয়েস্ট হ্যান্ডেল করে।
Docker হলো একটি পপুলার কন্টেইনারাইজেশন প্ল্যাটফর্ম যা ডেভেলপারদের এক জায়গায় অ্যাপ্লিকেশন তৈরির, টেস্ট করার এবং ডিপ্লয়মেন্টের জন্য একটি একক পরিবেশ তৈরি করতে সহায়তা করে। CherryPy অ্যাপ্লিকেশনকে Docker কন্টেইনারে ডিপ্লয় করা অ্যাপ্লিকেশনকে পরিবেশের ওপর নির্ভরশীলতা কমিয়ে দেয় এবং সহজে পরিচালনাযোগ্য করে তোলে।
এখানে CherryPy অ্যাপ্লিকেশন Docker কন্টেইনারে কীভাবে ডিপ্লয় করবেন তা ব্যাখ্যা করা হবে।
ধাপ ১: CherryPy অ্যাপ্লিকেশন তৈরি করা
প্রথমে একটি সহজ CherryPy অ্যাপ্লিকেশন তৈরি করি, যা Docker কন্টেইনারে রান করবে।
উদাহরণ: CherryPy অ্যাপ্লিকেশন (app.py)
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "Hello, Welcome to CherryPy running in Docker!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এই অ্যাপ্লিকেশনটি একটি সাধারণ ওয়েব সার্ভার চালাবে যা "Hello, Welcome to CherryPy running in Docker!" বার্তা দেখাবে।
ধাপ ২: Dockerfile তৈরি করা
Dockerfile হল একটি টেক্সট ফাইল, যা আপনার অ্যাপ্লিকেশন কিভাবে Docker কন্টেইনারে রান করবে তা নির্ধারণ করে। এখানে আমরা CherryPy ইনস্টল করে অ্যাপ্লিকেশন রান করার জন্য একটি Dockerfile তৈরি করব।
উদাহরণ: Dockerfile
# Step 1: Use official Python image
FROM python:3.9-slim
# Step 2: Set the working directory inside the container
WORKDIR /app
# Step 3: Copy the current directory contents into the container
COPY . /app
# Step 4: Install dependencies
RUN pip install --no-cache-dir cherrypy
# Step 5: Expose port 8080 (CherryPy default port)
EXPOSE 8080
# Step 6: Run the CherryPy app
CMD ["python", "app.py"]
এখানে:
FROM python:3.9-slim: এটি Python 3.9 এর একটি লাইটওয়েট ভার্সন নিয়ে আসে।WORKDIR /app: কন্টেইনারের মধ্যে/appডিরেক্টরিটি কাজের স্থান হিসেবে নির্ধারণ করা হয়েছে।COPY . /app: আপনার অ্যাপ্লিকেশন কোড কন্টেইনারে কপি করা হয়।RUN pip install cherrypy: CherryPy ইনস্টল করা হচ্ছে।EXPOSE 8080: কন্টেইনারে 8080 পোর্ট প্রকাশ করা হচ্ছে, যা CherryPy ডিফল্ট পোর্ট।CMD ["python", "app.py"]: CherryPy অ্যাপ্লিকেশন চালানোর জন্য কমান্ড।
ধাপ ৩: Docker ইমেজ তৈরি করা
এখন আমাদের Dockerfile এবং অ্যাপ্লিকেশন কোডের সাথে ইমেজ তৈরি করতে হবে। টার্মিনাল বা কমান্ড প্রম্পটে নিচের কমান্ডটি চালান:
docker build -t cherrypy-app .
এটি Dockerfile অনুসারে একটি ইমেজ তৈরি করবে যার নাম cherrypy-app।
ধাপ ৪: Docker কন্টেইনার রান করা
Docker ইমেজ তৈরি হওয়ার পর, আপনি কন্টেইনার চালাতে পারেন:
docker run -p 8080:8080 cherrypy-app
এখানে:
-p 8080:8080: কন্টেইনারের 8080 পোর্টকে হোস্টের 8080 পোর্টের সাথে ম্যাপ করা হচ্ছে, যাতে আপনি আপনার অ্যাপ্লিকেশন ব্রাউজারে অ্যাক্সেস করতে পারেন।cherrypy-app: তৈরি করা ইমেজের নাম।
ধাপ ৫: CherryPy অ্যাপ্লিকেশন ব্রাউজারে চেক করা
কন্টেইনার চালানোর পর, আপনি http://localhost:8080 এ আপনার CherryPy অ্যাপ্লিকেশন ব্রাউজারে দেখতে পাবেন। যদি সবকিছু ঠিকভাবে কাজ করে, আপনি "Hello, Welcome to CherryPy running in Docker!" বার্তা দেখতে পাবেন।
ধাপ ৬: Docker কন্টেইনার স্টপ এবং রিমুভ করা
অ্যাপ্লিকেশন রান করার পর কন্টেইনার স্টপ এবং রিমুভ করার জন্য নিচের কমান্ড ব্যবহার করতে পারেন:
docker ps # চালু কন্টেইনারগুলো দেখতে
docker stop <container_id> # কন্টেইনার স্টপ করতে
docker rm <container_id> # কন্টেইনার রিমুভ করতে
CherryPy অ্যাপ্লিকেশনকে Docker কন্টেইনারে ডিপ্লয় করা অত্যন্ত সুবিধাজনক এবং সহজ। Docker ব্যবহারের মাধ্যমে আপনার অ্যাপ্লিকেশনটি এক জায়গায় ডেভেলপ করে যে কোনো পরিবেশে রান করা সম্ভব হয়, কারণ Docker কন্টেইনার পরিবেশের নির্ভরশীলতা দূর করে। CherryPy এর মতো লাইটওয়েট ফ্রেমওয়ার্ক Docker এর সাথে মিলিয়ে অ্যাপ্লিকেশন ডিপ্লয়মেন্টকে আরও সহজ এবং কার্যকরী করে তোলে।
CherryPy ব্যবহার করে আপনি দ্রুত ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন, তবে যখন অ্যাপ্লিকেশনটি প্রোডাকশনে চলে যায়, তখন কিছু বিশেষ কনফিগারেশন এবং নিরাপত্তা ব্যবস্থা গ্রহণ করা অত্যন্ত গুরুত্বপূর্ণ। CherryPy তে Production-Ready Configuration এবং Security Measures অ্যাপ্লিকেশনটির পারফরম্যান্স এবং নিরাপত্তা বৃদ্ধি করতে সহায়তা করে। এই লেখায় আমরা CherryPy এর প্রোডাকশন পরিবেশে ব্যবহৃত কনফিগারেশন এবং নিরাপত্তা ব্যবস্থা নিয়ে আলোচনা করব।
১. Production-Ready Configuration
প্রোডাকশনে CherryPy অ্যাপ্লিকেশন চালানোর সময় কিছু গুরুত্বপূর্ণ কনফিগারেশন সেটিংস রয়েছে যেগুলি আপনার অ্যাপ্লিকেশনকে আরও কার্যকরী এবং নিরাপদ করবে। CherryPy তে কিছু কনফিগারেশন রয়েছে যা উন্নত পারফরম্যান্স এবং নিরাপত্তা নিশ্চিত করে।
প্রোডাকশন কনফিগারেশন উদাহরণ:
import cherrypy
import os
class MyApp:
@cherrypy.expose
def index(self):
return "স্বাগতম CherryPy প্রোডাকশন অ্যাপে!"
if __name__ == '__main__':
# প্রোডাকশনে প্রয়োজনীয় কনফিগারেশন
cherrypy.config.update({
'server.socket_host': '0.0.0.0', # অ্যাপ্লিকেশনটি সব IP তে অ্যাক্সেসযোগ্য হবে
'server.socket_port': 8080, # পোর্ট নম্বর
'engine.autoreload.on': False, # অটোরিলোড বন্ধ করা
'log.access_file': os.path.join(os.getcwd(), 'logs/access.log'), # অ্যাক্সেস লগ ফাইল
'log.error_file': os.path.join(os.getcwd(), 'logs/error.log'), # ত্রুটি লগ ফাইল
'log.screen': False, # স্ক্রীনে লগ দেখানো বন্ধ
'tools.encode.on': True, # এনকোডিং সমর্থন
'tools.sessions.on': True, # সেশন ব্যবস্থাপনা
'tools.sessions.timeout': 60, # সেশনের সময়সীমা 60 সেকেন্ড
'tools.gzip.on': True, # Gzip কম্প্রেশন চালু করা
'tools.gzip.mime_types': ['text/html', 'text/plain', 'application/json', 'text/css', 'application/javascript'] # Gzip সমর্থিত MIME টাইপ
})
cherrypy.quickstart(MyApp())
প্রধান কনফিগারেশন সেটিংস:
server.socket_host: অ্যাপ্লিকেশনটি 0.0.0.0 এ চলবে, অর্থাৎ এটি সব IP ঠিকানায় অ্যাক্সেসযোগ্য হবে।server.socket_port: পোর্ট 8080 ব্যবহার করা হবে। প্রোডাকশনে এটি কাস্টম পোর্ট হতে পারে।engine.autoreload.on: উন্নয়ন পরিবেশে অটোরিলোড চালু থাকে, তবে প্রোডাকশনে এটি বন্ধ করা উচিত।log.access_fileএবংlog.error_file: লগ ফাইলের লোকেশন নির্ধারণ করা হয়েছে।log.screen: প্রোডাকশনে স্ক্রীনে লগ দেখানো বন্ধ রাখা উচিত, কারণ এটি লোগিংকে কার্যকরী করতে সহায়তা করে।tools.encode.on: এই সেটিংটি এনকোডিং নিশ্চিত করে।tools.sessions.on: সেশন ব্যবস্থাপনা চালু করা হয়েছে, যা অ্যাপ্লিকেশনের ইউজারদের সেশন ট্র্যাক করার জন্য ব্যবহার করা হয়।tools.gzip.on: Gzip কম্প্রেশন চালু করা, যা রেসপন্স সাইজ কমাতে সাহায্য করে এবং ওয়েবসাইটের গতি বৃদ্ধি পায়।
২. Security Measures
CherryPy তে কিছু নিরাপত্তা ব্যবস্থা রয়েছে যা প্রোডাকশনে আপনার অ্যাপ্লিকেশনকে সুরক্ষিত রাখে। কিছু সাধারণ নিরাপত্তা ব্যবস্থা নিচে আলোচনা করা হলো:
১. Cross-Site Scripting (XSS) প্রতিরোধ
XSS আক্রমণ প্রতিরোধ করার জন্য আপনি Content Security Policy (CSP) ব্যবহার করতে পারেন। CSP আপনার অ্যাপ্লিকেশনের জন্য একটি সুরক্ষিত কনফিগারেশন প্রদান করে, যা স্ক্রিপ্ট ইনজেকশন আক্রমণ থেকে রক্ষা করে।
উদাহরণ: CSP কনফিগারেশন
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "CSP সুরক্ষা ব্যবস্থা সহ ওয়েব পেজ"
if __name__ == '__main__':
cherrypy.config.update({
'tools.csp.on': True, # CSP চালু করা
'tools.csp.policy': "default-src 'self'; script-src 'self'; object-src 'none';" # CSP পলিসি
})
cherrypy.quickstart(MyApp())
CSP (Content Security Policy) যোগ করার মাধ্যমে আপনি স্ক্রিপ্ট ইনজেকশন আক্রমণ থেকে সুরক্ষিত থাকতে পারবেন।
২. SSL/TLS এনক্রিপশন
আপনার অ্যাপ্লিকেশনের HTTPS প্রটোকল ব্যবহার করা উচিত, যাতে ইউজারের সংবেদনশীল তথ্য এনক্রিপ্টেড থাকে। CherryPy তে SSL সাপোর্ট রয়েছে এবং এটি কনফিগার করা যায়।
উদাহরণ: SSL/TLS সেটআপ
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "এটি HTTPS অ্যাপ্লিকেশন!"
if __name__ == '__main__':
cherrypy.config.update({
'server.ssl_module': 'pyopenssl',
'server.ssl_certificate': '/path/to/certificate.crt',
'server.ssl_private_key': '/path/to/private.key',
})
cherrypy.quickstart(MyApp())
এখানে, SSL Certificate এবং Private Key প্রদান করা হয়েছে। এর মাধ্যমে CherryPy সার্ভার HTTPS প্রটোকলে সুরক্ষিত হবে।
৩. Cross-Site Request Forgery (CSRF) প্রতিরোধ
CSRF আক্রমণ প্রতিরোধ করতে, CherryPy তে CSRF প্রোটেকশন ফিচার ব্যবহার করা যেতে পারে। যদিও CherryPy তে এটি বিল্ট-ইনভাবে নেই, তবে আপনি CSRF প্রতিরোধ করার জন্য কাস্টম টুল তৈরি করতে পারেন।
উদাহরণ: CSRF প্রোটেকশন (কাস্টম টুল)
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "CSRF সুরক্ষা সহ ওয়েব পেজ"
@cherrypy.expose
@cherrypy.tools.allow(methods=['POST'])
def submit_form(self):
# CSRF Token যাচাই করা হবে
return "ফর্ম সফলভাবে সাবমিট করা হয়েছে!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, CSRF টোকেন যাচাইয়ের জন্য একটি কাস্টম টুল তৈরি করতে হবে, যা সুরক্ষিত HTTP POST রিকোয়েস্ট গ্রহণ করবে।
৩. Access Control (Access Restrictions)
CherryPy তে আপনি Access Control সিস্টেম ব্যবহার করে নির্দিষ্ট ইউজারদের জন্য রিসোর্স অ্যাক্সেস সীমিত করতে পারেন। এতে ইউজারদের জন্য প্রমাণীকরণ এবং অনুমোদন ব্যবস্থা সেট করা যায়।
উদাহরণ: Basic Authentication
import cherrypy
from cherrypy.lib import auth_basic
def check_password(realm, username, password):
users = {'admin': 'password123'}
if users.get(username) == password:
return True
return False
class MyApp:
@cherrypy.expose
@cherrypy.tools.auth_basic(check_password)
def index(self):
return "স্বাগতম, আপনি সফলভাবে লগইন করেছেন!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে Basic Authentication ব্যবহৃত হয়েছে, যেখানে ইউজারনেম এবং পাসওয়ার্ড যাচাই করে অ্যাক্সেস অনুমোদন করা হয়।
CherryPy তে Production-Ready Configuration এবং Security Measures অ্যাপ্লিকেশনটি আরও শক্তিশালী, নিরাপদ এবং কার্যকরী করতে সহায়তা করে। প্রোডাকশনে অ্যাপ্লিকেশন চালানোর সময়:
- কনফিগারেশন যেমন লগিং, সেশন ম্যানেজমেন্ট এবং Gzip কম্প্রেশন ব্যবহৃত হয়।
- নিরাপত্তা ব্যবস্থা যেমন CSP, SSL/TLS, এবং CSRF সুরক্ষা ব্যবহৃত হয়।
CherryPy তে এই কনফিগারেশন এবং নিরাপত্তা ব্যবস্থা গুলি অ্যাপ্লিকেশন সুরক্ষা এবং পারফরম্যান্সে সহায়তা করে।
Read more