搭建自己的 IM

Published:

2019/06/04

(写在这个特别有历史意义的日子里)

由于自用的两个梯子在六月一号同时被 ban,导致 telegram 暂时无法使用,于是这几天微信的使用频率变多了。 但因为顾及着聊天信息的安全性,在使用微信的時候都是小心翼翼地,斟酌再三地确认消息內容,令人着实难受。

于是考虑使用开源方案,自己动手搭建一套专属 IM。 參考了相关 可用方案 ,结合自己的需求:

  1. 安全

  2. 轻量

最终决定选择了 Matrix Synapse

接下来就是撸起袖子一把梭。

正好最近腾讯云有活动,以较低的价格入手了一台主机(1 核 1 G 的配置,价格 214 元/ 半年)。

参照官方教程在服务器(CentOS 7)上搭建 Synapse:

  1. 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
  2. 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
  3. Generate a confiuration file

    $ python -m synapse.app.homeserver --server-name synapse.me --config-path /opt/synapse/homeserver.yaml --generate-config --report-stats=yes
  4. 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
  5. 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"
  6. 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
  7. Start synapse service:

    $ synctl start
  8. Register one user:

    $ register_new_matrix_user -c /opt/synapse/homeserver.yaml https://localhost:8448
  9. 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
  10. 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

To upgrade synapse

Thanks for reading :)