prep for release 4.0 (alnoda-wrk)

This commit is contained in:
bluxmit 2022-09-17 08:23:45 +00:00
parent af81da246b
commit 325eeeccd8
122 changed files with 645 additions and 2583 deletions

View file

@ -1,123 +0,0 @@
# Utilities
## Running workspace on server in cloud
There are many benefits of using workspace in cloud, some of them:
- you can use workspace on any device with internet access, even on tablet
- it is great for collaboration (anyone can work together with you)
- you have access to more poverful machine
- you can use workspace for long-running or periodic jobs
There are 2 security considerations to be taken into accont, using workspace in cloud:
1. encrypted https connection
2. authentication
To enable https and auth for workspace, one can add reverse proxy to the workspace deployment.
The utility `remote.py` generates all what's needed to run workspace on cloud server behind reverse proxy.
This utility generates certificates, traefik config and docker-compose file
```
python remote.py --workspace="base-workspace" --port="8020" --host="68.183.69.198" --user="user1" --password="pass1"
```
**IMPORTANT: the best is to execute this python script inside worrkspace in docker, whick runs on local laptop**
The following 4 arguments must be provided:
- --workspace - name of the workspace (all lowercase)
- --port - port ofor the workspace UI. Workspace will also take N consequent ports after this one. base-docker for example,
uses 10 ports
- --host - IP or hostname of the server where workspace will be deployed
- --user - any username
- --password - any password
After command is executed, the new folder `remote` is created in the same directory. Copy this folder to the remote server.
*Hint: in order to copy folder to remote, you start base workspace on remote with local volume mounted `docker run --name space-temp -v /home/tmp:/tmp -p 8020-8030:8020-8030 -e WRK_HOST="<ip-of-your-remote-server>" alnoda/base-workspace` copy and remove this workspace right after that.*
On the remote server ssh to this folder, and execute
```
docker-compose up -d
```
The workspace is running, and it is secured with https and user/password. Notice, that self-sined certificate is used, and browser will
deisplay a warning when you try to assess the workspace UI on `https://<ip-of-your-remote-server>:8020`. Agree to the warning and proceed.
## Serve Static Website
Web application should be deployed with domain name and over https. To have this we suggest to use docker-compose file.
### Example: generate and serve docs
Open terminal the workspace, which has UI, and build docs
> `cd /home/docs`
> `mkdocs build -d /home/static-server/doc`
You can check that static website is served by the static web server.
Ssh to the server where the workspace is running, and commit workspace to a new image. Assuming, workspace name `remote_workspace_1`
> `docker commit remote_workspace_1 docs:0.1`
Now we will run container from image docs:0.1, and add traefik reverse proxy with https. But before doing it, you need to buy domain name,
and set A record for your new domain to point to the IP of the server, where the docs are running
```
version: "3.3"
services:
traefik:
image: "traefik:v2.4"
container_name: "traefik"
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
- "--certificatesresolvers.myresolver.acme.email=blackmaster@gmail.com"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
ports:
- "443:443"
- "80:80"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
workspace:
image: "docs:0.1"
container_name: "workspace"
labels:
- "traefik.enable=true"
- "traefik.http.middlewares.httprepl.redirectregex.regex=^http://(.*)"
- "traefik.http.middlewares.httprepl.redirectregex.replacement=https://$${1}"
- "traefik.http.middlewares.add-context.redirectregex.regex=^https:\\/\\/([^\\/]+)\\/?$$"
- "traefik.http.middlewares.add-context.redirectregex.replacement=https://$$1/doc/pages/home/home/"
- "traefik.http.services.STATICFS_URLhttp.loadbalancer.server.port=8022"
- "traefik.http.routers.STATICFS_URLhttp.service=STATICFS_URL"
- "traefik.http.routers.STATICFS_URLhttp.rule=PathPrefix(`/`)"
- "traefik.http.routers.STATICFS_URLhttp.entrypoints=web"
- "traefik.http.routers.STATICFS_URLhttp.middlewares=httprepl"
- "traefik.http.services.STATICFS_URL.loadbalancer.server.port=8022"
- "traefik.http.routers.STATICFS_URL.service=STATICFS_URL"
- "traefik.http.routers.STATICFS_URL.rule=Host(`elnoda.org`)"
- "traefik.http.routers.STATICFS_URL.entrypoints=websecure"
- "traefik.http.routers.STATICFS_URL.middlewares=basic-auth"
- "traefik.http.routers.STATICFS_URL.tls=true"
- "traefik.http.routers.STATICFS_URL.tls.certresolver=myresolver"
- "traefik.http.routers.STATICFS_URL.middlewares=add-context"
```

View file

@ -1,106 +0,0 @@
#!/bin/bash
while getopts o:d: flag
do
case "${flag}" in
o) output_dir=${OPTARG};;
d) docs=${OPTARG};;
esac
done
# Create out folder in /home/static-server
if [ -z "${output_dir}" ]; then output_dir="/home/static-server/python-reports/"; fi
project_name=${PWD##*/}
printf '%s\n' "project name - ${project_name}"
report_dir="${output_dir}/${project_name}/$(date +"%d-%m-%Y-%H-%M-%S")"
mkdir -p "$report_dir"
if [ -z "${pytests_dir}" ]; then pytests_dir="/home/static-server/pytests/"; fi
pytest_dir="${pytests_dir}/${project_name}"
##############################################################################################
#### Linting
##############################################################################################
##### Flake8
flake8 ./ > ${report_dir}/flake8.txt || true
##### Pylint
find . -type f -name "*.py" | xargs pylint | pylint-json2html -f jsonextended -o ${report_dir}/pylint-report.html || true
##############################################################################################
#### Tests
##############################################################################################
##### Pytest HTML reporter
pytest ./test --html-report=${report_dir}/pytest || true
pytest ./tests --html-report=${report_dir}/pytest || true
pytest ./ --html-report=${report_dir}/pytest || true
pytest ./test --html-report=${pytest_dir} || true
pytest ./tests --html-report=${pytest_dir} || true
pytest ./ --html-report=${pytest_dir} || true
##############################################################################################
#### Autoddoc
##############################################################################################
##### Pdoc
mkdir -p ${report_dir}/pdoc-html
pdoc --html --output-dir ${report_dir}/pdoc-html ./ || true
if ls -1qA ${report_dir}/pdoc-html | grep -q .
then
echo "pdoc-html generated!"
else
echo "pdoc-html could not be generated!"
rm -rf ${report_dir}/pdoc-html
fi
mkdir -p ${report_dir}/pdoc-md
pdoc --output-dir ${report_dir}/pdoc-md ./ || true
if ls -1qA ${report_dir}/pdoc-md | grep -q .
then
echo "pdoc-md generated!"
else
echo "pdoc-md could not be generated!"
rm -rf ${report_dir}/pdoc-md
fi
if [ "${docs}" ]; then
rm -rf ./docs || ture
mkdir -p ./docs
pdoc --output-dir ./docs ./
fi
##### Portray
portray as_html --output_dir ${report_dir}/portray-site -m ./ || true
##############################################################################################
#### Profiling
##############################################################################################
##### Pyinstrument
mkdir -p ${report_dir}/pyinstrument
ls | grep '.py' | grep -v 'pyc' | grep -v '__' | xargs -I{} pyinstrument -t -r html -o ${report_dir}/pyinstrument/{}.html {} || true
##### cProfile
mkdir -p ./cProfile
mkdir -p ${report_dir}/cProfile
find . -type f -name "*.py" | xargs -I{} python -m cProfile -o ./cProfile/{}.stats {} || true
find ./cProfile/ -type f -name "*.stats" | xargs -I{} gprof2dot {} -f pstats -o {}.dot || true
find ./cProfile/ -type f -name "*.dot" | xargs -I{} dot -Tpng -o {}.png {} || true
for file in ./cProfile/*.png; do
mv ${file} ${report_dir}/cProfile/${file##*/}
done
for file in ./cProfile/*.stats; do
flameprof $file > ${file}.svg || true
mv ${file}.svg ${report_dir}/cProfile/${file##*/}.svg
done
rm -rf ./cProfile

View file

@ -1,237 +0,0 @@
"""
Mini-utility to generate docker-compose.yaml file to launch
workspace on remote server with auth and https (self-signed)
python remote.py --workspace="base-workspace" --port="8020" --host="68.183.69.198" --user="user1" --password="pass1"
"""
import os
import yaml
import shutil
import argparse
import textwrap
import subprocess
# How much tool port is away from the start_port
port_increments = {
"DOCS_URL": 0,
"FILEBROWSER_URL": 1,
"STATICFS_URL": 2,
"CRONICLE_URL": 3,
"UNGIT_URL": 4,
"IDE_URL": 5,
"TERMINAL_URL": 6,
"MC_URL": 7,
"HTOP_URL": 8,
"ANSIBLE_ARA": 9,
"OCTANT": 11,
"PORT_8038": 18,
"PORT_8039": 19,
"PORT_8040": 20
}
workspace_meta = {
"ubuntu-workspace": {
"port-range": 10,
"entrypoints": []
},
"base-workspace": {
"port-range": 20,
"entrypoints": ["DOCS_URL", "FILEBROWSER_URL", "STATICFS_URL", "CRONICLE_URL", "UNGIT_URL", "TERMINAL_URL", "MC_URL", "HTOP_URL", "PORT_8038", "PORT_8039", "PORT_8040"]
},
"workspace-in-docker": {
"port-range": 20,
"entrypoints": ["DOCS_URL", "FILEBROWSER_URL", "STATICFS_URL", "CRONICLE_URL", "UNGIT_URL", "IDE_URL", "TERMINAL_URL", "MC_URL", "HTOP_URL", "PORT_8038", "PORT_8039", "PORT_8040"]
},
"codeserver-workspace": {
"port-range": 20,
"entrypoints": ["DOCS_URL", "FILEBROWSER_URL", "STATICFS_URL", "CRONICLE_URL", "UNGIT_URL", "IDE_URL", "TERMINAL_URL", "MC_URL", "HTOP_URL", "PORT_8038", "PORT_8039", "PORT_8040"]
},
"python-workspace": {
"port-range": 20,
"entrypoints": ["DOCS_URL", "FILEBROWSER_URL", "STATICFS_URL", "CRONICLE_URL", "UNGIT_URL", "IDE_URL", "TERMINAL_URL", "MC_URL", "HTOP_URL", "PORT_8038", "PORT_8039", "PORT_8040"]
},
"mkdocs-magicspace": {
"port-range": 20,
"entrypoints": ["DOCS_URL", "FILEBROWSER_URL", "STATICFS_URL", "CRONICLE_URL", "UNGIT_URL", "IDE_URL", "TERMINAL_URL", "MC_URL", "HTOP_URL", "PORT_8038", "PORT_8039", "PORT_8040"]
},
"ansible-terraform-workspace": {
"port-range": 20,
"entrypoints": ["DOCS_URL", "FILEBROWSER_URL", "STATICFS_URL", "CRONICLE_URL", "UNGIT_URL", "IDE_URL", "TERMINAL_URL", "MC_URL", "HTOP_URL", "ANSIBLE_ARA", "PORT_8038", "PORT_8039", "PORT_8040"]
},
"kubespray-workspace": {
"port-range": 20,
"entrypoints": ["DOCS_URL", "FILEBROWSER_URL", "STATICFS_URL", "CRONICLE_URL", "UNGIT_URL", "IDE_URL", "TERMINAL_URL", "MC_URL", "HTOP_URL", "ANSIBLE_ARA", "OCTANT", "PORT_8038", "PORT_8039", "PORT_8040"]
}
}
def gen_certs():
""" Generate self-signed TLS certtificate
"""
os.mkdir("./remote/certs")
cmd = 'cd ./remote/certs && openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=workspace.com" -keyout cert.key -out cert.crt'
subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).stdout.read()
return
def traefik_config():
conconf = """
tls:
certificates:
- certFile: /tools/certs/cert.crt
keyFile: /tools/certs/cert.key
"""
with open("./remote/config.yml", "a") as f:
f.write(textwrap.dedent(conconf))
return
def calc_entypoints(workspace_name, start_port):
""" identify which of the port ranges are taken by the internal
applications, and which are free. Return list of all entrypoints
"""
try:
workspace_entrypoints = workspace_meta[workspace_name]["entrypoints"]
except:
workspace_entrypoints = workspace_meta['workspace-in-docker']["entrypoints"]
try:
workspace_port_range = workspace_meta[workspace_name]["port-range"]
except:
workspace_port_range = workspace_meta['workspace-in-docker']["port-range"]
end_port = start_port + workspace_port_range
internal_end_port = 8020 + workspace_port_range
# Dict of entrypoints of entrypoint name and port
ep = {entrypoint:port+start_port for entrypoint,port in port_increments.items() if entrypoint in workspace_entrypoints}
free_ports_start = 8020 + len(ep) + 1
free_range = list(range(free_ports_start, 8020 + workspace_port_range + 1))
free_ep = {"PORT_"+str(port):port for port in free_range}
ep.update(free_ep)
port_mapping = f"{start_port}-{end_port}:{8020}-{internal_end_port}"
return ep, port_mapping
def get_workspace_labels(ep, auth_mid_name="basic-auth"):
""" Create list of Traefik labels for the Workspace service
"""
labels = [
"traefik.enable=true",
"traefik.http.middlewares.httprepl.redirectregex.regex=^http://(.*)",
"traefik.http.middlewares.httprepl.redirectregex.replacement=https://$${1}"
]
for e,p in ep.items():
eplabs = [
f"traefik.http.services.{e}http.loadbalancer.server.port={p}",
f"traefik.http.routers.{e}http.service={e}",
f"traefik.http.routers.{e}http.rule=PathPrefix(`/`)",
f"traefik.http.routers.{e}http.entrypoints={e}",
f"traefik.http.routers.{e}http.middlewares=httprepl",
f"traefik.http.services.{e}.loadbalancer.server.port={p}",
f"traefik.http.routers.{e}.service={e}",
f"traefik.http.routers.{e}.rule=PathPrefix(`/`)",
f"traefik.http.routers.{e}.entrypoints={e}",
f"traefik.http.routers.{e}.middlewares={auth_mid_name}",
f"traefik.http.routers.{e}.tls=true"
]
labels.extend(eplabs)
return labels
def make_authlabels(user, password, auth_mid_name="basic-auth"):
""" Create Traefik label for authentication
"""
auth_type = "basicauth"
cmd = f"echo $(echo '{password}' | htpasswd -nB -i {user}) | sed -e s/\\\$/\\\$\\\$/g"
result = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).stdout.read()
auth = result.decode("utf-8").replace("\n", "")
authlabel = f"traefik.http.middlewares.{auth_mid_name}.{auth_type}.users={auth}"
authlabels = [authlabel]
return authlabels
def get_compose_dict(workspace_name, host_ip, start_port, user, password, custom_image=None):
""" Create dict of values for docker-compose. This dict is
to be transformed into docker-compose.yaml
"""
# Dict of entrypoints of entrypoint name and port
ep, port_mapping = calc_entypoints(workspace_name, start_port)
traefik_command = [f"--entrypoints.{entrypoint}.address=:{port}" for entrypoint,port in ep.items()]
traefik_command += [
"--providers.docker",
"--providers.file.directory=/etc/traefik/dynamic_conf"
]
# Create dict with Traefik values
y = {}
y["version"] = "3.3"
y["services"] = {}
y["services"]["traefik"] = {}
y["services"]["traefik"]["image"] = "traefik:v2.4"
y["services"]["traefik"]["container_name"] = "container_name"
y["services"]["traefik"]["command"] = traefik_command
y["services"]["traefik"]["ports"] = [port_mapping]
y["services"]["traefik"]["volumes"] = [
"/var/run/docker.sock:/var/run/docker.sock:ro",
"./certs:/tools/certs",
"./config.yml:/etc/traefik/dynamic_conf/conf.yml:ro"
]
# Add Workspace values to the dict
full_image = f"alnoda/{workspace_name}"
if custom_image is not None:
full_image = custom_image
y["services"]["workspace"] = {}
y["services"]["workspace"]["image"] = full_image
y["services"]["workspace"]["environment"] = {
"WRK_HOST": host_ip,
"ENTRY_PORT": start_port,
"WRK_PROTO": "https",
"ARA_API_SERVER": f"http://{host_ip}:{start_port + port_increments['ANSIBLE_ARA']}",
"ARA_API_CLIENT": "https",
"ARA_CORS_ORIGIN_WHITELIST": f"['https://{host_ip}', 'http://{host_ip}']",
"ARA_ALLOWED_HOSTS": f"['127.0.0.', 'localhost', '::1', '{host_ip}']",
"ARA_EXTERNAL_AUTH": "True",
"OCTANT_ACCEPTED_HOSTS": f"{host_ip}",
}
y["services"]["workspace"]["labels"] = get_workspace_labels(ep)
# Add auth
authlabels = make_authlabels(user, password)
y["services"]["workspace"]["labels"].extend(authlabels)
return y
def main(cmd_args):
""" Create folder with everything needed to
spin up workspace with auth and TLS on remote server
"""
workspace_name = cmd_args.workspace
host_ip = cmd_args.host
start_port = int(cmd_args.port)
user = cmd_args.user
password = cmd_args.password
custom_image = cmd_args.image
try:
shutil.rmtree("./remote")
except:
pass
os.mkdir("./remote")
# Generate certificate
gen_certs()
# Create Traefik config
traefik_config()
# Create docker-compose file
comp_dict = get_compose_dict(workspace_name, host_ip, start_port, user, password, custom_image)
with open("./remote/docker-compose.yaml", "a") as y:
y.write(yaml.dump(comp_dict, default_style='"'))
return
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--workspace", default="workspace-in-docker")
parser.add_argument("--port", default=8020)
parser.add_argument("--host")
parser.add_argument("--user")
parser.add_argument("--password")
parser.add_argument("--image", default=None)
cmd_args = parser.parse_args()
main(cmd_args)

View file

@ -1,107 +0,0 @@
"""
Utility to generate docker-compose.yaml file to launch
static file server using built-in static fileserver tool
python staticserver.py --image="docs:0.1" --domain="elnoda.org" --email="blackmaster@gmail.com" --homepage="doc/pages/home/home/"
"""
import os
import yaml
import shutil
import argparse
import textwrap
import subprocess
def get_workspace_labels(domain, homepage):
""" Create list of Traefik labels for the Workspace service
"""
labels = [
"traefik.enable=true",
"traefik.http.middlewares.httprepl.redirectregex.regex=^http://(.*)",
"traefik.http.middlewares.httprepl.redirectregex.replacement=https://$${1}",
"traefik.http.services.STATICFS_URLhttp.loadbalancer.server.port=8022",
"traefik.http.routers.STATICFS_URLhttp.service=STATICFS_URL",
"traefik.http.routers.STATICFS_URLhttp.rule=PathPrefix(`/`)",
"traefik.http.routers.STATICFS_URLhttp.entrypoints=web",
"traefik.http.routers.STATICFS_URLhttp.middlewares=httprepl",
"traefik.http.services.STATICFS_URL.loadbalancer.server.port=8022",
"traefik.http.routers.STATICFS_URL.service=STATICFS_URL",
"traefik.http.routers.STATICFS_URL.entrypoints=websecure",
"traefik.http.routers.STATICFS_URL.middlewares=basic-auth",
"traefik.http.routers.STATICFS_URL.tls=true",
"traefik.http.routers.STATICFS_URL.tls.certresolver=myresolver",
"traefik.http.routers.STATICFS_URL.middlewares=add-context"
]
varlab = [
f"traefik.http.routers.STATICFS_URL.rule=Host(`{domain}`)",
f"traefik.http.middlewares.add-context.redirectregex.replacement=https://$$1/{homepage}",
"traefik.http.middlewares.add-context.redirectregex.regex=^https:\\/\\/([^\\/]+)\\/?$$"
]
labels.extend(varlab)
return labels
def get_compose_dict(image, domain, homepage, email):
""" Create dict of values for docker-compose. This dict is
to be transformed into docker-compose.yaml
"""
traefik_command = [
"--providers.docker=true",
"--providers.docker.exposedbydefault=false",
"--entrypoints.web.address=:80",
"--entrypoints.websecure.address=:443",
"--certificatesresolvers.myresolver.acme.tlschallenge=true",
f"--certificatesresolvers.myresolver.acme.email={email}",
"--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
]
# Create dict with Traefik values
y = {}
y["version"] = "3.3"
y["services"] = {}
y["services"]["traefik"] = {}
y["services"]["traefik"]["image"] = "traefik:v2.4"
#y["services"]["traefik"]["container_name"] = "trafik_container"
y["services"]["traefik"]["command"] = traefik_command
y["services"]["traefik"]["ports"] = [
"443:443",
"80:80"
]
y["services"]["traefik"]["volumes"] = [
"./letsencrypt:/letsencrypt",
"/var/run/docker.sock:/var/run/docker.sock:ro"
]
y["services"]["workspace"] = {}
y["services"]["workspace"]["image"] = f"{image}"
y["services"]["workspace"]["labels"] = get_workspace_labels(domain, homepage)
return y
def main(cmd_args):
""" Create YAML file for deployment of static website using
static web server
"""
image = cmd_args.image
domain = cmd_args.domain
homepage = cmd_args.homepage
email = cmd_args.email
try:
os.remove("./docker-compose.yaml")
except:
pass
comp_dict = get_compose_dict(image, domain, homepage, email)
with open("./docker-compose.yaml", "a") as y:
y.write(yaml.dump(comp_dict, default_style='"'))
return
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--image")
parser.add_argument("--domain")
parser.add_argument("--email")
parser.add_argument("--homepage")
cmd_args = parser.parse_args()
main(cmd_args)

View file

@ -1,30 +1,6 @@
ARG BUILD_IMAGE=node:16.17.0
ARG MAIN_IMAGE=alnoda/extended-workspace:4.0
################################################################################ BUILD THEIA
FROM ${BUILD_IMAGE}
RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y apt-utils \
&& apt-get install -y git \
&& apt-get install -y libsecret-1-dev \
&& mkdir /opt/theia
WORKDIR /opt/theia
ADD theia_package.json ./package.json
ARG GITHUB_TOKEN
RUN yarn --pure-lockfile && \
NODE_OPTIONS="--max_old_space_size=4096" yarn theia build && \
yarn theia download:plugins && \
yarn --production && \
yarn autoclean --init && \
echo *.ts >> .yarnclean && \
echo *.ts.map >> .yarnclean && \
echo *.spec.* >> .yarnclean && \
yarn autoclean --force && \
yarn cache clean
################################################################################ WORKSPACE IMAGE
FROM ${MAIN_IMAGE}
FROM alnoda/extended-workspace:4.0
# Actions for which root escalation is reuired
# Actions for which root escalation is needed
USER root
# Fix issue with timezone for Ara
RUN echo "UTC" > /etc/timezone
@ -33,19 +9,9 @@ RUN echo "------------------------------------------------------ terraform" \
&& cd /tmp && wget https://releases.hashicorp.com/terraform/1.2.8/terraform_1.2.8_linux_amd64.zip \
&& unzip terraform_1.2.8_linux_amd64.zip -d /usr/local/bin \
&& rm /tmp/terraform_1.2.8_linux_amd64.zip
# Continue as usual non-root user
USER abc
# Replace Theia with the new build, which includes additional pre-installed extensions
# To do this, the existing Theia folder will be deleted, and new copied from the build stage
ENV THEIA_DIR="/home/abc/apps/theia"
RUN rm -rf $THEIA_DIR \
&& mkdir "$THEIA_DIR" \
&& cd $THEIA_DIR && nodeenv --node=16.17.0 env && . env/bin/activate \
# Copy built Theia from the build image
COPY --from=0 --chown=abc:abc /opt/theia $THEIA_DIR
# Copy new Theia settings to set another theme for the code editor
COPY --chown=abc:abc theia_settings.json /home/abc/.theia/settings.json
# Ansible apps & tools
RUN sudo apt-get update \
&& echo "------------------------------------------------------ ansible" \
@ -109,9 +75,6 @@ RUN echo "------------------------------------------------------ blast-radius" \
&& mv /tmp/rover/rover /home/abc/.local/bin/rover \
&& rm -rf /tmp/rover
# # Rover configuration
# ENV TERRAFORM_ROVER="http://localhost:9000"
# Copy Ansible & Terraform report scripts
COPY --chown=abc:abc extra/ansible-report.sh /home/abc/.local/bin/
COPY --chown=abc:abc extra/terraform-report.sh /home/abc/.local/bin/
@ -119,6 +82,15 @@ COPY --chown=abc:abc extra/terraform-report.sh /home/abc/.local/bin/
# Copy Ansible & Terraform examples
COPY --chown=abc:abc ./examples/ /home/examples/
# Install additional codeserver extensions
RUN echo "------------------------------------------------------ extensions" \
&& code-server --install-extension hashicorp.terraform \
&& code-server --install-extension redhat.ansible \
&& code-server --install-extension samuelcolvin.jinjahtml
# Change default codeserver theme
COPY --chown=abc:abc settings.json /home/abc/.local/share/code-server/User/settings.json
# Build Alnoda workspace
COPY --chown=abc:abc workspace /tmp/workspace
RUN pipx uninstall alnoda-wrk; pipx install alnoda-wrk; alnoda-wrk build /tmp/workspace && rm -rf /tmp/workspace

View file

@ -0,0 +1,3 @@
{
"workbench.colorTheme": "SynthWave '84"
}

View file

@ -9,6 +9,8 @@ description: |
Containerized development, execution and admin environment for Ansible and Terraform.
Create, provision, visualize and manage infrastructures, schedule maintenance tasks.
tags: terraform, ansible, infra-visualisation, playbook-monitoring
# UI icons
logo: terraform-circle-white.svg
favicon: terraform-circle.svg
@ -23,14 +25,12 @@ styles:
accent: "#5C41E2"
background: "#FFFFFF"
title: "#604270"
subtitle: "#7747A7"
dark:
primary: "#7747A7"
accent: "#DF736A"
background: "#171520"
title: "#83698E"
text: "#FFFFFF"
subtitle: "#604270"
common_colors:
header: "#FFFFFF"
nav: "#eab676"

View file

@ -1,4 +1,4 @@
FROM alnoda/ubuntu-workspace:20.04-4.0
FROM alnoda/ubuntu-workspace:4.0-20.04
# Make image Alnoda-compatible - add dir for logs
USER root
@ -9,7 +9,6 @@ USER abc
# Install workspace tools and applications
RUN sudo apt-get -y update \
&& mkdir /home/abc/apps \
&& sudo apt-get install -y socat \
&& echo "------------------------------------------------------ install filebrowser" \
&& cd /tmp && wget https://github.com/filebrowser/filebrowser/releases/download/v2.21.1/linux-amd64-filebrowser.tar.gz \
@ -32,6 +31,6 @@ COPY --chown=abc:abc filebrowser.json /home/abc/apps/filebrowser/.filebrowser.js
# Build Alnoda workspace
COPY --chown=abc:abc workspace /tmp/workspace
RUN echo "------------------------------------------------------ build workspace" \
&& pipx install alnoda-wrk \
&& pipx install alnoda-wrk==0.2.17 \
&& alnoda-wrk build /tmp/workspace \
&& rm -rf /tmp/workspace

View file

@ -8,6 +8,8 @@ description: |
# Base devspace
Basis for other workspaces. This workspace has UI, but does not have code editor (or IDE) up & running.
tags: workspace-ui, filebrowser, ungit
# optional:
# (Quickstart UI appearance)
styles:
@ -23,7 +25,6 @@ styles:
background: "#1E1E1E"
title: "#9CDCFE"
text: "#9CDCFE"
subtitle: "#eab676"
common_colors:
header: "#FFFFFF"
nav: "#eab676"

View file

@ -1,20 +1,51 @@
FROM alnoda/base-devspace:4.0
# Set environmental variables for Code-server
ENV CODESERVER_DIR="/home/abc/apps/code-server"
ENV VSCODE_CONFIG_DIR="/home/abc/.config/vscode"
ARG CODESERVER_VERSION="4.7.0"
# Install Code-server and create folders for data & extensions
# Install Code-server
RUN echo "------------------------------------------------------ code-server" \
&& sudo apt-get install -y build-essential pkg-config \
&& mkdir -p "$CODESERVER_DIR" \
&& cd $CODESERVER_DIR && nodeenv --node=16.15.0 --npm=1.0.10 env \
&& cd $CODESERVER_DIR && . env/bin/activate && npm install -g yarn && yarn global add code-server@4.4.0 \
&& mkdir -p $VSCODE_CONFIG_DIR/data \
&& mkdir -p $VSCODE_CONFIG_DIR/extensions
&& cd \tmp \
&& curl -fOL https://github.com/coder/code-server/releases/download/v$CODESERVER_VERSION/code-server_${CODESERVER_VERSION}_amd64.deb \
&& sudo dpkg -i code-server_${CODESERVER_VERSION}_amd64.deb \
&& rm /tmp/code-server_${CODESERVER_VERSION}_amd64.deb
# Copy Code-server startup script
COPY --chown=abc:abc code-server-run.sh $CODESERVER_DIR/code-server-run.sh
# Install codeserver extensions
RUN echo "------------------------------------------------------ common extensions" \
&& code-server --install-extension mhutchie.git-graph \
&& code-server --install-extension redhat.vscode-yaml \
&& code-server --install-extension redhat.vscode-xml \
&& code-server --install-extension mechatroner.rainbow-csv \
&& code-server --install-extension formulahendry.auto-close-tag \
&& code-server --install-extension anteprimorac.html-end-tag-labels \
&& code-server --install-extension abusaidm.html-snippets \
&& code-server --install-extension sndst00m.vscode-native-svg-preview \
&& code-server --install-extension pranaygp.vscode-css-peek \
&& code-server --install-extension anseki.vscode-color \
&& echo "------------------------------------------------------ themes" \
&& code-server --install-extension armandphilippot.coldark \
&& code-server --install-extension RobbOwen.synthwave-vscode \
&& code-server --install-extension nadim-vscode.infinity-dark-theme \
&& code-server --install-extension emroussel.atomize-atom-one-dark-theme \
&& code-server --install-extension teabyii.ayu \
&& code-server --install-extension wesbos.theme-cobalt2 \
&& code-server --install-extension github.github-vscode-theme \
&& code-server --install-extension armandphilippot.coldark \
&& code-server --install-extension radiolevity.search-lights \
&& code-server --install-extension vladeeg.vscode-theme-vlight \
&& code-server --install-extension akamud.vscode-theme-onelight \
&& code-server --install-extension akamud.vscode-theme-onedark \
&& code-server --install-extension rubjo.ultimate-dark-neo \
&& code-server --install-extension sainnhe.edge \
&& echo "------------------------------------------------------ icons" \
&& code-server --install-extension emroussel.atom-icons \
&& code-server --install-extension laurenttreguier.vscode-simple-icons
# Set default codeserver terminal
ENV SHELL=/bin/zsh
# Set default codeserver theme
COPY --chown=abc:abc settings.json /home/abc/.local/share/code-server/User/settings.json
# Build Alnoda workspace
COPY --chown=abc:abc workspace /tmp/workspace

View file

@ -1,25 +0,0 @@
#!/usr/bin/bash
if [ -n "${PASSWORD}" ] || [ -n "${HASHED_PASSWORD}" ]; then
AUTH="password"
else
AUTH="none"
echo "starting with no password"
fi
if [ -z ${PROXY_DOMAIN+x} ]; then
PROXY_DOMAIN_ARG=""
else
PROXY_DOMAIN_ARG="--proxy-domain=${PROXY_DOMAIN}"
fi
export SHELL=/bin/zsh
code-server \
--bind-addr 0.0.0.0:8021 \
--user-data-dir $VSCODE_CONFIG_DIR/data \
--extensions-dir $VSCODE_CONFIG_DIR/extensions \
--disable-telemetry \
--auth "${AUTH}" \
"${PROXY_DOMAIN_ARG}" \
/home/project

View file

@ -0,0 +1,4 @@
{
"workbench.colorTheme": "Atom One Dark",
"git-graph.maxDepthOfRepoSearch": 3
}

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 900 900" xmlns="http://www.w3.org/2000/svg">
<g id="g10" transform="matrix(3, 0, 0, -3, 0.000095, 900)" style="">
<g id="g12" transform="scale(0.1)">
<path d="M 1500 3000 C 671.57 3000 0 2328.43 0 1500 C 0 671.57 671.57 0 1500 0 C 2328.43 0 3000 671.57 3000 1500 C 3000 2328.43 2328.43 3000 1500 3000 Z M 2454.59 545.41 C 2199.61 290.422 1860.6 150 1500 150 C 1139.4 150 800.387 290.422 545.406 545.41 C 290.426 800.391 150 1139.4 150 1500 C 150 1860.6 290.426 2199.61 545.406 2454.59 C 800.387 2709.57 1139.4 2850 1500 2850 C 1860.6 2850 2199.61 2709.57 2454.59 2454.59 C 2709.57 2199.61 2850 1860.6 2850 1500 C 2850 1139.4 2709.57 800.391 2454.59 545.41" style="fill-opacity: 1; fill-rule: nonzero; stroke: none; fill: rgb(255, 255, 255);" id="path14"/>
</g>
</g>
<path d="M 750.13 417.241 C 735.976 417.241 726.548 409.051 726.548 392.237 L 726.548 295.688 C 726.548 234.047 700.815 200 634.352 200 L 603.48 200 L 603.48 265.085 L 612.915 265.085 C 639.072 265.085 651.51 279.308 651.51 304.739 L 651.51 390.082 C 651.51 427.153 662.654 442.238 687.094 449.999 C 662.654 457.329 651.51 472.842 651.51 509.912 C 651.51 531.029 651.51 552.157 651.51 573.275 C 651.51 590.95 651.51 608.19 646.789 625.857 C 642.075 642.237 634.352 657.756 623.633 671.119 C 617.628 678.882 610.771 685.344 603.054 691.376 L 603.054 700 L 633.925 700 C 700.391 700 726.114 665.946 726.114 604.306 L 726.114 507.756 C 726.114 490.515 735.124 482.759 749.703 482.759 L 767.28 482.759 L 767.28 417.667 L 750.13 417.667 L 750.13 417.241 Z" style="fill: rgb(255, 255, 255);" transform="matrix(1, 0, 0, 1, 32.719971, 0)"/>
<path d="M 540.018 298.285 L 444.828 298.285 C 442.683 298.285 440.965 296.562 440.965 294.407 L 440.965 287.078 C 440.965 284.921 442.683 283.201 444.828 283.201 L 540.444 283.201 C 542.588 283.201 544.307 284.921 544.307 287.078 L 544.307 294.407 C 544.307 296.562 542.163 298.285 540.018 298.285 Z" style="fill: rgb(255, 255, 255);" transform="matrix(1, 0, 0, 1, 32.719971, 0)"/>
<path d="M 556.309 391.382 L 486.85 391.382 C 484.707 391.382 482.988 389.662 482.988 387.505 L 482.988 380.176 C 482.988 378.028 484.707 376.298 486.85 376.298 L 556.309 376.298 C 558.455 376.298 560.171 378.028 560.171 380.176 L 560.171 387.505 C 560.171 389.234 558.455 391.382 556.309 391.382 Z" style="fill: rgb(255, 255, 255);" transform="matrix(1, 0, 0, 1, 32.719971, 0)"/>
<path d="M 583.754 344.834 L 444.828 344.834 C 442.683 344.834 440.965 343.111 440.965 340.956 L 440.965 333.627 C 440.965 331.478 442.683 329.748 444.828 329.748 L 583.327 329.748 C 585.47 329.748 587.182 331.478 587.182 333.627 L 587.182 340.956 C 587.182 342.685 585.898 344.834 583.754 344.834 Z" style="fill: rgb(255, 255, 255);" transform="matrix(1, 0, 0, 1, 32.719971, 0)"/>
<path d="M 334.628 319.397 C 344.056 319.397 353.49 320.257 362.498 322.414 L 362.498 304.739 C 362.498 279.741 375.36 265.085 401.085 265.085 L 410.52 265.085 L 410.52 200 L 379.648 200 C 313.184 200 287.458 234.047 287.458 295.688 L 287.458 327.587 C 302.465 322.414 318.329 319.397 334.628 319.397 Z" style="fill: rgb(255, 255, 255);" transform="matrix(1, 0, 0, 1, 32.719971, 0)"/>
<path d="M 612.915 553.865 C 606.05 499.125 564.033 453.438 510 443.091 C 494.993 440.075 479.986 439.641 465.404 442.23 C 464.98 442.23 464.98 441.797 464.554 441.797 C 440.965 392.231 390.367 359.471 335.48 359.471 C 280.595 359.471 230.429 391.37 206.413 440.937 C 205.988 440.937 205.988 441.37 205.555 441.37 C 190.123 439.641 174.684 440.502 159.251 444.387 C 106.075 457.315 65.771 502.144 58.48 556.455 C 57.62 562.054 57.195 567.661 57.195 572.834 C 57.195 589.214 68.347 604.298 84.638 606.455 C 104.791 609.471 122.375 593.953 121.941 574.129 C 121.941 571.105 121.941 567.661 122.375 564.645 C 125.804 537.058 146.814 513.784 174.256 507.316 C 182.832 505.159 191.408 504.732 199.558 506.02 C 225.716 509.471 251.439 496.108 262.584 472.833 C 270.735 455.593 283.597 440.502 300.754 432.313 C 319.615 423.261 341.06 421.973 360.779 428.868 C 381.366 436.198 396.799 451.708 406.232 471.105 C 416.099 490.075 420.812 503.437 441.824 506.02 C 450.398 507.316 474.413 506.882 483.415 506.455 C 500.998 506.455 518.582 512.488 531.01 524.99 C 539.161 533.607 545.164 544.388 547.734 556.455 C 551.596 575.851 546.877 595.248 535.299 609.898 C 527.156 620.245 516.005 628.008 503.568 631.451 C 497.569 633.179 491.563 633.608 485.558 633.608 C 482.13 633.608 477.416 633.608 471.837 633.608 C 454.687 633.608 418.242 633.608 390.8 633.608 C 371.932 633.608 356.925 618.522 356.925 599.553 L 356.925 535.764 L 356.925 473.262 C 356.925 468.088 352.638 463.783 347.491 463.783 L 334.197 463.783 C 308.038 464.21 287.032 493.525 287.032 524.557 C 287.032 555.592 287.032 637.919 287.032 637.919 C 287.032 671.539 314.043 698.692 347.491 698.692 C 347.491 698.692 496.284 698.266 498.428 698.266 C 532.728 694.815 564.46 677.146 585.898 649.986 C 607.342 623.696 617.201 589.214 612.915 553.865 Z" style="fill: rgb(255, 255, 255);" transform="matrix(1, 0, 0, 1, 32.719971, 0)"/>
</svg>

After

Width:  |  Height:  |  Size: 5 KiB

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 900 900" xmlns="http://www.w3.org/2000/svg">
<g id="g10" transform="matrix(3, 0, 0, -3, 0.000095, 900)" style="">
<g id="g12" transform="scale(0.1)">
<path d="M 1500 3000 C 671.57 3000 0 2328.43 0 1500 C 0 671.57 671.57 0 1500 0 C 2328.43 0 3000 671.57 3000 1500 C 3000 2328.43 2328.43 3000 1500 3000 Z M 2454.59 545.41 C 2199.61 290.422 1860.6 150 1500 150 C 1139.4 150 800.387 290.422 545.406 545.41 C 290.426 800.391 150 1139.4 150 1500 C 150 1860.6 290.426 2199.61 545.406 2454.59 C 800.387 2709.57 1139.4 2850 1500 2850 C 1860.6 2850 2199.61 2709.57 2454.59 2454.59 C 2709.57 2199.61 2850 1860.6 2850 1500 C 2850 1139.4 2709.57 800.391 2454.59 545.41" style="fill-opacity: 1; fill-rule: nonzero; stroke: none;" id="path14"/>
</g>
</g>
<path d="M 750.13 417.241 C 735.976 417.241 726.548 409.051 726.548 392.237 L 726.548 295.688 C 726.548 234.047 700.815 200 634.352 200 L 603.48 200 L 603.48 265.085 L 612.915 265.085 C 639.072 265.085 651.51 279.308 651.51 304.739 L 651.51 390.082 C 651.51 427.153 662.654 442.238 687.094 449.999 C 662.654 457.329 651.51 472.842 651.51 509.912 C 651.51 531.029 651.51 552.157 651.51 573.275 C 651.51 590.95 651.51 608.19 646.789 625.857 C 642.075 642.237 634.352 657.756 623.633 671.119 C 617.628 678.882 610.771 685.344 603.054 691.376 L 603.054 700 L 633.925 700 C 700.391 700 726.114 665.946 726.114 604.306 L 726.114 507.756 C 726.114 490.515 735.124 482.759 749.703 482.759 L 767.28 482.759 L 767.28 417.667 L 750.13 417.667 L 750.13 417.241 Z" style="" transform="matrix(1, 0, 0, 1, 32.719971, 0)"/>
<path d="M 540.018 298.285 L 444.828 298.285 C 442.683 298.285 440.965 296.562 440.965 294.407 L 440.965 287.078 C 440.965 284.921 442.683 283.201 444.828 283.201 L 540.444 283.201 C 542.588 283.201 544.307 284.921 544.307 287.078 L 544.307 294.407 C 544.307 296.562 542.163 298.285 540.018 298.285 Z" style="" transform="matrix(1, 0, 0, 1, 32.719971, 0)"/>
<path d="M 556.309 391.382 L 486.85 391.382 C 484.707 391.382 482.988 389.662 482.988 387.505 L 482.988 380.176 C 482.988 378.028 484.707 376.298 486.85 376.298 L 556.309 376.298 C 558.455 376.298 560.171 378.028 560.171 380.176 L 560.171 387.505 C 560.171 389.234 558.455 391.382 556.309 391.382 Z" style="" transform="matrix(1, 0, 0, 1, 32.719971, 0)"/>
<path d="M 583.754 344.834 L 444.828 344.834 C 442.683 344.834 440.965 343.111 440.965 340.956 L 440.965 333.627 C 440.965 331.478 442.683 329.748 444.828 329.748 L 583.327 329.748 C 585.47 329.748 587.182 331.478 587.182 333.627 L 587.182 340.956 C 587.182 342.685 585.898 344.834 583.754 344.834 Z" style="" transform="matrix(1, 0, 0, 1, 32.719971, 0)"/>
<path d="M 334.628 319.397 C 344.056 319.397 353.49 320.257 362.498 322.414 L 362.498 304.739 C 362.498 279.741 375.36 265.085 401.085 265.085 L 410.52 265.085 L 410.52 200 L 379.648 200 C 313.184 200 287.458 234.047 287.458 295.688 L 287.458 327.587 C 302.465 322.414 318.329 319.397 334.628 319.397 Z" style="" transform="matrix(1, 0, 0, 1, 32.719971, 0)"/>
<path d="M 612.915 553.865 C 606.05 499.125 564.033 453.438 510 443.091 C 494.993 440.075 479.986 439.641 465.404 442.23 C 464.98 442.23 464.98 441.797 464.554 441.797 C 440.965 392.231 390.367 359.471 335.48 359.471 C 280.595 359.471 230.429 391.37 206.413 440.937 C 205.988 440.937 205.988 441.37 205.555 441.37 C 190.123 439.641 174.684 440.502 159.251 444.387 C 106.075 457.315 65.771 502.144 58.48 556.455 C 57.62 562.054 57.195 567.661 57.195 572.834 C 57.195 589.214 68.347 604.298 84.638 606.455 C 104.791 609.471 122.375 593.953 121.941 574.129 C 121.941 571.105 121.941 567.661 122.375 564.645 C 125.804 537.058 146.814 513.784 174.256 507.316 C 182.832 505.159 191.408 504.732 199.558 506.02 C 225.716 509.471 251.439 496.108 262.584 472.833 C 270.735 455.593 283.597 440.502 300.754 432.313 C 319.615 423.261 341.06 421.973 360.779 428.868 C 381.366 436.198 396.799 451.708 406.232 471.105 C 416.099 490.075 420.812 503.437 441.824 506.02 C 450.398 507.316 474.413 506.882 483.415 506.455 C 500.998 506.455 518.582 512.488 531.01 524.99 C 539.161 533.607 545.164 544.388 547.734 556.455 C 551.596 575.851 546.877 595.248 535.299 609.898 C 527.156 620.245 516.005 628.008 503.568 631.451 C 497.569 633.179 491.563 633.608 485.558 633.608 C 482.13 633.608 477.416 633.608 471.837 633.608 C 454.687 633.608 418.242 633.608 390.8 633.608 C 371.932 633.608 356.925 618.522 356.925 599.553 L 356.925 535.764 L 356.925 473.262 C 356.925 468.088 352.638 463.783 347.491 463.783 L 334.197 463.783 C 308.038 464.21 287.032 493.525 287.032 524.557 C 287.032 555.592 287.032 637.919 287.032 637.919 C 287.032 671.539 314.043 698.692 347.491 698.692 C 347.491 698.692 496.284 698.266 498.428 698.266 C 532.728 694.815 564.46 677.146 585.898 649.986 C 607.342 623.696 617.201 589.214 612.915 553.865 Z" style="" transform="matrix(1, 0, 0, 1, 32.719971, 0)"/>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 900 900" xmlns="http://www.w3.org/2000/svg">
<g id="g10" transform="matrix(3, 0, 0, -3, 0.000095, 900)" style="">
<g id="g12" transform="scale(0.1)">
<path d="M 1500 3000 C 671.57 3000 0 2328.43 0 1500 C 0 671.57 671.57 0 1500 0 C 2328.43 0 3000 671.57 3000 1500 C 3000 2328.43 2328.43 3000 1500 3000 Z M 2454.59 545.41 C 2199.61 290.422 1860.6 150 1500 150 C 1139.4 150 800.387 290.422 545.406 545.41 C 290.426 800.391 150 1139.4 150 1500 C 150 1860.6 290.426 2199.61 545.406 2454.59 C 800.387 2709.57 1139.4 2850 1500 2850 C 1860.6 2850 2199.61 2709.57 2454.59 2454.59 C 2709.57 2199.61 2850 1860.6 2850 1500 C 2850 1139.4 2709.57 800.391 2454.59 545.41" style="fill-opacity: 1; fill-rule: nonzero; stroke: none; fill: rgb(255, 255, 255);" id="path14"/>
</g>
</g>
<path d="M 577.733 100 L 413.29 283.961 L 300.781 409.808 L 138.716 263.28 L 100 287.767 L 100 617.463 L 134.754 644.256 L 303.122 491.866 L 577.733 800 L 700 740.967 L 700 161.752 L 577.733 100 Z M 153.123 539.593 L 153.123 359.989 L 228.031 450.002 L 153.123 539.593 Z M 554.503 577.9 L 400.001 450.002 L 554.503 321.68 L 554.503 577.9 Z" style="fill: rgb(255, 255, 255);"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 900 900" xmlns="http://www.w3.org/2000/svg">
<g id="g10" transform="matrix(3, 0, 0, -3, 0.000095, 900)" style="">
<g id="g12" transform="scale(0.1)">
<path d="M 1500 3000 C 671.57 3000 0 2328.43 0 1500 C 0 671.57 671.57 0 1500 0 C 2328.43 0 3000 671.57 3000 1500 C 3000 2328.43 2328.43 3000 1500 3000 Z M 2454.59 545.41 C 2199.61 290.422 1860.6 150 1500 150 C 1139.4 150 800.387 290.422 545.406 545.41 C 290.426 800.391 150 1139.4 150 1500 C 150 1860.6 290.426 2199.61 545.406 2454.59 C 800.387 2709.57 1139.4 2850 1500 2850 C 1860.6 2850 2199.61 2709.57 2454.59 2454.59 C 2709.57 2199.61 2850 1860.6 2850 1500 C 2850 1139.4 2709.57 800.391 2454.59 545.41" style="fill-opacity: 1; fill-rule: nonzero; stroke: none;" id="path14"/>
</g>
</g>
<path d="M 577.733 100 L 413.29 283.961 L 300.781 409.808 L 138.716 263.28 L 100 287.767 L 100 617.463 L 134.754 644.256 L 303.122 491.866 L 577.733 800 L 700 740.967 L 700 161.752 L 577.733 100 Z M 153.123 539.593 L 153.123 359.989 L 228.031 450.002 L 153.123 539.593 Z M 554.503 577.9 L 400.001 450.002 L 554.503 321.68 L 554.503 577.9 Z" style=""/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -6,30 +6,25 @@ author: bluxmit
version: 4.0
description: |
# Code-server workspace
General-purpose portable containerized browser-based development environment.
Browser-based portable and containerized general-purpose development environment.
Includes code editor, terminal, file browser and git manager.
# UI icons
logo: vscode-circle-white.svg
favicon: vscode-circle.svg
tags: web-ide, codeserver
# UI icons
logo: codeserver-circle-white.svg
favicon: codeserver-circle.svg
# (Homepage UI appearance)
styles:
colors:
light:
primary: "#271647"
accent: "#44DA88"
subtitle: "#271647"
code_text: "#EAB676"
code_background: "#252525"
dark:
primary: "#2b3ac4"
accent: "#44DA88"
background: "#2E303E"
title: "#E9EBFC"
subtitle: "#E9EBFC"
text: "#E9EBFC"
code_text: "#EAB676"
code_background: "#3C3C3C"
# add applications and services to the start command
start:
- name: Code-server
folder: $CODESERVER_DIR
cmd: . env/bin/activate; bash code-server-run.sh
cmd: code-server --bind-addr 0.0.0.0:8021 --auth "none" --disable-telemetry /home

View file

@ -8,9 +8,9 @@ RUN echo "------------------------------------------------------ nodejs-18" \
&& npm install -g npm@8.7.0 \
&& echo "------------------------------------------------------ elasticsearch-dump" \
&& npm install elasticdump@6.88.0 -g
# Switch back to abc user and continue
USER abc
RUN sudo apt-get -y update \
&& echo "------------------------------------------------------ esbulk" \
&& cd /tmp && wget https://github.com/miku/esbulk/releases/download/v0.7.5/esbulk_0.7.5_amd64.deb \
@ -23,8 +23,8 @@ RUN sudo apt-get -y update \
&& mv /tmp/vulcanizer /home/abc/.local/bin/vulcanizer \
&& rm /tmp/vulcanizer_0.8.0_Linux_i386.tar.gz
# Copy new theia configuration (set another default theme)
COPY --chown=abc:abc settings.json /home/abc/.theia/settings.json
# Change default codeserver theme
COPY --chown=abc:abc settings.json /home/abc/.local/share/code-server/User/settings.json
# Build Alnoda workspace
COPY --chown=abc:abc workspace /tmp/workspace

View file

@ -9,6 +9,8 @@ description: |
Browser-based containerized environment to interact,
manage and administer Opensearch and Elasticsearch clusters.
tags: elasticsearch, opensearch, data-loading, data-backup, nodejs
# UI icons
logo: osearch-circle-white.svg
favicon: osearch-circle.svg
@ -20,12 +22,10 @@ styles:
light:
primary: "#003B5C"
accent: "#00A3E0"
subtitle: "#003B5C"
background: "#F5F7F7"
dark:
primary: "#176655"
accent: "#FEC514"
background: "#343741"
title: "#9CDCFE"
subtitle: "#9CDCFE"
text: "#9CDCFE"

View file

@ -1,4 +1,4 @@
ARG BUILD_IMAGE=node:12.18.3
ARG BUILD_IMAGE=node:16.17.0
ARG MAIN_IMAGE=alnoda/java-workspace:4.0-17
################################################################################ BUILD THEIA
FROM ${BUILD_IMAGE}
@ -9,7 +9,7 @@ RUN apt-get update \
&& apt-get install -y libsecret-1-dev \
&& mkdir /opt/theia
WORKDIR /opt/theia
ADD theia_package.json ./package.json
ADD elixir_theia_package.json ./package.json
ARG GITHUB_TOKEN
RUN yarn --pure-lockfile && \
NODE_OPTIONS="--max_old_space_size=4096" yarn theia build && \
@ -29,7 +29,7 @@ FROM ${MAIN_IMAGE}
ENV THEIA_DIR="/home/abc/apps/theia"
RUN rm -rf $THEIA_DIR \
&& mkdir "$THEIA_DIR" \
&& cd $THEIA_DIR && nodeenv --node=12.18.3 env && . env/bin/activate
&& cd $THEIA_DIR && nodeenv --node=16.17.0 env && . env/bin/activate
# Copy built Theia from the build image
COPY --from=0 --chown=abc:abc /opt/theia $THEIA_DIR

View file

@ -8,6 +8,8 @@ description: |
# Erlang & Elixir workspace
Browser-based portable and containerized development environment for Erlang and Elixir projects.
tags: erlang, elixir, kerl, kiex
# UI icons
logo: elixir-circle-white.svg
favicon: elixir-circle.svg
@ -29,3 +31,5 @@ styles:
title: "#83698E"
subtitle: "#604270"
text: "#FFFFFF"
code_text: "#000000"
code_background: "#F0F0F0"

View file

@ -1,4 +1,4 @@
FROM alnoda/theia-workspace:4.0
FROM alnoda/codeserver-workspace:4.0
# Set env variables for Cronicle and Static file server
ENV CRONICLE_VERSION="v0.9.10" \

View file

@ -9,6 +9,8 @@ description: |
General-purpose portable containerized browser-based environment for code development and execution.
Includes code editor, terminal, file browser, Git manager and visual jobs scheduler.
tags: task-scheduler, static-file-server
# UI icons
logo: extended-workspace-white.svg
favicon: extended-workspace.svg
@ -19,14 +21,14 @@ styles:
light:
primary: "#2A2D2E"
accent: "#E77260"
subtitle: "#2A2D2E"
dark:
primary: "#3C3C3C"
accent: "#E77260"
background: "#1E1E1E"
title: "#9CDCFE"
subtitle: "#9CDCFE"
text: "#9CDCFE"
code_text: "#EAB676"
code_background: "#3C3C3C"
common_colors:
nav: "#eab676"

View file

@ -0,0 +1,40 @@
FROM alnoda/codeserver-workspace:4.0
USER root
RUN sudo apt-get -y update \
&& echo "------------------------------------------------------ system nodejs-18" \
&& curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
&& sudo apt-get install -y nodejs \
&& npm install --global yarn \
&& echo "------------------------------------------------------ user" \
&& chown abc /usr/lib/node_modules \
&& find /usr/lib/node_modules -type f | xargs -I{} chown abc {}
USER abc
RUN echo "------------------------------------------------------ nvm" \
&& wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash \
&& echo 'export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"' >> /home/abc/.zshrc \
&& echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> /home/abc/.zshrc
# Create node environment & install Static file server
ENV STATIC_FILESERVER_DIR="/home/abc/apps/static-file-server"
RUN echo "------------------------------------------------------ Static file server" \
&& mkdir /home/static-server \
&& mkdir -p $STATIC_FILESERVER_DIR \
&& cd $STATIC_FILESERVER_DIR && nodeenv --node=16.17.0 --npm=6.0.0 env \
&& cd $STATIC_FILESERVER_DIR && . env/bin/activate && npm install -g serve@14.0.1
# Install additional codeserver extensions
RUN echo "------------------------------------------------------ extensions" \
&& code-server --install-extension bradlc.vscode-tailwindcss \
&& code-server --install-extension anseki.vscode-color \
&& code-server --install-extension christian-kohler.npm-intellisense \
&& code-server --install-extension xabikos.JavaScriptSnippets \
&& code-server --install-extension kumar-harsh.graphql-for-vscode
# Change default codeserver theme
COPY --chown=abc:abc settings.json /home/abc/.local/share/code-server/User/settings.json
# Build Alnoda workspace
COPY --chown=abc:abc workspace /tmp/workspace
RUN pipx uninstall alnoda-wrk; pipx install alnoda-wrk; alnoda-wrk build /tmp/workspace && rm -rf /tmp/workspace

View file

@ -0,0 +1,62 @@
<p align="center">
<img src="./img/nodejs-circle.svg" alt="Nodejs logo" width="150">
</p>
# Node.js workspace
Containerized isolated development environment for Javascript and Node.js
<p align="center">
<img src="https://raw.githubusercontent.com/bluxmit/alnoda-workspaces/main/workspaces/codeserver-workspace/img/codeserver-collage-sm.jpg" alt="Collage" width="750">
</p>
## Why this images
1. If you need self-hosted development environment.
2. If you want to be one terminal command away from coding in JavaScript.
## Start
```
docker run --name space-1 -d -p 8020-8040:8020-8040 alnoda/nodejs-workspace
```
open [localhost:8020](http://localhost:8020) in browser.
## Features
- Node
- Npm
- Yarn
- [Nvm](https://github.com/nvm-sh/nvm)
- [Nodeenv](https://pypi.org/project/nodeenv/)
**Dev tools:**
- [**Eclipse Theia**](https://theia-ide.org/docs/) - open source version of popular Visual Studio Code IDE. Theia is trully open-source, has
VS-Code extensions and works in browser. This means it can run inside a docker container on local machine or in cloud. A lot of beautiful color themes and many common plugins are already installed to save time.
- [**Terminal**](https://github.com/tsl0922/ttyd) - secure browser-based terminal.
- [**FileBrowser**](https://github.com/filebrowser/filebrowser) - manage files and folders inside the workspace, and exchange data between local environment and the workspace
- [**Ungit**](https://github.com/FredrikNoren/ungit) - rings user friendliness to git without sacrificing the versatility of it.
- **Ubuntu 20.4** with the following CLI apps
- [Zsh](https://www.zsh.org/), [Oh my Zsh](https://ohmyz.sh/)
- Python 3, Pip
- Node/nodeenv
- curl, wget, telnet, jq
- **Git:** git, git-flow, lazygit
- **File browsers:** mc
- **Text editors:** nano, vim, mcedit
- **System monitors:** ncdu, htop, glances, vizex
- **Process Control:** supervisord
- **Job scheduler:** cron
- **Terminal multiplexer:** tmux
## Docs
See our guides on
- [**getting started**](https://docs.alnoda.org/get-started/common-features/)
- [**workspace tutorial**](https://docs.alnoda.org/nodejs-workspace/)
- [**project docs**](https://docs.alnoda.org/)

View file

@ -0,0 +1,4 @@
{
"workbench.colorTheme": "Edge Dark",
"git-graph.maxDepthOfRepoSearch": 3
}

View file

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 2 KiB

View file

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

View file

@ -0,0 +1,49 @@
---
# mandatory
name: Node.js workspace
doc_url: https://docs.alnoda.org/workspaces/nodejs-workspace/
author: bluxmit
version: 4.0
description: |
# Node.js workspace
Browser-based portable and containerized development environment for Javascript and Node.js projects
tags: javascript, nodejs, npm, yarn, nvm
# UI icons
logo: nodejs-circle-white.svg
favicon: nodejs-circle.svg
# Homepage UI appearance
styles:
font: Open Sans # chose any from https://fonts.google.com/
colors:
light:
primary: "#3E863D"
accent: "#C53635"
title: "#233056"
text: "#233056"
dark:
primary: "#3E863D"
accent: "#3E863D"
background: "#233056"
title: "#FFFFFF"
text: "#FFFFFF"
common_colors:
nav: "#eab676"
# Add Static file server tab to the Home page
pages:
home:
- name: Static file server
port: 8028
path: /
title: Static File Server
description: "Serve any static websites like a breeze"
image: static-file-server.png
# start Static file server
start:
- name: Static file server
folder: $STATIC_FILESERVER_DIR
cmd: . env/bin/activate; serve -p 8028 /home/static-server

View file

@ -1,4 +1,4 @@
FROM alnoda/theia-workspace:4.0
FROM alnoda/codeserver-workspace:4.0
# Istall Golang
RUN cd /tmp && curl -LO https://go.dev/dl/go1.18.2.linux-amd64.tar.gz \
@ -7,10 +7,19 @@ RUN cd /tmp && curl -LO https://go.dev/dl/go1.18.2.linux-amd64.tar.gz \
# Set environmental variables
ENV PATH="$PATH:/home/abc/go/bin"
ENV GOPATH="/home/abc/go"
# Build Alnoda workspace UI
RUN go install -v github.com/ramya-rao-a/go-outline@latest \
&& go install -v golang.org/x/tools/gopls@latest
# Install additional codeserver extensions
RUN echo "------------------------------------------------------ extensions" \
&& code-server --install-extension golang.go \
&& code-server --install-extension tonsky.theme-alabaster
# Change default codeserver theme
COPY --chown=abc:abc settings.json /home/abc/.local/share/code-server/User/settings.json
# Build Alnoda workspace
COPY --chown=abc:abc workspace /tmp/workspace
RUN alnoda-wrk build /tmp/workspace && rm -rf /tmp/workspace
# Copy new Theia settings to set another theme for the code editor
COPY --chown=abc:abc theia_settings.json /home/abc/.theia/settings.json
RUN pipx uninstall alnoda-wrk; pipx install alnoda-wrk; alnoda-wrk build /tmp/workspace && rm -rf /tmp/workspace

View file

@ -0,0 +1,7 @@
{
"workbench.colorTheme": "Alabaster",
"git-graph.maxDepthOfRepoSearch": 3,
"gopls": {
"experimentalWorkspaceModule": true
}
}

View file

@ -1,5 +0,0 @@
{
"terminal.integrated.shell.linux": "/bin/zsh",
"workbench.colorTheme": "GitHub Light",
"git-graph.maxDepthOfRepoSearch": 3
}

View file

@ -6,7 +6,9 @@ author: bluxmit
version: 4.0
description: |
# Go (golang) workspace
Portable containerized isolated development environment for Go programming language.
Browser-based portable containerized and completely isolated development environment for Go programming language projects.
tags: go
# UI icons
logo: go-circle-white.svg
@ -20,14 +22,12 @@ styles:
primary: "#007D9C"
accent: "#c9af06"
title: "#007D9C"
subtitle: "#c9af06"
background: "#FFFFFF"
dark:
primary: "#007D9C"
accent: "#c9af06"
background: "#010d14"
title: "#79D4FD"
subtitle: "#c9af06"
text: "#FFFFFF"
common_colors:
nav: "#eab676"

View file

@ -1,81 +0,0 @@
ARG docker_registry=docker.io/alnoda
ARG image_tag=3.0
## Images used:
ARG BUILD_IMAGE=node:12.18.3
ARG DEPLOY_IMAGE=${docker_registry}/base-workspace:${image_tag}
################################################################################ BUILD
ARG THEIA_VERSION=1.15.0
#ARG THEIA_VERSION=latest
#ARG THEIA_VERSION=next
FROM ${BUILD_IMAGE}
ARG THEIA_VERSION
RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y apt-utils \
&& apt-get install -y git \
&& apt-get install -y libsecret-1-dev \
&& mkdir /opt/theia
WORKDIR /opt/theia
ADD ${THEIA_VERSION}.package.json ./package.json
ARG GITHUB_TOKEN
RUN yarn --pure-lockfile && \
NODE_OPTIONS="--max_old_space_size=4096" yarn theia build && \
yarn theia download:plugins && \
yarn --production && \
yarn autoclean --init && \
echo *.ts >> .yarnclean && \
echo *.ts.map >> .yarnclean && \
echo *.spec.* >> .yarnclean && \
yarn autoclean --force && \
yarn cache clean
################################################################################ IMAGE
FROM ${DEPLOY_IMAGE}
USER root
RUN mkdir /opt/theia \
&& cd /opt/theia && nodeenv --node=12.18.3 env && . env/bin/activate \
&& apt-get install -y libsecret-1-dev
COPY --from=0 /opt/theia /opt/theia
COPY settings.json /home/abc/.theia/settings.json
COPY supervisord-theia.conf /etc/supervisord/
COPY ./mkdocs/mkdocs.yml /home/docs/mkdocs.yml
COPY ./mkdocs/helpers.py /home/docs/macros
COPY ./mkdocs/IDE.jpg /home/docs/docs/assets/home/
COPY ./mkdocs/README.md /home/docs/docs/README.md
ENV SHELL=/bin/bash \
THEIA_DEFAULT_PLUGINS=local-dir:/opt/theia/plugins \
USE_LOCAL_GIT=true \
HOME=/home/abc \
PATH="/home/abc/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" \
NVM_DIR=/home/abc/.nvm
RUN echo "------------------------------------------------------ utils" \
&& rm -rf /home/abc/utils || true \
&& git clone https://github.com/bluxmit/alnoda-workspaces /tmp/alnoda-workspaces \
&& mv /tmp/alnoda-workspaces/utils /home/abc/ \
&& rm -rf /tmp/alnoda-workspaces \
&& echo "------------------------------------------------------ user" \
&& chown -R abc /opt/theia \
&& mkdir -p /var/log/theia && chown -R abc /var/log/theia \
&& chown -R abc /home/docs \
&& chown -R abc /home/abc/utils \
&& chown -R abc /home/abc/installed-python-packages \
&& find /home -type d | xargs -I{} chown -R abc {} \
&& find /home -type f | xargs -I{} chown abc {}
USER abc

View file

@ -1,67 +0,0 @@
<p align="center">
<img src="./img/laptop-circle.svg" alt="Workspace logo" width="150">
</p>
# IDE-workspace
General-purpose, fully isolated containerized development environment.
Includes code editor, terminal, filebrowser, git manager, static file server and job scheduler.
<p align="center">
<img src="https://raw.githubusercontent.com/bluxmit/alnoda-workspaces/main/workspaces/ide-workspace/img/wid-collage-sm.jpg" alt="Collage" width="750">
</p>
## Why this images
1. If you need isolated dev environment where you can code and install packages and apps without affecting the base operating system.
2. If you want self-hosted remote development environment.
## Start
```
docker run --name space-1 -d -p 8020-8040:8020-8040 alnoda/ide-workspace
```
and open [localhost:8020](http://localhost:8020) in browser.
## Features
- [**Eclipse Theia**](https://theia-ide.org/docs/) - open source version of popular Visual Studio Code IDE. Theia is trully open-source, has
VS-Code extensions and works in browser. This means it can run inside a docker container on local machine or in cloud. A lot of beautiful color themes and many common plugins are already installed to save time.
- [**Terminal**](https://github.com/tsl0922/ttyd) - secure browser-based terminal.
- [**FileBrowser**](https://github.com/filebrowser/filebrowser) - manage files and folders inside the workspace, and exchange data between local environment and the workspace
- [**Cronicle**](https://github.com/jhuckaby/Cronicle) - task scheduler and runner, with a web based front-end UI. It handles both scheduled, repeating and on-demand jobs, targeting any number of worker servers, with real-time stats and live log viewer.
- [**Static File Server**](https://github.com/vercel/serve) - view any static html sites as easy as if you do it on your local machine. Serve static websites easily.
- [**Ungit**](https://github.com/FredrikNoren/ungit) - rings user friendliness to git without sacrificing the versatility of it.
- [**MkDocs**](https://squidfunk.github.io/mkdocs-material/) - create awesome documentation for your project with only markdown.
- [**Midnight Commander**](https://midnight-commander.org/) - Feature rich visual file manager with internal text viewer and editor.
- [**Process Monitor**](https://htop.dev/) - Monitor running process and resource utilization.
- Quicklaunch UI with getting started tutorial
- **Ubuntu 20.4** with the following CLI apps
- [Zsh](https://www.zsh.org/), [Oh my Zsh](https://ohmyz.sh/)
- Python 3, Pip
- Node/nodeenv
- curl, wget, telnet, jq
- **Git:** git, git-flow
- **File browsers:** mc
- **Text editors:** nano, vim, mcedit
- **System monitors:** ncdu, htop, glances, vizex
- **Process Control:** supervisord
- **Job scheduler:** cron
- **Terminal multiplexer:** tmux
## Docs
See our guides
- [**project docs**](https://docs.alnoda.org/)
- [**getting started**](https://docs.alnoda.org/get-started/common-features/)
## Demo
<div align="center" style="font-style: italic;">
Demo: IDE workspace
</div>
<p align="center">
<img src="https://raw.githubusercontent.com/bluxmit/alnoda-workspaces/main/workspaces/ide-workspace/img/wid-demo.gif" alt="WID demo" width="900">
</p>

View file

@ -1,75 +0,0 @@
## Workspace in cloud with auth
This is a demonstration how Traefik reverse proxy, and its middlewares are used in order to deploy workspace to the cloud server with
basic authentication.
***This doc is just for training. The method described here does not provide enought security when running workspace on the remote server,
because it is based on HTTP, and not on encrypted HTTPS. This method should not be used, unless running workspaces in the internal network.
Check out instructions on the workspace doc to know how to run workspaces securely on the cloud servers***
When running workspace-in-docker on the remote server, it is useful to add authentication mechanism, otherwise anyone in the world
who gets to know the IP of the remote server will be able to use your workspace.
Workspace includes several tools, some of them have their own auth features. We turn them off because wit is tedious to configure
auth for every separate tool. You probably would want one auth mechanism applied to all tools in the workspace. To make this possible
we put the whole workspace behind the reverse proxy and use [Traefik basic auth](https://doc.traefik.io/traefik/middlewares/basicauth/)
Here is [the docker-compose file](../docker-compose/remote-workspace-auth.yaml) that will let you add auth to your workspace.
**In order to launch workspace with authentication, you'll need to do the following 3 steps:**
#### 1. Get any cloud server, and install docker on it
There are even cloud virtual servers that already coming with docker installed, for example
DigitalOcean docker droplets from the Marketplace.
#### 2. Copy [docker compose file](../docker-compose/remote-workspace-auth.yaml) and update 2 configurations for the service called 'workspace'
The places you need to change are marked on this picture:
![Change configs here](../img/auth-yaml.png)
- environmental variable `WRK_HOST` - set it to be the public IP of the server you've got
- update authentication. The default user/pass is admin/admin, you might want to change it to your own user/pass.
The password for the traefik basic auth must be encrypted with the **htpasswd**. For connvenience,
it is installed in every workspace-in-docker, and the easiest way is to generate the password
is to launch workspace locally first, use its terminal to create a password, and then start
workspace on remote server.
To encrypt password open terminal of the local workspace and execute
> ```echo $(htpasswd -nB <userName>) | sed -e s/\\$/\\$\\$/g```
substitute `<userName>` with the new user name, and prowide password on prompt. After this htpasswd will output encrypted password.
Don't forget to change this line in the docker-compose file with the new user:encpypted_pass
```
- "traefik.http.middlewares.basic-auth.basicauth.users=admin:$$2y$$05$$eub6CV.CwUYCCQjNBvSf5uZnzdRmVwGZ/ncxecb9O7WxCR8aLuM3K"
```
ssh to the remote server and create file `remote-workspace-auth.yaml`. For example `nano remote-workspace-auth.yaml`, paste the content of the
modified file and save changes.
#### 3. Start workspace with docker-compose
```
docker-compose -f remote-workspace-auth.yaml up -d
```
***Open in browser `<IP-of-new-server>:8020`*** and use user/path to access the workspace UI. All the tools in the workspace will be
protected by the same authentication as well.
Workspace will be running as daemon. You can exit ssh terminal, and close the connection with the remote server.
The workspace will keep unning and will be accessible via the Internet for anyone who knows user and password.
> You can now use the remote workspace to collaborate with your friends and colleagues. Let them know the URL of the workspace UI and user/pass.
## Stop workspace
In order to stop workspace ssh to the remote server, go to the folder where you saved the file `remote-workspace-auth.yaml` and execute
```
docker-compose -f remote-workspace-auth.yaml down
```

View file

@ -1,75 +0,0 @@
version: "3.3"
services:
traefik:
image: "traefik:v2.4"
container_name: "traefik"
command:
- "--api"
- "--api.dashboard"
- "--api.insecure"
- "--providers.docker"
- "--entrypoints.docs.address=:8020"
- "--entrypoints.filebrowser.address=:8021"
- "--entrypoints.staticfs.address=:8022"
- "--entrypoints.cronicle.address=:8023"
- "--entrypoints.ungit.address=:8024"
- "--entrypoints.ide.address=:8025"
ports:
- 8080:8080
- "8020-8030:8020-8030"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
workspace:
image: alnoda/workspace-in-docker
environment:
- WRK_HOST="68.183.218.233"
labels:
# To create user:password pair, it's possible to use this command:
# In any workspace-in-docker execute in terminal: echo $(htpasswd -nB <userName>) | sed -e s/\\$/\\$\\$/g
# (csubstitute <userName> with the user name of your choice)
# and enter password (twice)
# by default the user:pass is admin:admin
# You can have multiple <user:pass> separated with ","
- "traefik.http.middlewares.basic-auth.basicauth.users=admin:$$2y$$05$$eub6CV.CwUYCCQjNBvSf5uZnzdRmVwGZ/ncxecb9O7WxCR8aLuM3K"
- "traefik.enable=true"
# docs
- "traefik.http.services.docs.loadbalancer.server.port=8020"
- "traefik.http.routers.docs.service=docs"
- "traefik.http.routers.docs.rule=PathPrefix(`/`)"
- "traefik.http.routers.docs.entrypoints=docs"
- "traefik.http.routers.docs.middlewares=basic-auth"
# filebrowser
- "traefik.http.services.filebrowser.loadbalancer.server.port=8021"
- "traefik.http.routers.filebrowser.service=filebrowser"
- "traefik.http.routers.filebrowser.rule=PathPrefix(`/`)"
- "traefik.http.routers.filebrowser.entrypoints=filebrowser"
- "traefik.http.routers.filebrowser.middlewares=basic-auth"
# static file server
- "traefik.http.services.staticfs.loadbalancer.server.port=8022"
- "traefik.http.routers.staticfs.service=staticfs"
- "traefik.http.routers.staticfs.rule=PathPrefix(`/`)"
- "traefik.http.routers.staticfs.entrypoints=staticfs"
- "traefik.http.routers.staticfs.middlewares=basic-auth"
# cronicle
- "traefik.http.services.cronicle.loadbalancer.server.port=8023"
- "traefik.http.routers.cronicle.service=cronicle"
- "traefik.http.routers.cronicle.rule=PathPrefix(`/`)"
- "traefik.http.routers.cronicle.entrypoints=cronicle"
- "traefik.http.routers.cronicle.middlewares=basic-auth"
# ungit
- "traefik.http.services.ungit.loadbalancer.server.port=8024"
- "traefik.http.routers.ungit.service=ungit"
- "traefik.http.routers.ungit.rule=PathPrefix(`/`)"
- "traefik.http.routers.ungit.entrypoints=ungit"
- "traefik.http.routers.ungit.middlewares=basic-auth"
# ide
- "traefik.http.services.ide.loadbalancer.server.port=8025"
- "traefik.http.routers.ide.service=ide"
- "traefik.http.routers.ide.rule=PathPrefix(`/`)"
- "traefik.http.routers.ide.entrypoints=ide"
- "traefik.http.routers.ide.middlewares=basic-auth"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 510 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

View file

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 900 900" xmlns="http://www.w3.org/2000/svg">
<g id="g10" transform="matrix(3, 0, 0, -3, 0.000095, 900)" style="">
<g id="g12" transform="scale(0.1)">
<path d="M 865.406,1290.7 H 2134.6 c 59.53,0.02 107.74,48.23 107.78,107.78 v 856.11 c -0.04,59.54 -48.25,107.75 -107.78,107.77 H 865.406 c -59.547,0 -107.765,-48.23 -107.773,-107.77 v -856.11 c 0.008,-59.55 48.246,-107.76 107.773,-107.78 z m 44.539,932.28 H 2090.06 v -792.9 H 909.945 Z M 2243.95,1224.92 c -7.1,21.62 -50.95,38.81 -98.06,38.81 H 854.117 c -47.109,0 -90.976,-17.19 -98.058,-38.81 L 594.824,734.219 c -10.738,-32.676 28.688,-96.582 88.266,-96.582 h 1633.82 c 59.59,0 99.02,63.906 88.26,96.582 z m -61.7,-277.342 h -84.36 l -12.18,45.957 h 82 z m -33.88,107.072 13.7,-43.3 H 2081 l -11.48,43.3 z m -68.91,-107.072 h -99.42 l -9.74,45.957 h 96.99 z m 48.74,170.822 14.53,-45.94 h -77.93 l -12.16,45.94 z m -65.64,-107.05 h -96.03 l -9.17,43.3 h 93.73 z m -100.72,-63.772 h -99.61 l -7.32,45.957 h 97.18 z m 72.37,170.822 12.16,-45.94 h -92.8 l -9.73,45.94 z m -85.89,-107.05 h -96.23 l -6.89,43.3 h 93.93 z m -22.69,107.05 9.73,-45.94 h -92.98 l -7.31,45.94 z m -81.45,-170.822 h -99.75 l -4.88,45.957 h 97.34 z m -10.14,63.772 h -96.37 l -4.6,43.3 h 94.09 z m -17.01,107.05 7.31,-45.94 h -93.14 l -4.87,45.94 z m -90.51,-170.822 h -99.86 l -2.44,45.957 h 97.43 z m -14.74,-204.961 h -423.55 l 33,115.84 h 357.55 z m 7.98,268.733 h -96.49 l -2.29,43.3 h 94.19 z m -11.34,107.05 4.86,-45.94 h -93.24 l -2.44,45.94 z m -199.51,0 h 90.86 l 2.43,-45.94 h -93.29 z m 0,-63.75 h 94.23 l 2.3,-43.3 h -96.53 z m 0,-61.115 h 97.48 l 2.42,-45.957 h -99.9 z M 1400.25,1118.4 h 90.86 v -45.94 h -93.3 z m -3.39,-63.75 h 94.25 l -0.01,-43.3 h -96.53 z m -3.23,-61.115 h 97.47 v -45.957 h -99.91 z M 1291.6,1118.4 h 90.81 l -2.44,-45.94 h -93.24 z m -6.76,-63.75 h 94.19 l -2.3,-43.3 h -96.48 z m 90.95,-61.115 -2.44,-45.957 h -99.85 l 4.86,45.957 z M 1182.98,1118.4 h 90.71 l -4.87,-45.94 h -93.14 z m -10.13,-63.75 h 94.08 l -4.59,-43.3 h -96.38 z m 87.6,-61.115 -4.87,-45.957 h -99.76 l 7.31,45.957 z M 1074.38,1118.4 h 90.56 l -7.3,-45.94 h -93 z m 80.42,-63.75 -6.88,-43.3 h -96.23 l 9.18,43.3 z m -9.71,-61.115 -7.31,-45.957 h -99.6 l 9.73,45.957 z M 965.813,1118.4 h 90.357 l -9.73,-45.94 h -92.803 z m 76.847,-63.75 -9.18,-43.3 h -96.039 l 11.481,43.3 z m -12.95,-61.115 -9.75,-45.957 h -99.413 l 12.18,45.957 z M 871.801,1118.4 h 75.578 l -12.176,-45.94 h -77.937 z m -20.164,-63.75 h 78.855 l -11.476,-43.3 H 837.93 Z m -19.34,-61.115 h 81.996 l -12.18,-45.957 H 817.758 Z M 2316.91,686.797 H 683.09 c -20.805,0 -35.766,19.394 -39.766,30.703 H 2356.68 c -3.98,-11.309 -18.95,-30.703 -39.77,-30.703 z M 1500,3000 C 671.57,3000 0,2328.43 0,1500 0,671.57 671.57,0 1500,0 c 828.43,0 1500,671.57 1500,1500 0,828.43 -671.57,1500 -1500,1500 z M 2454.59,545.41 C 2199.61,290.422 1860.6,150 1500,150 1139.4,150 800.387,290.422 545.406,545.41 290.426,800.391 150,1139.4 150,1500 c 0,360.6 140.426,699.61 395.406,954.59 C 800.387,2709.57 1139.4,2850 1500,2850 c 360.6,0 699.61,-140.43 954.59,-395.41 C 2709.57,2199.61 2850,1860.6 2850,1500 2850,1139.4 2709.57,800.391 2454.59,545.41" style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path14"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 597 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 319 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 MiB

View file

@ -1,112 +0,0 @@
{
"private": true,
"theia": {
"frontend": {
"config": {
"applicationName": "Theia IDE",
"warnOnPotentiallyInsecureHostPattern": false,
"preferences": {
"files.enableTrash": false
}
}
}
},
"dependencies": {
"@theia/editor-preview": "latest",
"@theia/file-search": "latest",
"@theia/getting-started": "latest",
"@theia/git": "latest",
"@theia/markers": "latest",
"@theia/messages": "latest",
"@theia/monaco": "latest",
"@theia/navigator": "latest",
"@theia/outline-view": "latest",
"@theia/plugin-ext-vscode": "latest",
"@theia/preferences": "latest",
"@theia/preview": "latest",
"@theia/search-in-workspace": "latest",
"@theia/terminal": "latest",
"@theia/vsx-registry": "latest"
},
"devDependencies": {
"@theia/cli": "latest"
},
"scripts": {
"preinstall": "node-gyp install"
},
"theiaPluginsDir": "plugins",
"theiaPlugins": {
"vscode-builtin-bat": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/bat-1.39.1-prel.vsix",
"vscode-builtin-clojure": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/clojure-1.39.1-prel.vsix",
"vscode-builtin-coffeescript": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/coffeescript-1.39.1-prel.vsix",
"vscode-builtin-configuration-editing": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/configuration-editing-1.39.1-prel.vsix",
"vscode-builtin-cpp": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/cpp-1.39.1-prel.vsix",
"vscode-builtin-csharp": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/csharp-1.39.1-prel.vsix",
"vscode-builtin-css": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/css-1.39.1-prel.vsix",
"vscode-builtin-debug-auto-launch": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/debug-auto-launch-1.39.1-prel.vsix",
"vscode-builtin-docker": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/docker-1.39.1-prel.vsix",
"vscode-builtin-emmet": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/emmet-1.39.1-prel.vsix",
"vscode-builtin-fsharp": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/fsharp-1.39.1-prel.vsix",
"vscode-builtin-go": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/go-1.39.1-prel.vsix",
"vscode-builtin-groovy": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/groovy-1.39.1-prel.vsix",
"vscode-builtin-grunt": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/grunt-1.39.1-prel.vsix",
"vscode-builtin-gulp": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/gulp-1.39.1-prel.vsix",
"vscode-builtin-handlebars": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/handlebars-1.39.1-prel.vsix",
"vscode-builtin-hlsl": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/hlsl-1.39.1-prel.vsix",
"vscode-builtin-html": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/html-1.39.1-prel.vsix",
"vscode-builtin-html-language-features": "https://open-vsx.org/api/vscode/html-language-features/1.49.0/file/vscode.html-language-features-1.49.0.vsix",
"vscode-builtin-ini": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/ini-1.39.1-prel.vsix",
"vscode-builtin-jake": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/jake-1.39.1-prel.vsix",
"vscode-builtin-java": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/java-1.39.1-prel.vsix",
"vscode-builtin-javascript": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/javascript-1.39.1-prel.vsix",
"vscode-builtin-json": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/json-1.39.1-prel.vsix",
"vscode-builtin-json-language-features": "https://open-vsx.org/api/vscode/json-language-features/1.46.1/file/vscode.json-language-features-1.46.1.vsix",
"vscode-builtin-less": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/less-1.39.1-prel.vsix",
"vscode-builtin-log": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/log-1.39.1-prel.vsix",
"vscode-builtin-lua": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/lua-1.39.1-prel.vsix",
"vscode-builtin-make": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/make-1.39.1-prel.vsix",
"vscode-builtin-markdown": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/markdown-1.39.1-prel.vsix",
"vscode-builtin-merge-conflicts": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/merge-conflict-1.39.1-prel.vsix",
"vscode-builtin-npm": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/npm-1.39.1-prel.vsix",
"vscode-builtin-node-debug": "https://github.com/theia-ide/vscode-node-debug/releases/download/v1.35.3/node-debug-1.35.3.vsix",
"vscode-builtin-node-debug2": "https://github.com/theia-ide/vscode-node-debug2/releases/download/v1.33.0/node-debug2-1.33.0.vsix",
"vscode-builtin-objective-c": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/objective-c-1.39.1-prel.vsix",
"vscode-builtin-perl": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/perl-1.39.1-prel.vsix",
"vscode-builtin-powershell": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/powershell-1.39.1-prel.vsix",
"vscode-builtin-pug": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/pug-1.39.1-prel.vsix",
"vscode-builtin-python": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/python-1.39.1-prel.vsix",
"vscode-builtin-r": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/r-1.39.1-prel.vsix",
"vscode-builtin-razor": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/razor-1.39.1-prel.vsix",
"vscode-builtin-ruby": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/ruby-1.39.1-prel.vsix",
"vscode-builtin-rust": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/rust-1.39.1-prel.vsix",
"vscode-builtin-scss": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/scss-1.39.1-prel.vsix",
"vscode-builtin-shaderlab": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/shaderlab-1.39.1-prel.vsix",
"vscode-builtin-shellscript": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/shellscript-1.39.1-prel.vsix",
"vscode-builtin-sql": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/sql-1.39.1-prel.vsix",
"vscode-builtin-swift": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/swift-1.39.1-prel.vsix",
"vscode-builtin-theme-abyss": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-abyss-1.39.1-prel.vsix",
"vscode-builtin-theme-defaults": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-defaults-1.39.1-prel.vsix",
"vscode-builtin-theme-kimbie-dark": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-kimbie-dark-1.39.1-prel.vsix",
"vscode-builtin-theme-monokai": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-monokai-1.39.1-prel.vsix",
"vscode-builtin-theme-dimmed": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-monokai-dimmed-1.39.1-prel.vsix",
"vscode-builtin-theme-quietlight": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-quietlight-1.39.1-prel.vsix",
"vscode-builtin-theme-red": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-red-1.39.1-prel.vsix",
"vscode-builtin-theme-solarized-dark": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-solarized-dark-1.39.1-prel.vsix",
"vscode-builtin-theme-tomorrow-night-blue": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-tomorrow-night-blue-1.39.1-prel.vsix",
"vscode-builtin-typescript": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/typescript-1.39.1-prel.vsix",
"vscode-builtin-typescript-language-features": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/typescript-language-features-1.39.1-prel.vsix",
"vscode-builtin-vb": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/vb-1.39.1-prel.vsix",
"vscode-builtin-icon-theme-seti": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/vscode-theme-seti-1.39.1-prel.vsix",
"vscode-builtin-xml": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/xml-1.39.1-prel.vsix",
"vscode-builtin-yaml": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/yaml-1.39.1-prel.vsix",
"vscode-editorconfig": "https://github.com/theia-ide/editorconfig-vscode/releases/download/v0.14.4/EditorConfig-0.14.4.vsix",
"vscode-python": "https://github.com/microsoft/vscode-python/releases/download/2020.1.58038/ms-python-release.vsix",
"nadim-vscode.infinity-dark-theme": "https://open-vsx.org/api/nadim-vscode/infinity-dark-theme/1.0.1/file/nadim-vscode.infinity-dark-theme-1.0.1.vsix",
"emroussel.atomize-atom-one-dark-theme": "https://open-vsx.org/api/emroussel/atomize-atom-one-dark-theme/1.5.5/file/emroussel.atomize-atom-one-dark-theme-1.5.5.vsix",
"mhutchie.git-graph": "https://open-vsx.org/api/mhutchie/git-graph/1.30.0/file/mhutchie.git-graph-1.30.0.vsix",
"teabyii.ayu": "https://open-vsx.org/api/teabyii/ayu/0.20.1/file/teabyii.ayu-0.20.1.vsix",
"yurihs.sublime-vscode-theme": "https://open-vsx.org/api/yurihs/sublime-vscode-theme/1.4.1/file/yurihs.sublime-vscode-theme-1.4.1.vsix",
"wesbos.theme-cobalt2": "https://open-vsx.org/api/wesbos/theme-cobalt2/2.1.6/file/wesbos.theme-cobalt2-2.1.6.vsix",
"robbowen.synthwave-vscode": "https://open-vsx.org/api/RobbOwen/synthwave-vscode/0.1.8/file/RobbOwen.synthwave-vscode-0.1.8.vsix"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 507 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 514 KiB

View file

@ -1,130 +0,0 @@
<style>
/* These styles apply only to this page! */
.md-content__button {
display: none;
}
.md-sidebar--secondary{
display: none !important;
}
.md-typeset h1 {
line-height: 0;
margin: 0;
margin-left: -9999px;
}
.quickstart-wrapper {
min-width: 300px;
display: flex;
flex-wrap: wrap;
justify-content: center;
padding-left: -50px;
column-gap: 50px;
row-gap: 50px;
}
.quickstart-wrapper > div {
flex: 300px;
max-width: 300px;
}
.tool-img{
box-shadow: rgba(0, 0, 0, 0.24) 0px 5px 5px;
border-radius: 5px;
min-width: 300px;
max-width: 300px;
max-height: 170px;
min-height: 170px;
}
.tool-caption{
font-family: inherit;
text-align: center;
margin-top: 10px;
font-size: 1.2rem;
font-weight: bold;
/* font-size: 1.25em;
font-weight: 400; */
letter-spacing: -.02em;
line-height: 1.5;
}
.tool-description{
font-family: inherit;
text-align: center;
margin-top: 10px;
font-size: 0.7rem;
font-style: oblique;
/* font-weight: bold; */
}
</style>
{%
set tools = [
{
"env": "IDE_URL",
"name": "IDE",
"image": "assets/home/IDE.jpg",
"description": "Browser-based version of Visual Studio Code. Develop in any language, install hundreeds of extensions"
},
{
"env": "TERMINAL_URL",
"name": "Terminal",
"image": "assets/home/Terminal.png",
"description": "Full-fledged WEB-based Command Line Interface"
},
{
"env": "FILEBROWSER_URL",
"name": "File Browser",
"image": "assets/home/Filebrowser.png",
"description": "Browse, upload and download files and folders to and from the Workspace"
},
{
"env": "UNGIT_URL",
"name": "Ungit",
"image": "assets/home/Ungit.jpg",
"description": "Manage Git repositories and work flow using beautiful UI"
},
{
"env": "STATICFS_URL",
"name": "Static File Server",
"image": "assets/home/Static-server.png",
"description": "Serve any static websites like a breeze"
},
{
"env": "CRONICLE_URL",
"name": "Cronicle",
"image": "assets/home/Cronicle.jpg",
"description": "Schedule jobs, manage schedules, observe and monitor executions (user/pass - admin/admin)"
},
{
"env": "MC_URL",
"name": "M.Commander",
"image": "assets/home/MC.jpg",
"description": "Feature rich visual file manager with internal text viewer and editor"
},
{
"env": "HTOP_URL",
"name": "Resource monitor",
"image": "assets/home/Htop.jpg",
"description": "Monitor running process and resource utilization"
}
]
%}
<div class="quickstart-wrapper">
{% for tool in tools %}
{% set tool_url = get_tool_url(tool.env) %}
<div>
<a href="{{ tool_url }}" target="_blank" rel="noopener noreferrer">
<img src="{{ tool.image }}" class="tool-img"/>
</a>
<a href="{{ tool_url }}">
<div class="tool-caption">{{ tool.name }}</div>
</a>
<div class="tool-description">{{ tool.description }}</div>
</div>
{% endfor %}
</div>

View file

@ -1,2 +0,0 @@
General-purpose, fully isolated contaierized development environment.
Includes code editor, terminal, filebrowser, git manager, static file server and job scheduler.

View file

@ -1,60 +0,0 @@
"""
Basic example of a Mkdocs-macros module.
Include this {{ macros_info() }} in any page to get complete macro info
"""
import os
port_increments = {
"DOCS_URL": 0,
"FILEBROWSER_URL": 1,
"STATICFS_URL": 2,
"CRONICLE_URL": 3,
"UNGIT_URL": 4,
"IDE_URL": 5,
"TERMINAL_URL": 6,
"MC_URL": 7,
"HTOP_URL": 8,
"PORT_8038": 18,
"PORT_8039": 19,
"PORT_8040": 20
}
# this function name should not be changed
def define_env(env):
"""
This is the hook for defining variables, macros and filters
- variables: the dictionary that contains the environment variables
- macro: a decorator function, to declare a macro.
- filter: a function with one of more arguments,
used to perform a transformation
"""
@env.macro
def get_tool_url(env):
try:
return os.environ[env]
except:
# Get host
host = "localhost"
try:
host = os.environ["WRK_HOST"]
except:
pass
proto = "http"
try:
proto = os.environ["WRK_PROTO"]
except:
pass
# Entry port - port relative to which other ports will be calculated
entry_port = 8020
try:
entry_port = int(os.environ["ENTRY_PORT"])
except:
pass
# Assign port
try:
port = port_increments[env] + entry_port
except:
port = 80
return f"{proto}://{host}:{port}"

View file

@ -1,59 +0,0 @@
# ===========================================================
# NAVIGATION
# ===========================================================
nav:
- Home: README.md
- My apps: pages/my-apps.md
- About: about.md
- Docs: https://docs.alnoda.org/ide-workspace/
# ===========================================================
# CONFIGURATION
# ===========================================================
site_name: IDE Workspace
repo_url: https://github.com/bluxmit/alnoda-workspaces
site_url: https://docs.alnoda.org
edit_uri: ""
# ===========================================================
# APPEARANCE
# ===========================================================
theme:
name: 'material'
favicon: 'assets/laptop-circle.svg'
logo: 'assets/laptop-circle-white.svg'
custom_dir: overrides
icon:
repo: fontawesome/brands/github
features:
- navigation.instant
palette:
- scheme: workspace
toggle:
icon: material/brightness-7
name: Switch to dark mode
- scheme: workspace-dark
toggle:
icon: material/brightness-4
name: Switch to light mode
extra:
# Link to open when your logo is clicked
homepage: https://docs.alnoda.org
host_url: http://docs.alnoda.org
plugins:
# Enable Macros and jinja2 templates
- macros:
module_name: macros/helpers
extra_css:
- stylesheets/extra.css
extra_javascript:
- javascripts/config.js
- https://polyfill.io/v3/polyfill.min.js?features=es6

View file

@ -1,5 +0,0 @@
{
"terminal.integrated.shell.linux": "/bin/zsh",
"workbench.colorTheme": "Ayu Mirage Bordered",
"git-graph.maxDepthOfRepoSearch": 3
}

View file

@ -1,14 +0,0 @@
[program:theia]
directory=/opt/theia
command=/bin/sh -c " . env/bin/activate && node /opt/theia/src-gen/backend/main.js --hostname=0.0.0.0 --port=8025 /home "
stderr_logfile = /var/log/theia/theia-stderr.log
stdout_logfile = /var/log/theia/theia-stdout.log
logfile_maxbytes = 1024

View file

@ -1,4 +1,4 @@
FROM alnoda/theia-workspace:4.0
FROM alnoda/codeserver-workspace:4.0
RUN sudo apt-get -y update \
&& echo "------------------------------------------------------ java 17" \
@ -22,6 +22,15 @@ ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/ \
ENV GRADLE_HOME=/home/abc/gradle/gradle-7.4.2 \
PATH="/home/abc/gradle/gradle-7.4.2/bin:${PATH}"
# Install additional codeserver extensions
RUN echo "------------------------------------------------------ extensions" \
&& code-server --install-extension redhat.java \
&& code-server --install-extension vscjava.vscode-maven \
&& code-server --install-extension zerodind.familiar-java-themes
# Change default codeserver theme
COPY --chown=abc:abc settings.json /home/abc/.local/share/code-server/User/settings.json
# Copy example into the workspace
COPY --chown=abc:abc example /home/abc/example

View file

@ -1,4 +1,4 @@
FROM alnoda/theia-workspace:4.0
FROM alnoda/codeserver-workspace:4.0
RUN sudo apt-get -y update \
&& echo "------------------------------------------------------ java 8" \
@ -22,6 +22,15 @@ ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ \
ENV GRADLE_HOME=/home/abc/gradle/gradle-7.4.2 \
PATH="/home/abc/gradle/gradle-7.4.2/bin:${PATH}"
# Install additional codeserver extensions
RUN echo "------------------------------------------------------ extensions" \
&& code-server --install-extension redhat.java \
&& code-server --install-extension vscjava.vscode-maven \
&& code-server --install-extension zerodind.familiar-java-themes
# Change default codeserver theme
COPY --chown=abc:abc settings.json /home/abc/.local/share/code-server/User/settings.json
# Copy example into the workspace
COPY --chown=abc:abc example /home/abc/example

View file

@ -0,0 +1,4 @@
{
"workbench.colorTheme": "Eclipse Light",
"git-graph.maxDepthOfRepoSearch": 3
}

View file

@ -8,6 +8,8 @@ description: |
# Java workspace
Containerized isolated development environment for Java programming language.
tags: java, jre, jdk, maven, gradle
# UI icons
logo: java-circle-white.svg
favicon: java-circle.svg
@ -20,13 +22,11 @@ styles:
primary: "#2585C2"
accent: "#2585C2"
title: "#E61F24"
subtitle: "#9B1C16"
dark:
primary: "#507E9C"
accent: "#F09114"
background: "#111B27"
title: "#BAAD69"
subtitle: "#BAAD69"
text: "#BAAD69"
common_colors:
nav: "#eab676"

View file

@ -1,123 +0,0 @@
{
"private": true,
"theia": {
"frontend": {
"config": {
"applicationName": "Theia IDE",
"warnOnPotentiallyInsecureHostPattern": false,
"preferences": {
"files.enableTrash": false
}
}
}
},
"resolutions": {
"**/*/colors": "1.4.0"
},
"dependencies": {
"@theia/editor-preview": "1.15.0",
"@theia/file-search": "1.15.0",
"@theia/getting-started": "1.15.0",
"@theia/git": "1.15.0",
"@theia/markers": "1.15.0",
"@theia/messages": "1.15.0",
"@theia/monaco": "1.15.0",
"@theia/navigator": "1.15.0",
"@theia/outline-view": "1.15.0",
"@theia/plugin-ext-vscode": "1.15.0",
"@theia/preferences": "1.15.0",
"@theia/preview": "1.15.0",
"@theia/search-in-workspace": "1.15.0",
"@theia/terminal": "1.15.0",
"@theia/vsx-registry": "1.15.0"
},
"devDependencies": {
"@theia/cli": "1.15.0"
},
"scripts": {
"preinstall": "node-gyp install"
},
"theiaPluginsDir": "plugins",
"theiaPlugins": {
"vscode-builtin-bat": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/bat-1.39.1-prel.vsix",
"vscode-builtin-clojure": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/clojure-1.39.1-prel.vsix",
"vscode-builtin-coffeescript": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/coffeescript-1.39.1-prel.vsix",
"vscode-builtin-configuration-editing": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/configuration-editing-1.39.1-prel.vsix",
"vscode-builtin-cpp": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/cpp-1.39.1-prel.vsix",
"vscode-builtin-csharp": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/csharp-1.39.1-prel.vsix",
"vscode-builtin-css": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/css-1.39.1-prel.vsix",
"vscode-builtin-debug-auto-launch": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/debug-auto-launch-1.39.1-prel.vsix",
"vscode-builtin-docker": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/docker-1.39.1-prel.vsix",
"vscode-builtin-emmet": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/emmet-1.39.1-prel.vsix",
"vscode-builtin-fsharp": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/fsharp-1.39.1-prel.vsix",
"vscode-builtin-go": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/go-1.39.1-prel.vsix",
"vscode-builtin-groovy": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/groovy-1.39.1-prel.vsix",
"vscode-builtin-grunt": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/grunt-1.39.1-prel.vsix",
"vscode-builtin-gulp": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/gulp-1.39.1-prel.vsix",
"vscode-builtin-handlebars": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/handlebars-1.39.1-prel.vsix",
"vscode-builtin-hlsl": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/hlsl-1.39.1-prel.vsix",
"vscode-builtin-html": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/html-1.39.1-prel.vsix",
"vscode-builtin-html-language-features": "https://open-vsx.org/api/vscode/html-language-features/1.49.0/file/vscode.html-language-features-1.49.0.vsix",
"vscode-builtin-ini": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/ini-1.39.1-prel.vsix",
"vscode-builtin-jake": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/jake-1.39.1-prel.vsix",
"vscode-builtin-java": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/java-1.39.1-prel.vsix",
"vscode-builtin-javascript": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/javascript-1.39.1-prel.vsix",
"vscode-builtin-json": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/json-1.39.1-prel.vsix",
"vscode-builtin-json-language-features": "https://open-vsx.org/api/vscode/json-language-features/1.46.1/file/vscode.json-language-features-1.46.1.vsix",
"vscode-builtin-less": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/less-1.39.1-prel.vsix",
"vscode-builtin-log": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/log-1.39.1-prel.vsix",
"vscode-builtin-lua": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/lua-1.39.1-prel.vsix",
"vscode-builtin-make": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/make-1.39.1-prel.vsix",
"vscode-builtin-markdown": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/markdown-1.39.1-prel.vsix",
"vscode-builtin-merge-conflicts": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/merge-conflict-1.39.1-prel.vsix",
"vscode-builtin-npm": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/npm-1.39.1-prel.vsix",
"vscode-builtin-node-debug": "https://github.com/theia-ide/vscode-node-debug/releases/download/v1.35.3/node-debug-1.35.3.vsix",
"vscode-builtin-node-debug2": "https://github.com/theia-ide/vscode-node-debug2/releases/download/v1.33.0/node-debug2-1.33.0.vsix",
"vscode-builtin-objective-c": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/objective-c-1.39.1-prel.vsix",
"vscode-builtin-perl": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/perl-1.39.1-prel.vsix",
"vscode-builtin-powershell": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/powershell-1.39.1-prel.vsix",
"vscode-builtin-pug": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/pug-1.39.1-prel.vsix",
"vscode-builtin-python": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/python-1.39.1-prel.vsix",
"vscode-builtin-r": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/r-1.39.1-prel.vsix",
"vscode-builtin-razor": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/razor-1.39.1-prel.vsix",
"vscode-builtin-ruby": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/ruby-1.39.1-prel.vsix",
"vscode-builtin-rust": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/rust-1.39.1-prel.vsix",
"vscode-builtin-scss": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/scss-1.39.1-prel.vsix",
"vscode-builtin-shaderlab": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/shaderlab-1.39.1-prel.vsix",
"vscode-builtin-shellscript": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/shellscript-1.39.1-prel.vsix",
"vscode-builtin-sql": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/sql-1.39.1-prel.vsix",
"vscode-builtin-swift": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/swift-1.39.1-prel.vsix",
"vscode-builtin-theme-abyss": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-abyss-1.39.1-prel.vsix",
"vscode-builtin-theme-defaults": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-defaults-1.39.1-prel.vsix",
"vscode-builtin-theme-kimbie-dark": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-kimbie-dark-1.39.1-prel.vsix",
"vscode-builtin-theme-monokai": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-monokai-1.39.1-prel.vsix",
"vscode-builtin-theme-dimmed": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-monokai-dimmed-1.39.1-prel.vsix",
"vscode-builtin-theme-quietlight": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-quietlight-1.39.1-prel.vsix",
"vscode-builtin-theme-red": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-red-1.39.1-prel.vsix",
"vscode-builtin-theme-solarized-dark": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-solarized-dark-1.39.1-prel.vsix",
"vscode-builtin-theme-tomorrow-night-blue": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/theme-tomorrow-night-blue-1.39.1-prel.vsix",
"vscode-builtin-typescript": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/typescript-1.39.1-prel.vsix",
"vscode-builtin-typescript-language-features": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/typescript-language-features-1.39.1-prel.vsix",
"vscode-builtin-vb": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/vb-1.39.1-prel.vsix",
"vscode-builtin-icon-theme-seti": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/vscode-theme-seti-1.39.1-prel.vsix",
"vscode-builtin-xml": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/xml-1.39.1-prel.vsix",
"vscode-builtin-yaml": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/yaml-1.39.1-prel.vsix",
"vscode-editorconfig": "https://github.com/theia-ide/editorconfig-vscode/releases/download/v0.14.4/EditorConfig-0.14.4.vsix",
"vscode-python": "https://open-vsx.org/api/ms-python/python/2020.8.105369/file/ms-python.python-2020.8.105369.vsix",
"nadim-vscode.infinity-dark-theme": "https://open-vsx.org/api/nadim-vscode/infinity-dark-theme/1.0.1/file/nadim-vscode.infinity-dark-theme-1.0.1.vsix",
"emroussel.atomize-atom-one-dark-theme": "https://open-vsx.org/api/emroussel/atomize-atom-one-dark-theme/1.5.5/file/emroussel.atomize-atom-one-dark-theme-1.5.5.vsix",
"mhutchie.git-graph": "https://open-vsx.org/api/mhutchie/git-graph/1.30.0/file/mhutchie.git-graph-1.30.0.vsix",
"teabyii.ayu": "https://open-vsx.org/api/teabyii/ayu/0.20.1/file/teabyii.ayu-0.20.1.vsix",
"yurihs.sublime-vscode-theme": "https://open-vsx.org/api/yurihs/sublime-vscode-theme/1.4.1/file/yurihs.sublime-vscode-theme-1.4.1.vsix",
"wesbos.theme-cobalt2": "https://open-vsx.org/api/wesbos/theme-cobalt2/2.1.6/file/wesbos.theme-cobalt2-2.1.6.vsix",
"github.github-vscode-theme": "https://open-vsx.org/api/GitHub/github-vscode-theme/4.1.1/file/GitHub.github-vscode-theme-4.1.1.vsix",
"armandphilippot.coldark": "https://open-vsx.org/api/armandphilippot/coldark/1.2.9/file/armandphilippot.coldark-1.2.9.vsix",
"radiolevity.search-lights": "https://open-vsx.org/api/radiolevity/search-lights/1.10.1/file/radiolevity.search-lights-1.10.1.vsix",
"vladeeg.vscode-theme-vlight": "https://open-vsx.org/api/Vladeeg/vscode-theme-vlight/2.1.0/file/Vladeeg.vscode-theme-vlight-2.1.0.vsix",
"akamud.vscode-theme-onelight": "https://open-vsx.org/api/akamud/vscode-theme-onelight/2.2.3/file/akamud.vscode-theme-onelight-2.2.3.vsix",
"akamud.vscode-theme-onedark": "https://open-vsx.org/api/akamud/vscode-theme-onedark/2.2.3/file/akamud.vscode-theme-onedark-2.2.3.vsix",
"laurenttreguier.vscode-simple-icons": "https://open-vsx.org/api/LaurentTreguier/vscode-simple-icons/1.16.0/file/LaurentTreguier.vscode-simple-icons-1.16.0.vsix",
"technicolor-creamsicle.deepdark-material": "https://open-vsx.org/api/technicolor-creamsicle/deepdark-material/3.3.0/file/technicolor-creamsicle.deepdark-material-3.3.0.vsix",
"jeppeandersen.vscode-kafka": "https://open-vsx.org/api/jeppeandersen/vscode-kafka/0.14.0/file/jeppeandersen.vscode-kafka-0.14.0.vsix"
}
}

View file

@ -1,37 +1,4 @@
ARG BUILD_IMAGE=node:12.18.3
ARG MAIN_IMAGE=alnoda/extended-workspace:4.0
################################################################################ BUILD THEIA
FROM ${BUILD_IMAGE}
RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y apt-utils \
&& apt-get install -y git \
&& apt-get install -y libsecret-1-dev \
&& mkdir /opt/theia
WORKDIR /opt/theia
ADD theia_package.json ./package.json
ARG GITHUB_TOKEN
RUN yarn --pure-lockfile && \
NODE_OPTIONS="--max_old_space_size=4096" yarn theia build && \
yarn theia download:plugins && \
yarn --production && \
yarn autoclean --init && \
echo *.ts >> .yarnclean && \
echo *.ts.map >> .yarnclean && \
echo *.spec.* >> .yarnclean && \
yarn autoclean --force && \
yarn cache clean
################################################################################ WORKSPACE IMAGE
FROM ${MAIN_IMAGE}
# Replace Theia with the new build, which includes additional pre-installed extensions
# To do this, the existing Theia folder will be deleted, and new copied from the build stage
ENV THEIA_DIR="/home/abc/apps/theia"
RUN rm -rf $THEIA_DIR \
&& mkdir "$THEIA_DIR" \
&& cd $THEIA_DIR && nodeenv --node=12.18.3 env && . env/bin/activate
# Copy built Theia from the build image
COPY --from=0 --chown=abc:abc /opt/theia $THEIA_DIR
FROM alnoda/extended-workspace:4.0
RUN echo "------------------------------------------------------ openjdk" \
&& sudo apt-get -y update \
@ -70,10 +37,14 @@ RUN echo "------------------------------------------------------ openjdk" \
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
ENV PATH="/usr/lib/jvm/java-17-openjdk-amd64/bin:$PATH"
USER abc
# Install additional codeserver extensions
RUN echo "------------------------------------------------------ extensions" \
&& code-server --install-extension jeppeandersen.vscode-kafka
# Set another color theme for IDE
COPY settings.json /home/abc/.theia/settings.json
# Build Alnoda workspace
COPY --chown=abc:abc workspace /tmp/workspace
RUN pipx uninstall alnoda-wrk; pipx install alnoda-wrk; alnoda-wrk build /tmp/workspace && rm -rf /tmp/workspace

View file

@ -1,5 +1,4 @@
{
"terminal.integrated.shell.linux": "/bin/zsh",
"workbench.colorTheme": "Search Lights Italic",
"workbench.colorTheme": "Desert Lights",
"git-graph.maxDepthOfRepoSearch": 3
}

View file

@ -3,7 +3,7 @@
"theia": {
"frontend": {
"config": {
"applicationName": "Theia JavaScript/TypeScript Example",
"applicationName": "-IDE-",
"preferences": {
"files.enableTrash": false
}
@ -122,10 +122,9 @@
"laurenttreguier.vscode-simple-icons": "https://open-vsx.org/api/LaurentTreguier/vscode-simple-icons/1.16.0/file/LaurentTreguier.vscode-simple-icons-1.16.0.vsix",
"technicolor-creamsicle.deepdark-material": "https://open-vsx.org/api/technicolor-creamsicle/deepdark-material/3.3.0/file/technicolor-creamsicle.deepdark-material-3.3.0.vsix",
"rubjo.ultimate-dark-neo": "https://open-vsx.org/api/rubjo/ultimate-dark-neo/0.1.0/file/rubjo.ultimate-dark-neo-0.1.0.vsix",
"sainnhe.edge": "https://open-vsx.org/api/sainnhe/edge/0.1.8/file/sainnhe.edge-0.1.8.vsix",
"sainnhe.edge": "https://open-vsx.org/api/sainnhe/edge/0.1.8/file/sainnhe.edge-0.1.8.vsix",
"robbowen.synthwave-vscode": "https://open-vsx.org/api/RobbOwen/synthwave-vscode/0.1.14/file/RobbOwen.synthwave-vscode-0.1.14.vsix",
"4ops.terraform": "https://open-vsx.org/api/hashicorp/terraform/2.20.0/file/hashicorp.terraform-2.20.0.vsix",
"samuelcolvin.jinjahtml": "https://open-vsx.org/api/samuelcolvin/jinjahtml/0.18.0/file/samuelcolvin.jinjahtml-0.18.0.vsix"
"jeppeandersen.vscode-kafka": "https://open-vsx.org/api/jeppeandersen/vscode-kafka/0.15.0/file/jeppeandersen.vscode-kafka-0.15.0.vsix"
}
}

View file

@ -8,6 +8,8 @@ description: |
# Kafka workspace
Browser-based portable and containerized environment to interact, manage and administer Kafka clusters.
tags: kafka, kafka-cli
# UI icons
logo: kafka-circle-white.svg
favicon: kafka-circle.svg
@ -19,15 +21,15 @@ styles:
light:
primary: "#252525"
accent: "#19758F"
subtitle: "#003B5C"
background: "#F5F7F7"
dark:
primary: "#252525"
accent: "#19758F"
background: "#343741"
title: "#9CDCFE"
subtitle: "#9CDCFE"
text: "#9CDCFE"
code_text: "#000000"
code_background: "#F0F0F0"
start:
- name: Zookeeper

View file

@ -1,38 +1,15 @@
ARG docker_registry=docker.io/alnoda
ARG image_tag=3.0
FROM lnoda/ansible-terraform-workspace:4.0
## Images used:
ARG BUILD_IMAGE=node:12.18.3
ARG DEPLOY_IMAGE=${docker_registry}/ansible-terraform-workspace:${image_tag}
FROM ${DEPLOY_IMAGE}
USER root
COPY supervisord-kubespray.conf /etc/supervisord/
COPY ./mkdocs/mkdocs.yml /home/docs/mkdocs.yml
COPY ./mkdocs/img/* /home/docs/docs/assets/home/
COPY ./mkdocs/helpers.py /home/docs/macros
COPY ./mkdocs/README.md /home/docs/docs/README.md
COPY ./mkdocs/k8s-circle.svg /home/docs/docs/assets/
COPY ./mkdocs/k8s-circle-white.svg /home/docs/docs/assets/
COPY ./mkdocs/extra.css /home/docs/docs/stylesheets/
COPY ./mkdocs/about.md /home/docs/docs/about.md
RUN apt-get -y update \
&& echo "------------------------------------------------------ prep" \
&& pip uninstall -y ansible-doctor \
RUN sudo apt-get -y update \
&& echo "------------------------------------------------------ Kubectl" \
&& cd /tmp && curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" \
&& install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl \
&& install kubectl /home/abc/.local/bin/kubectl \
&& rm /tmp/kubectl \
&& echo "------------------------------------------------------ Helm" \
&& cd /tmp && wget https://get.helm.sh/helm-v3.9.0-linux-386.tar.gz \
&& tar -zxvf /tmp/helm-v3.9.0-linux-386.tar.gz \
&& chmod +x /tmp/linux-386/helm \
&& mv /tmp/linux-386/helm /usr/local/bin/helm \
&& mv /tmp/linux-386/helm /home/abc/.local/bin/helm \
&& rm /tmp/helm-v3.9.0-linux-386.tar.gz \
&& rm -r /tmp/linux-386 \
&& echo "------------------------------------------------------ K9s" \
@ -40,25 +17,17 @@ RUN apt-get -y update \
&& cd /tmp/k9s && wget https://github.com/derailed/k9s/releases/download/v0.25.18/k9s_Linux_x86_64.tar.gz \
&& tar -zxvf /tmp/k9s/k9s_Linux_x86_64.tar.gz \
&& chmod +x /tmp/k9s/k9s \
&& mv /tmp/k9s/k9s /usr/local/bin/k9s \
&& mv /tmp/k9s/k9s /home/abc/.local/bin/k9s \
&& rm -r /tmp/k9s \
&& echo "------------------------------------------------------ Octant" \
&& mkdir -p /tmp/octant \
&& cd /tmp/octant && wget https://github.com/vmware-tanzu/octant/releases/download/v0.25.1/octant_0.25.1_Linux-64bit.tar.gz \
&& tar -zxvf /tmp/octant/octant_0.25.1_Linux-64bit.tar.gz \
&& chmod +x /tmp/octant/octant_0.25.1_Linux-64bit/octant \
&& mv /tmp/octant/octant_0.25.1_Linux-64bit/octant /usr/local/bin/ \
&& rm -rf /tmp/octant \
&& echo "------------------------------------------------------ user" \
&& mkdir /var/log/octant && chown -R abc /var/log/octant \
&& find /home -type d | xargs -I{} chown -R abc {} \
&& find /home -type f | xargs -I{} chown abc {}
&& mv /tmp/octant/octant_0.25.1_Linux-64bit/octant /home/abc/.local/bin/ \
&& rm -rf /tmp/octant
USER abc
RUN echo "------------------------------------------------------ prep" \
&& python3 -m pip install --user pipx \
&& echo "------------------------------------------------------ kubespray" \
RUN echo "------------------------------------------------------ kubespray" \
&& git clone -b v2.19.0 --single-branch https://github.com/kubernetes-sigs/kubespray.git /home/project/kubespray \
&& pip install -r /home/project/kubespray/requirements-2.12.txt \
&& echo "------------------------------------------------------ Kube-shell" \
@ -76,6 +45,15 @@ RUN echo "------------------------------------------------------ prep" \
&& mkdir -p /home/abc/.ssh
ENV OCTANT_DISABLE_OPEN_BROWSER=1 \
OCTANT_LISTENER_ADDR=0.0.0.0:8031
OCTANT_LISTENER_ADDR=0.0.0.0:8035
ENV PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
ENV PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
# Install additional codeserver extensions
RUN echo "------------------------------------------------------ extensions" \
&& code-server --install-extension ms-kubernetes-tools.vscode-kubernetes-tools \
&& code-server --install-extension ipedrazas.kubernetes-snippets
# Build Alnoda workspace
COPY --chown=abc:abc workspace /tmp/workspace
RUN pipx uninstall alnoda-wrk; pipx install alnoda-wrk; alnoda-wrk build /tmp/workspace && rm -rf /tmp/workspace

View file

@ -1,46 +0,0 @@
# Features that can be added
- Pre-install Kubectl plugins:
- [access-matrix](https://github.com/corneliusweig/rakkess) - show an RBAC access matrix for server resources.
- [graph](https://github.com/steveteuber/kubectl-graph) - visualize Kubernetes resources and relationships.
- [iexec](https://github.com/gabeduke/kubectl-iexec) - interactive selection tool for `kubectl exec`.
- [janitor](https://github.com/dastergon/kubectl-janitor) - find objects in a problematic state in your Kubernetes cluster.
- [ktop](https://github.com/vladimirvivien/ktop) - display workload metrics.
- [kurt](https://github.com/soraro/kurt) - find what's restarting and why.
- [kpexec](https://github.com/ssup2/kpexec) - run commands in a container with high privileges.
- [mtail](https://gitlab.com/grzesuav/kubectl-mtail) - tail logs from multiple pods matching label selector.
- [modify-secret](https://github.com/rajatjindal/kubectl-modify-secret) - modify secret with implicit base64 translations.
- [node-restart](https://github.com/mnrgreg/kubectl-node-restart) - restart cluster nodes sequentially and gracefully.
- [operator](https://github.com/operator-framework/kubectl-operator) - manage operators with Operator Lifecycle Manager.
- [pod-lens](https://pod-lens.guoxudong.io/) - view pod-related resources with an interactive cli tool.
- [pv-migrate](https://github.com/utkuozdemir/pv-migrate) - migrate data across persistent volumes.
- [resource-capacity](https://github.com/robscott/kube-capacity) - overview resource requests, limits, and utilization.
- [sshd](https://github.com/ottoyiu/kubectl-sshd) - run a temporary SSH server on any Running Pod in your Kubernetes cluster.
- [sql](https://github.com/yaacov/kubectl-sql) - query the cluster via pseudo-SQL.
- [stern](https://github.com/stern/stern) - logs from multiple pods on Kubernetes and multiple containers within the pod. Each result is color coded for quicker debugging.
- [tree](https://github.com/ahmetb/kubectl-tree) - show a tree of object hierarchies through ownerReferences.
- [view-secret](https://github.com/elsesiy/kubectl-view-secret) - easy secret decoding. Useful if you want to see what's inside of a secret.
```
kubectl krew install access-matrix \
&& kubectl krew install df-pv \
&& kubectl krew install graph \
&& kubectl krew install iexec \
&& kubectl krew install janitor \
&& kubectl krew install ktop \
&& kubectl krew install mtail \
&& kubectl krew install modify-secret \
&& kubectl krew install nsenter \
&& kubectl krew install node-restart \
&& kubectl krew install operator \
&& kubectl krew install pexec \
&& kubectl krew install pod-lens \
&& kubectl krew install popeye \
&& kubectl krew install pv-migrate \
&& kubectl krew install resource-capacity \
&& kubectl krew install sshd \
&& kubectl krew install sql \
&& kubectl krew install stern \
&& kubectl krew install tree \
&& kubectl krew install view-secret
```

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 MiB

View file

@ -1,154 +0,0 @@
<style>
/* These styles apply only to this page! */
.md-content__button {
display: none;
}
.md-sidebar--secondary{
display: none !important;
}
.md-typeset h1 {
line-height: 0;
margin: 0;
margin-left: -9999px;
}
.quickstart-wrapper {
min-width: 300px;
display: flex;
flex-wrap: wrap;
justify-content: center;
padding-left: -50px;
column-gap: 50px;
row-gap: 50px;
}
.quickstart-wrapper > div {
flex: 300px;
max-width: 300px;
}
.tool-img{
box-shadow: rgba(0, 0, 0, 0.24) 0px 5px 5px;
border-radius: 5px;
min-width: 300px;
max-width: 300px;
max-height: 170px;
min-height: 170px;
}
.tool-caption{
font-family: Roboto, Helvetica, sans-serif;
text-align: center;
margin-top: 10px;
font-size: 1.2rem;
font-weight: bold;
/* font-size: 1.25em;
font-weight: 400; */
letter-spacing: -.02em;
line-height: 1.5;
}
.tool-description{
font-family: Helvetica, sans-serif;
text-align: center;
margin-top: 10px;
font-size: 0.7rem;
font-style: oblique;
/* font-weight: bold; */
}
</style>
{%
set tools = [
{
"env": "IDE_URL",
"name": "IDE",
"image": "assets/home/IDE.jpg",
"description": "Browser-based version of Visual Studio Code. Develop in any language, install hundreeds of extensions"
},
{
"env": "TERMINAL_URL",
"name": "Terminal",
"image": "assets/home/Terminal.png",
"description": "Full-fledged browser-based terminal with Z-shell"
},
{
"env": "FILEBROWSER_URL",
"name": "File Browser",
"image": "assets/home/Filebrowser.png",
"description": "Browse, upload and download files and folders to and from the Workspace"
},
{
"env": "OCTANT",
"name": "Octant",
"image": "assets/home/octant.png",
"description": "Understand better the complexity of Kubernetes clusters."
},
{
"env": "ANSIBLE_ARA",
"name": "Ansible Ara",
"image": "assets/home/Ara.png",
"description": "Monitor for all Ansible plays"
},
{
"env": "TERRAFORM_ROVER",
"name": "Terraform Rover",
"image": "assets/home/Terraform-Rover.png",
"description": "Not started! Start manually with your Terraform project dir, i.e. <b>cd /home/examples/terraform-scaleway/; terraform init; rover --workingDir /home/examples/terraform-scaleway/</b>"
},
{
"env": "BLAST_RADIUS",
"name": "Blast Radius",
"image": "assets/home/Blast-radius.png",
"description": "Not started! Start manually with your Terraform project dir, i.e. <b>cd /home/examples/terraform-scaleway; terraform init; blast-radius --serve --port 8030</b>"
},
{
"env": "CRONICLE_URL",
"name": "Cronicle",
"image": "assets/home/Cronicle.jpg",
"description": "Schedule jobs, manage schedules, observe and monitor executions (user/pass - admin/admin)"
},
{
"env": "UNGIT_URL",
"name": "Ungit",
"image": "assets/home/Ungit.jpg",
"description": "Manage Git repositories and work flow using beautiful UI"
},
{
"env": "STATICFS_URL",
"name": "Static File Server",
"image": "assets/home/Static-server.png",
"description": "Serve any static websites like a breeze"
},
{
"env": "MC_URL",
"name": "M.Commander",
"image": "assets/home/MC.jpg",
"description": "Feature rich visual file manager with internal text viewer and editor"
},
{
"env": "HTOP_URL",
"name": "Process monitor",
"image": "assets/home/Htop.jpg",
"description": "Monitor running process and resource utilization"
}
]
%}
<div class="quickstart-wrapper">
{% for tool in tools %}
{% set tool_url = get_tool_url(tool.env) %}
<div>
<a href="{{ tool_url }}" target="_blank" rel="noopener noreferrer">
<img src="{{ tool.image }}" class="tool-img"/>
</a>
<a href="{{ tool_url }}">
<div class="tool-caption">{{ tool.name }}</div>
</a>
<div class="tool-description">{{ tool.description }}</div>
</div>
{% endfor %}
</div>

View file

@ -1,4 +0,0 @@
Containerized development, execution and admin environment for Kubernetes, Ansible and Terraform.
Create, provision, visualize and manage infrastructures.
Deploy and develop Kubernetes clusters.
Administer and schedule maintenance tasks.

View file

@ -1,20 +0,0 @@
[data-md-color-scheme="k8s"] {
--md-primary-fg-color: #316CE6;
--md-primary-fg-color--light: #7747A7;
--md-primary-fg-color--dark: #7747A7;
--md-accent-fg-color: #1040a1;
--md-default-bg-color: #FFFFFF;
--md-typeset-a-color: #303030;
}
[data-md-color-scheme="k8s-dark"] {
--md-primary-fg-color: #316CE6;
--md-accent-fg-color: #DF736A;
--md-default-bg-color: #232834;
--md-default-fg-color--light: #E3EAF2;
--md-typeset-color: #E3EAF2;
--md-typeset-a-color: #E3EAF2;
}

View file

@ -1,63 +0,0 @@
"""
Basic example of a Mkdocs-macros module.
Include this {{ macros_info() }} in any page to get complete macro info
"""
import os
port_increments = {
"DOCS_URL": 0,
"FILEBROWSER_URL": 1,
"STATICFS_URL": 2,
"CRONICLE_URL": 3,
"UNGIT_URL": 4,
"IDE_URL": 5,
"TERMINAL_URL": 6,
"MC_URL": 7,
"HTOP_URL": 8,
"ANSIBLE_ARA": 9,
"BLAST_RADIUS": 10,
"OCTANT": 11,
"PORT_8038": 18,
"PORT_8039": 19,
"PORT_8040": 20
}
# this function name should not be changed
def define_env(env):
"""
This is the hook for defining variables, macros and filters
- variables: the dictionary that contains the environment variables
- macro: a decorator function, to declare a macro.
- filter: a function with one of more arguments,
used to perform a transformation
"""
@env.macro
def get_tool_url(env):
try:
return os.environ[env]
except:
# Get host
host = "localhost"
try:
host = os.environ["WRK_HOST"]
except:
pass
proto = "http"
try:
proto = os.environ["WRK_PROTO"]
except:
pass
# Entry port - port relative to which other ports will be calculated
entry_port = 8020
try:
entry_port = int(os.environ["ENTRY_PORT"])
except:
pass
# Assign port
try:
port = port_increments[env] + entry_port
except:
port = 80
return f"{proto}://{host}:{port}"

View file

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 900 900" xmlns="http://www.w3.org/2000/svg">
<g id="g10" transform="matrix(3, 0, 0, -3, 0, 900)" style="">
<g id="g12" transform="scale(0.1)">
<path d="M 1500 3000 C 671.57 3000 0 2328.43 0 1500 C 0 671.57 671.57 0 1500 0 C 2328.43 0 3000 671.57 3000 1500 C 3000 2328.43 2328.43 3000 1500 3000 Z M 2454.59 545.41 C 2199.61 290.422 1860.6 150 1500 150 C 1139.4 150 800.387 290.422 545.406 545.41 C 290.426 800.391 150 1139.4 150 1500 C 150 1860.6 290.426 2199.61 545.406 2454.59 C 800.387 2709.57 1139.4 2850 1500 2850 C 1860.6 2850 2199.61 2709.57 2454.59 2454.59 C 2709.57 2199.61 2850 1860.6 2850 1500 C 2850 1139.4 2709.57 800.391 2454.59 545.41" style="fill-opacity: 1; fill-rule: nonzero; stroke: none;" id="path14"/>
<title>Go icon</title>
<title>Elixir icon</title>
<title>R icon</title>
</g>
</g>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<g transform="matrix(2.18986, 0, 0, 2.141408, 100, 100)" style=""/>
<path d="M 781.253 499.904 L 698.671 481.057 C 706.165 423.072 692.64 364.318 660.548 315.444 L 724.048 264.81 L 692.873 225.711 L 629.391 276.319 C 588.492 234.253 534.063 207.963 475.686 202.077 L 475.686 125.808 L 425.686 125.808 L 425.686 202.077 C 367.309 207.965 312.88 234.258 271.981 276.328 L 208.498 225.711 L 177.322 264.808 L 240.821 315.442 C 208.73 364.317 195.206 423.072 202.7 481.057 L 120.12 499.917 L 131.253 548.647 L 213.687 529.823 C 232.448 585.608 270.224 633.022 320.406 663.772 L 287.157 732.85 L 332.201 754.543 L 365.436 685.512 C 420.447 705.905 480.946 705.905 535.957 685.512 L 569.186 754.543 L 614.231 732.836 L 580.98 663.772 C 631.164 633.022 668.939 585.608 687.701 529.823 L 770.134 548.635 L 781.253 499.904 Z M 650.686 450.807 C 650.686 457.24 650.316 463.587 649.721 469.875 L 524.72 441.335 C 524.088 436.279 522.935 431.3 521.281 426.48 L 621.186 346.807 C 640.452 378.078 650.665 414.079 650.686 450.807 Z M 425.686 450.807 C 425.686 431.563 446.52 419.534 463.186 429.157 C 479.853 438.779 479.853 462.835 463.186 472.457 C 459.386 474.652 455.074 475.807 450.687 475.807 C 436.884 475.796 425.698 464.609 425.686 450.807 Z M 590.082 307.668 L 490.186 387.329 C 485.615 384.511 480.754 382.192 475.686 380.41 L 475.686 252.54 C 518.806 257.959 558.976 277.316 590.082 307.668 Z M 425.686 252.54 L 425.686 380.41 C 420.619 382.192 415.758 384.511 411.186 387.329 L 311.298 307.668 C 342.401 277.317 382.567 257.96 425.686 252.54 Z M 250.686 450.807 C 250.708 414.079 260.92 378.078 280.186 346.807 L 380.091 426.473 C 378.437 431.293 377.284 436.271 376.65 441.328 L 251.651 469.867 C 251.056 463.587 250.686 457.24 250.686 450.807 Z M 262.774 518.617 L 387.154 490.212 C 390.093 495.06 393.57 499.56 397.519 503.628 L 342.171 618.557 C 305.539 594.767 277.664 559.68 262.774 518.617 Z M 450.687 650.808 C 429.09 650.772 407.642 647.226 387.186 640.307 L 442.701 525 C 445.346 525.411 448.012 525.681 450.687 525.808 C 453.357 525.681 456.018 525.413 458.661 525.003 L 514.186 640.307 C 493.73 647.233 472.282 650.779 450.687 650.808 Z M 559.202 618.557 L 503.854 503.617 C 507.802 499.55 511.279 495.049 514.219 490.202 L 638.598 518.608 C 623.71 559.675 595.834 594.764 559.202 618.557 Z" style=""/>
<rect id="_Transparent_Rectangle_" data-name="&lt;Transparent Rectangle&gt;" class="cls-1" width="800" height="800" style="fill: none;" y="60.148" x="43.806"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.3 KiB

View file

@ -1,61 +0,0 @@
# ===========================================================
# NAVIGATION
# ===========================================================
nav:
- Home: README.md
- My apps: pages/my-apps.md
- About: about.md
- Docs: https://docs.alnoda.org/kubespray-workspace/
# ===========================================================
# CONFIGURATION
# ===========================================================
site_name: Kubespray Workspace
repo_url: https://github.com/bluxmit/alnoda-workspaces
site_url: https://docs.alnoda.org
edit_uri: ""
# ===========================================================
# APPEARANCE
# ===========================================================
theme:
name: 'material'
favicon: 'assets/k8s-circle.svg'
logo: 'assets/k8s-circle-white.svg'
custom_dir: overrides
font:
text: Roboto
icon:
repo: fontawesome/brands/github
features:
- navigation.instant
palette:
- scheme: k8s
toggle:
icon: material/brightness-7
name: Switch to dark mode
- scheme: k8s-dark
toggle:
icon: material/brightness-4
name: Switch to light mode
extra:
# Link to open when your logo is clicked
homepage: https://docs.alnoda.org
host_url: http://docs.alnoda.org
plugins:
# Enable Macros and jinja2 templates
- macros:
module_name: macros/helpers
extra_css:
- stylesheets/extra.css
extra_javascript:
- javascripts/config.js
- https://polyfill.io/v3/polyfill.min.js?features=es6

View file

@ -1,6 +0,0 @@
[program:octant]
directory=/home
command=/bin/sh -c " octant "
stderr_logfile = /var/log/octant/stderr.log
stdout_logfile = /var/log/octant/arastdout.log
logfile_maxbytes = 1024

View file

@ -3,36 +3,36 @@
"theia": {
"frontend": {
"config": {
"applicationName": "Theia IDE",
"warnOnPotentiallyInsecureHostPattern": false,
"applicationName": "-IDE-",
"preferences": {
"files.enableTrash": false
}
}
}
},
"resolutions": {
"**/*/colors": "1.4.0"
},
"dependencies": {
"@theia/editor-preview": "1.15.0",
"@theia/file-search": "1.15.0",
"@theia/getting-started": "1.15.0",
"@theia/git": "1.15.0",
"@theia/markers": "1.15.0",
"@theia/messages": "1.15.0",
"@theia/monaco": "1.15.0",
"@theia/navigator": "1.15.0",
"@theia/outline-view": "1.15.0",
"@theia/plugin-ext-vscode": "1.15.0",
"@theia/preferences": "1.15.0",
"@theia/preview": "1.15.0",
"@theia/search-in-workspace": "1.15.0",
"@theia/terminal": "1.15.0",
"@theia/vsx-registry": "1.15.0"
"@theia/callhierarchy": "1.29.0",
"@theia/debug": "1.29.0",
"@theia/editor-preview": "1.29.0",
"@theia/file-search": "1.29.0",
"@theia/getting-started": "1.29.0",
"@theia/git": "1.29.0",
"@theia/markers": "1.29.0",
"@theia/messages": "1.29.0",
"@theia/mini-browser": "1.29.0",
"@theia/navigator": "1.29.0",
"@theia/outline-view": "1.29.0",
"@theia/plugin": "1.29.0",
"@theia/plugin-ext": "1.29.0",
"@theia/plugin-ext-vscode": "1.29.0",
"@theia/preferences": "1.29.0",
"@theia/preview": "1.29.0",
"@theia/search-in-workspace": "1.29.0",
"@theia/terminal": "1.29.0",
"@theia/vsx-registry": "1.29.0"
},
"devDependencies": {
"@theia/cli": "1.15.0"
"@theia/cli": "1.29.0"
},
"scripts": {
"preinstall": "node-gyp install"
@ -103,6 +103,8 @@
"vscode-builtin-xml": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/xml-1.39.1-prel.vsix",
"vscode-builtin-yaml": "https://github.com/theia-ide/vscode-builtin-extensions/releases/download/v1.39.1-prel/yaml-1.39.1-prel.vsix",
"vscode-editorconfig": "https://github.com/theia-ide/editorconfig-vscode/releases/download/v0.14.4/EditorConfig-0.14.4.vsix",
"vscode-eslint": "https://github.com/theia-ide/vscode-eslint/releases/download/release%2F2.0.15/vscode-eslint-2.0.15.vsix",
"vscode-python": "https://open-vsx.org/api/ms-python/python/2020.8.105369/file/ms-python.python-2020.8.105369.vsix",
"nadim-vscode.infinity-dark-theme": "https://open-vsx.org/api/nadim-vscode/infinity-dark-theme/1.0.1/file/nadim-vscode.infinity-dark-theme-1.0.1.vsix",
"emroussel.atomize-atom-one-dark-theme": "https://open-vsx.org/api/emroussel/atomize-atom-one-dark-theme/1.5.5/file/emroussel.atomize-atom-one-dark-theme-1.5.5.vsix",
@ -118,6 +120,16 @@
"akamud.vscode-theme-onedark": "https://open-vsx.org/api/akamud/vscode-theme-onedark/2.2.3/file/akamud.vscode-theme-onedark-2.2.3.vsix",
"emroussel.atom-icons": "https://open-vsx.org/api/emroussel/atom-icons/1.2.0/file/emroussel.atom-icons-1.2.0.vsix",
"laurenttreguier.vscode-simple-icons": "https://open-vsx.org/api/LaurentTreguier/vscode-simple-icons/1.16.0/file/LaurentTreguier.vscode-simple-icons-1.16.0.vsix",
"technicolor-creamsicle.deepdark-material": "https://open-vsx.org/api/technicolor-creamsicle/deepdark-material/3.3.0/file/technicolor-creamsicle.deepdark-material-3.3.0.vsix"
"technicolor-creamsicle.deepdark-material": "https://open-vsx.org/api/technicolor-creamsicle/deepdark-material/3.3.0/file/technicolor-creamsicle.deepdark-material-3.3.0.vsix",
"rubjo.ultimate-dark-neo": "https://open-vsx.org/api/rubjo/ultimate-dark-neo/0.1.0/file/rubjo.ultimate-dark-neo-0.1.0.vsix",
"sainnhe.edge": "https://open-vsx.org/api/sainnhe/edge/0.1.8/file/sainnhe.edge-0.1.8.vsix",
"robbowen.synthwave-vscode": "https://open-vsx.org/api/RobbOwen/synthwave-vscode/0.1.14/file/RobbOwen.synthwave-vscode-0.1.14.vsix",
"4ops.terraform": "https://open-vsx.org/api/hashicorp/terraform/2.20.0/file/hashicorp.terraform-2.20.0.vsix",
"samuelcolvin.jinjahtml": "https://open-vsx.org/api/samuelcolvin/jinjahtml/0.18.0/file/samuelcolvin.jinjahtml-0.18.0.vsix",
"ms-kubernetes-tools.vscode-kubernetes-tools": "https://open-vsx.org/api/ms-kubernetes-tools/vscode-kubernetes-tools/1.3.10/file/ms-kubernetes-tools.vscode-kubernetes-tools-1.3.10.vsix",
"ipedrazas.kubernetes-snippets": "https://open-vsx.org/api/ipedrazas/kubernetes-snippets/0.1.9/file/ipedrazas.kubernetes-snippets-0.1.9.vsix",
"tumido.crd-snippets": "https://open-vsx.org/api/tumido/crd-snippets/1.1.0/file/tumido.crd-snippets-1.1.0.vsix"
}
}
}

View file

@ -1,5 +1,6 @@
{
"terminal.integrated.shell.linux": "/bin/zsh",
"workbench.colorTheme": "SynthWave '84",
"git-graph.maxDepthOfRepoSearch": 3
"git-graph.maxDepthOfRepoSearch": 3,
"workbench.iconTheme": "vs-seti"
}

View file

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View file

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View file

Before

Width:  |  Height:  |  Size: 383 KiB

After

Width:  |  Height:  |  Size: 383 KiB

View file

@ -0,0 +1,54 @@
---
# mandatory
name: Kubespray Workspace
doc_url: https://docs.alnoda.org/workspaces/kubespray-workspace/
author: bluxmit
version: 4.0
description: |
# Kubespray workspace
Browser-based portable and containerized environment for Kubernetes, Ansible and Terraform.
Create, provision, visualize and manage infrastructures.
Deploy and develop Kubernetes clusters.
Administer and schedule maintenance tasks.
tags: kubespray, kubectl, k9s, helm, octant, krew
# UI icons
logo: k8s-circle-white.svg
favicon: k8s-circle.svg
# (Homepage UI appearance)
styles:
font: Ubuntu
colors:
light:
primary: "#0B0438"
accent: "#B8610B"
subtitle: "#7747A7"
background: "#F0F0F0"
title: "#303030"
code_text: "#FFFFFF"
code_background: "#0B0438"
dark:
primary: "#4B0BB8"
accent: "#B8610B"
background: "#00031C"
title: "#E3EAF2"
subtitle: "#E3EAF2"
text: "#E3EAF2"
code_text: "#000000"
code_background: "#F0F0F0"
pages:
home:
- name: Octannt
port: 8035
path: /
title: Octant
description: "Understand better the complexity of Kubernetes clusters"
image: octant.png
start:
- name: Octant
cmd: octant

View file

@ -1,46 +1,23 @@
ARG docker_registry=docker.io/alnoda
ARG image_tag=3.0
FROM alnoda/extended-workspace:4.0
FROM ${docker_registry}/ide-workspace:${image_tag}
# More dependencies for mkdocs and markdown
COPY mkdocs-requirements.txt /home/abc/python-requirements
USER root
RUN sudo apt-get -y update \
&& echo "-------------------------------------------- weasyprint" \
&& sudo apt-get install -y build-essential python3-dev python3-pip python3-setuptools python3-wheel python3-cffi libcairo2 libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 libffi-dev shared-mime-info \
&& echo "-------------------------------------------- mkdocs plugins" \
&& pip install -r /home/abc/python-requirements/mkdocs-requirements.txt
# Copy example project
COPY ./examples/ /home/examples/
# Change Theia color theme for this magic workspace to stand out
COPY settings.json /home/abc/.theia/settings.json
# More dependencies for mkdocs and markdown
COPY mkdocs-requirements.txt /home/abc/installed-python-packages
COPY ./examples/ /home/examples/
bierner.markdown-mermaid
hall.draw
# Customize mkdocs
COPY ./mkdocs/mkdocs.yml /home/docs/mkdocs.yml
COPY ./mkdocs/README.md /home/docs/docs/
COPY ./mkdocs/about.md /home/docs/docs/
COPY ./mkdocs/IDE.jpg /home/docs/docs/assets/home/
COPY ./mkdocs/Magicspace-web.png /home/docs/docs/assets/home/
COPY ./mkdocs/helpers.py /home/docs/macros
COPY ./mkdocs/alnoda-dark.svg /home/docs/docs/assets/
COPY ./mkdocs/alnoda-white.svg /home/docs/docs/assets/
COPY ./mkdocs/about.md /home/docs/docs/about.md
RUN apt-get -y update \
&& echo "-------------------------------------------- weasyprint" \
&& apt-get install -y build-essential python3-dev python3-pip python3-setuptools python3-wheel python3-cffi libcairo2 libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 libffi-dev shared-mime-info \
&& echo "-------------------------------------------- mkdocs plugins" \
&& pip install -r /home/abc/installed-python-packages/mkdocs-requirements.txt \
&& echo "------------------------------------------------------ utils" \
&& rm -rf /home/abc/utils || true \
&& git clone https://github.com/bluxmit/alnoda-workspaces /tmp/alnoda-workspaces \
&& mv /tmp/alnoda-workspaces/utils /home/abc/ \
&& rm -rf /tmp/alnoda-workspaces \
&& echo "------------------------------------------------------ user" \
&& chown -R abc /home/examples \
&& chown -R abc /home/abc/utils \
&& chown -R abc /home/abc/installed-python-packages \
&& find /home -type d | xargs -I{} chown -R abc {} \
&& find /home -type f | xargs -I{} chown abc {}
USER abc
# Custom docs for this workspace
COPY mkdocs /home/docs
# Build Alnoda workspace
COPY --chown=abc:abc workspace /tmp/workspace
RUN pipx uninstall alnoda-wrk; pipx install alnoda-wrk; alnoda-wrk build /tmp/workspace && rm -rf /tmp/workspace

View file

@ -1 +0,0 @@
https://github.com/benweet/stackedit

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 476 KiB

View file

@ -1,136 +0,0 @@
<style>
/* These styles apply only to this page! */
.md-content__button {
display: none;
}
.md-sidebar--secondary{
display: none !important;
}
.md-typeset h1 {
line-height: 0;
margin: 0;
margin-left: -9999px;
}
.quickstart-wrapper {
min-width: 300px;
display: flex;
flex-wrap: wrap;
justify-content: center;
padding-left: -50px;
column-gap: 50px;
row-gap: 50px;
}
.quickstart-wrapper > div {
flex: 300px;
max-width: 300px;
}
.tool-img{
box-shadow: rgba(0, 0, 0, 0.24) 0px 5px 5px;
border-radius: 5px;
min-width: 300px;
max-width: 300px;
max-height: 170px;
min-height: 170px;
}
.tool-caption{
font-family: Roboto, Helvetica, sans-serif;
text-align: center;
margin-top: 10px;
font-size: 1.2rem;
font-weight: bold;
/* font-size: 1.25em;
font-weight: 400; */
letter-spacing: -.02em;
line-height: 1.5;
}
.tool-description{
font-family: Helvetica, sans-serif;
text-align: center;
margin-top: 10px;
font-size: 0.7rem;
font-style: oblique;
/* font-weight: bold; */
}
</style>
{%
set tools = [
{
"env": "IDE_URL",
"name": "IDE",
"image": "assets/home/IDE.jpg",
"description": "Browser-based version of Visual Studio Code. Develop in any language, install hundreeds of extensions"
},
{
"env": "TERMINAL_URL",
"name": "Terminal",
"image": "assets/home/Terminal.png",
"description": "Full-fledged browser-based terminal with Z-shell"
},
{
"env": "FILEBROWSER_URL",
"name": "File Browser",
"image": "assets/home/Filebrowser.png",
"description": "Browse, upload and download files and folders to and from the Workspace"
},
{
"env": "MKDOCS_LIVE",
"name": "MkDocs live server",
"image": "assets/home/Magicspace-web.png",
"description": "Serve your MkDocs project with live reload. For example, <b>cd /home/examples/mkdocs-material; mkdocs serve -a 0.0.0.0:8030</b>"
},
{
"env": "CRONICLE_URL",
"name": "Cronicle",
"image": "assets/home/Cronicle.jpg",
"description": "Schedule jobs, manage schedules, observe and monitor executions (user/pass - admin/admin)"
},
{
"env": "UNGIT_URL",
"name": "Ungit",
"image": "assets/home/Ungit.jpg",
"description": "Manage Git repositories and work flow using beautiful UI"
},
{
"env": "STATICFS_URL",
"name": "Static File Server",
"image": "assets/home/Static-server.png",
"description": "Serve any static websites like a breeze"
},
{
"env": "MC_URL",
"name": "M.Commander",
"image": "assets/home/MC.jpg",
"description": "Feature rich visual file manager with internal text viewer and editor"
},
{
"env": "HTOP_URL",
"name": "Process monitor",
"image": "assets/home/Htop.jpg",
"description": "Monitor running process and resource utilization"
}
]
%}
<div class="quickstart-wrapper">
{% for tool in tools %}
{% set tool_url = get_tool_url(tool.env) %}
<div>
<a href="{{ tool_url }}" target="_blank" rel="noopener noreferrer">
<img src="{{ tool.image }}" class="tool-img"/>
</a>
<a href="{{ tool_url }}">
<div class="tool-caption">{{ tool.name }}</div>
</a>
<div class="tool-description">{{ tool.description }}</div>
</div>
{% endfor %}
</div>

View file

@ -1,2 +0,0 @@
Containerized environment which helps to develop complex and awesome-looking documentation websites.
Create docs from all your GitHub, GitLab and Bitbucket repositories, automate periodic builds.

View file

@ -1,70 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1280" height="1024" viewBox="0 0 10000 9600" xml:space="preserve">
<desc>Created with Fabric.js 3.6.3</desc>
<defs>
</defs>
<g transform="matrix(2,0,0,2,640,512)" id="background-logo" >
</g>
<g transform="matrix(2,0,0,2,640,416.3)" id="logo-logo" >
<g transform="matrix(18.9,0,0,24.4,-502.2,-1009.3)" style="" paint-order="stroke" >
<g transform="matrix(0.2,0,0,-0.2,0,-61.6)" >
<path style="fill: rgb(64, 50, 44); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-1625,-1745)" d="M 3062 1050.1 c -466.3 107.3 -950.8 107.3 -1417.1 0 c -16.2 -3.7 -26.6 -18.2 -23.3 -32.1 c 3.4 -13.9 19 -22.1 34.9 -18.4 c 458.6 105.5 935.2 105.5 1393.9 0 c 15.9 -3.7 31.5 4.5 34.9 18.4 c 3.4 13.9 -7 28.4 -23.3 32.1" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,-95.7,12.6)" >
<path style="fill: rgb(64, 50, 44); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-1210,-1423.3)" d="M 1847.7 878.7 c 0 52.1 44.1 94.1 97 90.6 c 48.2 -3.2 84.6 -45.5 84.6 -93.8 V 490.5 c 0 -14.3 11.6 -25.9 25.9 -25.9 c 14.3 0 25.9 11.6 25.9 25.9 v 384 c 0 76.7 -58.8 142.8 -135.5 146.6 c -81.9 4 -149.8 -61.4 -149.8 -142.5 V 490.5 c 0 -14.3 11.6 -25.9 25.9 -25.9 c 14.3 0 25.9 11.6 25.9 25.9 v 388.2" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,-111.1,21.9)" >
<path style="fill: rgb(81, 173, 229); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-1143.2,-1383.2)" d="M 1861.3 912.4 v -419.2 c 0 -5.8 4.7 -10.4 10.4 -10.4 c 5.7 0 10.4 4.7 10.4 10.4 v 419.2 c 0 5.8 -4.6 10.4 -10.4 10.4 c -5.7 0 -10.4 -4.7 -10.4 -10.4" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,-103.4,18.6)" >
<path style="fill: rgb(81, 173, 229); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-1176.6,-1397.2)" d="M 1894.7 940.4 v -447.2 c 0 -5.8 4.7 -10.5 10.4 -10.5 c 5.7 0 10.4 4.7 10.4 10.5 v 447.2 c 0 5.8 -4.6 10.4 -10.4 10.4 c -5.7 0 -10.4 -4.7 -10.4 -10.4" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,-95.7,17.5)" >
<path style="fill: rgb(81, 173, 229); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-1210,-1401.8)" d="M 1928.1 949.5 v -456.1 c 0 -5.9 4.6 -10.6 10.4 -10.6 c 5.7 0 10.4 4.8 10.4 10.6 v 456.1 c 0 5.9 -4.6 10.7 -10.4 10.7 c -5.7 0 -10.4 -4.8 -10.4 -10.7" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,-88,18.6)" >
<path style="fill: rgb(81, 173, 229); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-1243.4,-1397.2)" d="M 1961.5 939.8 v -445.9 c 0 -6.1 4.6 -11.1 10.4 -11.1 c 5.7 0 10.4 5 10.4 11.1 v 445.9 c 0 6.1 -4.7 11.1 -10.4 11.1 c -5.7 0 -10.4 -5 -10.4 -11.1" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,-80.3,21.9)" >
<path style="fill: rgb(81, 173, 229); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-1276.8,-1383.2)" d="M 1994.9 912.4 v -419.2 c 0 -5.8 4.6 -10.4 10.4 -10.4 c 5.7 0 10.4 4.7 10.4 10.4 v 419.2 c 0 5.8 -4.7 10.4 -10.4 10.4 c -5.7 0 -10.4 -4.7 -10.4 -10.4" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,0,12.6)" >
<path style="fill: rgb(64, 50, 44); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-1625,-1423.3)" d="M 2262.7 878.7 c 0 52.1 44.1 94.1 97 90.6 c 48.2 -3.2 84.6 -45.5 84.6 -93.8 V 490.5 c 0 -14.3 11.6 -25.9 25.9 -25.9 c 14.3 0 25.9 11.6 25.9 25.9 v 384 c 0 76.7 -58.8 142.8 -135.5 146.6 c -81.9 4 -149.8 -61.4 -149.8 -142.5 V 490.5 c 0 -14.3 11.6 -25.9 25.9 -25.9 c 14.3 0 25.9 11.6 25.9 25.9 v 388.2" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,-15.4,21.9)" >
<path style="fill: rgb(191, 27, 44); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-1558.2,-1383.2)" d="M 2276.3 912.4 v -419.2 c 0 -5.8 4.7 -10.4 10.4 -10.4 c 5.7 0 10.4 4.7 10.4 10.4 v 419.2 c 0 5.8 -4.6 10.4 -10.4 10.4 c -5.7 0 -10.4 -4.7 -10.4 -10.4" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,-7.7,18.6)" >
<path style="fill: rgb(191, 27, 44); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-1591.6,-1397.2)" d="M 2309.7 940.4 v -447.2 c 0 -5.8 4.7 -10.5 10.4 -10.5 c 5.7 0 10.4 4.7 10.4 10.5 v 447.2 c 0 5.8 -4.6 10.4 -10.4 10.4 c -5.7 0 -10.4 -4.7 -10.4 -10.4" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,0,17.5)" >
<path style="fill: rgb(191, 27, 44); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-1625,-1401.8)" d="M 2343.1 949.5 v -456.1 c 0 -5.9 4.6 -10.6 10.4 -10.6 c 5.7 0 10.4 4.8 10.4 10.6 v 456.1 c 0 5.9 -4.6 10.7 -10.4 10.7 c -5.7 0 -10.4 -4.8 -10.4 -10.7" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,7.7,18.6)" >
<path style="fill: rgb(191, 27, 44); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-1658.4,-1397.2)" d="M 2376.5 939.8 v -445.9 c 0 -6.1 4.6 -11.1 10.4 -11.1 c 5.7 0 10.4 5 10.4 11.1 v 445.9 c 0 6.1 -4.7 11.1 -10.4 11.1 c -5.7 0 -10.4 -5 -10.4 -11.1" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,15.4,21.9)" >
<path style="fill: rgb(191, 27, 44); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-1691.8,-1383.2)" d="M 2409.9 912.4 v -419.2 c 0 -5.8 4.6 -10.4 10.4 -10.4 c 5.7 0 10.4 4.7 10.4 10.4 v 419.2 c 0 5.8 -4.7 10.4 -10.4 10.4 c -5.7 0 -10.4 -4.7 -10.4 -10.4" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,95.7,12.6)" >
<path style="fill: rgb(64, 50, 44); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-2040,-1423.3)" d="M 2677.7 878.7 c 0 52.1 44.1 94.1 97 90.6 c 48.2 -3.2 84.6 -45.5 84.6 -93.8 V 490.5 c 0 -14.3 11.6 -25.9 25.9 -25.9 c 14.3 0 25.9 11.6 25.9 25.9 v 384 c 0 76.7 -58.8 142.8 -135.5 146.6 c -81.9 4 -149.8 -61.4 -149.8 -142.5 V 490.5 c 0 -14.3 11.6 -25.9 25.9 -25.9 c 14.3 0 25.9 11.6 25.9 25.9 v 388.2" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,80.3,21.9)" >
<path style="fill: rgb(128, 204, 40); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-1973.2,-1383.2)" d="M 2691.3 912.4 v -419.2 c 0 -5.8 4.7 -10.4 10.4 -10.4 c 5.7 0 10.4 4.7 10.4 10.4 v 419.2 c 0 5.8 -4.6 10.4 -10.4 10.4 c -5.7 0 -10.4 -4.7 -10.4 -10.4" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,88,18.6)" >
<path style="fill: rgb(128, 204, 40); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-2006.6,-1397.2)" d="M 2724.7 940.4 v -447.2 c 0 -5.8 4.7 -10.5 10.4 -10.5 c 5.7 0 10.4 4.7 10.4 10.5 v 447.2 c 0 5.8 -4.6 10.4 -10.4 10.4 c -5.7 0 -10.4 -4.7 -10.4 -10.4" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,95.7,17.5)" >
<path style="fill: rgb(128, 204, 40); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-2040,-1401.8)" d="M 2758.1 949.5 v -456.1 c 0 -5.9 4.6 -10.6 10.4 -10.6 c 5.7 0 10.4 4.8 10.4 10.6 v 456.1 c 0 5.9 -4.6 10.7 -10.4 10.7 c -5.7 0 -10.4 -4.8 -10.4 -10.7" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,103.4,18.6)" >
<path style="fill: rgb(128, 204, 40); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-2073.4,-1397.2)" d="M 2791.5 939.8 v -445.9 c 0 -6.1 4.6 -11.1 10.4 -11.1 c 5.7 0 10.4 5 10.4 11.1 v 445.9 c 0 6.1 -4.7 11.1 -10.4 11.1 c -5.7 0 -10.4 -5 -10.4 -11.1" stroke-linecap="round" />
</g>
<g transform="matrix(0.2,0,0,-0.2,111.1,21.9)" >
<path style="fill: rgb(128, 204, 40); fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-linejoin: miter; stroke-dasharray: none; stroke-dashoffset: 0; stroke-miterlimit: 4; opacity: 1" paint-order="stroke" transform="translate(-2106.8,-1383.2)" d="M 2824.8 912.4 v -419.2 c 0 -5.8 4.6 -10.4 10.4 -10.4 c 5.7 0 10.4 4.7 10.4 10.4 v 419.2 c 0 5.8 -4.7 10.4 -10.4 10.4 c -5.7 0 -10.4 -4.7 -10.4 -10.4" stroke-linecap="round" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

View file

@ -1,61 +0,0 @@
"""
Basic example of a Mkdocs-macros module.
Include this {{ macros_info() }} in any page to get complete macro info
"""
import os
port_increments = {
"DOCS_URL": 0,
"FILEBROWSER_URL": 1,
"STATICFS_URL": 2,
"CRONICLE_URL": 3,
"UNGIT_URL": 4,
"IDE_URL": 5,
"TERMINAL_URL": 6,
"MC_URL": 7,
"HTOP_URL": 8,
"MKDOCS_LIVE": 10,
"PORT_8038": 18,
"PORT_8039": 19,
"PORT_8040": 20
}
# this function name should not be changed
def define_env(env):
"""
This is the hook for defining variables, macros and filters
- variables: the dictionary that contains the environment variables
- macro: a decorator function, to declare a macro.
- filter: a function with one of more arguments,
used to perform a transformation
"""
@env.macro
def get_tool_url(env):
try:
return os.environ[env]
except:
# Get host
host = "localhost"
try:
host = os.environ["WRK_HOST"]
except:
pass
proto = "http"
try:
proto = os.environ["WRK_PROTO"]
except:
pass
# Entry port - port relative to which other ports will be calculated
entry_port = 8020
try:
entry_port = int(os.environ["ENTRY_PORT"])
except:
pass
# Assign port
try:
port = port_increments[env] + entry_port
except:
port = 80
return f"{proto}://{host}:{port}"

View file

@ -1,107 +0,0 @@
# ===========================================================
# NAVIGATION
# ===========================================================
nav:
- Home: README.md
- My apps: pages/my-apps.md
- About: about.md
- Docs: https://docs.alnoda.org/mkdocs-workspace/
# ===========================================================
# CONFIGURATION
# ===========================================================
site_name: MkDocs workspace
repo_url: https://github.com/bluxmit/alnoda-workspaces
site_url: https://docs.alnoda.org
edit_uri: ""
# ===========================================================
# APPEARANCE
# ===========================================================
theme:
name: 'material'
favicon: 'assets/alnoda-dark.svg'
logo: 'assets/alnoda-white.svg'
custom_dir: overrides
font:
text: Lexend
icon:
repo: fontawesome/brands/github
features:
- search.suggest
palette:
- scheme: default
toggle:
icon: material/brightness-7
name: Switch to dark mode
primary: deep purple
accent: deep orange
- scheme: slate
toggle:
icon: material/brightness-4
name: Switch to light mode
primary: deep purple
accent: lime
extra:
# Link to open when your logo is clicked
homepage: https://docs.alnoda.org
host_url: https://docs.alnoda.org
plugins:
- include-markdown
# Enable Macros and jinja2 templates
- macros:
module_name: macros/helpers
- awesome-pages
# mermaid2 diagrams: https://mermaid-js.github.io/mermaid/#/
- mermaid2:
arguments:
theme: forest # default, forest, dark, neutral, base
themeCSS: ".er.entityLabel{fill: black;} .messageLine0{stroke: orange;} .messageLine1{stroke: orange;} #arrowhead{fill: orange;} .messageText{fill: black; stroke: black}"
markdown_extensions:
- def_list
- pymdownx.tasklist:
custom_checkbox: true
- pymdownx.arithmatex:
generic: true
- admonition
- pymdownx.inlinehilite
- pymdownx.details
- pymdownx.superfences:
# make exceptions to highlighting of code:
custom_fences:
- name: mermaid
class: mermaid
format: !!python/name:mermaid2.fence_mermaid
- pymdownx.tabbed
- abbr
- pymdownx.snippets
- attr_list
- pymdownx.emoji:
emoji_index: !!python/name:materialx.emoji.twemoji
emoji_generator: !!python/name:materialx.emoji.to_svg
- pymdownx.keys
- pymdownx.betterem
- pymdownx.caret
- pymdownx.critic
- pymdownx.escapeall
- pymdownx.smartsymbols
- pymdownx.tilde:
smart_delete: true
- footnotes
extra_javascript:
- javascripts/config.js
- https://polyfill.io/v3/polyfill.min.js?features=es6
- https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
- https://unpkg.com/mermaid/dist/mermaid.min.js

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Some files were not shown because too many files have changed in this diff Show more