LOMP stack (Linux, OpenLiteSpeed, MariaDB và PHP) là một nhóm các phần mềm mã nguồn mở thường được cài đặt cùng với nhau để cho phép server host các website và ứng dụng web động. Bài viết viết dưới đây của Vietnix sẽ hướng dẫn chi tiết cách cài đặt LOMP stack trên Ubuntu 20.04.
Bước 1 – Cài đặt OpenLiteSpeed
Trước khi bắt đầu, bạn cần phải có user non-root với quyền sudo, cài sẵn tường lửa và có ít nhất 1GB RAM. Bên cạnh đó, ta cũng cần có một tên miền đầy đủ điều kiện để cấu hình SSL. Bạn có thể tham khảo mua chứng chỉ SSL và tên miền với mức giá vô cùng hợp lý tại Vietnix.
Ngoài ra, khi khách hàng mua bất kỳ sản phẩm hosting nào tại Vietnix cũng đều được tặng miễn phí chứng chỉ SSL trọn đời. Ngoài ra, Vietnix cũng cung cấp dịch vụ SSL riêng cho những khách hàng có nhu cầu cao hơn. Hiện tại, Vietnix nhiều gói SSL với chi phí và phương thức xác thực khác nhau, phù hợp với mọi quy mô doanh nghiệp.
Liên hệ ngay với Vietnix để được tư vấn lựa chọn dịch vụ SSL phù hợp cho website của bạn.
Trước tiên, cài đặt web server OpenLiteSpeed sau khi import các repo package cần thiết vào server.
Cập nhật cache bộ quản lý package:
sudo apt update
Khác với Apache hay Nginx, OpenLiteSpeed host code trong chính repo của mình. Vì vậy ta cần thêm repo
này vào bộ quản lý package apt
bằng lệnh sau:
sudo wget -O - http://rpms.litespeedtech.com/debian/enable_lst_debian_repo.sh | sudo bash
Trong đó, wget
dùng để fetch repo từ xa ở server của OpenLiteSpeed, còn flag -o
cho phép in nội dung file ra terminal, |
là toán tử pipe dùng để truyền nội dung đến một bash shell mới chạy bởi lệnh sudo bash
. Terminal bash này thực thi các lệnh có trong file .sh fetch
được từ repo và thực hiện việc cài đặt repo này trên APT ở máy cục bộ.
Output sau đó sẽ có dạng như sau:
Output
--2022-03-16 08:51:49-- http://rpms.litespeedtech.com/debian/lst_repo.gpg
Resolving rpms.litespeedtech.com (rpms.litespeedtech.com)... 52.55.120.73
Connecting to rpms.litespeedtech.com (rpms.litespeedtech.com)|52.55.120.73|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2336 (2.3K) [application/octet-stream]
Saving to: ‘/etc/apt/trusted.gpg.d/lst_repo.gpg’
/etc/apt/trusted.gp 100%[===================>] 2.28K --.-KB/s in 0s
2022-03-16 08:51:50 (329 MB/s) - ‘/etc/apt/trusted.gpg.d/lst_repo.gpg’ saved [2336/2336]
update the repo
Hit:1 https://repos.insights.digitalocean.com/apt/do-agent main InRelease
Hit:2 http://mirrors.digitalocean.com/ubuntu focal InRelease
Hit:3 https://repos-droplet.digitalocean.com/apt/droplet-agent main InRelease
Hit:4 http://mirrors.digitalocean.com/ubuntu focal-updates InRelease
Ign:5 http://rpms.litespeedtech.com/debian focal InRelease
Hit:6 http://security.ubuntu.com/ubuntu focal-security InRelease
Hit:7 http://mirrors.digitalocean.com/ubuntu focal-backports InRelease
Get:8 http://rpms.litespeedtech.com/debian focal Release [1652 B]
Get:9 http://rpms.litespeedtech.com/debian focal Release.gpg [836 B]
Get:10 http://rpms.litespeedtech.com/debian focal/main amd64 Packages [18.3 kB]
Fetched 20.8 kB in 2s (13.6 kB/s)
Reading package lists... Done
All done, congratulations and enjoy !
Tiếp theo, cài đặt package openlitespeed
:
sudo apt install openlitespeed
Nhập password khi được yêu cầu và xác nhận bằng phím Y.
Sau khi cài đặt xong, kiểm tra xem OpenLiteSpeed đã được cài đặt chưa bằng cách chạy lệnh sau:
sudo systemctl status lsws
Lệnh systemctl status
sẽ nhận trạng thái của dịch vụ được chỉ định trong phần keyword của lệnh, ở đây là lsws
(OpenLiteSpeed Web Server).
Output:
Output
● lshttpd.service - OpenLiteSpeed HTTP Server
Loaded: loaded (/etc/systemd/system/lshttpd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-03-16 08:59:09 UTC; 2min 26s ago
Process: 32997 ExecStart=/usr/local/lsws/bin/lswsctrl start (code=exited, status=0/SUCCESS)
Main PID: 33035 (litespeed)
CGroup: /system.slice/lshttpd.service
├─33035 openlitespeed (lshttpd - main)
├─33044 openlitespeed (lscgid)
└─33073 openlitespeed (lshttpd - #01)
Bây giờ ta có thể truy cập web server OpenLiteSpeed bằng cách chạy theo cấu hình mặc định. Hiện tại thì firewall có thể vẫn đang chặn lưu lượng truy cập vào các port của admin Panel dựa trên GUI hay các website mẫu, vì thế tạm thời ta sẽ chưa truy cập được. Bạn có thể cập nhật firewall và mở các port cần thiết ở bước sau đây.
Bước 2 – Cập nhật firewall
Ở bước này ta sẽ cấu hình firewall cho server để cho phép lưu lượng truy cập qua TCP đến các port được chọn cho admin panel và những website mẫu. Đồng thời, ta cũng sẽ mở port 80
và 443
cho các trang HTTP và HTTPS.
Server OpenLiteSpeed kết hợp admin panel dựa trên GUI và nhiều website mẫu. Trong đó admin panel là một giao diện dễ sử dụng, dùng để cấu hình nhiều thiết lập như Listeners, Virtual Hosts, SSL hay log giám sát. Các website mẫu gồm có CGI Script, PHP Script, Error Page hay Password Protected Page, thường được dùng để kiểm tra khả năng và các tính năng của server.
Theo mặc định, admin panel nghe trên cổng 7080
, còn website mẫu sẽ nghe trên cổng 8080
. Vì vậy ta cần cho phép các lưu lượng TCP ở trên những cổng này thông qua ufw firewall.
Chạy lệnh sau để cấp quyền truy cập vào các cổng:
sudo ufw allow 7080,80,443,8088/tcp
Sau đó kiểm tra trạng thái các quy tắc của firewall:
sudo ufw status
Output:
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80,443,7080,8088/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80,443,7080,8088/tcp (v6) ALLOW Anywhere (v6)
Bây giờ hãy thử mở website mẫu qua cổng 8088
:
http://your_server_ip:8088
Tương tự, mở admin panel ở cổng 7080
:
http://your_server_ip:7080
Ở các phần sau của hướng dẫn, ta sẽ dùng giao diện GUI để cấu hình web server.
Sau khi thiết lập xong server OpenLiteSpeed trên máy Ubuntu, ta đã có thể host nhiều ứng dụng web dựa trên nhiều loại ngôn ngữ backend và framework khá nhau.
Bước 3 – Cài đặt MariaDB
Server database MariaDB cho phép lưu trữ, truy vấn và quản lý dữ liệu trên website một cách hiệu quả. MariaDB hỗ trợ cả SQL lẫn NoSQL, đồng thời dễ dàng tích hợp được với nhiều database engine như MyISAM hay InnoDB.
Cài đặt server MariaDB bằng lệnh sau:
sudo apt install mariadb-server
Nhập Y để xác nhận. Sau khi cài đặt xong, hãy hoàn tất việc setup server bằng lệnh sau:
sudo mysql_secure_installation
Cài đặt mặc định chưa có root password nên ta chỉ cần nhấn Enter khi được yêu cầu nhập mật khẩu.
Output:
Output
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Tiếp theo ta cần thiết lập mật khẩu. Chọn password đủ mạnh rồi nhấn Y để xác nhận.
Output
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorization.
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
Tiếp theo, hệ thống sẽ hỏi xem bạn có muốn xóa các user ẩn danh hay không. Nhập Y để đồng ý.
Output
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Nếu không muốn truy cập database bằng root user từ server khác hoặc trên máy local, bạn nên tắt tính năng cho phép đăng nhập vào root. Nhập Y khi được hỏi như dưới đây để xác nhận:
Output
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
... Success!
Ta cũng có thể xóa database thử nghiệm và các quyền liên quan:
Output
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Cuối cùng là reload lại các bảng đặc quyền để áp dụng thay đổi cho server:
Output
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Bây giờ ta đã cài đặt và cấu hình xong server database MariaDB. Database này sẽ nghe các kết nối MySQL trên cổng 3306
theo cấu hình mặc định. Ta chỉ cần truy cập database nội bộ (trên cùng một server) nên không cần mở port này cho các lưu lượng bên ngoài trong thiết lập firewall.
Bước 4 – Cài đặt PHP
OpenLiteSpeed đi kèm mới một phiên bản PHP có sẵn, nhưng có thể chưa phải là bản PHP mới nhất. Do đó Vietnix khuyên bạn nên kiểm tra phiên bản PHP trước rồi cài đặt nếu cần thiết.
Chạy lệnh sau để kiểm tra phiên bản PHP đang sử dụng trên server OpenLiteSpeed:
http://your_server_ip:8088/phpinfo.php
Bạn có thể kiểm tra danh sách các phiên bản và khả năng tương thích tại đây, ở trong phần Installation. Ngoài ra ta cũng có thể kiểm tra các package LSPHP (LiteSpeed PHP) có sẵn cho Ubuntu bằng lệnh:
sudo apt-cache search lsphp
Trong output, ta có thể kiểm tra phiên bản php bằng cách xem hậu tố tên của package:
Output
...
lsphp81 - server-side, HTML-embedded scripting language (LSAPI binary)
...
Trong output này, lsphp81
nghĩa là PHP đang ở phiên bản v8.1
.
Để cài đạt một package lsphp
cụ thể, hãy chạy lệnh sau (thay 81
bằng phiên bản bạn cần cài đặt):
sudo apt install lsphp81 lsphp81-{common,mysql}
Sau đó nhập Y để xác nhận việc cài đặt.
Bước 5 – Cấu hình OpenLiteSpeed
Sau khi cài đặt xong PHP, OpenLiteSpeed vẫn chỉ đang sử dụng phiên bản PHP mặc định được cài sẵn. Do đó trong phần này ta sẽ cấu hình cho server sử dụng bản PHP vừa cài ở trên.
Mở admin panel ở port 7080
để bắt đầu cấu hình:
http://your_server_ip:7080
Trong terminal, thiết lập thông tin của tài khoản quản trị bằng lệnh sau:
sudo /usr/local/lsws/admin/misc/admpass.sh
Các thông tin này sẽ khác với những thông tin đăng nhập ở các bước trước, và chỉ hoạt động đối với admin panel của server OpenLiteSpeed.
Nhập username và password khi được yêu cầu.
Output
Please specify the user name of administrator.
This is the user name required to login the administration Web interface.
User name [admin]: sammy
Please specify the administrators password.
This is the password required to login the administration Web interface.
Password:
Retype password:
Administrators username/password is updated successfully!
Thông qua http://your_server_ip:7080
, đăng nhập vào admin Panel bằng thông tin vừa thiết lập, đi đến phần Server Configuration rồi chọn tab External App.
Click vào nút Edit trong cột Actions, dòng LiteSpeed SAPI App, sau đó màn hình sẽ hiện ra một ứng dụng có tên lsphp. Kéo xuống trường Command rồi đổi giá trị thành lsphp81/bin/lsphp
(thay 81
thành phiên bản tương ứng). Sau đó kéo xuống phần LiteSpeed SAPI App, nhấn Save để lưu.
Tiếp theo, restart web server bằng cách click vào nút Graceful Restart màu xanh ở trên.
Bây giờ hãy kiểm tra xem server có đang chạy phiên bản PHP đã được chỉ định hay không:
http://your_server_ip:8088/phpinfo.php
Bước 6 – Thiết lập Virtual Host
Ở bước cuối cùng, ta sẽ thiết lập host ảo (Virtual Host) cho các website. Virtual Host cho phép ta phục vụ nhiều website, được định danh bằng các hostname riêng biệt, thông qua một web server quy nhất. OpenLiteSpeed có khả năng phục vụ nhiều Virtual Host, được ánh xạ sang các Listener, các Listener lại tiếp tục được ánh xạ sang những port được chỉ định.
OpenLiteSpeed cho phép Virtual Hosts có nhiều quy tắc điều hướng tùy chỉnh, đồng thời mỗi host cũng có thể cấu hình một phiên bản PHP khác nhau. Hơn nữa, Virtual Host cũng có thể được cấu hình để hoạt động như một kết nối reverse proxy cho các web server khác như NodeJS.
Trong admin panel, vào phần Virtual Hosts, click vào dấu + ở góc trên bên phải để thêm một Virtual Host mới.
Bây giờ ta có thể thêm một tên Virtual Host tùy ý, rồi thiết lập root và đường dẫn cho file cấu hình thông qua các biến như $SERVER_ROOT
(chỉ root directory của web server OpenLiteSpeed) hay $VH_ROOT
(chỉ root directory của virtual host). Click Yes vào phần Enable Scripts/ExtApps để bảo đảm PHP có thể hoạt động trên Virtual Host.
Khi thiết lập Virtual Host, điền vào các trường sau với giá trị mong muốn (phần highlight là gợi ý):
- Virtual Host Name:
MyWebsite
- Virtual Host Root:
$SERVER_ROOT/MyWebsite/html/
- Config File:
conf/vhosts/MyWebsite/vhconf.conf
- Enable Scripts/ExtApps:
Yes
- Restrained:
Yes
Phần Restrained giúp ngăn chặn người dùng không truy cập vào các file có trong thư mục không nằm trong root directory của Virtual Host, kể cả khi có liên kết tượng trưng (symbolic link) trỏ đến những file nằm ngoài root directory.
Sau khi hoàn tất việc cài đặt, nhấn vào nút Save. Admin panel có thể sẽ hiển thị một thông báo yêu cầu restart để áp dụng thay đổi. Nhấn Graceful Restart như ở bước trên.
Bây giờ ta sẽ cấu hình Listener. Vào phần Listeners trong admin panel, click vào Default, nhấn dấu + để thêm. Trong menu dropdown, chọn Virtual Host Name đã gán trong cấu hình Virtual Host (ở ví dụ này là MyWebsite
).
Trong phần tên miền, nhập tên miền đầy đủ điều kiện dùng để phục vụ Virtual Host đã cấu hình. Trong ví dụ này là mywebsite.com
.
Sau đó click vào nút Save ở trên hàng Virtual Hosts Mapping.
Bên cạnh đó, bạn nên enable tính năng bảo mật TLS cho website. Trong phần General của Listener, cập nhật option Secure thành Yes
rồi đổi port từ 8088
thành 443
đối với các Listener phục vụ trang HTTPS.
Ngoài ra, ta cũng có thể thêm chứng chỉ và file key (nếu có) vào OpenLiteSpeed. Cụ thể, thêm các đường dẫn tương ứng vào phần SSL của cấu hình Listener bằng cách nhấn nút Edit trong hàng SSL Private key & Certificate.
Sau đó thực hiện Graceful Start như các bước trên.
Bây giờ ta đã cấu hình thành công Virtual Host, có Listener, đồng thời cũng thiết lập TLS cho mọi lưu lượng đi đến website. Sau khi cấu hình DNS để ánh xạ địa chỉ IP public của server, website sẽ có thể truy cập được tại tên miền đã được chỉ định sẵn.
Bài viết này đã hướng dẫn chi tiết cách cài đặt LOMP stack gồm 4 phần mềm mã nguồn mở: Linux, OpenLiteSpeed, MariaDB và PHP. Bây giờ ta có thể dễ dàng host nhiều loại ứng dụng PHP hay framework khác nhau như WordPress, Laravel hay Joomla trên server của mình.