Run CodeServer on Google Colab using Inlets in less than 60 secs using your own domain.

Overview

Inlets Colab

Run CodeServer on Colab using Inlets in less than 60 secs using your own domain.

Open In Colab

Features

  • Optimized for Inlets/InletsPro
  • Use your own Custom Domain i.e. https://colab.yourdomain.com
  • Quick Deployment
  • Password Protection (Optional)
  • Notebook/CLI Support
  • GDrive Integration
  • Cloud Storage Integration (gcs, s3, minio, etc.)

Currently Tested Storage Backends

  • GCP Cloud Storage
  • AWS S3
  • Minio

Installation

# From pypi
pip install --upgrade inlets-colab

# From source
pip install --upgrade git+https://github.com/trisongz/inlets-colab

Requirements


Usage in Colab Notebook

import os
os.environ['INLETS_LICENSE'] = ... # Inlets Pro License
os.environ['INLETS_TOKEN'] = ... # Inlets Token
os.environ['INLETS_TUNNEL_HOST'] = "inlets.domain.com" # Inlets Tunnel Host (ControlPlane)
os.environ['INLETS_SERVER_HOST'] = "colab.domain.com" # Inlets Tunnel Host (DataPlane)
os.environ['INLETS_CLIENT_HOST'] = "127.0.0.1" # The Local Server IP
os.environ['INLETS_CLIENT_PORT'] = "7070" # The Local Server IP
os.environ['GENERATE_AUTH'] = "true" # Will generate password if not provided
os.environ['MOUNT_GS'] = "true" # Bool to mount GCS Bucket
os.environ['GS_BUCKET'] = "gs_bucket" # Name of GCS Bucket to Mount
os.environ['GS_PROJECT'] = "gcs_project" # Project Name within GCP
os.environ['GS_AUTH'] = ... # Base64 Encoded String of your ServiceAccount.json

from inletscolab.client import InletsColab

InletsColab.start()

Usage in Colab Notebook + Terminal

## Write your env config to envfile.yaml

%%writefile /content/envfile.yaml

INLETS_LICENSE: ...
INLETS_TOKEN: ...
INLETS_TUNNEL_HOST: inlets.domain.com
INLETS_SERVER_HOST: colab.domain.com
INLETS_CLIENT_HOST: 127.0.0.1
INLETS_CLIENT_PORT: '7070'
GENERATE_AUTH: 'true'
MOUNT_GS: 'true'
GS_BUCKET: gs_bucket
GS_PROJECT: gcs_project
GS_AUTH: ...
## Now use the CLI to launch targeting the envfile.yaml

inletscolab start --envfile /content/envfile.yaml

Currently Tested Inlets Server

  • Inlets in VM
  • Inlets in Kubernetes Cluster
    • External:
      • ExternalDNS
      • CertManager
    • Repo: https://inlets.github.io/inlets-pro/charts/
    • Chart: inlets-pro/inlets-pro
    • Helm Values:
      • ingress.domain: $INLETS_TUNNEL_HOST
      • dataPlane.ports[0].port: $INLETS_CLIENT_PORT
      • dataPlane.ports[0].targetPort: $INLETS_CLIENT_PORT
    • Provider: aws-eks
    • Ingress:
      • Type: loadbalancer from nginx-controller
      • Class: nginx
      • Service: ...-inlets-pro-data-plane
      • Port: $INLETS_CLIENT_PORT
      • Path: /
      • PathType: Prefix
      • Host: $INLETS_SERVER_HOST

Currently Tested Inlets Cloud Providers

  • GCP ComputeEngine
  • GCP GKE
  • AWS EC2
  • AWS EKS
  • DigitalOcean Droplet
  • DigitalOcean Kubernetes
  • Linode
  • Azure
  • Oracle

Code Server

Default Version: 3.12.0

Default Plugins:


Environment Variables

Below are the Environment Variables that are used to build the Config

class InletsConfig:
    license: str = Env.to_str('INLETS_LICENSE', '')
    token: str = Env.to_str('INLETS_TOKEN', '')
    tunnel_host: str = Env.to_str('INLETS_TUNNEL_HOST', '')
    server_host: str = Env.to_str('INLETS_SERVER_HOST', '')
    server_port: int = Env.to_int('INLETS_SERVER_PORT', 8123)
    client_host: str = Env.to_str('INLETS_CLIENT_HOST', '127.0.0.1')
    client_port: int = Env.to_int('INLETS_CLIENT_PORT', 7070)
    domain_name: str = Env.to_str('INLETS_DOMAIN', 'localhost')
    is_cluster: bool = Env.to_bool('INLETS_CLUSTER', 'true')
    client_type: str = Env.to_str('INLETS_CLIENT_TYPE', 'tcp')
    use_sudo: bool = Env.to_bool('INLETS_USE_SUDO', 'true')

class ServerConfig:
    extensions: List[str] = Env.to_list('CODESERVER_EXTENSIONS', DefaultCodeServerExtensions)
    version: str = Env.to_str('CODESERVER_VERSION', DefaultCodeServerVersion)
    authtoken: str = Env.to_str('SERVER_AUTHTOKEN', '')
    password: str = Env.to_str('SERVER_PASSWORD', '')
    code: bool = Env.to_bool('RUN_CODE', 'true')
    lab: bool = Env.to_bool('RUN_LAB')
    generate_auth: bool = Env.to_bool('GENERATE_AUTH', 'true')

class StorageConfig:
    
    ## Bool to mount/not mount
    ## should be 'true'/'false'

    mount_drive: bool = Env.to_bool('MOUNT_DRIVE')
    mount_s3: bool = Env.to_bool('MOUNT_S3')
    mount_gs: bool = Env.to_bool('MOUNT_GS')
    mount_minio: bool = Env.to_bool('MOUNT_MINIO')

    ## Paths to Bucket(s)
    ## All bucket should exclude their prefixes
    ## i.e. gs://gsbucket -> gsbucket
    ##      s3://s3bucket -> s3bucket 

    s3_bucket: str = Env.to_str('S3_BUCKET')
    gs_bucket: str = Env.to_str('GS_BUCKET')
    minio_bucket: str = Env.to_str('MINIO_BUCKET')

    ## Paths to Mount Bucket(s)
    ## along with the defaults

    s3_mount_path: str = Env.to_str('S3_MOUNT_PATH', '/content/s3')
    gs_mount_path: str = Env.to_str('GS_MOUNT_PATH', '/content/gs')
    minio_mount_path: str = Env.to_str('MINIO_MOUNT_PATH', '/content/minio')

    ## GCP Cloud Auth
    ## GS_AUTH should be a base64 encoded string of the serviceaccount.json
    ## To create it, run `base64 -i /path/to/serviceaccount.json`
    ## It will likely be _very_ long
    ## If it exists, it will be decoded and saved as proper json to /authz/adc.json

    gauth: PathLike = Env.to_json_b64('GS_AUTH', 'GOOGLE_APPLICATION_CREDENTIALS', '/authz/adc.json')
    gproject: str = Env.to_str('GS_PROJECT')
    
    ## AWS Cloud Auth
    ## Note: as Colab Locations are Randomly selected globally
    ## you may incur increased ingress/egress charges with large files
    ## in your S3 if regions are far apart. Use with Caution

    s3_key_id: str = Env.to_str_env('AWS_KEYID', 'AWS_ACCESS_KEY_ID', '')
    s3_secret: str = Env.to_str_env('AWS_SECRET', 'AWS_SECRET_ACCESS_KEY', '')
    s3_region: str = Env.to_str('AWS_REGION', 'us-east-1')
    
    ## Minio Cloud Auth
    ## Currently Untested
    ## MINIO_ENDPOINT should be the full http/https along with port
    ## i.e. https://minio.yourdomain.com
    ##      http://1.2.3.4:9000

    minio_endpoint: str = Env.to_str('MINIO_ENDPOINT')
    minio_key_id: str = Env.to_str('MINIO_KEYID')
    minio_secret: str = Env.to_str('MINIO_SECRET')

Libraries & Dependencies

Python Dependencies

Runtime Dependencies


Helpful Links

Below are some helpful links in setting up Inlets if you do not already have one set up.


License

MIT

Owner
Chief Architect @ Growth Engine
Beatsaber for Python

beatsaber Beatsaber for Python It was automatically generated with mkpylib. If you're reading this message, it m

Shawn Presser 3 Jul 30, 2021
Ferramenta de monitoramento do risco de colapso no sistema de saúde em municípios brasileiros com a Covid-19.

FarolCovid 🚦 Ferramenta de monitoramento do risco de colapso no sistema de saúde em municípios brasileiros com a Covid-19. Monitoring tool & simulati

Impulso 49 Jul 10, 2022
Simplest way to find Appointments in Bürgeramt Berlin, Not over engineered.

Simplest way to find Appointments in Bürgeramt Berlin, Not over engineered. Der einfachste Weg, Termine im Bürgeramt Berlin zu finden, ohne viel Schnickschnack.

Jannis 8 Nov 25, 2022
mrcal is a generic toolkit to solve calibration and SFM-like problems originating at NASA/JPL

mrcal is a generic toolkit to solve calibration and SFM-like problems originating at NASA/JPL. Functionality related to these problems is exposed as a set of C and Python libraries and some commandli

Dima Kogan 102 Dec 23, 2022
Always fill your package requirements without the user having to do anything! Simple and easy!

WSL Should now work always-fill-reqs-python3 Always fill your package requirements without the user having to do anything! Simple and easy! Supported

Hashm 7 Jan 19, 2022
Donatus Prince 6 Feb 25, 2022
🌌 Economics Observatory Visualisation Repository

Economics Observatory Visualisation Repository Website | Visualisations | Data | Here you will find all the data visualisations and infographics attac

Economics Observatory 3 Dec 14, 2022
PyPIContents is an application that generates a Module Index from the Python Package Index (PyPI) and also from various versions of the Python Standard Library.

PyPIContents is an application that generates a Module Index from the Python Package Index (PyPI) and also from various versions of the Python Standar

Collage Labs 10 Nov 19, 2022
AminoAutoRegFxck/AutoReg For AminoApps.com

AminoAutoRegFxck AminoAutoRegFxck/AutoReg For AminoApps.com Termux apt update -y apt upgrade -y pkg install python git clone https://github.com/LilZev

3 Jan 18, 2022
FileTransfer - to exchange files from phone to laptop

A small website I locally host on my network to exchange files from my phone and other devices to my laptop.

Ronak Badhe 4 Feb 15, 2022
Adansons Base is a data management tool that organizes metadata of unstructured data and creates and organizes datasets.

Adansons Base is a data management tool that organizes metadata of unstructured data and creates and organizes datasets. It makes dataset creation more effective and helps find essential insights fro

Adansons Inc 27 Oct 22, 2022
Ontario-Covid19-Screening - An automated Covid-19 School Screening Tool for Ontario

Ontario-Covid19-Screening An automated Covid-19 School Screening Tool for Ontari

Rayan K 0 Feb 20, 2022
A weekly dive into commonly used modules in the Rust ecosystem, with story flavor!

The goal of this project is to bring the same concept as PyMOTW to the Rust world. PyMOTW was an invaluable resource for me when I was learning Python years ago, and I hope that I can help someone in

Scott Lyons 20 Aug 26, 2022
A simple countdown timer in eazy code to show timer with python

Countdown_Timer The simple CLI countdown timer in eazy code to show timer How Work First you fill the input by int-- (Enter the time in Seconds:) for

Yasin Rezvani 3 Nov 15, 2022
Python AVL Protocols Server for Codec 8 and Codec 8 Extended Protocols

pycodecs Package provides python AVL Protocols Server for Codec 8 and Codec 8 Extended Protocols This package will parse the AVL Data and log it in hu

Vardharajulu K N 2 Jun 21, 2022
🤖️ Plugin for Sentry which allows sending notification via DingTalk robot.

Sentry DingTalk Sentry 集成钉钉机器人通知 Requirments sentry = 21.5.1 特性 发送异常通知到钉钉 支持钉钉机器人webhook设置关键字 配置环境变量 DINGTALK_WEBHOOK: Optional(string) DINGTALK_CUST

1 Nov 04, 2021
Python Project Template

A low dependency and really simple to start project template for Python Projects.

Bruno Rocha 651 Dec 29, 2022
It converts ING BANK account historic into a csv file you can import in HomeBank application.

ing2homebank It converts your ING Bank account historic csv file into another csv file you can import in HomeBank application

1 Feb 14, 2022
Developing a python based app prototype with KivyMD framework for a competition :))

Developing a python based app prototype with KivyMD framework for a competition :))

Jay Desale 1 Jan 10, 2022
Software for visualization of RTStruct structures on CT images

This script is responsible for the operation of the program, it is responsible for both creating the GUI and the process of processing images from dicom files. The program is based on the use of the

Adam Piszczek 0 Jun 29, 2022