Updated service configurations, added new services, removed deprecated ones, and improved gitignore patterns for better repository hygiene. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
322 lines
8.6 KiB
Markdown
322 lines
8.6 KiB
Markdown
# Matrix Server with Bridges
|
|
|
|
Complete Matrix/Synapse homeserver setup with local authentication and bridges for Telegram, WhatsApp, and Google Chat.
|
|
|
|
## Architecture
|
|
|
|
- **Synapse**: Matrix homeserver (fig.systems)
|
|
- **PostgreSQL**: Database backend
|
|
- **Traefik**: Reverse proxy with Let's Encrypt
|
|
- **Bridges**: Telegram, WhatsApp, Google Chat
|
|
- **Optional**: Element web client
|
|
|
|
## Domain Configuration
|
|
|
|
- **Server**: matrix.fig.systems
|
|
- **Server Name**: fig.systems (used for Matrix IDs like @user:fig.systems)
|
|
- **Federation**: Enabled via .well-known delegation
|
|
|
|
## Setup Instructions
|
|
|
|
### 1. Deploy Matrix Server
|
|
|
|
```bash
|
|
cd compose/services/matrix
|
|
docker compose up -d
|
|
```
|
|
|
|
Wait for Synapse to start and initialize the database. Check logs:
|
|
```bash
|
|
docker compose logs -f synapse
|
|
```
|
|
|
|
### 2. Create Your First Admin User
|
|
|
|
Once Synapse is running, create an admin user:
|
|
```bash
|
|
docker exec -it matrix-synapse register_new_matrix_user -c /data/homeserver.yaml -a http://localhost:8008
|
|
```
|
|
|
|
Follow the prompts to create your admin account with a username and password.
|
|
|
|
### 3. Test Matrix Server
|
|
|
|
Visit https://matrix.fig.systems and you should see the Matrix homeserver info.
|
|
|
|
Try logging in:
|
|
1. Go to https://app.element.io
|
|
2. Click "Sign in"
|
|
3. Click "Edit" next to the homeserver
|
|
4. Enter: `matrix.fig.systems`
|
|
5. Click "Continue"
|
|
6. Enter your username and password
|
|
|
|
### 4. Configure Telegram Bridge
|
|
|
|
**Get Telegram API Credentials:**
|
|
1. Visit https://my.telegram.org
|
|
2. Log in with your phone number
|
|
3. Go to "API development tools"
|
|
4. Create an app (use any title/short name)
|
|
5. Note your `api_id` (number) and `api_hash` (string)
|
|
|
|
**Generate Bridge Config:**
|
|
```bash
|
|
# Generate initial config
|
|
docker run --rm -v /mnt/media/matrix/bridges/telegram:/data dock.mau.dev/mautrix/telegram:latest
|
|
|
|
# Edit the config
|
|
nano /mnt/media/matrix/bridges/telegram/config.yaml
|
|
```
|
|
|
|
**Update these settings in config.yaml:**
|
|
- `homeserver.address`: `http://synapse:8008`
|
|
- `homeserver.domain`: `fig.systems`
|
|
- `appservice.address`: `http://mautrix-telegram:29317`
|
|
- `appservice.hostname`: `0.0.0.0`
|
|
- `appservice.port`: `29317`
|
|
- `appservice.database`: `postgres://synapse:PASSWORD@postgres/telegram` (use password from .env)
|
|
- `telegram.api_id`: Your API ID
|
|
- `telegram.api_hash`: Your API hash
|
|
- `bridge.permissions`: Add your Matrix ID with admin level
|
|
|
|
**Register the bridge:**
|
|
```bash
|
|
# Copy the registration file to Synapse
|
|
cp /mnt/media/matrix/bridges/telegram/registration.yaml /mnt/media/matrix/synapse/data/telegram-registration.yaml
|
|
```
|
|
|
|
Add to `homeserver.yaml` under `app_service_config_files`:
|
|
```yaml
|
|
app_service_config_files:
|
|
- /data/telegram-registration.yaml
|
|
```
|
|
|
|
Restart Synapse:
|
|
```bash
|
|
docker compose restart synapse
|
|
```
|
|
|
|
Start the bridge:
|
|
```bash
|
|
docker compose up -d mautrix-telegram
|
|
```
|
|
|
|
**Use the bridge:**
|
|
1. In Element, start a chat with `@telegrambot:fig.systems`
|
|
2. Send `login` and follow the instructions
|
|
|
|
### 5. Configure WhatsApp Bridge
|
|
|
|
**Generate Bridge Config:**
|
|
```bash
|
|
# Generate initial config
|
|
docker run --rm -v /mnt/media/matrix/bridges/whatsapp:/data dock.mau.dev/mautrix/whatsapp:latest
|
|
|
|
# Edit the config
|
|
nano /mnt/media/matrix/bridges/whatsapp/config.yaml
|
|
```
|
|
|
|
**Update these settings in config.yaml:**
|
|
- `homeserver.address`: `http://synapse:8008`
|
|
- `homeserver.domain`: `fig.systems`
|
|
- `appservice.address`: `http://mautrix-whatsapp:29318`
|
|
- `appservice.hostname`: `0.0.0.0`
|
|
- `appservice.port`: `29318`
|
|
- `appservice.database.uri`: `postgres://synapse:PASSWORD@postgres/whatsapp` (use password from .env)
|
|
- `bridge.permissions`: Add your Matrix ID with admin level
|
|
|
|
**Register the bridge:**
|
|
```bash
|
|
# Copy the registration file to Synapse
|
|
cp /mnt/media/matrix/bridges/whatsapp/registration.yaml /mnt/media/matrix/synapse/data/whatsapp-registration.yaml
|
|
```
|
|
|
|
Add to `homeserver.yaml`:
|
|
```yaml
|
|
app_service_config_files:
|
|
- /data/telegram-registration.yaml
|
|
- /data/whatsapp-registration.yaml
|
|
```
|
|
|
|
Restart Synapse:
|
|
```bash
|
|
docker compose restart synapse
|
|
```
|
|
|
|
Start the bridge:
|
|
```bash
|
|
docker compose up -d mautrix-whatsapp
|
|
```
|
|
|
|
**Use the bridge:**
|
|
1. In Element, start a chat with `@whatsappbot:fig.systems`
|
|
2. Send `login`
|
|
3. Scan the QR code with WhatsApp on your phone (like WhatsApp Web)
|
|
|
|
### 6. Configure Google Chat Bridge
|
|
|
|
**Prerequisites:**
|
|
- Google Cloud Project
|
|
- Google Chat API enabled
|
|
- OAuth 2.0 credentials
|
|
|
|
**Setup Google Cloud:**
|
|
1. Go to https://console.cloud.google.com
|
|
2. Create a new project or select existing
|
|
3. Enable "Google Chat API"
|
|
4. Create OAuth 2.0 credentials:
|
|
- Application type: Desktop app
|
|
- Download the JSON file
|
|
|
|
**Generate Bridge Config:**
|
|
```bash
|
|
# Generate initial config
|
|
docker run --rm -v /mnt/media/matrix/bridges/googlechat:/data dock.mau.dev/mautrix/googlechat:latest
|
|
|
|
# Edit the config
|
|
nano /mnt/media/matrix/bridges/googlechat/config.yaml
|
|
```
|
|
|
|
**Update these settings in config.yaml:**
|
|
- `homeserver.address`: `http://synapse:8008`
|
|
- `homeserver.domain`: `fig.systems`
|
|
- `appservice.address`: `http://mautrix-googlechat:29319`
|
|
- `appservice.hostname`: `0.0.0.0`
|
|
- `appservice.port`: `29319`
|
|
- `appservice.database`: `postgres://synapse:PASSWORD@postgres/googlechat` (use password from .env)
|
|
- `bridge.permissions`: Add your Matrix ID with admin level
|
|
|
|
**Register the bridge:**
|
|
```bash
|
|
# Copy the registration file to Synapse
|
|
cp /mnt/media/matrix/bridges/googlechat/registration.yaml /mnt/media/matrix/synapse/data/googlechat-registration.yaml
|
|
```
|
|
|
|
Add to `homeserver.yaml`:
|
|
```yaml
|
|
app_service_config_files:
|
|
- /data/telegram-registration.yaml
|
|
- /data/whatsapp-registration.yaml
|
|
- /data/googlechat-registration.yaml
|
|
```
|
|
|
|
Restart Synapse:
|
|
```bash
|
|
docker compose restart synapse
|
|
```
|
|
|
|
Start the bridge:
|
|
```bash
|
|
docker compose up -d mautrix-googlechat
|
|
```
|
|
|
|
**Use the bridge:**
|
|
1. In Element, start a chat with `@googlechatbot:fig.systems`
|
|
2. Send `login`
|
|
3. Follow the OAuth flow to authenticate with your Google account
|
|
|
|
**Note for Work Google Chat:** Your organization's Google Workspace admin might need to approve the OAuth app.
|
|
|
|
## Client Apps
|
|
|
|
### Element (Recommended)
|
|
|
|
**Web:** https://app.element.io
|
|
**iOS:** https://apps.apple.com/app/element-messenger/id1083446067
|
|
**Android:** https://play.google.com/store/apps/details?id=im.vector.app
|
|
|
|
**Setup:**
|
|
1. Open Element
|
|
2. Click "Sign in"
|
|
3. Click "Edit" next to homeserver
|
|
4. Enter: `matrix.fig.systems`
|
|
5. Click "Continue"
|
|
6. Enter your username and password
|
|
|
|
### Alternative Clients
|
|
|
|
- **FluffyChat**: Modern, lightweight client
|
|
- **SchildiChat**: Element fork with UI improvements
|
|
- **Nheko**: Desktop client
|
|
|
|
All clients work by pointing to `matrix.fig.systems` as the homeserver.
|
|
|
|
## Maintenance
|
|
|
|
### View Logs
|
|
```bash
|
|
# All services
|
|
docker compose logs -f
|
|
|
|
# Specific service
|
|
docker compose logs -f synapse
|
|
docker compose logs -f mautrix-telegram
|
|
```
|
|
|
|
### Restart Services
|
|
```bash
|
|
# All
|
|
docker compose restart
|
|
|
|
# Specific
|
|
docker compose restart synapse
|
|
```
|
|
|
|
### Update Containers
|
|
```bash
|
|
docker compose pull
|
|
docker compose up -d
|
|
```
|
|
|
|
### Backup
|
|
|
|
Important directories:
|
|
- `/mnt/media/matrix/synapse/data` - Synapse configuration and signing keys
|
|
- `/mnt/media/matrix/synapse/media` - Uploaded media files
|
|
- `/mnt/media/matrix/postgres` - Database
|
|
- `/mnt/media/matrix/bridges/` - Bridge configurations
|
|
|
|
## Troubleshooting
|
|
|
|
### Can't connect to homeserver
|
|
- Check Synapse logs: `docker compose logs synapse`
|
|
- Verify Traefik routing: `docker compose -f compose/core/traefik/compose.yaml logs`
|
|
- Test endpoint: `curl -k https://matrix.fig.systems/_matrix/client/versions`
|
|
|
|
### Login not working
|
|
- Verify you created a user with `register_new_matrix_user`
|
|
- Check Synapse logs for authentication errors
|
|
- Ensure the homeserver is set to `matrix.fig.systems` in your client
|
|
|
|
### Bridge not connecting
|
|
- Check bridge logs: `docker compose logs mautrix-telegram`
|
|
- Verify registration file is in Synapse config
|
|
- Ensure bridge database is created in PostgreSQL
|
|
- Restart Synapse after adding registration files
|
|
|
|
### Federation issues
|
|
- Ensure ports 80 and 443 are accessible
|
|
- Check `.well-known` delegation is working
|
|
- Test federation: https://federationtester.matrix.org/
|
|
|
|
## Security Notes
|
|
|
|
- Users authenticate with local Matrix passwords
|
|
- Public registration is disabled (use `register_new_matrix_user` to create accounts)
|
|
- Federation uses standard HTTPS (443) with .well-known delegation
|
|
- All bridges run on internal network only
|
|
- Media uploads limited to 50MB
|
|
|
|
## Configuration Files
|
|
|
|
- `compose.yaml` - Docker Compose configuration
|
|
- `homeserver.yaml` - Synapse configuration
|
|
- `.env` - Environment variables and secrets
|
|
|
|
## Resources
|
|
|
|
- Matrix Documentation: https://matrix.org/docs/
|
|
- Synapse Documentation: https://element-hq.github.io/synapse/latest/
|
|
- Mautrix Bridges: https://docs.mau.fi/bridges/
|
|
- Element Help: https://element.io/help
|