使用Docker在2023年版本中搭建Elixir/Phoenix 1.7环境
假设/条件/前置条件
- Dockerはすでにインストール済みとします。
准备: 文件结构
首先,让我们创建在执行docker命令时所需的目录和文件。
├── .devcontainer
│ └── devcontainer.json <- vscode用docker設定ファイル
│
├── .docker-config // dockerfileを置くディレクトリ
│ ├── app
│ │ └── Dockerfile
│ └── db
│ └── Dockerfile
├── db
│ └── data // DBマウント用のディレクトリ
│
├── .env <- docker-composeで使う環境変数
│
└── docker-compose.yml
Dockerfile => Docker 文件
用于Phoenix服务器的Dockerfile
FROM elixir:1.15.4-slim
WORKDIR /workspace
RUN apt-get update && apt-get install -y \
inotify-tools \
git \
npm \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN mix local.hex --force && \
mix archive.install hex phx_new 1.7.7 --force && \
mix local.rebar --force
用于DB服务器的Dockerfile
FROM postgres:14.1-alpine
ENV LANG ja_JP.utf8
docker-compose.yml 可以被简述为 Docker 组合文件。
version: "3"
services:
app:
build: ./.docker-config/app
ports:
- ${APP_PORT}:4000
command: mix phx.server
volumes:
- .:/workspace
- node_modules:/workspace/assets/node_modules
db:
build: ./.docker-config/db
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
ports:
- ${POSTGRES_PORT}:5432
volumes:
- ./db/data:/var/lib/postgresql/data
volumes:
node_modules:
環境變量文件
COMPOSE_PROJECT_NAME=phx_docker_sample # ここで指定した名前でイメージで作成される
APP_PORT=4000
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_PORT=5432
实施:开始
一旦准备好必要的文件,就可以开始运行docker命令来启动容器了。
凤凰项目的创建
让我们首先使用以下命令来创建Phoenix项目。
cd プロジェクトディレクトリ # 先ほどプロジェクトの準備したルートディレクトリに移動
docker compose run --rm app mix phx.new . --app アプリ名
「应用名称」可以随意确定。
这个应用名称将作为Phoenix项目中的命名空间使用。
在接下来的工作中也会用到,所以记住它会很有帮助。
更改Phoenix服务器的设置
在初始状态下,无法访问”Phoenix服务器”和连接”DB服务器”,因此需要更改设置以使其可用。
在Phoenix中,所有的配置文件都被集中存放在config目录中,本次需要修改dev.exs文件以进行开发环境的配置。
更新IP地址
为了允许对Phoenix服务器的访问,需要做出以下更改:
将http: [ip: {127, 0, 0, 1}, port: 4000]更改为http: [ip: {0, 0, 0, 0}, port: 4000]。
请注意,“应用程序名称”是之前创建Phoenix项目时所起的名字。
...
config :アプリ名, アプリ名.Endpoint,
# Binding to loopback ipv4 address prevents access from other machines.
# Change to `ip: {0, 0, 0, 0}` to allow access from other machines.
- http: [ip: {127, 0, 0, 1}, port: 4000],
+ http: [ip: {0, 0, 0, 0}, port: 4000],
check_origin: false,
code_reloader: true,
...
更改数据库连接设置。
这也是对config/dev.exs的更改。
请不要例外地依赖于“应用程序名称”。在进行操作时,可以参考您环境中手头的代码。
- config :アプリ名, アプリ名.Repo,
- username: "postgres",
- password: "postgres",
- hostname: "localhost",
- database: "アプリ名_dev",
- stacktrace: true,
- show_sensitive_data_on_connection_error: true,
- pool_size: 10
+ config :アプリ名, アプリ名.Repo,
+ username: "postgres", # 編集 (POSTGRES_USER)
+ password: "postgres", # 編集 (POSTGRES_PASSWORD)
+ hostname: "db", # 編集 (コンテナ名orサービス名)
+ database: "アプリ名_dev",
+ show_sensitive_data_on_connection_error: true,
+ pool_size: 10
创建数据库
只要完成了所有必要的设置,就应该能够连接到DB服务器,然后我们就可以创建数据库。
请按照以下连续执行命令。
docker compose run --rm app mix --version
docker compose run --rm db psql --version
docker compose up -d
docker compose run --rm app mix ecto.create #DBを作成
确认动作
请访问 http://localhost:4000/。

请提供以下内容的中文本土化表达,只需要一种选项:
引用
- docker composeでphoenixアプリを立ち上げるまで(Zenn) by tnkaさん