From 46aa8e052dbcd2a26d6bd2215d667d017a531c74 Mon Sep 17 00:00:00 2001 From: Martin Date: Tue, 6 May 2025 10:07:15 +0200 Subject: [PATCH] fix(minio): minor readme fix added sonarqube --- README.md | 9 +++++ minio/README.md | 2 +- minio/config.json | 6 +-- sonarqube/CHANGELOG.md | 2 + sonarqube/Dockerfile | 44 +++++++++++++++++++++ sonarqube/README.md | 87 +++++++++++++++++++++++++++++++++++++++++ sonarqube/config.json | 49 +++++++++++++++++++++++ sonarqube/icon.png | Bin 0 -> 1618 bytes sonarqube/logo.png | Bin 0 -> 13605 bytes sonarqube/run.sh | 35 +++++++++++++++++ 10 files changed, 230 insertions(+), 4 deletions(-) create mode 100644 sonarqube/CHANGELOG.md create mode 100644 sonarqube/Dockerfile create mode 100644 sonarqube/README.md create mode 100644 sonarqube/config.json create mode 100644 sonarqube/icon.png create mode 100644 sonarqube/logo.png create mode 100644 sonarqube/run.sh diff --git a/README.md b/README.md index 3cb641e..d70f480 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,15 @@ _MinIO is a High Performance Object Storage released under GNU Affero General Pu [Official Repo](https://github.com/minio/minio) +### [SonarQube](./sonarqube) + +![Supports amd64 Architecture][amd64-shield] +![Supports aarch64 Architecture][aarch64-shield] + +_SonarQube Server helps you comply with common code security standards, such as the NIST SSDF, OWASP, CWE, STIG, and CASA._ + +[Official Repo](https://github.com/SonarSource/sonarqube) + ## Sponsoring โค๏ธ If you like this add-on and would like to support my work and future projects, you can buy me a coffee. โ˜• diff --git a/minio/README.md b/minio/README.md index b5b16b9..1ae69ea 100644 --- a/minio/README.md +++ b/minio/README.md @@ -36,7 +36,7 @@ drive: storage Once installed, access MinIO via the sidebar or at: -`http://:9000` (if Ingress is not available) +`http://:9001` (if Ingress is not available) ## ๐Ÿงพ Requirements diff --git a/minio/config.json b/minio/config.json index 82c13f9..b0fb223 100644 --- a/minio/config.json +++ b/minio/config.json @@ -21,10 +21,10 @@ "9001/tcp": 9001 }, "ports_description": { - "9000/tcp": "Web Interface", - "9001/tcp": "Web Console" + "9001/tcp": "Web Interface", + "9000/tcp": "Web Console" }, - "webui": "[PROTO:ssl]://[HOST]:[PORT:9000]", + "webui": "[PROTO:ssl]://[HOST]:[PORT:9001]", "map": { "config": "rw", "share": "rw", diff --git a/sonarqube/CHANGELOG.md b/sonarqube/CHANGELOG.md new file mode 100644 index 0000000..0946ace --- /dev/null +++ b/sonarqube/CHANGELOG.md @@ -0,0 +1,2 @@ +## 0.0.1-beta +- Initial release \ No newline at end of file diff --git a/sonarqube/Dockerfile b/sonarqube/Dockerfile new file mode 100644 index 0000000..50174b1 --- /dev/null +++ b/sonarqube/Dockerfile @@ -0,0 +1,44 @@ +# Use Alpine as the base image +FROM alpine:3.18 + +LABEL io.hass.name="SonarQube" +LABEL io.hass.description="SonarQube Server helps you comply with common code security standards, such as the NIST SSDF, OWASP, CWE, STIG, and CASA." +LABEL io.hass.arch="amd64|aarch64" +LABEL io.hass.type="addon" +LABEL io.hass.version="0.0.1-beta" + +# Build parameters +ARG SONARQUBE_VERSION=9.9.6.92038 +ENV SONARQUBE_VERSION=${SONARQUBE_VERSION} \ + SONARQUBE_HOME=/opt/sonarqube \ + SONARQUBE_BIN=/opt/sonarqube/bin/linux-x86-64 + +# Install runtime dependencies +RUN apk add --no-cache \ + openjdk11-jre \ + curl \ + unzip \ + su-exec \ + tzdata + +# Create a user with uid/gid 1000 +RUN addgroup -S sonarqube -g 1000 \ + && adduser -S sonarqube -u 1000 -G sonarqube + +# Download and extract SonarQube +RUN curl -L "https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-${SONARQUBE_VERSION}.zip" -o /tmp/sonarqube.zip \ + && unzip /tmp/sonarqube.zip -d /opt \ + && mv /opt/sonarqube-${SONARQUBE_VERSION} "${SONARQUBE_HOME}" \ + && rm /tmp/sonarqube.zip \ + && chown -R sonarqube:sonarqube "${SONARQUBE_HOME}" + +# Copy the startup script +COPY run.sh /usr/local/bin/run.sh +RUN chmod +x /usr/local/bin/run.sh + +# Expose the internal port (always 9000) +EXPOSE 9000 + +# Run as the 'sonarqube' user +USER sonarqube +ENTRYPOINT ["/usr/local/bin/run.sh"] diff --git a/sonarqube/README.md b/sonarqube/README.md new file mode 100644 index 0000000..a998b9e --- /dev/null +++ b/sonarqube/README.md @@ -0,0 +1,87 @@ +# Home Assistant Add-on: SonarQube + +![Supports amd64 Architecture](https://img.shields.io/badge/amd64-yes-green.svg) +![Supports aarch64 Architecture](https://img.shields.io/badge/aarch64-yes-green.svg) + +This add-on provides a **SonarQube** server that helps you comply with common code security standards such as the NIST SSDF, OWASP, CWE, STIG, and CASA. It is designed to be **production-ready**, secure, and lightweight, and integrates seamlessly with Home Assistant. + +## โš™๏ธ Configuration + +The add-on uses the following configuration which is defined in the `config.json` file: + +```yaml +data_path: /share/sonarqube/data +extensions_path: /share/sonarqube/extensions +ui_port: 9000 +jdbc_url: "jdbc:postgresql://sonarqube_db:5432/sonar" +jdbc_username: "" +jdbc_password: "" +TZ: "Europe/Rome" +``` + +### Parameters + +| Variable | Default | Description | +|--------------------|-------------------------------|-----------------------------------------------------------------| +| `data_path` | `/share/sonarqube/data` | Directory where SonarQube data is stored | +| `extensions_path` | `/share/sonarqube/extensions` | Directory for SonarQube extensions | +| `ui_port` | `9000` | Port for the SonarQube web interface | +| `jdbc_url` | (Required) | JDBC URL for the database connection (e.g., PostgreSQL) | +| `jdbc_username` | (Required) | Username for the JDBC database connection | +| `jdbc_password` | (Required) | Password for the JDBC database connection | +| `TZ` | `Europe/Rome` | Timezone setting for the add-on | + +## ๐Ÿš€ Installation + +1. Go to Home Assistant โ†’ **Supervisor โ†’ Add-on Store** +2. Add the repository (Settings โ†’ Repositories โ†’ `https://github.com/martemme/HomeAssistantAddons`) +3. Install the **SonarQube** add-on +4. Configure the required options and start the add-on + +## ๐ŸŒ Access + +Once installed, access the SonarQube web interface at: + +`http://:9000` + +## ๐Ÿงพ Requirements + +- Home Assistant OS or Supervised installation +- Supported architectures: `amd64`, `aarch64` +- Persistent storage for `/share/sonarqube/data` and `/share/sonarqube/extensions` +- A running PostgreSQL database for SonarQube connectivity + +## ๐Ÿ“‚ Repository Structure + +```bash +sonarqube/ +โ”œโ”€โ”€ CHANGELOG.md # Changelog for the add-on +โ”œโ”€โ”€ config.json # Add-on configuration definition +โ”œโ”€โ”€ Dockerfile # Dockerfile for the SonarQube container +โ”œโ”€โ”€ icon.png # Icon for the add-on +โ”œโ”€โ”€ logo.png # Logo for the add-on +โ”œโ”€โ”€ README.md # This file +โ””โ”€โ”€ run.sh # Startup script for SonarQube +``` + +## ๐Ÿง  Notes + +- The add-on requires a PostgreSQL database. Ensure that `jdbc_url`, `jdbc_username`, and `jdbc_password` are correctly configured. +- Timezone configuration can be customized via the `TZ` option. +- The Home Assistant add-on system creates the options file (`/data/options.json`) automatically based on your configuration. + +## ๐Ÿ›ก Security + +> โš ๏ธ Always use strong passwords and ensure secure network settings, especially for database connections. + +--- + +Made with โค๏ธ for automation and resilience. + +[semver]: http://semver.org/spec/v2.0.0.html +[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg +[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg +[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg +[i386-shield]: https://img.shields.io/badge/i386-yes-green.svg +[repository-badge]: https://img.shields.io/badge/Add%20repository%20to%20my-Home%20Assistant-41BDF5?logo=home-assistant&style=for-the-badge +[repository-url]: https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Fmartemme%2FHomeAssistantAddons \ No newline at end of file diff --git a/sonarqube/config.json b/sonarqube/config.json new file mode 100644 index 0000000..c2d7f25 --- /dev/null +++ b/sonarqube/config.json @@ -0,0 +1,49 @@ +{ + "name": "SonarQube", + "version": "0.0.1-beta", + "slug": "sonarqube", + "description": "SonarQube Server helps you comply with common code security standards, such as the NIST SSDF, OWASP, CWE, STIG, and CASA.", + "arch": ["amd64", "armv7", "aarch64"], + "startup": "services", + "boot": "auto", + "host_network": false, + "privileged": true, + "options": { + "data_path": "/share/sonarqube/data", + "extensions_path": "/share/sonarqube/extensions", + "ui_port": 9000, + "jdbc_url": "jdbc:postgresql://sonarqube_db:5432/sonar", + "jdbc_username": "", + "jdbc_password": "", + "TZ": "Europe/Rome" + }, + "schema": { + "data_path": "string", + "extensions_path": "string", + "ui_port": "integer", + "jdbc_url": "string", + "jdbc_username": "string", + "jdbc_password": "string", + "TZ": "string" + }, + "ports": { + "ui": "ui_port" + }, + "ports_description": { + "ui": "Web Interface" + }, + "map": ["config"], + "environment": [ + "TZ", + "SONAR_JDBC_URL", + "SONAR_JDBC_USERNAME", + "SONAR_JDBC_PASSWORD" + ], + "image": "sonarqube:community", + "webui": "http://[HOST]:[PORT:ui]", + "build_from": { + "amd64": "alpine:3.18", + "aarch64": "alpine:3.18" + } + } + \ No newline at end of file diff --git a/sonarqube/icon.png b/sonarqube/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..049f89b22570665c25db7805c54b227579a0e552 GIT binary patch literal 1618 zcmV-Y2CeytP)@%v++;=I=L$KCbP@}D16sHiQAdL?D+cr%ir}ui`R6fJTAJX2vgjdq)_JYwYNX?pzUvBouVVlJ z1*b_wK~#90?V8!L;wlt|HDn+YCLke$#`yj(c~oXhchxCd@PhA-Y~B8~W*~<{Boc{4 zB9TZW5{X12kx1ls$ zbKm!uh30xfgSgcnC>IfGfx0_t08Uh%J_aD|(SizphU=j1P^q2NM6`~MI~z8^lszm5 zRNc>sevE}7gN_|VPo*?%qD(yN0t$OT5*cfH9{}JF812zXFCt4TRl?ZBpZMFXP8h=7u<X$_X-sQUX9cV9FvWaAbDzMne zb|>QQCHw#3d!SjEO=lx_A5?3u6#G{8sHI{yQ$}f=?A$!3fM#&Ak#Pt2a?Q6{G=MV3 zyQS`pe66}TZ&2{VUn%Uf>7ucgWwUz(E3!{*l6as^aw)v~kuEk=3pS>9P$k%yM?0KU z!%kgdxgFyJ?+kL;a%CSK43TGqBBXz$fYo+qCjZ|u5HmB_*=4hE}|5J_qQ< zb|2zOsd8Rc328@2r>UC#d3AQ&cXLZvp`^WX#oy_0<0ui^SgK1{v6)x;7jMdh``)r~ z)*ne{(UH4fwc5^ko zUVsbJN)eW6h~KtIs2H2N>$*D3>#3QNwgkSQe?v)wwEwa90!vj~*AGv>{y8O3bw95{ zzdm5YYSqc%sq%l$@;Am!ck$nM6w;%Bd7h*PPPnIRypJSXQ{5TxM+eghd5e;Epu^Q_wrCsITva^FIacg3_i>?6*O0p*1N` z+SWauWc^KkB10t%m1)to1OPyON|=N_2`wTLi9{liNF)-8L?V$$B=Q&j1LHwMe3w^o QtN;K207*qoM6N<$f-@C0rT_o{ literal 0 HcmV?d00001 diff --git a/sonarqube/logo.png b/sonarqube/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..77dbd8d21e5cca0ddb0f4f67580127e5e87cd635 GIT binary patch literal 13605 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 literal 0 HcmV?d00001 diff --git a/sonarqube/run.sh b/sonarqube/run.sh new file mode 100644 index 0000000..8210ee3 --- /dev/null +++ b/sonarqube/run.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env sh +set -e + +# --- Default paths se non passati via env --- +: "${DATA_PATH:=/share/sonarqube/data}" +: "${EXT_PATH:=/share/sonarqube/extensions}" +: "${TZ:=Europe/Rome}" + +# --- Variabili JDBC (obbligatorie) --- +: "${SONAR_JDBC_URL:?Serve SONAR_JDBC_URL, es. jdbc:postgresql://sonarqube_db:5432/sonar}" +: "${SONAR_JDBC_USERNAME:?Serve SONAR_JDBC_USERNAME}" +: "${SONAR_JDBC_PASSWORD:?Serve SONAR_JDBC_PASSWORD}" + +# --- Imposto timezone a container start --- +ln -snf "/usr/share/zoneinfo/${TZ}" /etc/localtime && echo "${TZ}" > /etc/timezone + +# --- Creo e monto le cartelle host in container --- +mkdir -p "${DATA_PATH}" "${EXT_PATH}" +cd "${SONARQUBE_HOME}" + +# sposto le cartelle interne originali (evt. backup) +[ -d data ] && mv data data.orig || true +[ -d extensions ]&& mv extensions extensions.orig || true + +# link simbolici verso le cartelle condivise +ln -s "${DATA_PATH}" data +ln -s "${EXT_PATH}" extensions + +# --- Esporto le variabili per SonarQube --- +export SONAR_JDBC_URL +export SONAR_JDBC_USERNAME +export SONAR_JDBC_PASSWORD + +# --- Avvio SonarQube in foreground --- +exec "${SONARQUBE_BIN}/sonar.sh" console \ No newline at end of file