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

Ubuntu 24.04 లో LAMP స్టాక్ PHP-FPM తో ఎలా సెటప్ చేయాలి

Ubuntu 24.04 పై Apache, MariaDB unix_socket auth తో, PHP 8.3 PHP-FPM తో ఇన్‌స్టాల్ చేయడం ఈ గైడ్‌లో ఉంది. నేమ్-ఆధారిత vhost, Certbot తో ఉచిత HTTPS సెటప్ కూడా వివరించబడింది.

మీరు నిర్మించేది ఏమిటి

LAMP స్టాక్ అనేది ఒక Ubuntu 24.04 సర్వర్‌పై ఉన్న నాలుగు కదిలే భాగాలు: అడుగున 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 కేటాయించండి. ఎందుకంటే MariaDB డిఫాల్ట్ బఫర్‌లు మరియు కొన్ని PHP-FPM వర్కర్‌లు మొదటి గిగాబైట్‌ను వేగంగా వినియోగిస్తాయి.

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

దశ 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 ప్రాసెస్ నడుస్తోందని చెబితే, అడ్డుకుంటున్నది ఫైర్‌వాల్. అది తదుపరి దశ.

దశ 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గా చదువుతూ ఉండాలి.

దశ 3 - MariaDB ని స్థాపించండి మరియు భద్రపరచండి

sudo apt install -y mariadb-server
systemctl status mariadb

Ubuntu 24.04 లో MariaDB 10.11 అందించబడుతుంది, ఇది దీర్ఘకాలిక తరహా విడుదల, కాబట్టి మీకు బాహ్య రిపోజిటరీ అవసరం లేదు. సేవ నడుస్తున్నప్పుడు, దాన్ని బలోపేతం చేయండి:

sudo mysql_secure_installation

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

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

sudo mysql

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

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

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 అభ్యర్థనలను మాత్రమే అందిస్తుంది. పూల్ వెబ్ సర్వర్‌కు స్వతంత్రంగా ట్యూన్ చేయబడుతుంది. మీరు ముందుగా 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 రన్ అవ్వకుండా డౌన్‌లోడ్ అవుతోంది" మరియు "Primary script unknown" వైఫల్యాలను మీరు రోగనిర్ధారణ చేయగలుగుతారు — రెండూ Apache మరియు FPM ఈ సాకెట్ లేదా దాని వెనుక ఉన్న ఫైల్ గురించి అభిప్రాయ భేదానికి దారితీస్తాయి.

దశ 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

యాజమ్యాధికారం ముఖ్యమైనది. 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 వరుస అనేది ప్రజలు మరచిపోయేది, మరియు అదే కారణంగా డిఫాల్ట్ పేజీ తర్వాత అంతరించిపోయినట్లు కనిపిస్తుంది — దీనిని వైఫల్యాల విభాగంలో వివరించబడింది.

దశ 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 అని చూపుతుంది. ఆ చివరి వరుస అభ్యర్థనలు mod_php ద్వారా కాకుండా PHP-FPM ద్వారా వెళుతున్నాయని నిర్ధారిస్తుంది.

ఇప్పుడు దాన్ని వెంటనే తొలగించండి:

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

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

దశ 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 ని ఉపయోగించండి. అనుమతి 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', లేదా మరొక మెషీన్ నుండి డేటాబేస్‌ను చేరుకోవాల్సివస్తే మాత్రమే @'%' (ఒక ఫైర్‌వాల్ నియమంతో జతకట్టి).

దశ 8 - Certbotతో HTTPS జోడించండి

సాధారణ HTTP ద్వారా లాగిన్ ఫారమ్‌ను అందించడం అనేది పాస్‌వర్డ్‌లను స్పష్ట టెక్స్ట్‌లో పంపుతుంది. ప్రతి ఆధునిక బ్రౌజర్ ఆ పేజీని "సురక్షితం కాదు" అని గుర్తిస్తుంది. 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 నుండి రీడైరెక్ట్ ప్రశ్న లేదు; మీకు సాధారణ HTTP అందించడం కొనసాగించాలంటే --no-redirect పాస్ చేయండి. మీరు దశ 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 తో విఫలమవుతుంది, ఎందుకంటే sudo ను వారసత్వంగా పొందినది mysqldump మాత్రమే. --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 సోర్స్ కలిగిన ఫైల్‌ను డౌన్‌లోడ్ చేస్తుంది, లేదా దానిని ప్లెయిన్ టెక్స్ట్‌గా చూపిస్తుంది, దానిని నడపకుండా. Apache ఫైల్‌ను స్టాటిక్ ఆస్తిగా అందిస్తోంది ఎందుకంటే PHP హ్యాండ్లర్ అనుసంధానించబడలేదు — మీరు sudo a2enmod proxy_fcgi, లేదా sudo a2enconf php8.3-fpm ను దాటవేశారు, లేదా తర్వాత Apache ను రీస్టార్ట్ చేయలేదు. మూడింటినీ నడపండి (Step 4) మరియు రీలోడ్ చేయండి. మాడ్యూల్ లోడ్ అయిందని apache2ctl -M | grep fcgi తో నిర్ధారించుకోండి, ఇది proxy_fcgi_module జాబితా చేయాలి. ఇది సోర్స్-కోడ్ లీక్, కేవలం కాస్మెటిక్ బగ్ కాదు, కాబట్టి సర్వర్‌పై నిజమైదేదైనా ఉంచే ముందు దీన్ని పరిష్కరించండి.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'. మీరు mysql -u root లేదా mariadb -u root ను sudo లేకుండా నడిపారు. రూట్ ఖాతా 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 వైపు చూపండి తద్వారా అది సాకెట్‌ను ఉపయోగించి ఖాతాతో సరిపోలుతుంది, లేదా రెండవ ఖాతా 'appuser'@'127.0.0.1' సృష్టించండి ఒకవేళ ఫ్రేమ్‌వర్క్ TCP మాత్రమే మాట్లాడితే.

/var/log/apache2/testapp-error.log లో AH01071: Got error 'Primary script unknown', బ్రౌజర్ File not found. చూపిస్తోంది. Apache అభ్యర్థనను PHP-FPM కు అప్పగించింది, కానీ FPM Apache ఇచ్చిన పాత్‌లో స్క్రిప్ట్‌ను కనుగొనలేకపోయింది. రెండు సాధారణ కారణాలు: మీ కాన్ఫిగ్‌లోని 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. ఇది హానికరమైన హెచ్చరిక, అది ఎర్రర్ కాదు — Apache మీకు గ్లోబల్ ServerName సెట్ చేయబడలేదని చెబుతోంది. ServerName your.domain ను /etc/apache2/conf-available/servername.conf లోకి వ్రాసి sudo a2enconf servername నడపడం ద్వారా దీన్ని నిశబ్దం చేయండి.

Apache ప్రారంభమయ్యేటప్పుడు (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80. మరొక వెబ్ సర్వర్ ఇప్పటికే పోర్ట్ 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 ఫైల్‌ను అమలు చేయకుండా డౌన్‌లోడ్ చేస్తున్నామే ఎందుకు?

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

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

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

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

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

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