一聚教程网:一个值得你收藏的教程网站

热门教程

Exrm 部署 PhoenixFramework 应用

时间:2022-06-30 20:46:47 编辑:袖梨 来源:一聚教程网

我的开发电脑是 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

热门栏目