【APP】: flutter(原生混合框架,不是web封装,原生应用,一套代码直接生成原生Android和ios应用),既不损失性能,也能降低开发成本
【小程序/h5/公众号】:uni-app(底层框架Vue)
【后台管理】:vue-element-admin
服务端:
【java框架】:[springboot2] [dubbo2.7.3]
【数据库对接】:[mybatis]
【即时通讯IM】:netty4
【数据库】:MySQL(常规业务数据和重要数据存储),Mongodb(存储聊天内容),Redis(缓存高频非实时数据),Elasticsearch(海量数据全文检索和大型数据日志服务)
【负载均衡和转发】:nginx
源码下载链接:
安装教程
1、安装JAVA环境
2、安装zookeeper
cd ~
wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
解压压缩包
tar -zxvf zookeeper-3.4.14.tar.gz
开始部署zookeeper(下面我均简称zk)
创建zk目录
mkdir /usr/local/zookeeper/
复制zk到指定目录
cd ~
cp -R zookeeper-3.4.14/* /usr/local/zookeeper/
cd /usr/local/zookeeper/conf/
cp zoo_sample.cfg zoo.cfg
启动zk
sh /usr/local/zookeeper/bin/zkServer.sh start
启动成功如下:
3、安装nginx
api.你的域名.com(前端用户接口服务)
admin.你的域名.com(后台管理,放静态html文件的)
duty.你的域名.com(老年版岗亭,放静态html文件的)
duty2.你的域名.com(高级复杂版岗亭,放静态html文件的)
设置转发和负载均衡策略 在api域名网站的配置文件添加如下内容
location /ip {
default_type application/json;
return 200 "{\"data\":\"$remote_addr\"}";
}
location / {
try_files $uri $uri/ @router;
index index.html;
error_page 404 /index.html;
}
location @router {
rewrite ^.*$ /index.html last;
}
location ~ /(auth|friends|ucenter|appVersion|staff)/.*$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-For $http_x_forwarded_for;
proxy_pass http://ucenter;
}
location ~ /(file)/.*$ {
proxy_pass http://file;
}
location ~ /(carpark|carparkcar|carparklog|carparkorder|carparkcartype|carparkpackage|carparkCheckpoint|carparkChargingRules)/.*$ {
proxy_pass http://carpark;
}
location ~ /(sms)/.*$ {
proxy_pass http://sms;
}
location ~ /(coupon|pay|payNotify|staffCouponSetting|couponActivity|account)/.*$ {
proxy_pass http://pay;
}
location ~ /(areas)/.*$ {
proxy_pass http://areas;
}
location ~ /(ad|adlinks)/.*$ {
proxy_pass http://ad;
}
location ~ /(authAdmin|friendsAdmin|departmentAdmin|roleAdmin|ucenterAdmin|weixinConfigAdmin)/.*$ {
proxy_pass http://userAdmin;
}
location ~ /(carparkAdmin|carparkDeviceAdmin|carparkCheckPointDeviceAdmin|carparkcartypeAdmin|carparkUseLogAdmin|carparkpackageAdmin|carParkReleaseLogAdmin|carparkOrderAdmin|carparkLinkUserAdmin|cfCarParkPaymentAgencyAdmin|carparkLoginAdmin|carParkCarLimitAdmin|carparkcarAdmin|carParkSpecialCarAdmin|carparkpackageLogAdmin)/.*$ {
proxy_pass http://carparkAdmin;
}
location ~ /(orderAdmin|paymentAgencyAdmin|payCouponAdmin|userPaymentAgencyAdmin|couponActivityAdmin|accountAdmin|dailyIncomeStatistics)/.*$ {
proxy_pass http://payMentAdmin;
}
location ~ /(adAdmin|adlinksAdmin)/.*$ {
proxy_pass http://adAdmin;
}
location ~ /(chargingStationAdmin|chargingStationDeviceAdmin|cfChargingStationLinkUserAdmin|chargingPortAdmin|chargingRulesAdmin|chargingUseLogAdmin)/.*$ {
proxy_pass http://chargingAdmin;
}
location ~ /(chargingStation|chargingStationDevice|cfChargingStationLinkUser|chargingPort|chargingRules|chargingUseLog)/.*$ {
proxy_pass http://charging;
}`
api网站配置文件最后再继续添加如下内容(这里我只拿了两台服务器做负载均衡,分别是192.168.0.115,192.168.0.223这两台,你部署的时候根据你自己的实际情况来填写ip和设置可用服务器,没啥特殊情况强烈建议使用局域网ip)
upstream ucenter {
server 192.168.0.115:8080;
server 192.168.0.223:8080;
}
upstream file {
server 192.168.0.115:8088;
server 192.168.0.223:8088;
}
upstream carpark {
server 192.168.0.115:8089;
server 192.168.0.223:8089;
}
upstream sms {
server 192.168.0.115:8085;
server 192.168.0.223:8085;
}
upstream userAdmin {
server 192.168.0.115:8091;
server 192.168.0.223:8091;
}
upstream carparkAdmin {
server 192.168.0.115:8092;
server 192.168.0.223:8092;
}
upstream pay {
server 192.168.0.115:8096;
server 192.168.0.223:8096;
}
upstream payMentAdmin {
server 192.168.0.115:8097;
server 192.168.0.223:8097;
}
upstream pack {
server 192.168.0.115:8079;
server 192.168.0.223:8079;
}
upstream areas {
server 192.168.0.115:8094;
server 192.168.0.223:8094;
}
upstream ad {
server 192.168.0.115:8099;
server 192.168.0.223:8099;
}
upstream adAdmin {
server 192.168.0.115:8100;
server 192.168.0.223:8100;
}
upstream chargingAdmin {
server 192.168.0.115:8102;
server 192.168.0.223:8102;
}
upstream charging {
server 192.168.0.115:8103;
server 192.168.0.223:8103;
}
4、fastDFS安装部署
cd ~
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz -O libfastcommonV1.0.7.tar.gz
wget http://jaist.dl.sourceforge.net/project/fastdfs/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz -O FastDFS.tar.gz
wget http://mirrors.sohu.com/nginx/nginx-1.8.0.tar.gz
yum install -y gcc gcc-c++
yum -y install libevent
下面我们开始部署
tar -zxvf libfastcommonV1.0.7.tar.gz -C /usr/local/
cd /usr/local/libfastcommon-1.0.7/
./make.sh && ./make.sh install
cp /usr/lib64/libfastcommon.so /usr/lib/
5、安装tracker
cd ~
tar -zxvf FastDFS.tar.gz -C /usr/local/
mv /usr/local/fastdfs-5.05 /usr/local/FastDFS
cd /usr/local/FastDFS/
./make.sh && ./make.sh install
/bin/cp -rf /usr/local/FastDFS/conf/* /etc/fdfs/
cd /etc/fdfs/
cp tracker.conf.sample tracker.conf
sed -i 's/base_path=\/home\/yuqing\/fastdfs/base_path=\/home\/fastdfs/g' tracker.conf
sed -i 's/http.server_port=8080/http.server_port=80/g' tracker.conf
mkdir -p /home/fastdfs
启动tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
配置和启动storage
cd /etc/fdfs/
【*小心】:下面部分”这里填你的ip”一定要换填为当前服务器公网ip
sed -i 's/192.168.209.121:22122/这里填你的ip:22122/g' storage.conf
sed -i 's/8888/88/g' storage.conf
sed -i 's/store_path0=\/home\/yuqing\/fastdfs/store_path0=\/home\/fdfs_storage /g' storage.conf
sed -i 's/base_path=\/home\/yuqing\/fastdfs/base_path=\/home\/fastdfs/g' storage.conf
mkdir -p /home/fdfs_storage
通过防火墙开启相关端口
firewall-cmd --zone=public --add-port=22122/tcp --permanent
firewall-cmd --zone=public --add-port=88/tcp --permanent
firewall-cmd --zone=public --add-port=23000/tcp --permanent
firewall-cmd --reload
启动storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
配置fastdfs-nginx-module
cd ~
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz -C /usr/local
cd /usr/local/fastdfs-nginx-module/src/
sed -i 's/\/usr\/local/\/usr/g' config
cp mod_fastdfs.conf /etc/fdfs/
sed -i 's/base_path=\/tmp/base_path=\/home\/fastdfs/g' /etc/fdfs/mod_fastdfs.conf
sed -i 's/url_have_group_name = false/url_have_group_name = true/g' /etc/fdfs/mod_fastdfs.conf
sed -i 's/tracker_server=tracker:22122/tracker_server=你自己的ip:22122/g' /etc/fdfs/mod_fastdfs.conf
sed -i 's/store_path0=\/home\/yuqing\/fastdfs/store_path0=\/home\/fdfs_storage/g' /etc/fdfs/mod_fastdfs.conf
cp /usr/lib64/libfdfsclient.so /usr/lib/
mkdir -p /var/temp/nginx/client
安装nginx
启动nginx
/usr/local/nginx/sbin/nginx
6、nginx + fastdfs 的开机自启动
虚拟机每次启动之后都要重新启动一下fastdfs 和 nginx服务,比较麻烦,所以增加开机自启动;
编辑 /etc/rc.d/rc.local
文件,增加启动项;
6-1、编辑文件
`vim /etc/rc.d/rc.local`
6-2、增加如下:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
/usr/local/nginx/sbin/nginx
6-3、在centos7中, /etc/rc.d/rc.local
文件的权限被降低了,需要给rc.local
文件增加可执行的权限;
`chmod +x /etc/rc.d/rc.local`
7、运行服务
如果你已成功在线自动打包,将安装包发到(下载到)你服务器的某个目录
下面的xxxx表示你自己的安装包名称
unzip XXXX.zip
mkdir -p /www/java/jar
mv XXXX/* /www/java/jar/
mkdir -p /www/java/log
cd /www/java
wget http://203.195.208.183/base-service.sh
启动基础服务脚本(重启服务器后启动zookeeper,fastDFS,nginx)
wget http://203.195.208.183/start.sh
启动(重启)服务脚本
wget http://203.195.208.183/stop.sh
停止服务脚本
sh start.sh
启动(重启)服务,如果你哪天想关闭服务,直接执行sh stop.sh
就行了,要注意的是这两个命令都要在/www/java目录下执行
开放端口
firewall-cmd --zone=public --add-port=8080-8100/tcp --permanent
firewall-cmd --reload
如果你的服务器设置的有安全组,记得去安全组把这些端口也要开放(8080-8100的tcp)
查看服务是否已经启动成功
netstat -lnpt|grep 808*
【用户基础数据相关】:http://你的服务器ip:8080/swagger-ui.html
【停车场相关】:http://你的服务器ip:8089/swagger-ui.html
【短信】:http://你的服务器ip:8085/swagger-ui.html
【文件上传】:http://你的服务器ip:8088/swagger-ui.html
【支付相关】:http://你的服务器ip:8096/swagger-ui.html
慎用命令
如果你发现你服务起不来,但是内存占用还很高,那试试下面的命令(注意!如果你服务器还有其它Java服务慎用此命令,乖乖重启,再启动这个服务,因为我们不知道你其它java程序的运行机制)
ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs kill -9
再使用我们启动基础服务器脚本
sh /www/java/base-service.sh
8-1、windows系统下jar打包
打包完成之后,把jar包复制好,上传到你服务器上去
8-2、在linux上,直接执行我们的一键打包脚本
这些脚本都在源代码文件里面,自行上传即可
jar包上传到服务
mkdir -p /www/java/log
mkdir -p /www/java/logs
把你jar包上传到/www/java目录下
解压压缩包,
unzip jar.zip
给目录权限
chmod 755 /www/java/*.sh
现在我们启动服务
sh start.sh
大概等1-2分钟后,使用指令查看服务是否有启动起来
netstat -lnpt|grep 808*
正常启动效果如下
动态分布式
微服务: 微服务治理框架我们采用了阿里巴巴的Dubbo框架,是目前市场上性能当之无愧的扛把子,每个功能都是一个独立的服务,让我们的应用高可用,提高容灾性,理论上只要你舍得出钱部署服务器,几百万用户真实流量是完全不成问题的。该框架支持灰度发布,让我们的服务更新迭代永不停机
海量数据优化: 数据库主从模式,微服务框架让主从更方便,数据读写分离,再也不担心高峰期和推广而来的海量并发了
停车场列表
绑定收款账号
停车场收费规则设置
绑定通道(进出口)
是要是控制允许保安直接点击岗亭端的视频口下面的开关闸按钮进行开关闸,选“是”开关闸按钮会显示出来,如下图
进出口(通道)硬件绑定
led文字内容和语音播报
点击停车场列表硬件—-》点击led显示编辑
非专业人员,不要随意动,一定是要在自己公司拥有源代码,并且具有开发能力的前提下进行修改,因为里面的内容受到java代码控制和替换等!
特殊替换,例如已经固定的模板内容,java代码会做部分替换:
永远固定不会变的内容:
停车记录
记录了车辆的车牌号,所属单位或者业主楼栋,停车场,进出场时间,进出场通道,值班人员,停车时长,免停时间(赠送停车时间),应收,实收,车辆品牌,车牌颜色,车位编号,进出场大小图等信息
停车和人员绑定
绑定之后,对应的用户可以看到自己绑定的停车场数据,收入,财务报表等。
一般可绑定的人员为:保安,物业人员管理员,物业工作人员等
车类定制(车辆限制)
停车场设置的收费模式,免停时间,进出限制等都是统一通用的,但是当某些车辆类型或者甚至某辆车需要单独“私有化”设置和限制时,这时候就需要创建特定一类的车辆定制,凡是绑定了该车类的车牌号都有该类车的属性。