Triển khai web server trên linux
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ụ: Show
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Đầ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ếtMộ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 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:
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 5. Cài đặt Nginx ServerChạ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:// 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 MariaDBMariaDB 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:
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 UbuntuViệ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 PHPSau 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
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:
|