add proper release and migrations
All checks were successful
Build and Publish / build-release (push) Successful in 1m48s
All checks were successful
Build and Publish / build-release (push) Successful in 1m48s
This commit is contained in:
@@ -52,9 +52,6 @@ if cookie = System.get_env("RELEASE_COOKIE") do
|
||||
config :elixir, :cookie, cookie
|
||||
end
|
||||
|
||||
config :policy_service, PolicyServiceWeb.Endpoint,
|
||||
http: [port: String.to_integer(System.get_env("PORT", "4000"))]
|
||||
|
||||
if config_env() == :prod do
|
||||
database_url =
|
||||
System.get_env("DATABASE_URL") ||
|
||||
@@ -67,13 +64,14 @@ if config_env() == :prod do
|
||||
|
||||
config :policy_service, PolicyService.Repo,
|
||||
url: database_url,
|
||||
pool_size: 1,
|
||||
pool_size: String.to_integer(System.get_env("DATABASE_POOL_SIZE") || "1"),
|
||||
socket_options: maybe_ipv6
|
||||
|
||||
config :policy_service, PolicyService.EventStore,
|
||||
serializer: Commanded.Serialization.JsonSerializer,
|
||||
url: database_url,
|
||||
pool_size: 1
|
||||
schema: "eventstore",
|
||||
pool_size: String.to_integer(System.get_env("EVENTSTORE_POOL_SIZE") || "1")
|
||||
|
||||
secret_key_base =
|
||||
System.get_env("SECRET_KEY_BASE") ||
|
||||
@@ -87,9 +85,10 @@ if config_env() == :prod do
|
||||
config :policy_service, :dns_cluster_query, System.get_env("DNS_CLUSTER_QUERY")
|
||||
|
||||
config :policy_service, PolicyServiceWeb.Endpoint,
|
||||
url: [host: host, port: 80, scheme: "http"],
|
||||
url: [host: host, port: String.to_integer(System.get_env("PORT", "4000")), scheme: "http"],
|
||||
http: [
|
||||
ip: {0, 0, 0, 0, 0, 0, 0, 0}
|
||||
ip: {0, 0, 0, 0, 0, 0, 0, 0},
|
||||
port: String.to_integer(System.get_env("PORT", "4000"))
|
||||
],
|
||||
secret_key_base: secret_key_base
|
||||
end
|
||||
|
||||
37
lib/policy_service/release.ex
Normal file
37
lib/policy_service/release.ex
Normal file
@@ -0,0 +1,37 @@
|
||||
defmodule PolicyService.Release do
|
||||
@moduledoc """
|
||||
Used for executing DB release tasks when run in production without Mix
|
||||
installed.
|
||||
"""
|
||||
@app :policy_service
|
||||
|
||||
def migrate do
|
||||
load_app()
|
||||
init_event_store()
|
||||
|
||||
for repo <- repos() do
|
||||
{:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :up, all: true))
|
||||
end
|
||||
end
|
||||
|
||||
def rollback(repo, version) do
|
||||
load_app()
|
||||
{:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :down, to: version))
|
||||
end
|
||||
|
||||
defp repos do
|
||||
Application.fetch_env!(@app, :ecto_repos)
|
||||
end
|
||||
|
||||
defp load_app do
|
||||
Application.ensure_all_started(:ssl)
|
||||
Application.ensure_all_started(:postgrex)
|
||||
Application.ensure_loaded(@app)
|
||||
end
|
||||
|
||||
def init_event_store do
|
||||
config = PolicyService.EventStore.config()
|
||||
|
||||
:ok = EventStore.Tasks.Init.exec(config, [])
|
||||
end
|
||||
end
|
||||
@@ -3,22 +3,33 @@ controllers:
|
||||
enabled: true
|
||||
type: deployment
|
||||
replicas: 1
|
||||
# initContainers:
|
||||
# migrate:
|
||||
# image:
|
||||
# repository: gitea.corredorconect.com/software-engineering/policy-service
|
||||
# tag: '{{ $.Chart.AppVersion }}'
|
||||
# command:
|
||||
# - /bin/sh
|
||||
# - -c
|
||||
# - "/opt/policy_service/bin/policy_service eval 'Mix.Tasks.Ecto.Create.run([])' --no-start && /opt/policy_service/bin/policy_service eval 'Mix.Tasks.Ecto.Migrate.run([])' --no-start && /opt/policy_service/bin/policy_service eval 'Mix.Tasks.EventStore.Create.run([])' --no-start && /opt/policy_service/bin/policy_service eval 'Mix.Tasks.EventStore.Init.run([])' --no-start"
|
||||
# env:
|
||||
# MIX_ENV: prod
|
||||
# DATABASE_URL:
|
||||
# valueFrom:
|
||||
# secretKeyRef:
|
||||
# name: policy-service-pg-app
|
||||
# key: uri
|
||||
initContainers:
|
||||
migrate:
|
||||
image:
|
||||
repository: gitea.corredorconect.com/software-engineering/policy-service
|
||||
tag: '{{ $.Chart.AppVersion }}'
|
||||
command:
|
||||
- "/bin/policy_service"
|
||||
args:
|
||||
- "eval"
|
||||
- "PolicyService.Release.migrate"
|
||||
env:
|
||||
MIX_ENV: prod
|
||||
SECRET_KEY_BASE:
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}-secrets'
|
||||
key: secretKeyBase
|
||||
RELEASE_COOKIE:
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}-secrets'
|
||||
key: cookie
|
||||
DATABASE_URL:
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}-pg-app'
|
||||
key: uri
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
@@ -57,7 +68,7 @@ controllers:
|
||||
DATABASE_URL:
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: policy-service-cluster-pg-app
|
||||
name: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}-pg-app'
|
||||
key: uri
|
||||
probes:
|
||||
liveness:
|
||||
@@ -177,3 +188,18 @@ rawResources:
|
||||
owner: policy_service
|
||||
storage:
|
||||
size: 5Gi
|
||||
|
||||
database:
|
||||
enabled: true
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Database
|
||||
suffix: database
|
||||
spec:
|
||||
spec:
|
||||
name: policy_service
|
||||
owner: policy_service
|
||||
cluster:
|
||||
name: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}-cluster-pg'
|
||||
schemas:
|
||||
- name: eventstore
|
||||
owner: policy_service
|
||||
|
||||
Reference in New Issue
Block a user