SSD Nodes Learn Hosting plans →
మార్గదర్శకాలు Matt Connorద్వారా Matt Connor · అప్‌డేట్ చేయబడింది 2026-08-01

Ubuntu 24.04లో LAMP స్టాక్ మరియు PHP-FPM సెటప్ చేయడం ఎలా

Ubuntu 24.04లో Apache, MariaDB, PHP 8.3తో కూడిన LAMP స్టాక్‌ను సెటప్ చేయండి. unix_socket అథెంటికేషన్, వర్చువల్ హోస్టింగ్ మరియు Certbot ద్వారా ఉచిత HTTPS పొందడానికి ఈ గైడ్ చూడండి.

మీరు ఏమి నిర్మిస్తున్నారు

ఒక Ubuntu 24.04 సర్వర్‌లో LAMP స్టాక్ అనేది నాలుగు భాగాల కలయిక: పునాదిగా Linux, HTTP అభ్యర్థనలను స్వీకరించే Apache, డేటాను నిల్వ చేసే MariaDB, మరియు కోడ్‌ను రన్ చేసే PHP 8.3. ఈ గైడ్ పూర్తయ్యేసరికి, మీరు ఒక నేమ్-బేస్డ్ వర్చువల్ హోస్ట్‌ను, ఒక అప్లికేషన్ డైరెక్టరీని, తక్కువ అధికారాలు కలిగిన ప్రత్యేక యూజర్‌తో కూడిన డేటాబేస్‌ను, PHP-FPM ద్వారా Apacheకి అనుసంధానించబడిన PHPని, మరియు ఉచిత Let's Encrypt సర్టిఫికేట్‌ను కలిగి ఉంటారు.

ఇన్‌స్టాలేషన్ ప్రక్రియ మొత్తం నాలుగు apt కమాండ్లతో పూర్తవుతుంది. ఈ గైడ్‌లో ఎక్కువ భాగం ఈ విడిభాగాల మధ్య అనుసంధానం గురించి ఉంటుంది. కొత్తగా ఇన్‌స్టాల్ చేసిన స్టాక్ ఖాళీ పేజీని చూపడం, సోర్స్ కోడ్‌ను డౌన్‌లోడ్ ఫైల్‌గా బ్రౌజర్‌కు పంపడం, లేదా డేటాబేస్‌లోకి లాగిన్ అవ్వనివ్వకపోవడం వంటి సాధారణ పొరపాట్లను ఎలా సరిచేయాలో ఇందులో వివరించబడింది. వీటిలో ప్రతి సమస్యకు ఒక ప్రత్యేక సంకేతం ఉంటుంది, మరియు మీరు చూసే ఖచ్చితమైన టెక్స్ట్‌తో పాటు వాటి పరిష్కారాలు కింద ఇవ్వబడ్డాయి.

ముందస్తు అవసరాలు మరియు గమనించవలసిన విషయాలు

sudo వినియోగదారు లేదా root యాక్సెస్ మరియు పబ్లిక్ IPv4 అడ్రస్ ఉన్న కొత్త Ubuntu 24.04 KVM VPS సిద్ధంగా ఉందని భావించండి. కనీస స్టాక్ 1 GB RAMతో నడుస్తుంది; అయితే డేటాబేస్ ఆధారిత అప్లికేషన్‌ను ఇన్‌స్టాల్ చేసే ముందు 2 GB RAM కేటాయించండి. ఎందుకంటే MariaDB డిఫాల్ట్ బఫర్‌లు మరియు కొన్ని PHP-FPM వర్కర్లు మొదటి 1 GBని త్వరగా వినియోగించుకుంటాయి.

చివరలో Certbot పని చేయాలంటే రెండు విషయాలు తప్పనిసరి, కాబట్టి వాటిని ఇప్పుడే సిద్ధం చేసుకోండి. మీకు ఒక domain name ఉండాలి మరియు అది VPS యొక్క పబ్లిక్ IPకి పాయింట్ చేసేలా A record ఉండాలి. Let's Encrypt సంస్థ HTTP ద్వారా ఆ పేరును ధృవీకరిస్తుంది, కాబట్టి కేవలం IP అడ్రస్‌కు సర్టిఫికేట్ లభించదు. అలాగే, 80 మరియు 443 పోర్ట్‌లు ఇంటర్నెట్ నుండి అందుబాటులో ఉండాలి. చాలా ప్రొవైడర్ల వద్ద, వీటిని కంట్రోల్ ప్యానెల్‌లోని నెట్‌వర్క్ ఫైర్‌వాల్‌లో మరియు సర్వర్‌లోని ufwలో కూడా ఓపెన్ చేయాల్సి ఉంటుంది. DNS మార్పులు అమలులోకి రావడానికి ఒక గంట సమయం పట్టవచ్చు, కాబట్టి A recordను ముందుగానే సెట్ చేయండి, అప్పుడు మీకు అవసరమైన సమయానికి అది అందుబాటులోకి వస్తుంది.

Step 1 - Apache ని ఇన్‌స్టాల్ చేసి డిఫాల్ట్ పేజీని నిర్ధారించుకోవడం

sudo apt update
sudo apt install -y apache2

apt సర్వీస్‌ను ప్రారంభించి, ఎనేబుల్ చేస్తుంది. దాని స్థితిని ఇలా తనిఖీ చేయండి:

systemctl status apache2

మీకు active (running) అని ఉన్న లైన్ కనిపిస్తుంది. ఇప్పుడు బ్రౌజర్‌లో http://YOUR_SERVER_IP/ ని తెరవండి. పెద్ద "It works!" బ్యానర్‌తో ఉన్న Apache2 Ubuntu Default Page కనిపిస్తే, Apache సరిగ్గా పనిచేస్తున్నట్లు అర్థం. ఆ పేజీ /var/www/html/index.html వద్ద ఉంటుంది మరియు డిఫాల్ట్ వర్చువల్ హోస్ట్ 000-default.conf ద్వారా అందించబడుతుంది. మీరు వీటిని తర్వాత డిసేబుల్ చేస్తారు; ప్రస్తుతానికి అవి కనిపిస్తేనే మీరు ఆశించిన ఫలితం వచ్చినట్లు.

ఒకవేళ పేజీ లోడ్ అవ్వకుండా, systemctl లో ప్రాసెస్ రన్ అవుతున్నట్లు చూపిస్తే, ఫైర్‌వాల్ అడ్డుపడుతున్నట్లు అర్థం. అదే తదుపరి దశ.

Step 2 - HTTP మరియు HTTPS కోసం ఫైర్‌వాల్‌ను తెరవండి

apache2 ప్యాకేజీ మూడు ufw అప్లికేషన్ ప్రొఫైల్‌లను నమోదు చేస్తుంది. వాటిని జాబితా చేయండి:

sudo ufw app list

మీకు Apache, Apache Full, మరియు Apache Secure కనిపిస్తాయి. Apache అనేది కేవలం 80 పోర్ట్ కోసం, Apache Secure అనేది కేవలం 443 కోసం, మరియు Apache Full అనేది రెండింటి కోసం. మీరు చివరలో TLSని జోడిస్తున్నారు కాబట్టి, మీకు కావలసింది ఇదే.

sudo ufw allow OpenSSH
sudo ufw allow "Apache Full"
sudo ufw enable

మీరు ufw enable రన్ చేయడానికి ముందే OpenSSHని అనుమతించండి. ufw డిఫాల్ట్‌గా ఇన్‌కమింగ్ ట్రాఫిక్ మొత్తాన్ని నిరాకరిస్తుంది. SSH రూల్ లేకుండా దీన్ని ఎనేబుల్ చేస్తే, అది యాక్టివేట్ అయిన వెంటనే మీ కనెక్షన్ కట్ అవుతుంది. మీరు ప్రస్తుత సెషన్‌లో ఉండగలరు కానీ మళ్ళీ కనెక్ట్ అవ్వలేరు. sudo ufw statusతో నిర్ధారించుకోండి; మీకు OpenSSH, Apache Full, మరియు వాటి v6 సమానమైనవి అన్నీ ALLOW అని చూపిస్తూ ఉండాలి.

Step 3 - MariaDBని ఇన్‌స్టాల్ చేసి సురక్షితం చేయడం

sudo apt install -y mariadb-server
systemctl status mariadb

Ubuntu 24.04 లో MariaDB 10.11 వెర్షన్ అందుబాటులో ఉంది. ఇది లాంగ్-టర్మ్-సపోర్ట్ (LTS) విడుదల, కాబట్టి మీకు బాహ్య రిపోజిటరీ అవసరం లేదు. సర్వీస్ రన్ అవుతున్నప్పుడు, దానిని సురక్షితం చేయండి:

sudo mysql_secure_installation

స్క్రీన్‌పై వచ్చే సూచనలను చదవడం మంచిది, కేవలం Enter కీని నొక్కకండి. current root password అడిగినప్పుడు, Enter నొక్కండి, ఎందుకంటే అప్పటికి పాస్‌వర్డ్ ఏదీ ఉండదు. "Switch to unix_socket authentication?" అని అడిగినప్పుడు, ఈ ప్యాకేజీలో ఇది ఇప్పటికే ఎనేబుల్ అయి ఉంటుంది కాబట్టి, n నొక్కండి. తర్వాతి పేరాలో వివరించిన కారణం కోసం "Change the root password?" ప్రశ్నకు n అని సమాధానం ఇవ్వండి. ఆ తర్వాత వచ్చే మిగిలిన ప్రశ్నలకు Y అని సమాధానం ఇవ్వండి: అనామక వినియోగదారులను తొలగించడం, రిమోట్ రూట్ లాగిన్‌ను నిరోధించడం, టెస్ట్ డేటాబేస్‌ను తొలగించడం మరియు ప్రివిలేజ్ టేబుల్స్‌ను రీలోడ్ చేయడం వంటివి జరుగుతాయి.

ఇక్కడే చాలామంది గందరగోళానికి గురవుతారు. Ubuntu యొక్క MariaDBలో root డేటాబేస్ ఖాతా పాస్‌వర్డ్‌కు బదులుగా unix_socket అథెంటికేషన్‌ను ఉపయోగిస్తుంది. అంటే, మీరు ఇప్పటికే లాగిన్ అయి ఉన్న ఆపరేటింగ్ సిస్టమ్ వినియోగదారుని డేటాబేస్ నమ్ముతుంది. కాబట్టి, రూట్ షెల్ నుండి ఇది ఇలా పనిచేస్తుంది:

sudo mysql

...ఇది మిమ్మల్ని పాస్‌వర్డ్ అడగకుండానే MariaDB [(none)]> ప్రాంప్ట్‌లోకి తీసుకెళ్తుంది. అదే కమాండ్‌ను సాధారణ వినియోగదారుగా రన్ చేస్తే తిరస్కరించబడుతుంది, ఇదే దీని ముఖ్య ఉద్దేశ్యం: డేటాబేస్ రూట్ యాక్సెస్ అనేది సిస్టమ్‌లోని sudo కి అనుసంధానించబడి ఉంటుంది. దీనివల్ల దొంగిలించడానికి, ఫిషింగ్ చేయడానికి లేదా బ్రూట్-ఫోర్స్ చేయడానికి పాస్‌వర్డ్ ఏదీ ఉండదు. ఇది పాస్‌వర్డ్ కంటే సురక్షితమైనది, కాబట్టి దీనిని మార్చవద్దు. దీని నుండి వచ్చే నియమం ఏమిటంటే: ఎప్పుడూ ఒక అప్లికేషన్‌ను root ఖాతాకు పాయింట్ చేయవద్దు. ప్రతి అప్లికేషన్‌కు ప్రత్యేక వినియోగదారుని సృష్టించండి (Step 7), ఎందుకంటే TCP ద్వారా యూజర్‌నేమ్ మరియు పాస్‌వర్డ్‌తో కనెక్ట్ అయ్యే యాప్ సాకెట్ అథెంటికేషన్‌ను ఉపయోగించలేదు, మరియు ప్రతి యాప్ దాని స్వంత డేటాబేస్‌కే పరిమితం కావాలని మీరు కోరుకుంటారు.

దశ 4 - PHP 8.3 మరియు PHP-FPM ఇన్‌స్టాల్ చేయడం

Ubuntu 24.04 యొక్క డిఫాల్ట్ PHP వెర్షన్ 8.3. FPM ప్రాసెస్ మేనేజర్‌ను మరియు సాధారణ అప్లికేషన్‌లకు అవసరమైన ఎక్స్‌టెన్షన్లను ఇన్‌స్టాల్ చేయండి:

sudo apt install -y php8.3-fpm php8.3-mysql php8.3-cli \
  php8.3-curl php8.3-xml php8.3-mbstring php8.3-zip

ఆ జాబితాలో లేని దానిని గమనించండి: libapache2-mod-php. ఆ పాత ప్యాకేజీ ప్రతి Apache ప్రాసెస్‌లో ఒక PHP ఇంటర్‌ప్రెటర్‌ను కలిగి ఉంటుంది. ఇది సరళమైనది, కానీ ప్రతి వర్కర్ ఒక స్క్రిప్ట్‌ను లేదా స్టాటిక్ ఇమేజ్‌ను సర్వ్ చేస్తున్నా సరే, ఒక PHP కాపీని కలిగి ఉంటుంది. ఈ రెండింటి లైఫ్ సైకిల్ ఒకటిగానే ఉంటుంది. ఇది Apache యొక్క prefork MPMతో మాత్రమే పనిచేస్తుంది, ఇది అత్యంత తక్కువ సామర్థ్యం కలిగినది. దీనికి బదులుగా PHP-FPM, PHPని దాని స్వంత ప్రాసెస్ పూల్‌గా రన్ చేస్తుంది, దీనితో Apache ఒక సాకెట్ ద్వారా కమ్యూనికేట్ చేస్తుంది. అప్పుడు Apache స్టాటిక్ ఫైల్స్ కోసం థ్రెడెడ్ event MPMని ఉపయోగించగలదు మరియు PHP అభ్యర్థనలను మాత్రమే FPMకి పంపుతుంది. ఈ పూల్ వెబ్ సర్వర్‌తో సంబంధం లేకుండా స్వతంత్రంగా ట్యూన్ చేయబడుతుంది. భవిష్యత్తులో మీరు nginxని ముందు ఉంచినా, ఇదే FPM సెటప్ పనిచేస్తుంది. ఇది ప్రస్తుతం డిఫాల్ట్‌గా ఉండటానికి బలమైన కారణం ఉంది.

Apache, proxy_fcgi మాడ్యూల్ ద్వారా FPMని చేరుకుంటుంది. దీనిని ఎనేబుల్ చేయండి, FPM ప్యాకేజీ అందించిన కాన్ఫిగరేషన్‌ను ఎనేబుల్ చేయండి మరియు రీస్టార్ట్ చేయండి:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.3-fpm
sudo systemctl restart apache2

a2enconf php8.3-fpm, /etc/apache2/conf-available/php8.3-fpm.confని యాక్టివేట్ చేస్తుంది. ఇందులో PHP ఫైళ్లను FPM సాకెట్‌కు పంపే రూల్ ఉంటుంది. దీని ప్రధాన భాగం ఏదైనా .php ఫైల్‌ను సరిపోల్చి, దానిని /run/php/php8.3-fpm.sock వద్ద ఉన్న సాకెట్‌కు ఫార్వర్డ్ చేస్తుంది:

<FilesMatch ".+\.ph(ar|p|tml)$">
    SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
</FilesMatch>

మీరు ఆ ఫైల్‌ను ఎడిట్ చేయనవసరం లేదు; అది సరైన సెట్టింగ్‌లతోనే వస్తుంది. కానీ సాకెట్ పాత్ ఎక్కడ ఉందో తెలుసుకోవడం వల్ల, భవిష్యత్తులో వచ్చే "PHP downloads instead of running" మరియు "Primary script unknown" వంటి లోపాలను గుర్తించవచ్చు. ఇవి రెండూ Apache మరియు FPM ఈ సాకెట్ లేదా దాని వెనుక ఉన్న ఫైల్ విషయంలో ఏకీభవించకపోవడం వల్ల వస్తాయి.

Step 5 - మీ అప్లికేషన్ కోసం నేమ్-బేస్డ్ వర్చువల్ హోస్ట్

నేమ్-బేస్డ్ వర్చువల్ హోస్టింగ్ ద్వారా ఒకే IP అడ్రస్ నుండి అనేక సైట్‌లను అందించవచ్చు; అభ్యర్థనలోని Host: హెడర్‌ను బట్టి Apache ఏ సైట్‌ను చూపించాలో నిర్ణయిస్తుంది. డిఫాల్ట్ /var/www/html కు దూరంగా, అప్లికేషన్ కోసం ఒక డైరెక్టరీని సృష్టించండి:

sudo mkdir -p /var/www/testapp
sudo chown -R www-data:www-data /var/www/testapp
sudo chmod -R 755 /var/www/testapp

యాజమాన్యం (Ownership) ముఖ్యం. Ubuntuలో Apache మరియు PHP-FPM రెండూ www-data యూజర్‌గా రన్ అవుతాయి. కాబట్టి, వెబ్ సర్వర్ చదవాల్సిన ఫైళ్లు మరియు అప్‌లోడ్ ఫోల్డర్ వంటి అప్లికేషన్ రాయాల్సిన డైరెక్టరీలు www-data యాజమాన్యంలో ఉండాలి. మీరు మీ లాగిన్ యూజర్‌తో ఫైళ్లను ఎడిట్ చేయాలనుకుంటే, ఫైళ్లను మీ సొంతం చేసుకుని, మీ యూజర్‌ను www-data గ్రూప్‌లో చేర్చడం ఒక సాధారణ పద్ధతి; సాధారణ డిప్లాయ్‌మెంట్ కోసం, www-data:www-data వాడటం సులభం.

/etc/apache2/sites-available/testapp.conf వద్ద వర్చువల్ హోస్ట్‌ను సృష్టించండి:

<VirtualHost *:80>
    ServerName app.example.com
    DocumentRoot /var/www/testapp

    <Directory /var/www/testapp>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/testapp-error.log
    CustomLog ${APACHE_LOG_DIR}/testapp-access.log combined
</VirtualHost>

ServerNameను మీ అసలైన డొమైన్‌కు సెట్ చేయండి. ఇండెక్స్ ఫైల్ లేనప్పుడు డైరెక్టరీలోని ఫైళ్లను Apache చూపించకుండా Options -Indexes నిరోధిస్తుంది, లేకపోతే సందర్శకులు మీ సోర్స్ ట్రీని బ్రౌజ్ చేయగలరు. AllowOverride All ద్వారా .htaccess ఫైల్ పనిచేస్తుంది, ఇది చాలా PHP అప్లికేషన్‌లకు అందమైన URLల కోసం అవసరం; మీ అప్లికేషన్‌కు ఇది అవసరం లేకపోతే, కొంచెం వేగం కోసం దీన్ని Noneకి మార్చండి. ఈ సైట్‌ను ఎనేబుల్ చేయండి, డిఫాల్ట్ సైట్‌ను డిసేబుల్ చేయండి, కాన్ఫిగరేషన్‌ను తనిఖీ చేయండి మరియు రీలోడ్ చేయండి:

sudo a2ensite testapp
sudo a2dissite 000-default
sudo apache2ctl configtest
sudo systemctl reload apache2

apache2ctl configtest కమాండ్ Syntax OK అని ప్రింట్ చేయాలి. a2dissite 000-default లైన్ చాలామంది మర్చిపోయేది, దీనివల్లనే డిఫాల్ట్ పేజీ అలాగే ఉండిపోతుంది, దీని గురించి ఫెయిల్యూర్స్ విభాగంలో వివరించబడింది.

Step 6 - PHP రన్ అవుతోందని నిర్ధారించుకోండి, ఆపై ఆ ఫైల్‌ను తొలగించండి

యాప్ రూట్ డైరెక్టరీలో ఒక లైన్ ఉన్న PHP ఫైల్‌ను ఉంచండి:

echo "<?php phpinfo();" | sudo tee /var/www/testapp/info.php

http://app.example.com/info.php ని సందర్శించండి. ఫలితం సరిగ్గా ఉంటే, మీకు లోడ్ అయిన మాడ్యూల్స్‌ను చూపే PHP Version 8.3.x అనే పొడవైన ఊదా మరియు బూడిద రంగు పట్టిక కనిపిస్తుంది. అందులో Server API లైన్ FPM/FastCGI అని ఉండాలి. ఈ చివరి లైన్, అభ్యర్థనలు (requests) mod_php ద్వారా కాకుండా PHP-FPM ద్వారా వెళ్తున్నాయని నిర్ధారిస్తుంది.

ఇప్పుడు వెంటనే ఆ ఫైల్‌ను తొలగించండి:

sudo rm /var/www/testapp/info.php

phpinfo() మీ PHP వెర్షన్, లోడ్ అయిన ప్రతి ఎక్స్‌టెన్షన్, ఫైల్ పాత్‌లు మరియు ఎన్విరాన్‌మెంట్ వివరాలను బయటపెడుతుంది. తెలిసిన భద్రతా లోపాలున్న వెర్షన్ కోసం వెతికే వారికి ఇది ఒక వరంలా మారుతుంది. ఇది కేవలం పరీక్ష కోసం మాత్రమే, ఫీచర్ కాదు. పేజీని చూసిన వెంటనే దీన్ని తొలగించండి. ఒకవేళ పట్టికకు బదులుగా మీ బ్రౌజర్ info.php ఫైల్‌ను డౌన్‌లోడ్ చేసుకోమని అడిగితే, PHP మరియు Apache సరిగ్గా అనుసంధానించబడలేదని అర్థం; మరేదైనా చేసే ముందు వైఫల్యాల (failures) విభాగానికి వెళ్లండి.

Step 7 - యాప్ డేటాబేస్ మరియు తక్కువ అధికారాలు కలిగిన వినియోగదారుని సృష్టించడం

సాకెట్-అథెంటికేటెడ్ root వినియోగదారుగా డేటాబేస్‌ను తెరవండి:

sudo mysql

ఆ తర్వాత ఒక డేటాబేస్‌ను మరియు ఆ డేటాబేస్‌కు మాత్రమే పరిమితమైన ఒక వినియోగదారుని సృష్టించండి:

CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'a-long-random-password';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

ఇక్కడ మూడు ఉద్దేశపూర్వక ఎంపికలు ఉన్నాయి. utf8mb4 అనేది నిజమైన నాలుగు-బైట్ల UTF-8, పాత utf8 అలియాస్ ఎమోజీలను మరియు కొన్ని CJK అక్షరాలను నిశ్శబ్దంగా తొలగిస్తుంది, కాబట్టి ఎల్లప్పుడూ utf8mb4 నే ఉపయోగించండి. అనుమతులు (grant) appdb.* పై ఉన్నాయి, *.* పై కాదు: ఈ వినియోగదారు తన సొంత డేటాబేస్‌ను మాత్రమే తాకగలరు, వేరే దేనినీ తాకలేరు. కాబట్టి యాప్‌లో SQL-ఇంజక్షన్ లోపం ఉన్నా, అది ఇతర సైట్‌ల పట్టికలను చదవలేదు. మరియు 'appuser'@'localhost' ఈ ఖాతాను సర్వర్ నుండే వచ్చే కనెక్షన్‌లకు మాత్రమే పరిమితం చేస్తుంది.

ఆ వినియోగదారుగా దీన్ని పరీక్షించండి:

mysql -u appuser -p appdb

ఇది పాస్‌వర్డ్‌ను అడుగుతుంది మరియు మిమ్మల్ని MariaDB [appdb]> ప్రాంప్ట్ వద్ద ఉంచుతుంది. గమనించండి, ఇక్కడ -h ఫ్లాగ్ లేదు, దాన్ని తీసివేయండి. అప్పుడు క్లయింట్ లోకల్ Unix సాకెట్ ద్వారా కనెక్ట్ అవుతుంది, MariaDB దీన్నే localhost గా పరిగణిస్తుంది. తెలుసుకోవలసిన ఒక ముఖ్యమైన విషయం: MySQL మరియు MariaDB లకు, localhost అంటే Unix సాకెట్ మరియు 127.0.0.1 అంటే TCP కనెక్షన్. స్టాక్ Ubuntu 24.04 MariaDB లో సర్వర్ ఇప్పటికీ 127.0.0.1 నుండి వచ్చే TCP కనెక్షన్‌ను localhost గా రిజాల్వ్ చేస్తుంది, కాబట్టి రెండూ ఖాతాతో సరిపోతాయి. కానీ skip-name-resolve ఎనేబుల్ చేయబడిన సర్వర్లలో (ఇది సాధారణ పనితీరు మెరుగుదల, మరియు అనేక కంటైనర్ ఇమేజ్‌లలో ఇది సాధారణం), ఈ రెండింటినీ వేర్వేరు హోస్ట్‌లుగా పరిగణిస్తారు. అప్పుడు 127.0.0.1 కి కనెక్ట్ అయ్యే యాప్, పాస్‌వర్డ్ సరైనదైనప్పటికీ ERROR 1045 (28000): Access denied for user 'appuser'@'127.0.0.1' (using password: YES) తో తిరస్కరించబడుతుంది.

కాబట్టి మీ అప్లికేషన్‌ను localhost హోస్ట్‌కు, appuser వినియోగదారుకు, appdb డేటాబేస్‌కు పాయింట్ చేయండి, ఎప్పుడూ root కి పాయింట్ చేయవద్దు. PHP యొక్క mysqli మరియు PDO రెండూ హోస్ట్ అనేది అక్షరాలా localhost అనే స్ట్రింగ్ అయినప్పుడు Unix సాకెట్‌కు మారుతాయి, ఇది మీరు ఇప్పుడే సృష్టించిన ఖాతాతో సరిపోతుంది. ఒకవేళ ఫ్రేమ్‌వర్క్ సంఖ్యాపరమైన TCP హోస్ట్‌ను కోరితే, అది ఎలా కనెక్ట్ అవుతుందో దానికి అనుగుణంగా వినియోగదారుని సృష్టించండి, అంటే 'appuser'@'127.0.0.1', లేదా మరొక మెషిన్ నుండి డేటాబేస్‌ను చేరుకోవాల్సి వస్తే మాత్రమే @'%' (ఫైర్‌వాల్ రూల్‌తో కలిపి) ఉపయోగించండి.

Step 8 - Certbot తో HTTPS ని జోడించడం

సాధారణ HTTP ద్వారా లాగిన్ ఫారమ్‌ను అందించడం వల్ల పాస్‌వర్డ్‌లు క్లియర్ టెక్స్ట్‌లో పంపబడతాయి, మరియు ప్రతి ఆధునిక బ్రౌజర్ ఈ పేజీని "Not secure" అని గుర్తిస్తుంది. Certbot దీనిని ఒకే కమాండ్‌తో పరిష్కరిస్తుంది. దీనిని Apache ప్లగిన్‌తో ఇన్‌స్టాల్ చేయండి:

sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache

Certbot ఇక్కడ రెండు ప్లగిన్‌లను ఉపయోగిస్తుంది. apache authenticator మీ Apache ద్వారా ఒక ఛాలెంజ్ ఫైల్‌ను క్లుప్తంగా అందించడం ద్వారా మీరు డొమైన్‌ను నియంత్రిస్తున్నారని నిరూపిస్తుంది, మరియు apache installer అప్పుడు మీ వర్చువల్ హోస్ట్‌ను తిరిగి రాసి 443 బ్లాక్‌ను జోడిస్తుంది, కొత్త సర్టిఫికేట్‌ను సూచిస్తుంది, మరియు డిఫాల్ట్‌గా అన్ని HTTP ట్రాఫిక్‌ను HTTPS కి మళ్ళిస్తుంది. Certbot 2.0 నుండి మళ్ళింపు (redirect) గురించి ఎటువంటి ప్రశ్న ఉండదు; మీరు సాధారణ HTTPని అందించడం కొనసాగించాలంటే --no-redirect ని పాస్ చేయండి. మీరు Step 5 లో సరైన ServerName ని సెట్ చేసినందున, Certbot డొమైన్‌ను స్వయంచాలకంగా గుర్తిస్తుంది. సర్టిఫికేట్‌లు 90 రోజుల పాటు చెల్లుబాటు అవుతాయి మరియు ఈ ప్యాకేజీ వాటిని పునరుద్ధరించే systemd టైమర్‌ను ఇన్‌స్టాల్ చేస్తుంది; sudo certbot renew --dry-run తో టైమర్‌ను ధృవీకరించండి, ఇది Congratulations, all simulated renewals succeeded తో ముగియాలి.

ఛాలెంజ్, పునరుద్ధరణ టైమర్, మరియు DNS మరియు ఫైర్‌వాల్ అవసరాల పూర్తి వివరణ కోసం, Apache పై Certbot తో ఉచిత Let's Encrypt TLS సర్టిఫికేట్‌లను జారీ చేయడం అనే అనుబంధ గైడ్‌ను చూడండి.

బ్యాకప్‌లు, అప్‌గ్రేడ్‌లు మరియు హార్డెనింగ్

మీ సర్వర్ స్థితిని నిర్ణయించే రెండు అంశాలను బ్యాకప్ చేయండి: డేటాబేస్‌లు మరియు వెబ్ రూట్. ప్రతి రాత్రి ఒక లాజికల్ డంప్ తీసుకోవడం అత్యంత సరళమైన మరియు నమ్మదగిన పద్ధతి, sudo sh -c 'mysqldump --all-databases --single-transaction | gzip > /root/db-$(date +%F).sql.gz', ఆపై దానిని సర్వర్ నుండి బయటకు కాపీ చేయాలి. మొత్తం పైప్‌లైన్‌ను sudo sh -c లో ఉంచడం చాలా ముఖ్యం: లేకపోతే, షెల్ > /root/... రీడైరెక్ట్‌ను మీ యూజర్ ఖాతా ద్వారా రన్ చేస్తుంది మరియు Permission denied తో విఫలమవుతుంది, ఎందుకంటే mysqldump మాత్రమే sudo ని కలిగి ఉంటుంది. --single-transaction అనేది InnoDB టేబుల్స్‌ను లాక్ చేయకుండానే వాటి స్థిరమైన స్నాప్‌షాట్‌ను అందిస్తుంది. దీనితో పాటు /var/www మరియు /etc/apache2/sites-available ల యొక్క tar ని కూడా ఉంచితే, మీరు ఆ ఫైల్స్ నుండి కొత్త VPSలో మొత్తం స్టాక్‌ను తిరిగి నిర్మించవచ్చు.

అప్‌గ్రేడ్‌లు సాధారణంగా sudo apt update && sudo apt upgrade ద్వారా జరుగుతాయి. అయితే, PHP వెర్షన్ అప్‌డేట్ సమయంలో సమస్యలు రావచ్చు. భవిష్యత్తులో Ubuntu డిఫాల్ట్‌గా PHP 8.4 కి మారినప్పుడు, apt బహుశా 8.3 తో పాటు php8.4-fpm ని ఇన్‌స్టాల్ చేయవచ్చు, అప్పుడు సాకెట్ /run/php/php8.4-fpm.sock గా మారుతుంది, కానీ మీ Apache కాన్ఫిగరేషన్ ఇంకా 8.3 సాకెట్‌నే సూచిస్తుంది. కొత్త కాన్ఫిగరేషన్‌ను ఎనేబుల్ చేయండి (sudo a2enconf php8.4-fpm) మరియు పాతదాన్ని డిసేబుల్ చేయండి, లేకపోతే సాధారణ అప్‌గ్రేడ్ తర్వాత మీ సైట్ Primary script unknown ఎర్రర్‌ను చూపిస్తుంది. PHP విడుదలలు LTS డిస్ట్రోల కంటే వేగంగా జరుగుతాయి కాబట్టి, ప్యాచ్ వెర్షన్‌ను ఫిక్స్ చేసే బదులు ప్రస్తుత PHP విడుదల నోట్స్‌ను తనిఖీ చేయండి.

మొదటి రోజే రెండు హార్డెనింగ్ పద్ధతులను అమలు చేయడం మంచిది. మొదటిది, SSH ని పర్యవేక్షించే Fail2Ban ని సర్వర్‌లో ఇన్‌స్టాల్ చేయండి. పబ్లిక్ VPSలో నిమిషాల వ్యవధిలోనే ఆటోమేటెడ్ లాగిన్ ప్రయత్నాలు మొదలవుతాయి, ఒక చిన్న జైల్ సెటప్ వేలకొద్దీ ప్రయత్నాలను కొన్నింటికి పరిమితం చేసి బ్యాన్ చేస్తుంది. రెండవది, మీరు Apache వర్చువల్ హోస్ట్‌లు, MariaDB డేటాబేస్‌లు మరియు యూజర్లను ఫైళ్లను మాన్యువల్‌గా ఎడిట్ చేసే బదులు బ్రౌజర్ ద్వారా నిర్వహించాలనుకుంటే, Webmin వెబ్-ఆధారిత కంట్రోల్ ప్యానెల్ ఈ స్టాక్ పైన పనిచేస్తుంది మరియు మీరు రాసిన అదే కాన్ఫిగరేషన్ ఫైళ్లను నియంత్రిస్తుంది. ఇవేవీ సర్వర్ పనితీరును అర్థం చేసుకోవడానికి ప్రత్యామ్నాయం కావు, కానీ రోజువారీ నిర్వహణను సులభతరం చేస్తాయి.

వైఫల్య రీతులు మరియు మీరు చూసే సందేశాలు

డిఫాల్ట్ పేజీ తొలగిపోదు. మీరు మీ వర్చువల్ హోస్ట్‌ను ఎడిట్ చేసి, రీలోడ్ చేసినప్పటికీ, బ్రౌజర్ ఇంకా "Apache2 Ubuntu Default Page" మరియు దాని "It works!" బ్యానర్‌ను చూపిస్తోంది. Apache మొదటి సరిపోలే వర్చువల్ హోస్ట్‌ను సర్వ్ చేస్తుంది. అభ్యర్థనకు ఏ ServerName సరిపోలకపోతే, అక్షరక్రమంలో మొదటిగా ఉన్న కాన్ఫిగరేషన్ అమలవుతుంది, 000-default.conf అనేది testapp.conf కంటే ముందు వస్తుంది. అభ్యర్థనలోని హోస్ట్ పేరు మీ ServerName తో సరిపోలడం లేదు, లేదా మీరు sudo a2dissite 000-defaultని రన్ చేయలేదు. డిఫాల్ట్‌ను డిసేబుల్ చేయడానికి sudo systemctl reload apache2ని ఉపయోగించండి, మరియు apache2ctl -Sతో నిర్ధారించుకోండి; ఇది vhost మ్యాప్‌ను ప్రింట్ చేసి, ఏ కాన్ఫిగరేషన్ డిఫాల్ట్‌గా ఉందో చూపిస్తుంది. బ్రౌజర్ కాష్‌ను కూడా క్లియర్ చేయండి; పాత పేజీ నుండి వచ్చిన కాష్డ్ 200 రెస్పాన్స్ అలాగే ఉండిపోవచ్చు.

.php ఫైల్ రన్ అవ్వడానికి బదులుగా డౌన్‌లోడ్ అవుతోంది. మీరు info.phpని ఓపెన్ చేసినప్పుడు, బ్రౌజర్ దాన్ని రన్ చేయడానికి బదులుగా, ముడి <?php సోర్స్ ఉన్న ఫైల్‌ను డౌన్‌లోడ్ చేస్తోంది లేదా దాన్ని ప్లెయిన్ టెక్స్ట్‌గా చూపిస్తోంది. PHP హ్యాండ్లర్ అటాచ్ చేయబడకపోవడం వల్ల, లేదా మీరు sudo a2enmod proxy_fcgiని, లేదా sudo a2enconf php8.3-fpmని విస్మరించడం వల్ల, లేదా ఆ తర్వాత Apacheని రీస్టార్ట్ చేయకపోవడం వల్ల Apache ఆ ఫైల్‌ను స్టాటిక్ అసెట్‌గా సర్వ్ చేస్తోంది. మూడింటినీ రన్ చేయండి (Step 4) మరియు రీలోడ్ చేయండి. apache2ctl -M | grep fcgiతో మాడ్యూల్ లోడ్ అయిందో లేదో నిర్ధారించుకోండి, ఇది proxy_fcgi_moduleని చూపించాలి. ఇది సోర్స్-కోడ్ లీక్, కేవలం ఒక చిన్న బగ్ మాత్రమే కాదు, కాబట్టి సర్వర్‌లో ఏదైనా ముఖ్యమైనది ఉంచే ముందు దీన్ని సరిచేయండి.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'. మీరు sudo లేకుండా mysql -u root లేదా mariadb -u rootని రన్ చేశారు. రూట్ అకౌంట్ unix_socket అథెంటికేషన్‌ను ఉపయోగిస్తుంది, కాబట్టి మీ OS యూజర్ నిజంగా root అయితేనే అది మిమ్మల్ని అనుమతిస్తుంది. దీనికి పరిష్కారం sudo mysql, -u root అవసరం లేదు, పాస్‌వర్డ్ కూడా అవసరం లేదు. ఈ సందేశం సాకెట్ అథెంటికేషన్ సరిగ్గా పనిచేస్తున్నప్పుడు వచ్చే సాధారణ ప్రవర్తన, ఇది ఇన్‌స్టాలేషన్ లోపం కాదు.

ERROR 1045 (28000): Access denied for user 'appuser'@'127.0.0.1' అప్లికేషన్ నుండి వస్తోంది, సరైన పాస్‌వర్డ్ ఉన్నప్పటికీ. అకౌంట్ 'appuser'@'localhost'గా ఉంది, కానీ మీ అప్లికేషన్ TCP ద్వారా 127.0.0.1కి కనెక్ట్ అవుతోంది, అక్కడ హోస్ట్-నేమ్ రిజల్యూషన్ డిసేబుల్ చేయబడింది (skip-name-resolve). కాబట్టి MariaDB ఆ రెండింటినీ వేర్వేరు హోస్ట్‌లుగా పరిగణిస్తుంది, localhost అనేది Unix సాకెట్, 127.0.0.1 అనేది TCP. అప్లికేషన్‌ను localhost హోస్ట్‌కు పాయింట్ చేయండి, తద్వారా అది సాకెట్‌ను ఉపయోగించి అకౌంట్‌తో సరిపోలుతుంది, లేదా ఫ్రేమ్‌వర్క్ కేవలం TCPని మాత్రమే సపోర్ట్ చేస్తే రెండవ అకౌంట్ 'appuser'@'127.0.0.1'ని సృష్టించండి.

AH01071: Got error 'Primary script unknown' అనేది /var/log/apache2/testapp-error.logలో కనిపిస్తుంది, బ్రౌజర్ File not found.ని చూపిస్తుంది. Apache అభ్యర్థనను PHP-FPMకి పంపింది, కానీ Apache ఇచ్చిన పాత్‌లో FPM స్క్రిప్ట్‌ను కనుగొనలేకపోయింది. దీనికి రెండు సాధారణ కారణాలు: మీ కాన్ఫిగరేషన్‌లోని FPM సాకెట్ ఇన్‌స్టాల్ చేయని PHP వెర్షన్‌ను సూచిస్తోంది (అప్‌గ్రేడ్ తర్వాత php8.4 సాకెట్, కానీ 8.3 మాత్రమే రన్ అవుతోంది), లేదా DocumentRoot మరియు అసలైన డైరెక్టరీ వేర్వేరుగా ఉండటం వల్ల ఫైల్ అక్కడ లేదు. ls -l /run/php/తో సాకెట్ ఉందో లేదో తనిఖీ చేయండి, DocumentRoot ఫైల్ ఉన్న చోట సరిపోలుతుందో లేదో నిర్ధారించుకోండి, మరియు php8.3-fpm మరియు apache2 రెండింటినీ రీస్టార్ట్ చేయండి.

AH00558: apache2: Could not reliably determine the server's fully qualified domain name ప్రతి రీస్టార్ట్ వద్ద వస్తుంది. ఇది హాని లేని హెచ్చరిక, లోపం కాదు. గ్లోబల్ ServerName సెట్ చేయలేదని Apache మీకు చెబుతోంది. ServerName your.domainని /etc/apache2/conf-available/servername.confలో రాయడం ద్వారా మరియు sudo a2enconf servernameని రన్ చేయడం ద్వారా దీన్ని నిశ్శబ్దం చేయవచ్చు.

(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80 Apache స్టార్ట్ అయ్యేటప్పుడు వస్తుంది. మరొక వెబ్ సర్వర్ ఇప్పటికే పోర్ట్ 80ని ఆక్రమించి ఉంది, ఇది తరచుగా పాత ప్రయోగాల వల్ల మిగిలిపోయిన nginx కావచ్చు. sudo ss -ltnp | grep :80తో దాన్ని కనుగొనండి, ఆపై Apacheని స్టార్ట్ చేసే ముందు ఆ సర్వీస్‌ను ఆపివేసి డిసేబుల్ చేయండి.

FAQ

mod_php లేదా PHP-FPM - నేను దేనిని ఉపయోగించాలి?

PHP-FPMని ఉపయోగించండి. mod_php ప్రతి Apache ప్రాసెస్‌లో ఒక ఇంటర్‌ప్రెటర్‌ను పొందుపరుస్తుంది మరియు నెమ్మదిగా ఉండే prefork MPMని బలవంతంగా ఉపయోగిస్తుంది, కాబట్టి స్టాటిక్ ఇమేజ్‌ను సర్వ్ చేస్తున్నప్పుడు కూడా Apache PHP ఓవర్‌హెడ్‌ను కలిగి ఉంటుంది. PHP-FPM అనేది PHPని ఒక ప్రత్యేకమైన, స్వతంత్రంగా ట్యూన్ చేయబడిన పూల్‌గా నడుపుతుంది, దీనిని Apache ఒక సాకెట్ ద్వారా చేరుకుంటుంది. ఇది వేగవంతమైన థ్రెడెడ్ event MPMతో పనిచేస్తుంది మరియు తర్వాత nginxకి సులభంగా మారుస్తుంది. ఇది ఆధునిక డిఫాల్ట్; mod_php అనేది కేవలం ఇన్‌-ప్రాసెస్ ప్రవర్తనపై ఆధారపడే పాత అప్లికేషన్‌ల కోసం మాత్రమే అర్థవంతంగా ఉంటుంది.

నా బ్రౌజర్ PHP ఫైల్‌ను రన్ చేయడానికి బదులుగా ఎందుకు డౌన్‌లోడ్ చేస్తోంది?

PHP హ్యాండ్లర్ ఏదీ జత చేయబడనందున Apache ఆ .php ఫైల్‌ను స్టాటిక్ డౌన్‌లోడ్‌గా పరిగణిస్తోంది. FPM ఉన్న Ubuntu 24.04లో, మీరు sudo a2enmod proxy_fcgi, sudo a2enconf php8.3-fpm లేదా ఆ తర్వాత చేయాల్సిన Apache రీస్టార్ట్‌లలో ఒకదాన్ని మిస్ అయ్యారని అర్థం. మూడింటిని రన్ చేసి రీలోడ్ చేయండి, ఆపై apache2ctl -M | grep fcgi ద్వారా proxy_fcgi_module జాబితా చేయబడిందో లేదో సరిచూసుకోండి. మీరు దీనిని సరిచేసే వరకు సర్వర్ సోర్స్ కోడ్‌ను లీక్ చేస్తుంది, కాబట్టి దీనిని అత్యవసరంగా పరిగణించండి.

సరైన పాస్‌వర్డ్ ఉన్నప్పటికీ MariaDBలో రూట్ యాక్సెస్ ఎందుకు తిరస్కరించబడుతోంది?

పాస్‌వర్డ్ లేనందున, Ubuntu యొక్క MariaDB root ఖాతాను unix_socket ద్వారా ప్రామాణీకరిస్తుంది, ఇది ఆపరేటింగ్ సిస్టమ్ రూట్ యూజర్‌కు అనుసంధానించబడి ఉంటుంది. సాధారణ షెల్ నుండి mysql -u root రన్ చేస్తే డిజైన్ ప్రకారం ERROR 1698 (28000): Access denied for user 'root'@'localhost' వస్తుంది. దానికి బదులుగా sudo mysqlతో కనెక్ట్ అవ్వండి, మరియు రూట్‌ను మళ్లీ ఉపయోగించే బదులు ఏదైనా అప్లికేషన్ కోసం ప్రత్యేకమైన పాస్‌వర్డ్-ప్రామాణీకరించబడిన యూజర్‌ను సృష్టించండి.

నా LAMP సైట్‌కు HTTPSని ఎలా జోడించాలి?

certbot మరియు python3-certbot-apacheలను ఇన్‌స్టాల్ చేయండి, డొమైన్ యొక్క A రికార్డును సర్వర్‌కు పాయింట్ చేయండి, ఆపై sudo certbot --apacheని రన్ చేయండి. Apache అథెంటికేటర్ మీ రన్ అవుతున్న Apache ద్వారా డొమైన్ నియంత్రణను నిరూపిస్తుంది మరియు ఇన్‌స్టాలర్ పోర్ట్ 443 కోసం వర్చువల్ హోస్ట్‌ను రీరైట్ చేసి ఆటోమేటిక్ రెన్యూవల్‌ను సెటప్ చేస్తుంది. పూర్తి Certbot మరియు Apache వాక్-త్రూ ఛాలెంజ్, రెన్యూవల్ టైమర్ మరియు సాధారణ వైఫల్య మోడ్‌లను వివరిస్తుంది.

#lamp#apache#mariadb#php-fpm#ubuntu