Update OS
sudo apt update
sudo apt upgrade
Mount harddisk
Using /dev/disk/by-uuid/:
- Open a terminal.
- Type blkid or ls -l /dev/disk/by-uuid/ and press Enter.
- This will display a list of symlinks, where the filename is the UUID and the target is the device it points to (e.g., lrwxrwxrwx 1 root root 10 Jul 12 12:00 1234-5678 -> ../../sda1).
- Identify the UUID you need and then use the corresponding device path (e.g., /dev/sda1) in other commands if needed.
Edit file /etc/fstab
/dev/disk/by-uuid/50046676-d3fb-6183-54e4-7d65cd58e8ad /mount_name ext4 defaults 0 1
Then update new fstab with command ???
Check harddisk problem
Check with
fsck /dev/sdax
Repair with
fsck /dev/sdax -y
Step 1 – Installing the Nginx Web Server
sudo nano /etc/nginx/sites-available/your_domain
Enable HTTP/2 in Nginx on Ubuntu
http2 on;
listen 443 ssl;
listen [::]:443 ssl ipv6only=on;
Step 2 – Installing MariaDB to Manage Site Data
Install MariaDB lastest version from MariaDB server
More information
Here are the commands to run to import the MariaDB repository key on your Ubuntu system:
sudo apt-get install apt-transport-https curl
sudo mkdir -p /etc/apt/keyrings
sudo curl -o /etc/apt/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadbreleasesigning_key.pgp'
Once the key is imported, copy and paste the following into a file under /etc/apt/sources.list.d (for instance /etc/apt/sources.list.d/mariadb.sources):
# MariaDB 12.3 repository list - created 2026-03-06 08:09 UTC
# https://mariadb.org/download/
X-Repolib-Name: MariaDB
Types: deb
# deb.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# URIs: https://deb.mariadb.org/12.rc/ubuntu
URIs: https://mirror.kku.ac.th/mariadb/repo/12.3/ubuntu
Suites: questing
Components: main main/debug
Signed-By: /etc/apt/keyrings/mariadb-keyring.pgp
You can now install MariaDB 12.3 from the MariaDB repository with:
sudo apt-get update
sudo apt-get install mariadb-server
Debug symbol packages, those that end in a '-dbgsym' suffix, are harmless to install. They are typically used to resolve stack traces and provide detail of perf recordings. They do not change the running behaviour of MariaDB. If in doubt, omit from installation.
If you need source packages, replace Types: deb with Types: deb deb-src in the /etc/apt/sources.list.d/mariadb.sources file. Then, you can obtain the mariadb source after installing dpkg-dev package, with apt-get source mariadb-server.
If you prefer to use the old "one-line-style" APT format, create the file /etc/apt/sources.list.d/mariadb.list with the following:
# MariaDB 12.3 repository list - created 2026-03-06 08:09 UTC
# https://mariadb.org/download/
# deb.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# deb [signed-by=/etc/apt/keyrings/mariadb-keyring.pgp] https://deb.mariadb.org/12.3/ubuntu questing main
deb [signed-by=/etc/apt/keyrings/mariadb-keyring.pgp] https://mirror.kku.ac.th/mariadb/repo/12.3/ubuntu questing main
# deb-src [signed-by=/etc/apt/keyrings/mariadb-keyring.pgp] https://mirror.kku.ac.th/mariadb/repo/12.3/ubuntu questing main
See Installing MariaDB packages for more information.
Or install from Ubuntu repo (maybe not lastest version)
sudo apt install mariadb-server
sudo mysql_secure_installation
Switch to unix_socket authentication [Y/n] n
Create user
sudo mysql
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysqlnativepassword BY 'password';
mysql> FLUSH PRIVILEGES;
mysql> CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'strongpassword';
mysql> GRANT ALL PRIVILEGES ON . TO 'username'@'localhost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> SHOW GRANTS FOR 'username'@'localhost';
Change data folder
More information
Warning: Changing the location for a MySQL server is an administrative task which is not officially supported by Plesk. The solution should be applied on your risk.
As an alternative to moving the MySQL data directory to another location, consider mounting a partition from a new disk to the default MySQL data directory location /var/lib/mysql/
Create a backup of /etc/my.cnf(CentOS/RHEL) or /etc/mysql/my.cnf(Debian/Ubuntu)
# cp /etc/my.cnf /etc/my.cnf.backup
Copy or move all files from /var/lib/mysql to the desired directory and set the permissions:
# cp -pr /var/lib/mysql /data/mysql
# chown -R mysql:mysql /data/mysql
Update /etc/my.cnf or /etc/mysql/my.cnf(Debian/Ubuntu) using vi text editor and change the location to where you have copied mysql directory:
# vi /etc/my.cnf
datadir=/data/mysql
Note: Be sure that the path to socket mysql.sock is unchanged in my.cnf and it is /var/lib/mysql. Also the directory /var/lib/mysql itself should present on the server as changing the path to the socket can cause the Plesk to crush.
Create a configuration file:
# touch /etc/systemd/system/mariadb.service.d/mariadb_custom.conf
Add necessary content into the created file:
# echo "[Service]" >> /etc/systemd/system/mariadb.service.d/mariadb_custom.conf
# echo "ProtectHome=false" >> /etc/systemd/system/mariadb.service.d/mariadb_custom.conf
Create a backup of /etc/passwd:
# cp -a /etc/passwd /etc/passwd.backup
Modify the string below in /etc/passwd and set up the new MySQL location:
mysql:x:27:27:MariaDB Server:/data/mysql:/sbin/nologin
Restart mysqld:
Debian/Ubuntu:
# service mysqld restart
CentOS:
# service mariadb restart
Update /etc/psa/psa.conf with a path to the new mysql directory:
MYSQL
VARD /data/mysql
In case of Ubuntu 16.04, disable mysql in apparmor:
Modify file /etc/apparmor.d/usr.sbin.mysqld (create it if it doesn't exist using vi editor), add:
/usr/sbin/mysqld {
}
# rm /etc/apparmor.d/disable/usr.sbin.mysqld
# apparmor_parser -a /etc/apparmor.d/usr.sbin.mysqld
# aa-disable /etc/apparmor.d/usr.sbin.mysqld
For CentOS/RHEL, SELinux context should be changed or it should be disabled.
ปรับแต่ง config
nano /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
log_slow_query_file = /var/log/mysql/mariadb-slow.log
log_slow_query_time = 2
...
innodb_buffer_pool_size = 256M
innodb_log_file_size = 128M
ตรวจสอบตารางว่า crash หรือไม่
mariadb-check -u user -p -c database
Backup and restore data
Common mysqldump Commands
Backup a single database:
mysqldump -u [username] -p [database_name] > [backup_name.sql]
Backup specific tables:
mysqldump -u [username] -p [database_name] [table1] [table2] > [tables_backup.sql]
Backup all databases:
mysqldump -u [username] -p --all-databases > [all_databases.sql]
Backup only the structure (no data):
mysqldump -u [username] -p --no-data [database_name] > [structure.sql]
Backup and compress (requires gzip):
mysqldump -u [username] -p [database_name] | gzip > [backup_name.sql.gz]
Restore database:
mysql -u [username] -p
mysql> use database_name
mysql> source \folder\backup_name.sql
Step 3 – Installing PHP and Configuring Nginx to Use the PHP Processor => รายละเอียด
หากเกิด error permission denied โดยดูจาก nginx error.log
sudo tail -30 /var/log/nginx/error.log
connect() to unix:/run/php/php8.5-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 171.7.216.140, server: softgang.app, request: "GET /info.php HTTP/2.0", upstream: "fastcgi://unix:/run/php/php8.5-fpm.sock:", host: "softgang.app"
วิธีแก้ปัญา
The socket permissions look correct, but still failing. Let's diagnose further:
1. Check what user nginx runs as:
ps aux | grep nginx
If it's nginx user (not www-data), that's the problem. Add nginx to www-data group:
sudo usermod -a -G www-data nginx
sudo systemctl restart nginx
The issue was the nginx user didn't have permissions to access the socket owned by www-data. Adding nginx to the www-data group solved it.
This is a common gotcha when nginx and PHP-FPM run as different users. Your PHP app should now be working properly!
2. Verify PHP-FPM is actually listening:
sudo lsof | grep php8.5-fpm.sock
Should show it's listening. If not, restart it:
sudo systemctl restart php8.5-fpm
sudo systemctl status php8.5-fpm
3. Check for SELinux/AppArmor issues:
sudo aa-status # Check AppArmor
getenforce # Check SELinux
If SELinux is enabled:
sudo semanage fcontext -a -t httpd_var_run_t "/run/php/php8.5-fpm.sock"
sudo restorecon -v /run/php/php8.5-fpm.sock
4. Double-check nginx error log again:
sudo tail -20 /var/log/nginx/error.log
5. Test PHP-FPM directly:
sudo -u www-data php -v
6. Also verify your nginx upstream is correct in config:
grep -A2 "upstream" /etc/nginx/sites-enabled/your-site.conf
Should be exactly: server unix:/run/php/php8.5-fpm.sock;
####ปรับ config PHP
####เปลี่ยนค่า session.gc\_probability, date.timezone, post_max_size, upload\_max\_filesize
nano /etc/php/8.3/fpm/php.ini
session.gc_probability = 1
date.timezone = Asia/Bangkok
post_max_size = 64M
upload_max_filesize = 64M
####แก้ไขค่า php pool
nano /etc/php/8.3/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 600
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
request_terminate_timeout = 30s
pm.max_requests = 500
Enabling PHP8.3 on Nginx server
sudo nano /etc/nginx/sites-available/default
index index.php index.html
...
location ~ \.php$ {
include snippets/fastcgi-php.conf
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
# With php-cgi (or other tcp sockets):
<a class="hashtag" href="/tags/fastcgi">#fastcgi</a>_pass 127.0.0.1:9000;
}
Restart php
sudo service php8.3-fpm restart
Restart nginx
sudo systemctl restart nginx.service
Step 4 - How To Secure Nginx with Let's Encrypt on Ubuntu 22.04
ติดตั้ง SSL Certificate Filde วิธีการติดตั้ง SSL Certificate บน Nginx Server
Step 5 – ขั้นตอนสุดทัาย - Check List
1. Create new user
config PHP
Old version
ถอนการติดตั้ง
หากมีการติดตั้ง apache2 ไว้ก่อน สามารถถอนการติดตั้งด้วย
apt-get purge apache2
apt-get autoremove
กรณีการอัพเกรดจาก Apache มีขั้นตอนของการตรวจสอบ และ ถอดโปรแกรม
uname -a
Linux alumni 5.4.0-167-generic <a class="hashtag" href="/tags/184">#184</a>-Ubuntu SMP Tue Oct 31 09:21:49 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.1 LTS
Release: 20.04
apachectl -v
Server version: Apache/2.4.41 (Ubuntu)
Server built: 2023-10-26T13:54:09
php -v
PHP 7.4.3-4ubuntu2.20 (cli) (built: Feb 21 2024 13:54:34) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3-4ubuntu2.20, Copyright (c), by Zend Technologies
mysql --version
mysql Ver 15.1 Distrib 10.3.39-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
<a class="hashtag" href="/tags/apt">#apt</a> update
<a class="hashtag" href="/tags/apt">#apt</a> list --upgradable<br />
<br />
<br />
add-apt-repository ppa:ondrej/apache2
apt update
apt upgrade
do-release-upgrade
ssh recovery port 1022
sudo add-apt-repository universe
sudo apt install php-fpm php-mysql
sudo apt install php8.1-mbstring
sudo apt install php8.1-gd
php --version
which php
whereis php
sudo nano /etc/nginx/sites-available/your_domain
/etc/nginx/sites-available/your_domain
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
servername yourdomain;
location / {
try_files $uri $uri/ /index.php?$uri&$args;
# try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
ที่มา