Elixir/Phoenix Docker-based Development Environment
version: '3.2' | |
services: | |
db: | |
image: postgres | |
web: | |
build: . | |
volumes: | |
- type: bind | |
source: . | |
target: /app | |
ports: | |
- "4000:4000" | |
depends_on: | |
- db | |
command: | |
- ./run.sh |
# Elixir + Phoenix | |
FROM elixir:1.6.1 | |
# Install debian packages | |
RUN apt-get update | |
RUN apt-get install --yes build-essential inotify-tools postgresql-client | |
# Install Phoenix packages | |
RUN mix local.hex --force | |
RUN mix local.rebar --force | |
RUN mix archive.install --force https://github.com/phoenixframework/archives/raw/master/phx_new.ez | |
# Install node | |
RUN curl -sL https://deb.nodesource.com/setup_6.x -o nodesource_setup.sh | |
RUN bash nodesource_setup.sh | |
RUN apt-get install nodejs | |
WORKDIR /app | |
EXPOSE 4000 |
#!/bin/sh | |
# Adapted from Alex Kleissner's post, Running a Phoenix 1.3 project with docker-compose | |
# https://medium.com/@hex337/running-a-phoenix-1-3-project-with-docker-compose-d82ab55e43cf | |
set -e | |
# Ensure the app's dependencies are installed | |
mix deps.get | |
# Prepare Dialyzer if the project has Dialyxer set up | |
if mix help dialyzer >/dev/null 2>&1 | |
then | |
echo "\nFound Dialyxer: Setting up PLT..." | |
mix do deps.compile, dialyzer --plt | |
else | |
echo "\nNo Dialyxer config: Skipping setup..." | |
fi | |
# Install JS libraries | |
echo "\nInstalling JS..." | |
cd assets && npm install | |
cd .. | |
# Wait for Postgres to become available. | |
until psql -h db -U "postgres" -c '\q' 2>/dev/null; do | |
>&2 echo "Postgres is unavailable - sleeping" | |
sleep 1 | |
done | |
echo "\nPostgres is available: continuing with database setup..." | |
# Potentially Set up the database | |
mix ecto.create | |
mix ecto.migrate | |
echo "\nTesting the installation..." | |
# "Proove" that install was successful by running the tests | |
mix test | |
echo "\n Launching Phoenix web server..." | |
# Start the phoenix web server | |
mix phx.server |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment