কিভাবে Ubuntu 16.4 এ LEMP Stack ইন্সটল করবেন?

LEMP Stack কি?

LAMP স্ট্যাক (লিনাক্স, অ্যাপাচি, মারিয়া ডি বি এবং পিএইচপি) ওয়েব অ্যাপ্লিকেশনের উন্নয়ন এবং হোস্টিংয়ের জন্য একটি জনপ্রিয় সার্ভার কনফিগারেশন। স্ট্যাকের চারটি উপাদান দৃঢ়ভাবে সংযুক্ত নয়। LAMP স্ট্যাক হল একটি সাধারণ ধরন, যেখানে Apache ওয়েব সার্ভারটি NGINX দ্বারা প্রতিস্থাপিত হয়।

শুরু করার আগে যা করতে হবে।

  • আপনার সিস্টেম এ একটি root access এর প্রয়োজন অথবা “sudo” নিয়ন্ত্রিত একটি user account প্রয়োজন হবে।
  • আপনার সিস্টেম এর hostname সেট করুন।
  • আপনার সিস্টেম কে পুরোপুরি আপডেট করুন।

NGINX ইন্সটলেশন

এই স্টেপগুলি Ubuntu তে NGINX Mainline ইনস্টল করে যা NGINX Inc. এর অফিসিয়াল সংগ্রহস্থল থেকে নেওয়া। অন্যান্য ডিস্ট্রিবিউশনের জন্য, NGINX অ্যাডমিন গাইড দেখুন।

  • একটি টেক্সট এডিটরে "/etc/apt/sources.list" এটি খুলুন এবং নিচের লাইনটি অনুসরণ করে নীচে যোগ করুন। আপনার উবুন্টু রিলিজের কোডনাম সহ এই উদাহরণে "CODENAME" প্রতিস্থাপন করুন। উদাহরণস্বরূপ, উবুন্টু 04 এর জন্য, বায়োনিক বীবর নামে, নীচের "CODENAME" এর জায়গায় "bionic" লিখুন।
  • /etc/apt/sources.list

1

deb http://nginx.org/packages/mainline/ubuntu/ CODENAME nginx

 

Repository’s package signing key টি ইম্পোর্ট করুন এবং “apt” তে অ্যাড করুন।

sudo wget http://nginx.org/keys/nginx_signing.keysudo apt-key add nginx_signing.key

 

NGINX ইনস্টল করুন

sudo apt updatesudo apt install nginx

 

নিশ্চিত করুন যে NGINX চালু আছে এবং অটোমেটিক রিবুট অপশন এনাবল করা আছে।

 

sudo systemctl start nginxsudo systemctl enable nginx

 

MariaDB ইন্সটলেশন

MariaDB সার্ভার এবং "MySQL / MariaDB-PHP" Support ইনস্টল করুন। ইনস্টলেশনের সময় আপনাকে রুট পাসওয়ার্ড নির্ধারণ করতে অনুরোধ করা হতে পারে।

sudo apt install mariadb-server php7.0-mysql

 

Mysql_secure_installation script টি রান করুন।

sudo mysql_secure_installation

 

যদি আপনি একটি MySQL Root User Password তৈরি করতে না চান তবে MariaDB ইনস্টল করার সময়, স্ক্রিপ্টটির উত্তর, Y সেট করুন।

নিম্নলিখিত প্রম্পটে Answer “Y” সিলেক্ট করুন।

  • Remove anonymous users?
  • Disallow root login remotely?
  • Remove test database and access to it?
  • Reload privilege tables now

MariaDB এর SQL শেল এ লগইন করুন। অনুরোধ জানানো হলে রুট ব্যবহারকারীর পাসওয়ার্ডটি লিখুন।

mysql -u root -p

 

অ্যাক্সেস অনুমতির সাথে একটি Test Database এবং User তৈরি করুন।  আপনার সেটআপের জন্য যথাযথ নাম দিয়ে "testdb" এবং "testuser" কে প্রতিস্থাপন করুন। একটি শক্তিশালী পাসওয়ার্ড দিয়ে "Password" প্রতিস্থাপন করুন।

CREATE DATABASE testdb;CREATE USER 'testuser' IDENTIFIED BY 'password';GRANT ALL PRIVILEGES ON testdb.* TO 'testuser';quit

 

 

PHP ইন্সটলেশন

PHP FastCGI Processing Manager ইন্সটল করুন। যা মূল পিএইচপি ডিফেন্ডেন্সগুলোতে আনতে হবে।

sudo apt install php7.0-fpm

 

পিএইচপি কে বলুন, শুধুমাত্র সার্ভারে বিদ্যমান ফাইলগুলির জন্য ইউআরএলগুলি গ্রহন করতে। এটি একটি নিরাপত্তার ঝুঁকি নির্ণয় করে যেখানে পিএইচপি দোভাষীকে নির্বিচারে কোড এক্সিকিউশন দেওয়ার অনুমতি দেওয়া হয় যাতে ফাইলের মধ্যে ".php" ফাইলটি উপস্থিত না থাকে।

sudo sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php/7.0/fpm/php.ini

 

"PHP’s listening" এর মালিকানা UNIX সকেটগুলি ডিফল্টভাবে "www-data" তে সেট করা আছে, তবে ব্যবহারকারী এবং গ্রুপ NGINX- এর সাথে মিলিত হওয়া প্রয়োজন। আপনি যদি উপরের NGINX সংগ্রহস্থল থেকে NGINX ইনস্টল করেন, NIGINX ইউজার এবং গ্রুপ এ “nginx” ব্যবহার করা হবে। "www.conf" এ "listen" ভেরিয়েবল পরিবর্তন করুন।

sudo sed -i 's/listen.owner = www-data/listen.owner = nginx/g' /etc/php/7.0/fpm/pool.d/www.confsudo sed -i 's/listen.group = www-data/listen.group = nginx/g' /etc/php/7.0/fpm/pool.d/www.conf

 

একটি NGINX সাইট কনফিগারেশন ফাইল সেট করুন।

একটি root directory তৈরি করুন, যেখানে আপনার সাইট এর কনটেন্ট লাইভ হবে। “example.com” এর স্থানে আপনার ডোমেইনটি সেট করুন।

sudo mkdir -p /var/www/example.com/

 

একটি উদাহরণ হিসাবে প্যাকেজ দিয়ে দেওয়া ডিফল্ট সাইট কনফিগারেশন ডিজেবল করুন।

sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled

 

ওয়েবসাইট কনফিগারেশন ফাইলগুলি "/etc/nginx/conf.d/" এ রাখা উচিত। আপনার সাইটের জন্য একটি কনফিগারেশন ফাইল তৈরি করুন। আবার আপনার ডোমেইন নেমটি example.com এর স্থানে সেট করুন।

 

 

/etc/nginx/conf.d/example.com.conf

 1

 2

 3

 4

 5

 6

 7

 8

 9

10

11

12

13

14

15

16

17

18

server {

    listen         80 default_server;

    listen         [::]:80 default_server;

    server_name    example.com www.example.com;

    root           /var/www/example.com;

    index          index.html;

 

    location / {

      try_files $uri $uri/ =404;

    }

 

    location ~* \.php$ {

      fastcgi_pass unix:/run/php/php7.0-fpm.sock;

      include         fastcgi_params;

      fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;

      fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;

    }

}

উপরের সার্ভার ব্লক এ একটি ব্রেকডাউন রয়েছে।

  • NGINX উদাহরণস্বরূপ ইনকামিং সংযোগের জন্য পোর্ট 80 শো করছে।
  • সাইটটি "/var/www/example.com/" এখান থেকে লাইভ করা হয় এবং এখানে একটি একটি সাধারণ এইচটিএমএল এ করা Index Page আছে। যদি আপনার Index Page পিএইচপি ব্যবহার করে, "index.html" এর পরিবর্তে "php" বিকল্পটি নির্বাচন করুন।
  • "try_files", NGINX কে অনুরোধ করার আগে অনুরোধ করা ফাইল বা ডিরেক্টরি প্রকৃতপক্ষে সাইট এর রুট ফাইলসিস্টেমের মধ্যে বিদ্যমান কিনা তা যাচাই করতে বলে। এটি না হলে, একটি "404" ফেরত আসে।
  • "location ~ * \ .php $" এর মানে হল যে NGINX এই কনফিগারেশনটি আপনার সাইটের রুট ডিরেক্টরীতে .php ফাইলগুলির ক্ষেত্রে পিএইচপি ফাইল ধারণকারী কোন সাবডিরেক্টরি সহ প্রয়োগ করবে।
  • "~ * \ .php $" অবস্থান নির্দেশের মধ্যে "*" ইঙ্গিত দেয় যে পিএইচপি ফাইলের নামগুলি ক্ষেত্রে সংবেদনশীল নয়।
  • "fastcgi_pass" PHP Listens অন্যান্য স্থানীয় প্রসেসগুলির থেকে ইনকামিং সংযোগগুলির জন্য UNIX সকেট সুনির্দিষ্ট করে।
  • "fastcgi_params অন্তর্ভুক্ত" NGINX "/ etc / nginx / fastcgi_param" এ "fastcgi_param" ভেরিয়েবলের একটি তালিকা প্রক্রিয়া করতে বলে।
  • "Fastcgi_param" নির্দেশাবলী location (সাইট এর রুট ডিরেক্টরি সম্পর্কিত) এবং পিএইচপি স্ক্রিপ্ট ফাইল naming convention NGINX দ্বারা প্রচার করা হলে পরিবেশিত হয়।

LEMP Stack টেস্ট করুন।

PHP রিস্টার্ট করুন এবং NGINX রিলোড করুন।

sudo systemctl restart php7.0-fpmsudo nginx -s reload

 

NGINX পিএইচপি রেন্ডার করতে এবং MySQL ডাটাবেসের সাথে সংযুক্ত করতে যাচাই করার জন্য একটি Test Page তৈরি করুন। আপনার উপরে নির্মিত মাইএসকিউএল প্রমাণাদিগুলো "testuser" এবং "password" ক্ষেত্রগুলির সাথে প্রতিস্থাপন করুন।

/var/www/example.com/test.php

 1

 2

 3

 4

 5

 6

 7

 8

 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<html>

<head>

    <h2>LEMP Stack Test</h2>

</head>

    <body>

    <?php echo '<p>Hello,</p>';

 

    // Define PHP variables for the MySQL connection.

    $servername = "localhost";

    $username = "testuser";

    $password = "password";

 

    // Create a MySQL connection.

    $conn = mysqli_connect($servername, $username, $password);

 

    // Report if the connection fails or is successful.

    if (!$conn) {

        exit('<p>Your connection has failed.<p>' .  mysqli_connect_error());

    }

    echo '<p>You have connected successfully.</p>';

    ?>

</body>

</html>

একটি ওয়েব ব্রাউজার থেকে "http://example.com/test.php" এ যান। এটি যে সফলভাবে সংযোগ আছে তার একটি রিপোর্ট করা উচিত, আপনি যদি কোন ত্রুটি বার্তা দেখতে পান বা পেজটি সব সময় লোড না হয় এই রকম সমসযা দেখেন, তাহলে আপনার কনফিগারেশন পুনরায় পরীক্ষা করুন।

সঠিকভাবে কাজ করার জন্য স্ট্যাক যাচাই করার পরে Test File টি ডিলিট মুছে ফেলুন।

sudo rm /var/www/example.com/test.php