前言
Docker安装Synapse和PostgreSQL实现快速部署
部署PostgreSQL数据库
PostgreSQL部署命令:
1
| docker run --name postgres -v /opt/docker/postgresql/postgres_data:/var/lib/postgresql/data -e POSTGRES_PASSWORD="123456" -p 5432:5432 --restart always -d postgres
|
容器名称: postgres
容器路径: /opt/docker/postgresql/postgres_data
密码 123456
端口 5432
创建数据库用户:
1
| docker exec -it postgres createuser -U postgres --pwprompt synapse
|
1 2
| CREATE USER synapse WITH PASSWORD 'your_password';
|
数据库用户: synapse
创建时需要输入密码
###登录Docker并且登录数据库:
1 2
| docker exec -it postgres psql -U postgres
|
然后输入以下命令创建数据库:
1 2 3 4 5 6
| CREATE DATABASE synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER synapse;
|
#非docker
1
| GRANT ALL PRIVILEGES ON DATABASE synapse TO synapse;
|
退出: 退出到容器外
创建数据库网络并将容器加入:
创建网络:
1
| docker network create postgres_network
|
网络名称: postgres_network
将PostgreSQL容器加入网络:
1
| docker network connect postgres_network postgres
|
##部署Synapse
先创建Synapse的Docker路径
1
| mkdir /opt/docker/synapse
|
生成Synapse配置文件:
1 2 3 4 5
| sudo docker run -it --rm \ -v /opt/docker/synapse/data:/data \ -e SYNAPSE_SERVER_NAME=域名 \ -e SYNAPSE_REPORT_STATS=yes \ matrixdotorg/synapse:latest generate
|
这里的域名不是服务器的域名,而是Matrix用户所在域的域名,两者可以不一致,且部署完成后无法更改,请慎重设置。
修改Homeserver.yaml配置文件
在data目录下
默认使用sqlite的数据库删除或者注释掉
添加PostgreSQL数据库
1 2 3 4 5 6 7 8 9
| database: name: psycopg2 args: user: synapse password: 数据库密码 database: synapse host: postgres cp_min: 5 cp_max: 10
|
cp_min: 表示数据库连接池最少会保持 5 个连接到数据库,即使这些连接没有被使用
cp_max: 表示数据库连接池最多可以有 10 个连接。这意味着当有更多的请求需要连接时,连接池最多会提供 10 个连接。如果超过这个数量,新的请求将会被阻塞,直到有连接被释放。
开启注册+关闭验证
1 2
| enable_registration: false #是否开启新用户注册功能 enable_registration_without_verification: false #是否允许用户注册后直接使用
|
false:关闭
true: 开启
消息保留策略
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| retention: enabled: true # 启用保留策略,表示开启数据保留管理。 default_policy: # 默认的数据保留策略配置。 min_lifetime: 1d # 默认情况下,数据的最小保留时间为1天。 max_lifetime: 3d # 默认情况下,数据的最大保留时间为1年。 allowed_lifetime_min: 1d # 允许的最短保留时间为1天,任何数据的保留时间不能低于此值。 allowed_lifetime_max: 3d # 允许的最长保留时间为1年,任何数据的保留时间不能超过此值。 purge_jobs: # 配置与数据清除相关的任务(即超出保留时间的数据清除策略)。 - longest_max_lifetime: 3d # 此任务负责清除最长保留时间超过3天的数据。 interval: 12h # 该任务每12小时执行一次。 - shortest_max_lifetime: 3d # 此任务负责清除最短保留时间超过3天的数据。 interval: 1d # 该任务每1天执行一次。
|
相关时间根据实际需求自行修改
根据当前版本测试安卓版本不需要其它设置,桌面版需要单独设置
桌面版使用方法: 进入房间,在对话框输入以下命令
选择自定义时间线事件
Send custom timeline event
Explore room state
填写事件类型
填写事件内容
1 2 3 4 5 6 7 8
| { "enabled": true, "expire_on_clients": true, "max_allowed_lifetime": 86400000, "max_lifetime": 86400000, "min_allowed_lifetime": 0, "min_lifetime": 0 }
|
86400000等于24小时
以下是网络搜索的解释
Matrix协议默认的清除任务有3种:
生存时间3天以内,每隔12小时清除
生存时间3天-7天以内,每隔24小时清除
生存时间大于7天,每隔48小时清除
其它配置
1 2 3 4
| suppress_key_server_warning: true #使用 matrix.org 作为密钥服务器 bind_addresses: - '0.0.0.0' # 监听所有 IPv4 地址 # - '::' # 同时支持 IPv6
|
Docker配置文件
创建一个:docker-compose.yml
内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| version: "3.3" services: synapse: image: "matrixdotorg/synapse:latest" container_name: "matrix_synapse" restart: unless-stopped ports: - 8008:8008 volumes: - "./data:/data" environment: VIRTUAL_HOST: "ma.newcation.us.kg" VIRTUAL_PORT: 8008 LETSENCRYPT_HOST: "ma.newcation.us.kg" SYNAPSE_SERVER_NAME: "ma.newcation.us.kg" SYNAPSE_REPORT_STATS: "yes" networks: - postgres_network networks: postgres_network: external: true element-web: ports: - '8009:80' image: vectorim/element-web restart: unless-stopped
|
Docker启动和停止命令
启动命令:
停止命令:
创建管理员账号,用来管理synapse添加和删除用户
1
| docker exec -it matrix_synapse register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml -a -u 用户名 -p 密码
|
密码有特殊字符使用: ‘密码’ #注意不是””
Nginx反代代码:
Synapse的Nginx配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| # Synapse的配置 server { listen 443 ssl http2; server_name 域名; # Synapse的域名
# 使用Synapse的SSL证书 ssl_certificate /etc/ssl/cloudflare/cloudflare.pem; ssl_certificate_key /etc/ssl/cloudflare/cloudflare.key; ssl_trusted_certificate /etc/ssl/cloudflare/origin_ca_ecc_root.pem;
# 启用强加密和安全的TLS设置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384'; ssl_prefer_server_ciphers off; ssl_session_cache shared:SSL:10m; ssl_session_timeout 1d;
# HSTS: HTTP Strict Transport Security add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# TLS握手优化(提高性能) ssl_dhparam /etc/ssl/certs/dhparam.pem;
# Enable OCSP Stapling for better security ssl_stapling on; ssl_stapling_verify on;
# Nginx主配置 location / { proxy_pass http://localhost:8008; # Synapse 服务端口 proxy_redirect off;
# 设置正确的头部信息 proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade-Insecure-Requests 1; proxy_set_header X-Forwarded-Proto https;
# 防止客户端缓存控制 proxy_cache_bypass $http_upgrade; proxy_no_cache $http_upgrade; }
# 针对Synapse的优化 client_max_body_size 50M; client_body_timeout 12s; send_timeout 10s; keepalive_timeout 15s 15s;
# 日志配置 access_log /var/log/nginx/域名.access.log; error_log /var/log/nginx/域名.error.log;
# 为Matrix服务端提供配置(/.well-known/matrix/server) location = /.well-known/matrix/server { return 200 '{"m.server": "域名:443"}'; default_type application/json; add_header Access-Control-Allow-Origin *; } }
|
# 为Matrix服务端提供配置(/.well-known/matrix/server)
不需要添加协议,但要添加端口
Cloudflare Origin CA 根证书
所以使用:ssl_trusted_certificate /etc/ssl/cloudflare/origin_ca_ecc_root.pem
下载地址:
文档链接
Cloudflare Origin ECC PEM(请勿与 Apache cPanel 一起使用)
Cloudflare Origin RSA PEM
生成 dhparam.pem 文件
1
| sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
|
可以使用更高位数:4096 #位数越高生成时间越长,2048够安全了,又不是军事机密
###Element-web的Nginx配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| server { listen 443 ssl http2; server_name 域名; # Element-web的域名
# 使用Synapse的SSL证书 ssl_certificate /etc/ssl/cloudflare/cloudflare.pem; ssl_certificate_key /etc/ssl/cloudflare/cloudflare.key; ssl_trusted_certificate /etc/ssl/cloudflare/origin_ca_ecc_root.pem;
# 启用强加密和安全的TLS设置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384'; ssl_prefer_server_ciphers off; ssl_session_cache shared:SSL:10m; ssl_session_timeout 1d;
# HSTS: HTTP Strict Transport Security add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# TLS握手优化(提高性能) ssl_dhparam /etc/ssl/certs/dhparam.pem;
# Enable OCSP Stapling for better security ssl_stapling on; ssl_stapling_verify on;
# Nginx主配置 location / { proxy_pass http://localhost:8009; # Element-web 服务端口 proxy_redirect off;
# 设置正确的头部信息 proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade-Insecure-Requests 1; proxy_set_header X-Forwarded-Proto https;
# 防止客户端缓存控制 proxy_cache_bypass $http_upgrade; proxy_no_cache $http_upgrade; }
# 针对Element-web的优化 client_max_body_size 50M; # 根据需要调整上传文件的大小 client_body_timeout 12s; send_timeout 10s; keepalive_timeout 15s 15s;
# 日志配置 access_log /var/log/nginx/域名.access.log; error_log /var/log/nginx/域名.error.log;
# 为Matrix客户端提供配置(/.well-known/matrix/client) location = /.well-known/matrix/client { return 200 '{"m.homeserver": {"base_url": "https://服务器域名/"}}'; default_type application/json; add_header Access-Control-Allow-Origin *; } }
|
为Matrix客户端提供配置(/.well-known/matrix/client)
协议加域名不需要添加端口,如果不是443的话就添加端口
###修改Nginx主配置文件
主配置文件路径
在http { 下方添加以下内容:
1 2 3 4 5 6
| large_client_header_buffers 8 64k; client_header_buffer_size 64k; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_headers_hash_max_size 512; proxy_headers_hash_bucket_size 128;
|
Nginx可能的报错
示例中使用的代码
报错修改为:
1 2
| listen 443 ssl; http2 on;
|
Nginx符号链接(软链接)
在/etc/nginx/sites-available目录下创建Nginx配置文件
通过符号链接到/etc/nginx/sites-enabled
1
| ln -s /etc/nginx/sites-available/配置文件 /etc/nginx/sites-enabled
|
Nginx常用命令
1 2 3 4
| nginx -s reload sudo systemctl daemon-reload sudo nginx -t sudo systemctl restart nginx
|