使用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/。

 

スクリーンショット 2023-08-29 16.44.26.png

请提供以下内容的中文本土化表达,只需要一种选项:

引用

    docker composeでphoenixアプリを立ち上げるまで(Zenn) by tnkaさん
bannerAds