> 多个聊天房间(具有访问控制)
>
> 私聊
>
> 文件上传与预览支持
>
> 搜索
>
> 通知(使用Web Push)
>
> @提及
>
> 支持机器人集成
我搭建了一个试了下体验还不错,给小团体用的话足够了,完全公开当成公共实例的话,我个人认为还少了以下几个关键功能:
> 禁止用户(开发中)
>
> 找回密码(开发中)
>
> 表情包支持,目前只支持几个emoji。
>
> 更细粒度的权限控制,目前的权限控制比较单一,只能控制房间是完全公开还是私有。
这项目非常值得期待,背后是Basecamp的团队在开发!
考虑到官方提供的Docker部署方案需要占用80/443端口,这里我记录下用NGINX反代部署的方案。
安装NGINX、Node.js、NPM:
apt -y update
apt -y install curl nginx python3-certbot-nginx nodejs npm安装Docker:
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh安装web-push:
npm install -g web-push使用web-push生成vapid-key:
web-push generate-vapid-keys会回显类似的内容,复制下来保存,后续部署需要用到:
Public Key:
BKnuy5nGRaA2uuuonErTAUpH4Moil5w7J3RqWgtklf46h5YIpY-rxiR8GQ8z-3YOgZ1RfeWu1AheG8EeHhgx_04
Private Key:
vvqVf2ZDnMqY4N-xXEOwgqw1ntslfEb0Eq8aUHwfBsE由于官方没有提供最新的预构建docker image,需要我们自己build一下。这里介绍一个小技巧,对于这种目录里有Dockerfile的项目,不需要把整个项目clone到本地再构建,直接用下面的命令就能构建了:
docker build -t campfire:latest https://github.com/basecamp/once-campfire.git#main创建目录/compose文件:
mkdir -p /opt/campfire && cd /opt/campfire && nano docker-compose.yml写入如下配置:
services:
campfire:
image: campfire:latest
container_name: campfire
restart: unless-stopped
environment:
- DISABLE_SSL=true
- SECRET_KEY_BASE= # 使用openssl rand -hex 32生成
- VAPID_PUBLIC_KEY= # 粘贴web-push生成的公钥
- VAPID_PRIVATE_KEY= # 粘贴web-push生成的私钥
ports:
- "127.0.0.1:4000:80"
volumes:
- campfire_data:/rails/storage
volumes:
campfire_data:启动:
docker compose up -d创建NGINX站点配置文件:
nano /etc/nginx/sites-available/campfire写入如下内容:
upstream campfire {
server 127.0.0.1:4000;
}
server {
listen 80;
server_name campfire.example.com;
client_max_body_size 10m; # 限制文件上传大小,根据自己的需要修改
access_log /var/log/nginx/campfire_access.log;
error_log /var/log/nginx/campfire_error.log;
location /cable {
proxy_pass http://campfire;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
location / {
proxy_pass http://campfire;
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_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}启用站点:
ln -s /etc/nginx/sites-available/campfire /etc/nginx/sites-enabled/campfire签发SSL证书:
certbot --nginx --email example@lala.im --agree-tos --no-eff-email访问campfire.example.com注册你的账号,第一个注册的账号默认为管理员:

效果:
