ติดตั้ง SonarQube โดย Docker-compose

การรักษาคุณภาพของโค้ดเป็นสิ่งสำคัญสำหรับการพัฒนาซอฟต์แวร์ที่มีประสิทธิภาพและง่ายต่อการบำรุงรักษา SonarQube เป็นเครื่องมือวิเคราะห์คุณภาพโค้ดอัตโนมัติยอดนิยมที่ช่วยค้นพบจุดบกพร่องและแนะนำวิธีปรับปรุงโค้ดให้ดีขึ้น

ผมใช้ SonarQube ในฐานะ Code Review มาสักพักแล้ว โดยจะใช้บน SonarCloud ซึ่งก็เสียเงินค่าบริการตามจำนวนโค็ดที่ใช้ในการแสกน ในช่วงเริ่มต้นค่าบริการไม่แพงมากพอยอมรับได้ แต่พอมีโปรเจ็กต์ที่ต้องใช้แสกนเยอะขึ้น ผมเลยคิดว่าติดตั้งเองน่าจะคุ้มกว่า

ในบทความนี้ เราจะมาดูวิธีการติดตั้ง SonarQube บนระบบ Docker ด้วย docker-compose ซึ่งเป็นวิธีง่ายและรวดเร็วในการนำ SonarQube มาใช้งานได้อย่างราบรื่น โดยไม่ต้องยุ่งยากกับการติดตั้งและกำหนดค่าแบบดั้งเดิม

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:// กัน

ทำ SonarQube server เรียกผ่าน https
จากครั้งที่แล้วได้บอกวิธีการติดตั้ง SonarQube ผ่าน docker-compose ไปแล้ว ติดตั้ง SonarQube โดย Docker-composeการรักษาคุณภาพของโค้ดเป็นสิ่งสำคัญสำหรับการพัฒนาซอฟต์แวร์ที่มีประสิทธิภาพและง่ายต่อการบำรุงรักษา SonarQube เป็นเครื่องมือวิเคราะห์คุณภาพโค้ดอัตโนมัติ