You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
3.4 KiB
125 lines
3.4 KiB
packer { |
|
required_plugins { |
|
digitalocean = { |
|
version = ">= 1.0.4" |
|
source = "github.com/digitalocean/digitalocean" |
|
} |
|
} |
|
} |
|
|
|
variable "application_name" { |
|
type = string |
|
default = "Bitwarden" |
|
} |
|
|
|
variable "application_version" { |
|
type = string |
|
default = "${env("DIGITALOCEAN_IMG_VERSION")}" |
|
} |
|
|
|
variable "apt_packages" { |
|
type = string |
|
default = "fail2ban ca-certificates curl gnupg" |
|
} |
|
|
|
variable "docker_packages" { |
|
type = string |
|
default = "docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin" |
|
} |
|
|
|
variable "do_token" { |
|
type = string |
|
default = "${env("DIGITALOCEAN_TOKEN")}" |
|
sensitive = true |
|
} |
|
|
|
# "timestamp" template function replacement |
|
locals { timestamp = regex_replace(timestamp(), "[- TZ:]", "") } |
|
|
|
# All locals variables are generated from variables that uses expressions |
|
# that are not allowed in HCL2 variables. |
|
locals { |
|
image_name = "bitwarden-22-04-snapshot-${local.timestamp}" |
|
} |
|
|
|
source "digitalocean" "bitwarden_self_host" { |
|
api_token = "${var.do_token}" |
|
image = "ubuntu-22-04-x64" |
|
region = "nyc3" |
|
size = "s-1vcpu-2gb" |
|
snapshot_name = "${local.image_name}" |
|
ssh_username = "root" |
|
} |
|
|
|
build { |
|
sources = ["source.digitalocean.bitwarden_self_host"] |
|
|
|
provisioner "shell" { |
|
inline = ["cloud-init status --wait"] |
|
} |
|
|
|
provisioner "file" { |
|
destination = "/etc/" |
|
source = "files/etc/" |
|
} |
|
|
|
provisioner "file" { |
|
destination = "/opt/" |
|
source = "files/opt/" |
|
} |
|
|
|
provisioner "file" { |
|
destination = "/var/" |
|
source = "files/var/" |
|
} |
|
|
|
provisioner "shell" { |
|
environment_vars = [ |
|
"DEBIAN_FRONTEND=noninteractive", |
|
"LC_ALL=C", |
|
"LANG=en_US.UTF-8", |
|
"LC_CTYPE=en_US.UTF-8" |
|
] |
|
inline = [ |
|
"apt-get -qqy update", |
|
"apt-get -qqy -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' full-upgrade", |
|
"apt-get -qqy -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' install ${var.apt_packages}", |
|
"install -m 0755 -d /etc/apt/keyrings", |
|
"curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg", |
|
"chmod a+r /etc/apt/keyrings/docker.gpg", |
|
"echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo \"$VERSION_CODENAME\") stable\" | tee /etc/apt/sources.list.d/docker.list > /dev/null", |
|
"apt-get -qqy update", |
|
"apt-get -qqy -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' install ${var.docker_packages}", |
|
"apt-get -qqy clean", |
|
"rm -rf /opt/digitalocean", |
|
"rm -rf /var/log/auth.log", |
|
"rm -rf /var/log/kern.log", |
|
"rm -rf /var/log/ufw.log", |
|
"rm -rf /var/log/ubuntu-advantage.log", |
|
"rm -rf /var/log/droplet-agent.update.log" |
|
] |
|
} |
|
|
|
provisioner "shell" { |
|
environment_vars = [ |
|
"application_name=${var.application_name}", |
|
"application_version=${var.application_version}", |
|
"DEBIAN_FRONTEND=noninteractive", |
|
"LC_ALL=C", |
|
"LANG=en_US.UTF-8", |
|
"LC_CTYPE=en_US.UTF-8" |
|
] |
|
scripts = [ |
|
"scripts/01-setup-first-run.sh", |
|
"scripts/02-ufw-bitwarden.sh", |
|
"scripts/03-force-ssh-logout.sh", |
|
"scripts/90-cleanup.sh", |
|
"scripts/99-img-check.sh" |
|
] |
|
} |
|
|
|
post-processor "manifest" { |
|
output = "manifest.json" |
|
strip_path = true |
|
} |
|
}
|
|
|