Phoenix + 微信H5房卡棋牌三公搭建平台分布式部署验证
2018-03-09 13:57
260 查看
实验器材
微信H5房卡棋牌三公搭建平台(h5.fanshubbs.com)Docker联系Q1687054422
Docker compose
Elixir开发/运行环境
一个最基本的Phoenix聊天室,不含数据库,不含assets,不含brunch。
安装发布工具
Elixir社区目前比较推荐的发布工具是Distillery(蒸馏器),这次实验就用它。安装只需要在项目根目录的mix.exs里添加如下内容就行
defp deps do [ {:distillery, "~> 1.5", runtime: false} #<--- 这一行 ] end这里的
runtime: false表示distillery不会在web应用中用到,只在发布的时候用一下。
添加完后只需
mix deps.get一下就行。
发布配置
首先让distillery生成一些最基本的发布配置:$ mix release.init你会看到项目根目录下多了个
rel目录,里面只有一个空的
plugins目录和一个
config.exs文件。这个文件的配置用来发布到单台服务器已经足够了,但是要做集群还是不太够,因为我们要让各台服务器上的Phoenix应用能连起来相互通信。为此,我们需要给每个运行的实例一个名称(
name或
sname)。为了达到这个目的,我们需要一个
vm.args文件。这个文件记录了Erlang启动虚拟机时所需的命令行参数。但是这个文件长啥样?我们现release一个,让它自动生成一个
vm.args文件再说。
$ MIX_ENV=prod mix release --env prod这里的
MIX_ENV=prod是指“用Phoenix的prod环境的配置来运行发布任务”,这样做可以使项目的编译得到优化,比如去除debug信息等。而
--env prod指的是“按
rel/config.exs文件里
:prod环境的配置去构建发布版”。这个
prod和Phoenix的
prod的意义完全不同,所以两个都不能少。既然说到了
rel/config.exs里定义的环境,就先看看它长什么样吧。
Path.join(["rel", "plugins", "*.exs"]) |> Path.wildcard() |> Enum.map(&Code.eval_file(&1)) use Mix.Releases.Config, default_release: :default, default_environment: Mix.env() environment :dev do set dev_mode: true set include_erts: false set cookie: :"<&9.`Eg/{6}.dwYyDOj>R6R]2IAK;5*~%JN(bKuIVEkr^0>jH;_iBy27k)4J1z=m" end environment :prod do set include_erts: true set include_src: false set cookie: :">S>1F/:xp$A~o[7UFp[@MgYVHJlShbJ.=~lI426<9VA,&RKs<RyUH8&kCn;F}zTQ" end release :gossipy do set version: current_version(:gossipy) set applications: [ :runtime_tools ] end这就是一个完整的
rel/config.exs文件内容(去掉了注释)。我们可以看到里面有个
environment :prod块,还有一个
environment :dev块,这两个块定义了两种不同的构建策略。这里比较重要的是
set include_erts: true|false这一项。erts是“Erlang RunTime System”的缩写,也就是整个Erlang运行环境。如果把这一项设置成
true,则打出来的包里包含整个Erlang运行环境,于是你的目标服务器上就可以不用装Erlang和Elixir了。上述命令运行完后,会生成
_build/prod/rel目录及其下面所有的文件。在这里面找到
vm.args文件(具体位置忘了),把它复制到项目根目录下的
rel目录里,稍事修改:
# 删除下面这一行 # -name gossipy@127.0.0.1 # 加入下面这一行 -sname gossipy
name和
sname的区别不多说了。因为到时候我们要部署到docker上去,用IP或全限定域名不方便,所以就用主机名。改完
vm.args之后,我们要让distillery认识这个改动过的
vm.args。我们在
rel/config.exs里加上一行:
environment :prod do ... set vm_args: "rel/vm.args" end除了这些,Distillery还要求在项目的
config/prod.exs里加一些东西:
config :gossipy, GossipyWeb.Endpoint, ... check_origin: false, server: true, root: ".", version: Application.spec(:gossipy, :vsn)
check_origin: false只是做实验的时候图一时方便,正式上产品的时候千万不要加这一行。
server: true的意思是这是一个web server,所以要用Cowboy去启动,而不是直接从Application启动。
root: "."表示静态文件(CSS,JS之类)的根在哪儿。因为我们这次没有静态文件,所以不配也OK。
version是发布的版本号。它的值通过
Application.spec(:gossipy, :vsn)获取,也就是
mix.exs里那个版本号。
另外,我们需要在这个配置文件里列出所有的分布式节点:
config :kernel, sync_nodes_optional: [:"gossipy@ws1", :"gossipy@ws2"], sync_nodes_timeout: 10000
sync_nodes_optional是指“如果在
sync_nodes_timeout指定的时间范围内没有连上指定的节点,则忽略那个节点”。与之相对的还有一个
sync_nodes_mandatory选项。所有配置都准备好后,先清除掉上次构建的发布版,再重新构建一次:
$ MIX_ENV=prod mix release.clean然后就可以准备部署了
$ MIX_ENV=prod mix release --env prod
创建Docker镜像
既然是部署到Docker,a343
就要先创建一份Dockerfile,内容如下:
FROM ubuntu:xenial EXPOSE 4000 ENV PORT=4000 RUN mkdir -p /www/gossipy && \ apt-get update && \ apt-get install -y libssl-dev ADD ./_build/prod/rel/gossipy/releases/0.0.1/gossipy.tar.gz /www/gossipy WORKDIR /www/gossipy ENTRYPOINT ./bin/gossipy foreground因为发布包内的Erlang运行环境要求服务器的OS和Distillery运行时的OS尽可能一样,所以这里就用Ubuntu 16.04的服务器版。端口设为4000(你喜欢其他端口号也OK)。由于WebSocket需要crypto.so,所以先装一下libssl-dev,否则应用起不来。把打包出来的tar包扔进镜像(docker会替你自动解压),当docker启动的时候把这个服务启动起来就是了。为了能简化命令行命令,再建一个docker-compose.yml
version: '3.2' services: ws1: build: . hostname: ws1 ports: - 4001:4000 ws2: build: . hostname: ws2 ports: - 4002:4000我定义了两个节点,分别将宿主的4001和4002端口NAT到了docker容器的4000端口。另外,这里显式声明了每个节点的主机名(
hostname),方便和Phoenix应用对接
相关文章推荐
- Dubbo-Admin微信三公棋牌房卡管理平台的搭建开发
- ASP.NET Core 一步步搭建个人网站微信H5房卡三公棋牌源码下载_Linux系统移植
- 微信公众开放平台开发03---百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试
- 用C++实现跨微信h5牛牛平台棋牌开发搭建教程
- Spring Cloud 学习笔记-搭建微信h5牛牛棋牌房卡平台开发应用
- Web开发微信房卡三公棋牌平台出租框架推导
- P2P结构与微信Quorum牛牛h5棋牌源码租售平台搭建机制
- Phoenix + WebSocket分布式部署验证
- 一步一步创建ASP.NET MVC5程序微信房卡三公棋牌平台出售
- 如何正确的在微信H5棋牌牛牛出租平台搭建开发中的UI图中取色
- 基于Vue实现微信三公棋牌网站搭建后台系统权限控制
- JeeSite 4.0 微信神兽大厅H5棋牌12牛牛源码搭建环境部署
- Phoenix + WebSocket分布式部署验证
- ELK6.0部署:搭建分布式日志平台
- 10分钟入门微信房卡牛牛棋牌平台搭建kubernetes
- 三公微信棋牌源码搭建
- 微信房卡鱼虾蟹平台Linux系统zookeeper环境搭建(单机、伪分布式、分布式)
- 在windows平台上部署伪分布式系统开发hadoop程序
- 搭建微信公共平台的本地测试
- 微信平台开发环境nodejs+mongoDB搭建全过程