推荐资料 IDEA 《IntelliJ-IDEA-Tutorial》:https://github.com/judasn/IntelliJ-IDEA-Tutorial 特别全的IDEA使用教程,可以学到很多实用的技巧。 Spring 《Spring实战(第4版)》:https://book.douban.com/subject/26767354/ 经典的、畅销的Spring学习和实践指南,从此书可以学习到Spring的实用用法,对Spring有个整体的了解,推荐整本阅读。 SpringBoot 《Spring Boot实战》:https://book.douban.com/subject/26857423/ SpringBoot的入门书,一共也就200多页,反正我是看完了,其中关于Groovy和Grails部分大可不看。 MyBatis 《MyBatis从入门到精通》:https://book.douban.com/subject/27074809/ 很好的一本MyBatis入门书,作者是开源插件PageHelper的项目主,平时忘了MyBatis的一些用法的时候可以当工具书使用,推荐整本阅读 MySql 《深入浅出MySQL》:https://book.douban.com/subject/25817684/ 网易DBA写的一本MySql书籍,作为一个开发者,我们只要看第一部分基础篇、第二部分开发篇、第三部分优化篇即可。 Linux 《循序渐进Linux(第2版)》:https://book.douban.com/subject/26758194/ 南非蚂蚁写的一本Linux书籍,作为一个开发者,我们只要看第一篇基础知识篇、第二篇服务器搭建篇即可,后面讲到生产环境部署项目会用到。 Elasticsearch 《Elasticsearch 权威指南》:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html Elasticsearch官方推荐的中文学习资料,基于Elasticsearch2.4.x版本,比较老,但是可堪一用。大多数成熟的框架,版本迭代用法相差不会很大。 《Elasticsearch 技术解析与实战》:https://book.douban.com/subject/26967826/ 如果你觉得上面那本ElasticSearch版本太老的话可以看这本。 Mongodb 《MongoDB实战(第二版)》:https://book.douban.com/subject/27061123/ 很好的一本MongoDB实战书,作者参与过MongoDB的驱动开发,感兴趣的可以都看下。 Docker 《Spring Cloud与Docker微服务架构实战》:https://book.douban.com/subject/27028228/ 我们只需要看下这本书的Docker部分即可,后面讲到生产环境部署项目会用到。 结语 如果你按照我的推荐看了以上部分的资料,或者你已经有了以上部分的基础,那么你学习mall的时候会非常顺利。 推荐阅读 mall架构及功能概览 from:https://mp.weixin.qq.com/s?__biz=MzU1Nzg4NjgyMw==&mid=2247483680&idx=1&sn=4e5e2294a275a7709f9a239b34d1fa60&scene=21#wechat_redirect
View Details商品管理 数据库表结构 功能结构 订单管理 数据库表结构 功能结构 营销管理 数据库表结构 功能结构 内容管理 数据库表结构 功能结构 用户管理 数据库表结构 功能结构 注意:部分功能暂未实现,只是对表结构进行了设计,商品管理、订单管理、营销管理大部分功能均已实现。 相关资料 PowerDesigner数据库设计文件 商品管理:https://github.com/macrozheng/mall-learning/blob/master/document/pdm/mall_pms.pdm 订单管理:https://github.com/macrozheng/mall-learning/blob/master/document/pdm/mall_oms.pdm 营销管理:https://github.com/macrozheng/mall-learning/blob/master/document/pdm/mall_sms.pdm 内容管理:https://github.com/macrozheng/mall-learning/blob/master/document/pdm/mall_cms.pdm 用户管理:https://github.com/macrozheng/mall-learning/blob/master/document/pdm/mall_ums.pdm MindMaster功能思维导图 商品管理:https://github.com/macrozheng/mall-learning/blob/master/document/mind/pms.emmx 订单管理:https://github.com/macrozheng/mall-learning/blob/master/document/mind/oms.emmx 营销管理:https://github.com/macrozheng/mall-learning/blob/master/document/mind/sms.emmx 内容管理:https://github.com/macrozheng/mall-learning/blob/master/document/mind/cms.emmx 用户管理:https://github.com/macrozheng/mall-learning/blob/master/document/mind/ums.emmx 使用到的工具 PowerDesigner:http://powerdesigner.de/ MindMaster:http://www.edrawsoft.cn/mindmaster 推荐阅读 mall在Linux环境下的部署(基于Docker Compose) mall在Linux环境下的部署(基于Docker容器) mall在Windows环境下的部署 mall整合SpringBoot+MyBatis搭建基本骨架 mall整合Swagger-UI实现在线API文档 mall整合SpringSecurity和JWT实现认证和授权(一) mall整合Elasticsearch实现商品搜索 mall整合Mongodb实现文档操作 mall整合RabbitMQ实现延迟消息 mall整合OSS实现文件上传 from:https://mp.weixin.qq.com/s?__biz=MzU1Nzg4NjgyMw==&mid=2247483835&idx=1&sn=895ae94d5a0bc5fbe5bed8aa715d92af&scene=21#wechat_redirect
View Details1. 问题引入 之前在使用tomcat的时候,启动tomcat默认都会绑定到127.0.0.1这个地址,最近在使用hexo写博客的时候发现通过 hexo server命令启动服务的时候绑定的ip地址是0.0.0.0。那么这两个IP地址到底有什么不同呢? 在讲解两个地址的不同之前,我们先回顾一下IP地址的基础知识。 2. IP地址分类 2.1 IP地址表示 IP地址由两个部分组成,net-id和host-id,即网络号和主机号。 net-id:表示ip地址所在的网络号。 host-id:表示ip地址所在网络中的某个主机号码。 即:
1 |
IP-address ::= { <Network-number>, <Host-number> } |
2.2 IP地址分类 IP地址一共分为5类,即A~E,它们分类的依据是其net-id所占的字节长度以及网络号前几位。 A类地址:网络号占1个字节。 网络号的第一位固定为0。 B类地址: 网络号占2个字节。 网络号的前两位固定为10。 C类地址: 网络号占3个字节。 网络号的前三位固定位110。 D类地址: 前四位是1110,用于多播(multicast),即一对多通信。 E类地址: 前四位是1111,保留为以后使用。 其中,ABC三类地址为单播地址(unicast),用于一对一通信,是最常用的。 2.3 特殊IP地址 特殊IP地址就是用来做一些特殊的事情。RFC1700中定义了以下特殊IP地址。 {0,0}:网络号和主机号都全部为0,表示“本网络上的本主机”,只能用作源地址。 {0,host-id}:本网络上的某台主机。 只能用作源地址。 {-1,-1}: 表示网络号和主机号的所有位上都是1(二进制),用于本网络上的广播,只能用作目的地址,发到该地址的数据包不能转发到源地址所在网络之外。 {net-id,-1}:直接广播到指定的网络上。 只能用作目的地址。 {net-id,subnet-id,-1}:直接广播到指定网络的指定子网络上。 只用作目的地址。 {net-id,-1,-1}:直接广播到指定网络的所有子网络上。 只能用作目的地址。 {127,}:即网络号为127的任意ip地址。 都是内部主机回环地址(loopback),永远都不能出现在主机外部的网络中。 3. 问题解答 接下来我们来看之前问过的问题:127.0.0.1和0.0.0.0地址的区别是什么? 我们先来看下共同点: 都属于特殊地址。 都属于A类地址。 都是IPV4地址。 接下来我们分别看下这两个地址: 0.0.0.0 IPV4中,0.0.0.0地址被用于表示一个无效的,未知的或者不可用的目标。 在服务器中,0.0.0.0指的是本机上的所有IPV4地址,如果一个主机有两个IP地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是0.0.0.0,那么通过两个ip地址都能够访问该服务。 在路由中,0.0.0.0表示的是默认路由,即当路由表中没有找到完全匹配的路由的时候所对应的路由。 用途总结 当一台主机还没有被分配一个IP地址的时候,用于表示主机本身。 (DHCP分配IP地址的时候) 用作默认路由,表示”任意IPV4主机”。 用来表示目标机器不可用。 用作服务端,表示本机上的任意IPV4地址。 127.0.0.1 127.0.0.1属于{127,}集合中的一个,而所有网络号为127的地址都被称之为回环地址,所以回环地址!=127.0.0.1,它们是包含关系,即回环地址包含127.0.0.1。 回环地址:所有发往该类地址的数据包都应该被loop back。 用途 回环测试,通过使用ping 127.0.0.1 测试某台机器上的网络设备,操作系统或者TCP/IP实现是否工作正常。 DDos攻击防御: 网站收到DDos攻击之后,将域名A记录到127.0.0.1,即让攻击者自己攻击自己。 大部分Web容器测试的时候绑定的本机地址。 localhost 相比127.0.0.1,localhost具有更多的意义。localhost是个域名,而不是一个ip地址。之所以我们经常把localhost与127.0.0.1认为是同一个是因为我们使用的大多数电脑上都讲localhost指向了127.0.0.1这个地址。 在ubuntu系统中,/ets/hosts文件中都会有如下内容:
1 2 3 4 5 6 7 8 |
127.0.0.1 localhost 127.0.1.1 jason-Lenovo-V3000 # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters |
上面第一行是几乎每台电脑上都会有的默认配置。 但是localhost的意义并不局限于127.0.0.1。 localhost是一个域名,用于指代this computer或者this host,可以用它来获取运行在本机上的网络服务。 在大多数系统中,localhost被指向了IPV4的127.0.0.1和IPV6的::1。 […]
View Detailsmall-swarm简介 mall-swarm是一套微服务商城系统,采用了 Spring Cloud Greenwich、Spring Boot 2、MyBatis、Docker、Elasticsearch等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。 系统架构图 系统架构图 后端技术栈 技术 说明 Spring Cloud 微服务框架 Spring Boot 容器+MVC框架 Spring Security 认证和授权框架 MyBatis ORM框架 MyBatisGenerator 数据层代码生成 PageHelper MyBatis物理分页插件 Swagger-UI 文档生产工具 Elasticsearch 搜索引擎 RabbitMq 消息队列 Redis 分布式缓存 MongoDb NoSql数据库 Docker 应用容器引擎 Druid 数据库连接池 OSS 对象存储 MinIO 对象存储 JWT JWT登录支持 LogStash 日志收集 Lombok 简化对象封装工具 Seata 全局事务管理框架 Portainer 可视化Docker容器管理 Jenkins 自动化部署工具 项目结构
1 2 3 4 5 6 7 8 9 10 11 12 13 |
mall ├── mall-common -- 工具类及通用代码模块 ├── mall-mbg -- MyBatisGenerator生成的数据库操作代码模块 ├── mall-security -- 封装SpringSecurity+JWT的安全认证的模块 ├── mall-registry -- 基于Eureka的微服务注册中心 ├── mall-config-- 基于Spring Cloud Config的微服务配置中心 ├── mall-gateway -- 基于Spring Cloud Gateway的微服务API网关服务 ├── mall-monitor -- 基于Spring Boot Admin的微服务监控中心 ├── mall-admin -- 后台管理系统服务 ├── mall-search -- 基于Elasticsearch的商品搜索系统服务 ├── mall-portal -- 移动端商城系统服务 └── mall-demo -- 微服务远程调用测试服务 |
学习路线 之前有朋友问我,mall-swarm这个项目有没有学习教程?其实这个项目的功能与mall项目基本一致,只是在此基础上改成了微服务版本,只要看我写的《mall学习教程》和《Spring Cloud学习教程》即可,下面聊聊我所推荐的学习路线。 学习mall 《mall学习教程》主要分为如下几个部分,推荐学习顺序是除参考篇以外可以按下面的顺序学习,对于参考篇,可以在用到里面相关技术时再学习。 序章:mall项目的整体架构及功能介绍,同时对于新手推荐了一些相关书籍资料; 架构篇:mall项目的架构搭建教程,手把手教你搭建一个mall项目在使用的基本项目骨架; 业务篇:mall项目电商业务相关教程,对于了解项目业务有很大帮助; 技术要点篇:mall项目中的一些技术要点解析,主要介绍一些技术在项目中的运用; 部署篇:mall项目的部署教程,包括Windows、Linux和自动化部署方案; 参考篇:mall项目中所用技术和工具的入门教程,每一篇都可以单独学习,对于mall项目,这些教程的深入程度都刚刚好。 项目地址:https://github.com/macrozheng/mall-learning 学习SpringCloud 《Spring Cloud学习教程》是一套涵盖大部分核心组件使用的教程,包括Spring Cloud Alibaba及分布式事务Seata,基于Spring Cloud Greenwich及SpringBoot 2.1.7。20篇文章,篇篇精华,30个Demo,涵盖大部分应用场景。mall-swarm项目中所用到的Spring Cloud技术该教程基本都涵盖了,学习该教程可以为学习mall-swarm项目打下良好的Spring Cloud基础。 项目地址:https://github.com/macrozheng/springcloud-learning 学习mall-swarm 当我们学习了《mall学习教程》和《Spring Cloud学习教程》之后就可以着手学习mall-swarm这个项目了。首先需要的就是按之前的教程把项目跑起来,然后进行源码的学习,相信有了学习上面两套教程的基础,搞懂源码并不是什么难事。下面提供下mall-swarm的部署教程: mall-swarm在Windows环境下的部署 mall-swarm在Linux环境下的部署(基于Docker容器) 微服务架构下的自动化部署,使用Jenkins来实现! […]
View DetailsGogs简介 Gogs是一款极易搭建的自助Git服务,使用Go语言开发,只要Go语言支持的平台它都支持,包括Linux、Mac OS X、Windows以及ARM平台。Gogs对系统硬件要求极低,你甚至可以在树莓派上搭建它。 项目地址:https://github.com/gogs/gogs 安装 Gogs在Docker环境下的安装非常简单,只需要两个命令即可,推荐使用该方式来进行安装。 首先我们需要先下载Gogs的Docker镜像;
1 2 |
docker pull gogs/gogs |
下载完成后使用docker run命令即可运行服务;
1 2 3 4 |
docker run -p 10022:22 -p 10080:3000 --name=gogs \ -v /mydata/gogs:/data \ -d gogs/gogs |
这里我们说下命令中值得注意的地方,10022对应的是Gogs的SSH服务端口,10080对应的使用Gogs的HTTP服务端口,我们还将容器的数据目录挂载到了宿主机的/mydata/gogs目录下,这样就算我们重新创建容器数据也不会丢失。 配置 安装完成后,我们第一次访问Gogs服务会显示一个设置页面,访问地址:http://192.168.5.19:10080/ 数据库设置,这里我们直接使用内置的SQLite3数据库即可,使用其他的需要自行搭建数据库; 应用基本设置,主要修改域名、SSH端口号和应用URL即可。 使用 注册 配置好以后会直接跳转到登录界面,首先注册一个帐户; 注册完成后,登录即可进入控制面板页面。 创建仓库 直接使用我的仓库右侧的加号即可创建仓库,简单设置下仓库名称和可见性来完成创建; 创建成功后直接使用克隆地址即可克隆该仓库; 我们可以直接使用IDEA的Git检出功能; 检出完成后,加入我们的代码直接提交、推送,在Gogs里面就可以看到我们提交的代码了。 工单管理 这里的工单管理,有点类似Github上面的Issue的功能,我们可以通过创建工单按钮来创建; 输入我们的标题、内容和标签以后即可创建; 创建完成后显示效果如下。 添加用户 有时候管理员需要新建一些帐户来协作开发,此时我们只要点击头像->管理面板->用户管理即可打开用户管理界面; 然后点击创建新的帐户,输入相关信息即可完成创建。 管理协作者 创建完成后,我们可以在仓库页面的仓库设置中打开管理协作者功能; 之后通过输入协作者账户,点击增加新的协作者并设置好权限即可,这样协作者就可以访问并向该仓库提交代码了。 迁移外部仓库 Gogs还提供了从外部仓库迁移代码的功能,通过头像左侧的加号,然后选择迁移外部仓库即可; 这里以迁移Gitee上的mall项目为例,项目地址:http://gitee.com/macrozheng/mall 迁移成功后就可以在Gogs里面看到mall项目了! Gogs VS Gitlab 之前有写过一篇《10分钟搭建自己的Git仓库》,使用的是Gitlab,下面对比下Gogs和Gitlab在安装使用过程中的优缺点,仅代表个人观点。 比较方面 Gogs Gitlab Docker镜像大小 44MB 836MB 启动速度 很快,几秒 很慢,机器配置不好要10分钟 配置要求 很低,树莓派都可以 很高,吃内存,吃CPU 访问速度 够快 机器配置好也还可以 功能 功能较少 功能很丰富 from:https://mp.weixin.qq.com/s/WYHuAvN1pt_TGkBVWBnPSA
View Details摘要 在开发或生产环境中,我们经常会搞一套自动化部署方案(俗称一键部署)。比较流行的一种就是Gitlab+Jenkins实现方案,不过这种方案占用内存比较大,没有个8G内存,很难流畅运行,而且部署起来也不快。最近发现一款神器Drone,轻量级CI/DI工具,结合Gogs使用内存占用不到1G,几行脚本就能实现自动化部署,推荐给大家! Drone简介 Drone是一款基于容器技术的持续集成工具,使用简单的YAML配置文件即可完成复杂的自动化构建、测试、部署任务,在Github上已经有22K+Star。 Gogs安装 我们将使用轻量级的Gogs来搭建Git仓库,这里只是简单说下安装步骤,具体使用可以参考《Github标星34K+Star,这款开源项目助你秒建Git服务!》。 首先需要下载Gogs的Docker镜像;
1 |
docker pull gogs/gogs |
下载完成后在Docker容器中运行Gogs;
1 2 3 4 |
docker run -p 10022:22 -p 10080:3000 --name=gogs \ -e TZ="Asia/Shanghai" \ -v /mydata/gogs:/data \ -d gogs/gogs |
Gogs运行成功后,访问Web页面地址并注册账号:http://192.168.5.78:10080 然后将我们的SpringBoot项目mall-tiny-drone的源码上传上去即可,项目地址:github.com/macrozheng/… Drone安装 接下来我们安装下Drone,不愧是基于容器的CI/DI工具,使用Docker安装很方便! 首先下载Drone的Server和Runner的镜像;
1 2 3 4 |
# Drone的Server docker pull drone/drone:1 # Drone的Runner docker pull drone-runner-docker:1 |
这里有个Server和Runner的概念,我们先来理解下; Server:为Drone的管理提供了Web页面,用于管理从Git上获取的仓库中的流水线任务。 Runner:一个单独的守护进程,会轮询Server,获取需要执行的流水线任务,之后执行。 接下来我们来安装drone-server,使用如下命令即可;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
docker run \ -v /mydata/drone:/data \ -e DRONE_AGENTS_ENABLED=true \ -e DRONE_GOGS_SERVER=http://192.168.5.78:10080 \ -e DRONE_RPC_SECRET=dronerpc666 \ -e DRONE_SERVER_HOST=192.168.5.78:3080 \ -e DRONE_SERVER_PROTO=http \ -e DRONE_USER_CREATE=username:macro,admin:true \ -e TZ="Asia/Shanghai" \ -p 3080:80 \ --restart=always \ --detach=true \ --name=drone \ drone/drone:1 |
这里的配置参数比较多,下面统一解释下; DRONE_GOGS_SERVER:用于配置Gogs服务地址。 DRONE_RPC_SECRET:Drone的共享秘钥,用于验证连接到server的rpc连接,server和runner需要提供同样的秘钥。 DRONE_SERVER_HOST:用于配置Drone server外部可访问的地址。 DRONE_SERVER_PROTO:用于配置Drone server外部可访问的协议,必须是http或https。 DRONE_USER_CREATE:创建一个管理员账号,该账号需要在Gogs中注册好。 接下来安装drone-runner-docker,当有需要执行的任务时,会启动临时的容器来执行流水线任务;
1 2 3 4 5 6 7 8 9 10 11 12 |
docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DRONE_RPC_PROTO=http \ -e DRONE_RPC_HOST=192.168.5.78:3080 \ -e DRONE_RPC_SECRET=dronerpc666 \ -e DRONE_RUNNER_CAPACITY=2 \ -e DRONE_RUNNER_NAME=runner-docker \ -e TZ="Asia/Shanghai" \ -p 3000:3000 \ --restart always \ --name runner-docker \ drone/drone-runner-docker:1 |
这里的配置参数比较多,下面统一解释下。 DRONE_RPC_PROTO:用于配置连接到Drone server的协议,必须是http或https。 DRONE_RPC_HOST:用于配置Drone server的访问地址,runner会连接到server获取流水线任务并执行。 DRONE_RPC_SECRET:用于配置连接到Drone server的共享秘钥。 DRONE_RUNNER_CAPACITY:限制runner并发执行的流水线任务数量。 DRONE_RUNNER_NAME:自定义runner的名称。 Drone使用 让我们来访问下Drone的控制台页面,第一次登录需要输入账号密码(在Gogs中注册的账号),访问地址:http://192.168.5.78:3080/ 此时我们在Gogs中的项目会现在在列表中,如果没有的话可以点下SYNC按钮; 接下来我们需要对仓库进行设置,将仓库设置为Trusted(否则Drone创建的容器无法挂载目录到宿主机),最后点击SAVE按钮保存; 保存成功后会在Gogs中自动配置一个Web钩子,当我们推送代码到Gogs中去时,会触发这个钩子,然后执行在Drone中的流水线任务; 拉到最下面,我们可以发送一个测试推送,推送成功会显示绿色的√; 此时我们在Drone中发现其实流水线执行失败了,那是因为我们在脚本中引用了Secret中的ssh_password; 在仓库的设置中添加一个Secret即可,Secret是专门用来存储密码的,此密码只能被使用或删除,无法被查看; 在ACTIVITY FEED中使用RESTART可以重新执行该流水线,发现已经成功执行。 编写脚本 当我们向Git仓库Push代码时,会自动触发Web钩子,然后Drone就会从Git仓库Clone代码,再通过项目目录下的.drone.yml配置,执行相应的流水线,接下来我们来看看这个脚本是如何写的。 首先我们来了解下在.drone.yml中配置的工作流都有哪些操作,看下流程图就知道了; 再来一个完整的.drone.yml,配上详细的注解,看下就基本懂了!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
kind: pipeline # 定义对象类型,还有secret和signature两种类型 type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型 name: mall-tiny-drone # 定义流水线名称 steps: # 定义流水线执行步骤,这些步骤将顺序执行 - name: package # 流水线名称 image: maven:3-jdk-8 # 定义创建容器的Docker镜像 volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置 - name: maven-cache path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载 - name: maven-build path: /app/build # 将应用打包好的Jar和执行脚本挂载出来 commands: # 定义在Docker容器中执行的shell命令 - mvn clean package # 应用打包命令 - cp target/mall-tiny-drone-1.0-SNAPSHOT.jar /app/build/mall-tiny-drone-1.0-SNAPSHOT.jar - cp Dockerfile /app/build/Dockerfile - cp run.sh /app/build/run.sh - name: build-start image: appleboy/drone-ssh # SSH工具镜像 settings: host: 192.168.5.78 # 远程连接地址 username: root # 远程连接账号 password: from_secret: ssh_password # 从Secret中读取SSH密码 port: 22 # 远程连接端口 command_timeout: 5m # 远程执行命令超时时间 script: - cd /mydata/maven/build # 进入宿主机构建目录 - chmod +x run.sh # 更改为可执行脚本 - ./run.sh # 运行脚本打包应用镜像并运行 volumes: # 定义流水线挂载目录,用于共享数据 - name: maven-build host: path: /mydata/maven/build # 从宿主机中挂载的目录 - name: maven-cache host: path: /mydata/maven/cache |
run.sh执行脚本可以实现打包应用和运行容器镜像,之前讲过这里就不再赘述了,具体可以参考《我常用的自动化部署技巧,贼好用,推荐给大家!》,运行成功效果如下。 总结 对比Jenkins复杂的图形化界面操作,Drone使用脚本来定义流水线任务无疑更简单、更直观。Drone更加轻量级,内存占用少且响应速度快!自动化部署要啥Jenkins?直接给Git整个CI/DI功能难道不香么? 参考资料 官方文档:docs.drone.io/ 结合Maven使用:docs.drone.io/pipeline/ku… 结合SSH使用:plugins.drone.io/appleboy/dr… 将容器目录挂载到宿主机:docs.drone.io/pipeline/do… 项目源码地址 github.com/macrozheng/… 本文 GitHub github.com/macrozheng/… 已经收录,欢迎大家Star! 作者:MacroZheng 链接:https://juejin.cn/post/6963430116080910367 来源:掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View Details古人说:“每有贫寒之命,生于富贵之家,锦襁绣褓,享用太过。其福不足以当之,则必夭”。这段话是说,一个禀赋了贫寒之命的孩子,如果生在富贵人的家庭,是没有享福的承受能力的,一定会夭折。据此推论,一个禀赋了相同造化的孩子,如果生在贫寒人的家庭,由于没有福禄的耗费,不一定会夭折。“贫寒”一词有问题,既然是贫寒之命,如何可以生在富贵人家呢?既然生在富贵人家,又如何称其为贫寒之命呢?这是传统命理的思维方式,认为禀赋与命运是惟一的对应关系。既然同一种禀赋,可以处于富贵与贫寒两种状态之下,那么,禀赋与命运就不是惟一的对应关系。 由此看来,同样一种禀赋,具有某种同样,或者大致相当的福报。因为所处的家庭环境不同,对其福报的“消耗”也不同,从而命运的过程和状况也不同。这种理论应该可以推广到所有的命理分析中去。 下面的案例来自于纪晓岚的《阅微草堂笔记》,袁树珊在《中国古代命理探源》中也有摘录。 “按推算干支,或奇验,或全不验,或半验半不验;余尝以闻见最确者,反复深思,八字贵贱贫富,特大概如是,其间乘除盈缩,略有异同。无锡邹小山先生夫人,与安州陈密山先生夫人,八字干支并同。小山先生官礼部侍郎,密山先生官贵州布政使,均二品也。论爵,布政不及侍郎之尊;论禄,则侍郎不及布政之厚,互相补矣。二夫人并寿考,陈夫人早寡,然晚岁康强安乐;邹夫人白首齐眉,然晚岁丧明,家计亦薄,又相补矣。此或疑地有南北,时有初正也”。 显然,纪晓岚提出了两个重要的概念:一是命理“贵贱贫富,特大概如是”;另一是“乘除盈缩,略有异同”。两位夫人具有完全相同的禀赋,所以她们具有相同的福报。由于后天的差异,二人在寿元、子嗣、钱财以及丈夫的爵禄方面,明显存在互补现象在起约束作用,有所得必有所失。 我们可以做一个理想实验:两位夫人的时辰一样,理论上可以看成是一个人。因为命理是关于时辰分析的学说,既然是同一个时辰,那幺,理论上她们是一个人。她们的命运,可以看成同一个人在不同的环境下的不同过程。这表明人的命运在后天是可以有差异的,这种差异并非全部由先天来决定,而是后天的环境,或者是自己的选择来决定。例如,如果选择爵,则可能付出禄的代价;选择子,则可能付出寿的代价,等等。每一个人在后天都在一定程度上的选择权利,从而,理论上说,每一个人都可以缔造自己的命运,自然,人们的命运就可能偏离传统命理的逻辑过程。 为了考察地域和时间对命理的影响,纪晓岚又例举了案例如下:“余第六侄与奴子刘云鹏,生时只隔一墙,两窗相对,两儿并落蓐啼。非惟时同刻同,乃至分秒亦同。侄至十六岁而夭,奴子今尚在。岂非此命所赋之禄,只有此数。侄生长富贵,消耗先尽;奴子生长贫贱,消耗无多,禄尚未尽耶?盈虚消息,理似如斯,俟知命者更详之”。纪晓岚的记述,是罕见的命理案例:不但同辰,而且同地。此二人的命运毫无相同之处。说明相同八字的人拥有大致相当的福报,因为所处的家庭环境不同,对其福报的“消耗”也不同,从而命运的过程和状况也不同,这种理念可以对他们的命运作出合理解释,而且只能如此。这就是所谓“全不验”的情形。 下面我们来建立一个新的模型。假定存在一个常数,是量的概念。每一个人都拥有一个这样的量值,自然,相同的禀赋拥有相同的数值。这是可以接受的假定。我们换一种表述;假定这是天地给予每一个人的规定。依照这种描述,我们可以尝试建立命理模型如下:命理常数=妻+财+子+……+禄设:命理常数为C,妻为XQ,财为XC,子为XZ,禄为XL,寿为XS,其它为XX, 有:C=XQ+XC+XZ+XL+XS+XX 以上是一个六要素命理模型,前提是:X系列是可变因素,并假定X系列之间是简单线性关系。这样就可以解释一系列传统命题: 1,“吃亏是福”。按照命理模型理论的解释, “获得”是命理模型的消耗指标,而“吃亏”则正好相反,。例如,抑制木炭的燃烧速度,则必然延长它的燃烧寿命。由于命理常数的存在,“吃亏”所产生的某些要素值的减少,必然导致其它要素值的增加。这里所谓的“福”,是指的某种属性的转移,而不是总量的增加。命理与宿命的根本区别就在于,宿命否认这种转移的可能性,而命理则肯定它。人的生命的积极意义,在于让这种转移更具有价值。 2,“破财免灾”。按照五行生克理论的解释,“灾祸”是一种客观现象,也是一种必然现象。宿命的观点认为灾祸是不可避免的过程,然而,依照命理模型理论的解释,灾祸虽然不可以避免,但却具有转移的可能性。“灾祸”是某种命理要素的一种值的改变,通过将这种值的改变,转移到钱财方面,也就是“富”的减值过程,则可以达到某种消灾的目的。 3,“贪财坏印”。以公职人员为例:如果一个公职人员的命理常数一定,但在钱财上过于贪婪,即所谓在“富”上获得过多,则必然拖累其在“贵”上的命理数值,也就是降职。严重的甚至会损害到“寿”的数量,或者损害到其它的命理要素方面,这是显然的道理。等等。 命理模型需要一个完整的命理要素集合。古代命理常用的要素前面已经提及,它们是:妻、财、子、禄、富、贵、福、寿、父、母、兄、弟。其中“富”与“财”,“禄”与“贵”相互重迭,福可代指荣辱、顺逆,较为抽象。 《子平真诠评注》沉孝瞻:“大凡命中吉凶,与人愈近,其验益灵。富贵贫贱,本身之事,无论矣,至于六亲,妻以配身,子为后嗣,亦是切身之事。故看命者,妻财子禄,四事并论,自此之外,惟父母身所自出,亦自有验。所以提纲有力,或年干有用,皆主父母双全得力。至于祖宗兄弟,不甚验矣”。 参照各种理论,我们有: 命理要素集:妻、财、子、禄、福、寿、父、母、兄、弟……。 当然,专业人士会全面理解各要素的含义。例如兄弟包含姐妹的内容,父母包含叔伯姨姑的内容,寿包含身体、疾病、夭折的内容,妻包含妾、情人、异性的内容,等等。前面已经们给出过一个包含六要素的模型,是理论模型的简化版本。由于要素与要素之间的属性不同,例如寿的单位是年,财的单位是元,子的单位是个,所以,要素之间具有独立性。 模型右边的要素之间是互为因果关系,或函数关系。当某一个要素发生变化,则必然导致其它的要素进行适当的调整,这是命理与宿命之间的本质区别。 命运的展开首先是由命理模型来解释的,而命理要素的展开,是由格局学说来解释的,例如富格、贵格,或是富贵双全格,等等。《渊源集说》:“身弱徒然入格,纵发早亡”。 发,可以理解为发展,指的是在富贵。入格,是具备了富贵条件的意思。身弱,表明日元失令寡助。身弱不胜财官,恃强所得必然招损,这是命理常识。所以说“纵发早亡”。“纵发”,说明命弱时也可以发;“早亡”,则需要付出寿元的代价,这里讲的是富贵与寿元之间的消长,或者说调整和转移问题。 按照传统的命理分析,身弱是不可胜任财官的,也就是说,日元弱的人,理论上是不可能“发”的。《渊源集说》讲“纵发”,则说明命运是可以违反命理常识而产生变化的,这时候,只能用“早亡”来描述。纵发也不一定早亡。因为人一生除了财之外,不光是寿,还有妻、子、禄,等等,可以互相转移。另外,财来财去,正负为零,也不一定伤及寿元,所谓“破财免灾”,就是这个意思。财富厚的人,多资助他人,或捐助些慈善事业,从命理学上讲是有百利而无一害。所谓阴德,无非是讲人的付出,终究对人的总体命运来说,包括宗族,具有隐秘的益处。这种无法指明的回报,人们称之为“阴德”。 《金玉赋》说:“八字无财,须求本分;越外若贪,必招凶事”。无财,是禀赋贫寒的意思。贫寒者求富,也是人之常理。但是,思之太过,则称之为贪。贪则可以突发,那就是“越外”,所以“必招凶事”。贫寒属于命理要素“富”的范畴,贫寒是指“富”的量值低下,这里讨论的是先天获得的“富”的空间数值较小的情况。如果后天不适当地增加自己“富”的量值,必然引起其它要素的调整要求,而且是向下调整。所以说“必招凶事”。“凶事”的对象是泛指,是除了“富”以外的所有命理要素。不当的拓展“富”的空间,必须以降低其它命理空间为代价。 《论兴亡》说:“如有高见明识,知进退存亡之机,而保其身者,虽官禄逢伤,六亲免祸,亦当自己受恶疾而终者矣”。这一段谈的是伤官见官的情形。高明者,说的是知命之人;进退存亡之机,说的是命理要旨。纵然是知命的高人,也不能避免灾祸的降临,只不过可以在财官、六亲、身体和寿元上进行调整和转移罢了。不可避免,不等于是宿命。主动进退,以图存亡,这才是中国命理存在的意义。 《子平真诠评注》原序:“人能知命,则营竟之心可以息,非分之想可以屏”。营竟之心,本是常理。有了营竟之心,人们后天可以奋发图强,实现理想。社会在竞争中,不断拓展人们命运的相对空间。同样的命造,在不同的文明之下,其现实内容是不相同的。换句话说,命理常数在更大的尺度上,是社会文明的函数。非分之心,确不可要。有了非分之心,则命运的调整将失去控制,命理的空间结构将失去平衡,紊乱和崩溃将不可避免。 任铁樵在注《滴天髓.何知章》中说:“倘使富人无子,能轻其财与亲族之中,分多润寡,何患无子哉”?这句话的意思很明显,后天行为的取向可以影响人的命运。轻财与得子。
View Details第一讲 平实显精神,坤元合德戊 比方下的戊土。 有人说:“戊土在天为霞、为雾,在地为山峦,也可理解为城墙、厚土。”又说“土无专气,依火以生,霞无定体,借日光以存。知丙火为日,可推戊土为霞。霞与日有关,故无火则土死。” 戊在人身上为皮肤,在体内为胃。胃上接于食道,下通小肠,其主要功能是受纳、腐熟水谷。饮食入口,经过食道容纳于胃,胃有“水谷之海”之称。容纳于胃的水谷,经过胃的初步消化,下传于小肠,其水谷精微通过脾的运化,以供养全身。胃对于饮食水谷的消化功能,称之为“胃气”。胃气对人体生命与健康是很重要的,中医认为“人以胃气为本”,有胃气则生,无胃气则死。胃的功能特点是以通降为顺,所以胃气主降。如果胃失和降,所饮食物及糟粕不能下行,就会出现脘腹胀痛、大便秘结等病症。胃气不降而上逆,则可能引起恶心、呕吐或呃逆、嗳气。戊土就象人的皮肤和胃一样,在外面对全身都有保护和发散功能,在内可以消化饮食之物。胃喜湿怕燥,戊土也一样,喜滋润,太燥则有失功用。 也有人说,戊土在地上,是硬硬的土,像墙壁,像混凝土。可以成就高大的建筑,可以承载万物。但它也有顽固的一面,不可与戊日干的人过于直接的冲突。戊土日主的人常常说一套,背后想的又是依自己原则而行的另一套,要小心不要抵触戊日主生人。 《滴天髓》说:戊土固重,既中且正。静翕动辟,万物司命。水润物生,火燥物病。若在艮坤,怕冲宜静。戊土人,本性厚重,正直无私。戊土人喜静,懒得动。但一当他行动起来,就有一股特别的激情,对周围将产生不小的影响,大致可以改换原有的场面气氛。戊土人喜欢直来直去,无意之中容易得罪别人,这对他的事业前途多会带来负面影响。 围住江湖,堤岸是功不可没。戊土为堤岸,壬水为江河之水,壬水不是过于旺盛的时候,戊土可以起到固水的作用,但壬水过旺,就有冲垮堤岸的危险。所以较弱的戊土,比较害怕壬水的冲击,斯时非伤灾必破财。戊土如长江江畔的土山,在长江不泛滥时,戊土只是一堆石块,不会令人觉得它的重要性,但当长江水涨时,这些戊土便救家救民,不使河水涌入民居。戊土之德便显现出来了。因此在有灾难发生时,戊土日元的人分外易成名。很多知名人物,特别是很多烈士都是戊土日元。 例一, 乾造:辛丑 庚子 戊戌 癸亥 戌亥子丑汪洋之水,戊土为堤岸,但力量薄弱,逢壬年都不顺,或者病痛多,或者破财。平时不好接触,只在朋友危难之际愿意出手。 戊象城墙厚土,是甲木的掩体,又是生长甲木的基础。放在社会上,代表大众群体,冲撞戊土就象犯众一样可怕。任何有生气之物都以戊土为基础,离开戊土,生气就没有支撑。官以民为本,民以食为天,民与食都是戊土的特征物。好官必爱民,爱民如子的官,民必为他所用,此时的官就有生气,可以蓬勃发展。就象甲以戊为财,可以任其所用,任劳任怨,克的太过就象官逼民反,大事不妙。 戊土到处可见,有坤象,厚德载物,普通又而广泛,平凡、朴实、简单,它是万物所依赖的基础。一切生机从那里来,也必将回到那儿去。戊土人很直接,说话没有花言巧语。 戊土人喜欢自由,有懒散的习惯,有时很任性,克服这些弱点才有成才的期望。书曰:“土得金火,方成大器。”戊土遇到金多的时候,就有发泄才华的资本,任性的程度会进一步加剧。如果有火止泄,就不会肆意妄为地乱发泄,此时就有成大器的可能。 例二, 乾造:辛亥 辛丑 戊申 戊午 生时得午火,年月伤官辛金泄秀,其人才华卓著,双博士。 戊是土的本气,己土是田园疏松之土,必要的时候,己土可以变成戊土,如砌墙,垒大坝。 一切戊土的具象都是在打比方,戊土的精神实质是一切高大、厚重、稳固物体或群体的象征。 第二讲 戊土强与弱,体象歌来说 戊土的体象。 前面讲了戊土的精神实质,戊土是高山、大地的象征,一切高大、厚重、稳固之类的基础事物,都可以用戊土来表达。今天的内容是戊土的体象,先看一个例子。 乾造:壬午 癸卯 戊寅 壬戌(1942年生人) 大运:甲辰 乙巳 丙午 丁未 戊申 己酉 庚戌 大致是二十年前的一天,我带着这个八字去请教师父。以前师父是用身太弱的旺衰状态来看他的兄弟姊妹数,一口断定是同胞共有十二胎,损五存七。事实正是如此,这就让我深信此戊土属于弱的状态。然而,就身弱而言,少年行甲乙运理当不会好,但事实上初运却并不坏,这又是为何呢?那天,天气很清爽,师父白天人多,不怎么理我,我又是他新收的弟子,要我等。没办法,我只好耐心地等着,直到天完全暗了下来,他还没理我。以前每到下午我都要回家的,即使我不想走,师父也要我回去。他经常说,父母在,不远游。可今天却没要我走,我心中十分高兴,从吃晚饭,到饭后的洗浴,我表现得特别的温顺体贴,他好象体会到做师父的一种快乐。更让我喜出望外的是,这天晚上居然让我与他同塌而睡,我明显有点受宠若惊的样子。躺在床上,我摸了摸他的伤口,满口都是关心他的话,直到师父主动引我言归正传为止。 “身旺,宜抑宜泄;身弱,喜生喜扶,这是一般的法则。”他说到主题了,我就特别地安静,生怕听漏了一个字。 “可是,这八字里面有一个关键点,我要是不说,你们就很难明白。” “你记下这首诗: 戊土城墙堤岸同,振江河海要根重 柱中带合形还壮,日下乘虚势必穷。 力薄不胜金漏泄,功成安用木疏通。 平生最爱东南建,身旺东南健失中。” 我的记性不错,他念完,我就背给他听了。但我还有许多不明白的,我问师父,“什么叫戊土带合形还壮?” “这个八字中不是有个癸水吗,戊癸一合,戊土立刻强旺起来了,戊土一强旺起来,就能胜任官杀。戊土爱甲是他的本性,乙是正官星,戊土因合而壮大,当然甲乙运不坏。” 师父那晚讲了许多天干的特性,虽然当时好多地方不明白,但这个戊土带合形还壮,确实给我启发很大。 戊土有城墙、堤岸之称,皆言戊土厚重,振江河海,大有作为。例如,乾造:癸丑 甲寅 戊子 癸亥 因为戊癸带合形还壮,戊土能任官杀,行身旺七杀运都安然无事,丙戌年财气还很不错。还有两个乾造:1、癸巳 壬戌 戊申 戊午 2、辛亥 辛丑 戊申 戊午 为什么皆要以午火为用?正是因为“力薄不胜金漏泄”,泄气太重,必要火来止泄的原因。 戊土以水为财,无水难有作为,水太重,又会冲垮堤岸或城墙。所以,戊土喜根重而稳固。戊土很弱的时候,怕大水冲堤,但是只要柱中有癸水透出相合,形体就能壮大起来,戊癸之合,有如水泥钢筋结构,其性质变的非常坚硬。 八字中能使戊变弱的不是官杀,而是金的泄气。戊土气不通顺的时候,不可用木去疏通,见癸水是相合;见壬水,是冲撞;戊不通气,还是用金。只是用金须防泄气太重,此正是“力薄不胜金漏泄,功成安用木疏通”的意思。戊土生来喜欢木与火,行东南方运多数能发达,但身太旺,再行南方运,也容易失去中和平衡。正所谓:平生最爱东南建,身旺东南健失中。 第三讲 坐艮怕逢冲,从强慎言贵 戊土的气势。 戊是阳干,阳干都有气势。戊土的气势是趋向于静、稳固、牢不可破。戊土固重,既中且正。静翕动辟,万物司命。戊土气势蓬勃,静如铜墙铁壁,动则雷霆万钧。水润物生,火燥物病。若在艮坤,怕冲宜静。戊土在人体内代表胃,喜湿,怕燥,太干燥则胃气不和,自然生病。大地中的戊土也是如此,高山大漠只要有水,就能生长植物,种植庄稼,无水则是不毛之地。有用的戊土必须见水,有水就能生木,木又可以稳固水土。戊土总的气势是要稳固,坐艮坤(是戊寅和戊申)都有不够稳定的兆头,遇上金木交战或寅申相冲或相刑,戊土就有大厦倾覆之危。 例一 坤造:丙午 甲午 戊戌 丙辰 此女先是难结婚,后来好不容易结婚了,却一直不生孩子。原因就是戊土太燥,辰中癸水被冲坏,一片火炎土燥。癸水是妇女生育的根本,癸水严重受伤,生育的机能就失去了。也因时逢辰土,干透甲木,此女并非无用之人。 上面是说戊土的总体气势,前面讲过“阳干从气容易从势难。”戊土也一样,戊土只要见一点火,就有了依靠,火是戊土的生气,其它金水木的气势再旺,它也从气不从势。也就是说,有火在局,戊土再弱,也只能作太弱或偏弱看。若要它从,局中无火是一个先决条件。 例二 乾造:庚子 戊寅 辛酉 庚子 月干戊土得遇寅中丙火,丙火是它的生气,戊土虽然弱,但依然是从气不从势。戊土为印星,代表其母,全局看,丙的环境很差,果然母亲一生风花雪月,劳苦奔波。为留下好名声,放弃了很多的富贵。目前看,体质很差,恐难长寿。假如丙不起作用,戊土就从其它旺势了,此时的丙火相反要作环境很好来论,那时其母则是富贵有寿。 例三,乾造:辛丑 庚子 戊戌 癸亥 […]
View Details