开源项目学习之(一)------zheng环境搭建

一、项目简介


17年初就接触了zheng这个项目,感觉挺牛的,看他的架构图就知道了


现在都已经18年了,时间好快,特此记录下zheng的环境搭建,虽然,先看下码云上zheng的简介吧:https://gitee.com/shuzheng/zheng

zheng是基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构,提供整套公共微服务服务模块:集中权限管理(单点登录)、内容管理、支付中心、用户管理(支持第三方登录)、微信平台、存储系统、配置中心、日志分析、任务和通知等,支持服务治理、监控和追踪,努力为中小型企业打造全方位J2EE企业级开发解决方案。


二、导入项目


导入项目的方式有两种,一种是通过git,一种是直接下载源码然后导入到IDEA中,我这里以下载源码来演示,下载之后的源码如下:


有如下一些模块:


zheng-common--公共配置、MybatisGenerator扩展插件、通用BaseService、工具类等
zheng-admin--通用后台管理系统,zheng项目所有后台系统都是使用该模块界面作为前端展示。
zheng-ui--各个子系统前台thymeleaf模板,前端资源模块,使用nginx代理,实现动静分离。
zheng-upms--基于RBAC授权和基于用户授权的细粒度权限控制通用平台,并提供单点登录、会话管理和日志管理。
zheng-cms--内容管理系统
zheng-oss--文件存储系统
zheng-ucenter--通用用户管理系统, 实现最常用的用户注册、登录、资料管理、个人中心、第三方登录等基本需求,支持扩展二次开发。
zheng-wechat-mp--微信公众号管理平台,除实现官网后台自动回复、菜单管理、素材管理、用户管理、消息群发等基础功能外,还有二维码推广、营销活动、微网站、会员卡、优惠券等。
zheng-wechat-app--微信小程序后台
zheng-pay--一站式支付解决方案,统一下单接口,支持支付宝、微信、网银等多种支付方式。不涉及业务的纯粹的支付平台。
zheng-api--服务网关,对外暴露统一规范的接口和包装响应结果,包括各个子系统的交互接口、对外开放接口、开发加密接口、接口文档等服务,可在该模块支持验签、鉴权、路由、限流、监控、容错、日志等功能。


然后打开IDEA---->File---->New---->Module from Existing Sources导入一个存在的Module





然后点击Finsh.导入成功之后,如下:


找到每个项目的跟pom.xml更新下依赖:


然后下载zheng-common中的依赖


三、环境搭建


要想成功运行项目,必须要安装一下一些工具:

1、JDK
2、Mysql
3、maven
4、Redis
5、Zookeeper
6、ActiveMQ
7、Nginx


4、Redis安装


至于JDK,Mysql,maven,的安装太简单了,这里就不演示了,Redis安装如下,去github下载最新的安装包:https://github.com/MSOpenTech/redis/releases


下载Redis-x64-3.2.100-windows.msi安装过程比较简单,一路next就可以了。然后还得安装Redis可视化工具Redis Desktop Manager下载地址如下:https://redisdesktop.com/download



选择最新的版本进行下载、下载之后,然后进行安装





安装之后,打开软件



这里要登录密码,由于我装的是安装版,以下是设置密码,在CMD下:

[java]  view plain  copy
  1. config get requirepass //获取当前密码  
  2. config set requirepass "root"//设置当前密码,服务重新启动后又会置为默认,即无密码;不建议此种方式  


5、Zookeeper安装


首先去官网下载:http://www.apache.org/dyn/closer.cgi/zookeeper/




选择3.5.2版本。


6、ActiveMQ


官网下载地址为:http://activemq.apache.org/download-archives.html 选择最新版本进行下载


这里选择5.9.0版本进行下载。


7、Nginx


官网下载地址为:http://nginx.org/



四、运行项目


A.后台启动顺序:


(一)、初始化数据库


下面就是启动项目了,在启动项目前还得准备下,首先新建zheng数据库


导入project-datamodel文件夹下的zheng.sql


工具使用的是navicat for premium


导入成功之后,有如下表


(二)、数据库连接配置工作


修改各模块下profiles的数据库连接等配置信息


有如下一些module下有这些配置文件

如下这种密码使用了AES加密,使用com.zheng.common.util.AESUtil工具类修改这些值


在zheng-upms中有个generator.properties


AESUtil使用如下,替换其中的root为数据库密码,然后运行就会有以下信息输出:



比如我这里redis和mysql都是root,所有我把密码修改成如下的密码:



(三)、修改本地Host


进入到"C:\Windows\System32\drivers\etc"目录下:



[java]  view plain  copy
  1. 127.0.0.1 ui.zhangshuzheng.cn  
  2. 127.0.0.1 upms.zhangshuzheng.cn  
  3. 127.0.0.1 cms.zhangshuzheng.cn  
  4. 127.0.0.1 pay.zhangshuzheng.cn  
  5. 127.0.0.1 ucenter.zhangshuzheng.cn  
  6. 127.0.0.1 wechat.zhangshuzheng.cn  
  7. 127.0.0.1 api.zhangshuzheng.cn  
  8. 127.0.0.1 oss.zhangshuzheng.cn  
  9. 127.0.0.1 config.zhangshuzheng.cn  
  10. 127.0.0.1 zkserver  
  11. 127.0.0.1 rdserver  
  12. 127.0.0.1 dbserver  
  13. 127.0.0.1 mqserver  

(四)、启动并运行相关程序工作


我把有关的工具都解压到该目录下了:



1.启动Zookeeper


进入到zookeeper的bin目录,双击zkServer.cmd启动服务。


启动成功之后,输入信息如下:



2、启动ActiveMQ:


1)进入MQ的bin目录D:\zheng_start\apache-activemq-5.9.0-bin\apache-activemq-5.9.0\bin\win64,双击activemq.bat


启动成功之后



2)在浏览器中输入http://localhost:8161/admin/输入默认的admin admin

3)出现这样的界面则MQ安装成功。


3、启动Nginx


在zheng/project-tools/nginx下提供了ngxin的一些配置


将这两个文件复制到nginx/conf下


修改其中的项目路径:




或者可以直接修改nginx.conf为如下内容:

[html]  view plain  copy
  1. #user  nobody;  
  2. worker_processes  1;  
  3.   
  4. #error_log  logs/error.log;  
  5. #error_log  logs/error.log  notice;  
  6. #error_log  logs/error.log  info;  
  7.   
  8. #pid        logs/nginx.pid;  
  9.   
  10.   
  11. events {  
  12.     worker_connections  1024;  
  13. }  
  14.   
  15.   
  16. http {  
  17.     include       mime.types;  
  18.     default_type  application/octet-stream;  
  19.   
  20.     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  
  21.     #                  '$status $body_bytes_sent "$http_referer" '  
  22.     #                  '"$http_user_agent" "$http_x_forwarded_for"';  
  23.   
  24.     #access_log  logs/access.log  main;  
  25.   
  26.     sendfile        on;  
  27.     #tcp_nopush     on;  
  28.   
  29.     #keepalive_timeout  0;  
  30.     keepalive_timeout  65;  
  31.   
  32.     #gzip  on;  
  33.   
  34.     server {  
  35.         #监听的端口号,配置这里访问的时候浏览器里可以访问http://localhost:1000/zheng-cms-web/测试是否能看到页面内容(没有直接访问http://localhost:1000,因为这个路径zheng-ui下没有index.html之类的文件,会出现访问错误提示,不好作为判定是否nginx启动配置成功的标志)  
  36.         listen       1000;  
  37.         server_name  localhost;  
  38.   
  39.         #charset koi8-r;  
  40.   
  41.         #access_log  logs/host.access.log  main;  
  42.   
  43.         location / {  
  44.         #root后面内容需要修改为本机的zheng-ui项目的绝对路径位置  
  45.             root   F:/GitHub/zheng/zheng-ui/;  
  46.             index  index.html index.htm;  
  47.             add_header Access-Control-Allow-Origin *;  
  48.         }  
  49.   
  50.         #error_page  404              /404.html;  
  51.   
  52.         # redirect server error pages to the static page /50x.html  
  53.         #  
  54.         error_page   500 502 503 504  /50x.html;  
  55.         location = /50x.html {  
  56.             root   html;  
  57.         }  
  58.   
  59.         # proxy the PHP scripts to Apache listening on 127.0.0.1:80  
  60.         #  
  61.         #location ~ \.php$ {  
  62.         #    proxy_pass   http://127.0.0.1;  
  63.         #}  
  64.   
  65.         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000  
  66.         #  
  67.         #location ~ \.php$ {  
  68.         #    root           html;  
  69.         #    fastcgi_pass   127.0.0.1:9000;  
  70.         #    fastcgi_index  index.php;  
  71.         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;  
  72.         #    include        fastcgi_params;  
  73.         #}  
  74.   
  75.         # deny access to .htaccess files, if Apache's document root  
  76.         # concurs with nginx's one  
  77.         #  
  78.         #location ~ /\.ht {  
  79.         #    deny  all;  
  80.         #}  
  81.     }  
  82.   
  83.   
  84.     # another virtual host using mix of IP-, name-, and port-based configuration  
  85.     #  
  86.     #server {  
  87.     #    listen       8000;  
  88.     #    listen       somename:8080;  
  89.     #    server_name  somename  alias  another.alias;  
  90.   
  91.     #    location / {  
  92.     #        root   html;  
  93.     #        index  index.html index.htm;  
  94.     #    }  
  95.     #}  
  96.   
  97.   
  98.     # HTTPS server  
  99.     #  
  100.     #server {  
  101.     #    listen       443 ssl;  
  102.     #    server_name  localhost;  
  103.   
  104.     #    ssl_certificate      cert.pem;  
  105.     #    ssl_certificate_key  cert.key;  
  106.   
  107.     #    ssl_session_cache    shared:SSL:1m;  
  108.     #    ssl_session_timeout  5m;  
  109.   
  110.     #    ssl_ciphers  HIGH:!aNULL:!MD5;  
  111.     #    ssl_prefer_server_ciphers  on;  
  112.   
  113.     #    location / {  
  114.     #        root   html;  
  115.     #        index  index.html index.htm;  
  116.     #    }  
  117.     #}  
  118.   
  119. }  

然后在CMD下执行nginx.exe


或者可以在该目录下新建一个nginx.bat文件内容如下:

[html]  view plain  copy
  1. @echo off  
  2. rem zheng-tools  
  3. rem author: shuzheng http://www.zhangshuzheng.cn  
  4. rem GitHub: https://github.com/shuzheng  
  5. rem OsChina: http://git.oschina.net/shuzheng/zheng  
  6.   
  7. echo ==================begin========================  
  8.   
  9. cls   
  10. SET NGINX_PATH=D:  
  11. SET NGINX_DIR=D:\自己的nginx安装路径\nginx-1.11.4\   
  12. color 0a   
  13. TITLE zheng-tools Power By shuzheng (http://www.zhangshuzheng.cn)  
  14.   
  15. CLS   
  16.   
  17. ECHO.   
  18. ECHO.    ********************************************************************  
  19. ECHO.    *                                                                  *  
  20. ECHO.    *                                                                  *  
  21. ECHO.    *   zheng-tools Power By shuzheng (http://www.zhangshuzheng.cn)    *  
  22. ECHO.    *                                                                  *  
  23. ECHO.    *                                                                  *  
  24. ECHO.    ********************************************************************  
  25. ECHO.   
  26.   
  27. :MENU   
  28.   
  29. ECHO.---------------------------- nginx 进程列表 --------------------------------  
  30. tasklist|findstr /i "nginx.exe"  
  31. if ERRORLEVEL 1 (echo nginx未启动) else (echo nginx已启动)  
  32. ECHO.----------------------------------------------------------------------------  
  33.   
  34.   
  35. ECHO.   
  36.     ECHO.  [1] 启动Nginx    
  37.     ECHO.  [2] 关闭Nginx    
  38.     ECHO.  [3] 重启Nginx    
  39.     ECHO.  [4] 退 出   
  40. ECHO.   
  41.   
  42. ECHO.请输入选择项目的序号:  
  43. set /p ID=  
  44.     IF "%id%"=="1" GOTO start   
  45.     IF "%id%"=="2" GOTO stop   
  46.     IF "%id%"=="3" GOTO restart   
  47.     IF "%id%"=="4" EXIT  
  48. PAUSE   
  49.   
  50. :start   
  51.     call :startNginx  
  52.     ECHO.============================================================================  
  53.     ECHO.   
  54.     ECHO.   
  55.     GOTO MENU  
  56.   
  57. :stop   
  58.     call :shutdownNginx  
  59.     ECHO.============================================================================  
  60.     ECHO.   
  61.     ECHO.   
  62.     GOTO MENU  
  63. :restart   
  64.     call :shutdownNginx  
  65.     call :startNginx  
  66.     ECHO.============================================================================  
  67.     ECHO.   
  68.     ECHO.   
  69.     GOTO MENU  
  70.   
  71. :shutdownNginx  
  72.     ECHO.   
  73.     ECHO.关闭Nginx......   
  74.     taskkill /F /IM nginx.exe > nul  
  75.     ECHO.OK,关闭所有nginx 进程  
  76.     goto :eof  
  77.   
  78. :startNginx  
  79.     ECHO.   
  80.     ECHO.启动Nginx......   
  81.     IF NOT EXIST "%NGINX_DIR%nginx.exe" ECHO "%NGINX_DIR%nginx.exe"不存在   
  82.   
  83.     %NGINX_PATH%   
  84.   
  85.     cd "%NGINX_DIR%"   
  86.   
  87.     IF EXIST "%NGINX_DIR%nginx.exe" (  
  88.         echo "start '' nginx.exe"  
  89.         start "" nginx.exe  
  90.     )  
  91.     ECHO.OK  
  92.     goto :eof  

运行效果如下:



4、启动Tomcat


在tomcat中部署dubbo应用。这里用的是2.5.4,可从这下载:http://download.csdn.net/download/u011781521/10197867 下载之后解压,删除Tomcat目录下的ROOT目录,然后复制dubbo中的ROOT到该目录下:




然后修改下tomcat的默认端口以防止和下面的jetty冲突,最后在D:\zheng_start\apache-tomcat-8.0.45\bin目录下执行startup.bat启动tomcat,成功之后输出如下:




访问tomcat的dubbo后台: localhost:8089 用户名与密码都是root




5、启动Service


首先启动 zheng-upms-rpc-service(直接运行src目录下的ZhengUpmsRpcServiceApplication#main方法启动)


启动成功之后如下:



6、启动Web服务


打开Maven视图



debug运行jetty。然后按需启动对应子系统xxx的zheng-xxx-rpc-service(main方法) => zheng-xxx-webapp(jetty)

然后在dubbo管控台上就会有一些服务已经注册了




7、访问页面


然后访问 http://upms.zhangshuzheng.cn:1111/,子系统菜单已经配置到zheng-upms权限中,不用直接访问子系统,默认帐号密码:admin/123456




B、zheng-cms启动


zheng-cms-admin:启动ActiveMQ-启动 => 启动zheng-rpc-service => 启动zheng-cms-admin






zheng-cms-web:启动nginx代理zheng-ui静态资源,然后访问: http://upms.zhangshuzheng.cn:1111




切换到CMS系统




此时访问CMS首页: http://cms.zhangshuzheng.cn:2224/

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
单点登录, SSM框架公共模块 ├── zheng-admin -- 后台管理模板 ├── zheng-ui -- 前台thymeleaf模板[端口:1000] ├── zheng-config -- 配置中心[端口:1001] ├── zheng-upms -- 用户权限管理系统 | ├── zheng-upms-common -- upms系统公共模块 | ├── zheng-upms-dao -- 代码生成模块,无需开发 | ├── zheng-upms-client -- 集成upms依赖包,提供单点认证、授权、统一会话管理 | ├── zheng-upms-rpc-api -- rpc接口包 | ├── zheng-upms-rpc-service -- rpc服务提供者 | └── zheng-upms-server -- 用户权限系统及SSO服务端[端口:1111] ├── zheng-cms -- 内容管理系统 | ├── zheng-cms-common -- cms系统公共模块 | ├── zheng-cms-dao -- 代码生成模块,无需开发 | ├── zheng-cms-rpc-api -- rpc接口包 | ├── zheng-cms-rpc-service -- rpc服务提供者 | ├── zheng-cms-search -- 搜索服务[端口:2221] | ├── zheng-cms-admin -- 后台管理[端口:2222] | ├── zheng-cms-job -- 消息队列、任务调度等[端口:2223] | └── zheng-cms-web -- 网站前台[端口:2224] ├── zheng-pay -- 支付系统 | ├── zheng-pay-common -- pay系统公共模块 | ├── zheng-pay-dao -- 代码生成模块,无需开发 | ├── zheng-pay-rpc-api -- rpc接口包 | ├── zheng-pay-rpc-service -- rpc服务提供者 | ├── zheng-pay-sdk -- 开发工具包 | ├── zheng-pay-admin -- 后台管理[端口:3331] | └── zheng-pay-web -- 演示示例[端口:3332] ├── zheng-ucenter -- 用户系统(包括第三方登录) | ├── zheng-ucenter-common -- ucenter系统公共模块 | ├── zheng-ucenter-dao -- 代码生成模块,无需开发 | ├── zheng-ucenter-rpc-api -- rpc接口包 | ├── zheng-ucenter-rpc-service -- rpc服务提供者 | └── zheng-ucenter-web -- 网站前台[端口:4441] ├── zheng-wechat -- 微信系统 | ├── zheng-wechat-mp -- 微信公众号管理系统 | | ├── zheng-wechat-mp-dao -- 代码生成模块,无需开发 | | ├── zheng-wechat-mp-service -- 业务逻辑 | | └── zheng-wechat-mp-admin -- 后台管理[端口:5551] | └── zheng-ucenter-app -- 微信小程序后台 ├── zheng-api -- API接口总线系统 | ├── zheng-api-common -- api系统公共模块 | ├── zheng-api-rpc-api -- rpc接口包 | ├── zheng-api-rpc-service -- rpc服务提供者 | └── zheng-api-server -- api系统服务端[端口:6666] ├── zheng-oss -- 对象存储系统 | ├── zheng-oss-sdk -- 开发工具包 | ├── zheng-oss-web -- 前台接口[端口:7771] | └── zheng-oss-admin -- 后台管理[端口:7772] ├── zheng-shop -- 电子商务系统 ├── zheng-im -- 即时通讯系统 ├── zheng-oa -- 办公自动化系统 ├── zheng-eoms -- 运维系统 └── zheng-demo -- 示例模块(包含一些示例代码等) ├── zheng-demo-rpc-api -- rpc接口包 ├── zheng-demo-rpc-service -- rpc服务提供者 └── zheng-demo-web -- 演示示例[端口:8888] ``` ### 技术选型 #### 后端技术: 技术 | 名称 | 官网 ----|------|---- Spring Framework | 容器 | [http://projects.spring.io/spring-framework/](http://projects.spring.io/spring-framework/) SpringMVC | MVC框架 | [http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc](http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc) Apache Shiro | 安全框架 | [http://shiro.apache.org/](http://shiro.apache.org/) Spring session | 分布式Session管理 | [http://projects.spring.io/spring-session/](http://projects.spring.io/spring-session/) MyBatis | ORM框架 | [http://www.mybatis.org/mybatis-3/zh/index.html](http://www.mybatis.org/mybatis-3/zh/index.html) MyBatis Generator | 代码生成 | [http://www.mybatis.org/generator/index.html](http://www.mybatis.org/generator/index.html) PageHelper | MyBatis物理分页插件 | [http://git.oschina.net/free/Mybatis_PageHelper](http://git.oschina.net/free/Mybatis_PageHelper) Druid | 数据库连接池 | [https://github.com/alibaba/druid](https://github.com/alibaba/druid) FluentValidator | 校验框架 | [https://github.com/neoremind/fluent-validator](https://github.com/neoremind/fluent-validator) Thymeleaf | 模板引擎 | [http://www.thymeleaf.org/](http://www.thymeleaf.org/) Velocity | 模板引擎 | [http://velocity.apache.org/](http://velocity.apache.org/) ZooKeeper | 分布式协调服务 | [http://zookeeper.apache.org/](http://zookeeper.apache.org/) Dubbo | 分布式服务框架 | [http://dubbo.io/](http://dubbo.io/) TBSchedule & elastic-job | 分布式调度框架 | [https://github.com/dangdangdotcom/elastic-job](https://github.com/dangdangdotcom/elastic-job) Redis | 分布式缓存数据库 | [https://redis.io/](https://redis.io/) Solr & Elasticsearch | 分布式全文搜索引擎 | [http://lucene.apache.org/solr/](http://lucene.apache.org/solr/) [https://www.elastic.co/](https://www.elastic.co/) Quartz | 作业调度框架 | [http://www.quartz-scheduler.org/](http://www.quartz-scheduler.org/) Ehcache | 进程内缓存框架 | [http://www.ehcache.org/](http://www.ehcache.org/) ActiveMQ | 消息队列 | [http://activemq.apache.org/](http://activemq.apache.org/) JStorm | 实时流式计算框架 | [http://jstorm.io/](http://jstorm.io/) FastDFS | 分布式文件系统 | [https://github.com/happyfish100/fastdfs](https://github.com/happyfish100/fastdfs) Log4J | 日志组件 | [http://logging.apache.org/log4j/1.2/](http://logging.apache.org/log4j/1.2/) Swagger2 | 接口测试框架 | [http://swagger.io/](http://swagger.io/) sequence | 分布式高效ID生产 | [http://git.oschina.net/yu120/sequence](http://git.oschina.net/yu120/sequence) AliOSS & Qiniu & QcloudCOS | 云存储 | [https://www.aliyun.com/product/oss/](https://www.aliyun.com/product/oss/) [http://www.qiniu.com/](http://www.qiniu.com/) [https://www.qcloud.com/product/cos](https://www.qcloud.com/product/cos) Protobuf & json | 数据序列化 | [https://github.com/google/protobuf](https://github.com/google/protobuf) Jenkins | 持续集成工具 | [https://jenkins.io/index.html](https://jenkins.io/index.html) Maven | 项目构建管理 | [http://maven.apache.org/](http://maven.apache.org/) #### 前端技术: 技术 | 名称 | 官网 ----|------|---- jQuery | 函式库 | [http://jquery.com/](http://jquery.com/) Bootstrap | 前端框架 | [http://getbootstrap.com/](http://getbootstrap.com/) Bootstrap-table | Bootstrap数据表格 | [http://bootstrap-table.wenzhixin.net.cn/](http://bootstrap-table.wenzhixin.net.cn/) Font-awesome | 字体图标 | [http://fontawesome.io/](http://fontawesome.io/) material-design-iconic-font | 字体图标 | [https://github.com/zavoloklom/material-design-iconic-font](https://github.com/zavoloklom/material-design-iconic-font) Waves | 点击效果插件 | [https://github.com/fians/Waves](https://github.com/fians/Waves) zTree | 树插件 | [http://www.treejs.cn/v3/](http://www.treejs.cn/v3/) Select2 | 选择框插件 | [https://github.com/select2/select2](https://github.com/select2/select2) jquery-confirm | 弹出窗口插件 | [https://github.com/craftpip/jquery-confirm](https://github.com/craftpip/jquery-confirm) jQuery EasyUI | 基于jQuery的UI插件集合体 | [http://www.jeasyui.com](http://www.jeasyui.com) React | 界面构建框架 | [https://github.com/facebook/react](https://github.com/facebook/react) Editor.md | Markdown编辑器 | [https://github.com/pandao/editor.md](https://github.com/pandao/editor.md) zhengAdmin | 后台管理系统模板 | [https://github.com/shuzheng/zhengAdmin](https://github.com/shuzheng/zhengAdmin) autoMail | 邮箱地址自动补全插件 | [https://github.com/shuzheng/autoMail](https://github.com/shuzheng/autoMail) zheng.jprogress.js | 加载进度条插件 | [https://github.com/shuzheng/zheng.jprogress.js](https://github.com/shuzheng/zheng.jprogress.js) zheng.jtotop.js | 返回顶部插件 | [https://github.com/shuzheng/zheng.jtotop.js](https://github.com/shuzheng/zheng.jtotop.js) #### 架构图 ![架构图](project-bootstrap/architect.png) #### 模块依赖 ![模块依赖](project-bootstrap/project.png) #### 模块介绍 > zheng-common Spring+SpringMVC+Mybatis框架集成公共模块,包括公共配置、MybatisGenerator扩展插件、通用BaseService、工具类等。 > zheng-admin 基于bootstrap实现的响应式Material Design风格的通用后台管理系统,`zheng`项目所有后台系统都是使用该模块界面作为前端展示。 > zheng-ui 各个子系统前台thymeleaf模板,前端资源模块,使用nginx代理,实现动静分离。 > zheng-upms 本系统是基于RBAC授权和基于用户授权的细粒度权限控制通用平台,并提供单点登录、会话管理和日志管理。接入的系统可自由定义组织、角色、权限、资源等。用户权限=所拥有角色权限合集+用户加权限-用户减权限,优先级:用户减权限>用户加权限>角色权限 > zheng-oss 文件存储系统,提供四种方案: - **阿里云** OSS - **腾讯云** COS - **七牛云** - 本地分布式存储 ![阿里云OSS](project-bootstrap/aliyun-oss-post-callback.png) > zheng-api 服务网关,对外暴露统一规范的接口和包装响应结果,包括各个子系统的交互接口、对外开放接口、开发加密接口、接口文档等服务,可在该模块支持验签、鉴权、路由、限流、监控、容错、日志等功能。示例图: ![API网关](project-bootstrap/gateway_config.png) > zheng-cms 内容管理系统:支持多标签、多类目、强大评论的内容管理,有基本单页展示,菜单管理,系统设置等功能。 > zheng-pay - 一站式支付解决方案,统一下单接口,支持支付宝、微信、网银等多种支付方式。不涉及业务的纯粹的支付平台。 - 统一下单(统一下单接口、统一扫码)、订单管理、数据分析、财务报表、商户管理、渠道管理、对账系统、系统监控。 ![统一扫码支付](project-bootstrap/zheng-pay.png) > zheng-ucenter 通用用户管理系统, 实现最常用的用户注册、登录、资料管理、个人中心、第三方登录等基本需求,支持扩展二次开发。 > zheng-wechat-mp 微信公众号管理平台,除实现官网后台自动回复、菜单管理、素材管理、用户管理、消息群发等基础功能外,还有二维码推广、营销活动、微网站、会员卡、优惠券等。 > zheng-wechat-app 微信小程序后台 ## 环境搭建(QQ群内有“zheng环境搭建和系统部署文档.doc”) #### 开发工具: - MySql: 数据库 - jetty: 开发服务器 - Tomcat: 应用服务器 - SVN|Git: 版本管理 - Nginx: 反向代理服务器 - Varnish: HTTP加速器 - IntelliJ IDEA: 开发IDE - PowerDesigner: 建模工具 - Navicat for MySQL: 数据库客户端 #### 开发环境: - Jdk7+ - Mysql5.5+ - Redis - Zookeeper - ActiveMQ - Dubbo-admin - Dubbo-monitor ### 工具安装 环境搭建和系统部署文档(作者:小兵,QQ群共享提供下载) ### 资源下载 - JDK7 [http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html](http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html "JDK7") - Maven [http://maven.apache.org/download.cgi](http://maven.apache.org/download.cgi "Maven") - Redis [https://redis.io/download](https://redis.io/download "Redis") - ActiveMQ [http://activemq.apache.org/download-archives.html](http://activemq.apache.org/download-archives.html "ActiveMQ") - ZooKeeper [http://www.apache.org/dyn/closer.cgi/zookeeper/](http://www.apache.org/dyn/closer.cgi/zookeeper/ "ZooKeeper") - Dubbo [http://dubbo.io/Download-zh.htm](http://dubbo.io/Download-zh.htm "Dubbo") - Elastic Stack [https://www.elastic.co/downloads](https://www.elastic.co/downloads "Elastic Stack") - Nginx [http://nginx.org/en/download.html](http://nginx.org/en/download.html "Nginx") - Jenkins [http://updates.jenkins-ci.org/download/war/](http://updates.jenkins-ci.org/download/war/ "Jenkins") - dubbo-admin-2.5.3 [http://download.csdn.net/detail/shuzheng5201314/9733652](http://download.csdn.net/detail/shuzheng5201314/9733652 "dubbo-admin-2.5.3") - dubbo-admin-2.5.4-SNAPSHOT-jdk8 [http://download.csdn.net/detail/shuzheng5201314/9733657](http://download.csdn.net/detail/shuzheng5201314/9733657 "dubbo-admin-2.5.4-SNAPSHOT-jdk8") - 更多资源请加QQ群 ## 开发指南: - 1、本机安装Jdk7、Mysql、Redis、Zookeeper、ActiveMQ并**启动相关服务**,使用默认配置默认端口即可 - 2、克隆源代码到本地并打开,**推荐使用IntelliJ IDEA**,本地编译并安装到本地maven仓库 ### 修改本地Host - 127.0.0.1 ui.zhangshuzheng.cn - 127.0.0.1 upms.zhangshuzheng.cn - 127.0.0.1 cms.zhangshuzheng.cn - 127.0.0.1 pay.zhangshuzheng.cn - 127.0.0.1 ucenter.zhangshuzheng.cn - 127.0.0.1 wechat.zhangshuzheng.cn - 127.0.0.1 api.zhangshuzheng.cn - 127.0.0.1 oss.zhangshuzheng.cn - 127.0.0.1 config.zhangshuzheng.cn - 127.0.0.1 zkserver - 127.0.0.1 rdserver - 127.0.0.1 dbserver - 127.0.0.1 mqserver ### 编译流程 maven编译安装zheng/pom.xml文件即可 ### 启动顺序(后台) > 准备工作 - 新建zheng数据库,导入project-datamodel文件夹下的zheng.sql - 修改各dao模块和rpc-service模块的redis.properties、jdbc.properties、generator.properties数据库连接等配置信息,其中master.redis.password、master.jdbc.password、slave.jdbc.password、generator.jdbc.password密码值使用了AES加密,请使用com.zheng.common.util.AESUtil工具类修改这些值 - 启动Zookeeper、Redis、ActiveMQ、Nginx(配置文件参考project-tools/nginx下的*.conf文件) > **zheng-upms** - 首先启动 zheng-upms-rpc-service(直接运行src目录下的ZhengUpmsRpcServiceApplication#main方法启动) => zheng-upms-server(jetty),然后按需启动对应子系统xxx的zheng-xxx-rpc-service(main方法) => zheng-xxx-webapp(jetty) ![启动演示](project-bootstrap/start.png) - 访问 [http://upms.zhangshuzheng.cn:1111/](http://upms.zhangshuzheng.cn:1111/ "统一后台地址"),子系统菜单已经配置到zheng-upms权限中,不用直接访问子系统,默认帐号密码:admin/123456 - 登录成功后,可在右上角切换已注册系统访问 > **zheng-cms** - zheng-cms-admin:启动ActiveMQ-启动 => 启动zheng-rpc-service => 启动zheng-cms-admin - zheng-cms-web:启动nginx代理zheng-ui静态资源,配置文件可参考 [nginx.conf](http://git.oschina.net/shuzheng/zheng/attach_files) > **zheng-oss** - 首先启动zheng-oss-web服务 - 开发阶段,如果zheng-oss-web没有公网域名,推荐使用`ngrok`内网穿透工具,为开发环境提供公网域名,实现上传回调 - 启动nginx代理zheng-ui静态资源 ### 开发演示(QQ群内有“zheng十分钟视频:从检出到启动.wmv”) - 创建数据表(建议使用PowerDesigner) - 直接运行对应项目dao模块中的generator.main(),可自动生成单表的CRUD功能和对应的model、example、mapper、service代码 - 生成的model和example均已实现Serializable接口,支持分布式 - 已包含抽象类BaseServiceImpl,只需要继承抽象类并传入泛型参数,即可默认实现mapper接口所有方法,特殊需求直接扩展即可 - BaseServiceImpl默认已实现四种根据条件分页接口 - selectByExampleWithBLOBsForStartPage() - selectByExampleForStartPage() - selectByExampleWithBLOBsForOffsetPage() - selectByExampleForOffsetPage() - BaseServiceImpl方法根据读写操作自动切换主从数据源,继承的扩展接口,可手动通过`DynamicDataSource.setDataSource(DataSourceEnum.XXX.getName())`指定数据源 - 启动流程:优先rcp-service服务提供者,再启动其他webapp - 扩展流程:可扩展和拆分rpc-api和rpc-service模块,可按微服务拆分或场景拆分 ### 部署方式(QQ群内有“zheng十分钟视频:从打包到linux服务器部署.wmv”) - war包项目:使用tomcat等web容器启动 - rpc-service服务提供者jar包:将打包后的zheng-xxx-rpc-service-assembly.tar.gz文件解压,使用bin目录的管理脚本运行即可,支持优雅停机。 ### 框架规范约定 约定优于配置(convention over configuration),此框架约定了很多编程规范,下面一一列举: ``` - service类,需要在叫名`service`的包下,并以`Service`结尾,如`CmsArticleServiceImpl` - controller类,需要在以`controller`结尾的包下,类名以Controller结尾,如`CmsArticleController.java`,并继承`BaseController` - spring task类,需要在叫名`task`的包下,并以`Task`结尾,如`TestTask.java` - mapper.xml,需要在名叫`mapper`的包下,并以`Mapper.xml`结尾,如`CmsArticleMapper.xml` - mapper接口,需要在名叫`mapper`的包下,并以`Mapper`结尾,如`CmsArticleMapper.java` - model实体类,需要在名叫`model`的包下,命名规则为数据表转驼峰规则,如`CmsArticle.java` - spring配置文件,命名规则为`applicationContext-*.xml` - 类名:首字母大写驼峰规则;方法名:首字母小写驼峰规则;常量:全大写;变量:首字母小写驼峰规则,尽量非缩写 - springmvc配置加到对应模块的`springMVC-servlet.xml`文件里 - 配置文件放到`src/main/resources`目录下 - 静态资源文件放到`src/main/webapp/resources`目录下 - jsp文件,需要在`/WEB-INF/jsp`目录下 - `RequestMapping`和返回物理试图路径的url尽量写全路径,如:`@RequestMapping("/manage")`、`return "/manage/index"` - `RequestMapping`指定method - 模块命名为`项目`-`子项目`-`业务`,如`zheng-cms-admin` - 数据表命名为:`子系统`_`表`,如`cms_article` - 更多规范,参考[[阿里巴巴Java开发手册] http://git.oschina.net/shuzheng/zheng/attach_files ``` ## 演示地址 演示地址: [http://upms.zhangshuzheng.cn/](http://47.93.195.63/zheng-upms-server/sso/login?backurl=http://47.93.195.63/zheng-upms-server/manage/index "演示地址") ### 预览图 ![idea](project-bootstrap/idea.png) ![login](project-bootstrap/zheng-login.png) ![upms](project-bootstrap/zheng-upms.png) ![cms](project-bootstrap/zheng-cms.png) ![swagger](project-bootstrap/api.png) ### 数据模型 ![数据库模型](project-datamodel/zheng.png) ### 拓扑图 ![拓扑图](project-bootstrap/distributedSystem.png) ### 开发进度 ![开发进度](project-bootstrap/progress.png) ### 参与开发 首先谢谢大家支持,如果你希望参与开发,欢迎通过[Github](https://github.com/shuzheng/zheng "Github")上fork本项目,并Pull Request您的commit。 ### 常见问题 - Eclipse下,dubbo找不到dubbo.xsd报错,不影响使用,如果要解决,可参考 [http://blog.csdn.net/gjldwz/article/details/50555922](http://blog.csdn.net/gjldwz/article/details/50555922) - 报zheng-xxx.jar包找不到,请按照文档编译顺序,将源代码编译并安装到本地maven仓库 - zheng-cms-admin启动卡住:因为没有启动activemq - zheng-upms-server访问报session不存在:因为没有启动redis服务 - 界面没有样式:因为zheng-admin没有编译安装到本地仓库 ## 附件 ### 优秀文章和博客 - [创业互联网公司如何搭建自己的技术框架](http://shuzheng5201314.iteye.com/blog/2330151 "创业互联网公司如何搭建自己的技术框架") - [微服务实战](https://segmentfault.com/a/1190000004634172 "微服务实战") - [单点登录原理与简单实现](http://shuzheng5201314.iteye.com/blog/2343910 "单点登录原理与简单实现") - [ITeye论坛关于权限控制的讨论](http://www.iteye.com/magazines/82 "ITeye论坛关于权限控制的讨论") - [RBAC新解:基于资源的权限管理(Resource-Based Access Control)](http://globeeip.iteye.com/blog/1236167 "RBAC新解:基于资源的权限管理(Resource-Based Access Control)") - [网站架构经验随笔](http://jinnianshilongnian.iteye.com/blog/2289904 "网站架构经验随笔") - [支付系统架构](http://shuzheng5201314.iteye.com/blog/2355431 "支付系统架构") - [Spring整合JMS](http://elim.iteye.com/blog/1893038 "Spring整合JMS") - [跟我学Shiro目录贴](http://jinnianshilongnian.iteye.com/blog/2018398 "跟我学Shiro目录贴") - [跟我学SpringMVC目录汇总贴](http://jinnianshilongnian.iteye.com/blog/1752171 "跟我学SpringMVC目录汇总贴") - [跟我学spring3 目录贴](http://jinnianshilongnian.iteye.com/blog/1482071 "跟我学spring3 目录贴") - [跟我学OpenResty(Nginx+Lua)开发目录贴](http://jinnianshilongnian.iteye.com/blog/2190344 "跟我学OpenResty(Nginx+Lua)开发目录贴") - [Redis中文网](http://www.redis.net.cn/ "Redis中文网") - [读懂Redis并配置主从集群及高可用部署](http://mp.weixin.qq.com/s?__biz=MzIxNTYzOTQ0Ng==&mid=2247483668&idx=1&sn=cd31574877d38cf7ff9c047b86c9bf23&chksm=979475eda0e3fcfb6b5006bcd19c5a838eca9e369252847dbdf97820bf418201dd75c1dadda3&mpshare=1&scene=23&srcid=0117KUiiITwi2ETRan16xRVg#rd "读懂Redis并配置主从集群及高可用部署") - [Redis哨兵-实现Redis高可用](http://redis.majunwei.com/topics/sentinel.html "Redis哨兵-实现Redis高可用") - [ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台](http://www.open-open.com/lib/view/open1451801542042.html "ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台") - [Nginx基本功能极速入门](http://xxgblog.com/2015/05/17/nginx-start/ "Nginx基本功能极速入门") - [mybatis-genarator 自定义插件](https://my.oschina.net/alexgaoyh/blog/702791 "mybatis-genarator 自定义插件") - [Elasticsearch权威指南(中文版)](https://es.xiaoleilu.com/510_Deployment/20_hardware.html "Elasticsearch权威指南(中文版)") - [springMVC对简单对象、Set、List、Map的数据绑定和常见问题.](http://blog.csdn.net/z_dendy/article/details/12648641 "springMVC对简单对象、Set、List、Map的数据绑定和常见问题.") - [如何细粒度地控制你的MyBatis二级缓存](http://blog.csdn.net/luanlouis/article/details/41800511 "如何细粒度地控制你的MyBatis二级缓存") - [做个男人,做个成熟的男人,做个有城府的男人](http://shuzheng5201314.iteye.com/blog/1387820 "做个男人,做个成熟的男人,做个有城府的男人") ### 在线小工具 - [在线Cron表达式生成器](http://cron.qqe2.com/ "在线Cron表达式生成器") - [在线工具 - 程序员的工具箱](http://tool.lu/ "在线工具 - 程序员的工具箱") ### 在线文档 - [JDK7英文文档](http://tool.oschina.net/apidocs/apidoc?api=jdk_7u4 "JDK7英文文档") - [Spring4.x文档](http://spring.oschina.mopaas.com/ "Spring4.x文档") - [Mybatis3官网](http://www.mybatis.org/mybatis-3/zh/index.html "Mybatis3官网") - [Dubbo官网](http://dubbo.io/ "Dubbo官网") - [Nginx中文文档](http://tool.oschina.net/apidocs/apidoc?api=nginx-zh "Nginx中文文档") - [Freemarker在线手册](http://freemarker.foofun.cn/ "Freemarker在线中文手册") - [Velocity在线手册](http://velocity.apache.org/engine/devel/developer-guide.html "Velocity在线手册") - [Bootstrap在线手册](http://www.bootcss.com/ "Bootstrap在线手册") - [Git官网中文文档](https://git-scm.com/book/zh/v2 "Git官网中文文档") - [Thymeleaf](http://www.thymeleaf.org/doc/tutorials/3.0/thymeleafspring.html "Thymeleaf") ## 许可证 [MIT](LICENSE "MIT")
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值