最近使用
Elixir
的 web 框架Phoenix
开发了一个简单的应用,部署的时候踩了不少坑。做一下笔记。
elixir 1.9.x 之后部署上略有改变,更新一下。
步骤
第一步:引入 edeliver 依赖
修改 mix.exs
文件,引入 edeliver 依赖
def application, do: [ |
第二步:生成配置文件
执行 mix distillery.init
生成 rel
配置文件夹,里面的配置默认即可。
Phoenix
框架做了一些变更,config/prod.secret.exs
也加入到了版本控制里,因为敏感数据都是从系统环境变量里取了。
edeliver 配置
在项目文件夹,创建 .deliver/config
文件
APP="your-erlang-app" # 应用名称 |
举个例子 🌰 我某次的配置文件
|
配置好后,执行以下命令。每次构建的压缩包,不记录到 git
记录里
echo ".deliver/releases/" >> .gitignore |
提交刚才配置文件的修改,并且下载依赖编译
git add -A && git commit -m "Setting up edeliver" |
第三步:配置项目
config/prod.exs
部署配置添加一下内容
http: [port: 26_000], |
第四步:配置环境变量
前面说了,现在敏感信息都从服务器的系统变量中取,我们把以下变量配置到 ~/.profile
文件:
export SECRET_KEY_BASE='b8qq2J2a7YBNwwoL91Y2BpG/AJSaG0uOqy9JA7Cy+D1tWZKuSiLNXRblfSwNV/7e' |
根据自己的项目替换以上变量。
SECRET_KEY_BASE
是使用 mix phx.gen.secret
命令生成的,在本地的项目执行一下,粘贴过来即可。
创建好数据库后,就可以使用以下命令启动发布应用
第五步:配置数据库
phoenix
默认使用的 postgreSQL
数据库
切换到默认用户 postgres
sudo su - postgres |
进入数据库
psql |
创建用户并赋予权限
CREATE USER www WITH PASSWORD 'u867#eDgg6#2@elo098OIUh'; |
创建数据库
现在使用以下命令创建线上数据库的数据表
mix edeliver migrate production |
第六步:部署
edeliver 基本命令
|
migrate 数据库迁移命令
🔔 注意 执行以下的命令之前,要先部署应用。
mix edeliver migrate production |
其他
日志
如果不幸,发布出现问题。可以在一下目录查看日志
配置文件里的 DELIVER_TO="/home/web/"
就是我们项目的部署目录,对应的日志文件也在这里。比如我的:/home/web/habit/log
tail -f erlang.log.1 |
查看端口使用
lsof -i :80 |
netstat -tlunp |
netstat -anp|grep 80 |
可能会用到的文章
Elixir Phoenix 1.4 Deployments with Distillery and Edeliver on Ubuntu