attempt to get phoenix dockerized

This commit is contained in:
silentsilas 2024-08-31 13:17:45 -04:00
parent bb16921a74
commit 0e60ad1a86
Signed by: silentsilas
GPG Key ID: 113DFB380F724A81
6 changed files with 74 additions and 33 deletions

2
.tool-versions Normal file
View File

@ -0,0 +1,2 @@
erlang 27.0.1
elixir 1.17.2

26
Dockerfile Normal file
View File

@ -0,0 +1,26 @@
# Use an official Elixir runtime as a parent image.
FROM elixir:latest
RUN apt-get update && \
apt-get install -y postgresql-client inotify-tools nodejs npm
# Create app directory and copy the Elixir projects into it.
RUN mkdir /app
COPY . /app
WORKDIR /app
# Install Hex package manager.
RUN mix local.hex --force
# Compile the project.
RUN mix deps.get
WORKDIR /app/assets
RUN npm install --verbose
WORKDIR /app
RUN mix assets.setup
RUN mix assets.build
RUN mix do compile
CMD ["/app/entrypoint.sh"]

View File

@ -27,7 +27,7 @@ config :poex, Poex.Repo,
username: "postgres",
password: "postgres",
hostname: "localhost",
port: 5560
port: 5432
# Configures the mailer
#

View File

@ -4,8 +4,9 @@ import Config
config :poex, Poex.Repo,
username: "postgres",
password: "postgres",
hostname: "localhost",
hostname: System.get_env("PGHOST") || "localhost",
database: "poex_dev",
port: System.get_env("PGPORT") |> String.to_integer() || 5432,
stacktrace: true,
show_sensitive_data_on_connection_error: true,
pool_size: 10

View File

@ -1,43 +1,36 @@
version: '3.9'
version: "3.9"
services:
phoenix:
# The build parameters for this container.
build:
# Here we define that it should build from the current directory.
context: .
environment:
# Variables to connect to our Postgres server.
PGUSER: postgres
PGPASSWORD: postgres
PGDATABASE: poex_dev
PGPORT: 5432
# Hostname of our Postgres container.
PGHOST: pg-master
ports:
# Mapping the port to make the Phoenix app accessible outside of the container.
- "4000:4000"
depends_on:
# The DB container needs to be started before we start this container.
- pg-master
pg-master:
image: kartoza/postgis:16-3.4
restart: 'always'
ports:
- '5560:5432'
restart: "always"
environment:
ALLOW_IP_RANGE: '0.0.0.0/0'
REPLICATION_USER: 'replicator'
REPLICATION_PASS: 'replicator'
REPLICATION: 'true'
POSTGRES_USER: 'postgres'
POSTGRES_PASS: 'postgres'
POSTGRES_USER: "postgres"
POSTGRES_PASS: "postgres"
POSTGRES_MULTIPLE_EXTENSIONS: postgis
volumes:
- pg-master:/var/lib/postgresql
healthcheck:
test: "exit 0"
pg-replica1:
image: kartoza/postgis:16-3.4
restart: 'always'
ports:
- '5561:5432'
environment:
ALLOW_IP_RANGE: '0.0.0.0/0'
REPLICATION_USER: 'replicator'
REPLICATION_PASS: 'replicator'
REPLICATION: 'true'
POSTGRES_USER: 'postgres'
POSTGRES_PASS: 'postgres'
POSTGRES_MULTIPLE_EXTENSIONS: postgis
REPLICATE_FROM: pg-master
DESTROY_DATABASE_ON_RESTART: 'True'
volumes:
- pg-replica1:/var/lib/postgresql
depends_on:
pg-master:
condition: service_healthy
volumes:
pg-master:
pg-replica1:

19
entrypoint.sh Executable file
View File

@ -0,0 +1,19 @@
#!/bin/bash
# Docker entrypoint script.
# Wait until Postgres is ready.
while ! pg_isready -q -h $PGHOST -p $PGPORT -U $PGUSER
do
echo "$(date) - waiting for database to start"
sleep 2
done
# Create, migrate, and seed database if it doesn't exist.
if [[ -z `psql -Atqc "\\list $PGDATABASE"` ]]; then
echo "Database $PGDATABASE does not exist. Creating..."
createdb -E UTF8 $PGDATABASE -l en_US.UTF-8 -T template0
mix setup
echo "Database $PGDATABASE created."
fi
exec mix phx.server