This is a way to install and set up Nginx, MariaDB and PHP 8.1 (mode PHP-FPM), Certbot on Ubuntu 20.04.
$ sudo apt update
$ sudo apt install nginx -y
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
$ sudo ufw allow ssh
$ sudo ufw allow http
$ sudo ufw enable
$ sudo apt install mariadb-server mariadb-client -y
$ sudo mysql_secure_installation
Follow the instruction to what you need. After it ends, try to login:
$ sudo mysql -u root -p
And if you can not login with error message like Access denied for user 'root'@'localhost'
let's log in to mysql using sudo first
$ sudo mysql -u root -p
In order to create a password, first we have to hash the string first:
SELECT PASSWORD('verysecretchangeit');
For example we get this hashed string: *54958E764CE10E50764C2EECBB71D01F08549980
ALTER USER root@localhost IDENTIFIED BY PASSWORD '*54958E764CE10E50764C2EECBB71D01F08549980';
Restart MariaDB service
$ sudo service mariadb restart
Now, you have access to account root.
Nginx uses PHP-FPM and for convenient, we use Ondrej Sury's PPA, so we can install multiple versions of PHP.
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:ondrej/php && sudo apt update
$ sudo apt install -y php8.1 php8.1-fpm php8.1-curl php8.1-gd php8.1-mbstring php8.1-mysql php8.1-xml php8.1-xmlrpc php8.1-fileinfo php-pear
$ sudo service php8.1-fpm start
Check if PHP operated using Netstat:
$ netstat -pl | grep php
You're good to go if the result is similar to the text below:
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
unix 2 [ ACC ] STREAM LISTENING 30323 - /run/php/php8.1-fpm.sock
$ nano /etc/nginx/nginx.conf
Uncomment the following lines.
keepalive_timeout 2;
server_tokens off;
Add more row to increase max upload file size
client_max_body_size 200m
Save the config file.
$ nano sites-available/default
Add or change this line:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
Save it and exit.
Test nginx config and make sure there's no error
$ sudo nginx -t
then restart the service
$ sudo systemctl reload nginx
Go to /etc/php/8.1/fpm and edit php.ini file
Uncomment cgi.fix_pathinfo, change value to 0
cgi.fix_pathinfo=0
Save and exit.
Increase max upload file size from PHP application
sed -i "s/post_max_size =.*/post_max_size = 100M/g" /etc/php/8.1/fpm/php.ini
sed -i "s/upload_max_filesize =.*/upload_max_filesize = 100M/g" /etc/php/8.1/fpm/php.ini
Reload PHP-FPM service
$ sudo service php8.1-fpm restart
sudo apt install certbot python3-certbot-nginx
Then you can run command to enable SSL for your domain
sudo certbot --nginx -d example.com -d www.example.com
apt-get install ufw
sudo ufw allow 22/tcp
sudo ufw allow 'Nginx Full'
sudo ufw enable