裝了Matrix家的Synapse就可以使用Riot.im聊天了,好處是服務器是自己的,客戶端是開源的。
首先跟着官方文檔,安裝依賴。此時需要注意centos6自帶的sqlite版本太低,而且插件FTS4也未啟用。參考Install Python and Sqlite from Source安裝sqlite和python2.7即可。
#安裝sqlite3.12並開啟FTS4
mkdir -p ~/tmp/compile&&mkdir ~/tmp/opt&&cd ~/tmp/compile
wget https://www.sqlite.org/2016/sqlite-autoconf-3120200.tar.gz
tar xf ./sqlite-autoconf-3120200.tar.gz
cd sqlite-autoconf-3120200
./configure --prefix=~/opt/sqlite/sqlite3 --disable-static --enable-fts5 --enable-json1 CFLAGS="-g -O2 -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS4=1 -DSQLITE_ENABLE_RTREE=1"
make
make install
mkdir ~/bin
ln -s ~/opt/sqlite/sqlite3/bin/sqlite3 ~/bin/sqlite
#到這裡就安裝好了,執行sqlite即可看到版本為3.12
#執行pragma compile_options;可見FTS4已開啟
#.quit退出sqlite
#安裝使用sqlite3.12的python2.7
wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tar.xz
xz -d Python-2.7.14.tar.xz&&tar -xvf Python-2.7.14.tar
cd Python-2.7.14
LD_RUN_PATH=$HOME/opt/sqlite/sqlite3/lib ./configure LDFLAGS="-L$HOME/opt/sqlite/sqlite3/lib" CPPFLAGS="-I $HOME/opt/sqlite/sqlite3/include"
LD_RUN_PATH=$HOME/opt/sqlite/sqlite3/lib make
LD_RUN_PATH=$HOME/opt/sqlite/sqlite3/lib make install
使用virtualenv生成一個Synapse專用的虛擬環境。安裝Synapse時還會遇到Twisted版本過低,在虛擬環境下這樣操作一下:
wget https://twistedmatrix.com/Releases/Twisted/17.1/Twisted-17.1.0.tar.bz2
tar -jxvf Twisted-17.1.0.tar.bz2
cd Twisted-17.1.0
python setup.py install
cd ..
配置nginx前置代理的時候,用letsencrypt的centbot各種失敗,最後還是用回ssl for free的笨方法。推薦使用letsencrypt的centbot,配好後非常省時省力。順便貼一下nginx配置:
server {
listen 443 ssl;
server_name YOURDOMIN;
ssl_certificate /etc/letsencrypt/live/YOURDOMIN/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/YOURDOMIN/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location /_matrix {
proxy_pass http://localhost:8008;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
由於使用了nginx做代理,所以8008端口的監聽範圍可以在homeserver.yaml中改成127.0.0.1。
最後跟着官方教程增加用戶,然後在Riot.im里勾上自定義服務器就可以聊天了。也可以參考下Run your end-to-end encrypted chat server using Matrix and Riot。
如果傳送文件時提示文件大小超過限制,多半是nginx給擋下了,可以在nginx配置文件的http段里添加下面兩行來解決:
sendfile on;
client_max_body_size 40M;
Android我從F-droid下載的客戶端,沒有gcm,所以在後台時檢查消息的頻率可以自行設置,我設置的5分鐘,默認10分鐘。網頁端打開的時候有一點點慢,打開後就沒問題了。Fedora可以安裝taw/Riot的源,即
sudo dnf copr enable taw/Riot
sudo dnf install -y riot --refresh
Fedora29的包taw還沒打,我們可以自己打:
sudo dnf install npm
git clone https://github.com/vector-im/riot-web.git
cd riot-web
npm install
cp config.sample.json config.json
#修改下面4處
"default_hs_url": "https://YOURDOMIN",
"default_is_url": "https://YOURDOMIN",
"disable_guests": true,
"features": {
"feature_groups": "labs",
"feature_pinning": "labs",
"feature_rich_quoting": "labs",
"feature_presence_management": "labs",
"feature_sticker_messages": "labs",
"feature_jitsi": "labs",
"feature_tag_panel": "enable",
"feature_lazyloading": "enable"
}
#編譯
npm run build
#編譯獨立APP
npm install electron
#運行APP
npm run electron
#生成可執行文件
node_modules/.bin/build -l --x64
#可執行文件在electron_app/dist/linux-unpacked/
##升級##
cd riot-web
git fetch origin
git reset --hard origin/master
npm install
npm run build
npm install electron
node_modules/.bin/build -l --x64
Synapse搬家
官方文檔並未給出具體備份與還原方法,經過摸索發現非常簡單。如果是按照我上面步驟安裝的,只需再新服務器上搭建好環境,然後複製如下文件到虛擬環境中就可以啟動了。如果文件路徑有變化,則需要修改homeserver.yaml和YOURDOMIN.log.config這兩個配置文件。
homeserver.yaml
YOURDOMIN.log.config
YOURDOMIN.signing.key
YOURDOMIN.tls.crt
YOURDOMIN.tls.dh
YOURDOMIN.tls.key
media_store
homeserver.db
Synapse重置用戶密碼
參考:reset password for matrix/synapse accounts
Centos7上裝Synapse
大致一樣啦。sqlite3還是要自己安裝,系統帶的不行。python可以用3了。Twisted要裝17.9.0。
本文更新於 2018/12/26。