在线客服系统源码基于Thonkphp开发的,根据业务需要改造而来,修改和扩展了很多ejaberd不支持的功能。
源码模块:
源码:zxkfym.top
●ejabberd
IM核心组件,负责维护与客户端的长连接和消息路由
●or
IM平均均衡组件,负责验证终端身份,以及转发http请求到的后台服务
●im_http_service
IM HTTP接口服务,负责IM相关消息数据的查询、设置以及历史同步(基于tomcat的java服务)
●qfproxy
IM文件服务,负责服务文件的上传和下载(基于tomcat的java)
●推送服务
IM的推送服务,用于离线消息的推送(基于tomcat的java服务)
●搜索
提供远程搜索人员和群的服务
●edis
IM缓存服务
●postgresql
IM数据库服务
源码安装:
默认条件(如果主机用户名和这里的名字),则需要将安装步骤中的换成自己的名字:
要求服务器:centos7.x
主机名用变量STARTALK,可以替换成自己的主机名
hosts 添加: 127.0.0.1 ${STARTALK} (sudo vim /etc/hosts)
所有项目都安装到/startalk下面
安装用户和用户组是:startalk:startalk,要保证startalk用户有sudo权限
家目录下有下载文件夹,所有文件会下载到该文件夹下
数据库用户名密码是 ejabberd:123456,服务地址是:127.0.0.1
redis 密码是:123456,服务地址是:127.0.0.1
数据库初始化sql在doc目录下
保证可以访问主机的:5202、8080端口(关掉防火墙sudo systemctl stop firewalld.service:)
IM 确定服务的域名是:startalk(大家在之前安装修改之前,最好修改这个值,然后确定了,的报价就不错了,可以参考域名)
tls 证书:默认安装用是一个测试,上线使用,请更换 /startalk/ejabberd/etc/ejabberd/server.pem 文件,生成方法见securering -ejabberd-with-tls-encryption
出现文件覆盖提示时,输入是的 敲回车自动
安装文档中 # 大观输入的命令表示 root 执行的,$ 大观的命令表示普通用户
# yum -y install epel-release
# yum -y update
# yum -y groupinstall Base "Development Tools" "Perl Support"
# yum install -y telnet aspell bzip2 collectd-postgresql collectd-rrdtool collectd.x86_64 curl db4 expat.x86_64 gcc gcc-c++ gd gdbm git gmp ImageMagick java-1.8.0-openjdk java-1.8.0-openjdk-devel libcollection libedit libffi libffi-devel libicu libpcap libtidy libwebp libxml2 libXpm libxslt libyaml.x86_64 mailcap ncurses ncurses npm openssl openssl-devel pcre perl perl-Business-ISBN perl-Business-ISBN-Data perl-Collectd perl-Compress-Raw-Bzip2 perl-Compress-Raw-Zlib perl-Config-General perl-Data-Dumper perl-Digest perl-Digest-MD5 perl-Encode-Locale perl-ExtUtils-Embed perl-ExtUtils-MakeMaker perl-GD perl-HTML-Parser perl-HTML-Tagset perl-HTTP-Date perl-HTTP-Message perl-IO-Compress perl-IO-HTML perl-JSON perl-LWP-MediaTypes perl-Regexp-Common perl-Thread-Queue perl-TimeDate perl-URI python readline recode redis rrdtool rrdtool-perl sqlite systemtap-sdt.x86_64 tk xz zlib rng-tools python36-psycopg2.x86_64 python34-psycopg2.x86_64 python-psycopg2.x86_64 python-pillow python34-pip screen unixODBC unixODBC-devel pkgconfig libSM libSM-devel ncurses-devel libyaml-devel expat-devel libxml2-devel pam-devel pcre-devel gd-devel bzip2-devel zlib-devel libicu-devel libwebp-devel gmp-devel curl-devel postgresql-devel libtidy-devel libmcrypt libmcrypt readline-devel libxslt-devel vim docbook-dtds docbook-style-xslt fop
添加主机
在/etc/hosts下面添加一行:
127.0.0.1 startalk.com
请注意如果是生产服务,可以设置域名的DNS,如果有正确的DNS域名解析的话,这一步不是必须的。
新建安装用户
新增startalk用户:
# groupadd startalk
# useradd -g startalk startalk
# passwd startalk
新增发布 sql 系统包管理安装 postgre 的用户可以使用以下步骤:
# groupadd postgres
# useradd -g postgres postgres
# passwd postgres
新建安装目录
# mkdir /startalk
# chown startalk:startalk /startalk
新建数据库目录
# mkdir /startalk/database
# chown -R postgres:postgres /startalk/database
为startalk用户添加sudo权限
# visudo
在行
root ALL= (ALL) ALL
行后添加
startalk ALL= (ALL) ALL
postgres ALL= (ALL) ALL
保存后退出
下载源码
# su - startalk
$ mkdir /startalk/download
$ cd /startalk/download
$ git clone https://github.com/startalkIM/ejabberd.git
$ git clone https://github.com/startalkIM/openresty_ng.git
$ git clone https://github.com/startalkIM/search.git
$ git clone https://github.com/startalkIM/tomcat_projects.git
$ cp ejabberd/doc/qtalk.sql /startalk/
$ cp ejabberd/doc/init.sql /startalk/
检测端口使用:
# sudo netstat -antlp | egrep "8080|8005|8009|8081|8006|8010|8082|8007|8011|8083|8888|5202|10050
输出,则表明没有使用startalk使用的端口,否则需要关闭已经在使用如果没有端口的程序
redis 安装
$ sudo yum install -y redis
$ sudo vim /etc/redis.conf
将对应的配置修改为下面内容
daemonize yes
requirepass 123456
maxmemory 134217728
redis 启动
启动redis
$ sudo redis-server /etc/redis.conf
确认启动成功:
$ sudo netstat -antlp | grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 8813/redis-server 1
安装数据库
建议使用 OS 发行版的预编译包,比如在 CentOS 7 里,我们可以执行下面的命令搜索并安装 PostgreSQL12:
安装存储库 RPM:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
安装 PostgreSQL:
sudo yum install -y postgresql12-server
在 CentOS 7 里,用预编译包完结 postgresql,/usr/pgsql-12/bin设置所有安装后的文件在目录下,基本命令无特殊目录路径。
初始化数据库实例
sudo -u postgres /usr/pgsql-12/bin/initdb -D /startalk/database
数据库启动
sudo -u postgres /usr/pgsql-12/bin/pg_ctl -D /startalk/database start
确认启动成功
$ sudo netstat -antlp | grep 5432
输出结果应该像下面这样:
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 4751/postmaster
初始化数据库
初始化数据库结构
$ psql -U postgres -d postgres -f /startalk/qtalk.sql
$ psql -U postgres -d ejabberd -f /startalk/init.sql
初始化数据库用户:ejabberd的密码
$ psql -U postgres -d postgres -c "ALTER USER ejabberd WITH PASSWORD '123456';"
psql 连接数据库
$ psql -U postgres -d ejabberd -h 127.0.0.1
psql (12.6)
ejabberd=# select * from host_users;
如果 ejabberd 和 postgresql 的数据库不在同一个服务器,则允许参考 postgresql 的文档修改数据库的pg_hba.conf文件,ejabberd 的服务器访问数据库服务器。
openresty 安装
以CentOS 7为例,我们可以用官网快速安装openresty的方法来参考一下 openresty:
wget https://openresty.org/package/centos/openresty.repo
sudo mv openresty.repo /etc/yum.repos.d/
sudo yum check-update
sudo yum install openresty
openresty 启动
openresty 包安装在之后/usr/local/openresty
启动方法是:
sudo /usr/local/openresty/nginx/sbin/nginx
执行下面命令确认启动成功:
$ sudo netstat -antlp | grep 8080
输出结果应该像下面这样:
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 23438/nginx: master
为 Startalk 配置 OpenResty
然后请参考Startalk OpenResty 配置把 Startalk 的 OpenResty 相关配置下载、配置上。重启 OpenResty:
sudo killall nginx
sudo /usr/local/openresty/nginx/sbin/nginx
$ cd /startalk/download
$ wget http://erlang.org/download/otp_src_19.3.tar.gz
$ tar -zxvf otp_src_19.3.tar.gz
$ cd otp_src_19.3
$ ./configure --prefix=/startalk/erlang1903
$ make
$ make install
执行把路径添加到 PATH 环境变量
$ vim ~/.bash_profile
----------------------------------
# User specific environment and startup programs
ERLANGPATH=/startalk/erlang1903
PATH=$PATH:$HOME/bin:$ERLANGPATH/bin
----------------------------------
$ . ~/.bash_profile
执行下面命令验证erlang是否安装成功:
$ erl
输出下面这样就是成功了:
Erlang/OTP 19 [erts-8.3] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V8.3 (abort with ^G)
1>
安装ejabberd
$ cd /startalk/download
$ cd ejabberd/
$ ./configure --prefix=/startalk/ejabberd --with-erlang=/startalk/erlang1903 --enable-pgsql --enable-full-xml
$ make
$ make install
$ cp ejabberd.yml.qunar /startalk/ejabberd/etc/ejabberd/ejabberd.yml
$ cp ejabberdctl.cfg.qunar /startalk/ejabberd/etc/ejabberd/ejabberdctl.cfg
启动ejabberd
$ cd /startalk/ejabberd
$ ./sbin/ejabberdctl start
验证 ejabberd 是否启动成功:
$ ps -ef | grep 's ejabberd'
startalk 23515 1 4 09:58 ? 00:00:03 /startalk/erlang1903/lib/erlang/erts-8.3/bin/beam.smp -K true -P 250000 -- -root /startalk/erlang1903/lib/erlang -progname erl -- -home /home/startalk -- -name ejabberd@startalk.com -noshell -noinput -noshell -noinput -mnesia dir "/startalk/ejabberd/var/lib/ejabberd" -ejabberd log_rate_limit 20000 log_rotate_size 504857600 log_rotate_count 41 log_rotate_date "$D0" -s ejabberd -smp auto start
安装java服务
/startalk/download/tomcat_projects/ 下就是打好包的三个java服务,自己也可以使用打包,然后自己部署
$ cd /startalk/download/
$ cp -rf tomcat_projects /startalk/tomcat
$ cd /startalk/tomcat
修改推送服务的地址
$ vim /startalk/tomcat/push_service/webapps/push_service/WEB-INF/classes/app.properties
#使用星语push url, 将ip换为服务器ip
qtalk_push_url=http://ip:8091/qtapi/token/sendPush.qunar
#使用星语push key
qtalk_push_key=12342a14-e6c0-463f-90a0-92b8faec4063
修改导航地址和扩展键盘:
$ vim /startalk/tomcat/im_http_service/webapps/im_http_service/WEB-INF/classes/nav.json
$ vim /startalk/tomcat/im_http_service/webapps/im_http_service/WEB-INF/classes/androidqtalk.json
$ vim /startalk/tomcat/im_http_service/webapps/im_http_service/WEB-INF/classes/androidstartalk.json
$ vim /startalk/tomcat/im_http_service/webapps/im_http_service/WEB-INF/classes/iosqtalk.json
$ vim /startalk/tomcat/im_http_service/webapps/im_http_service/WEB-INF/classes/iosstartalk.json
将ip替换成对应机器的ip地址(sed -i "s/ip/xxx.xxx.xxx.xxx/g" 或者在vim内 :%s/ip/xxx.xxx.xxx.xxx/g)
启动java服务
$ cd /startalk/tomcat/im_http_service
$ ./bin/startup.sh
$ cd /startalk/tomcat/qfproxy
$ ./bin/startup.sh
$ cd /startalk/tomcat/push_service
$ ./bin/startup.sh
确认服务启动成功
$ sudo netstat -antlp | egrep '8081|8082|8083|8009|8010|8011|8005|8006|8007'
输出像下面这样:
tcp6 0 0 127.0.0.1:8007 :::* LISTEN 23853/java
tcp6 0 0 :::8009 :::* LISTEN 23748/java
tcp6 0 0 :::8010 :::* LISTEN 23785/java
tcp6 0 0 :::8011 :::* LISTEN 23853/java
tcp6 0 0 :::8081 :::* LISTEN 23748/java
tcp6 0 0 :::8082 :::* LISTEN 23785/java
tcp6 0 0 :::8083 :::* LISTEN 23853/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 23748/java
tcp6 0 0 127.0.0.1:8006 :::* LISTEN 23785/java
安装搜索服务
: 你
openssl 版本 >= 1.02
python3.7及以上,以3.9.2以上为例
cd /startalk/download && wget https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tgz
tar -zxvf Python-3.9.2.tgz
cd Python-3.9.2
./configure --prefix=/startalk/python392
make && make install
添加到bash_profile
vim ~/.bash_profile
PYTHONPATH=/startalk/python392
PATH=$PATH:$PYTHONPATH/bin
:wq
source ~/.bash_profile
(任选) 建议使用virtualenv部署模块 需要的环境
升级pip
/startalk/python392/bin/python3.9 -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
下载安装virtualenv
pip3.9 install -U virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple
创建虚拟环境
cp -rf /startalk/download/search /startalk/ && cd /startalk/search && virtualenv --system-site-packages -p python3.9 ./venv
启动环境
source venv/bin/activate
安装:
配置conf/configure.ini
安装, 使用-i 国内依赖源下载项目
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
启动项目
supervisord -c /startalk/search/conf/supervisor.conf
确认服务正常:
tail -100f /startalk/search/log/access.log
可以执行以下脚本来检查一些常见的错误:下载该文件check.sh
# sed -i 's/ip/自己的ip/g' ./check.sh
# chmod +x check.sh
# ./check.sh
如果发现出现提示:“ip的5202端口未开启外网访问,开启该访问或者关闭请求关闭防火墙”,请在服务器上使用网络ip 5202是否可以连上,一般是因为防火墙限制了或者端口就可以了。
「艾尔登法环」梅琳娜手办开订 立体手办▪
万代「艾尔登法环」白狼战鬼手办开订 立体手办▪
「夏目友人帐」猫咪老师粘土人开订 立体手办▪
「五等分的新娘∬」中野三玖·白无垢版手办开订 立体手办▪
「海贼王」乌索普Q版手办开订 立体手办▪
良笑社「初音未来」新手办开订 立体手办▪
「黑岩射手DAWN FALL」死亡主宰手办开订 立体手办▪
「盾之勇者成名录」菲洛手办登场 立体手办▪
「魔法少女小圆」美树沙耶香手办开订 立体手办▪
「咒术回战」七海建人粘土人登场 立体手办▪
「五等分的新娘」中野二乃白无垢手办开订 立体手办▪
「为美好的世界献上祝福!」芸芸粘土人开订 立体手办▪
「公主连结 与你重逢」六星可可萝手办开订 立体手办▪
「女神异闻录5」Joker雨宫莲手办开订 立体手办▪
「间谍过家家」约尔・福杰粘土人登场 立体手办▪
「街角魔族 2丁目」吉田优子手办开订 立体手办▪
「火影忍者 疾风传」旗木卡卡西·暗部版粘土人登场 立体手办▪
「佐佐木与宫野」宫野由美粘土人开订 立体手办▪
「盾之勇者成名录」第2季拉芙塔莉雅手办开订 立体手办▪
「咒术回战」两面宿傩Q版坐姿手办开订 立体手办▪
「DATE·A·BULLET」时崎狂三手办开订 立体手办▪
「狂赌之渊××」早乙女芽亚里粘土人开订 立体手办▪
「魔道祖师」魏无羨粘土人开订 立体手办▪
「新·奥特曼」奥特曼手办现已开订 立体手办▪