app-version

docker基础 | Dockerfile创建自定义镜像

早过忘川 提交于 2020-02-27 13:57:48
Dockerfile是一个文本格式的配置文件,用户可以使用dockerfile来快速创建自定义镜像。指令包括“配置指令”、“操作指令”。 配置指令 FROM FROM debian:jessie dockerfile的第一行指令,指定基础镜像 ARG ARG VERSION=9.3 定义创建镜像过程中的临时变量,相当于dockerfile运行中的临时变量 LABEL LABEL version="1.1.1.1" 为生成的镜像添加元数据标签信息,方便过滤 EXPOSE EXPOSS 22 80 443 声明镜像内服务监听端口,如果需要映射出来,启动容器时使用 -p hostport:container_port 参数映射指定端口。 ENV ENV APP_VERSION=1.0.0 指定环境变量,方便给后续 RUN 使用,可以被docker启动时指定的--env给覆盖 ENTRYPOINT ENTRYPOINT ["tail"] 指定默认入口命令,作为启动容器时候的根命令执行,每个dockerfile中只有一个ENTRYPOINT,运行时可以被--entrypoint参数覆盖,与 CMD 参数的区别,在“操作指令CMD中说明” VOLUME VOLUME ["/data"] 挂载数据卷 USER USER daemon 指定运行容器时的用户名或UID

Golang写的程序注入一些版本信息,Debug速度自然快几倍!

落花浮王杯 提交于 2020-02-27 01:27:27
背景 Go程序运行时打印git提交信息编译信息 Golang编译信息注入程序 当在debug的过程中,我们需要明确当前运行的go程序是什么版本 不要浪费时间在确认版本的问题上 在go build编译的时候是可以注入外部参数的 让go程序在运行的时候就可以打印编译时候的参数情况 以gitlab-runner为例 gitlab-runner -v Version: 11.10.1 Git revision: 1f513601 Git branch: 11-10-stable GO version: go1.8.7 Built: 2019-04-24T09:29:18+0000 OS/Arch: linux/amd64 最终实现的go程序运行时终端打印的信息如下 App Name: app-api App Version: v2.0.1 Build version: 84d4ffb verdor Build time: 2019-08-06T09:58:48+0800 Git revision: 84d4ffb Git branch: master Golang Version: go version go1.12.2 linux/amd64 2019-07-24 10:53:34.732 11516: http server started listening on [:20000]

H5开发遇到的问题,以及苹果兼容的一些坑

那年仲夏 提交于 2020-02-26 23:10:30
1.H5的localStorage第二次打开的时候不会清除,例如: 微信公众号第一次登陆之后存一个 localStorage.setItem("login","true"); 然后关闭微信,再重新进去,获取 localStorage.getItem("login"); 这个打印出来的值是为true的。 2.苹果手机微信用的WKWebview内核,跨域请求接口的时候不会携带上cookie,无法验证登录,会导致接口无权限或者404。 解决方法:服务器采用nginx反向代理,项目和请求接口的链接都换成相同的域名,解决跨域问题,也解决了苹果微信跨域请求不携带cookie的问题。 3.vue项目保存登录状态的问题,刷新后导致全局变量改变,登录状态还原导致刷新就会退出登录。 解决方法:刷新的时候把全局变量存到localStorage window.addEventListener("beforeunload",()=>{ localStorage.setItem("userState",JSON.stringify(state)) }); 在页面重新加载时再从localStorage里面更新全局变量 localStorage.getItem("userState") && this.$store.replaceState(Object.assign(this.$store.state,JSON

设计 API 接口,实现统一格式返回

倾然丶 夕夏残阳落幕 提交于 2020-02-26 13:12:05
来源:老顾聊技术 前言 在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式。 一般系统的大致整体架构图如下: 接口交互 前端和后端进行交互,前端按照约定请求URL路径,并传入相关参数,后端服务器接收请求,进行业务处理,返回数据给前端。 针对URL路径的restful风格,以及传入参数的公共请求头的要求(如:app_version,api_version,device等),这里就不介绍了,注重介绍一下后端服务器如何实现把数据返回给前端 返回格式 后端返回给前端我们一般用JSON体方式,定义如下: { #返回状态码 code:integer, #返回信息描述 message:string, #返回值 data:object } CODE状态码 code返回状态码,一般小伙伴们是在开发的时候需要什么,就添加什么。 如接口要返回用户权限异常,我们加一个状态码为101吧,下一次又要加一个数据参数异常,就加一个102的状态码。这样虽然能够照常满足业务,但状态码太凌乱了 我们应该可以参考HTTP请求返回的状态码 :下面是常见的HTTP状态码: 200 – 请求成功 301 – 资源(网页等)被永久转移到其它URL 404 – 请求的资源(网页等)不存在 500 – 内部服务器错误 我们可以参考这样的设计,这样的好处就把错误类型归类到某个区间内,如果区间不够

uni-app: 如何实现增量更新功能?

匆匆过客 提交于 2019-12-26 11:52:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 都知道,很多APP都有增量更新功能, Uni APP 也是在今年初,推出了增量更新功能,今天我们就来学习一波。 当然,很多应用市场为了防止开发者不经市场审核许可,给用户提供违法内容,对增量更新大多持排斥态度,特别是 apple 。所以拥有增量更新的app,需要注意以下几点: 1、上架审核期间不要弹出增量更新提示 2、增量更新内容使用 https 下载,避免被三方网络劫持 3、不要更新违法内容、不要通过增量更新破坏应用市场的利益,比如iOS的虚拟支付要给 Apple 抽佣等 通过本章节你能学到那些? 1、如何实现增量更新功能 2、Uni-App 如何制作增量更新升级包 3、Uni-App 增量更新功能需要注意些什么 4、Uni-App 部分相关api学习 话不多说,直接上干货! 如何实现增量更新功能 这里不是针对 Uni-App 开发,所有的增量更新都应如此(但代码以 Uni-App 为例)。 1、 app 端,先调用服务端接口,判断是否需要更新 2、需要更新,直接下载更新升级包 3、安装升级包, app 重启即可完成升级 ok,我们以 Uni-App 为例,看看代码具体实现 客户端实现 在 根目录 App.vue 的 onLaunch 中检测升级,代码如下: // #ifdef APP-PLUS plus

微服务下配置管理中心 SCCA

强颜欢笑 提交于 2019-12-04 18:03:18
SCCA 简介 SCCA 全称 spring-cloud-config-admin,微服务下 Spring Boot 应用(包含 Spring Cloud)统一的配置管理平台。 Github 地址: spring-cloud-config-admin 核心贡献者: 程序员DD | stone-jin 标签:轻量、易用、视觉好、交互好 部署 SCCA 1、运行 MySQL,已有,请忽略此步骤 docker run --name mariadb -e MYSQL_ROOT_PASSWORD=scca-pwd -d mariadb 2、创建配置文件,假设路径为 ~/scca/bootstrap.properties # server spring.application.name=scca-server server.port=8080 # scca-rest-server api url prefix scca.rest.context-path=/xhr # scca-ui-server embed scca-rest-server scca.ui.use-embed-scca-rest-server=true # Datasource spring.datasource.url=jdbc:mysql://mariadb:3306/config-db spring

JavaScript权威指南笔记14

爱⌒轻易说出口 提交于 2019-12-04 10:26:49
第14章、window对象 1、计时器 I-1 setTimeout()和setInterval()可在指定时间后调用 setTimeout()返回值可传递给clearTimeout()用于取消该函数的执行。 多久后执行。 setInterval()指定时间间隔里重复调用(每隔多久执行) 例:计时器 /* *安排函数f()在未来的调用模式 *在若干毫秒后调用f() *如果设置了interval并没有设置end参数,则对f()调用将不会停止 *只有指定了f(),才会从start=0的时刻开始 *调用invoke()不会阻塞,它会立即返回 */ function invoke(f,start,interval,end){ if(!start) start=0; if(arguments.length<=2) setTimeout(f,start); else{ setTimeout(repeat,start); function repeat(){ var h = setInterval(f,interval); //循环调用f() //在end毫秒后停止调用,前提是end已经定义了 if(end) setTimeout(function(){clearInterval(h);},end); } } } 若参数f不是函数而是字符串,那么这个字符串会在指定时间后进行求值(相当于eval(

从入门到实践:创作一个自己的 Helm Chart

穿精又带淫゛_ 提交于 2019-11-29 00:36:48
前言 我们平时在日常生活中会经常在不同的平台上与各种各样的应用打交道,比如从苹果的 App Store 里下载的淘宝、高德、支付宝等应用,或者是在 PC 端安装的 Word、Photoshop、Steam。这些各类平台上的应用程序,对用户而言,大多只需要点击安装就可使用。 然而,在云 (Kubernetes)上,部署一个应用往往却不是那么简单。如果想要部署一个应用程序到云上,首先要准备好它所需要的环境,打包成 Docker 镜像,进而把镜像放在部署文件 (Deployment) 中、配置服务 (Service)、应用所需的账户 (ServiceAccount) 及权限 (Role)、命名空间 (Namespace)、密钥信息 (Secret)、可持久化存储 (PersistentVolumes) 等资源。也就是编写一系列互相相关的 YAML 配置文件,将它们部署在 Kubernetes 集群上。 但是即便应用的开发者可以把这些 Docker 镜像存放在公共仓库中,并且将所需的 YAML 资源文件提供给用户,用户仍然需要自己去寻找这些资源文件,并把它们一一部署。倘若用户希望修改开发者提供的默认资源,比如使用更多的副本 (Replicas) 或是修改服务端口 (Port),他还需要自己去查需要在这些资源文件的哪些地方修改,更不用提版本变更与维护会给开发者和用户造成多少麻烦了。