docker

博智服务端项目部署规范

博智服务端项目部署规范 本文为笔者在公司推行的方案,在此分享出来,欢迎留言讨论。 概述 所有项目代码需提交到 公司GitLab 服务,并使用develop、release和master三个分支来分别保存开发版、测试版和稳定版代码。使用 DaoCloud Docker容器云服务来自动化部署应用,以提升部署效率和减少人为错误。具体实现方案请参考 博智Git分支模型和Docker自动化部署方案 。 应用域名和服务端口 为了避免不同应用容器运行在同一台服务器上时出现Docker映射端口冲突,需要统一分配所有应用的端口号。同时为了清楚知道所有业务的域名使用情况,这里也列出了各业务系统使用的域名。其中bicitech.cn用于公司,bicisims.com用于产品。 应用 域名 端口 备注 API网关 api.bicisims.

docker

博智Git分支模型和Docker自动化部署方案

博智Git分支模型和Docker自动化部署方案 本文为笔者在公司推行的方案,在此分享出来,欢迎留言讨论。 整体方案 当开发人员push代码到develop、release和master分支时将自动触发Docker镜像构建并相应部署到内网开发环境、阿里云VPC测试环境和阿里云VPC生产环境。 Git分支模型 我们使用Git-flow工具来简化分支操作。图中develop和master为长线分支,feature、release和hotfix为短线分支。develop、release和master分别发布到内网开发环境、测试环境和生产环境。develop分支用来汇总下个版本的提交,在下个版本的release分支创建之前不允许提交非下个版本的功能到develop分支。当下个版本的功能开发完成后,从develop分支创建下个版本的release分支来测试,测试过程中Bug修复提交到release分支。测试完成后,合并release分支到develop分支和master分支,并发布master分支到生产环境,然后删除release分支。 初始化 为了能在Git项目里使用git flow命令,需要先初始化Git-flow。 > git flow init

react native

React Native跨平台移动应用开发课程答疑

本文是网易云课堂课程 React Native跨平台移动应用开发 的学员问题整理和解答。大家可以在课程讨论区里提交问题,我会不定期的对问题汇总和整理,并在这里作解答。 环境搭建 macOS里安卓模拟器跟Docker运行冲突 如果安卓模拟器启用了HAXM优化,由于Docker也使用了macOS的虚拟化系统,则会出现冲突。该问题尚待解决,具体可查看Issue Docker for Mac conflict with Android emulator 。 安装应用到小米手机上调试失败 MIUI优化会阻止调试时安装应用到小米手机。打开手机,依次进入 设置 > 其它高级设置 > 开发者选项,找到“启用MIUI优化”选项,

react native

React Native跨平台移动应用开发实战 - 打包发布

本文隶属于文章系列 React Native跨平台移动应用开发实战 ,讲解应用打包和发布到应用市场。 iOS打包 发布到AppStore 安卓打包 发布到GooglePlay和国内安卓市场 iOS打包 在Xcode 8里就可以完成打包和上传安装包到AppStore,但在打包之前需要到Apple开发者网站配置好证书、应用信息和Provision文件等。 打开 Apple Developer 网站,选择“Account”,然后选择“Certificates, Identifiers & Profiles”,就能看到如下界面。 在这里需要完成以下几项任务: 在Certificates下创建Distribution证书 在Identifiers下新建一个App ID 在Provisioning Profiles下为Distribution创建配置文件 以上配置完成后,打开Xcode

react native

React Native跨平台移动应用开发实战 - 首页

本文隶属于文章系列 React Native跨平台移动应用开发实战 ,讲解首页如何开发。首页相对来说比较复杂,用到了RN的 ScrollView 和 ListView 组件。学完首页后,其它页面类似,因此关于功能开发方面的讲解到此结束。 RN的ListView在ScrollView的基础上做了很多性能优化,以保证在列表项非常复杂和列表很长的时候仍然能够保证页面滚动的流畅性。当然与此相伴,在使用上也会更复杂。 在页面里引入ListView组件。 在componentWillMount里创建ListView的DataSource,注意必需指定rowHasChanged来帮助ListView判断列表项是否需要重新渲染。 在componentWillReceiveProps里更新DataSource,否则即便数据发生了变化,列表也不会更新。 下拉刷新的时候,在列表上方显示Loading图标。 在列表滚动到结尾时,加载更多数据。 首页组件挂载后,获取列表数据,刷新导航。因为导航里的城市和运动信息可动态修改,所以需要刷新导航来动态生成,而不是由Layout来生成固定的。

react native

React Native跨平台移动应用开发实战 - 注册登录

本文隶属于文章系列 React Native跨平台移动应用开发实战 ,讲解用户注册和登录。由于篇幅所限,后面关于功能的讲解中我们重点关注component部分的代码,container、action和reducer代码请查阅Github上的公开库 zqc-app-demo。 注册登录选择页 注册 登录 注册登录选择页 启动时如果检测到没有登录,则进入此页让用户选择注册新帐号还是使用现有帐号登录。退出登录后也应进入此页。 注册 为了避免让用户反感注册过程中填写资料,应尽量减少必填信息,并且分步骤让用户填写,而不是在一个页面中填写完所有,从视觉上让用户觉得轻松一些。对于移动应用来说,最好使用手机号注册,方便日后联系用户。如果使用手机号注册,需要验证手机号的真实性。 有关表单数据校验、网络请求和缓存方面的技术资料可阅读前一篇文章 React Native跨平台移动应用开发实战 - 数据同步。

react native

React Native跨平台移动应用开发实战 - 数据同步

本文隶属于文章系列 React Native跨平台移动应用开发实战 ,讲解应用和服务端之间如何同步数据。一方面应用里用户输入的数据需要提交到服务端,另一方面应用也需要从服务端获取其他用户提交的数据。涉及的工作包括表单数据验证,请求服务端API,缓存服务端响应数据等。这些是纯技术层面的工作,不涉及具体业务逻辑,但却是后面业务逻辑开发工作开展的前提。 表单数据验证 请求API 缓存数据 表单数据验证 以登录页面为例,表单数据验证效果如下。在用户输入的同时,会实时验证输入数据。如果验证失败,将在导航栏下方给予提示。这种验证方式比提交数据后由服务端来验证并反馈给用户在体验方面更好。当然处于安全考虑,服务端数据验证仍然需要。 在用户输入过程中,监听变化,如果数据发生变化则调用saveInput来保存新数据。保存数据的同时会调用validateInput来验证数据,验证结果保存在store的error.input属性下。 如果验证结果不为空,表示输入有误,

react native

React Native跨平台移动应用开发实战 - 启动

本文隶属于文章系列 React Native跨平台移动应用开发实战 ,讲解应用的启动,启动需要完成检测网络、获取位置、加载持久化数据、检查登录状态等工作。 入口 Store创建与持久化 引导页 入口 入口文件负责store的创建和加载路由,然后就进入路由里定义的初始页,也就是引导页Bootstrap。可以看到iOS和安卓的入口文件内容一样,都是调用setup来完成。setup里创建store,并加载路由,然后应用就进入到引导页。 Store创建与持久化 Redux的store支持通过插件来扩展其功能。 我们使用 Logger for Redux 来打印每个action及其作用前后的状态,方便出现问题时分析到底是哪个action引起。 另外还使用了 Redux Persist 来持久化store到存储,以便应用重启后能恢复到上次退出时的状态,

react native

React Native跨平台移动应用开发实战 - 布局和导航

本文隶属于文章系列 React Native跨平台移动应用开发实战 ,讲解应用整体层面的一些东西,包括布局、导航,以及错误、进度、Loading等信息显示。 布局 导航 进度提示 Loading 错误提示 布局 先来看一下完整的布局是怎样的一个效果。如下图所示,最顶部是状态栏和导航,下方紧接着的是进度条(有后台任务处理时出现,比如图片压缩),然后是内容区,页面中间是Loading图标(表明有网络请求正在进行),偏下方的位置是错误信息(出错时才有),最底部是Tab栏。 一个好的布局既要灵活满足不同页面的需求,比如有的页面没有导航条,有的没有Tab栏,还能尽量让页面不关心这些全局的界面元素。一个应用里的页面尽量使用同一个布局,这样能避免许多重复性的工作,

react native

React Native跨平台移动应用开发实战 - 技术栈

本文隶属于文章系列 React Native跨平台移动应用开发实战 ,介绍RN应用开发用到的各项技术。读者在进行RN应用开发前,需要掌握这些技术。RN应用开发里面,RN只负责UI的绘制和跟原生系统的通信,对于一个完整的应用来说,还有许多技术层面的东西需要考虑,包括导航、应用状态管理和持久化、数据缓存、网络请求、错误处理等。 JavaScript Flexbox Layout React Redux 项目结构 JavaScript RN使用的JS引擎(下文提到引擎时如无特别说明即为该引擎)为Safari浏览器使用的引擎,当在Chrome浏览器里远程调试时,既然是运行在浏览器里,那就当然是V8引擎了。这两个引擎支持的JS语言特性非常相似,但也不排除会遇到两者行为不一致的地方,开发过程中应当避免使用这些特定于平台的特性。完整的说明详见官方文档,JavaScript

react native

React Native跨平台移动应用开发实战 - 搭建开发和调试环境

本文隶属于文章系列 React Native跨平台移动应用开发实战 ,讲解RN开发和调试环境的搭建。开发和调试环境的易用性对后续的工作效率影响很大,值得花时间来准备。由于笔者是Mac电脑,因此下文如无特别说明,都是在Mac OS X环境下的操作。 安装开发工具 在设备上运行 Dev域名配置 Debugging 安装开发工具 RN开发工具包括: node 运行打包服务Packager及各种JS工具 watchman 检测文件修改 react-native-cli RN命令行工具,功能包括启动Packager、在模拟器或设备上运行应用、链接原生组件库、打印应用日志、打包发布包等 Xcode iOS应用开发IDE Android Studio 安卓应用开发IDE

react native

React Native跨平台移动应用开发实战 - 开篇

React Native介绍 React Native (简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的UI框架 React 在原生移动应用平台的衍生产物,目前支持iOS和安卓两大平台。RN使用Javascript语言,类似于HTML的JSX,以及CSS来开发移动应用,因此熟悉Web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。 RN运行时包含一个原生主线程和一个JS线程,JS线程执行JS代码,负责界面布局和业务逻辑处理,原生线程负责界面渲染和原生功能执行。RN尽量使用原生组件(现有原生组件经过封装后可在JS里调用),以避免重复造轮子。这样有很多好处,一是可以利用现有的大量的原生组件;二是可以达到跟原生组件一样的性能;三是通过JS封装过后的组件可以支持跨平台。 JS在RN里面的作用类似于Python这样的支持调用原生C库的脚本语言,都是起着“胶水”的作用。复杂计算和系统功能通过调用原生接口来完成,流程控制和业务逻辑则在“胶水”语言里完成。

docker

Go + Docker API服务开发和部署 - 部署篇

本文是 Go + Docker API服务开发和部署 文章系列的“部署篇”,主要讲解如何使用Docker来搭建开发和测试环境,以及部署应用到生产环境。 Docker简介 使用Docker来打包应用镜像 使用Docker Compose来部署应用及其依赖服务 使用Docker Machine来管理容器主机 使用Docker来管理测试环境 Docker简介 相信很多开发和测试人员都遇到过搭建环境的问题。新的开发人员加入团队需要花费一两天甚至更长时间来搭建一套完整的开发环境。测试人员搭建测试环境同样如此,并且如果想再多搭一套来做压力测试,又得重复一次,非常的枯燥和无趣。有没有可能使用一个标准的环境搭建脚本就能把应用及其依赖服务都Run起来?如果使用传统的脚本编写方式,很困难。每个人的工作环境千差万别,比如有的用Windows有的用Mac,脚本很难做到一次编写到处运行。并且编写脚本的人需要知晓所有应用和服务的部署细节,工作量很大。如果只有一台服务器,还要想法应对多套环境的端口、路径等系统资源冲突的问题。

go

Go + Docker API服务开发和部署 - 测试篇

本文是 Go + Docker API服务开发和部署 文章系列的“测试篇”,主要讲解如何使用Goconvey来进行单元测试、Model测试和API测试。 Goconvey介绍 单元测试 Model测试 API测试 Goconvey介绍 Go内置了“testing”包用来做单元测试和性能测试。Goconvey 核心也是使用“testing”包,但增加了行为测试、丰富的测试断言、WebUI、自动监测更新等功能,有效提升了测试开发效率和体验。 单元测试 先来看看不依赖外部环境的单元测试如何编写,借此了解Goconvey的用法。 单元测试示例: // test/add.go package

go

Go + Docker API服务开发和部署 - 开发篇

本文是 Go + Docker API服务开发和部署 文章系列的开发篇,主要讲解如何使用Go来开发一个适用于生产环境的API服务。 API服务功能介绍 Echo Web框架简介 代码目录结构 MVCS模式介绍 使用Godep来管理依赖 使用Viper来管理配置 使用Cobra来管理子命令 使用Logrus来打印日志 Model层实现 Service层实现 Controller层实现 使用Supervisor来管理服务进程 使用Fswatch来自动部署代码更新 打印完整的请求和响应来辅助调试 API服务功能介绍 本文里我们要实现的API服务功能为几乎每个网站或移动应用都需要的用户系统功能,包括注册、登录、编辑资料和查询信息等接口。数据传输使用HTTP协议,响应结果为JSON格式。 Echo Web框架简介 Echo 是一个Go的Web Server

go

Go + Docker API服务开发和部署 - 开篇

为什么选择Go + Docker 笔者之前的项目开发主要使用Python。Python的优势在于简洁强大的语法,丰富的库包,以及极高的开发效率,而劣势在于通过解释器执行使得性能不够理想,缺少类型检查导致代码质量难以保证,全局锁的存在限制了并发性能,此外缺乏对并发编程的良好支持。这些劣势正好是Go的优势。虽然在开发效率上Go跟Python还有差距,但相比于其它静态类型语言,Go已经有很大提升了。 此外,笔者之前的项目部署主要使用virtualenv(Python 2)和pyvenv(Python 3)来创建独立的应用环境,Supervisor来管理应用进程,Fabric来编写自动化发布脚本。部署应用一键完成,已经能较好满足大多数项目的部署需求。不过不太满意的是,每次新增服务器都要重复进行配置系统,安装软件,优化系统参数等工作,如果要迁移到其它机房或云服务则会更麻烦。问题的根源在于,这种部署方式仅仅把应用依赖的语言库包跟应用一起打了包,