HƯỚNG DẪN QUẢN TRỊ VPS UBUNTU NÂNG CAO

Cập nhật: 02/06/2022 11:34 - Lượt xem: 62

HƯỚNG DẪN QUẢN TRỊ VPS UBUNTU NÂNG CAO

1, Các lệnh thường sử dụng khi quan trị vps

a. Thay đổi domain cho website

Chúng ta tiến hành truy cập vào file cấu hình thư mục của website  bằng câu lệnh:

sudo nano /etc/nginx/sites-available/thepminhphu.vn

File cấu hình fill sẽ như bên dưới:

server {
    listen 80;
    server_name thepminhphu.vn www.thepminhphu.vn;
    root /var/www/thepminhphu.vn;

    index index.html index.htm index.php;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
     }

    location ~ /\.ht {
        deny all;
    }

    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|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }

}

Ở đây tôi đang dùng domain là thepminhpu.vn. Chúng ta tiến hành chỉnh sửa domain cũ thành domain mới và lưu lại.

Sau khi thay đổi domain xong, chúng ta tiến hành tải lại Nginx bằng câu lệnh sau:

sudo systemctl reload nginx

b. Tạo chứng chỉ SSL

SSL là giao thức được sử dụng để bọc lưu lượng truy cập thông thường trong một lớp bao bọc đưcọ mã hóa, được bảo vệ. Sử dụng công nghệ này, các server có thể gửi thông tin đến slient một cách an toàn mà không bị bên ngoài chặn hoặc đọc tin nhắn của họ.

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách tạo SSL với web server trên Ubuntu 20.04

Trước khi bắt đầu hướng dẫn này, bạn cần chuẩn bị những thứ sau:

Truy cập vào server Ubuntu 20.04 với user không phải root. Bạn cũng cần phải cài đặt Apache bằng apt. Đầu tiên, hãy cập nhật để cập nhật thay đổi mới nhất bằng câu lệnh sau:

sudo apt update

Sau khi cập nhật xong, chúng ta tiến hành cài đặt gói apache2

sudo apt install apache2

Và cuối cùng, nếu bạn đã cài đặt firewall ufw, hãy mở cổng httphttps

sudo ufw allow "Apache Full"

Bước 1: Bật mod_ssl

Bật mod_ssl bằng lệnh a2enmod

sudo a2enmod sll

Khởi động lại Apache để kích hoạt module

sudo systemctl restart apache2

Vậy là module mod_ssl hiện đã được kích hoạt và sẵn sàng để sử dụng

Bước 2: Tạo certificate SSL

Bây giờ Apache đã sẵn sàng để sử dụng mã hóa, chúng ta có thể chuyển sang tạo certificate SSL mới. Chứng chỉ sẽ lưu trữ một số thông tin cơ bản về trang web và sẽ được kèm theo một file khóa cho phép server xử lý dữ liệu được mã hóa một cách an toàn.

Chúng ta tiến hành tạo khóa SSL và các file certificate bằng lệnh openssl

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

sau khi nhập lệnh, bạn sẽ được đưa đến nơi bạn có thể nhập thông tin về trang web.

Country Name (2 letter code) [XX]:US State or Province Name (full name) []:Example Locality Name (eg, city) [Default City]:Example Organization Name (eg, company) [Default Company Ltd]:Example Inc Organizational Unit Name (eg, section) []:Example Dept Common Name (eg, your name or your server's hostname) []:your_domain_or_ip Email Address []:webmaster@example.com

Bước 3: Cấu hình Apache để sử dụng SSL

Bây giờ chúng ta đã có sẵn certificate và khóa, chúng ta cần cập nhật cấu hình Apache để sử dụng. Tên Ubuntu, bạn có thể đặt các dile cấu hình mới vào /etc/apache2/sites-available/

Đối với hướng dẫn này, chúng ta sẽ tạo một file cấu hình mới. Bạn có thể cần copy các dòng cấu hình bắt đầu bằng SSL và chuyển cổng từ 80 sang 443.

Mở một file mới trong folder / etc / apache2 / sites-available

sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf

Dán vào cấu hình VirtualHost tối thiểu sau:

ServerName your_domain_or_ip DocumentRoot /var/www/your_domain_or_ip SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key

ServerName ở đây có thể là tên server, domain đầy đủ hoặc địa chỉ IP.

Bây giờ, hãy tạo DocumentRoot và đặt một file HTML vào đó để thử nghiệm. Mở file HTML mới bằng câu lệnh:

sudo nano /var/www/your_domain_or_ip/index.html

Dán vào đó 1 đoạn HTML bất kỳ

Tiếp theo chúng ta kích hoạt file cấu hình bằng câu lệnh

sudo a2ensite your_domain_or_ip.conf

Kiểm tra lỗi cấu hình bằng câu lệnh:

sudo apache2ctl configtest

Nếu mọi thứ thành công, bạn sẽ nhận được kết quả như sau:

Output
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Syntax OK

Nếu kết quả của bạn có Syntax OK trong đó, file cấu hình của bạn không có lỗi cú pháp. Chúng ta có thể reload Apache để áp dụng các thay đổi:

sudo systemctl reload apache2

Bây giờ bạn có thể load lại trang web sử dụng https:// để kiểm tra

Bước 4: Chuyển hướng HTTP sang HTTPS

Hiện tại, cấu hình của chúng ta chỉ phản hồi các yêu cầu HTTPS trên cổng 443. Hãy cài đặt VirtualHost để phản hồi các yêu cầu không được mã hóa này và chuyển hướng đến HTTPS.

Mở cùng một file cấu hình Apache mà ta đã bắt đầu ở các bước trước:

sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf

Ở dưới cùng, tạo một khối VirtualHost khác để trùng với các yêu cầu trên cổng 80. Sử dụng lệnh ServerName khớp với domain hoặc địa chỉ IP của bạn. Sau đó, sử dụng Redirect trùng với bất kỳ yêu cầu nào và gửi đến SSL VirtualHost. Đảm bảo bao gồm dấu gạch chéo sau:

ServerName your_domain_or_ip Redirect / https://your_domain_or_ip/

Lưu file này khi bạn hoàn tất, sau đó kiểm tra lại cú pháp cấu hình và reload Apache:

sudo apachectl configtest
sudo systemctl reload apache2

c. Backup toàn bộ website

nano /root/backup.sh
#Backup Server

#!/bin/bash

SERVER_NAME=VPS

TIMESTAMP=$(date +"%Y-%m-%d_%H-%M")
BACKUP_DIR="/var/backup/$TIMESTAMP"
MYSQL_USER="userMYSQL"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD=passMYSQL
MYSQLDUMP=/usr/bin/mysqldump
SECONDS=0

mkdir -p "$BACKUP_DIR/mysql"

echo "Starting Backup Database";
databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"`

for db in $databases; do
	$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
done
echo "Finished";
echo '';

echo "Starting Backup Website";
#Loop through /home directory
for D in /var/www/*; do
	if [ -d "${D}" ]; then #If a directory
		domain=${D##*/} # Domain name
		echo "- "$domain;
		zip -r $BACKUP_DIR/$domain.zip /var/www/$domain/ -q -x /var/www/$domain/wp-content/cache/**\* #Exclude cache
	fi
done
echo "Finished";
echo '';

echo "Starting Backup ngin Configuration";
cp -r /etc/nginx/sites-enabled/ $BACKUP_DIR/nginx/
echo "Finished";
echo '';

echo "Starting Compress Files";
zip -r /var/backup/$SERVER_NAME-$TIMESTAMP.zip $BACKUP_DIR -q
rm -rf $BACKUP_DIR
size=$(ls -lah /var/backup/$SERVER_NAME-$TIMESTAMP.zip | awk '{ print $5}')
echo "Finished";
echo '';

#Remove older backups (5 days)
find /var/backup/ -mindepth 1 -mtime +5 -delete

duration=$SECONDS
echo "Total $size, $(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."

Phân quyền cho script

chmod +x /root/backup.sh

Bây giờ bạn có thể test lại bằng cách chạy lệnh /root/backup.sh. Để kiểm tra trong thư mục /var/backup có file backup.ZIP chưa

Tự động backup hàng ngày

Tạo script tự động chạy lúc 6h00 sáng. Vào tạo crontab:

crontab -e

Dán nội dung sau vào cửa sổ Terminal

0 6 * * * /root/backup.sh

facebook
zalo
hotline