Haven是一个开源并且可以self-host的Discord替代方案。无需邮箱注册,不追踪用户,并宣称永久免费。
Haven目前还是一个很新的项目,正在大力开发中,但功能其实已经非常完善了。我部署测试了一下,个人觉得比较亮眼的功能有:
- DM(私聊)端到端加密(E2EE)
- 完善的权限控制功能
- 语音通话以及屏幕共享(需额外配置coturn)
- 完整的文件上传功能,且支持设置最大文件上传大小
- 消息清理,超过一定时间的消息可自动删除
- URL网址预览,且可以直接识别Youtube等网站的视频
- 自定义emoji表情包
- 超多漂亮的主题供用户选择
看下效果,Channel(群聊):
DM(私聊):
以下是部署步骤,安装Docker:
apt -y update
apt -y install curl
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
新建compose文件:
mkdir -p /opt/haven && cd /opt/haven && nano docker-compose.yml
写入如下内容:
services:
haven:
image: ghcr.io/ancsemi/haven:latest
container_name: haven
restart: unless-stopped
env_file: .env
ports:
- "61005:61005"
volumes:
- ./haven-data:/data
turn:
container_name: coturn-server
image: docker.io/coturn/coturn
restart: unless-stopped
network_mode: "host"
volumes:
- ./coturn.conf:/etc/coturn/turnserver.conf
创建coturn配置文件:
nano coturn.conf
写入如下内容:
use-auth-secret
static-auth-secret=E6Hk8mbrQobSp49Slgen6cYNNGuYx8NjVXh7GV8gWebNQMXY8xUTMjMjnSiMxu32 # 配置coturn密钥
realm=coturn.example.com # 配置你的域名
fingerprint
min-port=61200
max-port=61500
创建.env文件:
nano .env
写入如下内容:
# Server Config
PORT=61005
HOST=0.0.0.0
# Display name for this server (shown in multi-server sidebar)
SERVER_NAME=Haven
# Secret key for JWT tokens — CHANGE THIS to a long random string!
# (Auto-generated on first boot if left as default)
JWT_SECRET=G1hp3yQW4ZNPz1aMNwXwC8wOUFPlQBS0UVdx0BjOSg5NGFtBzSuiHPdcOju4QuPt
# Your admin username (register with this name first to get admin powers)
ADMIN_USERNAME=imlala
# Optional: HTTPS (required for voice chat over the internet)
# Paths are relative to the data directory:
# Windows: %APPDATA%\Haven\
# Linux/macOS: ~/.haven/
# SSL_CERT_PATH=./certs/cert.pem
# SSL_KEY_PATH=./certs/key.pem
# Force HTTP mode (useful behind a reverse proxy like Caddy, nginx, etc.)
# Set to true to skip SSL even if certificates exist.
FORCE_HTTP=true
# Optional: Override the data directory location
# HAVEN_DATA_DIR=
# Optional: TURN server for voice/screen sharing across the internet.
# Without TURN, voice only works on the same network (LAN).
# Recommended: run coturn on the same box or a cheap VPS.
#
# Option A — Shared secret (coturn --use-auth-secret, recommended):
TURN_URL=turn:coturn.example.com:3478
TURN_SECRET=E6Hk8mbrQobSp49Slgen6cYNNGuYx8NjVXh7GV8gWebNQMXY8xUTMjMjnSiMxu32
#
# Option B — Static credentials:
# TURN_URL=turn:your-server.com:3478
# TURN_USERNAME=haven
# TURN_PASSWORD=your-password
# Optional: GIPHY API key (free — get one at https://developers.giphy.com/dashboard/)
# GIPHY_API_KEY=
启动haven和coturn:
docker compose up -d
配置Ferron反向代理:
nano /etc/ferron.kdl
写入如下内容:
haven.example.com {
proxy "http://127.0.0.1:61005/"
proxy_request_header_replace "Host" "{header:Host}"
}
重载Ferron:
systemctl reload ferron
如果正常,现在访问haven.example.com可以浏览到登录与注册的页面:
请注意注册的用户名,务必与之前在.env内设置的ADMIN_USERNAME=一致,只有匹配到这个用户名,你注册的账号才拥有管理员权限。
荒岛


















