Inlets Colab
Run CodeServer on Colab using Inlets in less than 60 secs using your own domain.
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:
ExternalDNSCertManager
- 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
- ingress.domain:
- 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
- Type:
- External:
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
Metadata
Release files for inletscolab 0.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| inletscolab-0.0.1.tar.gz | 13.1 kB | Without provenance | Details for inletscolab-0.0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| inletscolab-0.0.1-py3-none-any.whl | Python 3 | none | any | Details for inletscolab-0.0.1-py3-none-any.whl |
Total release size: 25.8 kB
Release files / inletscolab-0.0.1.tar.gz
| Download URL | inletscolab-0.0.1.tar.gz |
|---|---|
| Size | 13.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
910dcdc1c4000ba6a2fd22786a6761d35257ba5f1a371266543eaafb98ba8d11
|
|
BLAKE2b-256 checksum How to use checksums |
a252599755b7f07295f56a74ef41803e680dc3e6bc309d12a6a3d03ff26a97bc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9
|
Release files / inletscolab-0.0.1-py3-none-any.whl
| Download URL | inletscolab-0.0.1-py3-none-any.whl |
|---|---|
| Size | 12.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
df7ed86e97ebf60179bfd43c6c04c0f86753b661ef80ad66d370c6c859f3f286
|
|
BLAKE2b-256 checksum How to use checksums |
7ed90dd202d478173eb7d436f1ba4682dd355d35c02cf74b40c53d7b93b493c3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9
|
Security for inletscolab 0.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.