RocketChat / helm-charts

Repository for RocketChat helm charts
36 stars 67 forks source link

Socket Connection isnt working well #75

Open juliendeveloper opened 1 year ago

juliendeveloper commented 1 year ago

I created Rocketchat through the Helm Chart and that all worked so far. However, after testing, I noticed that many of the socket functions do not work. Updating the status only works through the REST API and after sending messages they are grayed out.

Latest Version

sandrotanner commented 1 year ago

This is most likely not an issue with the helm chart but because of https://github.com/RocketChat/Rocket.Chat/issues/26505 Or do you get a log line when starting (re)starting the pod that goes like this: Change Stream is available for your installation, give admin permissions to your database user to use this improved version?

juliendeveloper commented 1 year ago

Yes i do here is my log (i use latest version of the helm chart without any big changes. Just some ingress changes)

MessageType.render is deprecated. Use MessageType.message instead. livechat_webrtc_video_call
{"level":40,"time":"2022-09-28T11:10:53.294Z","pid":1,"hostname":"rocketchat-rocketchat-6cd7fc9889-5gdr7","name":"VoIPService","msg":"Voip is not enabled. Cant start the service"}
Change Stream is available for your installation, give admin permissions to your database user to use this improved version.
[DatabaseWatcher] Using oplog
Exception in callback of async function: errorClass [Error]: [You must set "intervalTimeInMS" property in rateLimiter for REST API endpoint]
    at APIClass.addRateLimiterRuleForRoutes (app/api/server/api.js:267:10)
    at app/api/server/api.js:252:10
    at Array.forEach (<anonymous>)
    at APIClass.reloadRoutesToRefreshRateLimiter (app/api/server/api.js:250:16)
    at app/api/server/api.js:849:9
    at runWithEnvironment (packages/meteor.js:1320:24)
    at packages/meteor.js:1333:14
    at runWithEnvironment (packages/meteor.js:1320:24) {
  isClientSafe: true,
  error: 'You must set "intervalTimeInMS" property in rateLimiter for REST API endpoint',
  reason: undefined,
  details: undefined,
  errorType: 'Meteor.Error'
}
{"level":40,"time":"2022-09-28T11:10:57.496Z","pid":1,"hostname":"rocketchat-rocketchat-6cd7fc9889-5gdr7","name":"VoIPService","msg":"VoIP service already stopped"}
=== UnHandledPromiseRejection ===
MongoParseError: Password contains unescaped characters
    at new ConnectionString (/app/bundle/programs/server/npm/node_modules/mongodb-connection-string-url/lib/index.js:115:23)
    at parseOptions (/app/bundle/programs/server/npm/node_modules/mongodb/lib/connection_string.js:209:17)
    at new MongoClient (/app/bundle/programs/server/npm/node_modules/mongodb/lib/mongo_client.js:62:63)
    at server/database/DatabaseWatcher.ts:93:18
    at /app/bundle/programs/server/npm/node_modules/meteor/promise/node_modules/meteor-promise/fiber_pool.js:43:40
---------------------------------
Errors like this can cause oplog processing errors.
Setting EXIT_UNHANDLEDPROMISEREJECTION will cause the process to exit allowing your service to automatically restart the process
Future node.js versions will automatically exit the process
=================================
ufs: temp directory created at "/tmp/ufs"
Loaded the Apps Framework and loaded a total of 0 Apps!
+-------------------------------------------------+
|                  SERVER RUNNING                 |
+-------------------------------------------------+
|                                                 |
|  Rocket.Chat Version: 5.1.0                     |
|       NodeJS Version: 14.19.3 - x64             |
|      MongoDB Version: 4.4.11                    |
|       MongoDB Engine: unknown                   |
|             Platform: linux                     |
|         Process Port: 3000                      |
|             Site URL: https://rchat.partii.app  |
|     ReplicaSet OpLog: Enabled                   |
|          Commit Hash: 34df27ac14                |
|        Commit Branch: HEAD                      |
|                                                 |
+-------------------------------------------------+
Exception in defer callback: Error: You have not provided a mail URL. You can provide it by using the environment variable MAIL_URL or your settings. You can read more about it here: https://docs.meteor.com/api/email.html.
    at Object.Email.send (packages/email/email.js:259:11)
    at AccountsServer.Accounts.sendEnrollmentEmail (packages/accounts-password/password_server.js:553:9)
    at app/lib/server/functions/setUsername.ts:47:14
    at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1257:12)
    at packages/meteor.js:555:25
    at runWithEnvironment (packages/meteor.js:1320:24)
{"level":50,"time":"2022-09-28T11:12:43.668Z","pid":1,"hostname":"rocketchat-rocketchat-6cd7fc9889-5gdr7","name":"System","msg":"Exception while invoking method autoTranslate.getSupportedLanguages 'Auto-Translate is disabled [error-autotranslate-disabled]'"}
{"level":50,"time":"2022-09-28T11:12:55.314Z","pid":1,"hostname":"rocketchat-rocketchat-6cd7fc9889-5gdr7","name":"System","msg":"Exception while invoking method autoTranslate.getSupportedLanguages 'Auto-Translate is disabled [error-autotranslate-disabled]'"}
{"level":50,"time":"2022-09-28T12:47:57.580Z","pid":1,"hostname":"rocketchat-rocketchat-6cd7fc9889-5gdr7","name":"System","msg":"Exception while invoking method autoTranslate.getSupportedLanguages 'Auto-Translate is disabled [error-autotranslate-disabled]'"}
{"level":50,"time":"2022-09-28T12:49:31.103Z","pid":1,"hostname":"rocketchat-rocketchat-6cd7fc9889-5gdr7","name":"System","msg":"Exception while invoking method saveSettings 'TOTP Required [totp-required]'"}
{"level":50,"time":"2022-09-28T12:49:45.850Z","pid":1,"hostname":"rocketchat-rocketchat-6cd7fc9889-5gdr7","name":"System","msg":"Exception while invoking method autoTranslate.getSupportedLanguages 'Auto-Translate is disabled [error-autotranslate-disabled]'"}
{"level":50,"time":"2022-09-28T12:49:53.836Z","pid":1,"hostname":"rocketchat-rocketchat-6cd7fc9889-5gdr7","name":"System","msg":"Exception while invoking method autoTranslate.getSupportedLanguages 'Auto-Translate is disabled [error-autotranslate-disabled]'"}
{"level":50,"time":"2022-09-28T12:59:51.822Z","pid":1,"hostname":"rocketchat-rocketchat-6cd7fc9889-5gdr7","name":"System","msg":"Exception while invoking method autoTranslate.getSupportedLanguages 'Auto-Translate is disabled [error-autotranslate-disabled]'"}
{"level":50,"time":"2022-09-28T13:00:00.273Z","pid":1,"hostname":"rocketchat-rocketchat-6cd7fc9889-5gdr7","name":"System","msg":"Exception while invoking method autoTranslate.getSupportedLanguages 'Auto-Translate is disabled [error-autotranslate-disabled]'"}
juliendeveloper commented 1 year ago

Here is my helm chart values.yaml

## Rocket Chat image version
## ref: https://hub.docker.com/r/rocketchat/rocket.chat/tags
##
image:
  repository: registry.rocket.chat/rocketchat/rocket.chat
  pullPolicy: IfNotPresent

imagePullSecrets: []

## Host for the application
## set it to a domain pointing to your loadbalancer
host: rchat.partii.app

replicaCount: 1
minAvailable: 1

smtp:
  enabled: false
  username:
  password:
  host:
  port: 587

# Extra env vars for Rocket.Chat:
extraEnv:
# - name: MONGO_OPTIONS
#   value: '{"ssl": "true"}'
# - name: MONGO_OPLOG_URL
#   value: mongodb://oploguser:password@rocket-1:27017/local&replicaSet=rs0

# Extra volumes for Rocket.Chat...
extraVolumes:
# - name: etc-certs
#   hostPath:
#     path: /etc/ssl/certs
#     type: Directory
# - name: usr-certs
#   hostPath:
#     path: /usr/share/ca-certificates
#     type: Directory

# ... and where they should be mounted inside the container
extraVolumeMounts:
# - mountPath: /etc/ssl/certs
#   name: etc-certs
#   readOnly: true
# - mountPath: /usr/share/ca-certificates
#   name: usr-certs
#   readOnly: true

## Specifies a Registration Token (obtainable at https://cloud.rocket.chat)
#registrationToken: ""

## Specifies an Enterprise License
# license: ""

## Pod anti-affinity can prevent the scheduler from placing RocketChat replicas on the same node.
## The default value "soft" means that the scheduler should *prefer* to not schedule two replica pods onto the same node but no guarantee is provided.
## The value "hard" means that the scheduler is *required* to not schedule two replica pods onto the same node.
## The value "" will disable pod anti-affinity so that no anti-affinity rules will be configured.
##
podAntiAffinity: ""

## If anti-affinity is enabled sets the topologyKey to use for anti-affinity.
## This can be changed to, for example, failure-domain.beta.kubernetes.io/zone
##
podAntiAffinityTopologyKey: kubernetes.io/hostname

## Assign custom affinity rules to the RocketChat instance
## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
##
affinity: {}
# nodeAffinity:
#   requiredDuringSchedulingIgnoredDuringExecution:
#     nodeSelectorTerms:
#     - matchExpressions:
#       - key: kubernetes.io/e2e-az-name
#         operator: In
#         values:
#         - e2e-az1
#         - e2e-az2

## Use an existing secret file with the MongoDB Url and OplogUrl
existingMongodbSecret: ""

## MongoDB URL if using an externally provisioned MongoDB
externalMongodbUrl: # mongodb://user:password@localhost:27017/rocketchat
externalMongodbOplogUrl: # mongodb://user:password@localhost:27017/local?replicaSet=rs0&authSource=admin

##
## MongoDB chart configuration
### ref https://github.com/helm/charts/tree/master/stable/mongodb#configuration
##
mongodb:
  ## Enable or disable MongoDB dependency completely.
  enabled: true

  auth:
    # rootPassword:
    username: rocketchat
    # password:
    database: rocketchat

  architecture: replicaset
  replicaCount: 1
  arbiter:
    enabled: false
    pdb:
      minAvailable: 0
  pdb:
    minAvailable: 0

    # key:

  persistence:
    enabled: true
    ## mongodb data Persistent Volume Storage Class
    ## If defined, storageClassName: <storageClass>
    ## If set to "-", storageClassName: "", which disables dynamic provisioning
    ## If undefined (the default) or set to null, no storageClassName spec is
    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
    ##   GKE, AWS & OpenStack)
    ##
    # storageClass: "-"
    accessMode: ReadWriteOnce
    size: 8Gi

  volumePermissions: { enabled: true }

## Enable persistence using Persistent Volume Claims
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
##
persistence:
  enabled: false
  # existingClaim: existingClaimName
  ## rocketchat data Persistent Volume Storage Class
  ## If defined, storageClassName: <storageClass>
  ## If set to "-", storageClassName: "", which disables dynamic provisioning
  ## If undefined (the default) or set to null, no storageClassName spec is
  ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
  ##   GKE, AWS & OpenStack)
  ##
  # storageClass: "-"
  accessMode: ReadWriteOnce
  size: 8Gi

## Configure resource requests and limits
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
##
# resources:
#   requests:
#     memory: 512Mi
#     cpu: 300m

securityContext:
  enabled: true
  runAsUser: 999
  fsGroup: 999

serviceAccount:
  # Specifies whether a ServiceAccount should be created
  create: true

  # Annotations to add to the ServiceAccount
  annotations: {}
  # eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/dummyRole

  # The name of the ServiceAccount to use.
  # If not set and create is true, a name is generated using the fullname template
  name:

## Configure the ingress object to hook into existing infastructure
### ref : http://kubernetes.io/docs/user-guide/ingress/
###
ingress:
  enabled: true
  pathType: Prefix
  # ingressClassName: "nxinx"
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
  # kubernetes.io/ingress.class: "nginx"
  path: /
  tls:
    - hosts:
        - rchat.partii.app
      secretName: rchat.partii.app-tls

service:
  annotations: {}
  # service.beta.kubernetes.io/aws-load-balancer-internal: "0.0.0.0/0"

  labels: {}
  # key: value

  ## ServiceType
  ## ref: https://kubernetes.io/docs/user-guide/services/#publishing-services---service-types
  type: ClusterIP

  ## Optional static port assignment for service type NodePort.
  # nodePort: 30000

  port: 80

## Optional custom labels for the deployment resource.
deploymentLabels: {}

## Optional Pod Labels.
podLabels: {}

## Optional Pod Annotations.
podAnnotations:
  {}
  # prometheus.io/port: "9458"
  # prometheus.io/path: "/metrics"
# prometheus.io/scrape: "true"

## Optional Prometheus scraping Settings
prometheusScraping:
  enabled: false
  port: 9100 # Avoid using 9458: conflicts with Moleculer Exporter

serviceMonitor:
  ## serviceMonitor.enabled Create ServiceMonitor resource(s) for scraping metrics using PrometheusOperator
  ## prometheusScraping.enabled should be also enabled
  ##
  enabled: false
  ## metrics.serviceMonitor.interval The interval at which metrics should be scraped
  ##
  interval: 30s
  ## metrics.serviceMonitor.port The port name at which container exposes Prometheus metrics
  ##
  port: metrics

## Liveness and readiness probe values
## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
##
livenessProbe:
  enabled: true
  initialDelaySeconds: 60
  periodSeconds: 15
  timeoutSeconds: 5
  failureThreshold: 3
  successThreshold: 1

readinessProbe:
  enabled: true
  initialDelaySeconds: 10
  periodSeconds: 15
  timeoutSeconds: 5
  failureThreshold: 3
  successThreshold: 1

podDisruptionBudget:
  enabled: true

# # # # # # # # # # # # # # # # #
#   M I C R O S E R V I C E S   #
#  Only available to E.E users  #
# # # # # # # # # # # # # # # # #

## Deploy as microservices?
# Monolithic architecture, by default
microservices:
  enabled: false

  logLevel: warn

  heartbeatInterval: 10
  heartbeatTimeout: 30

  ## Parameters for each deployment:
  presence:
    replicas: 1
    image:
      repository: rocketchat/presence-service
      pullPolicy: IfNotPresent
  ddpStreamer:
    replicas: 1
    image:
      repository: rocketchat/ddp-streamer-service
      pullPolicy: IfNotPresent
  account:
    replicas: 1
    image:
      repository: rocketchat/account-service
      pullPolicy: IfNotPresent
  authorization:
    replicas: 1
    image:
      repository: rocketchat/authorization-service
      pullPolicy: IfNotPresent
  streamHub:
    replicas: 1
    image:
      repository: rocketchat/stream-hub-service
      pullPolicy: IfNotPresent
  nats:
    replicas: 1

  ## Parameters for each Kubernetes service
  # NOTE: reserved for future usage still
  presenceService:
  ddpStreamerService:
  natsService:
  streamHubService:
  accountService:
  authorizationService:

nats:
  nats:
    image: nats:2.4-alpine
sandrotanner commented 1 year ago

Not sure if it is possible to fix this directly in the chart. But if you don't deploy many fresh instances just manually alter the DB Permissions like this and you are good to go: https://github.com/RocketChat/docs/pull/1853/files

juliendeveloper commented 1 year ago

Unfortunately this is not an option