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 http và https
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