diff --git a/.env.production.sample b/.env.sample similarity index 66% rename from .env.production.sample rename to .env.sample index d9a46ee8a..825a3ef1c 100644 --- a/.env.production.sample +++ b/.env.sample @@ -10,13 +10,13 @@ GRAPHQL_API_FULL_PATH="" # APP MIX_ENV=prod -PORT=4002 +MOBILIZON_INSTANCE_PORT=4002 MOBILIZON_LOGLEVEL="info" MOBILIZON_SECRET="<%= instance_secret %>" # Database -MOBILIZON_DATABASE_USERNAME="mobilizon" +MOBILIZON_DATABASE_USERNAME="<%= database_username %>" MOBILIZON_DATABASE_PASSWORD="<%= database_password %>" -MOBILIZON_DATABASE_DBNAME="mobilizon_prod" -MOBILIZON_DATABASE_HOST="localhost" -MOBILIZON_DATABASE_PORT=5432 \ No newline at end of file +MOBILIZON_DATABASE_DBNAME="<%= database_name %>" +MOBILIZON_DATABASE_HOST="<%= database_host %>" +MOBILIZON_DATABASE_PORT=<%= database_port %> \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cd6d6ba8f..b7033ac92 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,10 +6,16 @@ stages: variables: MIX_ENV: "test" + # DB Variables for Postgres / Postgis POSTGRES_DB: mobilizon_test POSTGRES_USER: postgres POSTGRES_PASSWORD: "" POSTGRES_HOST: postgres + # DB Variables for Mobilizon + MOBILIZON_DATABASE_USERNAME: $POSTGRES_USER + MOBILIZON_DATABASE_PASSWORD: $POSTGRES_PASSWORD + MOBILIZON_DATABASE_DBNAME: $POSTGRES_DB + MOBILIZON_DATABASE_HOST: $POSTGRES_HOST GEOLITE_CITIES_PATH: "/usr/share/GeoIP/GeoLite2-City.mmdb" js: diff --git a/Dockerfile b/Dockerfile index ff7e19c39..e071ba529 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM elixir:1.6 +FROM elixir:1.7 RUN apt-get update && apt-get install -y build-essential inotify-tools postgresql-client @@ -8,4 +8,4 @@ COPY docker/entrypoint.sh /bin/entrypoint WORKDIR /app -EXPOSE 4000 \ No newline at end of file +EXPOSE 4000 4001 4002 \ No newline at end of file diff --git a/config/dev.exs b/config/dev.exs index 86443e4c0..d4bf598fd 100644 --- a/config/dev.exs +++ b/config/dev.exs @@ -7,7 +7,13 @@ use Mix.Config # watchers to your application. For example, we use it # with brunch.io to recompile .js and .css sources. config :mobilizon, MobilizonWeb.Endpoint, - http: [port: System.get_env("PORT") || 4001], + http: [ + port: System.get_env("MOBILIZON_INSTANCE_PORT") || 4001 + ], + url: [ + host: System.get_env("MOBILIZON_INSTANCE_HOST") || "mobilizon.dev", + port: System.get_env("MOBILIZON_INSTANCE_PORT") || 4001 + ], debug_errors: true, code_reloader: true, check_origin: false, @@ -53,8 +59,9 @@ config :mobilizon, Mobilizon.Mailer, adapter: Bamboo.LocalAdapter config :mobilizon, Mobilizon.Repo, adapter: Ecto.Adapters.Postgres, types: Mobilizon.PostgresTypes, - username: System.get_env("POSTGRES_USER") || "elixir", - password: System.get_env("POSTGRES_PASSWORD") || "elixir", - database: System.get_env("POSTGRES_DATABASE") || "mobilizon_dev", - hostname: System.get_env("POSTGRES_HOST") || "localhost", + username: System.get_env("MOBILIZON_DATABASE_USERNAME") || "mobilizon", + password: System.get_env("MOBILIZON_DATABASE_PASSWORD") || "mobilizon", + database: System.get_env("MOBILIZON_DATABASE_DBNAME") || "mobilizon_dev", + hostname: System.get_env("MOBILIZON_DATABASE_HOST") || "localhost", + port: System.get_env("MOBILIZON_DATABASE_PORT") || "5432", pool_size: 10 diff --git a/config/prod.exs b/config/prod.exs index 20d235d1f..5820f0f7c 100644 --- a/config/prod.exs +++ b/config/prod.exs @@ -16,8 +16,11 @@ use Mix.Config config :mobilizon, MobilizonWeb.Endpoint, load_from_system_env: true, url: [ - host: System.get_env("MOBILIZON_INSTANCE_HOST") || "example.com", - port: 80 + host: System.get_env("MOBILIZON_INSTANCE_HOST") || "mobilizon.me", + port: System.get_env("MOBILIZON_INSTANCE_PORT") || 4000 + ], + http: [ + port: System.get_env("MOBILIZON_INSTANCE_PORT") || 4000 ], secret_key_base: System.get_env("MOBILIZON_SECRET") || "ThisShouldBeAVeryStrongStringPleaseReplaceMe", @@ -26,6 +29,7 @@ config :mobilizon, MobilizonWeb.Endpoint, # Configure your database config :mobilizon, Mobilizon.Repo, adapter: Ecto.Adapters.Postgres, + types: Mobilizon.PostgresTypes, username: System.get_env("MOBILIZON_DATABASE_USERNAME") || "mobilizon", password: System.get_env("MOBILIZON_DATABASE_PASSWORD") || "mobilizon", database: System.get_env("MOBILIZON_DATABASE_DBNAME") || "mobilizon_prod", diff --git a/config/test.exs b/config/test.exs index 363d9728c..c6aee32d6 100644 --- a/config/test.exs +++ b/config/test.exs @@ -3,7 +3,13 @@ use Mix.Config # We don't run a server during test. If one is required, # you can enable the server option below. config :mobilizon, MobilizonWeb.Endpoint, - http: [port: 4001], + http: [ + port: System.get_env("MOBILIZON_INSTANCE_PORT") || 4002 + ], + url: [ + host: System.get_env("MOBILIZON_INSTANCE_HOST") || "mobilizon.test", + port: System.get_env("MOBILIZON_INSTANCE_PORT") || 4002 + ], server: false # Print only warnings and errors during test @@ -15,10 +21,11 @@ config :logger, # Configure your database config :mobilizon, Mobilizon.Repo, adapter: Ecto.Adapters.Postgres, - username: System.get_env("POSTGRES_USER") || "elixir", - password: System.get_env("POSTGRES_PASSWORD") || "elixir", - database: "mobilizon_test", - hostname: System.get_env("POSTGRES_HOST") || "localhost", + types: Mobilizon.PostgresTypes, + username: System.get_env("MOBILIZON_DATABASE_USERNAME") || "mobilizon", + password: System.get_env("MOBILIZON_DATABASE_PASSWORD") || "mobilizon", + database: System.get_env("MOBILIZON_DATABASE_DBNAME") || "mobilizon_test", + hostname: System.get_env("MOBILIZON_DATABASE_HOST") || "localhost", pool: Ecto.Adapters.SQL.Sandbox, types: Mobilizon.PostgresTypes diff --git a/docker-compose.yml b/docker-compose.yml index 62ad87280..a80eef7f5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ services: postgres: container_name: mobilizon_db restart: unless-stopped - image: mdillon/postgis:10 + image: mdillon/postgis:11 environment: POSTGRES_PASSWORD: postgres POSTGRES_DB: mobilizon_dev @@ -27,14 +27,19 @@ services: volumes: - '.:/app' ports: - - "4000:4000" + - "4000:4001" depends_on: - postgres environment: + # Environment: Prod when ready MIX_ENV: dev - POSTGRES_PASSWORD: postgres - POSTGRES_USER: postgres - POSTGRES_DATABASE: mobilizon_dev - POSTGRES_HOST: postgres - PORT: 4000 + # Instance + MOBILIZON_INSTANCE_NAME: My Mobilizon Instance + MOBILIZON_INSTANCE_HOST: mobilizon.me + MOBILIZON_INSTANCE_EMAIL: noreply@mobilizon.me + MOBILIZON_INSTANCE_REGISTRATIONS_OPEN: "false" + MOBILIZON_DATABASE_PASSWORD: postgres + MOBILIZON_DATABASE_USERNAME: postgres + MOBILIZON_DATABASE_DBNAME: mobilizon_dev + MOBILIZON_DATABASE_HOST: postgres entrypoint: entrypoint diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 7e1264472..4c3955783 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -3,7 +3,7 @@ mix deps.get # Wait for Postgres to become available. -until PGPASSWORD=$POSTGRES_PASSWORD psql -h postgres -U "postgres" -c '\q' 2>/dev/null; do +until PGPASSWORD=$MOBILIZON_DATABASE_PASSWORD psql -h $MOBILIZON_DATABASE_HOST -U $MOBILIZON_DATABASE_USERNAME -c '\q' 2>/dev/null; do >&2 echo "Postgres is unavailable - sleeping" sleep 1 done diff --git a/lib/mobilizon_web/endpoint.ex b/lib/mobilizon_web/endpoint.ex index aea60e151..2b85a3d78 100644 --- a/lib/mobilizon_web/endpoint.ex +++ b/lib/mobilizon_web/endpoint.ex @@ -66,7 +66,10 @@ defmodule MobilizonWeb.Endpoint do """ def init(_key, config) do if config[:load_from_system_env] do - port = System.get_env("PORT") || raise "expected the PORT environment variable to be set" + port = + System.get_env("MOBILIZON_INSTANCE_PORT") || + raise "expected the MOBILIZON_INSTANCE_PORT environment variable to be set" + {:ok, Keyword.put(config, :http, [:inet6, port: port])} else {:ok, config}