Laravel Envoy হল একটি টুল যা আপনি আপনার রিমোট সার্ভারে চালান এমন সাধারণ কাজগুলি সম্পাদন করার জন্য। আমি বিশ্বাস করি আন্ডাররেট করা হয়েছে; আমি এটিকে প্রায়শই ব্যবহার করতে দেখি না যদিও আমি এটিকে সর্বদা খুব দরকারী বলে মনে করেছি। এই নিবন্ধে, আমরা অন্বেষণ করব কিভাবে আপনার উৎপাদনশীলতা বাড়াতে সাহায্য করতে পারে🚀। Envoy Envoy লারাভেল দূত লারাভেল ডেভেলপারদের জন্য একচেটিয়া নয় বা লারাভেল প্রকল্পের মধ্যে সীমাবদ্ধ নয়, এটি ব্যবহার করতে পারে ❤️। যে কেউ প্রথমে, দুটি মূল ধারণা নিয়ে আলোচনা করা যাক: Envoy : এটি সার্ভার আপডেট করা বা একটি সংগ্রহস্থল ক্লোন করার মতো একটি নির্দিষ্ট ক্রিয়াকে প্রতিনিধিত্ব করে। কার্য : যা টাস্কের একটি সংগ্রহ। গল্প আপাতত আপনার এতটুকুই জানা দরকার; আপনি সবসময় সমস্ত বৈশিষ্ট্য সম্পর্কে পড়তে পারেন। ডক্সের আমরা কি স্বয়ংক্রিয়? এই নিবন্ধে, আমরা 2টি জিনিস স্বয়ংক্রিয় করব যা বেশিরভাগ বিকাশকারীরা তাদের অ্যাপ্লিকেশনগুলি স্থাপন করার সময় করে: Nginx কনফিগার করা হচ্ছে। ব্যক্তিগত সংগ্রহস্থলগুলি অ্যাক্সেস করতে সক্ষম হতে SSH কী তৈরি করা এবং GitHub-এ যোগ করা। হ্যাঁ আমি জানি, বেশিরভাগ সময় ব্যবহার করা হয় CI/CD কর্মপ্রবাহের জন্য, কিন্তু এটি আক্ষরিক অর্থে করতে পারে। Envoy সবকিছু দূত সেটআপ প্রথমে একটি ডিরেক্টরি তৈরি করা যাক: mkdir tuto && cd $_ যদি আপনি ব্যবহার করেন। $ take tuto zsh নিম্নলিখিত কমান্ডটি চালিয়ে ইনস্টল করুন: Envoy composer require laravel/envoy --dev আপনি সুরকার ইনস্টল করা আছে তা নিশ্চিত করুন. এখন, নামে একটি ফাইল তৈরি করুন। হ্যাঁ, আমরা সিনট্যাক্স ব্যবহার করব, সুপার কুল ডান? Envoy.blade.php Blade touch Envoy.blade.php এটাই! আপনার যা দরকার তা হল একটি একক স্ক্রিপ্ট। এটি লারাভেল বা কোন লারাভেল-সম্পর্কিত প্রকল্পের জন্য নির্দিষ্ট হতে হবে না। এর স্বয়ংক্রিয় শুরু করা যাক! 😁 Nginx কনফিগার করুন আমাদের একটি ব্র্যান্ড নতুন সার্ভার আছে, এবং আমরা Nginx সেট আপ করতে চাই। যদি আমরা প্রক্রিয়াটি ভেঙ্গে ফেলি তবে এটি এরকম হবে: সার্ভার আপডেট করুন Nginx ইনস্টল করুন Nginx কনফিগার করুন সাথে আমরা ঠিক এটাই করব; প্রতিটি পদক্ষেপকে একটি এবং পুরো প্রক্রিয়াটিকে একটি হিসাবে ভাবুন। Envoy Task Story সুতরাং, আসুন আমরা যা বলেছি তা একটি গল্পে অনুবাদ করি: @servers(['web' => '[email protected]', 'local' => '127.0.0.1']) @story('setup-nginx') update-server install-nginx copy-nginx-stub configure-nginx @endstory নির্দেশিকাটি সার্ভারগুলি নির্দিষ্ট করতে ব্যবহৃত হয় যেগুলিতে আমরা পরবর্তীতে আমাদের কাজগুলি চালাব। @servers এখন, আমরা প্রতিটি কাজ সংজ্ঞায়িত করতে এগিয়ে যেতে পারি 😁 আমাদের প্রথম টাস্ক নিশ্চিত করবে যে সার্ভারের প্যাকেজ এবং নির্ভরতাগুলি আপ টু ডেট আছে: update-server @task('update-server', ['on' => ['web']]) echo "Updating server..." apt update && apt upgrade -y @endtask দ্বিতীয় টাস্ক আমাদের সার্ভারে Nginx ইনস্টল করবে: install-nginx @task('install-nginx', ['on' => ['web']]) echo "Installing nginx..." apt install nginx -y rm /etc/nginx/sites-enabled/default /etc/nginx/sites-available/default touch /etc/nginx/sites-available/{{ $application_name }}.conf ln -s /etc/nginx/sites-available/{{ $application_name }}.conf /etc/nginx/sites-enabled/{{ $application_name }}.conf @endtask লক্ষ্য করুন যে আমরা ডিফল্ট Nginx লিঙ্কটি সরিয়ে দিয়েছি এবং ভেরিয়েবল থেকে আসা নাম সহ আমাদের অ্যাপ্লিকেশনের জন্য একটি নতুন তৈরি করেছি। $application_name সেই ভেরিয়েবলটি ব্যবহার করতে সক্ষম হওয়ার জন্য, আপনাকে এটি ঘোষণা করতে হবে, তাই আমাদের নির্দেশিকা অন্তর্ভুক্ত করতে হবে: @setup @setup $application_name = 'your-application-name'; @endsetup এখন, আমরা তৃতীয় টাস্ক এ যেতে পারি। আমার ক্ষেত্রে, আমি একটি লারাভেল অ্যাপ্লিকেশন স্থাপন করছি, তাই আমি দ্বারা প্রদত্ত Nginx কনফিগারেশন ফাইলটি ব্যবহার করব, কয়েকটি টুইক সহ। আপনি যদি একটি ভিন্ন অ্যাপ্লিকেশন স্থাপন করেন, আপনি আপনার নিজস্ব কনফিগারেশন ফাইলে একই ধারণা প্রয়োগ করতে পারেন। copy-nginx-stub ডক্স আমরা এইমাত্র তৈরি করা ডিরেক্টরিতে নিম্নলিখিত কমান্ডটি চালান: mkdir stubs; nano stubs/nginx.conf তারপর, সম্পাদকে নিম্নলিখিত বিষয়বস্তু পেস্ট করুন, এটি সংরক্ষণ করুন এবং প্রস্থান করুন: server { listen 80; listen [::]:80; server_name public_ip; root /var/www/app_name/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-Content-Type-Options "nosniff"; index index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.0-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } } এবং এখনকার জন্য স্থানধারক এবং আমাদের ভেরিয়েবলের সাথে স্বয়ংক্রিয়ভাবে আপডেট করা হবে। public_ip app_name আসুন কাজটি নিজেই লেখার দিকে এগিয়ে যাই: @task('copy-nginx-stub', ['on' => 'local']) scp -P{{ $production_port }} -r ./stubs/nginx.conf {{ $production_host }}:/etc/nginx/sites-available/{{ $application_name }}.conf @endtask এই কাজটি দূরবর্তী সার্ভারের পরিবর্তে আমাদের স্থানীয় মেশিনে কার্যকর করা হবে। আমরা ব্যবহার করে এটি নির্দিষ্ট করি। 'on' => 'local' এবং প্রয়োজনীয় ভেরিয়েবল সহ নির্দেশিকা আপডেট করতে ভুলবেন না: @setup @setup $application_name = 'your-application-name'; $production_port = 22; $production_host = '[email protected]'; @endsetup চতুর্থ এবং চূড়ান্ত টাস্ক স্থানধারকদের আপডেট করবে, যাতে আমরা সঠিকভাবে অ্যাপ্লিকেশনটি পরিবেশন করতে পারি: configure-nginx @task('configure-nginx', ['on' => 'web']) echo "Configuring nginx..." cd /etc/nginx/sites-available/ sed -i 's/app_name/{{ $application_name }}/g' {{ $application_name }}.conf sed -i 's/public_ip/{{ $production_ip }}/g' {{ $application_name }}.conf @endtask কমান্ড নোট করুন। কারণ প্রতিটি কাজ আলাদাভাবে সম্পাদিত হয়, তাই এটি সর্বদা রিমোট সার্ভারের হোম ডিরেক্টরি থেকে শুরু হয়। cd Nginx ইনস্টল করার সময় আমরা ইতিমধ্যেই সিমলিংক তৈরি করেছি, আমাদের এখন এটি নিয়ে চিন্তা করতে হবে না। এবং আমরা এই বিভাগে সম্পন্ন! আপনার স্ক্রিপ্ট এই মত হওয়া উচিত: @servers(['web' => '[email protected]', 'local' => '127.0.0.1']) @setup $application_name = 'your-application-name'; $production_port = 22; $production_host = '[email protected]'; @endsetup @story('setup-nginx') update-server install-nginx copy-nginx-stub configure-nginx @endstory @task('update-server', ['on' => ['web']]) echo "Updating server..." apt update && apt upgrade -y @endtask @task('install-nginx', ['on' => ['web']]) echo "Installing nginx..." apt install nginx -y rm /etc/nginx/sites-enabled/default /etc/nginx/sites-available/default touch /etc/nginx/sites-available/{{ $application_name }}.conf ln -s /etc/nginx/sites-available/{{ $application_name }}.conf /etc/nginx/sites-enabled/{{ $application_name }}.conf @endtask @task('copy-nginx-stub', ['on' => 'local']) scp -P{{ $production_port }} -r ./stubs/nginx.conf {{ $production_host }}:/etc/nginx/sites-available/{{ $application_name }}.conf @endtask @task('configure-nginx', ['on' => 'web']) echo "Configuring nginx..." cd /etc/nginx/sites-available/ sed -i 's/app_name/{{ $application_name }}/g' {{ $application_name }}.conf sed -i 's/public_ip/{{ $production_ip }}/g' {{ $application_name }}.conf @endtask SSH কী কনফিগারেশন এখন যেহেতু আমরা Nginx কনফিগার করেছি, এবং এটি আমাদের অ্যাপ্লিকেশন পরিবেশন করার জন্য প্রস্তুত, আমাদের SSH কী তৈরি করতে হবে এবং GitHub-এ সর্বজনীন কী যোগ করতে হবে যাতে আমরা ব্যক্তিগত সংগ্রহস্থলগুলি টানতে পারি। এর জন্য, আমরা ব্যবহার করব, তাই আমরা শুরু করার আগে, আপনাকে হবে। GitHub REST API একটি টোকেন তৈরি করতে আপনার টোকেন তৈরি করার সময়, নিশ্চিত করুন যে আপনি শুধুমাত্র "admin:public_key" সুযোগ নির্বাচন করুন৷ এখন আপনি আপনার টোকেন তৈরি করেছেন, আসুন কিছু ভেরিয়েবল সংজ্ঞায়িত করে শুরু করি: @setup $ssh_key = '~/.ssh/id_rsa_github'; $github_api_key = 'your-github-token'; $email = '[email protected]'; @endsetup এই মুহুর্তে, আপনি এই প্রক্রিয়ার সাথে জড়িত পদক্ষেপগুলি সম্পর্কে ভাবছেন। ঠিক আছে, আমরা এটিকে দুটি ধাপে বিভক্ত করতে পারি: SSH কী তৈরি করুন GitHub-এ পাবলিক কী কপি করুন আবার, এই প্রক্রিয়াটি আমাদের গল্প হবে: @story('setup-ssh-keys') generate-ssh-keys add-ssh-keys-to-github @endstory প্রথম কাজ, , একটি একক কমান্ড চালানোর মাধ্যমে করা যেতে পারে: generate-ssh-keys @task('generate-ssh-keys', ['on' => ['web']]) echo "Generating ssh keys..." ssh-keygen -t ed25519 -f {{ $ssh_key }} -N '' -q -C "{{ $email }}" @endtask একবার আমরা আমাদের SSH কীগুলি তৈরি করার পরে, আমরা GitHub API ব্যবহার করে GitHub-এ সর্বজনীন কী যোগ করতে পারি। এটি একটি একক অনুরোধের সাথে করা যেতে পারে: @task('add-ssh-keys-to-github', ['on' => ['web']]) echo "Adding ssh keys to github..." key=$(cat {{ $ssh_key }}.pub) curl --request POST \ --url https://api.github.com/user/keys \ --header 'Accept: application/vnd.github+json' \ --header 'Authorization: Bearer {{ $github_api_key }}' \ --header 'Content-Type: application/json' \ --header 'X-GitHub-Api-Version: 2022-11-28' \ --data '{ "title": "[Envoy] Public key", "key": "'"$key"'" }' @endtask এবং এটাই! আপনি যদি আপনার GitHub ডেভেলপার সেটিংসে যান, তাহলে আপনার নতুন তৈরি করা কী দেখতে হবে। দুটি বিভাগ একত্রিত করে, আপনার চূড়ান্ত স্ক্রিপ্টটি এইরকম হওয়া উচিত: @servers(['web' => '[email protected]', 'local' => '127.0.0.1']) @setup $application_name = 'your-application-name'; $production_port = 22; $production_host = '[email protected]'; $ssh_key = '~/.ssh/id_rsa_github'; $github_api_key = 'your-github-token'; $email = '[email protected]'; @endsetup @story('setup-nginx') update-server install-nginx copy-nginx-stub configure-nginx @endstory @story('setup-ssh-keys') generate-ssh-keys add-ssh-keys-to-github @endstory @task('update-server', ['on' => ['web']]) echo "Updating server..." apt update && apt upgrade -y @endtask @task('install-nginx', ['on' => ['web']]) echo "Installing Nginx..." apt install nginx -y rm /etc/nginx/sites-enabled/default /etc/nginx/sites-available/default touch /etc/nginx/sites-available/{{ $application_name }}.conf ln -s /etc/nginx/sites-available/{{ $application_name }}.conf /etc/nginx/sites-enabled/{{ $application_name }}.conf @endtask @task('copy-nginx-stub', ['on' => 'local']) scp -P{{ $production_port }} -r ./stubs/nginx.conf {{ $production_host }}:/etc/nginx/sites-available/{{ $application_name }}.conf @endtask @task('configure-nginx', ['on' => 'web']) echo "Configuring nginx..." cd /etc/nginx/sites-available/ sed -i 's/app_name/{{ $application_name }}/g' {{ $application_name }}.conf sed -i 's/public_ip/{{ $production_ip }}/g' {{ $application_name }}.conf @endtask @task('generate-ssh-keys', ['on' => ['web']]) echo "Generating ssh keys..." ssh-keygen -t ed25519 -f {{ $ssh_key }} -N '' -q -C "{{ $email }}" @endtask @task('add-ssh-keys-to-github', ['on' => ['web']]) echo "Adding ssh keys to github..." key=$(cat {{ $ssh_key }}.pub) curl --request POST \ --url https://api.github.com/user/keys \ --header 'Accept: application/vnd.github+json' \ --header 'Authorization: Bearer {{ $github_api_key }}' \ --header 'Content-Type: application/json' \ --header 'X-GitHub-Api-Version: 2022-11-28' \ --data '{ "title": "creating from script", "key": "'"$key"'" }' @endtask উপসংহার আমরা শিখেছি কীভাবে সাধারণ কাজগুলি স্বয়ংক্রিয় করতে ব্যবহার করতে হয়। আমরা এখানে অন্বেষণ করেছি তার চেয়েও বেশি ক্ষমতা সহ এটি একটি শক্তিশালী টুল৷ শুধুমাত্র আপনার অ্যাপ্লিকেশন স্থাপনে নিজেকে সীমাবদ্ধ করবেন না; টার্মিনাল কমান্ডকে স্বয়ংক্রিয় করতে পারে, আক্ষরিক অর্থে যা মনে আসে। Envoy Envoy যেকোন পরের বার যখন আপনি একই আদেশগুলি পুনরাবৃত্তি করতে দেখেন, এটি ব্যবহার করার বিষয়ে বিবেচনা করুন, আমি আপনাকে প্রতিশ্রুতি দিচ্ছি যে এটি CI/CD এর চেয়ে অনেক বেশি কাজ করে 😛😛