আপনার ওয়েবসাইটটি যদি ক্লাউডে ডিপ্লয় করতে চান তাহলে Docker আপনার জন্য অনেক সহায়ক হতে পারে। কারন Docker দিয়ে ডিপ্লয়মেন্ট অনেক সহজ এবং তুলনামূলক কম সমস্যার সম্মুখীন হতে হয়।

এই ব্লগে আমরা python এর django ফ্রেমওয়ার্ক দিয়ে বানানো একটি ওয়েবসাইট ডিপ্লয় করবো। আপনি অন্য ল্যাঙ্গুয়েজ বা ফ্রেমওয়ার্কের প্রোজেক্ট ডিপ্লয় করতে চাইলেও এই ব্লগটি অনুসরণ করতে পারেন।

শুরু করার আগে আমাদের যে কয়েকটি বিষয় প্রস্তুত থাকতে হবেঃ

  1. একটি Cloud VM (Azure, AWS থেকে সহজেই ট্রায়াল নিতে পারবেন)
  2. একটি SSH ক্লায়েন্ট (এখানে আমরা MobaXterm ব্যবহার করবো)
  3. VM এ ডকার ইনস্টল থাকতে হবে (ইনস্টলের জন্য এই ব্লগটি দেখতে পারেন)
  4. VM এ ওয়েবসার্ভার ইনস্টল থাকতে হবে (Apache অথবা Nginx)
  5. VM এ ডাটাবেজ সার্ভার ইনস্টল করতে হবে (MySQL অথবা PostgreSQL)
  6. আমাদের ওয়েব এ্যাপকে decouple করতে হবে (যেভাবে django এ্যাপ decouple করবেন)
  7. gunicorn এ্যাপ সার্ভার ব্যবহার করতে হবে
  8. Docker Hub এ ইমেজ আপলোড করতে হবে (অটোমেটিক ইমেজ ডেলিভারি দেখতে এই ব্লগটি দেখুন)

আমাদের প্রোজেক্ট এর ইমেজ ফাইলটি ডকার হবে আপলোড হয়ে গেলে সেটি এখন ব্যবহারের জন্য প্রস্তুত। কিন্তু আমাদের এ্যাপ্লিকেশনটি ডকারে রান করলেও ডাটাবেজ আমরা ডকারে রান করবো না। ডাটাবেজ হিসেবে আমরা হোস্ট ডাটাবেজ ব্যবহার করবো। কিন্তু ডকার আলাদা নেটওয়ার্ক ব্যবহার করে বলে আমাদের ডাটাবেজের যে ইউজারকে আমরা প্রজেক্টে ব্যবহার করবো তার জন্য remote access এনাবল করে দিতে হবে।

remote access এনাবল করার জন্য এই লিংকটি দেখতে পারেন। আপনার ক্লাউড নেটওয়ার্ক সিস্টেমে (Azure, AWS etc) 3306 port টিকেও remote access এনাবল করে দিতে হবে।

এরপর নিচের bash স্ক্রিপ্টটি রান করলেই আপনার ওয়েবসাইটটি লাইভ হয়ে যাবে। এই স্ক্রিপ্টে DOCKER_IMAGE, CONTAINER_NAME, ENV_FILE ও PORT এর ভ্যালুগুলো নিজেদের মতো করে দিয়ে নিতে হবে।

সবচেয়ে মজার ব্যাপার হলো এই স্ক্রিপ্টটি রান করে আপনার existing এ্যাপকেও আপডেট করে নিতে পারবেন।

#!/bin/bash

set -e

DOCKER_IMAGE="shakilahmmeed/cicd"
CONTAINER_NAME="cicd"
ENV_FILE="./cicd.env.staging"
PORT="8099"


echo "Deploying $DOCKER_IMAGE to Docker Container..........."

if [ $(docker inspect -f '{{.State.Running}}' $CONTAINER_NAME) = "true" ]; then
    echo "Stopping Existing Container.........."
    docker stop $CONTAINER_NAME
    #docker rm $CONTAINER_NAME
fi


echo "Updating Docker Image........."
docker pull $DOCKER_IMAGE


echo "Starting $CONTAINER_NAME using Docker Image name: $DOCKER_IMAGE ............."

docker run --name $CONTAINER_NAME --rm=true --env-file $ENV_FILE -d -p $PORT:8000 $DOCKER_IMAGE
docker exec -it $CONTAINER_NAME python manage.py migrate
docker ps -a

উপরের স্ক্রিপ্টটি অনুসারে আমাদের এ্যাপটি 8099 পোর্টে রান করবে। এ্যাপটি 8099 পোর্টে সরাসরি দেখতে চাইলে আপনার ক্লাউড ড্যাশবোর্ড থেকে 8099 পোর্ট accessible করে দিতে হবে।

এ্যাপটি 8099 পোর্টে রান করলেও আমরা এটি ওয়েব সার্ভার দিয়ে এক্সেস করবো। এজন্য আমাদের Apache অথবা Nginx এ reverse proxy এনাবল করে দিবো।

Apache সার্ভারে রিভার্স প্রক্সি এনাবল করতে এই ব্লগটি দেখুন।

Nginx সার্ভারে রিভার্স প্রক্সি এনাবল করতে এই ব্লগটি দেখুন।


1 Comment

Afridi · October 28, 2020 at 3:55 pm

Vai eto sohoz😐 apni sera Vai❤️❤️

Leave a Reply

Your email address will not be published. Required fields are marked *