Search code examples
amazon-web-servicesdockermattermost

How to replace mattermost db container with an AWS RDS?


I am trying to run mattermost-docker 4.10.1 on an AWS EC2.

And I want my app container to connect to a custom AWS RDS. So I made the following changes to docker-compose.yml file:

  1. Remove db container.
  2. Use team version.
  3. Change database connection information.

```

 version: "2"

 services:
-
-  db:
-    build: db
-    read_only: true
-    restart: unless-stopped
-    volumes:
-      - ./volumes/db/var/lib/postgresql/data:/var/lib/postgresql/data
-      - /etc/localtime:/etc/localtime:ro
-    environment:
-      - POSTGRES_USER=mmuser
-      - POSTGRES_PASSWORD=mmuser_password
-      - POSTGRES_DB=mattermost
-    # uncomment the following to enable backup
-    #  - AWS_ACCESS_KEY_ID=XXXX
-    #  - AWS_SECRET_ACCESS_KEY=XXXX
-    #  - WALE_S3_PREFIX=s3://BUCKET_NAME/PATH
-    #  - AWS_REGION=us-east-1
-
   app:
     build:
       context: app
       # comment out following lines for team edition or change UID/GID
-      # args:
-      #   - edition=team
-      #   - PUID=1000
-      #   - PGID=1000
+      args:
+        - edition=team
+        - PUID=1000
+        - PGID=1000
     restart: unless-stopped
     volumes:
       - ./volumes/app/mattermost/config:/mattermost/config:rw
@@ -35,12 +17,17 @@ services:
       - /etc/localtime:/etc/localtime:ro
     environment:
       # set same as db credentials and dbname
-      - MM_USERNAME=mmuser
-      - MM_PASSWORD=mmuser_password
-      - MM_DBNAME=mattermost
+      - MM_USERNAME=myusername
+      - MM_PASSWORD=mypassword
+      - MM_DBNAME=my-mattermost
+      - DB_HOST=myrds.rds.amazonaws.com
+      - DB_PORT_NUMBER=3306
+      - MM_SQLSETTINGS_DRIVERNAME=mysql
+      - 

MM_SQLSETTINGS_DATASOURCE="myusername:mypassword@tcp(myrds.rds.amazonaws.com:3306)/my-mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s"

+
       # in case your config is not in default location
       #- MM_CONFIG=/mattermost/config/config.json
-
   web:
     build: web
     ports:
@@ -52,6 +39,6 @@ services:
       # This directory must have cert files if you want to enable SSL
       - ./volumes/web/cert:/cert:ro
       - /etc/localtime:/etc/localtime:ro
-    # Uncomment for SSL
-    # environment:
-    #  - MATTERMOST_ENABLE_SSL=true
+    environment:
+      - APP_HOST=app
+

```

Then I got Failed to ping DB retrying in 10 seconds err=time: unknown unit s\" in duration 30s\" error when I run the docker-compose by using docker-compose up -d.

The error message can be found at volumes/app/mattermost/logs/mattermost.log.

Why does this happen? I haven't found anything that specifies the unit of time in the config files.

I've confirmed that my EC2 is able to connect to my RDS by running mysql -h myrds.rds.amazonaws.com -umyusername -pmypassword.

Anyone know how to replace the mattermost db container with AWS RDS?


Solution

  • After removing the double quotes from MM_SQLSETTINGS_DATASOURCE variable, the problem is solved.

    I mean I change the line MM_SQLSETTINGS_DATASOURCE="myusername:mypassword@tcp(myrds.rds.amazonaws.com:3306)/my-mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s"

    to

    MM_SQLSETTINGS_DATASOURCE=myusername:mypassword@tcp(myrds.rds.amazonaws.com:3306)/my-mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s