This commit is contained in:
Jackson Delahunt 2019-10-22 09:04:43 +11:00
parent 85a5215a1d
commit ceac7a9f98
26 changed files with 18 additions and 515 deletions

2
.gitignore vendored
View file

@ -1,3 +1 @@
google.json
logs/
.dotfiles-cachebust

View file

@ -2,7 +2,7 @@
[![Build Status](https://travis-ci.org/sabrehagen/desktop-environment.svg?branch=master)](https://travis-ci.org/sabrehagen/desktop-environment)
My [daily driver](https://cloud.docker.com/repository/docker/sabrehagen/desktop-environment) on the cloud and desktop.
My [daily driver](https://cloud.docker.com/repository/docker/sabrehagen/desktop-environment) on the cloud and on desktop.
## Getting Started
@ -25,4 +25,3 @@ Set your [user configuration](docker/scripts/environment.sh#L3) and go.
- [x] A computer wholly defined in code.
- [x] Only one command required to start.
- [x] Accessible from anywhere.

View file

@ -1,14 +0,0 @@
REPO_ROOT=$(dirname $(readlink -f $0))/..
# Export desktop environment shell configuration
eval "$($REPO_ROOT/docker/scripts/environment.sh)"
# Extract credentials from environment
if [ ! -z "$DESKTOP_ENVIRONMENT_GOOGLE_CREDENTIALS" ]; then
docker run \
--env DESKTOP_ENVIRONMENT_GOOGLE_CREDENTIALS \
--interactive \
--rm \
--volume DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY:$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY \
alpine:latest ash -c "echo '$DESKTOP_ENVIRONMENT_GOOGLE_CREDENTIALS' > $DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY/credentials/google.json"
fi

View file

@ -1,6 +1,8 @@
FROM ubuntu:19.04
ENV USER jackson
ARG DESKTOP_ENVIRONMENT_USER
ENV USER $DESKTOP_ENVIRONMENT_USER
ENV DISPLAY :1
ENV EDITOR nano
ENV HOME /home/$USER
@ -68,6 +70,7 @@ RUN apt-get update -qq && \
man-db \
nano \
ncdu \
neovim \
net-tools \
netcat-openbsd \
nnn \
@ -85,6 +88,8 @@ RUN apt-get update -qq && \
ssh \
sudo \
sxhkd \
tigervnc-scraping-server \
tigervnc-standalone-server \
tmux \
transmission-cli \
transmission-common \
@ -92,9 +97,7 @@ RUN apt-get update -qq && \
tree \
vcsh \
vim \
weechat \
wmctrl \
x11vnc \
xauth \
xdotool \
xinit \
@ -242,6 +245,10 @@ RUN git clone --depth 1 https://github.com/cloud-computer/noVNC.git /opt/noVNC
RUN wget -O /usr/local/bin/onedrive -nv https://github.com/sabrehagen/onedrive/raw/master/onedrive && \
chmod +x /usr/local/bin/onedrive
# Install python packages
RUN pip install \
speedtest-cli
# Install resucetime time tracker
RUN wget -O rescuetime.deb -nv https://www.rescuetime.com/installers/rescuetime_current_amd64.deb && \
dpkg -i rescuetime.deb || apt-get install -qq --fix-broken && \
@ -276,12 +283,6 @@ RUN wget -O code.deb -nv https://go.microsoft.com/fwlink/?LinkID=760868 && \
wget -O /usr/local/bin/shfmt -nv https://github.com/mvdan/sh/releases/download/v2.6.3/shfmt_v2.6.3_linux_amd64 && \
chmod +x /usr/local/bin/shfmt
# Install weechat slack plugin
RUN mkdir -p $HOME/.weechat/python/autoload && \
curl -fsSL https://raw.githubusercontent.com/rawdigits/wee-slack/master/wee_slack.py -o $HOME/.weechat/python/wee_slack.py && \
ln -s $HOME/.weechat/python/wee_slack.py $HOME/.weechat/python/autoload && \
pip install websocket-client
# Install yarn
RUN curl -fsSL https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian stable main" | tee /etc/apt/sources.list.d/yarn.list && \
@ -331,12 +332,14 @@ RUN groupmod --gid $DOCKER_GROUP docker
RUN useradd \
--create-home \
--groups $DOCKER_GROUP,audio,chrome,input,netdev,sudo,tty,video \
--password $USER \
--shell /bin/zsh \
$USER
# Take ownership of user's home directory
RUN chown -R $USER:$USER $HOME
# Set non-root user password
RUN echo 'jackson:$6$7De0aW9hUvGDKZmc$qrylcFmwKAL9iGNG9dvQ/GXCM4gLY.hES/P2d/3ZzRxkVMjD77WeTVSxV1P9XtmE9iAUmDwDTCHiVK.p5Ct1y1:18193:0:99999:7:::' >> /etc/shadow
# Take ownership of user's home directory and applications
RUN chown -R $USER:$USER $HOME /opt
# Become desktop environment user
USER $USER
@ -361,7 +364,6 @@ RUN vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-alacritty.git &
vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-ssh.git & \
vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-sxhkd.git & \
vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-tmux.git & \
vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-weechat.git & \
vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-x11.git & \
vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-xdg.git & \
vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-zsh.git & \

View file

@ -1,11 +0,0 @@
REPO_ROOT=$(dirname $(readlink -f $0))/../..
# Export desktop environment shell configuration
eval "$($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) \
--file docker/Dockerfile.kde \
--tag $DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER_NAME:kde \
$REPO_ROOT/docker

View file

@ -6,6 +6,7 @@ eval "$($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_USER=$DESKTOP_ENVIRONMENT_USER \
--build-arg DOTFILES_CACHEBUST=$(cat $REPO_ROOT/.dotfiles-cachebust 2>/dev/null) \
--file $REPO_ROOT/docker/Dockerfile \
--tag $DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER_NAME:$DESKTOP_ENVIRONMENT_CONTAINER_TAG \

View file

@ -3,7 +3,6 @@ REPO_ROOT=$(dirname $(readlink -f $0))/../..
# Remove volumes that can be recreated from scratch, but require manual configuration in app
$REPO_ROOT/docker/scripts/wipe-volume.sh DESKTOP_ENVIRONMENT_STATE_CHROME &
$REPO_ROOT/docker/scripts/wipe-volume.sh DESKTOP_ENVIRONMENT_STATE_CODE &
$REPO_ROOT/docker/scripts/wipe-volume.sh DESKTOP_ENVIRONMENT_STATE_GITHUB &
$REPO_ROOT/docker/scripts/wipe-volume.sh DESKTOP_ENVIRONMENT_STATE_JUMP &
$REPO_ROOT/docker/scripts/wipe-volume.sh DESKTOP_ENVIRONMENT_STATE_MUSIKCUBE &
$REPO_ROOT/docker/scripts/wipe-volume.sh DESKTOP_ENVIRONMENT_STATE_TRAEFIK &

View file

@ -27,12 +27,8 @@ echo export DESKTOP_ENVIRONMENT_DOCKER_NETWORK=$DESKTOP_ENVIRONMENT_REGISTRY-$DE
echo export DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY=/$DESKTOP_ENVIRONMENT_CONTAINER_NAME
# Desktop environment application cache volumes
echo export DESKTOP_ENVIRONMENT_CACHE_CERTIFICATES=$DESKTOP_ENVIRONMENT_USER_HOME/.pki
echo export DESKTOP_ENVIRONMENT_CACHE_CHROME=$DESKTOP_ENVIRONMENT_USER_HOME/.cache/google-chrome
echo export DESKTOP_ENVIRONMENT_CACHE_CODE=$DESKTOP_ENVIRONMENT_USER_HOME/.vscode
echo export DESKTOP_ENVIRONMENT_CACHE_GDRIVE=$DESKTOP_ENVIRONMENT_USER_HOME/.gdfuse
echo export DESKTOP_ENVIRONMENT_CACHE_SSH=$DESKTOP_ENVIRONMENT_USER_HOME/.ssh
echo export DESKTOP_ENVIRONMENT_CACHE_STEMN=$DESKTOP_ENVIRONMENT_USER_HOME/.stemn
echo export DESKTOP_ENVIRONMENT_CACHE_TMUX=$DESKTOP_ENVIRONMENT_USER_HOME/.tmux
echo export DESKTOP_ENVIRONMENT_CACHE_YARN=$DESKTOP_ENVIRONMENT_USER_HOME/.cache/yarn
echo export DESKTOP_ENVIRONMENT_CACHE_ZOOM=$DESKTOP_ENVIRONMENT_USER_HOME/.cache/zoom
@ -41,7 +37,6 @@ echo export DESKTOP_ENVIRONMENT_CACHE_ZSH=$DESKTOP_ENVIRONMENT_USER_HOME/.cache/
# Desktop environment application state volumes
echo export DESKTOP_ENVIRONMENT_STATE_CHROME=$DESKTOP_ENVIRONMENT_USER_HOME/.config/google-chrome
echo export DESKTOP_ENVIRONMENT_STATE_CODE=$DESKTOP_ENVIRONMENT_USER_HOME/.config/Code
echo export DESKTOP_ENVIRONMENT_STATE_GITHUB=$DESKTOP_ENVIRONMENT_USER_HOME/.config/github
echo export DESKTOP_ENVIRONMENT_STATE_I3=$DESKTOP_ENVIRONMENT_USER_HOME/.i3
echo export DESKTOP_ENVIRONMENT_STATE_JUMP=$DESKTOP_ENVIRONMENT_USER_HOME/.jump
echo export DESKTOP_ENVIRONMENT_STATE_MUSIKCUBE=$DESKTOP_ENVIRONMENT_USER_HOME/.config/musikcube/1

View file

@ -1,11 +0,0 @@
docker run \
--cap-add mknod \
--cap-add sys_admin \
--detach \
--device=/dev/fuse \
--name gdrive \
--security-opt apparmor:unconfined \
--volume /mnt/drive:/mnt/gdrive:shared \
--volume DESKTOP_ENVIRONMENT_CACHE_GDRIVE:/config/.gdfuse \
--volume /mnt/drive:/mnt/gdrive:shared \
mitcdh/google-drive-ocamlfuse

View file

@ -1,31 +0,0 @@
REPO_ROOT=$(dirname $(readlink -f $0))/../..
# Export desktop environment shell configuration
eval "$($REPO_ROOT/docker/scripts/environment.sh)"
# Start traefik to expose the xpra web client publicly
docker exec \
--detach \
--tty \
$DESKTOP_ENVIRONMENT_CONTAINER_NAME \
traefik \
--accessLog.filePath=/var/log/traefik-http.log \
--accessLog.format=json \
--acme.domains=*.$DESKTOP_ENVIRONMENT_CLOUDFLARE_DOMAIN \
--acme.email=$DESKTOP_ENVIRONMENT_CLOUDFLARE_EMAIL \
--acme.entrypoint=https \
--acme.httpchallenge \
--acme.httpchallenge.entrypoint=http \
--acme.storage=/etc/traefik/acme.json \
--acme=true \
--defaultentrypoints=http,https \
--docker \
--docker.endpoint=unix:///var/run/docker.sock \
--docker.exposedbydefault=false \
--docker.watch=true \
--entryPoints='Name:http Address::80 Redirect.EntryPoint:https' \
--entryPoints='Name:https Address::443 TLS' \
--logLevel=info \
--traefikLog.filePath=/var/log/traefik-system.log \
--traefikLog.format=json \
--web

View file

@ -1,35 +0,0 @@
REPO_ROOT=$(dirname $(readlink -f $0))/../..
# Export desktop environment shell configuration
eval "$($REPO_ROOT/docker/scripts/environment.sh)"
# Kill existing xpra server
docker ps -a | grep xpra | cut -c 1-15 | xargs docker rm -f
# Xpra server configuration
XPRA_DISPLAY=:14
XPRA_SERVER_CONTAINER=$DESKTOP_ENVIRONMENT_CONTAINER_NAME-xpra-server
XPRA_WEB_PORT=10000
# Start the xpra server
docker run \
--detach \
--env DISPLAY=$XPRA_DISPLAY \
--env MODE=tcp \
--env XPRA_HTML=yes \
--label traefik.backend=$XPRA_SERVER_CONTAINER \
--label traefik.enable=true \
--label traefik.frontend.entryPoints=https \
--label traefik.frontend.rule=Host:cloud.$DESKTOP_ENVIRONMENT_CLOUDFLARE_DOMAIN \
--label traefik.port=$XPRA_WEB_PORT \
--name $XPRA_SERVER_CONTAINER \
--network $DESKTOP_ENVIRONMENT_DOCKER_NETWORK \
--rm \
--volume /tmp/.X11-unix:/tmp/.X11-unix \
jare/x11-bridge:latest
# Start a desktop environment attached to the xpra server display
DESKTOP_ENVIRONMENT_CONTAINER_TAG=kde DISPLAY=$XPRA_DISPLAY $REPO_ROOT/docker/scripts/start.sh
# Expose desktop environment publicly with traefik
$REPO_ROOT/docker/scripts/start-traefik.sh

View file

@ -28,7 +28,7 @@ docker run \
--group-add plugdev \
--group-add tty \
--group-add video \
--hostname $HOSTNAME \
--hostname $(hostname) \
--interactive \
--name $DESKTOP_ENVIRONMENT_CONTAINER_NAME \
--network host \
@ -39,19 +39,14 @@ docker run \
--volume /run/udev:/run/udev \
--volume /var/lib/docker:/var/lib/docker \
--volume /var/run/docker.sock:/var/run/docker.sock \
--volume DESKTOP_ENVIRONMENT_CACHE_CERTIFICATES:$DESKTOP_ENVIRONMENT_CACHE_CERTIFICATES \
--volume DESKTOP_ENVIRONMENT_CACHE_CHROME:$DESKTOP_ENVIRONMENT_CACHE_CHROME \
--volume DESKTOP_ENVIRONMENT_CACHE_CODE:$DESKTOP_ENVIRONMENT_CACHE_CODE \
--volume DESKTOP_ENVIRONMENT_CACHE_GDRIVE:$DESKTOP_ENVIRONMENT_CACHE_GDRIVE \
--volume DESKTOP_ENVIRONMENT_CACHE_SSH:$DESKTOP_ENVIRONMENT_CACHE_SSH \
--volume DESKTOP_ENVIRONMENT_CACHE_STEMN:$DESKTOP_ENVIRONMENT_CACHE_STEMN \
--volume DESKTOP_ENVIRONMENT_CACHE_TMUX:$DESKTOP_ENVIRONMENT_CACHE_TMUX \
--volume DESKTOP_ENVIRONMENT_CACHE_YARN:$DESKTOP_ENVIRONMENT_CACHE_YARN \
--volume DESKTOP_ENVIRONMENT_CACHE_ZOOM:$DESKTOP_ENVIRONMENT_CACHE_ZOOM \
--volume DESKTOP_ENVIRONMENT_CACHE_ZSH:$DESKTOP_ENVIRONMENT_CACHE_ZSH \
--volume DESKTOP_ENVIRONMENT_STATE_CHROME:$DESKTOP_ENVIRONMENT_STATE_CHROME \
--volume DESKTOP_ENVIRONMENT_STATE_CODE:$DESKTOP_ENVIRONMENT_STATE_CODE \
--volume DESKTOP_ENVIRONMENT_STATE_GITHUB:$DESKTOP_ENVIRONMENT_STATE_GITHUB \
--volume DESKTOP_ENVIRONMENT_STATE_I3:$DESKTOP_ENVIRONMENT_STATE_I3 \
--volume DESKTOP_ENVIRONMENT_STATE_JUMP:$DESKTOP_ENVIRONMENT_STATE_JUMP \
--volume DESKTOP_ENVIRONMENT_STATE_MUSIKCUBE:$DESKTOP_ENVIRONMENT_STATE_MUSIKCUBE \

View file

@ -1,121 +0,0 @@
# Script is run as root to create the host user
if [ $USER != "root" ]; then
echo "Host configuration script must be run as root!"
exit 1
fi
REPO_ROOT=$(dirname $(readlink -f $0))/..
# Export desktop environment shell configuration
eval "$($REPO_ROOT/docker/scripts/environment.sh)"
# Conventional docker group id
DOCKER_GID=999
# Remove existing group with docker group id
getent group $DOCKER_GID | sed 's;:.*;;' | xargs groupdel --force
# Install utilities
apt-get update -qq && \
apt-get install -qq \
curl \
docker.io \
gosu \
keychain \
sudo \
tilda \
vcsh \
wicd-curses \
xclip \
zsh
# Enable password-less sudo for the sudo group
echo "%sudo ALL=(ALL) NOPASSWD:ALL" | tee -a /etc/sudoers
# Increase max open files on host
echo 'fs.file-max=1000000' >> /etc/sysctl.conf
# Increase max open file watchers on host
echo 'fs.inotify.max_user_watches=1000000' >> /etc/sysctl.conf
# Increase file descriptor limit
echo '* soft nofile 1000000' >> /etc/security/limits.conf
echo '* hard nofile 1000000' >> /etc/security/limits.conf
# Install alacritty
wget -nv -O alacritty.deb https://github.com/jwilm/alacritty/releases/download/v0.2.9/Alacritty-v0.2.9_amd64.deb && \
dpkg -i alacritty.deb && \
rm alacritty.deb
# Install bat
wget -nv -O bat.deb -nv https://github.com/sharkdp/bat/releases/download/v0.9.0/bat_0.9.0_amd64.deb && \
dpkg -i bat.deb && \
rm bat.deb
# Install jump directory navigator
wget -nv -O jump.deb https://github.com/gsamokovarov/jump/releases/download/v0.22.0/jump_0.22.0_amd64.deb && \
dpkg -i jump.deb && \
rm jump.deb
# Install antigen
curl -sSL git.io/antigen > /usr/local/bin/antigen.zsh
# Allow docker containers to access the host's X server
xhost local:docker
# Remove existing user with host user id
userdel --force $(getent passwd $DESKTOP_ENVIRONMENT_USER_ID | cut -d : -f 1)
# Create the host user
useradd \
--create-home \
--gid $DESKTOP_ENVIRONMENT_USER_ID \
--uid $DESKTOP_ENVIRONMENT_USER_ID \
$DESKTOP_ENVIRONMENT_USER
# Give the host user access to required tools
usermod \
--append \
--groups docker,sudo \
$DESKTOP_ENVIRONMENT_USER
# Install dotfiles configuration for host user
gosu $DESKTOP_ENVIRONMENT_USER vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-alacritty.git
gosu $DESKTOP_ENVIRONMENT_USER vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-autostart.git
gosu $DESKTOP_ENVIRONMENT_USER vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-git.git
gosu $DESKTOP_ENVIRONMENT_USER vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-kde.git
gosu $DESKTOP_ENVIRONMENT_USER vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-scripts.git
gosu $DESKTOP_ENVIRONMENT_USER vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-tilda.git
gosu $DESKTOP_ENVIRONMENT_USER vcsh clone https://sabrehagen@github.com/sabrehagen/dotfiles-zsh.git
# Pre-cache development environment container
docker pull $DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER_NAME:$DESKTOP_ENVIRONMENT_CONTAINER_TAG &>/dev/null &
# Pre-cache kde development environment container
docker pull $DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER_NAME:kde &>/dev/null &
# Pre-cache development environment support container
docker pull jare/x11-bridge:latest &>/dev/null &
# Wait for docker image pulls to complete
wait
# Clone the desktop environment into a local docker volume
$REPO_ROOT/docker/scripts/clone.sh
# Start the desktop environment on host start
INIT_SCRIPT_NAME=$DESKTOP_ENVIRONMENT_REGISTRY-$DESKTOP_ENVIRONMENT_CONTAINER_NAME
INIT_SCRIPT_PATH=/etc/init.d/$INIT_SCRIPT_NAME
if [ "$1" = "--xpra" ]; then
INIT_SCRIPT_TARGET=start-xpra.sh
else
INIT_SCRIPT_TARGET=start.sh
fi
echo "\
### BEGIN INIT INFO \n\
# Default-Start: 2 3 4 5 \n\
/var/lib/docker/volumes/DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY/_data/docker/scripts/$INIT_SCRIPT_TARGET \n\
exit 0" > $INIT_SCRIPT_PATH
chmod +x $INIT_SCRIPT_PATH
update-rc.d $INIT_SCRIPT_NAME defaults
update-rc.d $INIT_SCRIPT_NAME enable

View file

@ -1,4 +0,0 @@
kind: Cluster
apiVersion: kind.sigs.k8s.io/v1alpha3
networking:
apiServerAddress: 0.0.0.0

View file

@ -1,14 +0,0 @@
# run boostrap here
REPO_ROOT=$(dirname $(readlink -f $0))/../..
# Export desktop environment shell configuration
eval "$($REPO_ROOT/docker/scripts/environment.sh)"
EXISTING_CLUSTER=$(curl https://kubernetes.$DESKTOP_ENVIRONMENT_CLOUDFLARE_DOMAIN)
# check if existing cluster is responding
if [ ! -z "$EXISTING_CLUSTER"]; then
# join cluster
else
# bootstrap new cluster
fi

View file

@ -1,3 +0,0 @@
REPO_ROOT=$(dirname $(readlink -f $0))/../..
kind create cluster --config=$REPO_ROOT/kubernetes/resources/cluster.yaml

View file

@ -1,32 +0,0 @@
{
"builders": [
{
"image_name": "{{user `DESKTOP_ENVIRONMENT_REGISTRY`}}-{{user `DESKTOP_ENVIRONMENT_CONTAINER_NAME`}}",
"instance_name": "packer-{{user `DESKTOP_ENVIRONMENT_REGISTRY`}}-{{user `DESKTOP_ENVIRONMENT_CONTAINER_NAME`}}-{{timestamp}}",
"project_id": "stemnapp",
"source_image_family": "ubuntu-minimal-1810",
"ssh_username": "root",
"type": "googlecompute",
"zone": "australia-southeast1-a"
}
],
"provisioners": [
{
"inline": [
"# Install git",
"apt-get update -qq && apt-get install -qq git",
"# Clone the desktop environment",
"git clone https://github.com/{{user `DESKTOP_ENVIRONMENT_REGISTRY`}}/{{user `DESKTOP_ENVIRONMENT_CONTAINER_NAME`}}",
"# Prepare the desktop environment host",
"{{user `DESKTOP_ENVIRONMENT_CONTAINER_NAME`}}/host/bootstrap.sh --xpra"
],
"type": "shell"
}
],
"variables": {
"DESKTOP_ENVIRONMENT_CONTAINER_NAME": "{{env `DESKTOP_ENVIRONMENT_CONTAINER_NAME`}}",
"DESKTOP_ENVIRONMENT_REGISTRY": "{{env `DESKTOP_ENVIRONMENT_REGISTRY`}}"
}
}

View file

@ -1,22 +0,0 @@
REPO_ROOT=$(dirname $(readlink -f $0))/../..
# Export desktop environment shell configuration
eval "$($REPO_ROOT/docker/scripts/environment.sh)"
# Clone the desktop environment into a local docker volume
$REPO_ROOT/docker/scripts/clone.sh
# Authenticate with cloud service provider
$REPO_ROOT/credentials/authenticate.sh
docker run \
--env DESKTOP_ENVIRONMENT_CONTAINER_NAME \
--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 \
$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY/packer/desktop-environment.json

View file

@ -1,94 +0,0 @@
terraform {
backend "gcs" {
bucket = "desktop-environment"
prefix = "terraform"
}
}
provider "google" {
project = "${var.gcp_project}"
region = "${var.machine_region}"
}
locals {
environment_name = "${var.DESKTOP_ENVIRONMENT_REGISTRY}-${var.DESKTOP_ENVIRONMENT_CONTAINER_NAME}"
}
resource "google_compute_instance" "desktop-environment" {
allow_stopping_for_update = true
machine_type = "${var.machine_type}"
name = "${local.environment_name}"
project = "${var.gcp_project}"
tags = ["${local.environment_name}"]
zone = "${var.machine_region}-a"
boot_disk {
initialize_params {
image = "${local.environment_name}"
type = "pd-ssd"
size = "80"
}
}
network_interface {
access_config {
nat_ip = "${google_compute_address.static.address}"
}
subnetwork = "${google_compute_subnetwork.desktop-environment.name}"
}
service_account {
scopes = [
"https://www.googleapis.com/auth/compute.readonly",
]
}
}
resource "google_compute_firewall" "desktop-environment" {
name = "${local.environment_name}"
network = "${google_compute_network.desktop-environment.name}"
allow {
protocol = "icmp"
}
allow {
ports = [
"22",
"80",
"443",
]
protocol = "tcp"
}
target_tags = ["${local.environment_name}"]
}
resource "google_compute_subnetwork" "desktop-environment" {
name = "${local.environment_name}"
ip_cidr_range = "10.2.0.0/16"
network = "${google_compute_network.desktop-environment.name}"
region = "${var.machine_region}"
}
resource "google_compute_network" "desktop-environment" {
auto_create_subnetworks = false
name = "${local.environment_name}"
}
resource "google_compute_address" "static" {
name = "cloud-jacksondelahunt-com"
}
provider "cloudflare" {
email = "${var.DESKTOP_ENVIRONMENT_CLOUDFLARE_EMAIL}"
token = "${var.DESKTOP_ENVIRONMENT_CLOUDFLARE_TOKEN}"
}
resource "cloudflare_record" "desktop-environment" {
domain = "${var.DESKTOP_ENVIRONMENT_CLOUDFLARE_DOMAIN}"
name = "cloud"
proxied = true
type = "A"
value = "${google_compute_address.static.address}"
}

View file

@ -1,4 +0,0 @@
REPO_ROOT=$(dirname $(readlink -f $0))/../..
# Destroy the desktop environment cloud virtual machine
$REPO_ROOT/terraform/scripts/terraform.sh destroy

View file

@ -1,5 +0,0 @@
REPO_ROOT=$(dirname $(readlink -f $0))/../..
# Authenticate with cloud service provider
$REPO_ROOT/terraform/scripts/destroy.sh
$REPO_ROOT/terraform/scripts/start.sh

View file

@ -1,5 +0,0 @@
REPO_ROOT=$(dirname $(readlink -f $0))/../..
# Authenticate with cloud service provider
$REPO_ROOT/terraform/scripts/stop.sh
$REPO_ROOT/terraform/scripts/start.sh

View file

@ -1,4 +0,0 @@
REPO_ROOT=$(dirname $(readlink -f $0))/../..
# Destroy the desktop environment cloud virtual machine
$REPO_ROOT/terraform/scripts/terraform.sh apply

View file

@ -1,5 +0,0 @@
REPO_ROOT=$(dirname $(readlink -f $0))/../..
# Destroy the desktop environment cloud virtual machine
$REPO_ROOT/terraform/scripts/terraform.sh destroy \
-target google_compute_instance.desktop-environment

View file

@ -1,33 +0,0 @@
REPO_ROOT=$(dirname $(readlink -f $0))/../..
# Export desktop environment shell configuration
eval "$($REPO_ROOT/docker/scripts/environment.sh)"
# Authenticate with cloud service provider
$REPO_ROOT/credentials/authenticate.sh
# Capture command line arguments
TERRAFORM_ARGS=$@
# Execute the supplied terraform command
docker run \
--entrypoint ash \
--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=false \
--env TF_VAR_DESKTOP_ENVIRONMENT_CONTAINER_NAME=$DESKTOP_ENVIRONMENT_CONTAINER_NAME \
--env TF_VAR_DESKTOP_ENVIRONMENT_REGISTRY=$DESKTOP_ENVIRONMENT_REGISTRY \
--env TF_VAR_DESKTOP_ENVIRONMENT_CLOUDFLARE_DOMAIN=$DESKTOP_ENVIRONMENT_CLOUDFLARE_DOMAIN \
--env TF_VAR_DESKTOP_ENVIRONMENT_CLOUDFLARE_EMAIL=$DESKTOP_ENVIRONMENT_CLOUDFLARE_EMAIL \
--env TF_VAR_DESKTOP_ENVIRONMENT_CLOUDFLARE_TOKEN=$DESKTOP_ENVIRONMENT_CLOUDFLARE_TOKEN \
--env TF_VAR_owner_host=$HOSTNAME \
--env TF_VAR_owner_name=$USER \
--rm \
--tty \
--volume DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY:$DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY \
--workdir $DESKTOP_ENVIRONMENT_DOCKER_REPOSITORY/terraform \
hashicorp/terraform:light -c "\
terraform init;
terraform $TERRAFORM_ARGS"

View file

@ -1,38 +0,0 @@
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_NAME" {
description = "The DESKTOP_ENVIRONMENT_CONTAINER_NAME environment variable."
}
variable "DESKTOP_ENVIRONMENT_REGISTRY" {
description = "The DESKTOP_ENVIRONMENT_REGISTRY environment variable."
}
variable "gcp_project" {
description = "The project to create the machine in."
default = "stemnapp"
}
variable "machine_region" {
description = "The zone to create the machine in."
default = "australia-southeast1"
}
variable "machine_type" {
description = "The machine type."
default = "custom-6-16384"
}
output "ip" {
value = "${google_compute_instance.desktop-environment.network_interface.0.access_config.0.nat_ip}"
}