Hướng dẫn cài đặt Web Server từ A-Z trên Ubuntu 20.04


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 gồm các dịch vụ:

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 Vultr Cloud Server, 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.

  1. Nâng cấp các package của Ubuntu về trạng thái mới nhất
  2. Cài đặt các package cần thiết
  3. Tạo user với quyền sudo
  4. Tạo kết nối SSH bảo mật
  5. Cài đặt Nginx Server
  6. Cài đặt PHP
  7. Cài đặt CSDL MariaDB
  8. Cài đặt Redis Cache
  9. Tạo swap cho Ubuntu
  10. 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

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à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:

  1. Chọn hệ điều hành, VD: Ubuntu
  2. Chọn phiên bản của HDH, VD: Ubuntu 20.04 “focal”
  3. Chọn phiên bản của MariaDB: VD: 10.5 [Stable]
  4. 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.

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

  1. Thêm index.php vào mục index
  2. 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

             
SHARE

Bài viết liên quan

mode_edit Bình luận của bạn

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

account_circle
web