SSD Nodes Learn
Mwongozo Matt ConnorNa Matt Connor · Imeboreshwa 2026-07-24

Kusakinisha LAMP stack kwenye Ubuntu 24.04

Jifunze kusakinisha Apache, MariaDB, PHP 8.3 na PHP-FPM kwenye Ubuntu 24.04. Pata mwongozo wa kurekebisha makosa ya ukurasa mweupe na usalama wa Certbot.

Unachojenga

LAMP stack ni sehemu nne zinazofanya kazi kwenye seva moja ya Ubuntu 24.04: Linux kama msingi, Apache inayojibu HTTP, MariaDB inayohifadhi data, na PHP 8.3 inayofanya kazi ya kodi. Kufikia mwisho, utakuwa na virtual host inayotumia jina inayohudumia directory ya programu, database yenye mtumiaji maalum mwenye mamlaka madogo, PHP iliyounganishwa kwenye Apache kupitia PHP-FPM, na cheti cha bure cha Let's Encrypt.

Usakinishaji wenyewe unahusisha amri apt nne. Karibu kila kitu katika mwongozo huu ni kuhusu uunganishaji wa sehemu hizo, na makosa madogo yanayosababisha stack mpya kuonyesha ukurasa mweupe, kutuma kodi yako kama faili la kupakua kwenye kivinjari, au kukataa kukuingiza kwenye database uliyosakinisha. Kila kosa lina dalili inayoweza kutambulika, na kila moja imeelezwa hapa chini kwa maandishi halisi utakayoyaona.

Mahitaji ya awali na changamoto za kweli

Chukulia kuwa unatumia Ubuntu 24.04 KVM VPS mpya yenye mtumiaji wa sudo au root, na anwani ya umma ya IPv4. Stack ya chini kabisa inaweza kufanya kazi kwenye RAM ya 1 GB; ipe 2 GB kabla ya kuweka programu inayotumia database, kwa sababu buffer za MariaDB na wafanyakazi wa PHP-FPM hula gigabyte ya kwanza haraka.

Mambo mawili lazima yatimizwe ili Certbot ifanye kazi mwishoni, hivyo yafanye kazi sasa. Unahitaji jina la domain lenye rekodi ya A inayoelekeza kwenye IP ya umma ya VPS — Let's Encrypt hutoa uthibitisho kupitia HTTP kwenye jina hilo, na anwani ya IP pekee haiwezi kupata cheti. Pia, bandari za 80 na 443 lazima zifikiwe kutoka kwenye mtandao, jambo ambalo kwa wasambazaji wengi linamaanisha kuzifungua kwenye firewall ya mtandao kwenye panel ya udhibiti pamoja na ufw kwenye mashine. Mabadiliko ya DNS yanaweza kuchukua hadi saa moja kuenea, hivyo weka rekodi ya A kwanza ili itakuwa tayari wakati utakapohitaji.

Hatua ya 1 - Sakinisha Apache na uthibitishie ukurasa wa asili

sudo apt update
sudo apt install -y apache2

apt huanzisha na kuwezesha huduma kwa ajili yako. Iangalie:

systemctl status apache2

Unahitaji mstari unaosoma active (running). Sasa fungua http://YOUR_SERVER_IP/ kwenye kivinjari. Ukurasa wa Apache2 Ubuntu Default Page wenye kichwa kikubwa cha "It works!" ndio matokeo sahihi — ni uthibitisho kwamba Apache inafanya kazi, si kosa. Ukurasa huo upo kwenye /var/www/html/index.html na unatolewa na virtual host ya asili 000-default.conf. Utaizima zote mbili baadaye; kwa sasa uwepo wake ndio unaohitaji kuuona.

Ikiwa ukurasa haufunguki kabisa lakini systemctl inasema mchakato unaendelea, kuta ya moto (firewall) imezuia. Hiyo ndiyo hatua inayofuata.

Hatua ya 2 - Fungua firewall kwa ajili ya HTTP na HTTPS

Paketi ya apache2 husajili profaili tatu za programu za ufw. Orodhesha hizi:

sudo ufw app list

Utaona Apache, Apache Full, na Apache Secure. Apache ni port 80 pekee, Apache Secure ni 443 pekee, na Apache Full ni zote mbili — hiyo ndiyo unayohitaji, kwa sababu unaongeza TLS mwishoni.

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

Ruhusu OpenSSH kabla ya kuendesha ufw enable. ufw kwa kawaida hukataa trafiki zote zinazoingia, na kuwasha bila sheria ya SSH kutakataa muunganisho wako mara tu inapoanza kufanya kazi — utabaki kwenye session ya sasa lakini hutaweza kuunganishwa tena. Thibitisha kwa sudo ufw status; unahitaji OpenSSH, Apache Full, na v6 equivalents zao zote ziwe ALLOW.

Hatua ya 3 - Sakinisha MariaDB na uifanye iwe salama

sudo apt install -y mariadb-server
systemctl status mariadb

Ubuntu 24.04 inakuja na MariaDB 10.11, ambayo ni toleo la long-term-support, hivyo huhitaji repository ya nje. Huduma ikiwa inafanya kazi, iimarische:

sudo mysql_secure_installation

Ni muhimu kusoma maelekezo badala ya kubofya Enter tu. Unapoulizwa current root password, bonyeza Enter — bado hakuna password. Unapoulizwa "Switch to unix_socket authentication?", jibu halibadilishi kitu kwa sababu tayari imewashwa kwenye package hii, hivyo bonyeza n. Jibu n kwa "Change the root password?" kwa sababu iliyotajwa aya inayofuata, kisha jibu Y kwa maswali mengine: ondoa watumiaji wasio na jina (anonymous users), zuia login ya root kutoka mbali, futa database ya majaribio, na pakia upya majedwali ya ruhusa.

Hapa ndipo sehemu inayowachanganya wengi. Kwenye MariaDB ya Ubuntu, akaunti ya database ya root hutumia authentication ya unix_socket, siyo password. Hii ina maana kwamba database inaamini mtumiaji wa operating-system ambaye tayari umethibitisha utambulisho wake. Kwa hivyo, hii hufanya kazi kutoka kwenye root shell:

sudo mysql

...na inakupeleka kwenye prompt ya MariaDB [(none)]> bila kuomba password. Amri hiyo hiyo ikitumika kama mtumiaji asiye na mamlaka itakataliwa, ambayo ndiyo lengo kuu: ufikiaji wa root wa database umeunganishwa na sudo kwenye mashine, na hakuna password ya kuiba, kuiba kwa njia ya uongo (phishing), au kufanya brute-force. Hii ni salama zaidi kuliko password, hivyo iache kama ilivyo. Kanuni inayofuata ni hii: usipange programu yoyote kwenye akaunti ya root. Tengeneza mtumiaji maalum kwa kila programu (Hatua ya 7), kwa sababu programu inayojiunga kupitia TCP kwa kutumia jina la mtumiaji na password haiwezi kutumia socket auth, na unataka kila programu iwe na ukomo kwenye database yake yenyewe.

Hatua ya 4 - Sakinisha PHP 8.3 pamoja na PHP-FPM

PHP ya asili ya Ubuntu 24.04 ni 8.3. Sakinisha msimamizi wa michakato (process manager) wa FPM na nyongeza (extensions) zinazohitajika na programu nyingi:

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

Zingatia kile ambacho hakipo kwenye orodha hiyo: libapache2-mod-php. Kifurushi hicho cha zamani huweka interpreter ya PHP ndani ya kila michakato ya Apache. Ni rahisi, lakini kila mfanyakazi (worker) hubeba nakala ya PHP iwe anashughulikia script au picha ya static; mambo haya mawili yanashiriki maisha ya mfumo mmoja, na hufanya kazi tu na Apache prefork MPM — ambayo ndiyo yenye ufanisi mdogo zaidi. Badala yake, PHP-FPM huendesha PHP kama kundi lake la michakato ambalo Apache huwasiliana nalo kupitia socket. Apache inaweza kutumia threaded event MPM kwa faili za static na kutuma maombi ya PHP pekee; kundi hilo hurekebishwa (tuned) kando na web server, na mpangilio ule ule wa FPM utafanya kazi hata ukitumia nginx mbele. Hii ndiyo chaguo la asili kwa sababu ya ufanisi wake.

Apache hufikia FPM kupitia module ya proxy_fcgi. Iwezeshe, iwashe konfigireni iliyowekwa na kifurushi cha FPM, kisha washa upya:

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

a2enconf php8.3-fpm huamsha /etc/apache2/conf-available/php8.3-fpm.conf, ambayo ina sheria inayoelekeza faili za PHP kwenye socket ya FPM. Kiini chake hutambua faili yoyote ya .php na kuituma kwenye socket ya /run/php/php8.3-fpm.sock:

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

Usibadilishe faili hiyo; imekuja ikiwa imerekebishwa. Lakini kujua njia ya socket (socket path) kutakusaidia kutatua hitilafu za "PHP inapakua badala ya kuendesha" na "Primary script unknown" baadaye — zote zinatokana na Apache na FPM kutokukubaliana kuhusu socket hii au faili iliyo nyuma yake.

Hatua ya 5 - Virtual host inayotumia jina kwa ajili ya app yako

Virtual hosting inayotumia jina inaruhusu IP moja kuhudumia tovuti nyingi; Apache huchagua tovuti kwa kutumia header ya Host: kwenye ombi. Tengeneza directory kwa ajili ya app, mbali na /var/www/html ya kawaida:

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

Umiliki wa faili ni muhimu. Apache na PHP-FPM zote zinafanya kazi kama mtumiaji www-data kwenye Ubuntu, hivyo faili ambazo web server lazima zisome — na directory ambazo app lazima ziweze kuandika, kama vile folder la uploads — zinapaswa kumilikiwa na www-data. Ikiwa utafanya marekebisho ya faili kama mtumiaji wako wa kuingia, njia ya kawaida ni kumiliki faili mwenyewe na kuongeza mtumiaji wako kwenye kikundi cha www-data; kwa usakinishaji wa kawaida, www-data:www-data ndiyo njia rahisi zaidi.

Tengeneza virtual host kwenye /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>

Weka ServerName iwe domain yako halisi. Options -Indexes inazuia Apache kuonyesha orodha ya directory ikiwa hakuna faili ya index — vinginevyo wageni wataweza kuona muundo wa vyanzo vya programu yako. AllowOverride All inaruhusu faili ya .htaccess kufanya kazi, ambayo programu nyingi za PHP zinategemea kwa ajili ya URLs nzuri; iondoe kwenye None ili kupata kasi zaidi ikiwa app yako haihitaji. Washa tovuti hii, zima ile ya kawaida, kagua usanidi, na ukaribishe mabadiliko:

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

apache2ctl configtest inapaswa kuchapa Syntax OK. Mstari wa a2dissite 000-default ndio ambao watu husahau, na ndiyo sababu ukurasa wa kawaida unaonekana kukwama baadaye — imeelezwa kwenye sehemu ya hitilafu.

Hatua ya 6 - Thibitisha kuwa PHP inafanya kazi, kisha futa ushahidi

Tengeneza faili moja ya PHP kwenye mzizi wa programu (app root):

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

Tembelea http://app.example.com/info.php. Matokeo sahihi ni jedwali refu la rangi ya zambarau na kijivu la PHP Version 8.3.x linaloorodhesha moduli zako zilizopakia, likiwa na mstari wa Server API unaosoma FPM/FastCGI. Mstari huo wa mwisho unathibitisha kuwa maombi yanapitia PHP-FPM, na si mod_php.

Sasa ifute mara moja:

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

phpinfo() inaonyesha toleo lako kamili la PHP, kila kiunganishi (extension) kilichopakia, njia za faili, na maelezo ya mazingira — hii ni hatari kwa mtu yeyote anayefuatilia seva kutafuta toleo lenye tundu la kiusalama (vulnerability). Hii ni kwa ajili ya majaribio tu, si kipengele cha kawaida. Ifute mara tu unapopata ukurasa huo. Ikiwa badala ya jedwali kivinjari chako kinatoa chaguo la kupakua (download) info.php, PHP haijaunganishwa na Apache; nenda kwenye sehemu ya hitilafu kabla ya kufanya jambo lingine lolote.

Hatua ya 7 - Unda database ya app na mtumiaji mwenye ruhusa ndogo

Fungua database kwa kutumia root iliyothibitishwa kwa socket:

sudo mysql

Kisha unda database moja na mtumiaji mmoja aliyeunganishwa na database hiyo pekee:

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;

Kuna maamuzi matatu ya makusudi hapa. utf8mb4 ni UTF-8 halisi ya byte nne — alias ya zamani ya utf8 hukata emoji na baadhi ya herufi za CJK kimya kimya, hivyo tumia kila wakati utf8mb4. Ruhusa (grant) ni kwenye appdb.*, sio *.*: mtumiaji huyu anaweza kugusa database yake mwenyewe na kitu kingine chochote. Hii inazuia tundu la SQL-injection kwenye app lisisome majedwali ya tovuti nyingine zote. Pia, 'appuser'@'localhost' huweka mipaka kwenye akaunti ili iweze kuunganishwa kutoka kwenye mashine hiyo tu.

Ijaribu kama mtumiaji huyo:

mysql -u appuser -p appdb

Itauliza nywila na kukupeleka kwenye prompt ya MariaDB [appdb]>. Zingatia kuwa hakuna flag ya -h — iache bila flag na client itaunganishwa kupitia Unix socket ya ndani, ambayo ndiyo MariaDB inachukulia kama localhost. Jambo moja la kuzingatia: kwa MySQL na MariaDB, localhost inamaanisha Unix socket na 127.0.0.1 inamaanisha muunganisho wa TCP. Kwenye MariaDB ya Ubuntu 24.04 ya kawaida, server bado inatambua muunganisho wa TCP kutoka 127.0.0.1 kurudi localhost, hivyo vyote vinaendana na akaunti — lakini kwenye server zenye skip-name-resolve ikiwa imewashwa (mbinu ya kawaida ya utendaji, na ni kawaida kwenye picha nyingi za container), vyote viwili vinatambulika kama host tofauti, na app inayotumia 127.0.0.1 itakataliwa na ERROR 1045 (28000): Access denied for user 'appuser'@'127.0.0.1' (using password: YES) hata kama nywila ni sahihi.

Hivyo, weka application yako kwenye host localhost, mtumiaji appuser, database appdb — usitumie kamwe root. PHP ya mysqli na PDO zote hubadilisha kwenda kwenye Unix socket wakati host ikiwa ni string ya localhost, inayolingana na akaunti uliyounda hivi karibuni. Ikiwa framework inasisitiza kutumia host ya TCP ya namba, unda mtumiaji ili aendane na jinsi inavyounganishwa — 'appuser'@'127.0.0.1', au @'%' (ikiambatana na sheria ya firewall) ikiwa tu inapaswa kufikia database kutoka mashine nyingine.

Hatua ya 8 - Ongeza HTTPS kwa kutumia Certbot

Kutoa fomu ya kuingia (login form) kupitia HTTP ya kawaida hutuma nywila katika maandishi wazi, na kila kivinjari cha kisasa huashiria ukurasa huo kama "Not secure". Certbot hurekebisha hilo kwa amri moja. Iweke kwa kutumia plugin ya Apache:

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

Certbot hutumia plugin mbili hapa. apache authenticator inathibitisha kuwa unamiliki domain kwa kutoa faili ya changamoto (challenge file) kwa muda mfupi kupitia Apache inayojiendesha, na apache installer kisha huandika upya virtual host yako ili kuongeza block ya 443, kuielekeza kwenye cheti kipya, na kuelekeza trafiki yote ya HTTP kwenda HTTPS kwa kima kawaida — tangu Certbot 2.0 hakuna swali la kuelekeza (redirect); tumia --no-redirect ikiwa unahitaji kuendelea kutoa HTTP ya kawaida. Kwa sababu uliteua ServerName halisi katika Hatua ya 5, Certbot hutambua domain kiotomatiki. Vyeti hudumu kwa siku 90 na kifurushi hupakua timer ya systemd inayovifanyia marekebisho (renew); thibitisha timer kwa kutumia sudo certbot renew --dry-run, ambayo inapaswa kuishia na Congratulations, all simulated renewals succeeded.

Kwa mwongozo kamili wa changamoto, timer ya marekebisho, na mahitaji ya DNS na firewall, tazama mwongozo wa kutoa cheti cha bure cha Let's Encrypt TLS kwa kutumia Certbot kwenye Apache.

Backups, upgrades, and hardening

Nakili vitu viwili vinavyohifadhi hali ya mfumo wako: kanzidata (databases) na web root. Njia rahisi na ya kuaminika ni kufanya logical dump kila usiku — sudo sh -c 'mysqldump --all-databases --single-transaction | gzip > /root/db-$(date +%F).sql.gz', kisha unanakili nje ya mfumo. Ni muhimu kuweka mchakato mzima ndani ya sudo sh -c: bila hiyo, shell itatumia > /root/... redirect kama mtumiaji wako na itafeli kwa Permission denied, kwa sababu ni mysqldump pekee iliyorithi sudo. --single-transaction hutoa picha thabiti ya InnoDB tables bila kuzifunga (locking). Iunganishe na tar ya /var/www na /etc/apache2/sites-available, na utaweza kujenga upya stack nzima kwenye VPS mpya kwa kutumia mafaili hayo.

Upgradations ni sudo apt update && sudo apt upgrade ya kawaida. Changamoto kubwa ni PHP version bump — wakati Ubuntu ya baadaye itapozidisha default kwenda PHP 8.4, apt inaweza kusakinisha php8.4-fpm pamoja na 8.3, socket itakuwa /run/php/php8.4-fpm.sock, na mpangilio wako wa Apache utaendelea kuashiria socket ya 8.3. Washa conf mpya (sudo a2enconf php8.4-fpm) na uzime ya zamani, yokani tovuti yako itaanza kurudisha Primary script unknown baada ya upgrade ambayo ilikuwa ya kawaida. Kwa sababu PHP inatoa matoleo haraka kuliko distro ya LTS, kagua maelezo ya PHP ya sasa badala ya kuweka patch version maalum.

Hatua mbili za kuimarisha mfumo (hardening) ni muhimu kufanya siku ya kwanza. Kwanza, weka Fail2Ban inayofuatilia SSH kwenye mfumo — VPS ya hadhara hupata majaribio ya kuingia (login attempts) yaliyofanyiwa na mashine ndani ya dakika chache, na jail ndogo inageuza maelfu ya majaribio kuwa machache kabla ya kufanya ban. Pili, ikiwa ungependa kusimamia Apache virtual hosts, MariaDB databases, na watumiaji kupitia kivinjari badala ya kuhariri mafaili kwa mkono, Webmin web-based control panel inafanya kazi juu ya stack hii hiyo na kuendesha mafaili ya mpangilio uliyoyaandika. Hakuna inayochukua nafasi ya kuelewa sehemu hizi, lakini zote mbili hupunguza usumbufu wa kila siku.

Njia za kushindwa, pamoja na maandishi utakayoyaona

Ukurasa wa asili hautatoweka. Ulibadilisha virtual host yako, ukireload, lakini kivinjari bado kinaonyesha "Apache2 Ubuntu Default Page" na bango lake la "It works!". Apache hutoa virtual host ya kwanza inayolingana, na hakuna ServerName inayolingana na ombi, basi config inayofuata alfabeti hushinda — 000-default.conf inapangwa kabla ya testapp.conf. Ama jina la host ya ombi halilingani na ServerName yako, au hukukimbiza sudo a2dissite 000-default. Zima default, sudo systemctl reload apache2, na uthibitishe kwa apache2ctl -S, ambayo huchapa ramani ya vhost na kuonyesha ni config gani inayomiliki default. Safisha pia cache ya kivinjari; cache ya 200 kutoka ukurasa wa zamani inaweza kubaki.

Faili ya .php inapakuliwa badala ya kutekelezwa. Unafungua info.php na kivinjari kinapakua faili yenye chanzo cha <?php mbichi, au inaonyesha kama maandishi ya kawaida, badala ya kuitekeleza. Apache inatoa faili hiyo kama static asset kwa sababu PHP handler haijaunganishwa — ulikosa sudo a2enmod proxy_fcgi, au sudo a2enconf php8.3-fpm, au hukurestart Apache baada ya hapo. Kimbiza zote tatu (Step 4) na ureload. Thibitisha kuwa module imewekwa kwa apache2ctl -M | grep fcgi, ambayo inapaswa kuorodhesha proxy_fcgi_module. Hii ni uvujaji wa source-code, siyo hitilafu ya urembo, hivyo itatengeneze kabla ya kuweka kitu chochote halisi kwenye server.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'. Ulikimbiza mysql -u root au mariadb -u root bila sudo. Akaunti ya root hutumia unix_socket auth, hivyo inakubali tu ikiwa mtumiaji wako wa OS ni root. Suluhisho ni sudo mysql — hakuna -u root, hakuna password. Ujumbe huu ni tabia inayotarajiwa ya socket auth inayofanya kazi vizuri, siyo installation iliyoharibika.

ERROR 1045 (28000): Access denied for user 'appuser'@'127.0.0.1' kutoka kwenye application, ukitumia password sahihi. Akaunti ipo kama 'appuser'@'localhost', lakini app yako inaunganisha kupitia TCP kwenye 127.0.0.1 kwenye server ambapo host-name resolution imezimwa (skip-name-resolve), hivyo MariaDB inafasiri hizo mbili kama host tofauti — localhost ni Unix socket, 127.0.0.1 ni TCP. Ielekeze app kwenye host localhost ili itumie socket na ilingane na akaunti, au tengeneza akaunti ya pili 'appuser'@'127.0.0.1' ikiwa framework itatumia TCP pekee.

AH01071: Got error 'Primary script unknown' katika /var/log/apache2/testapp-error.log, huku kivinjari kikionyesha File not found.. Apache ilituma ombi kwa PHP-FPM, lakini FPM ilishindwa kupata script kwenye njia (path) Apache iliyotoa. Sababu mbili za kawaida: socket ya FPM kwenye config yako inaashiria toleo la PHP ambalo halijawekwa (socket ya php8.4 baada ya upgrade wakati toleo 8.3 pekee ndilo linalofanya kazi), au faili haipo kwa sababu DocumentRoot na directory halisi hazilingani. Hakikisha socket ipo kwa ls -l /run/php/, thibitisha DocumentRoot inalingana na mahali faili ilipo, na uwashe tena php8.3-fpm na apache2.

AH00558: apache2: Could not reliably determine the server's fully qualified domain name kwenye kila restart. Hii ni onyo lisilo na madhara, siyo kosa — Apache inakuambia kuwa hakuna ServerName ya jumla iliyowekwa. Izuie kwa kuandika ServerName your.domain ndani ya /etc/apache2/conf-available/servername.conf na kukimbiza sudo a2enconf servername.

(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80 wakati Apache inaanza. Web server nyingine tayari imeshika port 80 — mara nyingi ni nginx iliyopotea kutoka kwenye majaribio ya awali. Itafute kwa sudo ss -ltnp | grep :80, kisha uzime huduma nyingine kabla ya kuanza Apache.

FAQ

mod_php au PHP-FPM - niipi nitumie?

Tumia PHP-FPM. mod_php huweka interpreter ndani ya kila Apache process na hulazimisha matumizi ya prefork MPM inayochelewa. Hii inafanya Apache kubeba mzigo wa PHP hata anapotoa picha ya static. PHP-FPM huendesha PHP kama pool tofauti inayoweza kurekebishwa pekee, ambapo Apache huifikia kupitia socket. Hii inaruhusu matumizi ya event MPM ya haraka zaidi, na inaweza kutumika kwenye nginx baadaye bila mabadiliko. Hii ndiyo chaguo la kisasa; mod_php inafaa tu kwa programu za zamani zinazohitaji tabia fulani ya in-process.

Kwa nini kivinjari changu kinapakua faili ya PHP badala ya kuiendesha?

Apache inachukulia faili ya .php kama faili ya static kwa sababu hakuna PHP handler iliyounganishwa nayo. Kwenye Ubuntu 24.04 ukitumia FPM, hii inamaanisha umekosa moja kati ya sudo a2enmod proxy_fcgi, sudo a2enconf php8.3-fpm, au kuanzisha upya Apache. Tekeleza hatua zote tatu na uwashe upya, kisha hakiki kwa apache2ctl -M | grep fcgi ikiwa proxy_fcgi_module imeorodheshwa. Mpaka utakapofanya marekebisho, seva inavuja msimbo wa chanzo (source code), hivyo fanya marekebisho haya haraka.

Kwa nini ufikiaji wa root unakataliwa kwenye MariaDB hata nikitumia nywila sahihi?

Hii inatokea kwa sababu hakuna nywila — MariaDB ya Ubuntu huthibitisha akaunti ya root kwa kutumia unix_socket, ikiiunganisha na mtumiaji wa root wa mfumo wa uendeshaji. mysql -u root kutoka kwenye shell ya kawaida itatoa ERROR 1698 (28000): Access denied for user 'root'@'localhost' kwa usanifu wake. Badala yake, ingia kwa kutumia sudo mysql, na utengeneze mtumiaji mwingine mwenye nywila kwa ajili ya programu yoyote badala ya kutumia root.

Ninawezaje kuongeza HTTPS kwenye tovuti yangu ya LAMP?

Install certbot na python3-certbot-apache, elekeza A record ya domain kwenye seva, kisha run sudo certbot --apache. Apache authenticator inathibitisha udhibiti wa domain kupitia Apache inayojiendesha, na mweka-miliki (installer) utarekebisha virtual host kwa ajili ya port 443 na kusanidi ajili ya kujiidhinisha otomatiki (automatic renewal). Mwongozo kamili wa Certbot na Apache unajadili changamoto hiyo, muda wa ajili ya kujiidhinisha, na sababu za kawaida za kushindwa.

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