Campfire是一款基于Web的聊天应用程序。它支持许多功能,目前包括:
多个聊天房间(具有访问控制)
私聊
文件上传与预览支持
搜索
通知(使用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注册你的账号,第一个注册的账号默认为管理员:
效果:
荒岛



















后台消息推送效果咋样,ios和安卓端的测试过吗?对比市面上已存在的自建聊天项目最想了解的就是消息推送如何。
部署在服务器上,时间久了会自动清理聊天记录吗?不清理服务器磁盘空间会被塞满吧?