前言
之前写过一遍比较粗略的jenkins + docker部署文章,这次有时间,认真的写一遍比较详细完整的jenkins +docker部署文章,由于有时间所以这次就多写一点吧,记录下我自己对docker的看法,以及它的作用,若有不对之处还请指出。
Docker的作用
其实一般的小型项目是用不上也没有必要使用docker的,docker的作用是资源隔离以及快速部署,在项目比较小的时间我们完全可以手动上传jar/war 包到服务器上,并输入命令启动即可,但是,想像一下如果你用上了微服务,好几个团队开发,那么这些服务加起来可能有好几十个,这个时候再手动去部署,想想看你要做什么? 1、安装 JDK 2、配置环境变量 3、安装一些必要的软件如TOMCAT之类的 4、等等不止这些,有些服务甚至有可能要修改JDK配置。
每部署一台机器都要做如此多的操作是不是得烦死?如果是这种情况下,那么docker就可以派上用场了,我们可以直接把安装好各种软件以及配置的系统环境打包成一个docker镜像并保存在某个镜像中心,然后其它服务器只需几行命令就可以轻松使用打包好的环境并完成部署了,而且由于各个docker容器之间是隔离了,一台机器可以部署多种镜像也不会有影响。
有感而发
最近网上看到很多老程序员们在谈论中年危机,仿佛看到了几年后的自己,我自认为自己也不属于那无可替代的1%,而且自己也确实感觉到了行情不好(如工资下降,面试变少等),感觉自己有可能以后会不再干程序员,希望留下来的文章能够帮到其他人吧,好了,下面开始正题。
一、安装docker
最好将jenkins和docker安装在同一台服务器上,当然不是同一台服务器也可以,只不过要多一个步骤,docker安装步骤如下,以centOs为例:
卸载旧版本:
- sudo yum remove docker \
- docker-client \
- docker-client-latest \
- docker-common \
- docker-latest \
- docker-latest-logrotate \
- docker-logrotate \
- docker-engine
设置docker存储库:
- sudo yum install -y yum-utils \
- device-mapper-persistent-data \
- lvm2
- sudo yum-config-manager \
- --add-repo \
- https://download.docker.com/linux/centos/docker-ce.repo
安装docker:
sudo yum install docker-ce docker-ce-cli containerd.io
启动docker:
sudo systemctl start docker
测试docker:
sudo docker run hello-world
看到打印hello world! 就表示成功了。
more >>总结一下微信扫码支付、小程序支付的几个坑
在调用微信支付接口中遇到各种问题,真不知道是哪个人才写的接口文档,几个简单的接口调了好几天。
1、小程序获取code2Session时errcode出错时是会返回错误码,但正常时居然连这个字段都不返回了,说好的正常返回0呢?
2、小程序支付的时间戳参数,在调用小程序支付接口时需要后台生成签名,有个timeStamp参数,文档上写的是当前时间,注意这里有个坑,它要的是到秒级别的,如果用java直接System.currentTimeMillis() 是不行的!会提示签名错误!
正确做法是: System.currentTimeMillis() / 1000
3、小程序支付签名时key是要拼接的,文档上没有写明,示例上是写的了搞得不知道以哪个为准。
4、建议所有签名统一MD5,否则 不知道哪个地方默认了其它签名就会签名通不过
5、小程序支付,也就是交易类型是JSAPI的情况下是要传openId的,另外appId appkey sercrt mechId 等有一个不对应就会报签名失败,这点要注意。
6、微信支付demo里代码的一个大坑,其中有一段:
- public WXPay(){
-
- if(useSandBox){
- signType = MD5;
- }else{
- signType = HMACSHA256
- }
- }
注意这里一定要改下,改成统一的MD5 :
- public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport, final boolean useSandbox) throws Exception {
- this.config = config;
- this.notifyUrl = notifyUrl;
- this.autoReport = autoReport;
- this.useSandbox = useSandbox;
- if (useSandbox) {
- this.signType = SignType.MD5; // 沙箱环境
- }
- else {
- //TODO 默认用MD5
- this.signType = SignType.MD5;
- }
- this.wxPayRequest = new WXPayRequest(config);
- }
否则你会发现接收支付成功结果通知的时候怎么老是签名不通过,然后再发现换成HMACSHA256就通过了,看文档里明明写的是默认MD5, 问题就出现在这,demo代码 默认却是HMACSHA256 !
7、沙盒模式测试时报金额不正确,这个问题我自己也不记得在哪看到的了,总之微信文档上是没找到,其原因是沙盒模式测试的金额(total_fee)必须是固定的330 !
另外,沙盒模式下的付款码是不能付款的,不能付款也就是说没法测试接收支付结果通知,只能上正式用1分钱测。
最后记一下接收支付结果通知spring mvc 的接收方式代码:
- @RequestMapping(value="receiveResult",consumes = {MediaType.TEXT_XML_VALUE},produces = {MediaType.TEXT_XML_VALUE})
- public String receiveResult(@NotNull @RequestBody String xml){
- //TODO
- ....
-
- }
算是比较偷懒了,不怕麻烦的建议用实体类加注解 接收
使用Jenkins + docker 自动化部署Spring Cloud微服务【使用maven插件dockerfile-maven-plugin自动构建镜像】
一、配置pom.xml
上一章里我们已经配置好了jenkins,接下来配置maven项目插件,pom.xml如下:
- <plugin>
- <groupId>com.spotify</groupId>
- <artifactId>dockerfile-maven-plugin</artifactId>
- <version>1.4.9</version>
- <!-- 运行mvn 打包命令时会自动打包镜像并推送 -->
- <executions>
- <execution>
- <id>default</id>
- <goals>
- <goal>build</goal>
- <!-- 推送 -->
- <goal>push</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <skip>${dockerfile.skip}</skip>
- <!-- docker连接地址 -->
- <dockerHost>http://http://192.168.2.55:2375/</dockerHost>
- <!-- 测试推送到docker hub的仓库 -->
- <repository>yourAccount/${project.artifactId}</repository>
-
- <username>yourAccount</username>
- <password>****</password>
- <!-- 从master/target目录build -->
- <buildDirectory>${session.executionRootDirectory}/target/</buildDirectory>
- <!-- push镜像需要在maven中配置镜像地址,目录测试服务器的maven路径是/root/.jenkins/tools/hudson.tasks.Maven_MavenInstallation/maven-3.6.0/conf -->
- <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
- <!-- 这个是你要在dockerfile里使用的maven变量,在此处配置后可在dockerfile里使用该 变量 -->
- <buildArgs>
- <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
- <SERVER_PORT>${dockerfile.port}</SERVER_PORT>
- </buildArgs>
- </configuration>
- </plugin>
该插件能帮助我们完成:
1、自动构建docker镜像
2、自动将docker镜像推送到远程库
3、半自动启动docker容器
二、添加dockerfile
在你的项目根目录新建一个dockerfile文件(名字就叫dockerfile,没有后缀),编辑内容,配置以下:
- FROM java:8-jre-alpine
- #FROM 使用java环境镜像
- #设置挂载目录,使用项目名作为日志文件夹,所有项目的日志统一都是spring.log,因此使用文件夹区分
- VOLUME /usr/docker/logs
- ARG JAR_FILE
- #将该项目的JAR添加到镜像中
- ADD ${JAR_FILE} app.jar
- #RUN bash -c 'touch app.jar'
- #配置该项目要映射出去的端口,目前和项目配置文件中端口不一样是为了测试用,生产请修改为一致的端口,如需使用配置文件中的端口,把--server.port=删除,并将EXPOSE修改为项目配置文件对应的端口
- EXPOSE 8399
- #jar运行命令
- ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar","--spring.profiles.active=test","--server.port=8399"]
该文件可以看作是docker容器的运行配置,其中FROM JAVA:8 配置了java环境的docker镜像,该镜像的版本号是:8-jre-alpine,远程镜像可以从duckerhub搜索,如果仅仅是运行java代码的项目,那么java镜像足以。
PS:如果是结构的maven项目,那么每个maven子项目都需要一个dockerfile,运行maven打包命令时要跳过parent项目打包,因为parent是一个空项目仅仅是用于配置通用的pom.xml , pom.xml插件配置中有这么一段:
<skip>${dockerfile.skip}</skip> ,表示是否跳过打包,在所有的parent 项目的pom.xml中添加如下配置即可:
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <dockerfile.skip>true</dockerfile.skip>
- </properties>
这样打包插件就不会打包parent项目了。
more >>
使用Jenkins + Gitlab自动构建Spring Boot项目,并部署到远程服务器上
前言
最近又重新弄了一下jenkins,虽然之前也有弄过但是都是在本地服务器部署,而且记录的不够详细,因此这次将写下详细部署过程。
一、下载并启动Jenkins
下载地址:https://jenkins.io/download/ ,选择下载war包
下载完成后用FTP上传到服务器上输入启动命令:nohup java -jar jenkins.war --httpPort=7070 > jenkins.out 2>&1 & ,后面参数是启动端口。
启动完成后浏览器打开http://ip:7070 进入jenkins操作页面,此时会出现一个页面要求你输入密码,此时回到linux控制台,输入tail -100f jenkins.out 查看启动日志,注意看日志,它会打印你的初始密码,复制初始密码并点下一步,后面的操作按提示来就可以了,可以安装推荐的插件也可以自己选,下面将进入JENKINS配置步骤。
二、配置JENKINS
点击jenkins 系统管理->插件管理 点击available(可选插件)选项卡 ,在右上角的搜索框搜索并安装如下几个插件:
1、Git plugin Git client plugin
4、Gitlab Hook Plugin(可选)
再次点击JENKINS的系统管理 -> 系统设置 ,找到Publish over SSH这一栏,如下图配置要发布到该服务器上的连接配置
参数说明:
name:可以随便起 hostname:连接IP地址 Remote Directory: 远程文件夹路径,发布的项目将会在此目录下
username:账号 password:密码 , 除了用账号密码连接外还可以通过private key连接,由于麻烦我在这选择了账号密码连接
more >>
简单的nginx反向代理配置
实用nginx反向代理可实现 url转发, 如输入www.cc.com 直接转发到 127.0.0.1:8080/project/ 实用nginx 可直接输入url就可访问到tomcat的某目录下 端口号也可不用输入 很适合2个域名用同一台服务器的情况
下面是nginx的conf配置
首先在nginx.conf引入 配置文件include vhost.conf;
新建vhost.conf
1 | ## Basic reverse proxy server ## |
换新博客啦!
换了新的个人博客啦,通过hexo + github pages 白嫖个人博客美滋滋
新博客将会只保留一些比较有内容的博文,剩余的一些BUG记录,小问题等请访问老博客链接:https://blog.csdn.net/u012280292
魔幻之都爱丁堡2022年3-6月纪事
前言
疫情期间在魔幻之都3-6月发生了一系列的事情,暴露了许多平时看不到的黑暗,所以我认为有必要记录下来提醒自己。
具体的时间已记不大清,所发生的事件按时间排序。
以SH缩写作为代名词,以防被检测到。
- 2022-6-7 不幸的是还是被检测到了,只能将此文章下架,果然牛马不应该说话 *
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true