我的开发电脑是 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
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔