More useful stuff.
This commit is contained in:
parent
848a2769cb
commit
f2ad38f41c
13 changed files with 195 additions and 5 deletions
docker-pgbackweb
docker-redis
docker-service
docker-statping
25
docker-pgbackweb/inputs.tf
Normal file
25
docker-pgbackweb/inputs.tf
Normal file
|
@ -0,0 +1,25 @@
|
|||
variable "pgbackweb_image" {
|
||||
default = "eduardolat/pgbackweb"
|
||||
}
|
||||
variable "pgbackweb_version" {
|
||||
default = "latest"
|
||||
}
|
||||
variable "stack_name" {
|
||||
default = "backup"
|
||||
type = string
|
||||
description = "The name of the stack to create."
|
||||
}
|
||||
variable "service_name" {
|
||||
default = "pgbackweb"
|
||||
type = string
|
||||
description = "The name of the service to create."
|
||||
}
|
||||
variable "placement_constraints" {
|
||||
default = []
|
||||
type = list(string)
|
||||
description = "Docker Swarm placement constraints"
|
||||
}
|
||||
variable "networks" {
|
||||
type = list(string)
|
||||
default = []
|
||||
}
|
28
docker-pgbackweb/nginx.tf
Normal file
28
docker-pgbackweb/nginx.tf
Normal file
|
@ -0,0 +1,28 @@
|
|||
variable "nginx_hostname" {
|
||||
type = string
|
||||
default = null
|
||||
}
|
||||
variable "acme_certificate" {
|
||||
type = object({
|
||||
private_key_pem = string
|
||||
certificate_pem = string
|
||||
issuer_pem = string
|
||||
})
|
||||
default = null
|
||||
}
|
||||
|
||||
module "nginx_config" {
|
||||
count = var.nginx_hostname != null ? 1 : 0
|
||||
source = "../nginx/nginx-site-available"
|
||||
service_name = module.pgbackweb.service_name
|
||||
hostname = var.nginx_hostname
|
||||
upstream_host = "${module.pgbackweb.service_name}:8085"
|
||||
config_prefix = "nginx"
|
||||
certificate = var.acme_certificate
|
||||
}
|
||||
output "nginx_files" {
|
||||
value = var.nginx_hostname != null ? module.nginx_config[0].files : []
|
||||
}
|
||||
output "endpoint" {
|
||||
value = var.nginx_hostname
|
||||
}
|
38
docker-pgbackweb/pgbackweb.tf
Normal file
38
docker-pgbackweb/pgbackweb.tf
Normal file
|
@ -0,0 +1,38 @@
|
|||
module "network" {
|
||||
source = "../docker-network"
|
||||
stack_name = var.stack_name
|
||||
}
|
||||
resource "random_password" "encryption_key" {
|
||||
length = 32
|
||||
special = false
|
||||
}
|
||||
module "pgbackweb" {
|
||||
source = "../docker-service"
|
||||
image = "eduardolat/pgbackweb"
|
||||
environment_variables = {
|
||||
PBW_ENCRYPTION_KEY = nonsensitive(random_password.encryption_key.result)
|
||||
PBW_POSTGRES_CONN_STRING = "postgres://${module.postgres.username}:${module.postgres.password}@${module.postgres.service_name}:5432?sslmode=disable"
|
||||
}
|
||||
stack_name = var.stack_name
|
||||
service_name = var.service_name
|
||||
networks = concat([module.network.network], var.networks)
|
||||
placement_constraints = var.placement_constraints
|
||||
}
|
||||
module "postgres" {
|
||||
source = "../docker-postgres"
|
||||
postgres_version = "16"
|
||||
stack_name = var.stack_name
|
||||
networks = [module.network.network]
|
||||
placement_constraints = var.placement_constraints
|
||||
database = "pgbackweb"
|
||||
username = "pgbackweb"
|
||||
ports = {
|
||||
64000 = 5432
|
||||
}
|
||||
}
|
||||
output "pgbackweb" {
|
||||
value = module.pgbackweb
|
||||
}
|
||||
output "database" {
|
||||
value = module.postgres
|
||||
}
|
14
docker-pgbackweb/terraform.tf
Normal file
14
docker-pgbackweb/terraform.tf
Normal file
|
@ -0,0 +1,14 @@
|
|||
terraform {
|
||||
required_providers {
|
||||
docker = {
|
||||
source = "kreuzwerker/docker"
|
||||
version = "~>3.0"
|
||||
}
|
||||
random = {
|
||||
source = "hashicorp/random"
|
||||
version = "~> 3.5"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
8
docker-redis/credentials.tf
Normal file
8
docker-redis/credentials.tf
Normal file
|
@ -0,0 +1,8 @@
|
|||
resource "random_password" "auth" {
|
||||
length = 16
|
||||
special = false
|
||||
}
|
||||
|
||||
locals {
|
||||
auth = var.auth != null ? var.auth : nonsensitive(random_password.auth.result)
|
||||
}
|
35
docker-redis/inputs.tf
Normal file
35
docker-redis/inputs.tf
Normal file
|
@ -0,0 +1,35 @@
|
|||
variable "redis_image" {
|
||||
default = "ghcr.io/benzine-framework/redis"
|
||||
type = string
|
||||
description = "The docker image to use for the redis service."
|
||||
}
|
||||
variable "redis_version" {
|
||||
default = "7"
|
||||
type = string
|
||||
description = "The version of the docker image to use for the redis service."
|
||||
}
|
||||
|
||||
variable "auth" {
|
||||
default = null
|
||||
type = string
|
||||
description = "The password for the database. If none is provided, a random password will be generated."
|
||||
}
|
||||
|
||||
# Pass-thru variables
|
||||
variable "stack_name" {
|
||||
type = string
|
||||
}
|
||||
variable "networks" {
|
||||
type = list(string)
|
||||
default = []
|
||||
}
|
||||
variable "ports" {
|
||||
type = map(number)
|
||||
default = {}
|
||||
description = "A map of port mappings to expose on the host. The key is the host port, and the value is the container port."
|
||||
}
|
||||
variable "placement_constraints" {
|
||||
default = []
|
||||
type = list(string)
|
||||
description = "Docker Swarm placement constraints"
|
||||
}
|
9
docker-redis/outputs.tf
Normal file
9
docker-redis/outputs.tf
Normal file
|
@ -0,0 +1,9 @@
|
|||
output "auth" {
|
||||
value = local.auth
|
||||
}
|
||||
output "service_name" {
|
||||
value = module.service.service_name
|
||||
}
|
||||
output "ports" {
|
||||
value = module.service.ports
|
||||
}
|
13
docker-redis/postgres.tf
Normal file
13
docker-redis/postgres.tf
Normal file
|
@ -0,0 +1,13 @@
|
|||
module "service" {
|
||||
source = "../docker-service"
|
||||
image = "${var.redis_image}:${var.redis_version}"
|
||||
command = ["redis-server", "--requirepass", local.auth, "--appendonly", "yes", "--save", 60, 1, "--loglevel", "warning"]
|
||||
stack_name = var.stack_name
|
||||
service_name = "redis"
|
||||
networks = var.networks
|
||||
volumes = {
|
||||
"data" = "/data",
|
||||
}
|
||||
ports = var.ports
|
||||
placement_constraints = var.placement_constraints
|
||||
}
|
14
docker-redis/terraform.tf
Normal file
14
docker-redis/terraform.tf
Normal file
|
@ -0,0 +1,14 @@
|
|||
terraform {
|
||||
required_providers {
|
||||
docker = {
|
||||
source = "kreuzwerker/docker"
|
||||
version = "~>3.0"
|
||||
}
|
||||
random = {
|
||||
source = "hashicorp/random"
|
||||
version = "~> 3.5"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -5,6 +5,11 @@ variable "command" {
|
|||
type = list(string)
|
||||
default = null
|
||||
}
|
||||
variable "one_shot" {
|
||||
type = bool
|
||||
default = false
|
||||
description = "Whether to run the service as a one-shot task."
|
||||
}
|
||||
variable "stack_name" {
|
||||
type = string
|
||||
}
|
||||
|
|
|
@ -54,8 +54,10 @@ resource "docker_service" "instance" {
|
|||
name = networks_advanced.value
|
||||
}
|
||||
}
|
||||
|
||||
# Apply restart policy
|
||||
restart_policy {
|
||||
condition = "any"
|
||||
condition = var.one_shot ? "none" : "any"
|
||||
delay = "0s"
|
||||
window = "0s"
|
||||
max_attempts = 0
|
||||
|
|
|
@ -10,7 +10,6 @@ variable "acme_certificate" {
|
|||
})
|
||||
default = null
|
||||
}
|
||||
|
||||
module "nginx_config" {
|
||||
count = var.nginx_hostname != null ? 1 : 0
|
||||
source = "../nginx/nginx-site-available"
|
||||
|
@ -19,4 +18,7 @@ module "nginx_config" {
|
|||
upstream_host = "${module.service.service_name}:8080"
|
||||
config_prefix = "nginx"
|
||||
certificate = var.acme_certificate
|
||||
}
|
||||
output "nginx_files" {
|
||||
value = var.nginx_hostname != null ? module.nginx_config[0].files : []
|
||||
}
|
|
@ -11,6 +11,3 @@ output "statping" {
|
|||
}
|
||||
}
|
||||
}
|
||||
output "nginx_files" {
|
||||
value = var.nginx_hostname != null ? module.nginx_config[0].files : []
|
||||
}
|
Loading…
Reference in a new issue