mirror of
https://github.com/kingomarnajjar/desktop-environment.git
synced 2026-07-25 22:27:20 +10:00
packer
This commit is contained in:
parent
7b84f3b14f
commit
904c687ea3
12 changed files with 116 additions and 72 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1 +1,2 @@
|
|||
credentials.json
|
||||
logs/
|
||||
|
|
|
|||
4
credentials/authenticate.sh
Normal file
4
credentials/authenticate.sh
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
# Extract credentials from environment
|
||||
if [ ! -z "$DESKTOP_ENVIRONMENT_CREDENTIALS" ]; then
|
||||
echo $DESKTOP_ENVIRONMENT_CREDENTIALS > credentials.json
|
||||
fi
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
26
host/xpra.sh
26
host/xpra.sh
|
|
@ -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
21
packer/build.sh
Executable 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
|
||||
25
packer/desktop-environment.json
Normal file
25
packer/desktop-environment.json
Normal 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"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -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" {
|
||||
|
|
|
|||
|
|
@ -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
22
terraform/start.sh
Executable 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)
|
||||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue