Chào các bạn, hôm nay VinaSupport sẽ viết 1 bài tâm huyết về tạo và setup một Web Server hoàn chỉnh từ A-Z trên Ubuntu 20.04 / Ubuntu 22.04 gồm các dịch vụ:
- Máy chủ Nginx
- CSDL MariaDB
- Redis Cache
- PHP 7.4
- Let’s Encrypt SSL Certificate
Với kinh nghiệm 10 năm về lập trình và quản lý Server, hy vọng bài viết này sẽ giúp các bạn dễ dàng tạo một web server nhanh, ổn định và bảo mật. Nếu có ý định làm Web Server để lưu trữ website của mình, thì mình khuyến các bạn sử dụng dịch vụ của nhà cung cấp DigitalOcean, hoặc Linode. Đây là 2 nhà cung cấp dịch vụ máy chủ tốt nhất trên thế giới. Họ cũng đang cung cấp khuyến mại dùng thử dịch vụ của họ khi tạo account mới.
Sau khi tạo 1 server sử dụng hệ điều hành Ubuntu 20.04 chúng ta thực hiện các bước dưới đây để thực hiện tạo 1 Web Server. Các bạn nên thực hiện cài đặt với tài khoản root, còn với tài khoản bình thường cần quyền root và câu lệnh thì cần thêm sudo ở đầu.
- Nâng cấp các package của Ubuntu về trạng thái mới nhất
- Cài đặt các package cần thiết
- Tạo user với quyền sudo
- Tạo kết nối SSH bảo mật
- Cài đặt Nginx Server
- Cài đặt PHP
- Cài đặt CSDL MariaDB
- Cài đặt Redis Cache
- Tạo swap cho Ubuntu
- Cấu hình Nginx chạy PHP
1. Nâng cấp các package của Ubuntu
Đầu tiên chúng ta login vào máy chủ bằng tài khoản root.
Chúng ta sẽ nhận đươc thông báo update
Việc nâng cấp các package, sẽ giúp cho máy chủ của chúng ta ở trạng thái an toàn nhất do được cập nhật các bản vá mới nhất. Để update các package chúng ta sử dụng command sau:
sudo apt update && sudo apt -y upgrade
Sau đó chúng ta reboot lại máy chủ để hoàn thành việc cập nhật.
2. Cài đặt các package cần thiết
Một số package cần thiết để chúng ta thực hiện setup web server
sudo apt -y install sudo vim zip unzip git
3. Tạo user với quyền sudo
Để bảo mật web server bạn không nên sử dụng tài khoản root để kết nối SSH, thay vào đó chúng ta tạo 1 user mới nhưng có quyền root.
Để tạo user mới chúng ta sử dụng các command sau:
adduser zozo adduser zozo sudo
Giờ ta có thể login với user có tên là zozo được rồi.
4. Tạo kết nối SSH bảo mật
Để đảm bảo bảo mật cho kết nối ssh của user vừa mới tạo chúng ta cần thực hiện các bước sau.
Sử dụng SSH Keys để kết nối thay cho việc kết nối bằng mật khẩu. Để tạo SSH keys các bạn vui long tham khảo bài viết sau:
- Tạo và kết nối tới Server sử dụng SSH Keys
Tạo thư mục .ssh và phân quyền cho nó
mkdir -p /home/zozo/.ssh sudo chmod 700 /home/zozo/.ssh/
Copy public key tới thư mục .ssh với tên là “authorized_keys” và phân quyền cho nó.
sudo chmod 600 /home/zozo/.ssh/authorized_keys sudo chown -R zozo:zozo /home/zozo/.ssh
Sử file /etc/ssh/sshd_config và cấu hình các tham số bên dưới như sau:
Port 2022 PermitRootLogin no PasswordAuthentication no
Nó sẽ thực hiện:
- Đổi port login SSH từ port mặc định 22 => 2022
- PermitRootLogin: Không cho phép kết nối SSH bằng tài khoản root
- PasswordAuthentication: Không cho phép kết nối SSH bằng mật khẩu mà phải sử dụng private key
Sau đó các bạn restart lại dịch vụ SSH thông qua systemd
sudo systemctl restart ssh
Bây giờ bạn hãy kết nối tới Server nhưng bằng file private key thay cho mật khẩu.
ssh -i <path_to_private_key> username@remote-ip-address -P <port>
5. Cài đặt Nginx Server
Chạy command sau để cài đặt Nginx Server
sudo apt -y install nginx-full
Xác nhận dịch vụ Nginx đang hoạt động
sudo systemctl status nginx
Truy cập vào đường dẫn http://<server_ip> để kiểm tra, nếu có kết quả như bên dưới thì nginx đang chạy ngon lành
6. Cài đặt PHP
Để cài đặt PHP và các module cần thiết cho WordPress thì chạy lênh bên dưới:
sudo apt -y install php-{cli,fpm,bcmath,curl,gd,imagick,mbstring,mysql,redis,soap,xml,zip}
Còn cho Laravel thì chạy lệnh bên dưới
sudo apt -y install php-{cli,common,fpm,bcmath,curl,gd,imagick,mbstring,mysql,redis,xml,zip,tokenizer,json}
Kiểm tra php version bằng lệnh “php -v”
Bản mặc định trên Ubuntu 20.04 là php 7.4, trường hợp bạn muốn cài phiên bản PHP 8.x thì vui lòng tham khảo bài viết sau:
Kiểm tra hoạt động của dịch vụ php-fpm
sudo systemctl status php7.4-fpm.service
7. Cài đặt CSDL MariaDB
MariaDB là CSDL quan hệ đang được sử dụng phổ biến. Nó chạy rất ổn định và là CSDL đang được ưa chuộng. Bạn có thể tham khảo bài viết sau để biết thêm chi tiết về MariaDB
Cách 1: Cài bản mặc định đi cùng HDH
sudo apt -y install mariadb-server mariadb-client
Cách 2: Cài theo repo. cách này sẽ giúp bạn cài theo bất cứ phiên bản nào của HDHHDH
Để cài đặt MariaDB trên Ubuntu, đầu tiên chúng ta truy cập địa chỉ này: https://downloads.mariadb.org/mariadb/repositories/
Và thực hiện các bước sau:
- Chọn hệ điều hành, VD: Ubuntu
- Chọn phiên bản của HDH, VD: Ubuntu 20.04 “focal”
- Chọn phiên bản của MariaDB: VD: 10.5 [Stable]
- Chọn nơi lưu trữ phần mềm
Kết quả sau khi lựu chọn, trang web sẽ hiển thị các câu lệnh giúp bạn cài đặt dễ dàng trên phiên bản HDH mà bạn đã lựu chọn
Đầu tiên chúng ta cài đặt các package cần thiết
sudo apt-get install software-properties-common
Sau đó thêm key cho MariaDB
sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
Thêm repository vào Server
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://sgp1.mirrors.digitalocean.com/mariadb/repo/10.5/ubuntu focal main'
Cập nhật mới lại các package
sudo apt update
Cuối cùng là cài đặt MariaDB Server
sudo apt install mariadb-server
Kiểm tra dịch vụ MariaDB đã hoạt động chưa?
sudo apt install mariadb-server
Để đảm bảo tính bảo mật thì chúng ta nên đổi mật khẩu tài khoản root của MariaDB
Đầu tiên đăng nhập tài khoản root với mật khẩu là rỗng
sudo mysql -u root -p
Update lại mật khẩu cho user root bằng lệnh SQL dưới đây
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YOUR_NEW_PASSWORD'; FLUSH PRIVILEGES;
Có rất nhiều cách set mật khẩu cho user root của MariaDB các bạn có thể tham khảo ở đây.
Còn tạo CSDL chuẩn thì vui lòng tham khảo bài viết sau:
8. Cài đặt Redis Cache
Để cài đặt Redis Cache chúng ta sử dụng command bên dưới
sudo apt -y install redis-server redis-tools
Xác nhận dịch vụ Redis đang hoạt động
Kiểm tra bằng redis-cli với lệnh ping
9. Tạo swap trên Ubuntu
Việc tạo swap này sẽ giúp cho Ubuntu hoạt động mượt mà với 1 số dịch vụ cần swap như MariaDB hay MySQL
sudo fallocate -l 1G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile sudo cp /etc/fstab /etc/fstab.bak echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Sau đó sửa file /etc/sysctl.conf, thêm mấy dòng sau vào:
vm.swappiness=10 vm.vfs_cache_pressure=50
Xác nhận swap được tạo bằng lệnh “free -m”
10. Cấu hình Nginx chạy PHP
Sau khi đã cài đặt hết tất cả dịch vụ chúng ta thực hiện cấu hình Nginx để chạy Web Server
Sửa file: /etc/nginx/sites-available/default
- Thêm index.php vào mục index
- Mở comment phần location php
server { listen 80 default_server; listen [::]:80 default_server; # SSL configuration # # listen 443 ssl default_server; # listen [::]:443 ssl default_server; # # Note: You should disable gzip for SSL traffic. # See: https://bugs.debian.org/773332 # # Read up on ssl_ciphers to ensure a secure configuration. # See: https://bugs.debian.org/765782 # # Self signed certs generated by the ssl-cert package # Don't use them in a production server! # # include snippets/snakeoil.conf; root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.php index.htm index.nginx-debian.html; server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } # pass PHP scripts to FastCGI server # location ~ \.php$ { include snippets/fastcgi-php.conf; # With php-fpm (or other unix sockets): fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # # With php-cgi (or other tcp sockets): # fastcgi_pass 127.0.0.1:9000; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }
Sau đó restart lại Nginx
Tạo 1 file php ở thư mục /var/www/html có tên là info.php chứa nội dung code sau:
<php phpinfo();
Truy cập tới địa chỉ tên miền hoặc địa chỉ IP của Server http://<ip_address>/info.php. Nếu trình duyệt hiển thị bên dưới là chúng ta đã thành công.
Kết luận
Như vậy mình đã trình bầy việc tạo 1 web server từ A-Z hoàn chỉnh các dịch vụ cho. Nếu các bạn thực hiện có bất cứ 1 vấn đề gì thì mình sẽ giải đáp thắp mắc.
Nguồn vinasupport.com