ติดตั้ง SonarQube โดย Docker-compose
การรักษาคุณภาพของโค้ดเป็นสิ่งสำคัญสำหรับการพัฒนาซอฟต์แวร์ที่มีประสิทธิภาพและง่ายต่อการบำรุงรักษา SonarQube เป็นเครื่องมือวิเคราะห์คุณภาพโค้ดอัตโนมัติยอดนิยมที่ช่วยค้นพบจุดบกพร่องและแนะนำวิธีปรับปรุงโค้ดให้ดีขึ้น
ผมใช้ SonarQube ในฐานะ Code Review มาสักพักแล้ว โดยจะใช้บน SonarCloud ซึ่งก็เสียเงินค่าบริการตามจำนวนโค็ดที่ใช้ในการแสกน ในช่วงเริ่มต้นค่าบริการไม่แพงมากพอยอมรับได้ แต่พอมีโปรเจ็กต์ที่ต้องใช้แสกนเยอะขึ้น ผมเลยคิดว่าติดตั้งเองน่าจะคุ้มกว่า
ในบทความนี้ เราจะมาดูวิธีการติดตั้ง SonarQube บนระบบ Docker ด้วย docker-compose ซึ่งเป็นวิธีง่ายและรวดเร็วในการนำ SonarQube มาใช้งานได้อย่างราบรื่น โดยไม่ต้องยุ่งยากกับการติดตั้งและกำหนดค่าแบบดั้งเดิม
SonarQube คืออะไร?
SonarQube จะช่วยให้ทีมพัฒนาสามารถตรวจสอบคุณภาพโค้ด ติดตามประวัติการเปลี่ยนแปลง และรักษาระดับคุณภาพไว้ได้อย่างต่อเนื่องตลอดการพัฒนาซอฟต์แวร์
ซึ่งช่วยให้โปรเจ็กต์ดูดีและโค้ดที่ดูสะอาด ไม่มีข้อบกพร่องไร้สาระ (ซึ่งบางครั้งอาจเกิดขึ้นได้แม้แต่กับนักพัฒนาที่เก่งที่สุด) และช่องโหว่ต่างๆ
โดยพื้นฐานแล้ว SonarQube คือเครื่องมือวิเคราะห์ที่จะตรวจสอบโค้ดของเราและส่งสัญญาณว่ามีบางอย่างผิดปกติหรือไม่
เราเห็นอะไรจากภาพด้านบน?
- ก่อนอื่น SonarQube ตรวจพบ 13 ข้อบกพร่อง (Bugs) ของโปรเจ็กต์ ซึ่งอาจทำให้เกิดปัญหามากมาย
- ไม่มีช่องโหว่ (Vulnerabilities) ซึ่งหมายความว่าโค้ดของเราใช้ไลบรารีเวอร์ชันที่ปลอดภัย แต่บางครั้งหากเราใช้ไลบรารีที่รู้จักกันดี ก็อาจพบช่องโหว่ซึ่งทำให้โครงการไม่ปลอดภัยและอาจทำให้แฮกเกอร์สามารถโจมตีได้ นั่นคือสิ่งที่เราต้องการป้องกัน
- Security hotspots ยังแสดงจุดอ่อนที่เป็นไปได้ในโค้ดของเรา ซึ่งผู้โจมตีอาจนำไปใช้ได้
- Code Smells เป็นสัญญาณบ่งชี้ว่าโค้ดบางส่วนในโครงการไม่เหมาะสม หรืออ่านไม่ออก หรือแม้แต่เขียนด้วยแนวทางปฏิบัติที่ไม่ดี
- Coverage แสดงจำนวนบรรทัดของโค้ดที่การทดสอบครอบคลุมจริง
- Duplications - เรามีกี่แห่งที่มีตรรกะเดียวกัน แต่ซ้ำซ้อนอย่างเห็นได้ชัด
วิธีติดตั้ง Sonarqube บน Ubuntu
พิมพ์คำสั่งตามนี้
$ apt update && apt upgrade -y
$ apt install -y ntp
$ timedatectl set-timezone Asia/Bangkok
$ sysctl -w vm.max_map_count=262144
$ sysctl -w fs.file-max=131072
$ ulimit -n 131072
$ ulimit -u 8192
เตรียม docker-compose.yml
services:
sonarqube:
image: sonarqube:10-community
hostname: sonarqube
container_name: sonarqube
ports:
- 9001:9000
depends_on:
- sonarqube-db
environment:
SONAR_JDBC_URL: jdbc:postgresql://sonarqube-db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
SONAR_WEB_CONTEXT: "/"
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
restart: always
logging:
driver: "json-file"
options:
max-file: 5
max-size: 50m
networks:
- sonarqube_network
sonarqube-db:
image: postgres:15.2-alpine3.17
hostname: postgresql
container_name: postgresql
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
restart: always
logging:
driver: "json-file"
options:
max-file: 5
max-size: 50m
networks:
- sonarqube_network
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
postgresql:
postgresql_data:
networks:
sonarqube_network:
external: true
name: sonarqube
ติดตั้ง Sonarqube โดย docker-compose.yml
$ docker network create sonarqube
$ docker compose up -d
เตรียมการใช้งาน Sonarqube
หลังจากนั้น SonarQube จะพร้อมใช้งานที่ http://localhost:9001 หรือ http://id_address:9001
แล้วเข้าสู่ระบบด้วย
- user: admin
- pass: admin
หลังจากนั้นเราก็ทำการเปลี่ยนรหัสผ่านตามต้องการ
โดยรวมแล้ว SonarQube ช่วยให้ทีมพัฒนาสามารถตรวจสอบคุณภาพโค้ด ติดตามประวัติการเปลี่ยนแปลง และรักษาระดับคุณภาพไว้ได้อย่างต่อเนื่องตลอดการพัฒนาซอฟต์แวร์
**เพิ่มเติมไปดูการทำ sonarqube ให้เรียกผ่าน https:// กัน