Minetest Deployment

This commit is contained in:
Brandon Rozek 2020-05-09 10:30:13 -04:00
commit 68f8cad354
11 changed files with 153 additions and 0 deletions

10
config Normal file
View file

@ -0,0 +1,10 @@
base_system_image = "ubuntu-20-04-x64"
region = "nyc3"
size = "512mb"
domain = "brandonrozek.com"
subdomain = "minetest"
# Secrets
do_token = "DO-TOKEN-HERE"
key_name = "SSH-NAME-ON-DO-HERE"

29
packer/do.pkr.hcl Normal file
View file

@ -0,0 +1,29 @@
source "digitalocean" "web" {
api_token = var.do_token
image = var.base_system_image
region = var.region
size = var.size
ssh_username = "root"
snapshot_name = "packer-docker"
}
build {
sources = [
"source.digitalocean.web",
]
provisioner "file" {
source = "docker-compose.yml"
destination = "/root/docker-compose.yml"
}
provisioner "file" {
source = "docker-compose.service"
destination = "/etc/systemd/system/docker-compose.service"
}
provisioner "shell" {
scripts = [ "setup.sh" ]
}
}

View file

@ -0,0 +1,16 @@
[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/root
ExecStart=/usr/bin/docker-compose up -d
ExecStop=/usr/bin/docker-compose down
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target

14
packer/docker-compose.yml Normal file
View file

@ -0,0 +1,14 @@
version: "2.1"
services:
minetest:
image: linuxserver/minetest
container_name: minetest
environment:
- PUID=1000
- PGID=1000
- TZ=US/Eastern
volumes:
- /volumes/minetest/config/.minetest:/config/.minetest
ports:
- 30000:30000/udp
restart: unless-stopped

13
packer/setup.sh Executable file
View file

@ -0,0 +1,13 @@
#!/bin/bash
apt update
apt upgrade -y
apt install -y docker.io docker-compose
systemctl enable docker-compose
systemctl start docker-compose
ufw allow OpenSSH
# Add any firewall rules you need
# for your application here
ufw allow 30000/udp
ufw --force enable

View file

@ -0,0 +1 @@
../config

1
packer/variables.pkr.hcl Symbolic link
View file

@ -0,0 +1 @@
../variables.hcl

38
terraform/do.tf Normal file
View file

@ -0,0 +1,38 @@
provider "digitalocean" {
token = var.do_token
}
data "digitalocean_ssh_key" laptop {
name = var.key_name
}
data "digitalocean_droplet_snapshot" "packer_snapshot" {
name = "packer-docker"
most_recent = true
}
# Create a droplet
resource "digitalocean_droplet" "web" {
name = "tf-1"
image = data.digitalocean_droplet_snapshot.packer_snapshot.id
region = var.region
size = var.size
ssh_keys = [data.digitalocean_ssh_key.laptop.id]
backups = false
}
# Attach a subdomain
resource "digitalocean_record" "www" {
domain = var.domain
type = "A"
name = var.subdomain
value = digitalocean_droplet.web.ipv4_address
}
output "ip" {
value = digitalocean_droplet.web.ipv4_address
}
output "domain" {
value = "${digitalocean_record.www.name}.${digitalocean_record.www.domain}"
}

1
terraform/terraform.tfvars Symbolic link
View file

@ -0,0 +1 @@
../config

1
terraform/variables.tf Symbolic link
View file

@ -0,0 +1 @@
../variables.hcl

29
variables.hcl Normal file
View file

@ -0,0 +1,29 @@
variable "do_token" {
type = string
}
variable "base_system_image" {
type = string
}
variable "domain" {
type = string
}
variable "key_name" {
type = string
}
variable "subdomain" {
type = string
}
variable "region" {
type = string
}
variable "size" {
type = string
}