हिन्दी (Hindi)

AlmaLinux 9 Linux VPS पर LEMP स्टैक इंस्टॉल करें

2 min
VPS/VDS होस्टिंग

LEMP स्टैक (Linux, Nginx, MariaDB, PHP-FPM) PHP साइट चलाने के लिए Apache का तेज़ और हल्का विकल्प है। AlmaLinux 9 पर सब कुछ आधिकारिक AppStream रिपॉज़िटरी से आता है, लेकिन SELinux और firewalld पर थोड़ा ध्यान देना पड़ता है। यह गाइड आपके VPS Linux Infrawire पर साफ़ इंस्टॉलेशन में आपका साथ देती है; यही चरण Rocky Linux 9 पर भी काम करते हैं।

📋 पूर्वापेक्षाएँ

  • AlmaLinux 9 वाला एक KVM VPS (IP और root पासवर्ड आपके क्लाइंट एरिया में मिलते हैं)
  • root के रूप में SSH एक्सेस
  • VPS_IP की ओर इशारा करता हुआ डोमेन example.com

1. सिस्टम अपडेट करें और टूल इंस्टॉल करें

Bash
dnf -y update dnf -y install nano policycoreutils-python-utils

policycoreutils-python-utils में semanage आता है, जिसका उपयोग SELinux वाले भाग में होगा।

2. Nginx इंस्टॉल करें और फ़ायरवॉल खोलें

Bash
dnf -y install nginx systemctl enable --now nginx firewall-cmd --permanent --add-service=http --add-service=https firewall-cmd --reload firewall-cmd --list-services

3. MariaDB इंस्टॉल करें

Bash
dnf -y install mariadb-server systemctl enable --now mariadb mysql_secure_installation

विज़ार्ड के सवालों के जवाब देकर root पासवर्ड सेट करें, अनाम यूज़र हटाएँ, root का रिमोट लॉगिन बंद करें और टेस्ट डेटाबेस हटाएँ। फिर अलग डेटाबेस और यूज़र बनाएँ:

Bash
mysql -u root -p
SQL
1CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 2CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD'; 3GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost'; 4FLUSH PRIVILEGES; 5EXIT;

4. AppStream मॉड्यूल से PHP 8.3 इंस्टॉल करें

AppStream में PHP की कई स्ट्रीम हैं। इंस्टॉल से पहले मनचाही स्ट्रीम चुनें:

Bash
dnf module list php dnf -y module reset php dnf -y module enable php:8.3 dnf -y install php-fpm php-cli php-mysqlnd php-gd php-mbstring php-xml php-intl php-opcache php-pecl-zip php -v

डिफ़ॉल्ट रूप से PHP-FPM पूल apache यूज़र से चलता है। चूँकि Nginx nginx यूज़र से चलता है, इसलिए पूल और सेशन डायरेक्टरी को मिलाएँ:

Bash
sed -i 's/^user = apache/user = nginx/; s/^group = apache/group = nginx/' /etc/php-fpm.d/www.conf chown -R root:nginx /var/lib/php/session /var/lib/php/wsdlcache /var/lib/php/opcache grep -E '^(user|group|listen)' /etc/php-fpm.d/www.conf systemctl enable --now php-fpm

पूल Unix सॉकेट /run/php-fpm/www.sock पर सुनता है।

5. server block बनाएँ

Bash
mkdir -p /var/www/example.com/public chown -R nginx:nginx /var/www/example.com nano /etc/nginx/conf.d/example.com.conf
Nginx
1server { 2 listen 80; 3 listen [::]:80; 4 server_name example.com www.example.com; 5 root /var/www/example.com/public; 6 index index.php index.html; 7 8 location / { 9 try_files $uri $uri/ /index.php?$query_string; 10 } 11 12 location ~ \.php$ { 13 include fastcgi_params; 14 fastcgi_pass unix:/run/php-fpm/www.sock; 15 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 16 } 17 18 location ~ /\.(?!well-known) { 19 deny all; 20 } 21}
Bash
nginx -t && systemctl reload nginx

6. SELinux कॉन्फ़िगर करें

SELinux को enforcing मोड में रखें (getenforce)। /var/www के नीचे बनी फ़ाइलों को पहले से httpd_sys_content_t लेबल मिलता है, लेकिन कहीं और से mv से लाई गई फ़ाइलें पुराना लेबल रखती हैं। उन्हें दोबारा लेबल करें और लिखने की अनुमति केवल उन डायरेक्टरी को दें जिन्हें उसकी ज़रूरत है:

Bash
restorecon -Rv /var/www/example.com mkdir -p /var/www/example.com/public/uploads semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/example.com/public/uploads(/.*)?' restorecon -Rv /var/www/example.com/public/uploads

बूलियन तभी चालू करें जब आपके एप्लिकेशन को उनकी ज़रूरत हो:

Bash
# PHP डेटाबेस से TCP पर जुड़ता है (रिमोट सर्वर या 127.0.0.1) setsebool -P httpd_can_network_connect_db 1 # PHP या Nginx बाहर की ओर कनेक्शन बनाते हैं (API, किसी ऐप तक proxy_pass) setsebool -P httpd_can_network_connect 1

सॉकेट से जुड़ने वाले लोकल MariaDB को इनमें से किसी की ज़रूरत नहीं है। SELinux क्या रोक रहा है यह देखने के लिए ausearch -m avc -ts recent चलाएँ। किसी समस्या को setenforce 0 से कभी "ठीक" न करें।

7. PHP टेस्ट करें और टेस्ट फ़ाइल हटाएँ

Bash
echo '<?php phpinfo();' > /var/www/example.com/public/info.php curl -sI http://example.com/info.php | head -n 1 rm /var/www/example.com/public/info.php

HTTP/1.1 200 OK की उम्मीद रखें। phpinfo() पेज आपका कॉन्फ़िगरेशन उजागर करता है, इसलिए उसे तुरंत हटाएँ। अंत में सर्विस जाँचें:

Bash
systemctl is-active nginx php-fpm mariadb

🛠️ समस्या निवारण

502 Bad Gateway। PHP-FPM बंद है या fastcgi_pass में सॉकेट का पाथ ग़लत है। systemctl status php-fpm चलाएँ, ls -l /run/php-fpm/www.sock जाँचें और /var/log/nginx/error.log पढ़ें। यदि लॉग में सॉकेट पर Permission denied है तो ausearch से AVC denial खोजें।

403 Forbidden या Permission denied। ls -Z /var/www/example.com/public से मालिक (nginx:nginx) और SELinux लेबल जाँचें। लेबल httpd_sys_content_t होना चाहिए; नहीं तो restorecon -Rv चलाएँ।

"File not found." या खाली पेज। root पाथ या SCRIPT_FILENAME लाइन ग़लत है। दोनों जाँचें, फिर nginx -t चलाएँ।

बाहरी डेटाबेस या API से कनेक्ट नहीं हो रहा। SELinux डिफ़ॉल्ट रूप से आउटगोइंग कनेक्शन रोकता है: ऊपर बताए अनुसार httpd_can_network_connect_db या httpd_can_network_connect चालू करें।


🎉 Nginx, MariaDB और PHP-FPM AlmaLinux 9 पर चल रहे हैं, और SELinux अब भी enforcing मोड में है।

नवीनतम ऑफ़र, छूट और विशेष प्रोमोशन से अपडेट रहें।

प्रोमोशन देखें

हम cookies का उपयोग करते हैं

हम अपनी साइट पर आपके अनुभव को बेहतर बनाने के लिए एनालिटिक्स cookies का उपयोग करते हैं। कोई भी डेटा तीसरे पक्ष को नहीं बेचा जाता है। हमारे बारे में और जानें गोपनीयता नीति.