NOISSUE - Update SMQ version

Signed-off-by: dusan <borovcanindusan1@gmail.com>
This commit is contained in:
dusan
2025-11-28 18:36:50 +01:00
parent a257e8049e
commit 8e8e02f0cb
6 changed files with 383 additions and 1 deletions
@@ -114,6 +114,11 @@ services:
networks: !override
- magistrala-base-net
notifications:
networks: !override
- magistrala-base-net
openbao:
volumes:
- ./addons/certs/openbao-entrypoint.sh:/entrypoint.sh
+19 -1
View File
@@ -239,6 +239,11 @@ SMQ_USERS_HTTP_HOST=users
SMQ_USERS_HTTP_PORT=9002
SMQ_USERS_HTTP_SERVER_CERT=
SMQ_USERS_HTTP_SERVER_KEY=
SMQ_USERS_GRPC_HOST=users
SMQ_USERS_GRPC_PORT=7002
SMQ_USERS_GRPC_SERVER_CERT=${GRPC_MTLS:+./ssl/certs/domains-grpc-server.crt}${GRPC_TLS:+./ssl/certs/domains-grpc-server.crt}
SMQ_USERS_GRPC_SERVER_KEY=${GRPC_MTLS:+./ssl/certs/domains-grpc-server.key}${GRPC_TLS:+./ssl/certs/domains-grpc-server.key}
SMQ_USERS_GRPC_SERVER_CA_CERTS=${GRPC_MTLS:+./ssl/certs/ca.crt}${GRPC_TLS:+./ssl/certs/ca.crt}
SMQ_USERS_DB_HOST=users-db
SMQ_USERS_DB_PORT=5432
SMQ_USERS_DB_USER=supermq
@@ -266,7 +271,12 @@ SMQ_VERIFICATION_URL_PREFIX=http://localhost/verify-email
SMQ_VERIFICATION_EMAIL_TEMPLATE=verification-email.tmpl
#### Users Client Config
SMQ_USERS_URL=users:9002
SMQ_USERS_URL=http://users:9002
SMQ_USERS_GRPC_URL=users:7002
SMQ_USERS_GRPC_TIMEOUT=300s
SMQ_USERS_GRPC_CLIENT_CERT=${GRPC_MTLS:+./ssl/certs/domains-grpc-client.crt}
SMQ_USERS_GRPC_CLIENT_KEY=${GRPC_MTLS:+./ssl/certs/domains-grpc-client.key}
SMQ_USERS_GRPC_CLIENT_CA_CERTS=${GRPC_MTLS:+./ssl/certs/ca.crt}
### Email utility
SMQ_EMAIL_HOST=host.docker.internal
@@ -275,6 +285,13 @@ SMQ_EMAIL_USERNAME=from@example.com
SMQ_EMAIL_PASSWORD=password
SMQ_EMAIL_FROM_ADDRESS=from@example.com
SMQ_EMAIL_FROM_NAME=Example
SMQ_EMAIL_INVITATION_TEMPLATE=invitation-sent-email.tmpl
SMQ_EMAIL_ACCEPTANCE_TEMPLATE=invitation-accepted-email.tmpl
SMQ_EMAIL_REJECTION_TEMPLATE=invitation-rejected-email.tmpl
### Notifications
SMQ_NOTIFICATIONS_LOG_LEVEL=debug
SMQ_NOTIFICATIONS_INSTANCE_ID=
### Google OAuth2
SMQ_GOOGLE_CLIENT_ID=
@@ -542,5 +559,6 @@ SMQ_GRAFANA_ADMIN_PASSWORD=supermq
## Allow unverified user to access
SMQ_ALLOW_UNVERIFIED_USER=true
# Docker image tag
SMQ_RELEASE_TAG=latest
+60
View File
@@ -846,6 +846,15 @@ services:
SMQ_USERS_HTTP_PORT: ${SMQ_USERS_HTTP_PORT}
SMQ_USERS_HTTP_SERVER_CERT: ${SMQ_USERS_HTTP_SERVER_CERT}
SMQ_USERS_HTTP_SERVER_KEY: ${SMQ_USERS_HTTP_SERVER_KEY}
SMQ_USERS_GRPC_HOST: ${SMQ_USERS_GRPC_HOST}
SMQ_USERS_GRPC_PORT: ${SMQ_USERS_GRPC_PORT}
## Compose supports parameter expansion in environment,
## Eg: ${VAR:+replacement} or ${VAR+replacement} -> replacement if VAR is set and non-empty, otherwise empty
## Eg :${VAR:-default} or ${VAR-default} -> value of VAR if set and non-empty, otherwise default
SMQ_USERS_GRPC_SERVER_CERT: ${SMQ_USERS_GRPC_SERVER_CERT:+/users-grpc-server.crt}
SMQ_USERS_GRPC_SERVER_KEY: ${SMQ_USERS_GRPC_SERVER_KEY:+/users-grpc-server.key}
SMQ_USERS_GRPC_SERVER_CA_CERTS: ${SMQ_USERS_GRPC_SERVER_CA_CERTS:+/users-grpc-server-ca.crt}
SMQ_USERS_GRPC_CLIENT_CA_CERTS: ${SMQ_USERS_GRPC_CLIENT_CA_CERTS:+/users-grpc-client-ca.crt}
SMQ_USERS_DB_HOST: ${SMQ_USERS_DB_HOST}
SMQ_USERS_DB_PORT: ${SMQ_USERS_DB_PORT}
SMQ_USERS_DB_USER: ${SMQ_USERS_DB_USER}
@@ -894,6 +903,7 @@ services:
SMQ_ALLOW_UNVERIFIED_USER: ${SMQ_ALLOW_UNVERIFIED_USER}
ports:
- ${SMQ_USERS_HTTP_PORT}:${SMQ_USERS_HTTP_PORT}
- ${SMQ_USERS_GRPC_PORT}:${SMQ_USERS_GRPC_PORT}
networks:
- supermq-base-net
volumes:
@@ -932,6 +942,56 @@ services:
bind:
create_host_path: true
notifications:
image: docker.io/supermq/notifications:${SMQ_RELEASE_TAG}
container_name: supermq-notifications
depends_on:
- nats
restart: on-failure
environment:
SMQ_NOTIFICATIONS_LOG_LEVEL: ${SMQ_NOTIFICATIONS_LOG_LEVEL}
SMQ_NOTIFICATIONS_INSTANCE_ID: ${SMQ_NOTIFICATIONS_INSTANCE_ID}
SMQ_ES_URL: ${SMQ_ES_URL}
SMQ_JAEGER_URL: ${SMQ_JAEGER_URL}
SMQ_JAEGER_TRACE_RATIO: ${SMQ_JAEGER_TRACE_RATIO}
SMQ_SEND_TELEMETRY: ${SMQ_SEND_TELEMETRY}
SMQ_EMAIL_HOST: ${SMQ_EMAIL_HOST}
SMQ_EMAIL_PORT: ${SMQ_EMAIL_PORT}
SMQ_EMAIL_USERNAME: ${SMQ_EMAIL_USERNAME}
SMQ_EMAIL_PASSWORD: ${SMQ_EMAIL_PASSWORD}
SMQ_EMAIL_FROM_ADDRESS: ${SMQ_EMAIL_FROM_ADDRESS}
SMQ_EMAIL_FROM_NAME: ${SMQ_EMAIL_FROM_NAME}
SMQ_EMAIL_INVITATION_TEMPLATE: ${SMQ_EMAIL_INVITATION_TEMPLATE}
SMQ_EMAIL_ACCEPTANCE_TEMPLATE: ${SMQ_EMAIL_ACCEPTANCE_TEMPLATE}
SMQ_EMAIL_REJECTION_TEMPLATE: ${SMQ_EMAIL_REJECTION_TEMPLATE}
SMQ_USERS_GRPC_URL: ${SMQ_USERS_GRPC_URL}
SMQ_USERS_GRPC_TIMEOUT: ${SMQ_USERS_GRPC_TIMEOUT}
SMQ_USERS_GRPC_CLIENT_CERT: ${SMQ_USERS_GRPC_CLIENT_CERT:+/users-grpc-client.crt}
SMQ_USERS_GRPC_CLIENT_KEY: ${SMQ_USERS_GRPC_CLIENT_KEY:+/users-grpc-client.key}
SMQ_USERS_GRPC_SERVER_CA_CERTS: ${SMQ_USERS_GRPC_SERVER_CA_CERTS:+/users-grpc-server-ca.crt}
networks:
- supermq-base-net
volumes:
- ./templates/${SMQ_EMAIL_INVITATION_TEMPLATE}:/${SMQ_EMAIL_INVITATION_TEMPLATE}
- ./templates/${SMQ_EMAIL_ACCEPTANCE_TEMPLATE}:/${SMQ_EMAIL_ACCEPTANCE_TEMPLATE}
- ./templates/${SMQ_EMAIL_REJECTION_TEMPLATE}:/${SMQ_EMAIL_REJECTION_TEMPLATE}
# Users gRPC client certificates
- type: bind
source: ${SMQ_USERS_GRPC_CLIENT_CERT:-ssl/certs/dummy/client_cert}
target: /users-grpc-client${SMQ_USERS_GRPC_CLIENT_CERT:+.crt}
bind:
create_host_path: true
- type: bind
source: ${SMQ_USERS_GRPC_CLIENT_KEY:-ssl/certs/dummy/client_key}
target: /users-grpc-client${SMQ_USERS_GRPC_CLIENT_KEY:+.key}
bind:
create_host_path: true
- type: bind
source: ${SMQ_USERS_GRPC_SERVER_CA_CERTS:-ssl/certs/dummy/server_ca}
target: /users-grpc-server-ca${SMQ_USERS_GRPC_SERVER_CA_CERTS:+.crt}
bind:
create_host_path: true
groups-db:
image: docker.io/postgres:18.0-alpine3.22
container_name: supermq-groups-db
@@ -0,0 +1,100 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{{.Subject}}</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: #333;
background-color: #f5f7fa;
margin: 0;
padding: 0;
}
.container {
max-width: 600px;
margin: 30px auto;
background-color: #ffffff;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.header {
background: linear-gradient(135deg, #27ae60 0%, #2ecc71 100%);
padding: 30px 40px;
text-align: center;
}
.header h1 {
color: #ffffff;
margin: 0;
font-size: 24px;
font-weight: 600;
}
.content {
padding: 40px;
}
.content p {
margin: 0 0 15px 0;
font-size: 15px;
}
.success-details {
background-color: #eafaf1;
border-left: 4px solid #27ae60;
padding: 20px;
margin: 25px 0;
border-radius: 4px;
}
.success-details p {
margin: 0;
font-size: 16px;
line-height: 1.8;
}
.icon-success {
text-align: center;
margin: 20px 0;
font-size: 48px;
}
.footer {
background-color: #f8f9fb;
padding: 25px 40px;
text-align: center;
font-size: 13px;
color: #666;
}
.footer-divider {
border: none;
border-top: 1px solid #e0e3e8;
margin: 30px 0 20px 0;
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>Invitation Accepted</h1>
</div>
<div class="content">
<div class="icon-success">✓</div>
<p>Dear <strong>{{.User}}</strong>,</p>
<div class="success-details">
<p>{{.Content}}</p>
</div>
<p>You can now collaborate with them in the domain.</p>
<hr class="footer-divider">
<p>Best regards,<br><strong>{{.Footer}}</strong></p>
</div>
<div class="footer">
<p>This is an automated email. Please do not reply directly to this message.</p>
<p style="margin-top: 10px; color: #999;">Powered by Magistrala</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,93 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{{.Subject}}</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: #333;
background-color: #f5f7fa;
margin: 0;
padding: 0;
}
.container {
max-width: 600px;
margin: 30px auto;
background-color: #ffffff;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.header {
background: linear-gradient(135deg, #e74c3c 0%, #c0392b 100%);
padding: 30px 40px;
text-align: center;
}
.header h1 {
color: #ffffff;
margin: 0;
font-size: 24px;
font-weight: 600;
}
.content {
padding: 40px;
}
.content p {
margin: 0 0 15px 0;
font-size: 15px;
}
.rejection-details {
background-color: #fadbd8;
border-left: 4px solid #e74c3c;
padding: 20px;
margin: 25px 0;
border-radius: 4px;
}
.rejection-details p {
margin: 0;
font-size: 16px;
line-height: 1.8;
}
.footer {
background-color: #f8f9fb;
padding: 25px 40px;
text-align: center;
font-size: 13px;
color: #666;
}
.footer-divider {
border: none;
border-top: 1px solid #e0e3e8;
margin: 30px 0 20px 0;
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>Invitation Declined</h1>
</div>
<div class="content">
<p>Dear <strong>{{.User}}</strong>,</p>
<div class="rejection-details">
<p>{{.Content}}</p>
</div>
<p>If you would like to extend another invitation or have any questions, please don't hesitate to contact us.</p>
<hr class="footer-divider">
<p>Best regards,<br><strong>{{.Footer}}</strong></p>
</div>
<div class="footer">
<p>This is an automated email. Please do not reply directly to this message.</p>
<p style="margin-top: 10px; color: #999;">Powered by Magistrala</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,106 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{{.Subject}}</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: #333;
background-color: #f5f7fa;
margin: 0;
padding: 0;
}
.container {
max-width: 600px;
margin: 30px auto;
background-color: #ffffff;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.header {
background: linear-gradient(135deg, #083662 0%, #0a4d8f 100%);
padding: 30px 40px;
text-align: center;
}
.header h1 {
color: #ffffff;
margin: 0;
font-size: 24px;
font-weight: 600;
}
.content {
padding: 40px;
}
.content p {
margin: 0 0 15px 0;
font-size: 15px;
}
.invitation-details {
background-color: #f8f9fb;
border-left: 4px solid #083662;
padding: 20px;
margin: 25px 0;
border-radius: 4px;
}
.invitation-details p {
margin: 0;
font-size: 16px;
line-height: 1.8;
}
.cta-button {
display: inline-block;
background-color: #083662;
color: #ffffff;
padding: 14px 32px;
text-decoration: none;
border-radius: 6px;
margin: 20px 0;
font-weight: 600;
font-size: 15px;
}
.footer {
background-color: #f8f9fb;
padding: 25px 40px;
text-align: center;
font-size: 13px;
color: #666;
}
.footer-divider {
border: none;
border-top: 1px solid #e0e3e8;
margin: 30px 0 20px 0;
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>Domain Invitation</h1>
</div>
<div class="content">
<p>Dear <strong>{{.User}}</strong>,</p>
<div class="invitation-details">
<p>{{.Content}}</p>
</div>
<p>Please log in to your account to view and respond to this invitation.</p>
<p>If you have any questions, please don't hesitate to contact us.</p>
<hr class="footer-divider">
<p>Best regards,<br><strong>{{.Footer}}</strong></p>
</div>
<div class="footer">
<p>This is an automated email. Please do not reply directly to this message.</p>
<p style="margin-top: 10px; color: #999;">Powered by Magistrala</p>
</div>
</div>
</body>
</html>