Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
cf4e430
feat: conditional fips mode
cardoso Mar 4, 2026
851ed25
ci: add fips lane
cardoso Mar 5, 2026
4517647
ci: build fips image in advance
cardoso Mar 5, 2026
38625c5
ci: allow selecting test lanes to run
cardoso Mar 5, 2026
f188495
fix: allow sha-1 for ws handshake
cardoso Mar 5, 2026
09e51bf
Revert "ci: allow selecting test lanes to run"
cardoso Mar 5, 2026
743e5d8
chore: streamline fips env vars
cardoso Mar 5, 2026
c7240fc
Revert "fix: allow sha-1 for ws handshake"
cardoso Mar 6, 2026
1fbd716
fix(fips): use js implementation for ws handshake
cardoso Mar 6, 2026
8cb5bf3
refactor: improve fips init script
cardoso Mar 9, 2026
1d25e60
ci: guard against missing creds
cardoso Mar 9, 2026
303d199
feat(presence-service): fips mode
cardoso Mar 9, 2026
5c960d3
ci: reduce duplication of fips checks
cardoso Mar 9, 2026
841fc12
ci: fips docker compose overrides
cardoso Mar 9, 2026
98d9d83
ci: specify targets
cardoso Mar 9, 2026
5117900
ci: enhance naming and streamline service matrix
cardoso Mar 9, 2026
f6a12ac
fix: set fips mode on start
cardoso Mar 9, 2026
80a8947
fix: update artifact pattern
cardoso Mar 9, 2026
c2b839e
ci: matrix generation job
cardoso Mar 9, 2026
9c7bc13
feat(authorization-service): fips
cardoso Mar 10, 2026
e777a9f
fix(ddp-streamer): remove flaky check
cardoso Mar 10, 2026
564e619
feat(queue-worker): fips
cardoso Mar 10, 2026
d15ba31
feat(account-service): fips
cardoso Mar 10, 2026
77c62f4
fix(ci): compose build fallback creds
cardoso Mar 10, 2026
34b0fe6
fix(ci): retry docker buildx with backoff
cardoso Mar 10, 2026
e8d28cb
feat(ci): fips image pull step service readiness checks
cardoso Mar 10, 2026
fe3235b
feat(omnichannel-transcript): fips
cardoso Mar 11, 2026
8889049
ci: improve readiness checks
cardoso Mar 11, 2026
599428f
fix(ci): update readiness check for omnichannel-transcript service
cardoso Mar 11, 2026
01614ba
fix(ci): update image pull step to support both EE and FIPS releases
cardoso Mar 11, 2026
2d6b2f2
ci: make readiness check more robust
cardoso Mar 11, 2026
9d6aa09
ci: do not skip rocketchat image in fork runs
cardoso Mar 11, 2026
1f59625
fix(fips): enhance SHA-1 handling in FIPS mode for WebSocket handshake
cardoso Mar 11, 2026
27d6c0d
fix(fips): enhance SHA-1 handling in FIPS mode with error handling fo…
cardoso Mar 11, 2026
85cfd73
fix(ci): remove exclusion of rocketchat-cov service from promotion pr…
cardoso Mar 11, 2026
49b24e9
fix(fips): improve SHA-1 handling in FIPS mode by storing updates for…
cardoso Mar 11, 2026
5368832
chore: consistent fips checks
cardoso Mar 11, 2026
f4ec697
fix(fips): add WebSocket handshake validation for SHA-1 input in FIPS…
cardoso Mar 12, 2026
1a5623f
fix(fips): prevent multiple calls to digest in SHA-1 mock implementat…
cardoso Mar 12, 2026
d04ee51
fix(fips): add TEMP_DOCKERHUB_FIPS_USER and TEMP_DOCKERHUB_FIPS_PASS …
cardoso Mar 12, 2026
ae52898
fix(ci): improve service wait logic by checking for running container…
cardoso Mar 12, 2026
d240962
fix(ci): semgrep findings
cardoso Mar 13, 2026
fa38620
chore: reduce logs
cardoso Mar 16, 2026
46ea026
chore: use --force-fips
cardoso Mar 16, 2026
0d12e4a
chore: reduce diff
cardoso Mar 17, 2026
d65ca1b
feat(ddp-streamer): use alpine for fips
cardoso Mar 27, 2026
d41dedd
fix(ci): skip publish of rocketchat-cov
cardoso Mar 30, 2026
b6a6d93
ci: fix retry loop
cardoso Mar 30, 2026
dd8e247
ci(fips): build and publish rocketchat-fips image with temporary prod…
cardoso May 7, 2026
75af699
ci: hash pin docker/login-action
cardoso May 11, 2026
cb34817
fix(fips): remove temporary DockerHub org
cardoso May 11, 2026
9cf662b
feat: use fips base image for rocketchat service
cardoso May 12, 2026
20514b3
feat: force fips in monolith
cardoso May 13, 2026
35fc40b
feat: show fips mode in logs
cardoso May 14, 2026
5a92423
feat: show fips mode in statistics
cardoso May 14, 2026
1bd9925
chore(deps): update fips base images for node 22.22.3
cardoso May 19, 2026
f948770
fix!(fips): use sha256 instead of md5 for 2fa fingerprint
cardoso May 21, 2026
fcaf3a4
fix(fips): use sha256 for meteor method rate limiting
cardoso May 21, 2026
b57b539
fix(fips): install deno in monolith image
cardoso May 22, 2026
952002a
fix(federation-matrix): change from md5 to sha256 for ETag for FIPS c…
cardoso May 22, 2026
7c6bcef
chore(fips): reduce ci diff
cardoso May 22, 2026
184496d
refactor(ddp-streamer/fips): remove sha1 fallback
cardoso Jun 16, 2026
6e1e197
fix(fips): use node for apps engine
cardoso Jul 13, 2026
5397df0
feat(fips): add license validation
cardoso Jul 14, 2026
264b2cf
chore: add changeset
cardoso Jul 16, 2026
7414b09
chore: refactor CI matrix strategy
d-gubert Jul 16, 2026
b0afcd9
chore: address some review comments
cardoso Jul 20, 2026
5138ba0
ci: use separate prop for fips
cardoso Jul 20, 2026
7415d28
chore: update changeset
cardoso Jul 20, 2026
703adc5
ci(fips): temporarily disable ui tests (#41477)
cardoso Jul 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .changeset/fips-mode-support.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
'@rocket.chat/meteor': minor
'@rocket.chat/core-typings': minor
'@rocket.chat/federation-matrix': minor
'@rocket.chat/account-service': minor
'@rocket.chat/authorization-service': minor
'@rocket.chat/ddp-streamer': minor
'@rocket.chat/omnichannel-transcript': minor
'@rocket.chat/presence-service': minor
'@rocket.chat/queue-worker': minor
---

Adds support for running Rocket.Chat in FIPS mode. The monolith and all microservices (ddp-streamer, account-service, authorization-service, presence-service, queue-worker, omnichannel-transcript) can now enforce FIPS-compliant cryptography via Node.js/OpenSSL FIPS, with dedicated FIPS Docker images. Running in FIPS mode requires a license including the new `fips` module, and FIPS status is now reported in server logs and statistics.
34 changes: 29 additions & 5 deletions .github/actions/build-docker/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ inputs:
CR_PAT:
required: true
description: 'GitHub Container Registry Personal Access Token'
DOCKER_USER:
required: false
description: 'DockerHub username (required for FIPS builds to pull private base image)'
DOCKER_PASS:
required: false
description: 'DockerHub password (required for FIPS builds to pull private base image)'
deno-version:
required: true
description: 'Deno version'
Expand All @@ -28,7 +34,7 @@ inputs:
default: 'true'
type:
required: false
description: 'production or coverage'
description: 'production, coverage, or fips'
default: 'coverage'

runs:
Expand All @@ -43,11 +49,19 @@ runs:
username: ${{ inputs.CR_USER }}
password: ${{ inputs.CR_PAT }}

- name: Login to DockerHub
# FIPS base image (rocketchat/dhi-node) lives in a private DockerHub repo and requires auth to pull.
if: inputs.type == 'fips' && (github.event.pull_request.head.repo.full_name == github.repository || github.event_name == 'release' || github.ref == 'refs/heads/develop')
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
with:
username: ${{ inputs.DOCKER_USER }}
password: ${{ inputs.DOCKER_PASS }}

- name: Restore meteor build
if: inputs.service == 'rocketchat'
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
with:
name: build-${{ inputs.type }}
name: build-${{ inputs.type == 'fips' && ((github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production') || inputs.type }}
path: /tmp/build

- name: Unpack meteor build
Expand Down Expand Up @@ -112,6 +126,10 @@ runs:
GITHUB_REF: ${{ github.ref }}
run: |
set -o xtrace
compose_fips_override=''
if [[ "$INPUT_TYPE" == 'fips' ]]; then
compose_fips_override='-f docker-compose-ci.fips.yml'
fi

# Removes unnecessary swc cores and sharp binaries to reduce image size
swc_arch='x64'
Expand All @@ -136,10 +154,10 @@ runs:
fi

# Get image name from docker-compose-ci.yml since rocketchat image is different from service name (rocket.chat)
IMAGE=$(docker compose -f docker-compose-ci.yml config --format json 2>/dev/null | jq -r --arg s "$INPUT_SERVICE" '.services[$s].image')
IMAGE=$(docker compose -f docker-compose-ci.yml $compose_fips_override config --format json 2>/dev/null | jq -r --arg s "$INPUT_SERVICE" '.services[$s].image')

docker buildx bake \
-f docker-compose-ci.yml \
-f docker-compose-ci.yml $compose_fips_override \
${LOAD_OR_PUSH} \
--allow=fs.read=/tmp/build \
--set "*.tags+=${IMAGE}-gha-run-${GITHUB_RUN_ID}" \
Expand All @@ -160,6 +178,8 @@ runs:
SERVICE_SUFFIX=''
if [[ "$INPUT_SERVICE" == 'rocketchat' && "$INPUT_TYPE" == 'coverage' ]] && [[ "$GITHUB_EVENT_NAME" == 'release' || "$GITHUB_REF" == 'refs/heads/develop' ]]; then
SERVICE_SUFFIX='-cov'
elif [[ "$INPUT_TYPE" == 'fips' ]]; then
SERVICE_SUFFIX='-fips'
fi

mkdir -p "/tmp/manifests/${INPUT_SERVICE}${SERVICE_SUFFIX}/${INPUT_ARCH}"
Expand Down Expand Up @@ -187,9 +207,13 @@ runs:
TYPE: ${{ inputs.type }}
run: |
set -o xtrace
compose_fips_override=''
if [[ "$TYPE" == 'fips' ]]; then
compose_fips_override='-f docker-compose-ci.fips.yml'
fi

# Get image name from docker-compose-ci.yml
IMAGE=$(docker compose -f docker-compose-ci.yml config --format json 2>/dev/null | jq -r --arg s "$SERVICE" '.services[$s].image')
IMAGE=$(docker compose -f docker-compose-ci.yml $compose_fips_override config --format json 2>/dev/null | jq -r --arg s "$SERVICE" '.services[$s].image')

# Create directory for image archives
mkdir -p /tmp/docker-images
Expand Down
12 changes: 9 additions & 3 deletions .github/workflows/ci-test-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ on:
release:
required: true
type: string
fips:
default: false
required: false
type: boolean
shard:
default: '[1]'
required: false
Expand Down Expand Up @@ -139,7 +143,7 @@ jobs:
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
if: github.event.pull_request.head.repo.full_name != github.repository && github.event_name != 'release' && github.ref != 'refs/heads/develop'
with:
pattern: ${{ inputs.release == 'ce' && 'docker-image-rocketchat-amd64-coverage' || 'docker-image-*-amd64-coverage' }}
pattern: ${{ inputs.release == 'ce' && 'docker-image-rocketchat-amd64-coverage' || (inputs.fips && 'docker-image-*-amd64-fips' || 'docker-image-*-amd64-coverage') }}
path: /tmp/docker-images
merge-multiple: true

Expand Down Expand Up @@ -199,8 +203,10 @@ jobs:
COMPOSE_PROFILES: ${{ inputs.type == 'api' && 'api' || '' }}
TEST_MODE: ${{ startsWith(inputs.type, 'api') && 'api' || 'true' }}
APPS_ENGINE_RUNTIME_BACKEND: ${{ inputs.type == 'api-apps-node' && 'node' || '' }}
FIPS_OVERRIDE: ${{ inputs.fips && '-f docker-compose-ci.fips.yml' || '' }}
run: |
DEBUG_LOG_LEVEL=${DEBUG_LOG_LEVEL:-0} docker compose -f docker-compose-ci.yml up -d --wait
read -r -a fips_override <<< "$FIPS_OVERRIDE"
DEBUG_LOG_LEVEL=${DEBUG_LOG_LEVEL:-0} docker compose -f docker-compose-ci.yml "${fips_override[@]}" up -d --wait

- uses: ./.github/actions/setup-playwright
if: inputs.type == 'ui'
Expand Down Expand Up @@ -308,7 +314,7 @@ jobs:
if: inputs.type == 'ui' && always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: playwright-test-trace-${{ inputs.release }}-${{ matrix.mongodb-version }}-${{ matrix.shard }}
name: playwright-test-trace-${{ inputs.release }}${{ inputs.fips && '-fips' || '' }}-${{ matrix.mongodb-version }}-${{ matrix.shard }}
path: ./apps/meteor/tests/e2e/.playwright*
include-hidden-files: true

Expand Down
116 changes: 106 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -360,20 +360,16 @@ jobs:
[rocketchat],
]
type:
# if running in a PR build with coverage
- ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}
- fips
exclude:
# when images aren't published (merge queue, fork PRs) only amd64 tars are uploaded
# as artifacts, so arm64 builds would be discarded — skip them
- arch: ${{ (github.event.pull_request.head.repo.full_name != github.repository && github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'arm64' || '' }}
- arch: arm64
type: fips
include:
# if not, build with coverage for tests
- arch: amd64
service: [rocketchat]
type: coverage
# resolves to amd64 when arm64 is excluded above, matching the entry before this
# one instead of re-adding an arm64 job (includes bypass exclude)
- arch: ${{ (github.event.pull_request.head.repo.full_name == github.repository || github.event_name == 'release' || github.ref == 'refs/heads/develop') && 'arm64' || 'amd64' }}
- arch: arm64
service: [rocketchat]
type: coverage

Expand All @@ -392,6 +388,8 @@ jobs:
with:
CR_USER: ${{ secrets.CR_USER }}
CR_PAT: ${{ secrets.CR_PAT }}
DOCKER_USER: ${{ secrets.DOCKER_USER }}
DOCKER_PASS: ${{ secrets.DOCKER_PASS }}
deno-version: ${{ needs.release-versions.outputs.deno-version }}
arch: ${{ matrix.arch }}
service: ${{ matrix.service[0] }}
Expand All @@ -406,6 +404,8 @@ jobs:
with:
CR_USER: ${{ secrets.CR_USER }}
CR_PAT: ${{ secrets.CR_PAT }}
DOCKER_USER: ${{ secrets.DOCKER_USER }}
DOCKER_PASS: ${{ secrets.DOCKER_PASS }}
deno-version: ${{ needs.release-versions.outputs.deno-version }}
arch: ${{ matrix.arch }}
service: ${{ matrix.service[1] }}
Expand All @@ -421,6 +421,8 @@ jobs:
with:
CR_USER: ${{ secrets.CR_USER }}
CR_PAT: ${{ secrets.CR_PAT }}
DOCKER_USER: ${{ secrets.DOCKER_USER }}
DOCKER_PASS: ${{ secrets.DOCKER_PASS }}
deno-version: ${{ needs.release-versions.outputs.deno-version }}
arch: ${{ matrix.arch }}
service: ${{ matrix.service[2] }}
Expand All @@ -436,6 +438,8 @@ jobs:
with:
CR_USER: ${{ secrets.CR_USER }}
CR_PAT: ${{ secrets.CR_PAT }}
DOCKER_USER: ${{ secrets.DOCKER_USER }}
DOCKER_PASS: ${{ secrets.DOCKER_PASS }}
deno-version: ${{ needs.release-versions.outputs.deno-version }}
arch: ${{ matrix.arch }}
service: ${{ matrix.service[3] }}
Expand All @@ -458,6 +462,7 @@ jobs:
with:
sparse-checkout: |
docker-compose-ci.yml
docker-compose-ci.fips.yml
sparse-checkout-cone-mode: false
ref: ${{ github.ref }}

Expand Down Expand Up @@ -500,6 +505,9 @@ jobs:
# Get image name from docker-compose-ci.yml since rocketchat image is different from service name (rocket.chat)
if [ "$service" == "rocketchat-cov" ]; then
IMAGE=$(docker compose -f docker-compose-ci.yml config --format json 2>/dev/null | jq -r --arg s "rocketchat" '.services[$s].image')-cov
elif [[ "$service" == *"-fips" ]]; then
base_service="${service%-fips}"
IMAGE=$(docker compose -f docker-compose-ci.yml config --format json 2>/dev/null | jq -r --arg s "$base_service" '.services[$s].image')-fips
else
IMAGE=$(docker compose -f docker-compose-ci.yml config --format json 2>/dev/null | jq -r --arg s "$service" '.services[$s].image')
fi
Expand Down Expand Up @@ -753,6 +761,76 @@ jobs:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
REPORTER_JIRA_ROCKETCHAT_API_KEY: ${{ secrets.REPORTER_JIRA_ROCKETCHAT_API_KEY }}

test-api-fips:
name: 🔨 Test API (FIPS)
needs: [checks, build-gh-docker-publish, release-versions]

uses: ./.github/workflows/ci-test-e2e.yml
with:
type: api
release: ee
fips: true
transporter: 'nats://nats:4222'
enterprise-license: ${{ needs.release-versions.outputs.enterprise-license }}
mongodb-version: "['8.0']"
node-version: ${{ needs.release-versions.outputs.node-version }}
deno-version: ${{ needs.release-versions.outputs.deno-version }}
lowercase-repo: ${{ needs.release-versions.outputs.lowercase-repo }}
gh-docker-tag: ${{ needs.release-versions.outputs.gh-docker-tag }}
secrets:
CR_USER: ${{ secrets.CR_USER }}
CR_PAT: ${{ secrets.CR_PAT }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

test-api-livechat-fips:
name: 🔨 Test API Livechat (FIPS)
needs: [checks, build-gh-docker-publish, release-versions]

uses: ./.github/workflows/ci-test-e2e.yml
with:
type: api-livechat
release: ee
fips: true
transporter: 'nats://nats:4222'
enterprise-license: ${{ needs.release-versions.outputs.enterprise-license }}
mongodb-version: "['8.0']"
node-version: ${{ needs.release-versions.outputs.node-version }}
deno-version: ${{ needs.release-versions.outputs.deno-version }}
lowercase-repo: ${{ needs.release-versions.outputs.lowercase-repo }}
gh-docker-tag: ${{ needs.release-versions.outputs.gh-docker-tag }}
secrets:
CR_USER: ${{ secrets.CR_USER }}
CR_PAT: ${{ secrets.CR_PAT }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

test-ui-fips:
name: 🔨 Test UI (FIPS)
if: contains(github.event.pull_request.labels.*.name, 'fips')
needs: [checks, build-gh-docker-publish, release-versions]
uses: ./.github/workflows/ci-test-e2e.yml
with:
type: ui
release: ee
fips: true
transporter: 'nats://nats:4222'
enterprise-license: ${{ needs.release-versions.outputs.enterprise-license }}
shard: '[1, 2, 3, 4, 5]'
total-shard: 5
mongodb-version: "['8.0']"
node-version: ${{ needs.release-versions.outputs.node-version }}
deno-version: ${{ needs.release-versions.outputs.deno-version }}
lowercase-repo: ${{ needs.release-versions.outputs.lowercase-repo }}
gh-docker-tag: ${{ needs.release-versions.outputs.gh-docker-tag }}
retries: ${{ (github.event_name == 'release' || github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/master') && 2 || 0 }}
secrets:
CR_USER: ${{ secrets.CR_USER }}
CR_PAT: ${{ secrets.CR_PAT }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
QASE_API_TOKEN: ${{ secrets.QASE_API_TOKEN }}
REPORTER_ROCKETCHAT_API_KEY: ${{ secrets.REPORTER_ROCKETCHAT_API_KEY }}
REPORTER_ROCKETCHAT_URL: ${{ secrets.REPORTER_ROCKETCHAT_URL }}
REPORTER_JIRA_ROCKETCHAT_API_KEY: ${{ secrets.REPORTER_JIRA_ROCKETCHAT_API_KEY }}

test-federation-matrix:
name: 🔨 Test Federation Matrix
needs: [checks, build-gh-docker-publish, packages-build, release-versions]
Expand Down Expand Up @@ -907,7 +985,7 @@ jobs:
tests-done:
name: ✅ Tests Done
runs-on: ubuntu-24.04-arm
needs: [test-guard, checks, test-unit, test-api, test-ui, test-api-ee, test-ui-ee, test-api-livechat, test-api-livechat-ee, test-api-apps-node-ee, test-federation-matrix]
needs: [test-guard, checks, test-unit, test-api, test-ui, test-api-ee, test-ui-ee, test-api-livechat, test-api-livechat-ee, test-api-apps-node-ee, test-api-fips, test-api-livechat-fips, test-ui-fips, test-federation-matrix]
if: always() && needs.test-guard.outputs.skip-tests != 'true'
steps:
- name: Test finish aggregation
Expand Down Expand Up @@ -948,6 +1026,18 @@ jobs:
exit 1
fi

if [[ '${{ needs.test-api-fips.result }}' != 'success' ]]; then
exit 1
fi

if [[ '${{ needs.test-api-livechat-fips.result }}' != 'success' ]]; then
exit 1
fi

if [[ '${{ needs.test-ui-fips.result }}' != 'success' && '${{ needs.test-ui-fips.result }}' != 'skipped' ]]; then
exit 1
fi

if [[ '${{ needs.test-federation-matrix.result }}' != 'success' ]]; then
exit 1
fi
Expand Down Expand Up @@ -1020,6 +1110,7 @@ jobs:
with:
sparse-checkout: |
docker-compose-ci.yml
docker-compose-ci.fips.yml
sparse-checkout-cone-mode: false
ref: ${{ github.ref }}

Expand Down Expand Up @@ -1103,7 +1194,12 @@ jobs:
fi

# Get image name from docker-compose-ci.yml since rocketchat image is different from service name (rocket.chat)
SRC=$(docker compose -f docker-compose-ci.yml config --format json 2>/dev/null | jq -r --arg s "${service}" '.services[$s].image')
if [[ "$service" == *"-fips" ]]; then
base_service="${service%-fips}"
SRC=$(docker compose -f docker-compose-ci.yml -f docker-compose-ci.fips.yml config --format json 2>/dev/null | jq -r --arg s "$base_service" '.services[$s].image')
else
SRC=$(docker compose -f docker-compose-ci.yml config --format json 2>/dev/null | jq -r --arg s "${service}" '.services[$s].image')
fi
DEST_REPO="docker.io/${IMAGE_NAME}"

echo "Copying $SRC to ${DEST_REPO}:${PRIMARY}"
Expand Down
28 changes: 27 additions & 1 deletion apps/meteor/.docker/Dockerfile.alpine
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ RUN cd /app/bundle/programs/server \
&& find /app/bundle/programs/server/npm/node_modules -type f -name '*.map' -delete \
&& find /app/bundle/programs/web.browser -type f -name '*.map' -delete

FROM node:22.22.3-alpine3.23
FROM node:22.22.3-alpine3.23 AS release-standard

LABEL maintainer="buildmaster@rocket.chat"

Expand Down Expand Up @@ -65,3 +65,29 @@ WORKDIR /app/bundle
EXPOSE 3000

CMD ["node", "main.js"]

FROM rocketchat/dhi-node:22.22.3-alpine3.23-fips AS release-fips

LABEL maintainer="buildmaster@rocket.chat"

# needs a mongo instance - defaults to container linking with alias 'mongo'
ENV DEPLOY_METHOD=docker \
NODE_ENV=production \
MONGO_URL=mongodb://mongo:27017/rocketchat \
HOME=/tmp \
PORT=3000 \
ROOT_URL=http://localhost:3000 \
Accounts_AvatarStorePath=/app/uploads \
APPS_ENGINE_RUNTIME_BACKEND=node

USER node

COPY --from=builder --chown=node:node /app /app

VOLUME /app/uploads

WORKDIR /app/bundle

EXPOSE 3000

CMD ["node", "--force-fips", "main.js"]
Loading
Loading