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