项目介绍

功能模块
  1. - 系统管理
  2. - 用户管理 提供用户的相关配置
  3. - 角色管理 对权限与菜单进行分配
  4. - 权限管理 权限细化到接口
  5. - 菜单管理 已实现菜单动态路由,后端可配置化,支持多级菜单
  6. - 部门管理与岗位管理
  7. - 字典管理 应广大码友的要求加入字典管理
  8. - 系统监控
  9. - 操作日志 使用apo记录用户操作日志
  10. - 异常日志 记录操作过程中的异常,并且提供查看异常的堆栈信息
  11. - 系统缓存 使用jedis将缓存操作可视化,并提供对redis的基本操作,可根据需求自行扩展
  12. - 实时控制台 实时打印logback日志,来自微强迫症患者的精心配色,更好的监控系统的运行状态
  13. - SQL监控 采用druid 监控数据库访问性能,默认用户名admin,密码123456
  14. - 系统工具
  15. - 定时任务 整合Quartz做定时任务,加入任务日志,任务运行情况一目了然
  16. - 代码生成 高灵活度一键生成前后端代码,减少百分之80左右的工作任务
  17. - 接口文档 使用的是 swagger-ui
  18. - 邮件工具 配合富文本,发送html格式的邮件
  19. - SM.MS免费图床 挺好用的一个图床,作为公共图片上传使用
  20. - 七牛云存储 这个就不多说了
  21. - 支付宝支付 提供了测试账号,可自行测试
  22. - 组件管理
  23. - 图标库 系统图标来自 https://www.iconfont.cn/
  24. - 富文本 集成wangEditor富文本
  25. - Markdown编辑器与Yaml编辑器
项目结构
  1. # 项目模块如下
  2. - eladmin-common 公共模块
  3. - aop.limit 接口限流自定义注解
  4. - exception 项目统一异常的处理
  5. - mapper mapstruct的通用mapper
  6. - redis redis缓存相关配置
  7. - swagger2 接口文档配置
  8. - utils 通用工具
  9. - eladmin-system 系统核心模块
  10. - config 配置跨域与静态资源
  11. - modules 系统相关模块
  12. - monitor 系统监控
  13. - config 配置日志拦截器与WebSocket
  14. - domain 实体类
  15. - repository 数据库操作
  16. - rest 前端控制器
  17. - service 业务接口
  18. - impl 业务接口实现
  19. - query 业务查询
  20. - quartz 定时任务
  21. - security 系统安全
  22. - config JWT的安全过滤器配置
  23. - rest 用户登录授权的接口
  24. - security 配置spring security
  25. - service 用户登录与权限的处理
  26. - utils JWT工具
  27. - system 系统管理
  28. - eladmin-logging 系统日志模块
  29. - eladmin-tools 系统第三方工具模块
  30. - eladmin-generator 系统代码生成模块
系统环境
后端开发环境
  • JDK:8
  • Redis 3.0+
  • Maven 3.5.3
  • MYSQL 5.5.59
  • 开发工具:IntelliJ IDEA (需安装lombok插件
前端开发环境
  • Node.js v10.14.2
  • 开发工具:JetBrains WebStorm

开发准备

Note在使用该系统前,你还需要做如下准备
安装redis

redis的安装可参考:http://www.runoob.com/redis/redis-install.html

给idea安装lombok插件

lombok的安装以及为什么使用它,可以查看:https://www.jianshu.com/p/f26d177b88be

了解MapStruct

项目中使用到了MapStruct自动映射DTO,如果你不熟悉,可以查看:https://www.jianshu.com/p/3f20ca1a93b0

安装node.js

前端需依赖node.js,对于没有node.js环境的,可以参考:http://www.runoob.com/nodejs/nodejs-install-setup.html

设置npm镜像加速
  1. npm config set registry https://registry.npm.taobao.org
  2. npm config set disturl https://npm.taobao.org/dist --global
  3. 配置后可通过下面方式来验证是否成功
  4. npm config get registry

本地与Ngnix部署

因为本项目是前后端分离的,所以需要前后端都部署好,才能进行访问前端页面访问地址:localhost:8013后端 swagger 需带token进行测试,文档地址:localhost:8000/swagger-ui.html

前端项目部署

部署前请先检查系统是否有 node.js 环境,如果没有需安装 node8.x 最新版,再进行部署

开发环境
  1. # 克隆前端项目
  2. git clone https://github.com/elunez/eladmin-qd.git
  3. # 定位到eladmin-qd目录
  4. cd eladmin-qd
  5. # 安装依赖
  6. npm install
  7. # 本地开发 启动项目
  8. npm run dev

注意

如果出现类似下图的问题

快速开始 - 图1

解决办法设置镜像加速

生产环境

需打包并把 dist 目录文件,部署到 Nginx 里,需将 prod.env.js 里面的 bash_api 改成自己生产环境的后端接口地址快速开始 - 图2

  1. # 构建生产环境
  2. npm run build
  3. # 服务器上安装Nginx,并在 nginx/conf/nginx.conf 修改配置文件
  4. server
  5. {
  6. listen 80;
  7. server_name 域名;
  8. index index.html index.htm index.php;
  9. root /www/server/dist; #路径
  10. error_page 404 /index.html; #这个配置,预防页面刷新后跳转到404页面
  11. }
  12. # 启动Nginx后,访问域名即可

后端项目部署

开发环境

开发工具如果是 idea 的话,直接导入项目,安装完依赖后,进入 eladmin-system模块按下图操作即可

快速开始 - 图3

注意 如果你在启动过程中出现类似这种错误,你需要去了解 MapStruct 的工作原理,目录 2.3 有提及

快速开始 - 图4

解决办法,输入 mvn compile 生成 Mapper 的实现即可

快速开始 - 图5

生产环境

生产环境需将打包成 jar ,上传到服务器后,通过 Linuxnohup 命令使java程序后台运行。再使用ngnix代理java服务,当然也可以使用docker部署,这里演示第一种

(1)打包项目
第一步第二步
快速开始 - 图6快速开始 - 图7
(2)修改配置文件

按需修改我们的 application-prod.yml ,如:1、修改数据库连接地址和密码2、自定义 token有效期3、是否允许生产环境使用代码生成器(默认禁用)快速开始 - 图8

(3)编写脚本操作java服务

启动脚本 start.sh

  1. nohup java -jar eladmin-system-1.5.jar --spring.profiles.active=prod &

停止脚本 stop.sh

  1. PID=$(ps -ef | grep eladmin-system-1.5.jar | grep -v grep | awk '{ print $2 }')
  2. if [ -z "$PID" ]
  3. then
  4. echo Application is already stopped
  5. else
  6. echo kill $PID
  7. kill $PID
  8. fi

新建空白Log文件,保存日志 nohup.out

  1. touch nohup.out

查看日志 log.sh

  1. tail -f nohup.out

完整目录如下图

快速开始 - 图9

(4)操作java服务

脚本创建完成后就可以直接操作java服务了,具体命令如下

  1. # 启动java
  2. ./start.sh
  3. # 停止java服务
  4. ./stop.sh
  5. # 查看日志
  6. ./log.sh
(5)使用ngnix代理java服务

我们如果想给我们的java服务绑定域名并且使用80端口访问,而80端口被其他服务占用了,这个时候就需要ngnix代理java服务,修改ngnix配置文件

  1. server {
  2. listen 80;
  3. server_name 域名;
  4. location / {
  5. proxy_pass http://127.0.0.1:8000; #这里的端口记得改成项目对应的哦
  6. proxy_set_header X-Forwarded-Proto $scheme;
  7. proxy_set_header X-Forwarded-Port $server_port;
  8. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  9. proxy_set_header Upgrade $http_upgrade;
  10. proxy_set_header Connection "upgrade";
  11. }
  12. }

重启ngnix 后,就能通过域名访问了

ngnix配置文件

  1. user www www;
  2. worker_processes auto;
  3. error_log /www/wwwlogs/nginx_error.log crit;
  4. pid /www/server/nginx/logs/nginx.pid;
  5. worker_rlimit_nofile 51200;
  6. events
  7. {
  8. use epoll;
  9. worker_connections 51200;
  10. multi_accept on;
  11. }
  12. http
  13. {
  14. include mime.types;
  15. #include luawaf.conf;
  16. include proxy.conf;
  17. default_type application/octet-stream;
  18. server_names_hash_bucket_size 512;
  19. client_header_buffer_size 32k;
  20. large_client_header_buffers 4 32k;
  21. client_max_body_size 50m;
  22. sendfile on;
  23. tcp_nopush on;
  24. keepalive_timeout 60;
  25. tcp_nodelay on;
  26. fastcgi_connect_timeout 300;
  27. fastcgi_send_timeout 300;
  28. fastcgi_read_timeout 300;
  29. fastcgi_buffer_size 64k;
  30. fastcgi_buffers 4 64k;
  31. fastcgi_busy_buffers_size 128k;
  32. fastcgi_temp_file_write_size 256k;
  33. fastcgi_intercept_errors on;
  34. gzip on;
  35. gzip_min_length 1k;
  36. gzip_buffers 4 16k;
  37. gzip_http_version 1.1;
  38. gzip_comp_level 2;
  39. gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
  40. gzip_vary on;
  41. gzip_proxied expired no-cache no-store private auth;
  42. gzip_disable "MSIE [1-6]\.";
  43. limit_conn_zone $binary_remote_addr zone=perip:10m;
  44. limit_conn_zone $server_name zone=perserver:10m;
  45. server_tokens off;
  46. access_log off;
  47. server
  48. {
  49. listen 80;
  50. server_name 域名;
  51. location / {
  52. proxy_pass http://127.0.0.1:8000; #这里的端口记得改成项目对应的哦
  53. proxy_set_header X-Forwarded-Proto $scheme;
  54. proxy_set_header X-Forwarded-Port $server_port;
  55. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  56. proxy_set_header Upgrade $http_upgrade;
  57. proxy_set_header Connection "upgrade";
  58. }
  59. }
  60. server
  61. {
  62. listen 80;
  63. server_name 域名;
  64. index index.html index.htm index.php;
  65. root /www/server/eladmin;
  66. error_page 404 /index.html;
  67. include enable-php.conf;
  68. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  69. {
  70. expires 30d;
  71. }
  72. location ~ .*\.(js|css)?$
  73. {
  74. expires 12h;
  75. }
  76. location ~ /\.
  77. {
  78. deny all;
  79. }
  80. access_log /www/wwwlogs/access.log;
  81. }
  82. include /www/server/panel/vhost/nginx/*.conf;
  83. }