Installera WordPress med Ubuntu 22.04, NGINX, MariaDB och PHP 8.2

Steg-för-steg-guide med enkla ord för absoluta nybörjare

I den här artikeln får du lära dig hur du installerar WordPress manuellt på en Ubuntu 22.04-server med hjälp av NGINX, MariaDB och PHP 8.2. Denna stack kommer att ge en kraftfull och effektiv plattform för att köra din WordPress-webbplats med en fantastisk hastighet.

Följ de här tre stegen och titta på videon. Behöver du hjälp? kontakta mig. 😊

  1. Konfigurera Cloudflare DNS
  2. Skaffa Ubuntu Server
  3. Distribuera LEMP-stacken

Innan du börjar är det här ett snabbt tips. Använd tillägget Sök och ersätt för att ändra example.com till din egen domän på den här webbsidan.

Ett tidsbesparande tips för Google Chrome-användare.
search replace

Del A: Håll Cloudflare Nameservers aktiva

Vi kommer att använda Cloudflare DNS för att få Let’s Encrypt Wildcard SSL-certifikat. Slutför det här steget först för att njuta av migreringen utan nedtid.

Kontrollera aktuella namnservrar

Del B: Gör en Ubuntu Server 22.04 LTS Server redo

Ubuntu
Ubuntu-logotyp

1. Registrera dig på Vultr för att få $100 gratis krediter (giltigt i 30 dagar)

Jag har provat många molnserverföretag, men min erfarenhet säger att du inte kan göra fel med Vultr. Dessa killar är genuina och omtänksamma när det gäller support och tjänster.

vultr

⚡ Prestanda

  • NVME / SSD
  • 3.7 GHz CPU
  • Upp till 5 Gbps nätverkshastighet
  • Datacenter i America, Europe, Asia, Austraillia
  • IPV6 redo

💡 Funktioner

  • Nybörjarvänlig instrumentpanel
  • Snapshot med ett klick
  • Automtatic Backup (betald)
  • Gratis molnbrandvägg
  • DDoS skydd (betald)
  • 100% KVM Virtualisering

⚙ Stöd

  • PayPal/Card
  • 24/7 Biljettstöd
  • Dokumentation

2. Skapa en ny VPS-server

Klicka bara på plusknappen för att komma igång

Deploy New Server

3. Välj Servertyp

Välj Cloud Compute för delad CPU till överkomliga priser.

Choose Server

Därefter kan du välja AMD High Performance eller Intel High Frequency i CPU & Storage Technology. Den har den snabbaste CPU:n och NVMe-disken någonsin. Om budgeten är mindre kan du välja Regular plan med Intel CPU där du får SSD-disk.

CPU Technology

4. Välj en serverplats

Välj en serverplats som ligger nära din målgrupp.

vultr server region 1

5. Välj Ubuntu 22.04 x64 OS

För närvarande är Ubuntu 20.04×64 och 22.04×64 båda LTS-versioner (Long Term Supported) kompatibla med de flesta paket som vi ska installera.

Cloud Operating System

6. Välj en serverstorlek

server size

En $6/mo-plan skulle vara en bra utgångspunkt för en ny blogg. Du kan uppgradera när som helst enligt dina behov.

Tips: Om du migrerar kontrollerar du Total installationsstorlek i Information om webbplatsens hälsa.

Site health info

7. Aktivera IPV6, säkerhetskopiering

vultr enable backup ipv6

8. Lägg till en SSH-nyckel

Detta är ett rekommenderat, valfritt steg för ökad säkerhet.

Add SSH key
  • Klicka på knappen Lägg till ny för att lägga till en ny SSH-nyckel för att skicka in din 🔒offentliga nyckel.
  • Generera nycklar med nedanstående metod enligt ditt operativsystem.
win os
  • Ladda ner programmet PuTTy.
  • Sök efter PuTTygen i Start-menyn
  • Klicka på Generera-knappen och håll muspekaren över den.
  • Kopiera den offentliga nyckeln och ge den till Vultr
  • Ange nyckel lösenfras
  • Spara 🔑Private Key på den säkraste platsen
  • Detta kan användas för inloggning till SSH eller SFT.
linux 2
  • Kör: ssh-keygen -t rsa. För en säkrare 4096-bitars nyckel kör du: ssh-keygen -t rsa -b 4096
  • Tryck på enter när du blir tillfrågad om var du vill spara nyckeln (standardplatsen används).
  • Ange en lösenfras för nyckeln.
  • Kör cat ~/.ssh/id_rsa.pub – detta ger dig nyckeln i rätt format som du kan klistra in i kontrollpanelen.
  • Se till att du säkerhetskopierar filen ~/.ssh/id_rsa. Den kan inte återställas om den försvinner.

Välj din SSH-nyckel

Genom att följa dessa steg kopplas din offentliga nyckel till din nya instans. Därefter kan du logga in på SSH med både lösenord i vanlig text och SSH-nyckel.

select SSH public key

9. Länka en webbbrandväggsregel till en serverinstans

Firewall
  1. Klicka på Hantera och skapa en ny brandväggsgrupp.
  2. Tillåt TCP-port 22 för SSH. 80 för HTTP och 443 HTTPS för både IPV4- och IPV6-regler.
  3. När du är klar kopplar du brandväggsgruppen till din instans.
firewall status
Accepterar endast TCP-anslutningar från 22, 80, 443
Link Firewall Group
Länka brandväggsregeln till den nya instansen

10. Ange värdnamn och etikett klicka på Distribuera nu

Now, you will see installing in the progress

server hostname label
Instance Installing

11. Gå till sidan Ny instans

Kopiera IP-adress, användarnamn och lösenord. Din standardport är 22.

new instance info page

12. Inaktivera lösenordsinloggning

Av säkerhetsskäl rekommenderas det att inaktivera lösenordsautentisering och endast tillåta nyckelbaserad autentisering.

  1. Redigera konfigurationsfilen nano /etc/ssh/sshd_config
  2. Hitta (CTRL + W) och sök PasswordAuthentication
  3. Ändra värdet från ja till nej
  4. För att spara skriver du, CTRL + O
  5. Starta om SSH-tjänsten med kommandot sudo service ssh restart
disable password auth
Inaktivera autentisering av lösenord

Från och med nästa gång kan du bara använda SSH via nyckel som visas i videon.

För Linux eller Mac, använd Terminal med följande kommando

ssh [email protected] -p 22 -i id_rsa

Steg 13. Inaktivera UFW

När du distribuerar en ny instans på VULTR är UFW (Uncomplicated Firewall) aktiverad, vilket innebär att alla portar är blockerade utom SSH-port 22. Detta kan ge ERR_CONNECTION_REFUSED-fel i webbläsaren. För att åtgärda detta föreslår jag att du låter UFW vara inaktiverad.

ufw disable

Tillräckliga förklaringar för grundläggande saker. Nu ska jag påskynda den ursprungliga processen för att distribuera WordPress på LEMP-stacken.

Del C. Distribuera WordPress på LEMP Stack

1. Uppdatera förvaringsutrymmen

Skriv nedanstående kommando och tryck på enter

sudo -s
apt update && apt upgrade -y && apt dist-upgrade && apt autoclean && apt autoremove -y && reboot

eller

wget -qO update https://dl.gulshankumar.net/update && chmod +x update

Nästa gång ska du alltid använda nedanstående snabbkommando för att uppdatera.

./update

2. Installera MariaDB med säkerhet

Logga in igen och ange följande kommando

sudo apt install mariadb-server -y && sudo mysql_secure_installation

Svara på nedanstående frågor

  • Enter current password for root (enter for none): Tryck på Enter-tangenten
  • Switch to unix_socket authentication [Y/n]: Skriv n och tryck på Enter.
  • Set root password? [Y/n]: Tryck på Enter-tangenten.
  • New password: Kopiera ett starkt lösenord från Dashlane Password Generator. Om du vill klistra in ett lösenord i SSH-konsolen högerklickar du och trycker på Enter. Lösenordet kommer inte att vara synligt på skärmen.
  • Re-enter new password: Högerklicka och tryck på Enter igen.

När du har lyckats ange ett lösenord kommer du att se följande

Password updated successfully!
Reloading privilege tables..
... Success!

Du måste också besvara följande frågor.

  • Remove anonymous users? [Y/n]: Tryck på Enter-tangenten
  • Disallow root login remotely? [Y/n]: Tryck på Enter-tangenten
  • Remove test database and access to it? [Y/n]: Tryck på Enter-tangenten
  • Reload privilege tables now? [Y/n]: Tryck på Enter-tangenten

3. Skapa en ny databas för WordPress

Logga in på MySQL, tryck på enter när den frågar efter lösenordet.

mysql -u root -p

Skapa en ny databas och ge behörighet till dess användare med lösenord. Det är här WordPress lagrar all information om inlägg, sidor, teman, insticksprogram etc.

create database wordpress;
grant all on wordpress.* to [email protected] identified by '5pY8CKJxDRJEGQNkX7';
flush privileges;
exit;

Var din …
databasen är wordpress
användarnamn är gulshan
lösenordet är 5pY8CKJxDRJEGQNkX7

Tips: Överväg att använda unika inloggningsuppgifter

4. Installera PHP 8.2, NGINX och ange behörighet

sudo add-apt-repository ppa:ondrej/php -y && apt update && apt install php8.2-fpm php8.2-common php8.2-mysql php8.2-xml php8.2-xmlrpc php8.2-curl php8.2-gd php8.2-imagick php8.2-cli php8.2-dev php8.2-imap php8.2-mbstring php8.2-soap php8.2-zip php8.2-bcmath -y && sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php/8.2/fpm/php.ini && service php8.2-fpm restart && apt install nginx -y && chown -R www-data:www-data /var/www/ && chmod -R 755 /var/www

Justera PHP-konfigurationen

De flesta fantasifulla teman och insticksprogram kräver en avancerad PHP-konfiguration för att kunna köras. Därför bör vi göra dessa ändringar.

sed -i 's/memory_limit = 128M/memory_limit = 512M/g' /etc/php/8.2/fpm/php.ini
sed -i 's/post_max_size = 8M/post_max_size = 128M/g' /etc/php/8.2/fpm/php.ini
sed -i 's/max_file_uploads = 20/max_file_uploads = 30/g' /etc/php/8.2/fpm/php.ini
sed -i 's/max_execution_time = 30/max_execution_time = 900/g' /etc/php/8.2/fpm/php.ini
sed -i 's/max_input_time = 60/max_input_time = 3000/g' /etc/php/8.2/fpm/php.ini
sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 128M/g' /etc/php/8.2/fpm/php.ini
service php8.2-fpm restart

5. Installera Wildcard Let’s Encrypt SSL-certifikat

Skapa en fil cloudflare.ini i katalogen /root/.secrets/.

mkdir -p /root/.secrets/ && cd /root/.secrets/ && nano cloudflare.ini

Lägg till nedanstående kod och spara med CTRL+O och avsluta med CTRL+X

dns_cloudflare_email = "[email protected]"
dns_cloudflare_api_key = "XXXXXXXXXXXXXXXXX"

Hitta din Cloudflare e-postadress och globala API-nyckel på ”Min profil” > API-token > Global API-nyckel

chmod 0400 /root/.secrets/cloudflare.ini

Installera Certbot och DNS Authenticator i enlighet med operativsystemet och HTTP-webbservern.

snap install --beta --classic certbot
snap set certbot trust-plugin-with-root=ok
snap install --beta certbot-dns-cloudflare
snap connect certbot:plugin certbot-dns-cloudflare

Skaffa Wildcard SSL-certifikat

certbot certonly --dns-cloudflare --dns-cloudflare-credentials /root/.secrets/cloudflare.ini -d example.com,*.example.com --preferred-challenges dns-01

Ställ in automatisk förnyelse med Cron Job

  • Typ crontab -e
  • Typ 1 för nano editor
  • Ange nedanstående kommando och spara
0 0 * * *  /etc/init.d/nginx reload >/dev/null 2>&1

Förnyelse av provningen

certbot renew --dry-run

6. Konfigurera Nginx serverblock

Detta är viktigt när du måste konfigurera din domän och hur NGINX ska hantera dina HTTP-begäranden.

Ta bort standardserverblock.

rm /etc/nginx/sites-available/default && rm /etc/nginx/sites-enabled/default

Skapa ett nytt serverblock

cd /etc/nginx/sites-available/
nano example.com
  1. Ersätt example.com med din egen domän
  2. Ange koden nedan och tryck på ctrl+o för att spara och ctrl+x för att avsluta.

Allmänt

server {
    listen         80;
    return 301 https://$host$request_uri;
}
server {
# Document Root
root /var/www/html;
index index.php index.html index.htm;
server_name .example.com;
client_max_body_size 0;

    listen [::]:443 ssl http2 ipv6only=on;
    listen 443 ssl http2;
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        ssl_prefer_server_ciphers on;
        ssl_session_cache   shared:SSL:20m;
        ssl_session_timeout 20m;
        ssl_ciphers 'TLS13+AESGCM+AES128:EECDH+AES128';


error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;

# Block XMLRPC
location = /xmlrpc.php {
    deny all;
}

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

location ~* \.php$ {
if ($uri !~ "^/uploads/") {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}

location = /robots.txt {
log_not_found off;
access_log off;
allow all;
}

location ~* .(css|gif|svg|ico|woff2|eot|jpeg|webp|jpg|js|png)$ {
expires 1y;
log_not_found off;
}

# Enable Gzip compression.
gzip on;

# Disable Gzip on IE6.
gzip_disable "msie6";

# Allow proxies to cache both compressed and regular version of file.
# Avoids clients that don't support Gzip outputting gibberish.
gzip_vary on;

# Compress data, even when the client connects through a proxy.
gzip_proxied any;

# The level of compression to apply to files. A higher compression level increases
# CPU usage. Level 5 is a happy medium resulting in roughly 75% compression.
gzip_comp_level 5;

# Compress the following MIME types.
gzip_types
 application/atom+xml
 application/javascript
 application/json
 application/ld+json
 application/manifest+json
 application/rss+xml
 application/vnd.geo+json
 application/vnd.ms-fontobject
 application/x-font-ttf
 application/x-web-app-manifest+json
 application/xhtml+xml
 application/xml
 font/opentype
 image/bmp
 image/svg+xml
 image/x-icon
 text/cache-manifest
 text/css
 text/plain
 text/vcard
 text/vnd.rim.location.xloc
 text/vtt
 text/x-component
 text/x-cross-domain-policy;
}

För cache Enabler

server {
    listen         80;
    return 301 https://$host$request_uri;
}
server {
# Document Root
root /var/www/html;
index index.php index.html index.htm;
server_name .example.com;
client_max_body_size 0;

    listen [::]:443 ssl http2 ipv6only=on;
    listen 443 ssl http2;
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        ssl_prefer_server_ciphers on;
        ssl_session_cache   shared:SSL:20m;
        ssl_session_timeout 20m;
        ssl_ciphers 'TLS13+AESGCM+AES128:EECDH+AES128';


error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;


# Block XMLRPC
location = /xmlrpc.php {
    deny all;
}


# Rules for Cache Enabler Plugin - Static File Serving

    set $cache_uri $request_uri;

    # bypass cache if POST requests or URLs with a query string
    if ($request_method = POST) {
    set $cache_uri 'nullcache';
    }

    if ($query_string != '') {
    set $cache_uri 'nullcache';
    }

    # bypass cache if URLs containing the following strings
    if ($request_uri ~* '(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(index)?.xml|[a-z0-9-]+-sitemap([0-9]+)?.xml)') {
    set $cache_uri 'nullcache';
    }

    # bypass cache if cookies contain the following strings
    if ($http_cookie ~* '(wp-postpass|wordpress_logged_in|comment_author)_') {
    set $cache_uri 'nullcache';
    }

    # custom installation subdirectory
    set $custom_subdir '';

    # default HTML file
    set $cache_enabler_uri '${custom_subdir}/wp-content/cache/cache-enabler/${http_host}${cache_uri}${scheme}-index.html';

    # WebP HTML file
    if ($http_accept ~* 'image/webp') {
    set $cache_enabler_uri '${custom_subdir}/wp-content/cache/cache-enabler/${http_host}${cache_uri}${scheme}-index-webp.html';
    }

    location / {
    gzip_static on; # this directive is not required but recommended
    try_files $cache_enabler_uri $uri $uri/ $custom_subdir/index.php?$args;
    }

location ~* \.php$ {
if ($uri !~ "^/uploads/") {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}

location = /robots.txt {
log_not_found off;
access_log off;
allow all;
}

location ~* .(css|gif|svg|ico|jpeg|webp|woff2|eot|jpg|js|png)$ {
expires 1y;
log_not_found off;
}

# Enable Gzip compression.
gzip on;

# Disable Gzip on IE6.
gzip_disable "msie6";

# Allow proxies to cache both compressed and regular version of file.
# Avoids clients that don't support Gzip outputting gibberish.
gzip_vary on;

# Compress data, even when the client connects through a proxy.
gzip_proxied any;

# The level of compression to apply to files. A higher compression level increases
# CPU usage. Level 5 is a happy medium resulting in roughly 75% compression.
gzip_comp_level 5;

# Compress the following MIME types.
gzip_types
 application/atom+xml
 application/javascript
 application/json
 application/ld+json
 application/manifest+json
 application/rss+xml
 application/vnd.geo+json
 application/vnd.ms-fontobject
 application/x-font-ttf
 application/x-web-app-manifest+json
 application/xhtml+xml
 application/xml
 font/opentype
 image/bmp
 image/svg+xml
 image/x-icon
 text/cache-manifest
 text/css
 text/plain
 text/vcard
 text/vnd.rim.location.xloc
 text/vtt
 text/x-component
 text/x-cross-domain-policy;
}
  • Du måste installera insticksprogrammet Cache Enabler för att kunna dra nytta av cacheminnet.

FastCGI

Om du vill använda FastCGI Cache ska du istället implementera nedanstående serverblock.

# NGINX Cache path
fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=6h;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

server {
    listen         80;
    return 301 https://$host$request_uri;
}
server {
root /var/www/html;
index index.php index.html index.htm;
server_name .example.com;
client_max_body_size 0;

    listen [::]:443 ssl http2 ipv6only=on;
    listen 443 ssl http2;
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        ssl_prefer_server_ciphers on;
        ssl_session_cache   shared:SSL:20m;
        ssl_session_timeout 20m;
        ssl_ciphers 'TLS13+AESGCM+AES128:EECDH+AES128';

error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;


set $skip_cache 0;
    if ($request_method = POST) {set $skip_cache 1;}
    if ($request_uri ~* "/wp-admin/|/xmlrpc.php|/wp-.*.php|index.php|sitemap(_index)?.xml") {set $skip_cache 1;}
    if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {set $skip_cache 1;}
    if ($query_string = "unapproved*") {set $skip_cache 1;}
    if ($cookie_woocommerce_items_in_cart = "1" ){ set $skip_cache 1;}
    if ($request_uri ~* "/(cart|checkout|my-account)/*$") {set $skip_cache 1;}

# Block XMLRPC
location = /xmlrpc.php {
    deny all;
}

location / {
try_files $uri $uri/ /index.php$is_args$args;
}

location ~* \.php$ {

 if ($uri !~ "^/uploads/") {
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        }

        try_files                       $uri =404;
        include                         /etc/nginx/fastcgi_params;
        fastcgi_param                   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass                    unix:/run/php/php8.2-fpm.sock;
        fastcgi_index                   index.php;
                fastcgi_cache_bypass $skip_cache;
                fastcgi_no_cache $skip_cache;
                fastcgi_cache WORDPRESS;
                fastcgi_cache_valid 200 30d;
                fastcgi_cache_valid 301 302 303 307 308 404 410 451 1m;
                add_header X-Cache $upstream_cache_status;

}

location = /favicon.ico {
log_not_found off;
access_log off;
}

location = /robots.txt {
log_not_found off;
access_log off;
allow all;
}

location ~* .(css|gif|ico|svg|webp|woff2|eot|jpeg|jpg|js|png)$ {
expires 1y;
log_not_found off;
}

# Enable Gzip compression.
gzip on;

# Disable Gzip on IE6.
gzip_disable "msie6";

# Allow proxies to cache both compressed and regular version of file.
# Avoids clients that don't support Gzip outputting gibberish.
gzip_vary on;

# Compress data, even when the client connects through a proxy.
gzip_proxied any;

# The level of compression to apply to files. A higher compression level increases
# CPU usage. Level 5 is a happy medium resulting in roughly 75% compression.
gzip_comp_level 5;

# Compress the following MIME types.
gzip_types
 application/atom+xml
 application/javascript
 application/json
 application/ld+json
 application/manifest+json
 application/rss+xml
 application/vnd.geo+json
 application/vnd.ms-fontobject
 application/x-font-ttf
 application/x-web-app-manifest+json
 application/xhtml+xml
 application/xml
 font/opentype
 image/bmp
 image/svg+xml
 image/x-icon
 text/cache-manifest
 text/css
 text/plain
 text/vcard
 text/vnd.rim.location.xloc
 text/vtt
 text/x-component
 text/x-cross-domain-policy;
}

För att spara trycker du på CTRL+O och Enter nyckel. Sedan avslutar du nano-redigeraren med kommandot CTRL+X.

Om du använder FastCGI måste du använda NGINX Helper-plugin. Det fungerar även med Hindi-kodade URL:er. Tänk på att det inte stöder AMP. Personligen använder jag inte AMP. (Rekommenderad)

Alternativt fungerar NGINX cache för att rensa AMP-URL:er, men den stöder inte Hindi-kodade URL:er. I inställningarna bör du behålla cachesökvägen /var/run/nginx-cache/

Varning!

  • Om du t.ex. använder ett tidningstema och ett separat mobilt tema, kan du hålla dig borta från FastCGI-metoden och använda en plugin WP Rocket eftersom den kan servera separat mobilcache direkt från lådan.

7. Skapa symboliska länkar mellan två kataloger

Om du missar detta steg kan du få ERR_CONNECTION_REFUSED

För att aktivera serverblocket skapar du en symbolisk länk till din NGINX Server Block-fil från katalogen /etc/nginx/sites-available/ till /etc/nginx/sites-enabled.

Innan du kör kommandot nedan, ersätt example.com med din egen domän.

ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Testkonfiguration

nginx -t

Starta om och uppdatera

service nginx restart && service php8.2-fpm restart && service mysql restart && apt-get update && apt upgrade -y

8. Installera WordPress

Ladda ner WordPress-filer i katalogen /var/www/html och ange behörighet.

cd /var/www/html && wget https://sv.wordpress.org/latest-sv_SE.tar.gz && tar -xvzf latest-sv_SE.tar.gz && mv -v wordpress/* /var/www/html && rm -rf latest-sv_SE.tar.gz wordpress && chown -R www-data:www-data /var/www/html && sudo chmod -R 755 /var/www/html

För att uppdatera behörigheten i framtiden använder du kommandot nedan

chown -R www-data:www-data /var/www/ && sudo chmod -R 755 /var/www

9. Uppdatering av DNS

Det här steget är användbart om du är värd för WordPress lokalt, om du vill kringgå proxy eller om du vill utföra en migrering utan driftstopp. Jag föredrar i allmänhet när det gäller statiska WordPress Dev-området. 😉

  • Det finns två sätt att peka på DNS. Om du flyttar webbplatsen till Vultr och vill testa först lokalt kan du redigera din hosts-fil och peka dit.

För Windows

  • Gå till egenskaper för ‪C:\Windows\System32\drivers\etc\hosts
  • Ändra behörigheten ”Säkerhet” till full kontroll för ditt nuvarande användarnamn.
  • Nu kan du fritt redigera hosts-filen under din systemanvändare och spara den.
# For same machine you can have localhost address else public IP
127.0.0.1 example.com
127.0.0.1 www.example.com

Så här ska det se ut.

För Mac eller Linux

Du kan redigera hosts-filen med följande kommando

sudo nano /etc/hosts

Uppdatera DNS med Cloudflare

  • Om allt är perfekt och du vill göra din webbplats live, logga in på Cloudflare DNS och uppdatera den nya IP-adressen.
A@IPV4 address
AAAA@IPV6 address
CNAMEwwwexample.com

där @ betecknar den nakna domänen example.com

9. Besök ditt domännamn för att konfigurera WordPress

Om du vill behålla en domän med en icke-www-version för din WordPress, besök då den icke-www-versionen annars www.

https://example.com
  • Ange inloggningsuppgifter till databasen för att påbörja installationen av WordPress
  • Kör installation
  • Fyll i grundläggande uppgifter om din nya webbplats och installera WordPress.
  • Logga in på WordPress
  • Om du använde FastCGI-serverblocket är det första du bör göra att installera NGINX Cache-plugin och konfigurera /var/www/cache som cachesökväg.

Andra nödvändiga saker

Använd SMTP-plugin-tjänster för att skicka utgående e-post från WordPress, annars kan du inte ta emot meddelanden från länken för återställning av lösenord och kontaktformulär 7.

Slutligen har WordPress-installationen slutförts. Behåll alltid en säkerhetskopia.

Jag uppskattar verkligen din värdefulla tid för att läsa den här artikeln. Vi ses i nästa handledning!

WordPress List - Subscription Form
Vill du ha mer?
Föreställ dig att du får handledningar varje dag! Det är helt otroligt häftigt. Prenumerera nu.

Lämna en kommentar

68 svar på ”Installera WordPress med Ubuntu 22.04, NGINX, MariaDB och PHP 8.2”

  1. Thanks a lot Gulshan. You save my breath

    I search everywhere but not find any good article

    You explained very well along with security concern

    well done

    Svara
  2. Thank you for your tutorial, its the first one that actually showed me the wordpress setup page.

    When I went to upload a plugin I received this message. ”The uploaded file exceeds the upload_max_filesize directive in php.ini”

    How do I increase the max filesize?

    Svara
    • Add below cron job

      crontab -e

      Add below command and save.

      15 3 * * 7 certbot renew --post-hook "service nginx restart"

      Svara
  3. Hello Gulshan Bro, First i want to say you that this is very beautiful and required post. I am really appreciating your work. but i have a problem can you please tell me
    i have a droplet with digitalocean ($5/month plan) and i want to host multiple wordpress sites only with nginx(lemp ubuntu 18.04).
    In simple i mean that this tutorial is complete to install a single wordpress and i did it but tell host it in some other sites

    Svara
    • Hey Rohit,

      Assuming, second site is example2.org

      You need to follow steps this way.

      1. create a new directory and add WordPress (Ref: steps 31)

      cd /var/www/
      mkdir example2
      wget https://wordpress.org/latest.tar.gz
      tar -xvzf latest.tar.gz
      mv -v wordpress/* /var/www/example2
      rm -rf index.nginx-debian.html latest.tar.gz wordpress
      chown -R www-data:www-data /var/www/
      sudo chmod -R 755 /var/www

      2. Create a new Server block with root path located to new directory as created in step 1.


      cd /etc/nginx/sites-available/
      nano gulshankumar-org

      server {
      listen 80;
      root /var/www/example2;
      index index.php index.html index.htm;
      server_name example2.org www.example2.org;
      ...

      3. Point your example2.org domain to DNS, then install SSL

      certbot --nginx -d example2.org -d www.example2.org

      4. Create new MySQL database
      sudo mysql -u root -p
      create database example2;
      grant all on example2.* to [email protected] identified by 'TYPE HERE PASSWORD';
      flush privileges;
      exit;

      5. Proceed to Installation by visiting your site https://example2.org

      Let me know if you have any additional question. You can always visit our forum for quick assistance.

      Thanks & Regards,
      Gulshan

      Svara
      • Hello Gulshan you written a comprehensive guide i highly appreciate your work. Can you help me with an error? Actually i have two websites the first website i have already hosted on Vultr following the above guide.

        But when try to host a another WordPress website iam getting error. I followed the above steps you mentioned in comments. But still not able to fix it. The error is my website not working after hosting another WordPress website.

        If possible please guide me step by step instructions. It will help me alot. Thanks in advance.

        Svara
    • If your WordPress General Settings has www version, server will do automatically. No additional action is required. In case you started WordPress installation at non-www version, then you need to migrate by changing at Database level.

      Svara
  4. Hey Gulshan,
    In the 7th step while texting ngnix I got
    nginx: [emerg] open() ”/etc/nginx/sites-enabled/example.com” failed (2: No such file or directory) in /etc/nginx/nginx.conf:62
    nginx: configuration file /etc/nginx/nginx.conf test failed

    This error. How I can solve it? also what the error.

    Svara
    • Please delete your existing server block and create again at sites-available and symlink at sites-enabled directory. The step 6 and 7 cover that clearly. Consider following patiently without any error. If you still face any problem, do let me know. Thanks for taking to leave your valuable comment.

      Svara
  5. How to check if fastcgi cache is working or not? while running sudo curl -I https://example.com it is not showing x-cache parameter

    Svara
  6. Hi Gulshan, I am also receiving the test failed error on step 7. I have tried several times now on different setup and still stuck here. Please could you help?

    Svara
    • Please carefully read the post and then copy-paste code in Terminal. Sometime you need to replace with your own domain. Doing mistake can return error. Else, no wise. I use this guide everyday for myself. I am not aware about any problem.

      In case of trouble
      1. Run test using nginx -t
      2. Check logs to get proper hint tail -f /var/log/nginx/error.log

      3. Delete existing or earlier created virtualhost
      rm /etc/nginx/sites-available/default && rm /etc/nginx/sites-enabled/default
      4. Make sure to replace example.com at all places, a) when you create conf file, its naming. b) when you add conf file and c) when you create symlink, check your command its conf file name must match with first process.

      I feel in most cases, chances are you did not replaced server_name .example.com; to own domain, or you did not obtained SSL. All steps are written in serial order as it should be.

      Svara
  7. This article is like Life-Saver for one of my website. I was about to move from Google Cloud to Digital Ocean because the trial was expired and I also wanted to use DigitaOcean because it is in-expensive yet powerful and gives great experience.

    Previously, I used webinoly stack which was straightforward for installing WordPress but later on I got to know from Gulshan that there are so many issues with that stack so, this time I was going to do it manually. I checked the official guide by Digital ocean but end up with many confusion and issues. Then, I fortunately asked Gulshan for help and he recommended this article for me.

    I installed WordPress easily and very fast even fast that Webinoly stack. Thanks a lot Gulshan for writing this amazing article. Hats off to you bro!!🎩

    Svara
  8. The FastCGI server block config throws 404 Errors.

    fastcgi_pass unix:/run/php/php7.4-fpm-example.sock;
    should be:
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;

    And it is missing config for location /
    This config must be defined:

    location / {
    try_files $uri $uri/ /index.php$is_args$args;
    }

    Svara
  9. Hey bro what is your thoughts on EasyEngine and SlickStack etc or one click app instead to automate? what is your favorite and will you make any tut bro

    Svara
  10. hello gulshanji i wanted to use cloudflare ssl direct from thier website and not thru api with fast cgi then what would the config

    Svara
  11. What do you think about Plesk Panel?
    It is easy to install plesk and create a wordpress site.
    Easy to find trial keys and we can use it unlimited.
    If it expires sites goes on ftp works and only plesk panel does not work but there are too much trial keys
    It has nginx cache.

    Do you recommend why and why not?
    Thanks

    Svara
  12. Can we create multi wordpress sites on different domain in the same machine with this
    method?

    I think only changement is in the FastCGI?

    server {
    root /var/www/aaa.com/wordpress;
    index index.php index.html index.htm;
    server_name .aaa.com;
    client_max_body_size 0;

    server {
    root /var/www/bbb.com/wordpress;
    index index.php index.html index.htm;
    server_name .bbb.com;
    client_max_body_size 0;

    server {
    root /var/www/ccc.com/wordpress;
    index index.php index.html index.htm;
    server_name .ccc.com;
    client_max_body_size 0;

    is this make a problem cache path is the same path for 3 web site? /var/www/cache

    Is this method works?
    1 machine 3 different domain and wordpress?

    Thanks

    Svara
  13. I have 2 questions

    1) What if i have 2 domains on different cloudflare accounts?

    Create a cloudflare.ini file inside /root/.secrets/ directory.
    mkdir -p /root/.secrets/ && cd /root/.secrets/ && nano cloudflare.ini
    Add below code and save using CTRL+O and exit using CTRL+X
    dns_cloudflare_email = ”[email protected]
    dns_cloudflare_api_key = ”XXXXXXXXXXXXXXXXX”

    /root/.secrets/1domaincloudfare.ini
    /root/.secrets/2domaincloudfare.ini

    certbot certonly –dns-cloudflare –dns-cloudflare-credentials 1domaincloudfare.ini -d example.com,*.1domain.com –preferred-challenges dns-01
    certbot certonly –dns-cloudflare –dns-cloudflare-credentials 2domaincloudfare.ini -d example.com,*.2domain.com –preferred-challenges dns-01

    Do this work?

    2) If we have 2 domains in the same account on cloudflare can we use 1 cloudflare.ini

    certbot certonly –dns-cloudflare –dns-cloudflare-credentials /root/.secrets/cloudflare.ini -d 1domain.com,*.example.com –preferred-challenges dns-01
    certbot certonly –dns-cloudflare –dns-cloudflare-credentials /root/.secrets/cloudflare.ini -d 2domain.com,*.example.com –preferred-challenges
    dns-01

    3) If we dont use cloudflare what will our ns for domain?
    CLoud VPNs IP?

    ns1= 68.28.65.84
    ns2= 68.28.65.84

    Is this right?

    thanks for your replies

    Svara
  14. which is the best & compatible server side cache plugin If I use FastCGI server block code along with Nginx Cache plugin..

    W3 Total Cache or WP Rocket

    Svara
  15. I finally installed wordpress with this guide. But I see only www version but not the non-www version. Is there any changes that I need to do.

    Redirects to www version even If I enter non-www version.

    Svara
    • You need to point DNS records for both hostnames. Second, make sure dot is not missing from the beginning of example.com in this code – server_name .example.com; in the NGINX connfig at step 6. Another thing, Redirect from www to non-www or vice-versa (as neccessary) is taken care automatically from WordPress. You do not need to put any extra code for it.

      Svara
  16. For Nginx cache helper (I take this info from offical site
    There’s a ‘purge all’ button? Does it purge the whole site?
    Yes, it does. It physically empties the cache directory. It is set by default to /var/run/nginx-cache/.

    So the default is /var/run/nginx-cache/
    can we change fastcgi_cache_path /var/www/cache to /var/run/nginx-cache/ ?

    Thanks

    Svara
    • Om din cachekatalog är annorlunda kan du åsidosätta detta i din wp-config.php genom att lägga till.

      define('RT_WP_NGINX_HELPER_CACHE_PATH','/var/www/nginx-cache/')

      Svara
  17. location ~* .(css|gif|ico|svg|jpeg|jpg|js|png)$ {
    expires 1y;
    log_not_found off;
    }

    is this code for page caching?
    I use cloudflare so it has page cache too.
    If i use that can i remove it from codes?
    Can you please explain what is this code for?

    Thanks

    Svara
    • That code is for setting up 1 year browser caching for static files. You may use Cloudflare Page caching as normally you do. There shouldn’t be any problem.

      Svara
  18. Exactly followed the same steps, but at the end i am getting 502 bad gateway. I built some sites with the same steps before, however i don’t know what changed now.

    Svara