This commit is contained in:
Jackson Delahunt 2019-02-26 13:48:10 +11:00
parent 7b84f3b14f
commit 904c687ea3
12 changed files with 116 additions and 72 deletions

1
.gitignore vendored
View file

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

View file

@ -0,0 +1,4 @@
# Extract credentials from environment
if [ ! -z "$DESKTOP_ENVIRONMENT_CREDENTIALS" ]; then
echo $DESKTOP_ENVIRONMENT_CREDENTIALS > credentials.json
fi

View file

@ -27,7 +27,7 @@ echo DESKTOP_ENVIRONMENT_CACHE_YARN=$DESKTOP_ENVIRONMENT_HOME/.cache/yarn
echo DESKTOP_ENVIRONMENT_CACHE_ZOOM=$DESKTOP_ENVIRONMENT_HOME/.cache/zoom
echo DESKTOP_ENVIRONMENT_CACHE_ZSH=$DESKTOP_ENVIRONMENT_HOME/.cache/zsh
# Desktop environment application configuration volumes
# Desktop environment application state volumes
echo DESKTOP_ENVIRONMENT_STATE_CHROME=$DESKTOP_ENVIRONMENT_HOME/.config/google-chrome
echo DESKTOP_ENVIRONMENT_STATE_CODE=$DESKTOP_ENVIRONMENT_HOME/.config/Code
echo DESKTOP_ENVIRONMENT_STATE_GITHUB=$DESKTOP_ENVIRONMENT_HOME/.config/github

View file

@ -16,7 +16,7 @@ if [ ! "$REPO_ROOT" -ef "$DESKTOP_ENVIRONMENT_REPOSITORY" ]; then
git clone https://github.com/$DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER $DESKTOP_ENVIRONMENT_REPOSITORY
# Restart bootstrap from the global location
$DESKTOP_ENVIRONMENT_REPOSITORY/host/bootstrap.sh
$DESKTOP_ENVIRONMENT_REPOSITORY/host/bootstrap.sh "$@"
exit 0
fi
@ -135,5 +135,12 @@ $REPO_ROOT/docker/scripts/build.sh
# Ensure the container user has ownership of the volumes before starting
$REPO_ROOT/docker/scripts/bootstrap-volumes.sh
# Recycle the desktop environment
$DESKTOP_ENVIRONMENT_REPOSITORY/docker/scripts/recycle.sh
# Start the desktop environment if requested
if [ "$1" = "--start" ]; then
$REPO_ROOT/docker/scripts/start.sh
fi
# Start the X server in a cloud environment
if [ "$1" = "--cloud" ]; then
$REPO_ROOT/host/xpra.sh
fi

View file

@ -3,18 +3,29 @@ REPO_ROOT=$(dirname $(realpath $0))/..
# Export desktop environment shell configuration
export $($REPO_ROOT/docker/scripts/environment.sh)
# Kill all existing xpra services
docker ps -a | grep xpra | cut -c 1-15 | xargs docker rm -f
DISPLAY=:14
# Start the xpra server
docker run \
--detach \
--env MODE=tcp \
--env XPRA_HTML=yes \
--env DISPLAY=:14 \
--env DISPLAY=$DISPLAY \
--name $DESKTOP_ENVIRONMENT_CONTAINER-xpra-x11-bridge \
--publish 10000:10000 \
jare/x11-bridge:latest
# Start a desktop environment attached to the xpra server
docker run \
--detach \
--env DISPLAY=$DISPLAY \
--name $DESKTOP_ENVIRONMENT_CONTAINER-xpra-client \
--volumes-from $DESKTOP_ENVIRONMENT_CONTAINER-xpra-x11-bridge \
$DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER:$DESKTOP_ENVIRONMENT_BRANCH
ACME_DOMAINS=
ACME_EMAIL=
ACME_ENABLE=
@ -25,17 +36,4 @@ TRAEFIK_ENTRYPOINT_HTTPS=
TRAEFIK_HOST=
# Make the X server publicly accessible
# docker run \
# --detach \
# --name $DESKTOP_ENVIRONMENT_CONTAINER-xpra-nginx-proxy \
# nginx:alpine
# Start a container attached to the xpra server
docker run \
--detach \
--env DISPLAY=:14 \
--name $DESKTOP_ENVIRONMENT_CONTAINER-xpra-client \
--volumes-from $DESKTOP_ENVIRONMENT_CONTAINER-xpra-x11-bridge \
sabrehagen/desktop-environment:latest
docker exec -it --user jackson $DESKTOP_ENVIRONMENT_CONTAINER-xpra-client code

21
packer/build.sh Executable file
View file

@ -0,0 +1,21 @@
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/credentials.json \
--interactive \
--rm \
--tty \
--volume $DESKTOP_ENVIRONMENT_HOST_REPOSITORY:$DESKTOP_ENVIRONMENT_HOST_REPOSITORY \
--workdir $DESKTOP_ENVIRONMENT_HOST_REPOSITORY \
hashicorp/packer:light build \
-force \
-var DESKTOP_ENVIRONMENT_USER=$DESKTOP_ENVIRONMENT_USER \
-var DESKTOP_ENVIRONMENT_REGISTRY=$DESKTOP_ENVIRONMENT_REGISTRY \
-var DESKTOP_ENVIRONMENT_REPOSITORY=$DESKTOP_ENVIRONMENT_REPOSITORY \
desktop-environment.json

View file

@ -0,0 +1,25 @@
{
"builders": [
{
"type": "googlecompute",
"source_image_family": "ubuntu-minimal-1810",
"project_id": "stemnapp",
"zone": "australia-southeast1-a",
"instance_name": "packer-${var.DESKTOP_ENVIRONMENT_REGISTRY}-${var.DESKTOP_ENVIRONMENT_REPOSITORY}-{{timestamp}}",
"image_name": "${var.DESKTOP_ENVIRONMENT_REGISTRY}-${var.DESKTOP_ENVIRONMENT_REPOSITORY}",
"ssh_username": "root"
}
],
"provisioners": [
{
"type": "shell",
"inline": [
"# Clone the desktop environment repository",
"git clone https://github.com/${var.DESKTOP_ENVIRONMENT_REGISTRY}-${var.DESKTOP_ENVIRONMENT_REPOSITORY}",
"# Bootstrap the host",
"${var.DESKTOP_ENVIRONMENT_REPOSITORY}/host/bootstrap.sh"
]
}
]
}

View file

@ -1,27 +0,0 @@
{
"builders": [
{
"type": "googlecompute",
"account_file": "/stemn/credentials/development-environment.json",
"source_image_family": "ubuntu-minimal-1810",
"project_id": "stemnapp",
"zone": "australia-southeast1-a",
"instance_name": "packer-development-environment-{{timestamp}}",
"image_name": "development-environment",
"ssh_username": "root"
}
],
"provisioners": [
{
"type": "file",
"source": "../docker/scripts/bootstrap.sh",
"destination": "/bootstrap.sh"
},
{
"type": "shell",
"inline": [
"/bootstrap.sh"
]
}
]
}

View file

@ -1,5 +1,4 @@
provider "google" {
credentials = "${file("${var.gcp_credentials_path}")}"
project = "${var.gcp_project}"
}
@ -8,7 +7,7 @@ resource "random_id" "instance_id" {
}
locals {
environment_name = "desktop-environment-${random_id.instance_id.hex}"
environment_name = "${var.DESKTOP_ENVIRONMENT_REGISTRY}-${var.DESKTOP_ENVIRONMENT_REPOSITORY}-${random_id.instance_id.hex}"
}
resource "google_compute_instance" "desktop-environment" {
@ -16,7 +15,7 @@ resource "google_compute_instance" "desktop-environment" {
machine_type = "${var.machine_type}"
name = "${local.environment_name}"
project = "${var.gcp_project}"
tags = ["desktop-environment"]
tags = ["${local.environment_name}"]
zone = "${var.machine_region}-a"
boot_disk {
@ -42,14 +41,11 @@ resource "google_compute_instance" "desktop-environment" {
provisioner "remote-exec" {
inline = [
"# Start the X server",
"# Clone the desktop environment",
"git clone https://github.com/${var.DESKTOP_ENVIRONMENT_REGISTRY}/${var.DESKTOP_ENVIRONMENT_REPOSITORY}",
"# Clone and start the desktop environment",
"git clone https://github.com/sabrehagen/desktop-environment",
"desktop-environment/host/bootstrap.sh",
"# Expose X server publicly with nginx",
"desktop-environment/docker/scripts/exec.sh ~/.config/scripts/traefik.sh",
"# Start the desktop-environment",
"${var.DESKTOP_ENVIRONMENT_REPOSITORY}/host/bootstrap-cloud.sh",
]
}
@ -70,12 +66,13 @@ resource "google_compute_firewall" "desktop-environment" {
allow {
ports = [
"80",
"443",
]
protocol = "tcp"
}
target_tags = ["desktop-environment"]
target_tags = ["${local.environment_name}"]
}
resource "google_compute_subnetwork" "desktop-environment" {

View file

@ -1,16 +0,0 @@
REPO_ROOT=$(dirname $(realpath $0))/../..
# Export desktop environment shell configuration
export $($REPO_ROOT/docker/scripts/environment.sh)
docker run \
--interactive \
--rm \
--tty \
--volume $PWD:$PWD \
--workdir $PWD \
hashicorp/terraform:light apply \
-auto-approve \
-var owner_host=$(hostname) \
-var owner_name=$(whoami) \
-lock=false

22
terraform/start.sh Executable file
View file

@ -0,0 +1,22 @@
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/credentials.json \
--interactive \
--rm \
--tty \
--volume $DESKTOP_ENVIRONMENT_HOST_REPOSITORY:$DESKTOP_ENVIRONMENT_HOST_REPOSITORY \
--workdir $DESKTOP_ENVIRONMENT_HOST_REPOSITORY \
hashicorp/terraform:light apply \
-auto-approve \
-var DESKTOP_ENVIRONMENT_USER=$DESKTOP_ENVIRONMENT_USER \
-var DESKTOP_ENVIRONMENT_REGISTRY=$DESKTOP_ENVIRONMENT_REGISTRY \
-var DESKTOP_ENVIRONMENT_REPOSITORY=$DESKTOP_ENVIRONMENT_REPOSITORY \
-var owner_host=$(hostname) \
-var owner_name=$(whoami)

View file

@ -1,3 +1,15 @@
variable "DESKTOP_ENVIRONMENT_USER" {
description = "The DESKTOP_ENVIRONMENT_USER environment variable."
}
variable "DESKTOP_ENVIRONMENT_REGISTRY" {
description = "The DESKTOP_ENVIRONMENT_REGISTRY environment variable."
}
variable "DESKTOP_ENVIRONMENT_REPOSITORY" {
description = "The DESKTOP_ENVIRONMENT_REPOSITORY environment variable."
}
variable "gcp_project" {
description = "The project to create the machine in."
default = "stemnapp"