SSD Nodes Learn
கல்வி வழிகாட்டிகள் Matt Connorஆல் Matt Connor · புதுப்பிக்கப்பட்டது 2026-07-25

Ubuntu 24.04 LAMP stack PHP-FPM நிறுவல் வழிகாட்டி

Ubuntu 24.04 இல் Apache, MariaDB, PHP 8.3 PHP-FPM கொண்டு LAMP stack உருவாக்க முழு வழிகாட்டி. virtual host, unix_socket auth, Certbot HTTPS அமைவு விவரங்கள் உள்ளன.

நீங்கள் உருவாக்கப் போவது என்ன

LAMP stack என்பது ஒரே Ubuntu 24.04 சேவையகத்தில் இயங்கும் நான்கு கூறுகள் ஆகும்: அடிப்படையில் Linux, HTTP கோரிக்கைகளுக்குப் பதிலளிக்கும் Apache, தரவைச் சேமிக்கும் MariaDB, மற்றும் குறியீட்டை இயக்கும் PHP 8.3. இறுதியில் நீங்கள் பெறுவீர்கள்: ஒரு பெயர் அடிப்படையிலான virtual host உண்மையான application கோப்புறையைச் சேவைக்கும், ஒரு database இல் குறைந்தபட்ச அனுமதி கொண்ட தனிப்பயனாளர் இருக்கும், PHP-FPM மூலம் PHP ஆனது Apache உடன் இணைக்கப்பட்டிருக்கும், மேலும் இலவச Let's Encrypt சான்றிதழ் சேவையகத்திற்கு மேல் பொருத்தப்பட்டிருக்கும்.

நிறுவல் என்பது நான்கு apt கட்டளைகள் மட்டுமே. இந்த வழிகாட்டியில் உள்ள பெரும்பாலானவை இந்தக் கூறுகளுக்கு இடையேயான இணைப்பு வேலைகள் மற்றும் புதிதாக நிறுவப்பட்ட stack வெற்றுப் பக்கத்தைக் காட்டுவதற்கும், உங்கள் மூலக் குறியீட்டை browser பதிவிறக்கமாக வழங்குவதற்கும், அல்லது நீங்கள் இப்போது நிறுவிய database உள் நுழைய மறுப்பதற்கும் காரணமாகும் சில பிழைகளே. இவற்றில் ஒவ்வொன்றிற்கும் நீங்கள் அடையாளம் காணக்கூடிய ஒரு அறிகுறி உண்டு. ஒவ்வொரு பிழையும் கீழே நீங்கள் காணக்கூடிய சரியான உரையுடன் குறிப்பிடப்பட்டுள்ளது.

முன்தேவைகள் மற்றும் நேர்மையான சிக்கல்கள்

sudo பயனர் அல்லது root அணுகலுடன் ஒரு புதிய Ubuntu 24.04 KVM VPS இருப்பதாகக் கருதுங்கள். இதற்கு ஒரு பொது IPv4 முகவரி தேவை. குறைந்தபட்ச அமைப்பு 1 GB RAM-ல் இயங்கும். உண்மையான தரவுத்தள அடிப்படையிலான பயன்பாட்டை நிறுவுவதற்கு முன் 2 GB வழங்கவும். ஏனெனில் MariaDB-ன் இயல்புநிலை buffers மற்றும் சில PHP-FPM workers முதல் gigabyte-ஐ விரைவாகப் பயன்படுத்திவிடும்.

இறுதியில் Certbot வேலை செய்ய இரண்டு விஷயங்கள் சரியாக இருக்க வேண்டும். எனவே அவற்றை இப்போதே சரிசெய்யவும். உங்களுக்கு ஒரு domain name தேவை. அதற்கு VPS-ன் பொது IP-ஐ நோக்கி ஒரு A record இருக்க வேண்டும். Let's Encrypt அந்த பெயருக்கு HTTP வழியாகச் சரிபார்க்கிறது. வெறும் IP முகவரியால் எப்போதும் certificate பெற முடியாது. மேலும் 80 மற்றும் 443 துறைகள் இணையத்திலிருந்து அணுகக்கூடியதாக இருக்க வேண்டும். பல providers-ல் இது control panel-ல் உள்ள network firewall-ல் துறைகளைத் திறக்க வேண்டும் என்பதைக் குறிக்கிறது. அத்துடன் ufw-லும் திறக்க வேண்டும். DNS மாற்றங்கள் பரவ ஒரு மணி நேரம் வரை ஆகலாம். எனவே A record-ஐ முதலில் அமைக்கவும். உங்களுக்குத் தேவைப்படும் நேரத்திற்குள் அது செயல்படத் தொடங்கிவிடும்.

படி 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 இருக்கிறது. இது ஒரு நீண்டகால ஆதரவு வெளியீடு. எனவே உங்களுக்கு வெளிப்புற repository தேவையில்லை. சேவை இயங்கிக்கொண்டிருக்கும்போது, அதை பாதுகாப்பாக்கவும்:

sudo mysql_secure_installation

கேள்விகளை தானாக Enter அழுத்தாமல் படிப்பது நல்லது. தற்போதைய root password கேட்கப்படும்போது, Enter அழுத்தவும் — இன்னும் எதுவும் இல்லை. "Switch to unix_socket authentication?" என்று கேட்கப்படும்போது, இந்த package-ல் அது ஏற்கனவே இயக்கப்பட்டிருப்பதால் பதில் எதையும் மாற்றாது. எனவே n அழுத்தவும். அடுத்த பத்தியில் உள்ள காரணத்தால், "Change the root password?" என்பதற்கு n என பதிலளிக்கவும். பிறகெல்லாம் Y என பதிலளிக்கவும்: anonymous users-ஐ நீக்குதல், தொலைதூர root login-ஐ தடுத்தல், test database-ஐ கைவிடுதல், மற்றும் privilege tables-ஐ மீளேற்றுதல்.

இதுதான் அனைவரையும் குழப்பும் பகுதி. Ubuntu-வின் MariaDB-யில் root database account unix_socket authentication-ஐ பயன்படுத்துகிறது, password அல்ல. அதாவது, நீங்கள் ஏற்கனவே அங்கீகரிக்கப்பட்ட இயக்க முறைமை பயனரை database நம்புகிறது. எனவே இது root shell-ல் இருந்து வேலை செய்கிறது:

sudo mysql

...இது password ஏதும் கேட்காமல் உங்களை MariaDB [(none)]> prompt-ல் வைக்கிறது. அதே command அங்கீகாரம் இல்லாத பயனரால் இயக்கப்பட்டால் நிராகரிக்கப்படும். இதுதான் முக்கிய நோக்கம்: database root-க்கான அணுகல் இந்த கணினியில் sudo உடன் இணைக்கப்பட்டுள்ளது, திருடவோ, phishing செய்யவோ, brute-force செய்யவோ password எதுவும் இல்லை. இது password-ஐ விட பாதுகாப்பானது, எனவே அதை அப்படியே விட்டுவிடவும். இதிலிருந்து பெறப்படும் விதி: ஒரு application-ஐ ஒருபோதும் root account-உடன் இணைக்க வேண்டாம். ஒவ்வொரு application-க்கும் தனிப்பட்ட பயனரை உருவாக்கவும் (படி 7). ஏனெனில் TCP வழியாக username மற்றும் password உடன் இணையும் ஒரு app-ஆல் socket auth-ஐ பயன்படுத்த முடியாது. மேலும் ஒவ்வொரு app-ஐயும் அதன் சொந்த database-க்கு மட்டுப்படுத்துவதே நல்லது.

படி 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 மொழிபெயர்ப்பாளரை உட்பொதிக்கிறது. இது எளிதானதுதான். ஆனால் ஒவ்வொரு worker-ம் ஒரு script-ஐக் கையாளுகிறதா அல்லது ஒரு நிலையான படத்தைக் கையாளுகிறதா என்பதைப் பொருட்படுத்தாமல் ஒரு PHP நகலைத் தன்னிடம் வைத்திருக்கும். இவை இரண்டும் ஒரே செயல்வட்டத்தைப் பகிர்ந்து கொள்ளும். மேலும் இது Apache-இன் prefork MPM உடன் மட்டுமே இயங்கும் — அதுவே செயல்திறன் குறைந்த ஒன்றாகும். PHP-FPM அதற்கு பதிலாக, PHP-ஐ அதன் சொந்த செயல்முறைகளின் தொகுப்பாக இயக்குகிறது. Apache ஒரு socket வழியாக இதனுடன் தொடர்பு கொள்கிறது. எனவே Apache நிலையான கோப்புகளுக்கு threaded event MPM-ஐப் பயன்படுத்தலாம். PHP கோரிக்கைகளை மட்டும் அந்தத் தொகுப்பிற்கு அனுப்பலாம். இந்தத் தொகுப்பு web சேவையகத்திலிருந்து சுதந்திரமாகத் தனியாக சீரமைக்கப்படுகிறது. மேலும் நீங்கள் பின்னர் nginx-ஐ முன்னணியில் பயன்படுத்தினாலும், இதே FPM அமைப்பு வேலை செய்யும். இதுவே தற்போதைய இயல்புநிலை என்பதற்கு நல்ல காரணம் உண்டு.

Apache, FPM-ஐ proxy_fcgi தொகுதி வழியாக அணுகுகிறது. இதைச் செயல்படுத்துங்கள். 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 socket-க்குத் திருப்பி அனுப்பும் விதியைக் கொண்டுள்ளது. இதன் மையம் எந்தத் தொடர்பும் இல்லாத .php கோப்பையும் பிடித்து, அதை /run/php/php8.3-fpm.sock இல் உள்ள socket-க்கு அனுப்புகிறது:

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

நீங்கள் அந்தக் கோப்பைத் திருத்த வேண்டாம்; அது சரியாகவே வருகிறது. ஆனால் socket பாதையை அறிந்திருப்பதுதான் பின்னர் "PHP இயங்காமல் பதிவிறக்கமாகிறது" மற்றும் "Primary script unknown" போன்ற தோல்விகளைக் கண்டறிய உதவும் — இவ்விரண்டும் Apache-உம் FPM-உம் இந்த socket அல்லது அதன் பின்னால் உள்ள கோப்பு குறித்து வேறுபடுவதால் ஏற்படுகின்றன.

படி 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 பயனராக இயங்குகின்றன. எனவே வலை சேவையகம் படிக்க வேண்டிய கோப்புகள் — மற்றும் செயலி எழுத வேண்டிய கோப்புறைகள், உதாரணமாக uploads கோப்புறை — 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 ஐ உங்கள் உண்மையான டொமைனாக அமைக்கவும். index கோப்பு இல்லாதபோது Apache கோப்புறையை பட்டியலிடுவதை Options -Indexes தடுக்கிறது — இல்லையெனில் பார்வையாளர்கள் உங்கள் மூலக் குறியீட்டை உலாவுவார்கள். பெரும்பாலான PHP செயலிகள் எதிர்பார்க்கும் அழகிய URL-களுக்கு .htaccess கோப்பு வேலை செய்ய AllowOverride All அனுமதிக்கிறது; உங்கள் செயலிக்கு அது தேவையில்லை என்றால், சிறிய வேக அதிகரிப்பிற்காக அதை 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 ஆனது Apache உடன் இணைக்கப்படவில்லை; வேறு ஏதாவது செய்வதற்கு முன் தோல்வி பிரிவிற்குச் செல்லவும்.

படி 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-injection ஓட்டை மற்ற எல்லா தளங்களின் அட்டவணைகளையும் படிக்க முடியாது. மேலும் 'appuser'@'localhost' இந்தக் கணக்கை சேவையகத்திலிருந்தே தொடங்கும் இணைப்புகளுக்கு மட்டும் கட்டுப்படுத்துகிறது.

அந்தப் பயனராக அதைச் சோதிக்கவும்:

mysql -u appuser -p appdb

இது கடவுச்சொல்லைக் கேட்டு உங்களை MariaDB [appdb]> கட்டளை வரியில் இறக்கும். -h flag இல்லை என்பதைக் கவனிக்கவும் — அதை விட்டுவிடவும், உள்ளக Unix socket வழியாக கிளையன்ட் இணைக்கும், இதுதான் MariaDB localhost என எண்ணுகிறது. தெரிந்துகொள்ள வேண்டிய ஒரு சிக்கல்: MySQL மற்றும் MariaDB இரண்டிற்கும், localhost என்பது Unix socket ஐயும் 127.0.0.1 என்பது TCP இணைப்பையும் குறிக்கிறது. வழக்கமான Ubuntu 24.04 MariaDB இல் சேவையகம் 127.0.0.1 இலிருந்து வரும் TCP இணைப்பை localhost ஆக மாற்றியமைக்கிறது, எனவே இரண்டும் இந்தக் கணக்குடன் பொருந்தும் — ஆனால் skip-name-resolve இயக்கப்பட்டிருக்கும் சேவையகங்களில் (இது ஒரு பொதுவான செயல்திறன் மேம்பாடு, மேலும் பல container படிமங்களில் இதுவே வழக்கம்), இவை இரண்டும் வெவ்வேறு host ஆக கருதப்படும், எனவே 127.0.0.1 ஐ அணுகும் செயலி கடவுச்சொல் சரியாக இருந்தாலும் ERROR 1045 (28000): Access denied for user 'appuser'@'127.0.0.1' (using password: YES) பிழையுடன் நிராகரிக்கப்படும்.

எனவே உங்கள் செயலியை host localhost, பயனர் appuser, தரவுத்தளம் appdb என அமைக்கவும் — root ஆக அல்ல. PHP இன் mysqli மற்றும் PDO இரண்டும் host ஐ நேரடி சரம் localhost என அமைக்கும்போது Unix socket க்கு மாறுகின்றன, இது நீங்கள் இப்போது உருவாக்கிய கணக்குடன் பொருந்துகிறது. ஒரு framework எண்ணிய TCP host ஐ வற்புறுத்தினால், அது உண்மையில் எப்படி இணைக்கிறதோ அதற்கு ஏற்ப பயனரை உருவாக்கவும் — 'appuser'@'127.0.0.1', அல்லது வேறு இயந்திரத்திலிருந்து தரவுத்தளத்தை அணுக வேண்டியிருந்தால் மட்டும் @'%' (ஒரு firewall விதியுடன் இணைந்து).

படி 8 - Certbot உடன் HTTPS ஐச் சேர்க்கவும்

வழக்கமான HTTP வழியாக உள்நுழைவு படிவத்தை வழங்குவது கடவுச்சொற்களை தெளிவான உரையாக அனுப்புகிறது. ஒவ்வொரு நவீன உலாவியும் அந்தப் பக்கத்தை "பாதுகாப்பற்றது" எனக் குறிக்கும். Certbot ஒரே ஒரு கட்டளையில் இதைச் சரிசெய்கிறது. Apache plugin உடன் அதை நிறுவவும்:

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

Certbot இங்கே இரண்டு plugin களைப் பயன்படுத்துகிறது. apache authenticator உங்கள் இயங்கும் Apache வழியாக சவால் கோப்பைச் சுருக்கமாக வழங்கி, நீங்கள் அந்த domain ஐக் கட்டுப்படுத்துகிறீர்கள் என்பதை நிரூபிக்கிறது. பின்னர் apache installer உங்கள் virtual host ஐ மறுபதிவு செய்து 443 block ஐச் சேர்க்கிறது, அதைப் புதிய சான்றிதழுக்குச் சுட்டுகிறது, மேலும் அனைத்து HTTP போக்குவரத்தையும் HTTPS க்கு மறுசுழற்சி செய்கிறது — Certbot 2.0 முதல் மறுசுழற்சி கேள்வி எதுவும் இல்லை; வழக்கமான HTTP வழங்குவதைத் தொடர வேண்டுமாயின் --no-redirect ஐ அனுப்பவும். படி 5 இல் நீங்கள் உண்மையான ServerName ஐ அமைத்ததால், Certbot domain ஐ தானாகக் கண்டறிகிறது. சான்றிதழ்கள் 90 நாட்கள் நீடிக்கும், மேலும் தொகுப்பு அவற்றைப் புதுப்பிக்கும் systemd timer ஐ நிறுவுகிறது; timer ஐ sudo certbot renew --dry-run உடன் சரிபார்க்கவும், அது Congratulations, all simulated renewals succeeded உடன் முடிவடைய வேண்டும்.

சவால், புதுப்பிப்பு timer, மற்றும் DNS மற்றும் firewall தேவைகளின் முழு விளக்கத்திற்காக, Apache இல் Certbot உடன் இலவச Let's Encrypt TLS சான்றிதழ்களை வழங்குவது பற்றிய துணை வழிகாட்டியைப் பார்க்கவும் Apache இல் Certbot உடன் இலவச Let's Encrypt TLS சான்றிதழ்களை வழங்குதல்.

காப்புப்பிரதிகள், மேம்படுத்தல்கள், மற்றும் பாதுகாப்பு வலுவூட்டல்

உங்கள் நிலைத்த தரவைக் கொண்டிருக்கும் இரண்டையும் காப்புப்பிரதி எடுக்கவும்: தரவுத்தளங்கள் மற்றும் web root. தினசரி தர்க்கரீதியான டம்ப் எளிமையான நம்பகமான முறை — 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 சாக்கெட்டையே சுட்டிக்காட்டுகிறது. புதிய conf-ஐ இயக்கவும் (sudo a2enconf php8.4-fpm) மற்றும் பழையதை முடக்கவும், இல்லையெனில் உங்கள் தளம் சாதாரண மேம்படுத்தலுக்குப் பிறகு Primary script unknown திரும்பத் தொடங்கும். PHP வெளியீடுகள் LTS விநியோகத்தை விட வேகமாக நகர்வதால், ஒரு குறிப்பிட்ட பேட்ச் பதிப்பை பின் செய்வதை விட தற்போதைய PHP வெளியீட்டு குறிப்புகளை சரிபார்க்கவும்.

முதல் நாளில் செய்வதற்கு இரண்டு பாதுகாப்பு வலுவூட்டல் படிகள் மதிப்புள்ளவை. முதலாவதாக, சேவையகத்தில் SSH-ஐ கவனிக்கும் Fail2Ban-ஐ வைக்கவும் — ஒரு பொது VPS சில நிமிடங்களில் தானியங்கி உள்நுழைவு முயற்சிகளைப் பெறுகிறது, மேலும் ஒரு சிறிய jail ஆயிரக்கணக்கான முயற்சிகளை தடைக்கு முன் சிலவாக மாற்றுகிறது. இரண்டாவதாக, கைமுறையாக கோப்புகளைத் திருத்துவதை விட, Apache மெய்நிகர் ஹோஸ்ட்கள், MariaDB தரவுத்தளங்கள் மற்றும் பயனர்களை உலாவி வழியாக நிர்வகிக்க விரும்பினால், Webmin வலை அடிப்படையிலான கட்டுப்பாட்டு பேனல் இந்தச் சரியான ஸ்டாக்கின் மேல் இருக்கிறது, மேலும் நீங்கள் இப்போது எழுதிய அதே கட்டமைப்பு கோப்புகளை இயக்குகிறது. இவை இரண்டும் பகுதிகளைப் புரிந்துகொள்வதற்கு மாற்றாக இல்லை, ஆனால் இரண்டும் தினசரி உராய்வைக் குறைக்கின்றன.

பிழை நிலைகள், நீங்கள் காணும் சரங்களுடன்

இயல்புநிலை பக்கம் நீக்கப்படவில்லை. நீங்கள் உங்கள் virtual host-ஐ திருத்தினீர்கள், reload செய்தீர்கள், ஆனால் உலாவி இன்னும் "Apache2 Ubuntu Default Page" மற்றும் அதன் "It works!" பதாகையைக் காட்டுகிறது. Apache முதல் பொருந்தும் virtual host-ஐ வழங்குகிறது. எந்த ServerName-உம் கோரிக்கையுடன் பொருந்தாதபோது, அகரவரிசைப்படி முதல் config வெல்கிறது — 000-default.conf, testapp.conf-க்கு முன் வரிசைப்படுத்தப்படுகிறது. கோரிக்கையின் host name உங்கள் ServerName-உடன் பொருந்தவில்லை, அல்லது நீங்கள் sudo a2dissite 000-default-ஐ இயக்கவே இல்லை. இயல்புநிலையான sudo systemctl reload apache2-ஐ முடக்குங்கள், மேலும் apache2ctl -S-உடன் உறுதிப்படுத்துங்கள், இது vhost map-ஐ அச்சிடுகிறது மற்றும் எந்த config இயல்புநிலையை வைத்திருக்கிறது என்பதைக் காட்டுகிறது. உலாவி cache-ஐயும் அழிக்கவும்; பழைய பக்கத்திலிருந்து cached 200 தொடர்ந்து நிலைத்திருக்கும்.

ஒரு .php கோப்பு இயங்குவதற்குப் பதிலாக பதிவிறக்கப்படுகிறது. நீங்கள் info.php-ஐ திறக்கிறீர்கள், உலாவி அதன் பதிலாக raw <?php மூலத்தைக் கொண்ட கோப்பை பதிவிறக்கம் செய்கிறது, அல்லது அதை வெற்று உரையாகக் காட்டுகிறது, இயக்குவதற்குப் பதிலாக. PHP handler இணைக்கப்படாததால் Apache கோப்பை static asset-ஆக வழங்குகிறது — நீங்கள் sudo a2enmod proxy_fcgi, அல்லது sudo a2enconf php8.3-fpm-ஐ தவறவிட்டீர்கள், அல்லது பிறகு Apache-ஐ restart செய்யவில்லை. மூன்றையும் இயக்குங்கள் (Step 4) மற்றும் reload செய்யுங்கள். தொகுதி load செய்யப்பட்டதை apache2ctl -M | grep fcgi-உடன் உறுதிப்படுத்துங்கள், இது proxy_fcgi_module-ஐ பட்டியலிட வேண்டும். இது மூலக் குறியீடு கசிவு, அலங்கார பிழை அல்ல, எனவே சேவையகத்தில் எதையாவது உண்மையாக வைப்பதற்கு முன் இதை சரிசெய்யுங்கள்.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'. நீங்கள் mysql -u root அல்லது mariadb -u root-ஐ sudo இல்லாமல் இயக்கினீர்கள். root கணக்கு unix_socket auth-ஐப் பயன்படுத்துகிறது, எனவே உங்கள் OS பயனர் உண்மையில் root ஆக இருக்கும்போது மட்டுமே இது உங்களை ஏற்கிறது. தீர்வு sudo mysql-u root இல்லை, கடவுச்சொல் இல்லை. இந்தச் செய்தி socket auth சரியாக வேலை செய்வதன் எதிர்பார்க்கப்படும் நடத்தை, சேதமடைந்த install அல்ல.

சரியான கடவுச்சொல்லுடன், பயன்பாட்டிலிருந்து ERROR 1045 (28000): Access denied for user 'appuser'@'127.0.0.1'. கணக்கு 'appuser'@'localhost' ஆக இருக்கிறது, ஆனால் உங்கள் பயன்பாடு host-name resolution முடக்கப்பட்ட ஒரு சேவையகத்தில் 127.0.0.1-க்கு TCP வழியாக இணைக்கிறது (skip-name-resolve), எனவே MariaDB இரண்டையும் வெவ்வேறு host-களாகப் பொருத்துகிறது — localhost Unix socket ஆகும், 127.0.0.1 TCP ஆகும். பயன்பாட்டை host localhost-க்கு சுட்டவும், இதனால் அது socket-ஐப் பயன்படுத்தும் மற்றும் கணக்குடன் பொருந்தும், அல்லது framework ஆனது TCP-ஐ மட்டுமே பேசுமாயின் இரண்டாவது கணக்கு 'appuser'@'127.0.0.1'-ஐ உருவாக்கவும்.

உலாவி File not found.-ஐக் காட்டும் /var/log/apache2/testapp-error.log-ல் AH01071: Got error 'Primary script unknown'. Apache கோரிக்கையை PHP-FPM-க்கு கொடுத்தது, ஆனால் FPM Apache கொடுத்த பாதையில் script-ஐக் கண்டுபிடிக்க முடியவில்லை. இரண்டு வழக்கமான காரணங்கள்: உங்கள் config-ல் உள்ள FPM socket நிறுவப்படாத PHP பதிப்பை சுட்டுகிறது (upgrade-க்குப் பிறகு 8.3 மட்டுமே இயங்கும்போது ஒரு php8.4 socket), அல்லது DocumentRoot மற்றும் உண்மையான கோப்பகம் ஒன்றுக்கொன்று மாறுபடுவதால் கோப்பு உண்மையில் அங்கு இல்லை. socket இருப்பதை ls -l /run/php/-உடன் சரிபார்க்கவும், DocumentRoot கோப்பு இருக்கும் இடத்துடன் பொருந்துகிறது என்பதை உறுதிப்படுத்தவும், மேலும் php8.3-fpm மற்றும் apache2 இரண்டையும் restart செய்யவும்.

ஒவ்வொரு restart-லும் AH00558: apache2: Could not reliably determine the server's fully qualified domain name. இது பாதகமற்ற எச்சரிக்கை, பிழை அல்ல — Apache உங்களுக்கு எந்த global ServerName-உம் set செய்யப்படவில்லை என்று கூறுகிறது. 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. மற்றொரு web server ஏற்கனவே port 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 அதனை ஒரு socket வழியாக அணுகுகிறது. இது வேகமான threaded event MPM உடன் இணைந்து செயல்படுகிறது. பிறகு இது மாற்றமின்றி nginx க்கு மாறுகிறது. இதுவே நவீன இயல்புநிலை. mod_php செயல்முறைக்குள்ளான ஏதேனும் நடத்தையைச் சார்ந்திருக்கும் பழைய பயன்பாட்டிற்கு மட்டுமே பொருந்தும்.

என் உலாவி PHP கோப்பை இயக்குவதற்குப் பதிலாகப் பதிவிறக்குகிறது ஏன்?

எந்த PHP handler அதனுடன் இணைக்கப்படவில்லை என்பதால், 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 பயனருடன் இணைக்கிறது. வழக்கமான shell இலிருந்து mysql -u root என்பது வடிவமைப்பின்படி ERROR 1698 (28000): Access denied for user 'root'@'localhost' என்று முடிவளிக்கிறது. அதற்குப் பதிலாக sudo mysql உடன் இணைக்கவும். root ஐ மீண்டும் பயன்படுத்துவதற்குப் பதிலாக, எந்தப் பயன்பாட்டிற்கும் ஒரு தனிக் கடவுச்சொல்-அங்கீகரிக்கப்பட்ட பயனரை உருவாக்கவும்.

என் LAMP தளத்தில் HTTPS ஐ எப்படிச் சேர்ப்பது?

certbot மற்றும் python3-certbot-apache ஐ நிறுவவும். ஒரு களத்தின் A record ஐ சேவையகத்தை நோக்கி சுட்டவும். பிறகு sudo certbot --apache ஐ இயக்கவும். apache authenticator உங்கள் இயங்கும் Apache ஊடாக களத்தின் கட்டுப்பாட்டை நிரூபிக்கிறது. நிறுவி port 443 க்கான virtual host ஐ மறுபதிவு செய்கிறது. தானியங்கு புதுப்பித்தலை அமைக்கிறது. Certbot மற்றும் Apache க்கான முழு வழிகாட்டி challenge, புதுப்பித்தல் timer, மற்றும் பொதுவான தோல்வி நிலைகளை உள்ளடக்கியது.

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