전자우편 및 푸시 알림
Antimatter는 초대, 비밀번호 재설정, 인증 및 놓친 메시지에 대한 전자우편을 보내고, 푸시 프록시를 통해 모바일 앱으로 푸시 알림을 전송합니다. 구성을 마칠 때까지 이 두 기능은 작동하지 않습니다.
발신 전자우편(SMTP)
Antimatter는 제공한 SMTP 서버(조직의 메일 서버 또는 트랜잭션 전자우편 서비스)를 통해 전자우편을 보냅니다. 이를 설정하지 않으면 사용자는 잊어버린 비밀번호를 재설정할 수 없고, 전자우편 초대 및 인증 메일이 도착하지 않으며, 놓친 메시지에 대한 전자우편 알림을 받지 못합니다.
관리자 도구 › 환경 › SMTP에서 설정하거나, 다음 변수를 사용하세요:
| 설정 | 키 및 변수 | 기본값 |
|---|---|---|
| SMTP 서버 | EmailSettings.SMTPServer, AM_EMAILSETTINGS_SMTPSERVER | localhost |
| SMTP 서버 포트 | EmailSettings.SMTPPort, AM_EMAILSETTINGS_SMTPPORT | 10025 |
| SMTP 인증 활성화 | EmailSettings.EnableSMTPAuth, AM_EMAILSETTINGS_ENABLESMTPAUTH | 연결 보안이 없으면 꺼짐, 있으면 켜짐 |
| SMTP 서버 사용자명 | EmailSettings.SMTPUsername, AM_EMAILSETTINGS_SMTPUSERNAME | 빈 값 |
| SMTP 서버 비밀번호 | EmailSettings.SMTPPassword, AM_EMAILSETTINGS_SMTPPASSWORD | 빈 값 |
| 연결 보안 | EmailSettings.ConnectionSecurity, AM_EMAILSETTINGS_CONNECTIONSECURITY | 없음(빈 값); 또는 TLS 또는 STARTTLS |
| 인증서 검증 생략하기 | EmailSettings.SkipServerCertificateVerification | 꺼짐. 프로덕션 환경에서는 꺼진 상태로 유지하세요. |
제공자의 안내에 따라 포트 587에서 STARTTLS 또는 포트 465에서 TLS를 사용하세요. 그런 다음 같은 페이지에서 연결 테스트를 클릭하세요: Antimatter가 사용자 본인의 주소로 테스트 전자우편을 보냅니다.
compose.yaml 옆에 compose.override.yaml 파일로 Docker Compose를 사용하는 일반적인 설정 예시:
services:
antimatter:
environment:
AM_EMAILSETTINGS_SMTPSERVER: smtp.example.com
AM_EMAILSETTINGS_SMTPPORT: "587"
AM_EMAILSETTINGS_CONNECTIONSECURITY: STARTTLS
AM_EMAILSETTINGS_ENABLESMTPAUTH: "true"
AM_EMAILSETTINGS_SMTPUSERNAME: chat@example.com
AM_EMAILSETTINGS_SMTPPASSWORD: ${SMTP_PASSWORD}
AM_EMAILSETTINGS_FEEDBACKNAME: Antimatter
AM_EMAILSETTINGS_FEEDBACKEMAIL: chat@example.com
AM_EMAILSETTINGS_REPLYTOADDRESS: chat@example.com
SMTP_PASSWORD를 .env 파일에 넣으세요. 사이트의 compose 파일은 서버를 인터넷 접근이 가능한 기본 네트워크에 배치하므로, 외부 SMTP 서버에 도달할 수 있습니다.
발신자 및 알림 전자우편 설정
관리자 도구 › 사이트 구성 › 알림에서:
| 설정 | 키 | 기본값 |
|---|---|---|
| 전자우편 알림 활성화 | EmailSettings.SendEmailNotifications | 켜짐 |
| 전자우편 알림에 표시할 이름 | EmailSettings.FeedbackName | 빈 값 |
| 발신자의 전자우편 주소 | EmailSettings.FeedbackEmail | test@example.com: 변경하세요 |
| 알림 회신 주소 | EmailSettings.ReplyToAddress | test@example.com: 변경하세요 |
| 지원 이메일 주소 | SupportSettings.SupportEmail | 빈 값 |
| 전자우편 알림의 바닥글에 표시될 주소 | EmailSettings.FeedbackOrganization | 빈 값 |
| 전자우편 알림 내용 | EmailSettings.EmailNotificationContentsType | 전체 메시지 내용(full)을 보내거나, 발신자 이름만 포함된 일반 설명(generic)을 보내세요 |
| 전자우편 일괄 발송 | EmailSettings.EnableEmailBatching | 꺼짐. 켜면, 개별 전자우편 대신 15분 또는 1시간마다 놓친 메시지를 한 통의 전자우편으로 그룹화하여 받을 수 있도록 선택할 수 있습니다. |
| 이메일 알림에 채널 이름 사용 | EmailSettings.UseChannelInEmailNotifications | 꺼짐 |
| 미리보기 모드 배너 활성화 | EmailSettings.EnablePreviewModeBanner | 켜짐: 전자우편 알림이 꺼져 있는 동안, 전자우편이 구성되지 않았음을 관리자에게 알려주는 배너가 표시됩니다 |
From 주소는 SMTP 서버가 발신할 수 있는 주소여야 합니다. 해당 도메인의 SPF와 DKIM을 설정하지 않으면 이메일이 스팸 폴더로 분류될 수 있습니다.
이메일 관련 로그인 설정(새 계정의 주소 인증 여부, 이메일로 초대할 수 있는지 여부)은 로그인 및 계정에 있습니다.
모바일 앱으로 푸시 알림 보내기
푸시 알림 작동 방식
Antimatter는 Apple이나 Google과 직접 통신하지 않습니다. 각 알림마다 push proxy를 호출하며, 이 프록시는 모바일 앱의 자격 증명을 보유하고 iPhone의 경우 Apple(APNs)로, Android의 경우 Google(Firebase Cloud Messaging)로 알림을 전달합니다. Apple과 Google은 해당 앱의 자격 증명으로만 알림을 전달합니다. 따라서 push proxy는 자격 증명을 보유한 모바일 앱의 단일 빌드와만 작동합니다.
- Antimatter는 공개 push proxy를 운영하지 않습니다. 사용자들이 설치하는 모바일 앱 빌드의 자격 증명을 사용하여 Antimatter push proxy를 직접 실행해야 합니다.
- Antimatter는 Mattermost의 푸시 서비스(테스트 또는 호스팅)에 알림을 보내지 않습니다. 해당 서비스는 Mattermost 자체 모바일 앱에만 전달하기 때문입니다. 서버가 해당 서비스의 주소(예: 구형 Mattermost 설정에서 사용하는
https://push-test.mattermost.com)로 설정되어 있으면 아무것도 보내지 않고 시작 시 경고를 기록합니다.
새 서버에는 푸시 알림 서버가 없으므로, push proxy의 주소를 설정할 때까지 푸시 알림을 보내지 않습니다. 그 전까지 모바일 앱은 작동하지만 알림을 받지 못합니다.
push proxy 실행
push proxy는 push-proxy 저장소에 있습니다. README에는 모바일 앱 빌드를 게시한 계정에서 가져오는 두 가지 자격 증명을 얻는 방법이 설명되어 있습니다:
- 안드로이드: Android 빌드가 사용하는 Firebase 프로젝트의 서비스 계정 파일.
- iOS: iOS 빌드를 게시하는 Apple 개발자 계정의 APNs 인증 키(
AuthKey_<KEY ID>.p8) 및 해당 키 ID와 팀 ID.
이들을 프록시 설정 파일과 함께 compose.yaml 옆에 배치하세요:
push-proxy/
config/antimatter-push-proxy.json
certs/AuthKey_ABCDE12345.p8
certs/firebase-service-account.json
번들 식별자, 키 ID, 팀 ID와 함께 push-proxy/config/antimatter-push-proxy.json를 작성하세요:
{
"ListenAddress": ":8066",
"ThrottlePerSec": 300,
"ThrottleMemoryStoreSize": 50000,
"ThrottleVaryByHeader": "X-Forwarded-For",
"EnableMetrics": false,
"SendTimeoutSec": 30,
"RetryTimeoutSec": 8,
"ApplePushSettings": [
{
"Type": "apple_rn",
"ApplePushUseDevelopment": false,
"ApplePushTopic": "chat.antimatter.app",
"AppleAuthKeyFile": "./certs/AuthKey_ABCDE12345.p8",
"AppleAuthKeyID": "ABCDE12345",
"AppleTeamID": "FGHIJ67890"
}
],
"AndroidPushSettings": [
{
"Type": "android_rn",
"ServiceFileLocation": "./certs/firebase-service-account.json"
}
],
"EnableConsoleLog": true,
"EnableFileLog": false,
"LogFormat": "plain",
"LogLevel": "info"
}
ApplePushTopic은 빌드의 iOS 번들 식별자입니다. ApplePushUseDevelopment는 Xcode에서 설치한 빌드인 경우에만 true여야 합니다. 통화는 VoIP 푸시를 통해 iPhone에 울리며, 동일한 키를 사용하므로 여기에 추가 설정이 필요 없습니다.
사이트에는 compose 파일에 추가할 수 있는 compose.push.example.yaml 파일이 준비되어 있습니다. 이 파일은 공개된 이미지인 ghcr.io/antimatterchat/push-proxy:latest를 실행합니다.
curl -fsSLO https://antimatter.chat/compose.push.example.yaml
docker compose -f compose.yaml -f compose.push.example.yaml --profile push up -d
docker compose -f compose.yaml -f compose.push.example.yaml logs push-proxy
시작할 때 프록시 로그는 설정된 각 푸시 전송 대상을 이름으로 나열하고, 자격 증명을 불러올 수 없는 대상에 대해서는 오류를 기록합니다. 프록시는 포트를 공개하지 않습니다. compose 네트워크를 통해 Antimatter만 프록시에 접근할 수 있습니다.
Docker를 사용하지 않는 경우, push proxy의 .deb 또는 .rpm 패키지를 설치하세요: GIF 서비스 및 push proxy 패키지를 참고하세요.
Antimatter를 프록시로 설정
관리자 도구 › 환경 › 푸시 알림 서버에서 모바일 푸시 알림을 자체 푸시 프록시를 통해 푸시 알림 전송으로, 푸시 알림 서버를 http://push-proxy:8066(다른 위치에 실행하는 경우 프록시의 HTTPS 주소)으로 설정합니다. 이 옵션을 선택하고 주소를 입력하지 않으면 페이지를 저장할 수 없습니다. 푸시 알림 전송을 중지하려면 푸시 알림을 보내지 않습니다를 선택하세요. 또는 antimatter 서비스에서 변수를 사용할 수도 있습니다:
AM_EMAILSETTINGS_SENDPUSHNOTIFICATIONS: "true"
AM_EMAILSETTINGS_PUSHNOTIFICATIONSERVER: http://push-proxy:8066
확인 방법: 모바일 앱으로 로그인한 뒤 앱을 백그라운드로 보내고, 다른 계정으로 멘션을 보내세요. 알림이 도착하지 않으면 Antimatter 로그와 프록시 로그에서 push를 검색하세요. 로그에는 장치 유형이 알려지지 않았는지, 키가 거부되었는지, 또는 장치가 다른 앱 빌드에 속하는지 표시됩니다.
알림에 포함되는 내용
관리자 도구 › 사이트 구성 › 알림 › 푸시 알림 내용(EmailSettings.PushNotificationContents):
| 옵션 | 값 |
|---|---|
| 발신자 이름만 포함된 일반 설명 | generic_no_channel |
| 발신자와 채널 이름이 포함된 일반 설명 | generic |
| 알림 페이로드에 전송되는 전체 메시지 내용(기본값) | full |
| 수신 시 서버에서 가져오는 전체 메시지 내용 | id_loaded |
id_loaded를 사용하면 프록시를 통해 전송되는 알림에는 Apple과 Google에 ID만 전달되고, 앱이 서버에서 메시지를 가져옵니다. 메시지 텍스트가 해당 서비스로 전달되지 않습니다. 메시지가 기밀인 경우 가장 좋은 선택지입니다.
푸시 알림 서버 페이지의 채널당 최대 알림(TeamSettings.MaxNotificationsPerChannel, 기본값 1000)은 @here, @all, @channel 멘션이 작동할 수 있는 채널의 최대 멤버 수입니다. 더 큰 채널에서는 이러한 멘션과 입력 표시가 비활성화됩니다.