(写在这个特别有历史意义的日子里)
由于自用的两个梯子在六月一号同时被 ban,导致 telegram 暂时无法使用,于是这几天微信的使用频率变多了。 但因为顾及着聊天信息的安全性,在使用微信的時候都是小心翼翼地,斟酌再三地确认消息內容,令人着实难受。
于是考虑使用开源方案,自己动手搭建一套专属 IM。 參考了相关 可用方案 ,结合自己的需求:
安全
轻量
最终决定选择了 Matrix Synapse 。
接下来就是撸起袖子一把梭。
正好最近腾讯云有活动,以较低的价格入手了一台主机(1 核 1 G 的配置,价格 214 元/ 半年)。
参照官方教程在服务器(CentOS 7)上搭建 Synapse:
Install prerequisites
$ yum groupinstall "Development Tools" $ yum install libtiff-devel libjpeg-devel libzip-devel freetype-devel \ lcms2-devel libwebp-devel tcl-devel tk-devel redhat-rpm-config \ python-virtualenv libffi-devel openssl-devel
Install the Synapse
$ mkdir -p /opt/synapse $ python -m virtualenv /opt/synapse/env $ source /opt/synapse/env/bin/activate $ pip install --upgrade pip $ pip install --upgrade setuptools $ pip install matrix-synapse
Generate a confiuration file
$ python -m synapse.app.homeserver --server-name synapse.me --config-path /opt/synapse/homeserver.yaml --generate-config --report-stats=yes
Generate certificate:
$ openssl req -new -newkey rsa:4096 -x509 -sha256 -days 99999 -nodes \ -out /opt/synapse/synapse.tls.crt \ -keyout /opt/synapse/synapse.tls.key
Confiure TLS certificates in configuration file,The relevant lines are like this:
- port: 8448 type: http tls: true resources: - names: [client, federation] tls_certificate_path: "/opt/synapse/synapse.tls.crt" tls_private_key_path: "/opt/synapse/synapse.tls.key"
Add domain/ip map into /etc/hosts (required if you haven't bind domain to your server ip address):
xxx.xxx.xxx.xxx snapse.me
Start synapse service:
$ synctl start
Register one user:
$ register_new_matrix_user -c /opt/synapse/homeserver.yaml https://localhost:8448
Download riot.im client, configure to login:
Home Server URL: https://xxx.xxx.xxx.xxx:8448 Identity Server URL: https://xxx.xxx.xxx.xxx:8448
Invite user by matrix id in riot.im client:
@username:synapse.me
以上只是一个简单的服务端部署及配置,之后有需求或许会再折腾一下它的语音和视频功能。 至于客戶端,在安卓和苹果上安裝 riot.im 这个软件即可,Linux 上亦有 electron 打包的桌面软件可供使用。
Updated 2019/06/23
To change user password
Create hashed password first:
$ hash_password
Update user's password with hashed password above:
$ sqlite3 homeserver.db > update users set password_hash='xxxxxxx' where name='@xxx:synapse.me';
Updated 2019/06/24
Thanks for reading :)