即时通讯IM项目编译指南(teamtalk)

一线互联网架构交流: 783153655
课程连接:C/C++Linux服务器开发/高级架构师【零声学院】

1. 简介

  1. 零声学院即时通讯项目,基于开源项目TeamTalk二次开发。

  2. TeamTalk目前的开源版本有较多的bug,功能也不够完善,零声学院始于TeamTalk但不止于TeamTalk,将会持续迭代改进该项目,最终开发成可以商业使用的版本。

  3. 该项目将为分为三个阶段:

    1. 基础版本:基于开源的teamtalk进行修改,修复部分bug(比如内存泄露、Android客户端查看历史消息异常)和改进其部署方式,修改后的版本更方便在已带业务的服务器上进行部署。
    2. 改进版本:在基础版本上添加部分功能和替换部分组件,目的是完善项目的功能和提高系统高可用性;增加音视频通话功能。
    3. 高级版本:采用ETCD服务发现机制,可以动态水平增加聊天服务器、负载均衡登录服务器;采用docker的方式便于分布式部署以及单机模拟分布式测试;采用Mycat便于对数据库分库分表和搭建分布式数据库集群;采用MQ(kafka或zeromq)增加消息的吞吐量。

2. 目录说明

|-- android  Android客户端(Android studio 3.2)
|-- auto_setup  启动目录
|-- doc    说明文档
|-- ios IOS客户端
|-- LICENSE
|-- mac 苹果客户端
|-- pb protocol buffer包格式
|-- php Web后台管理
|-- server 服务器代码(centos7.0)
|-- win-client Windows客户端(vs2015编译)

3. 编译部署说明(Ubuntu 16.04环境)

分为一下几个步骤

  1. 安装mysql、nginx、redis、php等常用组件
  2. 编译im
  3. 部署im服务器+web管理后台
    安装方法如下所示

3.1 安装常用组件

3.1.1 安装mysql

  1. 安装命令
  • 安装mysql服务器端

    sudo apt-get -y install mysql-server

    如果是ubuntu18.04则不会提示输入密码,默认是没有密码
    配置root权限密码,然后按ok,根据提示再次输入密码即可


  • 安装mysql客户端

    sudo apt-get -y install mysql-client

  • 安装mysql模块

    sudo apt-get -y install libmysqlclient-dev

  1. 验证是否成功

    sudo netstat -tap | grep mysql

    看到

    或者用lsof查看数据库默认端口3306

    sudo lsof -i:3306

    看到
  2. 进入mysql

    mysql -u root -p

如果是ubuntu18.04则以无密码的方式登录进去然后设置密码

sudo mysql -u root -p 直接按回车登录然后设置密码
mysql>use mysql;   然后敲回车(注意下面字母的大小写)
#  更新 plugin 及 authentication_string 字段,比如密码123456
mysql> UPDATE user SET plugin="mysql_native_password", authentication_string=PASSWORD("123456") WHERE user="root";
# 输出以下结果
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1
 
# 保存更新结果
mysql> FLUSH PRIVILEGES;
# 退出并重启 mysql
mysql> exit;
sudo service mysql restart

需要特别注意的是ubuntu18.04版本在操作数据库的时候需要sudo权限

  1. 启动/停止/重启mysql

    service mysql start //启动mysql
    service mysql restart //重新启动mysql
    service mysql stop //关闭mysql

3.1.2 安装redis和 hiredis(如果已经有就不用再安装)

  1. 命令安装

    (1) 安装Redis,使用命令安装的只是2.83版本的,直接跳到2.源码安装

    sudo apt-get -y install redis-server

    (2) 启动Redis

    sudo redis-server

    (3) 查看 redis 是否还在运行

    ps -ef | grep redis --> 查看进程
    netstat -an|grep 6379 --> redis的端口号是6379
    redis-cli --> 查看redis

    (4) 查看Redis 的版本

    redis-server --version 或 redis-server -v

    (5) 卸载用命令安装的Redis

    sudo apt-get remove redis-server
    sudo apt list --installed | grep redis 看看还有没有余留
    sudo apt-get remove redis-tools 余留了redis-cli等工具,一并卸载

  2. 源码安装
    (1) 下载到合适的位置,自己指定

    wget http://download.redis.io/releases/redis-5.0.3.tar.gz

    (2) 解压

    tar -zxvf redis-5.0.3.tar.gz

    (3) 编译

    cd redis-5.0.3
    make

    (4) 编译安装依赖文件

    cd deps
    make hiredis linenoise lua jemalloc
    cd hiredis
    sudo make install
    cd ../lua
    sudo make install

    (5) 安装redis

    cd ../../src
    sudo make install

    (6) 启动Redis

    sudo redis-server

    ubuntu 18.04使用

    sudo redis-server --daemonize yes

    然后用sudo lsof -i:6379 查看是否有监听相应的6379 端口

3.1.3 安装nginx

  1. 安装nginx
    (1)安装必要的第三方依赖包

    sudo apt-get -y install libpcre3 libpcre3-dev
    sudo apt-get -y install zlib1g-dev
    sudo apt-get install openssl libssl-dev

    (2) 下载比较新的稳定版本,自己放到合适的位置

    wget http://nginx.org/download/nginx-1.14.2.tar.gz

    (3) 解压配置编译安装

    tar -zxvf nginx-1.14.2.tar.gz
    cd nginx-1.14.2
    ./configure --prefix=/usr/local/nginx
    make
    sudo make install

    安装后的执行文件路径:/usr/local/nginx/sbin/
    配置文件路径:/usr/local/nginx/conf/

    (4) 创建配置文件子目录和在nginx.conf中包含conf.d

    sudo mkdir /usr/local/nginx/conf/conf.d

    修改/usr/local/nginx/conf/nginx.conf

    sudo vim /usr/local/nginx/conf/nginx.conf

    末尾{之前添加

    include /usr/local/nginx/conf/conf.d/*.conf;

    如图所示
  1. 启动nginx
    (1) 创建一个nginx.service
    在 /lib/systemd/system/目录下面新建一个nginx.service文件。并赋予可执行的权限。

    sudo vim /lib/systemd/system/nginx.service
    sudo chmod +x /lib/systemd/system/nginx.service

    (2) 编辑service内容

    [Unit]
    Description=nginx - high performance web server
    After=network.target remote-fs.target nss-lookup.target
    [Service]
    Type=forking
    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s stop
    [Install]
    WantedBy=multi-user.target
    

    (3) 启动服务
    在启动服务之前,需要先重载systemctl命令

    sudo systemctl daemon-reload
    sudo systemctl start nginx.service 启动nginx

    然后使用sudo ps -ef | grep nginx 查看是否有相应的进程

    常用命令

    启动:sudo systemctl start nginx.service
    停止:sudo systemctl stop nginx.service
    重新加载:sudo systemctl reload nginx.service
    显示nginx服务的状态:systemctl status nginx.service
    在开机时启用nginx服务:sudo systemctl enable nginx.service
    在开机时禁用nginx服务:sudo systemctl disable nginx.service

3.1.4 安装php(ubuntu16.04版本)

如果是你是ubuntu18+版本直接看3.1.5

  1. 命令安装
    (1) 安装PHP7以及常用扩展

    sudo apt-get -y install php7.0-fpm php7.0-mysql php7.0-common php7.0-mbstring php7.0-gd php7.0-json php7.0-cli php7.0-curl

    (2) 启动php7.0-fpm进程

    sudo systemctl start php7.0-fpm

    (3)查看php7.0-fpm运行状态。

    systemctl status php7.0-fpm

    /etc/init.d/php7.0-fpm status

    即时通讯-单聊功能表-聊天功能-聊天app-聊天信息加密沟通-聊天文本-聊天技术-聊天构架源码-聊天 记录同步云储存-聊天消息测回-哇谷即时通讯IM源码

    (4) 测试PHP是否安装成功

    php -v

    php --version

  2. 修改php配置文件
    (1) 修改www.conf

    sudo vim /etc/php/7.0/fpm/pool.d/www.conf

    做如下处理(大概49行)
    注释掉

    ;listen.owner = www-data
    ;listen.group = www-data

    将mode值修改为0666

    listen.mode = 0666

(2) 最后,执行sudo /etc/init.d/php7.0-fpm restart重启php-fpm服务

3.1.5 安装php(ubuntu18.04版本)

  1. 命令安装
    (1) 安装PHP7以及常用扩展

    sudo apt-get -y install php7.2-fpm php7.2-mysql php7.2-common php7.2-mbstring php7.2-gd php7.2-json php7.2-cli php7.2-curl

    (2) 启动php7.2-fpm进程

    sudo systemctl start php7.2-fpm

    (3)查看php7.2-fpm运行状态。

    systemctl status php7.2-fpm

    /etc/init.d/php7.2-fpm status

    (4) 测试PHP是否安装成功

    php -v

    php --version

  2. 修改php配置文件
    (1) 修改www.conf

    sudo vim /etc/php/7.2/fpm/pool.d/www.conf

    做如下处理(大概47行)
    注释掉

    ;listen.owner = www-data
    ;listen.group = www-data

    将mode值修改为0666

    listen.mode = 0666

最终效果

(2) 最后,执行sudo /etc/init.d/php7.2-fpm restart重启php-fpm服务

3.2 编译IM

进入目录0voice_im/server/src

  1. 编译protocol buffer库

sudo ./make_protobuf.sh

  1. 编译日志log4

sudo ./make_log4cxx.sh

  1. 编译IM模块

sudo ./build_ubuntu.sh version 1.0

  1. 编译完成后返回上一级目录,即是回到0voice_im/server目录

cd ..

此时多了im-server-1.0.tar.gz压缩包

将im-server-1.0.tar.gz拷贝到0voice_im/auto_setup/im_server

cp im-server-1.0.tar.gz ../auto_setup/im_server/

3.3 部署IM+web管理后台

进入auto_setup,准备部署im

  1. 导入teamtalk数据库
    注意数据库的密码和在安装mysql时候一致
    在setup.sh里面修改数据库密码

    cd auto_setup/mysql
    vim setup.sh

    将数据库密码改为在mysql时配置的密码,我在配置时使用了123456,所以改为

    MYSQL_PASSWORD=123456

导入数据库

sudo ./setup.sh install

导入成功的结果

也可以进入mysql做二次确认

mysql -u root -p
show databases;

  1. 启动IM
    (1) 先配置模块配置文件
    我们先单机部署,主要是修改msgserver.conf、dbproxyserver.conf和loginserver.conf

    cd auto_setup/im_server

    修改auto_setup/im_server/conf目录的配置文件

    vim conf/msgserver.conf

    将大概28行的IpAddr1和IpAddr2改为本机IP外网地址,如果是局域网部署则改为局域网ip,比如

    IpAddr1=192.168.221.130 #电信IP
    IpAddr2=192.168.221.130 #网通IP

    修改访问db的密码

    vim conf/dbproxyserver.conf

    修改db密码

    修改loginserver.conf

    vim conf/loginserver.conf
    内容为:msfs=http://192.168.221.130:8700/

    其余不做修改
    (2) 启动服务器模块

    sudo ./setup.sh install

    (3) 端口说明,可以使用sudo lsof -i:端口号(或者sudo netstat -tunlp查看所有端口) 查看相应进程是否起来

    • msg_server:消息服务器,用户登录成功后,就和指定的消息服务器交互。端口8000,需对外开放
    • login_server :登录服务器,负责身份验证,负责给登录成功的客户端分配msg_server。
      这个服务监听在两个端口,一个是tcp端口8100,用于和后端的服务器交互,另一个是http端口8080,需对外开放
    • route_server:消息转发,不同msg_server上用户交互需要中转站来转发消息。端口8200
    • http_msg_server:主要提供对外的web api,端口8400
    • push_server: 消息群发,端口8500
    • file_server:文件中转站,临时存储,端口8600
    • msfs:小文件永久存储,聊天的图片、表情等,端口8700,需对外开放
    • db_proxy_server:数据库中间件,后端为存储层,mysql和redis, 端口10600
  2. 架设web管理后台

    (1) 回到0voice_im目录,将php拷贝一份为tt压缩后拷贝到
    0voice_im/auto_setup/im_web/

    cd 0voice_im 回到根目录
    cp -ar php tt
    zip -r tt.zip tt
    cp tt.zip auto_setup/im_web/
    cd auto_setup/im_web

    (2) 修改web的配置文件,主要是ip地址和数据库用户名和密码以及nginx的配置
    ip地址修改

    vim conf/config.php

    修改为自己的外网地址

      $config['msfs_url'] = 'http://192.168.221.130:8700/';
      $config['http_url'] = 'http://192.168.221.130:8400';

数据库修改

vim conf/database.php

修改为:

    $db['default']['username'] = 'root';
    $db['default']['password'] = '123456';

nginx配置

vim conf/im.com.conf

将server_name 192.168.221.130;改为自己的ip地址,以及将php改成你对应的版本号(ubuntu18.x改为7.2)。 image.png

(3) 部署web

sudo ./setup.sh install

(4) 务必使用谷歌浏览器(其他浏览器有兼容性问题)打开服务器的ip地址,比如192.168.221.130,然后用户名和密码都为admin

image.png

登录进去后则可以配置部门和成员。
比如添加c++部门和成员darren、king、lee,密码都为123456

添加组织架构 添加组织架构

添加用户 image.png
  1. 客户端登录
    已经编译好的客户端可执行文件路径:0voice_im_0721/win-client/bin/teamtalk/Release/0voice_im.exe,点击可以运行。
    image.png

其他

GraphicsMagick 下载地址:
http://ftp.icm.edu.pl/pub/unix/graphics/GraphicsMagick/1.3/

/usr/bin/ld: cannot find -ltiff
/usr/bin/ld: cannot find -lfreetype
/usr/bin/ld: cannot find -ljasper
/usr/bin/ld: cannot find -ljpeg
/usr/bin/ld: cannot find -lpng15
/usr/bin/ld: cannot find -lXext
/usr/bin/ld: cannot find -lSM
/usr/bin/ld: cannot find -lICE
/usr/bin/ld: cannot find -lX11
/usr/bin/ld: cannot find -lbz2
sudo apt-get install libtiff-dev
sudo apt-get install libfreetype6-dev
sudo add-apt-repository "deb [http://security.ubuntu.com/ubuntu](http://security.ubuntu.com/ubuntu) xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

sudo apt-get install libjpeg-dev
sudo apt-get install libpng12-dev
sudo apt-get install libxext-dev
sudo apt-get install libsm-dev
sudo apt-get install libice-dev
sudo apt-get install libx11-dev
sudo apt-get install libbz2-dev

Ubuntu18.04下安装OpenCv依赖包libjasper-dev无法安装的问题
https://blog.csdn.net/weixin_41053564/article/details/81254410

--------------

热门搜索:

什么是私有云? 私有云、公有云还是混合云?企业该如何选? 企业聊天APP有什么作用,可以带来哪些便利? 企业选择混合云的优势 聊天APP应该具备哪些功能?怎么确保信息不被泄露? 企业即时通讯的使用价值有哪些 企业IM是什么,有什么使用优势? JM沟通优势有哪些,安全性怎么样? JM沟通APP功能强大且安全性高 IM云系统即时通讯公有云、私有云、企业云、海外云-哇谷IM团队 对于IM即时通讯的性能与并发性问题xmpp等各种通信协议 sso登录统一账号体系和集中认证授权 MongoDB数据库百万并发设计使用方法 WebRTC视频会议服务器性能10万并发 办公协同解决方案的意义 有什么优势? 美国FBI遭黑客攻击 超10万人收到垃圾邮件!这家零佣金券商也被攻击 用户数据泄露-企业即时通讯安全 工作台支持私有化部署-企业办公通信管理-软件开发管理系统-哇谷云 Application scenarios of wagu im cloud service A typical IM architecture might look like this 哇谷IM实现原理讲解-哇谷IM即时通讯云 JM沟通功能图片演示-哇谷IM即时通讯云 硬件配置选择-哇谷IM即时通讯云 IM私有化价格服务系统-哇谷IM即时通讯云 哇谷云服务项目表 哇谷IM定制私有化搭建资料准备工单-哇谷IM即时通讯云 APP中红包功能技术最常见的形式-哇谷im即时通讯云 私有云、公有云还是混合云?企业该如何选? 租用海外云服务器时应注意的事项 私有云比起公有云安全性大大提高 哇谷云服务应用场景十分丰富多元 聊天APP功能强大 用户群体越来越广泛 企业打造私有云平台需要注意的几点 企业聊天办公软件如何挑选,需要具备哪些功能? IM的作用可不只是单纯的聊天工具 企业使用即时通讯的好处有哪些? 企业通讯常见的困扰:有什么办法提高通讯质量? 聊天APP应该具备哪些功能?怎么确保信息不被泄露? 语音会议软件越来越多:到底哪个软件适合开会? 使用手机能否召开视频会议?哪些软件值得选择? JM沟通与传统通讯软件有何区别?是否只能用于社交? 语音会议效果难以保障 你有准备专业会议软件吗 专业企业通讯软件功能齐全 让办公变得更加轻松快捷 业应不应该开发聊天APP 三个不容拒绝的理由 企业通讯软件如何选择 隐私保护终于一切 视频会议没有专用软件 很多事情都无法处理 哪些是常用的微服务框架? 企业如何搭建私有云? 即时通讯软件是否具有聊天回执的功能? 企业即时通讯软件支持多设备登陆吗? 企业即时通讯适合中小企业的即时通讯软件? 盘点全球几大即时通讯软件 介绍两款国外大佬级别的即时通讯APP Short video features 即时通讯短视频功能的基本特点主要有哪些 Features of chat function 聊天功能在即时通讯软件中的产品特色体现在哪里 Increase the function of red envelope 为什么在即时通讯软件中会增加红包功能 instant messaging 即时通讯 办私密软件公 Office privacy software Cloud service 云服务 Im definition IM定义 How to meet office requirements Main features of instant messaging 即时通讯云软件应该如何达到集团办公的需求 企业即时通讯软件设计的特点主要有哪些 Instant messaging cloud red packet  福利发送新办法,IM即时通讯云红包功能的大势所趋 LAN communication 区域网通讯可以促进企业发展,使信息传输更快捷 Production guide of enterprise specific app 企业专属聊天APP的生产指南,这里应有尽有! Waguyun privacy protection 企业通讯无法得到私密保障?哇谷云上办公为您提供专业服务! Choose Wawa Guyun for internal communication 企业内部交流怎么办?现在有了哇谷云!  Advantages of LAN  局域网通讯企业真的需要吗?它有哪些优点? Enterprise instant messaging voice conference app 新发展、新机遇 全球疫情下的企业即时通讯语音会议 Provide efficient enterprise communication 专业呼叫中心 提供高效企业通信解决方案 New layout of global economic integration 协同办公解决方案,全球一体化经济新布局 There is more than one way for IM tools 还在使用微信?IM工具不止有一条途径 Power source for efficient operation 选择办公协同解决方案,现代企业高效运转的动力源 Efficient enterprise specific instant messaging 企业聊天APP,私密度高的高效企业专属即时通讯APP 新一代私有云与早期私有云的区别 The difference between private clouds What are the advantages of private cloud 新一代私有云有哪些优势? 单聊功能 群聊功能红包功能源码 实时音视频 短视频 音视频会议源码 低延迟直播 哇谷IM云服务 IM私有化搭建源码 私有化搭建准备文件 TF签名知识 企业即时通讯 IM 即时通讯 IM定制功能 语音聊天室 在线教育 金融服务 sso单点登录系统 政府加密沟通 企业通信办公 KTV点唱系统 局域网通讯 知识库 企业即时通讯 sso单点登录系统 KTV点唱系统版本Demo JM沟通2.0版本Demo 哇谷IM企业办公版本 哇谷工作台 短视频源码 音视频会议源码 直播聊天源码 ios超级签名服务 哇谷云 哇谷科技 即时通讯 IM下载http://www.juemigoutong.com/webproduct.html IM功能与价格http://www.juemigoutong.com/webcooperation.html 哇谷IM团队,哇谷即时通讯,哇谷官方站 即时通讯-哇谷即时通讯-IM-直播-短视频-音视频会议-大型企业即时通讯办-即时通讯源码-聊天app-http://www.wagukeji.com 即时通讯-哇谷即时通讯-IM-直播-短视频-音视频会议-大型企业即时通讯办-即时通讯源码-聊天app-sso-http://www.juemigoutong.com 即时通讯-哇谷即时通讯-IM-直播-短视频-音视频会议-大型企业即时通讯办-即时通讯源码-聊天app-http://www.wagu.cloud 即时通讯-哇谷即时通讯-IM-直播-短视频-音视频会议-大型企业即时通讯办-即时通讯源码-聊天app-http://bolg.wagu.cloud 即时通讯-哇谷即时通讯-IM-直播-短视频-音视频会议-大型企业即时通讯办-即时通讯源码-聊天app-http://so.wagu.cloud