From 7ea55a00f343fa059866e4e58bf47f3b52956473 Mon Sep 17 00:00:00 2001 From: mitchell Date: Mon, 17 Feb 2020 00:51:00 -0500 Subject: [PATCH] Add terraform configuration; Modify dockerfile workdirs; Modify router to simplify routes --- .gitignore | 6 ++++ Dockerfile | 12 ++++--- Dockerfile.dev | 4 +-- lib/shortnr/router.ex | 4 +-- terraform/main.tf | 83 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 100 insertions(+), 9 deletions(-) create mode 100644 terraform/main.tf diff --git a/.gitignore b/.gitignore index 6eeff4b..80e56cb 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,9 @@ service-*.tar # Ignore development DETS file urls + +# Terraform related files +*.tfstate +*.tfstate.backup +*.tfvars +.terraform/ diff --git a/Dockerfile b/Dockerfile index aed78fd..efe9396 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,19 @@ FROM elixir:1.10 as build -WORKDIR /root/shortnr +WORKDIR /shortnr COPY . . RUN mix local.hex --force RUN mix local.rebar --force -RUN env MIX_ENV=prod mix release +ENV MIX_ENV prod +RUN mix clean --deps +RUN mix release FROM debian:stable-20191224-slim -WORKDIR /home/shortnr -COPY --from=build /root/shortnr/_build/prod/rel/shortnr/ . +WORKDIR /shortnr +COPY --from=build /shortnr/_build/prod/rel/shortnr/ . RUN apt-get update && apt-get install -y --no-install-recommends \ libtinfo5=6.1+20181013-2+deb10u2 \ @@ -26,7 +28,7 @@ ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 RUN groupadd -r shortnr && useradd --no-log-init -r -g shortnr shortnr -RUN chown -R shortnr:shortnr /home/shortnr +RUN chown -R shortnr:shortnr /shortnr USER shortnr ENTRYPOINT ["bin/shortnr", "start"] diff --git a/Dockerfile.dev b/Dockerfile.dev index 8c96921..9118471 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,9 +1,9 @@ FROM elixir:1.10 as dev -WORKDIR /root/shortnr +WORKDIR /shortnr RUN apt-get update -RUN apt-get install -y fish vim +RUN apt-get install -y fish vim rsync RUN mix local.hex --force RUN mix local.rebar --force diff --git a/lib/shortnr/router.ex b/lib/shortnr/router.ex index a412508..ab314be 100644 --- a/lib/shortnr/router.ex +++ b/lib/shortnr/router.ex @@ -16,13 +16,13 @@ defmodule Shortnr.Router do plug(:dispatch) # BEGIN URL routes - post("/urls/:url", do: URL.Endpoints.select(conn, :create, url)) + post("/:url", do: URL.Endpoints.select(conn, :create, url)) get("/", do: URL.Endpoints.select(conn, :list)) - get("/urls", do: URL.Endpoints.select(conn, :list)) get("/:id", do: URL.Endpoints.select(conn, :get, id)) delete("/:id", do: URL.Endpoints.select(conn, :delete, id)) + # END match _ do diff --git a/terraform/main.tf b/terraform/main.tf new file mode 100644 index 0000000..e543f01 --- /dev/null +++ b/terraform/main.tf @@ -0,0 +1,83 @@ +# vim:foldmethod=indent + +provider "google" { + version = "3.8.0" + project = var.project_id + region = "us-east4" + zone = "us-east4-b" +} + +variable "ssh_keys" { + type = string + description = "The ssh username and key in the format `username:ssh-key`." +} + +variable "project_id" { + type = string + description = "The name of the google cloud project you're deploying to." +} + +variable "deletion_protection" { + type = bool + description = "Whether to apply deletion protection to the shortnr-instance." + default = true +} + +output "shortnr_static_ip" { + value = google_compute_address.selfpass.address + description = "The public static IP address used by the Shortnr instance." +} + +data "google_compute_image" "debian_image" { + family = "debian-10" + project = "debian-cloud" +} + +resource "google_compute_address" "selfpass" { + name = "selfpass-address" +} + +resource "google_compute_instance" "selfpass" { + name = "selfpass-instance" + machine_type = "f1-micro" + deletion_protection = var.deletion_protection + + boot_disk { + auto_delete = false + + initialize_params { + image = data.google_compute_image.debian_image.self_link + } + } + + network_interface { + network = "default" + access_config { + nat_ip = google_compute_address.selfpass.address + } + } + + metadata = { + ssh-keys = var.ssh_keys + } +} + +resource "google_compute_firewall" "http_server" { + name = "http-server" + network = "default" + + allow { + protocol = "tcp" + ports = ["80"] + } +} + +resource "google_compute_firewall" "docker_machine" { + name = "docker-machine" + network = "default" + + allow { + protocol = "tcp" + ports = ["2376"] + } +}