diff --git a/.gitignore b/.gitignore index 2c74b23..2137a2d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -dataDir/* +app/dataDir/* # Local .terraform directories **/.terraform/* @@ -30,3 +30,4 @@ override.tf.json # Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan # example: *tfplan* +dumbserver.image.tar diff --git a/README b/README index 48ed1bf..0676c34 100644 --- a/README +++ b/README @@ -3,19 +3,35 @@ The Terraform part is on the more "enterprise" side with not only just a public for the docker imaging look at: https://www.fosstechnix.com/how-to-create-docker-image-for-node-js-application/ The docker image can be built with -docker build -t dumbserver . +podman build -t dumbserver . the image then can be extracted with -docker image save -o dumbserver.image.tar dumbserver +podman image save -o dumbserver.image.tar dumbserver on the target machine it can be imported with -docker image load -i dumbserer.image.tar +podman image load -i dumbserer.image.tar and running a container with the image id done via: -docker run -p 1280:1280 dumbserver +podman run --name dumbserver -p 1280:1280 dumbserver (Port 1280 is what it listens on) +updating the image from a local file (in podman): +podman pull oci-archive:/tmp/dumbserver.image.tar +then the container needs to be re-created... stop/rm/run + At this stage, terraform will create an ssh accessable server (key is in "terraformtest1.ppk") - tutorial used for that: https://medium.com/@hmalgewatta/setting-up-an-aws-ec2-instance-with-ssh-access-using-terraform-c336c812322f As part of the terraform, I copy a script to install docker/podman - and upload the image then I set up the container and start it. that's it. + +initialize with +terraform init + +then plan +terraform plan + +then apply +terraform apply + +To read the terraform output into powershell use +$Json_Output = (& terraform output -json) | ConvertFrom-Json diff --git a/Dockerfile b/app/Dockerfile similarity index 75% rename from Dockerfile rename to app/Dockerfile index 8d2a0d5..2530b76 100644 --- a/Dockerfile +++ b/app/Dockerfile @@ -4,12 +4,15 @@ FROM node:current-slim WORKDIR /nodejsapp # To Install All dependencies -COPY package*.json ./ +COPY package*.json . RUN npm install # To copy all application packages COPY . . +# expose the data dir as a volume +VOLUME [ "dataDir" ] + # Expose port 1280 and Run the server.js file to start node js application EXPOSE 1280 CMD [ "node", "dumbserver.js" ] \ No newline at end of file diff --git a/dumbserver.js b/app/dumbserver.js similarity index 100% rename from dumbserver.js rename to app/dumbserver.js diff --git a/app/index.html b/app/index.html new file mode 100644 index 0000000..124fd05 --- /dev/null +++ b/app/index.html @@ -0,0 +1,9 @@ + + + + Dumbserver + + +

Server version: 2022-09-30_10_21_17

+ + diff --git a/package.json b/app/package.json similarity index 100% rename from package.json rename to app/package.json diff --git a/docker/buildimage.cmd b/docker/buildimage.cmd new file mode 100644 index 0000000..ef0a9a2 --- /dev/null +++ b/docker/buildimage.cmd @@ -0,0 +1,2 @@ +docker build -t dumbserver ../app/ +docker image save -o dumbserver.image.tar dumbserver \ No newline at end of file diff --git a/dumbserver.image.tar b/dumbserver.image.tar deleted file mode 100644 index 3a178f3..0000000 Binary files a/dumbserver.image.tar and /dev/null differ diff --git a/index.html b/index.html deleted file mode 100644 index bb8070e..0000000 --- a/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -

Hello World!

- - diff --git a/setupAppServer.sh b/setupAppServer.sh deleted file mode 100644 index aeeae41..0000000 --- a/setupAppServer.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -export DEBIAN_FRONTEND=noninteractive - -apt -y update -apt -y upgrade -apt -y update -apt -y install docker.io - -docker image load -i /tmp/dumbserver.image.tar - -docker run -d -p 1280:1280 dumbserver \ No newline at end of file diff --git a/.terraform.lock.hcl b/terraform/.terraform.lock.hcl similarity index 100% rename from .terraform.lock.hcl rename to terraform/.terraform.lock.hcl diff --git a/appServer.tf b/terraform/appServer.tf similarity index 82% rename from appServer.tf rename to terraform/appServer.tf index 59fc1ef..df781ec 100644 --- a/appServer.tf +++ b/terraform/appServer.tf @@ -44,16 +44,21 @@ resource "aws_instance" "app_server" { # Uplaod docker image provisioner "file" { - source = "dumbserver.image.tar" + source = "../docker/dumbserver.image.tar" destination = "/tmp/dumbserver.image.tar" } + # Upload example data file + provisioner "file" { + source = "../app/dataDir/data" + destination = "/tmp/data" + } + provisioner "remote-exec" { inline = [ "chmod +x /tmp/setupAppServer.sh", "sudo /tmp/setupAppServer.sh" ] - } } diff --git a/gateways.tf b/terraform/gateways.tf similarity index 100% rename from gateways.tf rename to terraform/gateways.tf diff --git a/network.tf b/terraform/network.tf similarity index 100% rename from network.tf rename to terraform/network.tf diff --git a/outputs.tf b/terraform/outputs.tf similarity index 100% rename from outputs.tf rename to terraform/outputs.tf diff --git a/security.tf b/terraform/security.tf similarity index 100% rename from security.tf rename to terraform/security.tf diff --git a/terraform/setupAppServer.sh b/terraform/setupAppServer.sh new file mode 100644 index 0000000..370cc4a --- /dev/null +++ b/terraform/setupAppServer.sh @@ -0,0 +1,25 @@ +#!/bin/bash +export DEBIAN_FRONTEND=noninteractive + +apt -y update +apt -y upgrade +apt -y update +apt -y install podman + +podman image load -i /tmp/dumbserver.image.tar + +# create the directory for the data file and, if not existing (which is the default) copy the example file +mkdir -p /var/local/dumbserver +if [ ! -f /var/local/dumbserver/data ]; then + cp /tmp/data /var/local/dumbserver/ +fi + +podman run --name dumbserver -d -p 1280:1280 -v /var/local/dumbserver:/nodejsapp/dataDir dumbserver + +# make sure it comes up after reboot... +podman generate systemd --new --name dumbserver > /etc/systemd/system/dumbserver-podman.service +systemctl daemon-reload +systemctl enable dumbserver-podman.service + +# finally, all is set up and after all the updates we want to reboot into the new kernel version +shutdown -r 1 \ No newline at end of file diff --git a/subnets.tf b/terraform/subnets.tf similarity index 100% rename from subnets.tf rename to terraform/subnets.tf diff --git a/variables.tf b/terraform/variables.tf similarity index 100% rename from variables.tf rename to terraform/variables.tf