我们会拥有很多不同的工作、学习加游戏的设备,比如电脑、平板、手机、电视、电冰箱等等。很多时候,如果这些设备之间可以彼此通信、分享内容,就会给我们的生活带来非常多的便利,比如可以从手机给电视分享一个视频,可以把e-ink阅读平板上的一段话发到电脑上,可以给孩子用的学习平板传一篇复习整理,可以把从电脑上下载的论文发到平板上阅读...…

虽然上面这些需求看起来十分简单,每一种都可以找到一些专门的手段来完成,但是用一个统一的,每一个设备只要设置过一次就可以放心用的方法确实很少。下面介绍一种通过Element App和自建的私有matrix服务器来完成这这些事情的方法。

先简单说一下这些这样做的好处:

  • 首先是使用方便,就相当于给每一个设备都装了一个微信一样,传数据各种内容就像发附件一样,而且不需要单独的手机号作为账号。
  • 消息在传输是加密的,服务器上的信息是私有的,可以保护好自己的隐私,不向第三方泄露数据。
  • 电脑、手机和平板都可以支持,使用Windows/Mac/iOS/Android/Linux都没有问题。
  • 成本很低,唯一需要花费的服务器使用阿里云的99元一年的服务器就可以(似乎腾讯云还有62元一年的),家用的话服务器负载完全不是问题。

再说明一下我们的方法需要做的主要事情:

  • 需要搭建一个私有的matrix服务器,并且通过nginx转发。
  • 需要在每一个设备上安装一个应用,也就是Element。

我们下面具体来说明一下。

搭建matrix服务器

满足matrix标准的服务器软件有很多种1,我们这里用来范例的是Element接手的python版本的服务器,也就是synapse2。跟着标准的安装文档3走其实安装很容易,我们这里就其中一条安装路径及其依赖来说一下。

我们假设主机的操作系统是Ubuntu(如果可以选择版本的话,可以优先最新的LTS 22.04),首先要创建一个独立的用户来运行synapse,假设用户的名字是myuser

# useradd -s /bin/bash -m myuser

 

Ubuntu 22.04默认Python版本是满足synapse的要求的,我们就可以开始安装了(都是安装在当前用户下)

# su myuser
$ cd
$ echo -e '\nexport PATH=$PATH:~/.local/bin\n'>> ~/.bashrc
$ export PATH=$PATH:~/.local/bin
$ pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com --user --upgrade virtualenv
$ virtualenv --python=python3 synapse-env
$ source ~/synapse-env/bin/activate
$ pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com --upgrade pip setuptools
$ pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com  matrix-synapse
$ mkdir ~/synapse
$ python -m synapse.app.homeserver \
         --server-name <YOUR_DOMAINNAME>:8888 \
         --config-path homeserver.yaml \
         --generate-config \
         --report-stats=no

 

上面的最后一步会生成一个homeserver.yaml文件,这个也就是synapse的配置文件。而--server-name 后面跟的<YOUR_DOMAINNAME>是服务器的地址,需要写上自己主机的域名,如果域名没有写公网ip地址也可以,如果不使用默认的端口,那么端口号也需要指定,我们这里写了8888。

接下来我们要编辑一下这个配置文件

server_name: "<YOUR_DOMAINNAME>:8888"
pid_file: /home/myuser/synapse/homeserver.pid
listeners:
# 如果不使用nginx等反向代理,port修改为8888
  - port: 8888
    tls: false
    type: http
    x_forwarded: true
    bind_addresses: ['::1', '127.0.0.1']
    resources:
      - names: [client, federation]
        compress: false
database:
  name: sqlite3
  args:
    database: /home/myuser/synapse/homeserver.db
log_config: "/home/myuser/synapse/<YOUR_DOMAINNAME>:8888.log.config"
media_store_path: /home/myuser/synapse/media_store
# 不允许注册
enable_registration: false
registration_shared_secret: "C#Sy5Ku:;.-ImM;XL.JLmP7UVRIA*wv88YJ5.O*oGT@~dEN7E1"
report_stats: false
macaroon_secret_key: "hx@cPfrLz4_VSrGUVTdSyKw:9jNk4yT89IXm0R5@Aa&iwBsrMk"
form_secret: "-lacOcm*00D5rg767h,eKNP6y;b3TE&u7qQVOU4-5@YM.Jz;1r"
signing_key_path: "/home/myuser/synapse/<YOUR_DOMAINNAME>:8888.signing.key"
# 私人使用不再需要matrix.org,修改为[]
trusted_key_servers:[]
  # - server_name: "matrix.org"

 

如果原始文件需要修改,我已经在上面的注释中说明了。我们先假设流量经过反向代理中转,直接把8888端口暴露在公网,那么就可以直接启动synapse的服务了

$ source ~/synapse-env/bin/activate
$ cd ~/synapse
$ synctl start

 

注意上面配置文件中明确的禁止了注册用户,也就是这个服务器只有我们自己手动添加的用户才可以访问,添加用户的方法如下

$ source ~/synapse-env/bin/activate
$ cd ~/synapse
$ register_new_matrix_user --config homeserver.yaml 
New user localpart [myuser]: eink-pad
Password: 
Confirm password: 
Make admin [no]: 
Sending registration request...
Success!

 

这样就创建了一个叫eink-pad的用户,注意密码一定不要设置一个太过普通的。

进入下一步之前,需要再说明一下:

  • 如果使用云服务器,需要在控制台的安全组中开放对于8888端口的访问。
  • 从安全的角度而言,如果自己拥有域名,使用letsencrypt给域名绑定一个证书,在https的连接下搭建synapse更好,访问也不容易被劫持。

安装和使用Element

Element secure messager是可以用于连接matrix服务的客户端软件,Windows/Mac/Linux都可以在官网下载,Android可以在Google Play安装,iOS可以直接去App Store 4安装。对于不能访问Google Play的设备,也可以到f-droid.org5去下载Element的apk安装包 之后拷贝到设备上安装,注意同一个版本对不同架构有不同的安装包,不要下载错了。

安装之后启动界面大概是这个样子的,

直接选择"I ALREADY HAVE AN ACCOUNT",应用会loading一会儿,然后就可以输入自己的服务器地址,也就是http://<YOUR_DOMAIN>:8888,然后输入用户密码就可以开始使用了。

在Windows的版本上是这个样子的

 

接下来,就可以给自己电脑、手机、平板、电视、电冰箱等等各自创建一个用户,然后就可以在应用中加好友,创建单聊和群聊,然后发消息,发视频,发链接,发文件了。需要注意的是,在添加好友时,需要以这样的方式来查找用户名 "@username:<YOUR_DOMAINNAME>:8888"。

总结

Element这一套在设置上还是比较简单的,除了家庭的不同设备之间的通信之外,也完全可以把Element + synapse的这一套东西作为小型团队或者小公司的内部通信工具。当然,如果人与人之间的通信,大概大家就会用更为常用的工具,比如微信等等了。所以Element用于在设备之间传东西反而更为切合。

0
0