协作办公软件
Rocket.Chat
安装
可手动、使用容器或使用snap安装。推荐使用snap安装,可避免多数配置。
sudo snap install rocketchat-server # 安装后自动启动运行
可使用浏览器或下载客户端访问http://<host_addr>:3000
并进行初始设置(默认仅支持localhost
或IP地址访问,主机名或域名访问需要配置Caddy或其他代理服务)。使用snap可查看服务状态。
离线安装snap版本
在未安装过snap
软件的机器上需要下载和安装core18
和snapd
依赖。
配置
获取rocketchat-server
当前的配置:
snap get rocketchat-server
# Key Value
# backup-on-refresh disable
# ignore-errors false
# mongo-oplog-url mongodb://localhost:27017/local
# mongo-url mongodb://localhost:27017/parties
# port 3000
# siteurl http://localhost:3000
如果
siteurl
与实际访问URL不匹配,客户端会提示URL跳转。
启动服务
snap start rocketchat-server # 将启动server以及数据库(和可选的caddy服务)
snap start rocketchat-server.rocketchat-server # 单独启动server服务
问题:
- 服务无限重启,日志(
snap logs -f rocketchat-server.rocketchat-server
查看服务日志)出现Segmentation fault
未知错误:尝试重启服务器然后启动rocketchat-server
服务。- 重启
rocketchat-server
服务后,无法正常访问:需要重启机器(可能是因为之前的服务占用某些资源未释放)。
设置端口
sudo snap set rocketchat-server port=8080 # 默认端口3000
sudo snap restart rocketchat-server.rocketchat-server # 重启服务生效
将配置项置空将恢复默认配置。
注意:如果设置的服务端口或以下代理端口无法连接,检查是否开启防火墙及相关策略。如果客户端配置了代理将无法正常访问,需要将域名或地址排除到代理范围外。
设置数据库服务配置
Mongdb数据库服务的配置文件位于/var/snap/rocketchat-server/current/mongod.conf
。
问题:
Failed to set up listener: SocketException: No such file or directory
:无法(在默认位置/tmp
)创建UNIX域套接字,修改配置文件,显式设置UNIX域套接字所在目录:net: unixDomainSocket: enabled: true pathPrefix: /var/snap/rocketchat-server/common # 使用数据目录
配置访问代理
RocketChat服务本身可作为独立的HTTP服务。如果需要配置外部使用HTTPS请求,可使用内置caddy
作为反向代理(如果要使用其他代理(例如NGINX),则无需以下配置)。
sudo snap set rocketchat-server https=enable
sudo snap set rocketchat-server caddy=enable
sudo snap set rocketchat-server caddy-url=https://<domain-name>[:<port>]
sudo snap run rocketchat-server.initcaddy # 生成Caddyfile*
*
:如果提示找不到initcaddy
命令,可直接编辑配置目录下的Caddyfile
文件。
https://example-domain.com { # *
tls self_signed # **
proxy / localhost:3000 {
websocket
transparent
}
}
*
:同一服务器上代理与rocketchat服务不要使用同一端口。
**
:测试或内部使用可使用Caddy自签名证书,仅需在Caddyfile中声明tls self_signed|internal
。如果具有公开可访问的域名,Caddy可自动使用Let's Encrypt生成SSL证书。
配置完成后,启动caddy
服务并重启server
服务。
sudo snap start rocketchat-server.rocketchat-caddy
升级迁移
进行升级迁移前首先对数据进行备份,以防过程中出现错误。snap支持对应用数据生成快照,但快照通常仅能用于同一版本的数据恢复(通常用于使用过程中的备份)。升级迁移情况下,需要使用RocketChat内部的数据备份恢复机制。
数据备份和恢复
备份或恢复操作时应先停止server服务,保留数据库服务。
sudo rocketchat-server.backupdb # 然后,将备份文件保存到其他地方
sudo cp /var/snap/rocketchat-server/common/rocketchat_backup.tar.gz ~/backup
恢复(必须将备份文件存放到/var/snap/rocketchat-server/common/
)
sudo rocketchat-server.restoredb rocketchat_backup.tgz
文件服务
filebrowser
安装
filebrowser
仅包含单独的可执行文件,将档案文件释放到创建的指定目录即可。
tar -xzf linux-amd64-filebrowser.tar.gz -C /opt/filebrowser
/opt/filebrowser/filebrowser -r /content/root/ # 指定文件服务的根目录
默认用户名和密码为
admin:admin
,可在启动服务后通过Web界面或命令行修改。
filebrowser
的运行数据保存在工作目录下的数据库文件database.db
(Bolt DB)中,不依赖于外部数据库服务。
配置
配置项可通过配置文件、环境变量、命令行选项提供,配置项的优先级高于数据库中存储的配置项。优先级从高到低:
- 选项:
-a,--address
:监听地址;-p,--port
:监听端口;-b,--baseurl
:Web服务URL的根路径;-c,--config
:配置文件路径;-d,--databse
:数据库文件路径;
- 环境变量命名规则:
FB_OPTION_NAME
。 - 配置文件
.filebrowser.{json|toml|yaml|yml}
,搜索路径包括:./
、$HOME/
、/etc/filebrowser/
。 - 数据库配置:通过Web界面或命令行
filebrowser config
等修改的信息将更新到数据库中。 - 默认值。
服务配置
[Unit]
Description=filebrowser - Web File Explorer
Documentation=https://filebrowser.org/
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/opt/filebrowser/
ExecStart=/opt/filebrowser/filebrowser -c config.json -r /content/root/
ExecStop=/bin/kill -s TERM $MAINPID
KillSignal=SIGTERM
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=filebrowser
[Install]
WantedBy=multi-user.target
Syncthing
配置
配置文件
配置文件路径:
$HOME/.config/syncthing # Linux
%LOCALAPPDATA%\Syncthing # Windows
--config CONFIG_PATH
覆盖默认路径。
配置文件路径下可能包含的内容:
config.xml
cert.pem # ECDSA public/private key
key.pem
https-cert.pem # for HTTPS GUI
https-key.pem
csrftokens.txt # A list of recently issued CSRF tokens
数据库路径(优先级从高到低):
/path/to/exist_db # 指定的路径???
$XDG_DATA_HOME/syncthing
~/.local/share/syncthing # Windows:$HOME\AppData\Local\Syncthing
$HOME/.config/syncthing
--data DB_PATH
覆盖默认配置。
配置文件格式
<configuration version="35">
<folder></folder>
<device></device>
<gui></gui>
<ldap></ldap>
<options></options>
<remoteIgnoredDevice></remoteIgnoredDevice>
<defaults></defaults>
</configuration>
通信方式与监听地址配置
-
TCP:
tcp[4]://0.0.0.0:22000,tcp[4|6]://:22000
,tcp6://[::]:22000
;tcp
协议监听IPv4/v6地址。 -
QUIC:
quic://[0.0.0.0]:22000
,类似于TCP,可指定quic4
和quic6
。如果上述端口被占用,则
syncthing
会自动切换为选择随机端口(如57350
)。 -
发现服务:
https://discover_server:8443?
; -
中继
- 动态中继:
dynamic+https://relays.syncthing.net/endpoint
; - 动态中继池:
dynamic+https://192.0.2.42/relays
; - 静态中继:
relay://192.0.2.42:22067?id=abcd123...
;
- 动态中继:
-
默认(
default
):tcp://0.0.0.0:22000
,quic://0.0.0.0:22000
和dynamic+https://relays.syncthing.net/endpoint
.
Syncthing Configuration — Syncthing v1.20.2 documentation
命令行
服务启动选项:
--home=<dir> # 配置文件和数据库路径
# --config=<dir>, --data=<dir>
--gui-address=0.0.0.0:8384 # or '/var/run/st.sock'
--logfile=<filename> # '-' for stdout
--log-max-old-files=<num>
--log-max-size=<num>
--no-browser # 不启动浏览器(适用于服务器)
--no-console # 隐藏终端窗口(Windows)
syncthing --device-id # Print device ID
syncthing --paths # 打印配置相关路径
--version
syncthing --generate=<dir> # 生成配置文件和密钥文件
syncthing generate \ # 指定新的用户名和密码
--gui-user=<username>
--gui-password=<password> # or '-' 从命令行读取,覆盖配置文件(Hash)
命令行扩展工具
tenox7/stc: Syncthing CLI Tool (github.com)
自启动配置
Starting Syncthing Automatically — Syncthing documentation
常见问题
inotify limit
echo "fs.inotify.max_user_watches=204800" | sudo tee -a /etc/sysctl.conf
Linux只读目录的同步
syncthing不推荐使用root
账户运行,但syncthing会在目录下创建.stfolder
目录以存放同步信息,只读目录下无法自动创建。可用root
账户手动创建该目录并将其所有者修改为syncthing
服务的执行用户。
Web用户界面简介
文件夹视图
屏幕左侧显示所有已配置文件夹的 ID 和当前状态。单击文件夹名称可使该部分展开以显示更详细的文件夹信息,以及用于暂停文件夹、强制重新扫描或编辑配置的按钮。
文件夹可以处于以下任一状态:
- 未知:在加载 GUI 时,
- 未共享:当您尚未共享此文件夹时,
- 暂停:当文件夹的活动被搁置时,
- 停止:当文件夹遇到错误时,
- 最新的:当文件夹与其他设备同步时,
- 等待扫描:在扫描文件夹之前等待其他文件夹空闲时,
- 扫描:当Syncthing在文件夹中查找本地更改时,
- 等待同步:在同步文件夹之前等待其他文件夹空闲时,
- 准备同步:当 Syncthing 收集要同步的文件更改时,
- 同步:当此设备从网络下载更改时,
- 等待清洁:在清理版本之前等待文件夹空闲时,
- 清洁版本:同时从
.stversions
文件夹中删除过时的文件。
在文件夹详细信息中,您可以看到当前的“全局状态”和“本地状态”摘要,以及如果文件夹状态不是最新的,则“不同步”的数据量。
- 全局状态:指示完全最新的文件夹包含的数据量,这基本上是所有连接设备中所有文件的最新版本的总和。这是计算机上与远程设备完全同步时文件夹的大小。
- 本地状态:显示文件夹现在实际包含的数据量。如果文件夹当前正在与其他设备同步,则此值可能大于或小于全局状态。
- 不同步:显示需要从其他设备同步的数据量。请注意,这是所有不同步文件的总和 - 如果您已经拥有此类文件的一部分或该文件的旧版本,则需要通过网络传输的数据少于此值。
- 错误:介绍了文件夹处于“已停止”状态时出现的问题。一种可能的消息是“缺少文件夹标记”。这意味着此文件夹的根目录不包含名为 (marker) 的文件或目录。当此标记丢失时,同步将停止,以防止数据丢失,例如,当文件夹路径被卸载时。如果标记被意外删除,只需重新创建它,然后按 UI 中的重新扫描按钮即可。
创建新的同步文件夹
使用同步 Web 界面。单击“添加文件夹”按钮,该按钮将显示具有以下选项的对话框:
- 文件夹标签:应设置为描述性内容。此标签最初将与远程设备共享,但可以根据需要在每个设备上进行更改。
- 文件夹标识:所有设备都必须相同,因为它是文件夹的唯一标识符。最佳做法是保留自动生成的 ID,以避免与其他设备上的同名文件夹发生冲突。
- 文件夹路径:指定文件夹的物理路径,即硬盘驱动器上的物理路径。
接下来,选择要与哪些设备共享文件夹,然后按添加,这将添加文件夹并开始同步。
设备视图
屏幕右侧显示所有已配置设备的整体状态。本地设备始终位于顶部,远程设备按字母顺序排列。对于每个设备,您都会看到其当前状态,并在展开时看到更详细的信息。所有传输速率(“下载速率”和“上传速率”)都是从本地设备的角度出发的,即使是针对远程设备显示的传输速率。本地设备的速率是远程设备的速率之和。对于每个速率,您可以看到当前的传输速度,然后是到目前为止传输的数据总量。您可以单击当前传输速度以在字节和位之间切换单位。
桌面软件
Martchus/syncthingtray: Tray application and Dolphin/Plasma integration for Syncthing (github.com)
Syncthing Discovery Server
如果需要同步的设备不在同一网络中,则需要配置发现服务。syncthing
默认使用联网的发现服务器(default
)。如果在离线环境部署syncthing
,则需要自行部署发现服务。
stdiscosrv
-cert=./cert.pem -key=./key.pem
-db-dir=./discovery.db
-debug
-http # Listen on HTTP (使用HTTPS反向代理)
-listen=':8443'
-metrics-listen=<address> # default disabled
-replicate=<peers>
-replication-listen=':19200'
syncthing
配置选项:
https://discover_server:8443
:使用CA签发证书。https://discover_server:8443?id=<server_id>
:使用自签名证书,使用发现服务ID验证证书。http://discover_server:8443?insecure
:取消证书验证。

如果需要要从互联网访问发现服务,可能需要动态DNS服务。
负载均衡
Syncthing Discovery Server — Replication
反向代理
Syncthing Discovery Server — Reverse Proxy Setup
自定义升级服务器
Custom Upgrade Server — Syncthing documentation
HedgeDoc
安装
安装依赖组件:
-
Node.js 16(包含NPM);
-
数据库(PostgreSQL, MySQL, MariaDB, SQLite),数据库应使用UTF-8编码(PostgreSQL和SQLite默认)。为数据库创建库实例和用户,并分配访问权限。
createdb hedgedoc createuser -h localhost hedgedoc -P
GRANT ALL ON DATABASE hedgedoc TO hedgedoc;
安装配置HedgeDoc:
-
在软件根目录下执行:
bin/setup
在线下载依赖项和生成配置文件; -
如果需要对前端进行定制修改(例如markdown的展示样式),可在修改后重新编译前端内容。
yarn install --frozen-lockfile && yarn build
-
修改配置文件(
./config.json
):{ "production": { "domain": "10.131.5.6", "port": 4000, "urlAddPort": true, "db": { "dialect": "postgres", "username": "USERNAME", "password": "PASSWORD", "database": "hedgedoc", "host": "10.131.5.11", "port": "5432" } } }
-
手动启动服务,检查是否产生错误:
NODE_ENV=production yarn start
-
创建用户。
useradd -m hedgedoc mkdir -p /home/hedgedoc/public/uploads /home/hedgedoc/db
-
配置系统服务
hedgedoc.service
。基于文档提供模板根据实际安装情况进行修改。Environment=PATH=/node/path:/system/path Environment=NODE_ENV=production ExecStart=/path/to/yarn start --production WorkingDirectory=/path/to/hedgedoc ReadWritePaths=/home/hedgedoc/public/uploads /home/degedoc/db
-
将服务文件安装到系统服务目录,启用并运行服务,查看服务运行状态。
cp hedgedoc.service /lib/systemd/system/ systemctl daemon-reload && systemctl enable --now hedgedoc journalctl -xe -f -u hedgedoc
反向代理配置
如果需要通过反向代理访问HedegDoc服务,则服务的某些配置与直接访问的方式不同。具体包括:
domain
:配置为反向代理的域名或IP,这将使响应内容中URL的主机地址为代理服务器,而非HedgeDoc服务所在主机。同时,也避免浏览器的跨站访问检测策略阻止访问HedgeDoc服务(CSP和CORS策略)。protocolUseSSL
:如果浏览器是通过HTTPS
访问服务,则应该设置为true
;这将保证响应内容中的URL统一使用https
,从而能正确被反向代理响应。该选项只影响URL的协议,而不影响实际使用HTTP或HTTPS。urlAddPort
:由于反向代理具有统一的访问端口,通常为80
或443
,因此响应内容中的URL应该不添加HedgeDoc服务所使用的端口。urlPath
:如果反向代理处需要通过URL路径区分服务,则需要为HedgeDoc设置根路径而不是使用默认的/
。
Nginx配置中添加HedgeDoc服务(HTTP)的转发规则。
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
server_name hedgedoc.example.com;
location / {
proxy_pass http://hedgedoc-server:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /socket.io/ { # WebSocket
proxy_pass http://hedgedoc-server:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
如果设置了urlPath='hedgedoc'
,则上述转发规则做相应修改:
location /hedgedoc {
proxy_pass http://hedgedoc-server:3000/;
}
location /hedgedoc/socket.io/ { # WebSocket
proxy_pass http://hedgedoc-server:3000/socket.io/;
}
远程桌面
VNC
安装TigerVNC服务
Gnome(Fedora)自带远程桌面服务无法连接,在配置以下服务前首先关闭系统自带的远程桌面服务。
sudo dnf -y install tigervnc-server
sudo firewall-cmd --add-service=vnc-server --permanent
sudo firewall-cmd --reload
vncpasswd
编辑~/.vnc/config
修改显示分辨率geometry=1920x1080
。
编辑/etc/tigervnc/vncserver.users
添加用户映射::2=gary
。
启动服务:systemctl enable --now vncserver@:2.service
注意:
:1
显示可能无法正常工作,因此从:2
开始配置。如果服务无法启动,尝试禁用并重启服务。
连接安全性
VNC传输未加密。为保证通信安全,应该在受信任的网络中使用,或首先从建立一条安全的隧道:
ssh -v -C -L 590N:localhost:590M vncserver.host # local_590N -> remote_590M
VNC客户端
常用包括:UtralVNC、TigerVNC Viewer、TightVNC等。
MobaXTerm连接质量较低(切换屏幕会导致VNC服务终止);
VNC客户端连接黑屏:登录界面显示服务不兼容,修改/etc/gdm/custom.conf
。
# Uncomment the line below to force the login screen to use Xorg
WaylandEnable=false
RDP
How to Install Xrdp Server (Remote Desktop) on Ubuntu 20.04 | Linuxize。
*
XRDP
*在Elementary OS上无法正常使用。
文档处理
Visio
为形状添加连接点
更改连接线跨越风格
“设计/版式/连接线”:取消“显示跨线”,则交叉点处不会拐弯。