gosignal

本项目是端对端加密聊天软件 Signal 服务端 Signal-Server 使用 Golang 语言的实现,完全兼容 Signal 客户端现有协议,并且保持同步更新。相较于 Java 版本的 Signal-Server,本项目替换相关 AWS 服务依赖为开源软件,自由可控,部署更加简单方便。另外新增了非端对端加密、支持数万人群聊的 Channel 功能,以满足用户在不同场景下的聊天需求。

服务依赖

Nats

Redis

PostgreSQL

MinIO (非必须, 影响文件上传)

Cassandra (非必须, 影响Channel)

TurnServer (非必须, 影响语音视频)

强烈建议使用 Docker 快速搭建开发环境:

docker run --name signal_nats -d -p 4222:4222 -p 6222:6222 -p 8222:8222 nats

docker run --name signal_redis -d -p 6379:6379 redis

docker run --name signal_postgres -d -p 5432:5432 -e POSTGRES_PASSWORD=${postgres_pwd} postgres

快速开始

编译

cd cmd/signal && go build

配置文件

服务配置模板文件(*.example)存放在 ./config 目录,配置文件需要根据模板生成,执行命令:

python init_config.py

也可以自行拷贝重命名去掉 .example 后缀,生成完毕后可以根据需求自行修改,配置文件不能上传到 git 服务器。

需要将配置文件夹 config 和 lua 文件夹 放到执行文件同一目录。

启动服务

./signal

生成文档

swag init -g swagger.go

go run swagger.go

Docker 部署

脚本 generate.py 用于快速生成 docker-compose.yml 文件,定义和运行 Signal Server 以及相关依赖服务的容器。生成后的相关文件存放在 docker 目录,可以将 docker 文件夹拷贝至生产服务器进行快速部署。

执行脚本前请预先安装 Python 环境以及 Docker,然后执行 pip install click 命令安装相关依赖。

生成

python generate.py

启动服务

cd docker/

./deploy_on_docker.sh

更新服务

首先将可执行文件拷贝到 docker//bin 目录进行替换,然后执行命令:

docker-compose restart server