# Docker-Matrix Role README

## Overview

This document serves as the README for the `docker-matrix` role, a part of the `CyMaIS` project. This role automates the deployment of a Matrix server using Docker. 

Matrix is an open-source project that provides a protocol for secure, decentralized, real-time communication. It offers features like end-to-end encrypted chat, VoIP, and file sharing, catering to both individual and enterprise users. With a focus on interoperability, Matrix can bridge with other communication systems, offering a unified platform for messaging and collaboration.

## Dependencies

- `nginx-docker-reverse-proxy` (see `meta/main.yml`)

## Files and Their Functions

1. **`vars/main.yml`**: Defines variables such as `docker_compose_instance_directory`.
2. **`handlers/main.yml`**: Contains handlers like `recreate matrix` for restarting the Matrix service.
3. **`tasks/main.yml`**: Contains main tasks like creating directories and configuration files.
4. **`templates/log.config.j2`**: Template for the Matrix server's logging configuration.
5. **`templates/homeserver.yaml.j2`**: Template for the main configuration file of the Matrix server.
6. **`templates/docker-compose.yml.j2`**: Docker-Compose template for setting up the Matrix server and database.

## Important Administration Commands

- **Create Matrix Users**: 
  ```
  docker compose exec -it synapse register_new_matrix_user -u [Username] -p [Password] -a -c /data/homeserver.yaml http://localhost:8008
  ```
- **Execute Docker-Compose Commands**:
  - Restart services: 
    ```
    docker-compose up -d --force-recreate
    ```
  - View logs:
    ```
    docker-compose logs
    ```

## Cleanup 
```
# Cleanup Database
for db in matrix mautrix_whatsapp_bridge mautrix_telegram_bridge mautrix_signal_bridge mautrix_slack_bridge; do python reset-database-in-central-postgres.py $db; done
# Cleanup Docker and Volumes
docker compose down -v
```

## Bridges

### Mautrix 
Contact one of the following bots for more information:

- @signalbot:yourdomain.tld
- @telegrambot:yourdomain.tld
- @whatsappbot:yourdomain.tld
- @slackbot:yourdomain.tld

#### Slack
For login with Token checkout [this guide](https://docs.mau.fi/bridges/go/slack/authentication.html).

### ChatGPT
- Create API Token: https://platform.openai.com/api-keys
- Set ``matrix_chatgpt_bridge_access_token`` 

## Debug:
- https://federationtester.matrix.org/

## Sources

### Guides
- https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html
- https://cyberhost.uk/element-matrix-setup/
- https://www.linode.com/docs/guides/how-to-install-the-element-chat-app/
- https://hub.docker.com/r/vectorim/element-web

## Links to ChatGPT Conversations

- https://chat.openai.com/share/d4485223-3750-4b0b-9733-45776c55d7cf
- https://chat.openai.com/share/f68873d9-aae9-4a1e-83b6-c3f23705a4ad
- https://chat.openai.com/share/11690964-9997-4e44-b63f-3c384a5ddc1d
- https://chat.openai.com/share/6f537c30-7337-47ed-8c85-19306e0eb74b
- https://chat.openai.com/share/31974492-2950-4dbc-8a83-edd7e1569bec

##  Alternativ Matrix Setup Role
An alternativ role to deploy Matrix you will find [here](../docker-matrix-ansible/).