This commit is contained in:
Jackson Delahunt 2019-02-28 20:14:26 +11:00
parent be180ac1da
commit 4ab82445e6
12 changed files with 116 additions and 38 deletions

2
.gitignore vendored
View file

@ -1,2 +1,2 @@
credentials.json
google.json
logs/

View file

@ -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

View file

@ -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 \

View file

@ -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

View file

@ -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

View file

@ -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 \

20
packer/build.sh Normal file
View file

@ -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

View file

@ -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

View file

@ -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
}

View file

@ -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 \

16
terraform/start.sh Normal file
View file

@ -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

View file

@ -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."
}