静看光阴荏苒
不管不顾不问不说也不念

Campfire:一款基于Web的聊天应用程序

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注册你的账号,第一个注册的账号默认为管理员:

效果:

赞(0)
未经允许不得转载:荒岛 » Campfire:一款基于Web的聊天应用程序
分享到: 更多 (0)

评论 2

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    后台消息推送效果咋样,ios和安卓端的测试过吗?对比市面上已存在的自建聊天项目最想了解的就是消息推送如何。

    游客1小时前 Google Chrome 141.0.0.0 Google Chrome 141.0.0.0 Android 10 Android 10回复
  2. #2

    部署在服务器上,时间久了会自动清理聊天记录吗?不清理服务器磁盘空间会被塞满吧?

    游客13分钟前 Google Chrome 140.0.0.0 Google Chrome 140.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复

分享创造快乐

广告合作资源投稿