裝了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。