लारवेल एन्वॉय आपके दूरस्थ सर्वर पर चलाए जाने वाले सामान्य कार्यों को निष्पादित करने के लिए एक उपकरण है। मेरा मानना है कि कम आंका गया है; मैं इसे बहुत बार इस्तेमाल होते हुए नहीं देखता, भले ही मैंने इसे हमेशा बहुत उपयोगी पाया हो। इस लेख में, हम यह पता लगाएंगे कि आपकी उत्पादकता बढ़ाने में कैसे मदद कर सकता है🚀। Envoy Envoy Laravel Envoy केवल Laravel डेवलपर्स के लिए ही नहीं है या Laravel परियोजनाओं तक सीमित नहीं है, इसका उपयोग कर सकता है ❤️। कोई भी सबसे पहले, आइए में दो प्रमुख अवधारणाओं पर चर्चा करें: Envoy : यह किसी विशिष्ट कार्य को दर्शाता है, जैसे सर्वर को अद्यतन करना या रिपोजिटरी को क्लोन करना। कार्य : जो कि कार्यों का एक संग्रह है। कहानियाँ अभी आपको बस इतना ही जानना है; आप सभी सुविधाओं के बारे में में पढ़ सकते हैं। दस्तावेज़ों हम क्या स्वचालित कर रहे हैं? इस लेख में, हम उन दो चीजों को स्वचालित करेंगे जो अधिकांश डेवलपर्स अपने एप्लिकेशन तैनात करते समय करते हैं: Nginx को कॉन्फ़िगर करना. SSH कुंजियाँ उत्पन्न करना और उन्हें GitHub में जोड़ना ताकि निजी रिपॉजिटरी तक पहुँच प्राप्त की जा सके। हां, मुझे पता है, अधिकांश समय उपयोग CI/CD वर्कफ़्लो के लिए किया जाता है, लेकिन यह वस्तुतः कर सकता है। Envoy सब कुछ दूत सेटअप सबसे पहले, आइए एक निर्देशिका बनाएं: mkdir tuto && cd $_ $ यदि आप उपयोग कर रहे हैं तो । zsh $ take tuto निम्नलिखित कमांड चलाकर स्थापित करें: Envoy composer require laravel/envoy --dev सुनिश्चित करें कि आपके पास कंपोजर स्थापित है। अब, नामक एक फ़ाइल बनाएँ। हाँ, हम सिंटैक्स का उपयोग करेंगे, बहुत बढ़िया है ना? Envoy.blade.php Blade touch Envoy.blade.php बस इतना ही! आपको बस एक स्क्रिप्ट की ज़रूरत है। यह Laravel या किसी Laravel-संबंधित प्रोजेक्ट के लिए विशिष्ट नहीं होना चाहिए। चलो स्वचालन शुरू करते हैं! 😁 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 अब, हम तीसरे कार्य पर जा सकते हैं। मेरे मामले में, मैं एक Laravel एप्लिकेशन तैनात कर रहा हूं, इसलिए मैं कुछ बदलावों के साथ द्वारा प्रदान की गई 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 से कहीं अधिक काम करता है 😛😛