Add Nextcloud deployment and configuration

- Introduced Nextcloud module with Kubernetes resources including deployment, service, ingress, and cron job.
- Configured Apache settings for Nextcloud with SSL support and compression.
- Created secrets for mail and admin credentials.
- Added necessary environment variables for Nextcloud configuration.
- Removed unused Scaleway access and secret keys from secrets and variables.
- Updated CoreDNS module to support custom host overrides.
- Implemented backup bucket policies and lifecycle rules for Scaleway object storage.
- Enhanced IAM policies and applications for backup and email services.
- Added outputs for backup bucket and API keys.
This commit is contained in:
2025-06-09 23:49:43 +02:00
parent cac269f160
commit 826959c903
41 changed files with 1186 additions and 219 deletions
+14
View File
@@ -15,6 +15,7 @@ module "dns" {
source = "../../modules/apps/coredns"
forward_dns_servers = local.dns_nameservers
override_hosts = local.override_hosts
zones = local.zones
}
@@ -23,3 +24,16 @@ module "reverse_proxy" {
services = local.reverse_proxy_services
}
module "nextcloud" {
source = "../../modules/apps/nextcloud"
fqdn = local.nextcloud_fqdn
persistent_folder = local.persistent_folder
app_config = local.nextcloud_config
db_credentials_are_secrets = true
tls_enabled = true
issuer = local.internal_issuer
}
+43
View File
@@ -16,6 +16,13 @@ locals {
"185.253.5.0"
]
override_hosts = [
{
name = "cloud.alexpires.me"
ip = "10.19.4.136"
},
]
zones = [
{
fqdn = "${local.lab_domain}"
@@ -88,4 +95,40 @@ locals {
}
}
scaleway_smtp_host = "smtp.tem.scw.cloud"
nextcloud_fqdn = "cloud.alexpires.me"
nextcloud_db_passwd = var.nextcloud_db_passwd
nextcloud_db_root_password = var.nextcloud_db_root_password
nextcloud_db_path = "${local.persistent_folder}/mysql/nextcloud"
backup_folder = "/mnt/usb/backups/nextcloud"
nextcloud_config = {
mail_from = "cloud"
mail_domain = "alexpires.me"
smtp_user = var.scaleway_project_id
smtp_password = local.mail_app_api_secret_key
smtp_host = local.scaleway_smtp_host
admin_password = var.nextcloud_admin_password
db_host = module.nextcloud_db.host
db_name = module.nextcloud_db.db_name
db_user = module.nextcloud_db.app_crendentials_name
db_password = module.nextcloud_db.app_crendentials_name
}
backup_retention_days = 3
backup_cron_schedule = "0 2 * * *" # Daily at 2 AM
backup_bucket_name = data.terraform_remote_state.scaleway.outputs.backup_bucket_name
backup_app_api_secret_key = data.terraform_remote_state.scaleway.outputs.backup_app_api_secret_key
backup_app_api_access_key = data.terraform_remote_state.scaleway.outputs.backup_app_api_access_key
mail_app_api_secret_key = data.terraform_remote_state.scaleway.outputs.mail_app_api_secret_key
}
data "terraform_remote_state" "scaleway" {
backend = "s3"
config = {
bucket = "a13labs.infra.eu"
key = "scaleway.core.infra.tfstate"
region = "eu-west-1"
}
}
+17
View File
@@ -0,0 +1,17 @@
module "nextcloud_db" {
source = "../../modules/db/mariadb"
namespace = module.nextcloud.namespace
app_name = "nextcloud"
app_password = local.nextcloud_db_passwd
root_password = local.nextcloud_db_root_password
retention_days = local.backup_retention_days
cron_schedule = local.backup_cron_schedule
database_folder = local.nextcloud_db_path
backup_folder = local.backup_folder
tls_enabled = true
issuer = local.internal_issuer
}
+16
View File
@@ -1 +1,17 @@
variable "nextcloud_db_passwd" {
description = "Password for the Nextcloud database"
type = string
sensitive = true
}
variable "nextcloud_db_root_password" {
description = "Root password for the Nextcloud database"
type = string
sensitive = true
}
variable "nextcloud_admin_password" {
description = "Password for the Nextcloud admin user"
type = string
sensitive = true
}
+4
View File
@@ -1,2 +1,6 @@
AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY
AWS_SECRET_ACCESS_KEY=$AWS_SECRET_KEY
TF_VAR_nextcloud_db_passwd=$MYSQL_NEXTCLOUD_PASSWORD
TF_VAR_nextcloud_db_root_password=$MYSQL_ROOT_PASSWORD
TF_VAR_nextcloud_admin_password=$NEXTCLOUD_ADMIN_PASSWORD
TF_VAR_scaleway_project_id=$SCALEWAY_PROJECT_ID
+4 -1
View File
@@ -1 +1,4 @@
variable "scaleway_project_id" {
description = "Scaleway Project Id"
type = string
}