我的开发电脑是 macOS Sierra,服务器是 CentOS 7。
要将 mac 上的代码部署到 CentOS 上,我有两种选择:
将本地源代码复制到 CentOS 上,直接在服务器上编译构建
在本地开启 CentOS 虚拟机,打包完再部署到服务器上
那么,在 mac 上打包完再部署到服务器上如何?不行,我们可以看 PhoenixFramework 文档中的一段说明:
We need to be sure that the architectures for both our build and hosting environments are the same, e.g. 64-bit Linux -> 64-bit Linux. If the architectures don’t match, our application might not run when deployed. Using a virtual machine that mirrors our hosting environment as our build environment is an easy way to avoid that problem.
请确保构建与托管环境的架构一致,比如 64 位 Linux -> 64 位 Linux。如果架构不匹配,我们的应用部署后可能无法运行。使用模拟托管环境的虚拟机来构建是避免问题的一个简单办法。
上面的两种办法里,第一种是简单粗暴的,把代码复制到服务器,然后按文档操作即可。
第二种方法,则十分复杂。
另外,在第二种办法里,我用到了 Docker。
怎么不用虚拟机?我觉得虚拟机太占硬盘 - 我的 mac 只有 128G 容量,而 docker 的 image 则小巧多了,而且便携,方便后面复用。
下载 docker image
首先从 docker 上安装我配置好的 image:
$ docker pull chenxsan/docker-centos-erlang-elixir
然后运行一个容器(container):
$ docker run -i -t -v /Users/sam/myProjects:/home/myProjects --name container_name docker_image
注意上面的 -v 参数,我把 mac 上的 /Users/sam/myProjects 映射到 container 里的 /home/myProjects,这样在 container 中做的修改 mac 里能直接看到,反之亦然。
接下来,按 PhoenixFramework 文档 配置好 prod.secret.exs 文件。
然后运行以下命令:
$ MIX_ENV=prod mix do deps.get, phoenix.digest, compile, release
呃,事情并没有这么简单。
想想,如果我们只是把构建后的应用上传到服务器上,数据库怎么办?Migration 等等怎么办?
请参照 此链接给你的代码增加一个模块。
然后才运行打包的命令:
$ MIX_ENV=prod mix do deps.get, phoenix.digest, compile, release
该命令会打包出我们需要的应用。
接着,将项目下的 rel/app_name/releases/version_number_here/app_name.tar.gz 复制到服务器上。
然后解压:
$ tar xvzf app_name.tar.gz
接着运行以下两条命令来创建数据库与表:
$ bin/app_name command Elixir.AppName.ReleaseTasks create
$ bin/app_name command Elixir.AppName.ReleaseTasks migrate
等数据库与表建立好后,我们就可以运行起应用了:
$ bin/app_name start
热血大作战 安卓最新版v2.1.166
下载凡尔赛法环免广告版 最新版v1.69.1
下载天煞异种 安卓版v1.0.21
下载十三月 (Undecember)最新官方中文版v3.26.0200
下载星露谷物语sve 安卓版v1.5.6.52
星露谷物语sve手机版是游戏的超大拓展Mod内容,全称Sta
动物园大亨 手机版v2.0
动物园大亨是一款模拟动物园经营的休闲放置游戏,采用了卡通画风
蜜蜂园林钞票不减反增版 v0.1.68
蜜蜂园林无限道具版是游戏的破解版本,在该版本中为玩家提供了足
幻想熔炉失落帝国的世界 安卓版v2.16.2
幻想熔炉失落帝国的世界是一款魔法卡通风格的城市模拟经营类游戏
我的女友是声优免广告 安卓版v1
我的女友是声优免广告是一款非常好玩的模拟经营类手游,玩家在游