도메인 관련 설정

채팅 서버를 운영하고 싶은 subdomain을 세팅한다.

제어판 > 로그인 포털 > 고급 > 역방향 프록시에서 위와 같이 설정한다.

연결성 관련 설정

사용자 지정 머리글 (커스텀 헤더) 생성 시 websocket을 선택하여 위와 같이 설정한다.

제어판 > 네트워크 > 연결성에서 HTTP/2 활성화를 체크한다.

제어판 > 보안 > 고급에서 HTTP 압축 활성화를 체크한다.

Synapse 컨테이너 세팅

File Station에서 docker 폴더 밑에 synapse 폴더를 만든다.

synapse 폴더 밑에 data, db 폴더를 만든다.

sudo docker run --rm \
--user 1026:100 \
-v /volume1/docker/synapse/data:/data \
-e SYNAPSE_CONFIG_PATH=/data/homeserver.yaml \
-e SYNAPSE_SERVER_NAME=<서버 이름> \
-e SYNAPSE_REPORT_STATS=yes \
matrixdotorg/synapse:latest generate

서버 이름을 입력하고 위 명령을 실행한다.

data 폴더 안의 homeserver.yaml 파일을 위와 같이 수정한다. 홈서버 이름 밑에 다음 내용을 추가한다.

enable_registration: true
enable_registration_without_verification: true
enable_group_creation: true

database:
  name: sqlite3
  args:
    database: /data/homeserver.db

이 내용을 삭제하고, 아래의 내용으로 replace 한다.

database:
  name: psycopg2
  args:
    user: synapseuser
    password: synapsepass
    database: synapsedb
    host: synapse-db
    cp_min: 5
    cp_max: 10

services:
  synapse-db:
    image: postgres:16
    container_name: Synapse-DB
    hostname: synapse-db
    security_opt:
      - no-new-privileges:true
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "synapsedb", "-U", "synapseuser"]
      timeout: 45s
      interval: 10s
      retries: 10
    volumes:
      - /volume1/docker/synapse/db:/var/lib/postgresql/data:rw
    environment:
      - POSTGRES_DB=synapsedb
      - POSTGRES_USER=synapseuser
      - POSTGRES_PASSWORD=synapsepass
      - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
    restart: on-failure:5

  synapse:
    image: matrixdotorg/synapse:latest
    container_name: Synapse
    hostname: synapse
    security_opt:
      - no-new-privileges:true
    user: 1026:100
    environment:
      - TZ=Asia/Seoul
      - SYNAPSE_CONFIG_PATH=/data/homeserver.yaml
    volumes:
      - /volume1/docker/synapse/data:/data:rw
    ports:
      - 8450:8008/tcp
    restart: on-failure:5
    depends_on:
      synapse-db:
        condition: service_started

Portainer에 접속해서 위와 같이 Stack을 생성한다.