协作办公软件

Rocket.Chat

安装

可手动、使用容器或使用snap安装。推荐使用snap安装,可避免多数配置。

sudo snap install rocketchat-server  # 安装后自动启动运行

可使用浏览器或下载客户端访问http://<host_addr>:3000并进行初始设置(默认仅支持localhost或IP地址访问,主机名或域名访问需要配置Caddy或其他代理服务)。使用snap可查看服务状态

离线安装snap版本

在未安装过snap软件的机器上需要下载和安装core18snapd依赖。

配置

获取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服务

问题:

  1. 服务无限重启,日志(snap logs -f rocketchat-server.rocketchat-server查看服务日志)出现Segmentation fault未知错误:尝试重启服务器然后启动rocketchat-server服务。
  2. 重启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

问题:

  1. 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]://:22000tcp6://[::]:22000tcp协议监听IPv4/v6地址。

  • QUIC:quic://[0.0.0.0]:22000,类似于TCP,可指定quic4quic6

    如果上述端口被占用,则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:22000dynamic+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;
    
  • Yarn 1.22+

安装配置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:由于反向代理具有统一的访问端口,通常为80443,因此响应内容中的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
  1. Fedora 34 : Configure VNC Server : Server World (server-world.info)

RDP

How to Install Xrdp Server (Remote Desktop) on Ubuntu 20.04 | Linuxize

*XRDP*在Elementary OS上无法正常使用。

文档处理

Visio

为形状添加连接点

添加连接点

连接点视图

更改连接线跨越风格

“设计/版式/连接线”:取消“显示跨线”,则交叉点处不会拐弯。

参考资料