Cách cài đặt SonarQube trên Ubuntu 22.04

theanh

Administrator
Nhân viên
SonarQube hay trước đây là Sonar là một nền tảng mã nguồn mở để phân tích mã tĩnh và bảo mật mã. Nó cho phép bạn thực hiện phân tích mã tĩnh và chất lượng mã để phát hiện lỗi và tăng cường bảo mật ứng dụng. Nó cũng cung cấp các báo cáo như mã trùng lặp, tiêu chuẩn mã hóa, độ phức tạp của mã và khuyến nghị bảo mật.

Với sonarQube, bạn có thể tự động phân tích mã tĩnh cho 29 ngôn ngữ lập trình. Bạn có thể dễ dàng tích hợp SonarQube với các công cụ CI/CD hiện có của mình như Jenkins, Azure DevOps hoặc IDE như IntelliJ và Visual Code Studio.

Trong hướng dẫn này, bạn sẽ tìm hiểu cách cài đặt phân tích mã tĩnh SonarQube trên máy chủ Ubuntu 22.04. Bạn cũng sẽ học cách cài đặt PostgreSQL, được sử dụng làm cơ sở dữ liệu cho SonarQube và máy chủ web Nginx, được sử dụng làm proxy ngược.

Điều kiện tiên quyết​

Trước khi bắt đầu hướng dẫn này, bạn cần có những thứ sau:
  • Máy chủ Ubuntu 22.04 được bật tường lửa UFW.
  • Người dùng không phải root có quyền sudo/administrator.
  • Tên miền trỏ đến địa chỉ IP của máy chủ Ubuntu.

Cài đặt Java OpenJDK​

Bước đầu tiên của bạn ở đây là cài đặt Java OpenJDK trên hệ thống Ubuntu của bạn. Máy chủ SonarQube yêu cầu Java OpenJDK v11 phải được cài đặt trên máy Linux của bạn.

Trước khi bắt đầu cài đặt các gói, hãy chạy lệnh apt sau để cập nhật và làm mới kho lưu trữ chỉ mục gói Ubuntu của bạn.
Mã:
sudo apt update
Sau đó, cài đặt Java OpenJDK v11 bằng lệnh apt sau. Phiên bản OpenJDK mặc định trên Ubuntu 22.04 mới nhất là Java OpenJDK v11.

Nhập Y khi được nhắc để xác nhận cài đặt và nhấn ENTER để tiếp tục.
Mã:
sudo apt install default-jdk


Sau khi Java OpenJDK được cài đặt, hãy xác minh phiên bản Java bằng lệnh java sau. Bạn sẽ thấy đầu ra của phiên bản Java được cài đặt trên hệ thống của mình.
Mã:
java -version

Cài đặt Hệ thống cơ sở dữ liệu PostgreSQL​

SonarQube hỗ trợ nhiều hệ thống cơ sở dữ liệu như PostgreSQL, Microsoft SQL Server và cơ sở dữ liệu oracle. Đối với ví dụ này, bạn sẽ sử dụng PostgreSQL làm cơ sở dữ liệu cho cài đặt SonarQube của mình.

Tại thời điểm viết bài này, phiên bản mới nhất của SonarQube yêu cầu ít nhất PostgreSQL v9.6. Trong hướng dẫn này, bạn sẽ cài đặt PostgreSQL v13 từ kho lưu trữ PostgreSQL chính thức.

Đầu tiên, hãy thêm khóa GPG của kho lưu trữ PostgreSQL bằng lệnh sau.
Mã:
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
Bây giờ, hãy thêm kho lưu trữ PostgreSQL cho hệ thống Ubuntu bằng lệnh sau.
Mã:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
Sau đó, cập nhật và làm mới chỉ mục gói ubuntu của bạn.
Mã:
sudo apt update


Bây giờ, cài đặt cơ sở dữ liệu PostgreSQL v13 thông qua lệnh apt bên dưới. Nhập Y khi được nhắc để xác nhận cài đặt, sau đó nhấn ENTER để tiếp tục.
Mã:
sudo apt install postgresql-13


Sau khi PostgreSQL được cài đặt, hãy chạy lệnh sau để xác minh dịch vụ 'postgresql' và để đảm bảo dịch vụ đang chạy.
Mã:
sudo systemctl is-enabled postgresql
sudo systemctl status postgresql
Bạn sẽ thấy đầu ra của dịch vụ 'postgresql' được bật, nghĩa là sẽ tự động chạy khi khởi động hệ thống. Và trạng thái hiện tại của dịch vụ 'postgresql' đang chạy.



Với PostgreSQL được cài đặt trên máy chủ của bạn, bạn đã sẵn sàng thiết lập cơ sở dữ liệu và người dùng mới cho SonarQube thông qua shell PostgreSQL.

Chạy lệnh sau để đăng nhập vào shell PostgreSQL.
Mã:
sudo -u postgres psql
Bây giờ, hãy chạy các truy vấn PostgreSQL sau để tạo cơ sở dữ liệu và người dùng mới cho SnonarQube. Trong ví dụ này, bạn sẽ tạo cơ sở dữ liệu PostgreSQL và người dùng 'sonarqube'. Và hãy chắc chắn thay đổi mật khẩu bằng một mật khẩu mạnh.
Mã:
CREATE USER sonarqube WITH PASSWORD 'Password';
CREATE DATABASE sonarqube OWNER sonarqube;
GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonarqube;


Tiếp theo, chạy các truy vấn sau để kiểm tra danh sách cơ sở dữ liệu và người dùng trên máy chủ PostgreSQL.
Mã:
\l
\du
Nếu cơ sở dữ liệu và người dùng của bạn đã được tạo, bạn sẽ thấy cơ sở dữ liệu 'sonarqube' trong danh sách cơ sở dữ liệu và người dùng 'sonarqube' trong danh sách người dùng.



Cuối cùng, hãy đăng xuất khỏi PostgreSQL bằng truy vấn bên dưới.
Mã:
\q

Thiết lập hệ thống​

Để cài đặt SonarQube trên hệ thống Linux, bạn phải có một người dùng chuyên dụng sẽ chạy SonarQube và một số cấu hình bổ sung như tham số ulimit và kernel.

Bây giờ, bạn sẽ tạo một người dùng mới cho SonarQube và thiết lập các tham số kernel tùy chỉnh thông qua tệp sysctl.conf và thiết lập ulimit.

Chạy lệnh sau để tạo một người dùng mới 'sonarqube' trên hệ thống của bạn.
Mã:
sudo useradd -b /opt/sonarqube -s /bin/bash sonarqube
Tiếp theo, mở tệp /etc/sysctl.conf bằng trình soạn thảo nano.
Mã:
sudo nano /etc/sysctl.conf
Thêm cấu hình sau vào cuối dòng. SonarQube yêu cầu tham số hạt nhân vm.max_map_count phải lớn hơn '524288' và fx.file-max phải lớn hơn '131072'.
Mã:
vm.max_map_count=524288
fs.file-max=131072
Lưu tệp và thoát khỏi trình chỉnh sửa khi bạn hoàn tất.

Bây giờ, hãy chạy lệnh sysctl bên dưới để áp dụng các thay đổi mới cho tệp '/etc/sysctl.conf'.
Mã:
sudo sysctl --system
Trong đầu ra sau, bạn có thể thấy các tham số hạt nhân mới được áp dụng.


Mã:
Tiếp theo, hãy chạy lệnh sau để thiết lập ulimit cho SonarQube. Điều này sẽ có hiệu lực tạm thời trên hệ thống của bạn, khi hệ thống được khởi động lại, ulimits sẽ trở về mặc định.
Mã:
ulimit -n 131072
ulimit -u 8192
Để cấu hình ulimit vĩnh viễn, hãy tạo tệp cấu hình mới '/etc/security/limits.d/99-sonarqube.conf' bằng lệnh sau.
Mã:
sudo nano /etc/security/limits.d/99-sonarqube.conf
Thêm cấu hình sau vào tệp.
Mã:
sonarqube - nofile 131072
sonarqube - nproc 8192
Lưu tệp và đóng trình chỉnh sửa khi bạn hoàn tất.

Bây giờ bạn đã hoàn tất cấu hình hệ thống Ubuntu của mình để cài đặt SnonarQube. Bạn sẽ tải xuống gói SonarQube và thiết lập cài đặt SonarQube ở bước tiếp theo.

Tải xuống gói SonarQube​

SonarQube có thể được cài đặt theo hai cách khác nhau, thông qua tệp zip và hình ảnh Docker. Trong ví dụ này, bạn sẽ cài đặt SonarQube thông qua gói tệp zip mà bạn sẽ tải xuống từ trang tải xuống SonarQube chính thức.

Tại thời điểm viết bài này, SonarQube phiên bản mới nhất v9.6.1, mà bạn sẽ cài đặt theo các bước sau.

Trước khi tải xuống gói SonarQube, hãy chạy lệnh apt sau để cài đặt một gói cơ bản như unzip và wget.
Mã:
sudo apt install unzip software-properties-common wget
Bây giờ, hãy tải xuống gói SonarQube thông qua lệnh wget bên dưới.
Mã:
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.6.1.59531.zip
Sau khi SonarQube được tải xuống, bạn sẽ thấy tệp zip 'sonarqube-9.6.1.59531.zip' trên ổ đĩa làm việc của bạn thư mục.

Giải nén gói SonarQube bằng lệnh giải nén bên dưới. Bạn sẽ nhận được một thư mục mới 'sonarqube-9.6.1.59531' nơi lưu trữ gói SonarQube.
Mã:
giải nén sonarqube-9.6.1.59531.zip
Di chuyển thư mục 'sonarqube-9.6.1.59531' đến '/opt/sonarqube' bằng lệnh bên dưới.
Mã:
mv sonarqube-9.6.1.59531 /opt/sonarqube
Cuối cùng, hãy thay đổi quyền sở hữu thư mục cài đặt SonarQube '/opt/sonarqube' thành người dùng 'sonarquba' thông qua lệnh chown như bên dưới.
Mã:
sudo chown -R sonarqube:sonarqube /opt/sonarqube
Bây giờ bạn đã tải gói SonarQube xuống thư mục cài đặt '/opt/sonarqube'. Tiếp theo, bạn sẽ cấu hình cài đặt SonarQube, sau đó thiết lập tệp dịch vụ systemd cho SonarQube.


Cấu hình SonarQube​

Sau khi tải gói SonarQube, bạn sẽ thiết lập cài đặt SonarQUbe bằng cách chỉnh sửa tệp cấu hình mặc định '/opt/sonarqube/conf/sonar.properties'.

Bạn sẽ thêm thông tin chi tiết về cơ sở dữ liệu PostgreSQL, thiết lập heap bộ nhớ tối đa cho quy trình Elasticsearch và thiết lập máy chủ web và cổng cho dịch vụ SonarQube thông qua tệp '/opt/sonarqube/conf/sonar.properties'. Và cuối cùng, bạn sẽ thiết lập SonarQube như một dịch vụ systemd.

Bây giờ, hãy mở tệp cấu hình SonarQube '/opt/sonarqube/conf/sonar.properties' bằng trình soạn thảo nano.
Mã:
nano /opt/sonarqube/conf/sonar.properties
Đối với cấu hình cơ sở dữ liệu, hãy bỏ chú thích một số tùy chọn sau và thay đổi giá trị mặc định bằng cách sử dụng thông tin chi tiết về cơ sở dữ liệu của bạn.
Mã:
sonar.jdbc.username=sonarqube
sonar.jdbc.password=Mật khẩu

sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
Bây giờ, bỏ chú thích cấu hình sau để thiết lập kích thước bộ nhớ heap tối đa cho quy trình elasticsearch. Trong ví dụ này, heap tối đa sẽ là 512 MB.
Mã:
sonar.search.javaOpts=-Xmx512m -Xms512m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError
Cuối cùng, bỏ chú thích và thay đổi cấu hình sau để thiết lập địa chỉ IP và cổng của SonarQube sẽ chạy. Ngoài ra, mức nhật ký sẽ là 'INFO" và được lưu trữ trong thư mục 'logs' của thư mục cài đặt SonarQube.
Mã:
sonar.web.host=127.0.0.1
sonar.web.port=9000
sonar.web.javaAdditionalOpts=-server

sonar.log.level=INFO
sonar.path.logs=logs
Lưu tệp và thoát khỏi trình chỉnh sửa khi bạn hoàn tất.

Sau khi bạn hoàn tất cấu hình SonarQube. Bây giờ, bạn sẽ thiết lập tệp dịch vụ systemd cho SonarQube. Điều này cho phép bạn dễ dàng kiểm soát quy trình SonarQube bằng cách sử dụng lệnh systemctl.

Chạy lệnh sau để tạo tệp dịch vụ systemd mới '/etc/systemd/system/sonarqube.service'.
Mã:
sudo nano /etc/systemd/system/sonarqube.service
Thêm cấu hình sau vào tệp.
Mã:
[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop
User=sonarqube
Group=sonarqube
Restart=always
LimitNOFILE=65536
LimitNPROC=4096

[Install]
WantedBy=multi-user.target
Lưu tệp và thoát khỏi trình chỉnh sửa khi bạn hoàn tất.

Bây giờ, hãy tải lại trình quản lý systemd bằng cách sử dụng lệnh sau lệnh.
Mã:
sudo systemctl daemon-reload
Sau đó, khởi động và kích hoạt 'sonarqube.service' thông qua lệnh systemctl bên dưới.
Mã:
sudo systemctl start sonarqube.service
sudo systemctl enable sonarqube.service


Cuối cùng, xác minh trạng thái 'sonarqube.service' bằng lệnh sau và đảm bảo trạng thái của nó đang chạy.
Mã:
sudo systemctl status sonarqube.service
Bạn sẽ thấy đầu ra trong ảnh chụp màn hình sau. Trạng thái 'sonarqube.service' đang chạy và cũng được bật, nghĩa là nó sẽ tự động chạy khi khởi động hệ thống.



Bây giờ SonarQube đang chạy như một dịch vụ systemd, bạn sẽ cài đặt và thiết lập proxy ngược cho SonarQube chạy trên máy chủ cục bộ với cổng TCP mặc định là '9000'.

Chạy SonarQube bằng Proxy ngược​

Cài đặt SonarQube của bạn hiện đang chạy, giờ bạn có thể cài đặt máy chủ web Nginx và thiết lập các khối máy chủ sẽ được sử dụng làm proxy ngược cho SonarQube.

Chạy lệnh apt sau để cài đặt máy chủ web Nginx vào hệ thống Ubuntu của bạn. Nhập Y khi được nhắc để xác nhận cài đặt và nhấn ENTER để tiếp tục.
Mã:
sudo apt install nginx


Sau khi nginx được cài đặt, hãy xác minh dịch vụ nginx và đảm bảo trạng thái dịch vụ đang chạy thông qua lệnh systemctl như bên dưới.
Mã:
sudo systemctl is-enabled nginx
sudo systemctl status nginx
Bạn sẽ thấy đầu ra của dịch vụ nginx được bật, điều này có nghĩa là nó sẽ tự động chạy khi khởi động hệ thống. Và trạng thái hiện tại của dịch vụ nginx đang chạy.



Sau khi máy chủ web Nginx đang chạy, bạn sẽ tạo cấu hình khối máy chủ mới sẽ được sử dụng làm proxy ngược cho SonarQube.

Tạo cấu hình khối máy chủ mới '/etc/nginx/sites-available/sonarqube.conf' bằng lệnh sau.
Mã:
sudo nano /etc/nginx/sites-available/sonarqube.conf
Thêm cấu hình sau vào tệp của bạn và đảm bảo thay đổi tên miền.
Mã:
server {

 listen 80;
 server_name sonar.howtoforge.local;
 access_log /var/log/nginx/sonar.access.log;
 error_log /var/log/nginx/sonar.error.log;
 proxy_buffers 16 64k;
 proxy_buffer_size 128k;

 location / {
 proxy_pass http://127.0.0.1:9000;
 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
 proxy_redirect off;
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Forwarded-Proto http;
 }
}
Lưu tệp và thoát khỏi trình chỉnh sửa khi bạn hoàn tất.

Tiếp theo, kích hoạt cấu hình khối máy chủ 'sonarqube.conf' bằng cách tạo liên kết tượng trưng của tệp đó tới '/etc/nginx/sites-enabled' thư mục. Sau đó, hãy xác minh các tệp cấu hình Nginx của bạn.
Mã:
sudo ln -s /etc/nginx/sites-available/sonarqube.conf /etc/nginx/sites-enabled/
sudo nginx -t
Nếu bạn có các tệp cấu hình Nginx phù hợp và chính xác, bạn sẽ thấy thông báo đầu ra như "kiểm tra thành công".

Cuối cùng, hãy chạy lệnh systemctl bên dưới để khởi động lại dịch vụ nginx và áp dụng cấu hình khối máy chủ mới.
Mã:
sudo systemctl restart nginx

Cài đặt SonarQube​

Sau khi hoàn tất cấu hình proxy ngược cho SonarQube, giờ bạn có thể truy cập cài đặt SonarQube thông qua tên miền của mình và thiết lập một số cấu hình cơ bản của SonarQube.

Mở trình duyệt web và truy cập tên miền để cài đặt SonarQube (ví dụ: http://sonar.howtoforge.local).

Bây giờ bạn sẽ thấy trang đăng nhập SonarQube. Nhập tên người dùng và mật khẩu mặc định là admin/admin và nhấp vào Đăng nhập.



Sau khi đăng nhập, bạn sẽ được yêu cầu thiết lập mật khẩu mới cho SnonarQube. Nhập mật khẩu cũ là admin, sau đó nhập mật khẩu mạnh mới và lặp lại, sau đó nhấp vào Cập nhật.



Bây giờ bạn sẽ thấy bảng điều khiển người dùng SonarQube trong ảnh chụp màn hình sau.


Kết luận​

Trong hướng dẫn này, bạn đã cài đặt SonarQube trên máy chủ Ubuntu 22.04 mới nhất. Ngoài ra, bạn đã hoàn tất cài đặt cơ bản cơ sở dữ liệu PostgreSQL thông qua kho lưu trữ PostgreSQL chính thức và cài đặt máy chủ web Nginx. Sau đó, bạn cũng đã định cấu hình proxy ngược cho SOnarQube bằng các khối máy chủ Nginx.

SonarQube hiện đã được cài đặt trên máy chủ Ubuntu của bạn. Bây giờ bạn có thể thêm dự án mà bạn sẽ phân tích vào SonarQube thông qua kho lưu trữ git.
 
Back
Bên trên