Current section
Files
Jump to
Current section
Files
templates/terraform/environments/develop/main.tf
locals {
host = {
primary = "#changeme: write here the hostname. Do not prefix it with www"
}
image = {
backend = "changeme: url of the backend image"
frontend = "changeme: url of the frontend image"
}
name = {
backend = "#changeme: write here a name which will be used for the deployment,secret, and everything related"
frontend = "#changeme: write here a name which will be used for the deployment,secret, and everything related"
}
registry = {
url = var.registry_server
username = var.registry_username
password = var.registry_token
email = var.registry_email
}
}
########################################################################
### DNS ################################################################
########################################################################
resource "google_dns_record_set" "a_record" {
for_each = local.host
managed_zone = var.dns_zone_name
name = "${each.value}."
type = "A"
ttl = 300
rrdatas = [var.nginx_controller_ip]
}
resource "google_dns_record_set" "cname_record" {
for_each = local.host
managed_zone = var.dns_zone_name
name = "www.${each.value}."
type = "CNAME"
ttl = 300
rrdatas = ["${each.value}."]
}
########################################################################
### BUCKET #############################################################
########################################################################
resource "google_storage_bucket" "static" {
name = "<%= @arke_app_name %>-dev"
location = "EUROPE-WEST8"
storage_class = "STANDARD"
cors {
max_age_seconds = 3600
method = ["GET"]
origin = ["http://localhost:3000", "https://${local.host.primary}"]
response_header = ["Content-Type"]
}
public_access_prevention = "enforced"
}
########################################################################
### NAMESPACE ##########################################################
########################################################################
resource "kubernetes_namespace_v1" "dev" {
metadata {
name = "<%= @arke_app_name %>-dev"
}
}
########################################################################
### SECRETS ############################################################
########################################################################
resource "kubernetes_secret_v1" "docker_registry" {
metadata {
name = "gh-secret-docker-cfg"
namespace = kubernetes_namespace_v1.dev.metadata.0.name
}
data = {
".dockerconfigjson" = jsonencode({
auths = {
(local.registry.url) = {
"username" = local.registry.username
"password" = local.registry.password
"email" = local.registry.email
"auth" = base64encode("${local.registry.username}:${local.registry.password}")
}
}
})
}
type = "kubernetes.io/dockerconfigjson"
}
########################################################################
### MODULES ############################################################
########################################################################
module "backend" {
source = "../../modules/backend"
namespace = kubernetes_namespace_v1.dev.metadata.0.name
container_image = {
image = local.image.backend,
image_pull_policy = "Always"
}
hosts = [local.host.primary]
elixir = {
SECRET_KEY_BASE = var.secret_key_base
SECRET_KEY_AUTH = var.secret_key_auth
RELEASE_NAME = var.release_name
AUTH_MODE = var.auth_mode
}
<%= if @mailer != "" do %>
email = {
reset_password_endpoint = var.reset_password_endpoint
mailgun_api = var.mailgun_api
mailgun_domain = var.mailgun_domain
default_sender = var.default_sender
}
<% end %>
db = {
name = var.db_name
hostname = var.db_hostname
user = var.db_user
port = var.db_port
password = var.db_password
}
storage = {
service_key = var.service_key
service_account = var.service_account
default_bucket = var.default_bucket
path = var.service_key_path
service_key_filename = var.service_key_filename
}
image_pull_secret = kubernetes_secret_v1.docker_registry.metadata.0.name
replicas = 1
port = 4000
name = local.name.backend
}
module "frontend" {
source = "../../modules/frontend"
namespace = kubernetes_namespace_v1.dev.metadata.0.name
container_image = {
image = local.image.frontend
image_pull_policy = "Always"
}
hosts = [local.host.primary]
image_pull_secret = kubernetes_secret_v1.docker_registry.metadata.0.name
replicas = 1
port = 3000
name = local.name.frontend
}