Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/trisongz/inlets-colab
Run CodeServer on Google Colab using Inlets in less than 60 secs using your own domain.
https://github.com/trisongz/inlets-colab
colab inlets
Last synced: about 2 months ago
JSON representation
Run CodeServer on Google Colab using Inlets in less than 60 secs using your own domain.
- Host: GitHub
- URL: https://github.com/trisongz/inlets-colab
- Owner: trisongz
- Created: 2021-12-29T05:43:50.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2021-12-30T07:09:22.000Z (almost 3 years ago)
- Last Synced: 2024-08-08T15:28:52.951Z (5 months ago)
- Topics: colab, inlets
- Language: Python
- Homepage:
- Size: 225 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Inlets Colab
Run `CodeServer` on `Colab` using `Inlets` in less than 60 secs using your own domain.[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/trisongz/inlets-colab/blob/main/examples/colab_example.ipynb)
### Features
- [x] Optimized for Inlets/InletsPro
- [x] Use your own Custom Domain `i.e. https://colab.yourdomain.com`
- [x] Quick Deployment
- [x] Password Protection (Optional)
- [x] Notebook/CLI Support
- [x] GDrive Integration
- [x] Cloud Storage Integration (gcs, s3, minio, etc.)**Currently Tested Storage Backends**
- [x] GCP Cloud Storage
- [x] AWS S3
- [ ] Minio---
## Installation```bash
# From pypi
pip install --upgrade inlets-colab# From source
pip install --upgrade git+https://github.com/trisongz/inlets-colab```
---
## Requirements
- [Inlets Server](https://inlets.dev/)
---
## Usage in Colab Notebook
```python
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.jsonfrom inletscolab.client import InletsColab
InletsColab.start()
```
## Usage in Colab Notebook + Terminal
```python
## 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: ...```
```bash
## Now use the CLI to launch targeting the envfile.yaml
inletscolab start --envfile /content/envfile.yaml
```
---
### **Currently Tested Inlets Server**
- [ ] Inlets in VM
- [x] 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
- [x] AWS EKS
- [ ] DigitalOcean Droplet
- [ ] DigitalOcean Kubernetes
- [ ] Linode
- [ ] Azure
- [ ] Oracle---
### Code Server
Default Version: `3.12.0`
Default Plugins:
- [Python](https://open-vsx.org/extension/ms-python/python)
- [Pylance](https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance)
- [Jupyter](https://open-vsx.org/extension/ms-toolsai/jupyter)
- [RainbowCSV](https://open-vsx.org/extension/mechatroner/rainbow-csv)
- [VSCode Icons](https://open-vsx.org/extension/vscode-icons-team/vscode-icons)
- [AREPL for Python](https://open-vsx.org/extension/almenon/arepl)
- [Python Indent](https://open-vsx.org/extension/KevinRose/vsc-python-indent)
- [Remote SSH](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh)
- [Tabnine](https://open-vsx.org/extension/TabNine/tabnine-vscode)
- [ResourceMonitor](https://marketplace.visualstudio.com/items?itemName=mutantdino.resourcemonitor)
---
### Environment Variables
Below are the Environment Variables that are used to build the Config
```python
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 -> s3buckets3_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 defaultss3_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.jsongauth: 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 Cautions3_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:9000minio_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
- [lazycls](https://github.com/trisongz/lazycls)
- [pylogz](https://github.com/trisongz/pylogz)
- [typer](https://github.com/tiangolo/typer)
Runtime Dependencies
- [inletsctl](https://github.com/inlets/inlets-pro)
- [codeserver](https://github.com/coder/code-server)
- [gcsfuse](https://github.com/GoogleCloudPlatform/gcsfuse)
- [s3fs-fuse](https://github.com/s3fs-fuse/s3fs-fuse)
---
## Helpful Links
Below are some helpful links in setting up Inlets if you do not already have one set up.
- [Setting Up Inlets Server in Kubernetes Cluster](https://inlets.dev/blog/2021/03/15/scaling-inlets.html)
- [Setting up Inlets Server in VM for Multiple Cloud Providers](https://docs.inlets.dev/tutorial/automated-http-server/)
---
## License
[MIT](LICENSE)