diff --git a/.gitignore b/.gitignore index 14de775..14af932 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -credentials.json +google.json logs/ diff --git a/credentials/authenticate.sh b/credentials/authenticate.sh index ea07629..e901157 100755 --- a/credentials/authenticate.sh +++ b/credentials/authenticate.sh @@ -4,11 +4,11 @@ REPO_ROOT=$(dirname $(readlink -f $0))/.. export $($REPO_ROOT/docker/scripts/environment.sh) # Extract credentials from environment -if [ ! -z "$DESKTOP_ENVIRONMENT_CREDENTIALS" ]; then +if [ ! -z "$DESKTOP_ENVIRONMENT_GOOGLE_CREDENTIALS" ]; then docker run \ - --env DESKTOP_ENVIRONMENT_CREDENTIALS \ + --env DESKTOP_ENVIRONMENT_GOOGLE_CREDENTIALS \ --interactive \ --rm \ --volume DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY:$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY \ - alpine:latest ash -c "echo '$DESKTOP_ENVIRONMENT_CREDENTIALS' > $DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY/credentials/credentials.json" + alpine:latest ash -c "echo '$DESKTOP_ENVIRONMENT_GOOGLE_CREDENTIALS' > $DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY/credentials/google.json" fi diff --git a/docker/Dockerfile b/docker/Dockerfile index b26d56a..85e53d1 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,6 +1,23 @@ FROM stemn/development-environment:latest USER root +# System environment configuration +ENV S6_LOGGING 1 + +# Container user home directories +ENV BASE_USER stemn +ENV USER jackson +ENV HOME /$USER/home + +# User environment configuration +ARG STEMN_GIT_EMAIL +ARG STEMN_GIT_NAME +ENV STEMN_GIT_EMAIL $STEMN_GIT_EMAIL +ENV STEMN_GIT_NAME $STEMN_GIT_NAME + +# Remove base user files +RUN rm -rf /$BASE_USER + # Install user utilities RUN apt-get update -qq && \ apt-get install -qq --fix-broken --fix-missing \ @@ -9,6 +26,7 @@ RUN apt-get update -qq && \ arandr \ feh \ numlockx \ + ruby-dev \ software-properties-common \ vcsh \ vlc \ @@ -69,30 +87,17 @@ RUN apt-get update -qq && apt-get install -qq \ wget -O /etc/fonts/local.conf -nv https://raw.githubusercontent.com/jessfraz/dockerfiles/master/chrome/stable/local.conf && \ groupadd --system chrome +# Install gem utilities +RUN gem install \ + travis + # Install yarn utilities RUN yarn global add \ http-server -# System environment configuration -ENV S6_LOGGING 1 - -# Container user home directories -ENV BASE_USER stemn -ENV USER jackson -ENV HOME /$USER/home - -# Remove base user files -RUN rm -rf /$BASE_USER - -# Make the user's workspace directory +# Make the new user's home directory RUN mkdir -p $HOME -# User environment configuration -ENV STEMN_GIT_EMAIL "jackson@stemn.com" -ENV STEMN_GIT_NAME "Jackson Delahunt" -ENV TMUX $HOME/.tmux.sock -RUN touch $TMUX - # Rename the first non-root group to jackson RUN groupmod \ --new-name \ diff --git a/docker/scripts/build.sh b/docker/scripts/build.sh index 04b7d2c..3c808e3 100755 --- a/docker/scripts/build.sh +++ b/docker/scripts/build.sh @@ -6,5 +6,7 @@ export $($REPO_ROOT/docker/scripts/environment.sh) docker build \ --build-arg DESKTOP_CONTAINER_BUILD_DATE=$(date +%s) \ --build-arg DESKTOP_CONTAINER_GIT_SHA=$(git --git-dir $REPO_ROOT/.git rev-parse HEAD | cut -b 1-7) \ + --build-arg DESKTOP_ENVIRONMENT_GIT_EMAIL \ + --build-arg DESKTOP_ENVIRONMENT_GIT_NAME \ --tag $DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER:$DESKTOP_ENVIRONMENT_BRANCH \ $REPO_ROOT/docker diff --git a/docker/scripts/environment.sh b/docker/scripts/environment.sh index fcb1950..6613c6d 100755 --- a/docker/scripts/environment.sh +++ b/docker/scripts/environment.sh @@ -1,25 +1,29 @@ REPO_ROOT=$(dirname $(readlink -f $0))/../.. -# Desktop environment user configuration -DESKTOP_ENVIRONMENT_CONTAINER=desktop-environment -DESKTOP_ENVIRONMENT_DOMAIN_NAME=cloud.jacksondelahunt.com +# Desktop environment repository information DESKTOP_ENVIRONMENT_REGISTRY=sabrehagen -DESKTOP_ENVIRONMENT_USER=jackson -DESKTOP_ENVIRONMENT_USER_HOME=/home/$DESKTOP_ENVIRONMENT_USER -DESKTOP_ENVIRONMENT_USER_ID=1000 +DESKTOP_ENVIRONMENT_CONTAINER=desktop-environment +echo DESKTOP_ENVIRONMENT_BRANCH=${TRAVIS_BRANCH-$(git --git-dir $REPO_ROOT/.git rev-parse --abbrev-ref HEAD)} echo DESKTOP_ENVIRONMENT_CONTAINER=$DESKTOP_ENVIRONMENT_CONTAINER -echo DESKTOP_ENVIRONMENT_DOMAIN_NAME=$DESKTOP_ENVIRONMENT_DOMAIN_NAME echo DESKTOP_ENVIRONMENT_REGISTRY=$DESKTOP_ENVIRONMENT_REGISTRY + +# Desktop environment user configuration +DESKTOP_ENVIRONMENT_USER=jackson +echo DESKTOP_ENVIRONMENT_GIT_EMAIL=jackson@stemn.com +echo DESKTOP_ENVIRONMENT_GIT_NAME="Jackson Delahunt" echo DESKTOP_ENVIRONMENT_USER=$DESKTOP_ENVIRONMENT_USER -echo DESKTOP_ENVIRONMENT_USER_HOME=$DESKTOP_ENVIRONMENT_USER_HOME -echo DESKTOP_ENVIRONMENT_USER_ID=$DESKTOP_ENVIRONMENT_USER_ID +echo DESKTOP_ENVIRONMENT_USER_ID=1000 + +# Desktop environment cloudflare configuration +echo DESKTOP_ENVIRONMENT_CLOUDFLARE_DOMAIN=jacksondelahunt.com +echo DESKTOP_ENVIRONMENT_CLOUDFLARE_EMAIL=jackson@jacksondelahunt.com # Desktop environment docker configuration echo DESKTOP_ENVIRONMENT_DOCKER_NETWORK=$DESKTOP_ENVIRONMENT_REGISTRY-$DESKTOP_ENVIRONMENT_CONTAINER echo DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY=/$DESKTOP_ENVIRONMENT_CONTAINER -# Desktop environment repository information -echo DESKTOP_ENVIRONMENT_BRANCH=${TRAVIS_BRANCH-$(git --git-dir $REPO_ROOT/.git rev-parse --abbrev-ref HEAD)} +DESKTOP_ENVIRONMENT_USER_HOME=/home/$DESKTOP_ENVIRONMENT_USER +echo DESKTOP_ENVIRONMENT_USER_HOME=$DESKTOP_ENVIRONMENT_USER_HOME # Desktop environment application cache volumes echo DESKTOP_ENVIRONMENT_CACHE_CERTIFICATES=$DESKTOP_ENVIRONMENT_USER_HOME/.pki diff --git a/docker/scripts/start-xpra.sh b/docker/scripts/start-xpra.sh index 9eb969a..fda5df5 100755 --- a/docker/scripts/start-xpra.sh +++ b/docker/scripts/start-xpra.sh @@ -20,7 +20,7 @@ docker run \ --label traefik.backend=$XPRA_SERVER_CONTAINER \ --label traefik.enable=true \ --label traefik.frontend.entryPoints=https \ - --label traefik.frontend.rule=Host:$DESKTOP_ENVIRONMENT_DOMAIN_NAME \ + --label traefik.frontend.rule=Host:$DESKTOP_ENVIRONMENT_CLOUDFLARE_DOMAIN \ --label traefik.port=$XPRA_WEB_PORT \ --name $XPRA_SERVER_CONTAINER \ --network $DESKTOP_ENVIRONMENT_DOCKER_NETWORK \ diff --git a/packer/build.sh b/packer/build.sh new file mode 100644 index 0000000..f418647 --- /dev/null +++ b/packer/build.sh @@ -0,0 +1,20 @@ +REPO_ROOT=$(dirname $(realpath $0))/.. + +# Export desktop environment shell configuration +export $($REPO_ROOT/docker/scripts/environment.sh) + +# Authenticate with cloud service provider +$REPO_ROOT/credentials/authenticate.sh + +docker run \ + --env DESKTOP_ENVIRONMENT_CONTAINER \ + --env DESKTOP_ENVIRONMENT_REGISTRY \ + --env GOOGLE_APPLICATION_CREDENTIALS=$DESKTOP_ENVIRONMENT_HOST_REPOSITORY/credentials/google.json \ + --interactive \ + --rm \ + --tty \ + --volume $DESKTOP_ENVIRONMENT_HOST_REPOSITORY:$DESKTOP_ENVIRONMENT_HOST_REPOSITORY \ + --workdir $DESKTOP_ENVIRONMENT_HOST_REPOSITORY \ + hashicorp/packer:light build \ + -force \ + desktop-environment.json diff --git a/packer/scripts/build.sh b/packer/scripts/build.sh index 21c21ad..2f633ba 100755 --- a/packer/scripts/build.sh +++ b/packer/scripts/build.sh @@ -10,13 +10,13 @@ $REPO_ROOT/docker/scripts/clone.sh $REPO_ROOT/credentials/authenticate.sh docker run \ - --env GOOGLE_APPLICATION_CREDENTIALS=$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY/credentials/credentials.json \ + --env DESKTOP_ENVIRONMENT_CONTAINER \ + --env DESKTOP_ENVIRONMENT_REGISTRY \ + --env GOOGLE_APPLICATION_CREDENTIALS=$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY/credentials/google.json \ --interactive \ --rm \ --tty \ --volume DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY:$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY:ro \ hashicorp/packer:light build \ -force \ - -var DESKTOP_ENVIRONMENT_CONTAINER=$DESKTOP_ENVIRONMENT_CONTAINER \ - -var DESKTOP_ENVIRONMENT_REGISTRY=$DESKTOP_ENVIRONMENT_REGISTRY \ $DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY/packer/desktop-environment.json diff --git a/terraform/desktop-environment.tf b/terraform/desktop-environment.tf index 4fa05c7..4762619 100644 --- a/terraform/desktop-environment.tf +++ b/terraform/desktop-environment.tf @@ -79,3 +79,20 @@ resource "google_compute_network" "desktop-environment" { resource "google_compute_address" "static" { name = "cloud-jacksondelahunt-com" } + +provider "cloudflare" { + email = "${var.DESKTOP_ENVIRONMENT_CLOUDFLARE_EMAIL}" + token = "${var.DESKTOP_ENVIRONMENT_CLOUDFLARE_TOKEN}" +} + +variable "domain" { + default = "${var.DESKTOP_ENVIRONMENT_CLOUDFLARE_DOMAIN}" +} + +resource "cloudflare_record" "cloud" { + domain = "${var.DESKTOP_ENVIRONMENT_CLOUDFLARE_DOMAIN}" + name = "cloud" + value = "${google_compute_address.static.address}" + type = "A" + proxied = true +} diff --git a/terraform/scripts/terraform.sh b/terraform/scripts/terraform.sh index 888adcd..899dff2 100755 --- a/terraform/scripts/terraform.sh +++ b/terraform/scripts/terraform.sh @@ -12,13 +12,15 @@ TERRAFORM_ARGS=$@ # Execute the supplied terraform command docker run \ --entrypoint ash \ - --env GOOGLE_APPLICATION_CREDENTIALS=$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY/credentials/credentials.json \ + --env GOOGLE_APPLICATION_CREDENTIALS=$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY/credentials/google.json \ --env TF_CLI_ARGS_apply="-auto-approve -lock=false" \ --env TF_CLI_ARGS_destroy="-auto-approve -lock=false" \ --env TF_IN_AUTOMATION=true \ --env TF_INPUT=0 \ --env TF_VAR_DESKTOP_ENVIRONMENT_CONTAINER=$DESKTOP_ENVIRONMENT_CONTAINER \ --env TF_VAR_DESKTOP_ENVIRONMENT_REGISTRY=$DESKTOP_ENVIRONMENT_REGISTRY \ + --env TF_VAR_owner_host=$HOSTNAME \ + --env TF_VAR_owner_name=$USER \ --rm \ --tty \ --volume DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY:$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY \ diff --git a/terraform/start.sh b/terraform/start.sh new file mode 100644 index 0000000..e1c9280 --- /dev/null +++ b/terraform/start.sh @@ -0,0 +1,16 @@ +REPO_ROOT=$(dirname $(realpath $0))/../.. + +# Export desktop environment shell configuration +export $($REPO_ROOT/docker/scripts/environment.sh) + +# Authenticate with cloud service provider +$REPO_ROOT/credentials/authenticate.sh + +docker run \ + --env GOOGLE_APPLICATION_CREDENTIALS=$DESKTOP_ENVIRONMENT_HOST_REPOSITORY/credentials/google.json \ + --interactive \ + --rm \ + --tty \ + --volume $DESKTOP_ENVIRONMENT_HOST_REPOSITORY:$DESKTOP_ENVIRONMENT_HOST_REPOSITORY \ + --workdir $DESKTOP_ENVIRONMENT_HOST_REPOSITORY \ + hashicorp/terraform:light apply diff --git a/terraform/variables.tf b/terraform/variables.tf index 9b4d27b..2baa232 100644 --- a/terraform/variables.tf +++ b/terraform/variables.tf @@ -1,3 +1,15 @@ +variable "DESKTOP_ENVIRONMENT_CLOUDFLARE_DOMAIN" { + description = "The DESKTOP_ENVIRONMENT_CLOUDFLARE_DOMAIN environment variable." +} + +variable "DESKTOP_ENVIRONMENT_CLOUDFLARE_EMAIL" { + description = "The DESKTOP_ENVIRONMENT_CLOUDFLARE_EMAIL environment variable." +} + +variable "DESKTOP_ENVIRONMENT_CLOUDFLARE_TOKEN" { + description = "The DESKTOP_ENVIRONMENT_CLOUDFLARE_TOKEN environment variable." +} + variable "DESKTOP_ENVIRONMENT_CONTAINER" { description = "The DESKTOP_ENVIRONMENT_CONTAINER environment variable." }