snapshot of https://github.com/RocketChat/Rocket.Chat.git (develop, 2026-09-16; blobs > 131072B omitted)
Some checks failed
Create issues from TODOs / todos (push) Failing after 3s
Close inactive issues / close-issues (push) Has been cancelled
Deploy GitHub Pages / deploy-preview (push) Has been cancelled
CI / ⚙️ Variables Setup (push) Has been cancelled
CI / ⚙️ Test Guard (push) Has been cancelled
CI / 🚀 Notify external services - draft (push) Has been cancelled
CI / 📦 Build Packages (push) Has been cancelled
CI / 📦 Meteor Build (coverage) (push) Has been cancelled
CI / 📦 Meteor Build (production) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], fips) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Publish Docker Images (ghcr.io) (push) Has been cancelled
CI / 📦 Track Image Sizes (push) Has been cancelled
CI / 🔎 Code Check - Action Lint (push) Has been cancelled
CI / 🔎 Code Check (push) Has been cancelled
CI / 🔨 Test Storybook (push) Has been cancelled
CI / 🔨 Test Unit (push) Has been cancelled
CI / 🔨 Test API (CE) (push) Has been cancelled
CI / 🔨 Test API Livechat (CE) (push) Has been cancelled
CI / 🔨 Test UI (CE) (push) Has been cancelled
CI / 🔨 Test API (EE) (push) Has been cancelled
CI / 🔨 Test API Livechat (EE) (push) Has been cancelled
CI / 🔨 Test API Apps (deno-runtime - EE) (push) Has been cancelled
CI / 🔨 Test UI (EE) (push) Has been cancelled
CI / 🔨 Test API (FIPS) (push) Has been cancelled
CI / 🔨 Test API Livechat (FIPS) (push) Has been cancelled
CI / 🔨 Test UI (FIPS) (push) Has been cancelled
CI / 🔨 Test Federation Matrix (push) Has been cancelled
CI / 📊 Report Coverage (push) Has been cancelled
CI / ✅ Tests Done (push) Has been cancelled
CI / 🚀 Publish build assets (push) Has been cancelled
CI / 🚀 Publish Docker Images (DockerHub) (push) Has been cancelled
CI / 🚀 Notify external services (push) Has been cancelled
CI / Update Version Durability (push) Has been cancelled
Release / Release (push) Has been cancelled
Auto-close duplicate issues / auto-close-duplicates (push) Failing after 1s
Code scanning - action / CodeQL-Build (push) Failing after 1s

This commit is contained in:
upstream-mirror
2026-09-16 01:21:02 +05:00
commit 30810eecd7
10161 changed files with 987110 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
apiVersion: 1
providers:
- name: 'Prometheus'
orgId: 1
folder: ''
type: file
disableDeletion: false
editable: true
options:
path: /var/lib/grafana/dashboards/

View File

@@ -0,0 +1,9 @@
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
url: http://prometheus:9090
version: 1
editable: false

View File

@@ -0,0 +1,24 @@
scrape_configs:
# if you just have single or multiple, but static instances - you
# can use the static configuration below.
- job_name: rocketchat_static
static_configs:
- targets:
- cadvisor:8080
# If you use a Docker-based setup make sure to use the DNS
# discovery to always include all available application instances
# of Rocket.Chat
- job_name: rocketchat_docker
scrape_interval: 5s
dns_sd_configs:
- names: [
"authorization-service",
"account-service",
"presence-service",
"ddp-streamer-service",
"traefik",
]
type: A
port: 9458

View File

@@ -0,0 +1,5 @@
MS_METRICS=true
TRACING_ENABLED=true
TRANSPORTER=nats://nats:4222
MONGO_URL=mongodb://host.docker.internal:3001/meteor
MOLECULER_LOG_LEVEL=info

View File

@@ -0,0 +1,22 @@
http:
routers:
router2:
rule: Host(`localhost`) && PathPrefix(`/sockjs/`, `/websocket/`)
# service: ddp-streamer-service@docker
service: ecdh-proxy-socket-service@docker
priority: 2
entryPoints:
- web
router1:
rule: Host(`localhost`)
service: ecdh-proxy-http-service@docker
# service: service1
priority: 1
entryPoints:
- web
services:
service1:
loadBalancer:
servers:
- url: http://host.docker.internal:3000

View File

@@ -0,0 +1 @@
HOST_NAME=localhost

View File

@@ -0,0 +1,3 @@
dist
.config/data
!.env

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,87 @@
FROM node:24.15.0-alpine3.23 as build
WORKDIR /app
RUN apt-get update \
&& apt-get install -y build-essential git
COPY ./package.json .
COPY ./yarn.lock .
COPY ./.yarnrc.yml .
COPY ./.yarn/plugins .yarn/plugins
COPY ./.yarn/releases .yarn/releases
COPY ./.yarn/patches .yarn/patches
COPY ./packages/core-services packages/core-services
COPY ./packages/core-typings packages/core-typings
COPY ./packages/eslint-config packages/eslint-config
COPY ./packages/tsconfig packages/tsconfig
COPY ./packages/rest-typings packages/rest-typings
COPY ./packages/media-signaling packages/media-signaling
COPY ./packages/model-typings packages/model-typings
COPY ./packages/models packages/models
COPY ./apps/meteor/ee/server/services apps/meteor/ee/server/services
RUN yarn install
RUN yarn workspace @rocket.chat/core-typings run build \
&& yarn workspace @rocket.chat/rest-typings run build
FROM node:24.15.0-alpine3.23
ARG SERVICE
WORKDIR /app
COPY --from=build /app/packages/core-services/package.json /app/packages/core-services/package.json
COPY --from=build /app/packages/core-services/dist /app/packages/core-services/dist
COPY --from=build /app/packages/core-typings/package.json /app/packages/core-typings/package.json
COPY --from=build /app/packages/core-typings/dist /app/packages/core-typings/dist
COPY --from=build /app/packages/rest-typings/package.json /app/packages/rest-typings/package.json
COPY --from=build /app/packages/rest-typings/dist /app/packages/rest-typings/dist
COPY --from=build /app/packages/media-signaling/package.json /app/packages/media-signaling/package.json
COPY --from=build /app/packages/media-signaling/dist /app/packages/media-signaling/dist
COPY --from=build /app/packages/model-typings/package.json /app/packages/model-typings/package.json
COPY --from=build /app/packages/model-typings/dist /app/packages/model-typings/dist
COPY --from=build /app/packages/models/package.json /app/packages/models/package.json
COPY --from=build /app/packages/models/dist /app/packages/models/dist
COPY --from=build /app/packages/ui-kit/package.json /app/packages/ui-kit/package.json
COPY --from=build /app/packages/ui-kit/dist /app/packages/ui-kit/dist
# add dist/ folder from tsc so we don't need to add all rocket.chat repo
COPY ./apps/meteor/ee/server/services/dist ./apps/meteor/
COPY ./package.json .
COPY ./yarn.lock .
COPY ./.yarnrc.yml .
COPY ./.yarn/plugins .yarn/plugins
COPY ./.yarn/releases .yarn/releases
COPY ./.yarn/patches .yarn/patches
COPY ./apps/meteor/ee/server/services/package.json ./apps/meteor/ee/server/services/package.json
ENV NODE_ENV=production \
PORT=3000
WORKDIR /app/apps/meteor/ee/server/services
RUN apk update && \
apk --no-cache --virtual build-dependencies add g++ python3 make py3-setuptools && \
# Update OpenSSL
# CVE -> https://scout.docker.com/vulnerabilities/id/CVE-2025-9230?s=alpine&n=openssl&ns=alpine&t=apk&osn=alpine&osv=3.22
apk upgrade --no-cache openssl && \
yarn workspaces focus --production && \
rm -rf /var/cache/apk/* && \
apk del build-dependencies
WORKDIR /app/apps/meteor/ee/server/services/${SERVICE}
EXPOSE 3000 9458
CMD ["node", "service.js"]

View File

@@ -0,0 +1,76 @@
# Rocket.Chat Micro-Services
## PM2
This usually suits better for development purposes.
Start NATS first, you can it via Docker:
```
docker run --rm -d -p 4222:4222 nats
```
Then run Rocket.Chat as usual with an additional `TRANSPORTER` and `DISABLE_DB_WATCH` env vars:
```
TRANSPORTER=nats://localhost:4222 MOLECULER_LOG_LEVEL=debug DISABLE_DB_WATCH=true meteor
```
Set up an Enterprise license going to Admin > Enterprise.
Then you can spin up micro services. From this folder, first install dependencies:
```
meteor npm i
```
You can run on `dev` to have hot reloading:
```
MONGO_URL=mongodb://localhost:3001/meteor \
MOLECULER_LOG_LEVEL=debug \
TRANSPORTER=nats://localhost:4222 \
meteor npm run dev
```
To see process logs, do:
```
meteor npm run pm2 -- logs
```
## Docker Compose
The `.env` file defines the HTTP address to be used, default to `localhost`.
It requires meteor to be running, and the config at `services/.config/services/service.env` uses the default meteor mongodb. To run it:
```
TRANSPORTER=nats://localhost:4222 MOLECULER_LOG_LEVEL=debug meteor
```
The `docker-compose.yml` file contais a setup of the micro-services plus some extra tools:
### Traefik
It's used to route the the domain on port 80 to the **DDP Streamer Service** and expose these addresses
* `traefik.localhost` as Traefik admin
* `prometheus.localhost` as Prometheus admin
* `grafana.localhost` as Grafana dashboards
### Prometheus
Used to collect metrics from the micro-services
### Grafana
Used to expose metrics from prometheus as dashboards
### Nats
Used for the communication of the microservices
## Build containers
`npm run build-containers` will build the typescript files and generate the containers
## Running with docker-compose
`docker-compose up --remove-orphans` will run all the micro-services, still need to run MongoDB and Rocket.Chat Core separated
### Running rocket.chat core
`MONGO_URL=mongodb://localhost:27017/rocketchat MONGO_OPLOG_URL=mongodb://localhost:27017/local TRANSPORTER=nats://localhost:4222 MOLECULER_LOG_LEVEL=debug meteor`

View File

@@ -0,0 +1,216 @@
version: '3.1'
services:
authorization-service:
container_name: authorization-service
build:
context: .
args:
SERVICE: authorization
image: rocketchat/authorization-service:latest
env_file: .config/services/service.env
depends_on:
- nats
account-service:
container_name: account-service
build:
context: .
args:
SERVICE: account
image: rocketchat/account-service:latest
env_file: .config/services/service.env
depends_on:
- nats
presence-service:
container_name: presence-service
build:
context: .
args:
SERVICE: presence
image: rocketchat/presence-service:latest
env_file: .config/services/service.env
depends_on:
- nats
ddp-streamer-service:
container_name: ddp-streamer-service
build:
context: .
args:
SERVICE: ddp-streamer
image: rocketchat/ddp-streamer-service:latest
env_file: .config/services/service.env
depends_on:
- nats
- traefik
labels:
traefik.enable: true
traefik.http.services.ddp-streamer-service.loadbalancer.server.port: 3000
traefik.http.routers.ddp-streamer-service.service: ddp-streamer-service
ecdh-proxy-socket-service:
container_name: ecdh-proxy-socket-service
build:
context: .
args:
SERVICE: ecdh-proxy
image: rocketchat/ecdh-proxy-service:latest
env_file: .config/services/service.env
environment:
PROXY_HOST: ddp-streamer-service
STATIC_SEED: my seed
depends_on:
- nats
- traefik
- ddp-streamer-service
labels:
traefik.enable: true
traefik.http.services.ecdh-proxy-socket-service.loadbalancer.server.port: 3000
traefik.http.routers.ecdh-proxy-socket-service.service: ecdh-proxy-socket-service
ecdh-proxy-http-service:
container_name: ecdh-proxy-http-service
build:
context: .
args:
SERVICE: ecdh-proxy
image: rocketchat/ecdh-proxy-service:latest
env_file: .config/services/service.env
environment:
PROXY_HOST: host.docker.internal
STATIC_SEED: my seed
depends_on:
- nats
- traefik
labels:
traefik.enable: true
traefik.http.services.ecdh-proxy-http-service.loadbalancer.server.port: 3000
traefik.http.routers.ecdh-proxy-http-service.service: ecdh-proxy-http-service
queue-worker-service:
container_name: queue-worker-service
build:
context: .
args:
SERVICE: queue-worker
image: rocketchat/queue-worker-service:latest
env_file: .config/services/service.env
depends_on:
- nats
omnichannel-transcript-service:
container_name: omnichannel-transcript-service
build:
context: .
args:
SERVICE: omnichannel-transcript
image: rocketchat/omnichannel-transcript-service:latest
env_file: .config/services/service.env
depends_on:
- nats
nats:
image: nats
ports:
- '4222:4222'
# tracing container for all tracing reporting
jaeger:
image: jaegertracing/all-in-one:latest
container_name: jaeger
ports:
- '16686:16686'
- '5775:5775/udp'
- '6831:6831/udp'
- '6832:6832/udp'
- '5778:5778'
- '14268:14268'
- '9411:9411'
depends_on:
- traefik
# environment:
# - QUERY_BASE_PATH=/jaeger
labels:
traefik.enable: true
traefik.http.routers.jaeger.rule: Host(`jaeger.${HOST_NAME}`)
traefik.http.routers.jaeger.entrypoints: web
traefik.http.services.jaeger.loadbalancer.server.port: 16686
# traefik.http.routers.jaeger.service: jaeger
grafana:
image: grafana/grafana
container_name: grafana
restart: unless-stopped
volumes:
- ./.config/grafana/provisioning/datasources:/etc/grafana/provisioning/datasources:ro
- ./.config/grafana/provisioning/dashboards/provider:/etc/grafana/provisioning/dashboards:ro
- ./.config/grafana/provisioning/dashboards/json-exports:/var/lib/grafana/dashboards:ro
depends_on:
- prometheus
- traefik
labels:
traefik.enable: true
traefik.http.routers.grafana.rule: Host(`grafana.${HOST_NAME}`)
traefik.http.routers.grafana.entrypoints: web
traefik.http.services.grafana.loadbalancer.server.port: 3000
prometheus:
image: quay.io/prometheus/prometheus
container_name: prometheus
restart: unless-stopped
command:
- --config.file=/etc/prometheus/prometheus.yml
- '--storage.tsdb.retention.time=12w'
- '--storage.tsdb.path=/prometheus'
volumes:
- ./.config/data/prometheus:/prometheus
- ./.config/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
depends_on:
- traefik
ports:
- 9090:9090
labels:
traefik.enable: true
traefik.http.routers.prometheus.rule: Host(`prometheus.${HOST_NAME}`)
traefik.http.routers.prometheus.entrypoints: web
traefik.http.services.prometheus.loadbalancer.server.port: 9090
traefik:
image: traefik
container_name: traefik
command:
- --entrypoints.web.address=:80
# - --entrypoints.websecure.address=:443
- --api=true
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --providers.file.directory=/servers/
ports:
- 80:80
# - 443:443
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./.config/traefik/servers/:/servers/
# - ./.config/traefik/acme.json:/acme.json
labels:
traefik.enable: true
# Dashboard
traefik.http.routers.traefik.rule: Host(`traefik.${HOST_NAME}`)
traefik.http.routers.traefik.service: api@internal
traefik.http.routers.traefik.entrypoints: web
cadvisor:
image: google/cadvisor
container_name: cadvisor
volumes:
# -/:/rootfs:ro
# -/var/run:/var/run:ro
# -/sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
# -/dev/disk/:/dev/disk:ro
ports:
- 8080:8080
# --privileged \
# --device=/dev/kmsg \

View File

@@ -0,0 +1,65 @@
{
"name": "rocketchat-services",
"private": true,
"version": "2.0.51",
"description": "Rocket.Chat Authorization service",
"main": "index.js",
"scripts": {
"typecheck": "tsc --noEmit --skipLibCheck",
"build": "tsc",
"build-containers": "npm run build && docker-compose build && rm -rf ./dist",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"rocketchat"
],
"author": "Rocket.Chat",
"license": "MIT",
"dependencies": {
"@rocket.chat/apps-engine": "workspace:^",
"@rocket.chat/core-services": "workspace:^",
"@rocket.chat/core-typings": "workspace:^",
"@rocket.chat/emitter": "workspace:~",
"@rocket.chat/message-parser": "workspace:^",
"@rocket.chat/model-typings": "workspace:^",
"@rocket.chat/models": "workspace:^",
"@rocket.chat/network-broker": "workspace:^",
"@rocket.chat/rest-typings": "workspace:^",
"@rocket.chat/ui-kit": "workspace:~",
"ajv": "^8.20.0",
"bcrypt": "^6.0.0",
"body-parser": "^1.20.6",
"colorette": "^2.0.20",
"cookie": "^0.7.2",
"cookie-parser": "^1.4.7",
"ejson": "^2.2.3",
"eventemitter3": "^5.0.4",
"express": "^4.21.2",
"jaeger-client": "^3.19.0",
"mem": "^8.1.1",
"moleculer": "^0.14.35",
"mongodb": "6.16.0",
"nats": "^2.28.2",
"pino": "10.3.1",
"sodium-native": "^4.3.3",
"sodium-plus": "^0.9.0",
"ws": "~8.21.3"
},
"devDependencies": {
"@rocket.chat/icons": "^0.49.0",
"@types/cookie": "^0.5.4",
"@types/cookie-parser": "^1.4.10",
"@types/ejson": "^2.2.2",
"@types/express": "^4.17.25",
"@types/fibers": "^3.1.4",
"@types/node": "~24.13.2",
"@types/ws": "^8.18.1",
"npm-run-all": "^4.1.5",
"pino-pretty": "13.1.3",
"ts-node": "^10.9.2",
"typescript": "~5.9.3"
},
"volta": {
"extends": "../../../../../package.json"
}
}

View File

@@ -0,0 +1,5 @@
{
"extends": "../../../tsconfig.json",
"include": ["./**/*", "../../../../../ee/apps/account-service/src/lib"],
"exclude": ["./dist", "./ecosystem.config.js", "../../../definition/methods"]
}