Под катом небольшое и простое руководство, в котором показано, как использовать Docker Compose для настройки и запуска приложения Elixir/Phoenix + PostgreSQL.

Подготовка


Создаем пустой каталог <app_dir> и переходим в него:

mkdir <app_dir> && cd <app_dir>

Создаем Dockerfile и наполняем содержимым.

<app_dir>/dockerfile
FROM elixir:latest

RUN apt-get update -qq && apt-get install -y libpq-dev && apt-get install -y build-essential inotify-tools erlang-dev erlang-parsetools apt-transport-https ca-certificates && apt-get update && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && echo "deb https://dl.yarnpkg.com/debian/ stable main" |  tee /etc/apt/sources.list.d/yarn.list &&  apt-get update &&  apt-get install --no-install-recommends yarn
RUN mix local.hex --force && mix local.rebar --force
RUN mix archive.install hex phx_new 1.4.0 --force

RUN curl -sL https://deb.nodesource.com/setup_11.x | bash - && apt-get install -y nodejs

WORKDIR /home/app


Создаем docker-compose.yml и наполняем содержимым.

<app_dir>/docker-compose.yml
version: '3'
services:
  web:
    build: .
    command: mix phx.server  
    volumes:
      - .:/home/app
    ports:
      - "4000:4000"
    links:
      - db
    depends_on:
      - db
  test:
    image: <app_dir>_web
    command: mix test
    environment:
      MIX_ENV: test
      PORT: 4001
    volumes:
      - .:/home/app 
  db:
    image: postgres:latest
    ports:
      - '5432:5432'
    environment:
      POSTGRES_USER: <db_user>
      POSTGRES_PASSWORD: <db_user_password>



Создание проекта


Генерируем новое приложение, используя docker-compose, где <app_name> — имя приложения:

docker-compose run web mix phx.new . --app <app_name>

Если вы используете Docker в Linux, то созданные файлы принадлежат root, так как контейнер запускается от его имени. Чтобы избежать трудностей в дальнейшем, нужно поменять владельца:

sudo chown -R $USER:$USER .

Подключение к базе данных


Для подключения к базе данных в настройках нашего приложения необходимо изменить два файла:

<app_dir>/config/dev.exs
# Configure your database
config :<app_name>, <App_name>.Repo,
  username: <db_user>,
  password: <db_user_password>,
  database: <app_name>_dev,
  hostname: "db",
  pool_size: 10


<app_dir>/config/test.exs
# Configure your database
config :<app_name>, <App_name>.Repo,
  username: <db_user>,
  password: <db_user_password>,
  database: <app_name>_test,
  hostname: "db",
  pool_size: 10


После того как настройки откорректированы, создаем базу для каждого окружения:

docker-compose run web mix ecto.create

docker-compose run test mix ecto.create

Запуск приложения


Ну и осталось только запустить наше приложение:

docker-compose up -d

Вот и все. Теперь наше приложение доступно по адресу http://127.0.0.1:4000.



Тесты


И в концовке про тестирование.

Для того, чтобы выполнить все тесты, нужно выполнить:

docker-compose run test

Чтобы выполнить конкретный тест:

docker-compose run test mix test test/<app_name>_web/controllers/page_controller_test.exs

На этом все, всем добра!

Комментарии (0)