Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .agents/skills
1 change: 1 addition & 0 deletions .claude/skills
1 change: 1 addition & 0 deletions .github/copilot-instructions.md
1 change: 1 addition & 0 deletions .github/skills
4 changes: 4 additions & 0 deletions .github/workflows/build-docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

permissions:
contents: read

env:
BUILDKIT_PROGRESS: "plain" # Full logs for CI build.
REGISTRY_SRC: ${{ vars.REGISTRY_SRC || 'docker.io' }} # For BASE_NAMESPACE of images: where to pull base images from, docker.io or other source registry URL.
Expand All @@ -26,6 +29,7 @@ env:
DOCKER_MIRROR_REGISTRY_USERNAME: ${{ vars.DOCKER_MIRROR_REGISTRY_USERNAME }}
DOCKER_MIRROR_REGISTRY_PASSWORD: ${{ secrets.DOCKER_MIRROR_REGISTRY_PASSWORD }}
CI_PROJECT_NAME: ${{ vars.CI_PROJECT_NAME || 'LabNow/lab-dev' }}
TZ: Asia/Shanghai

jobs:
## Clash
Expand Down
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "doc"]
path = doc
url = https://github.com/LabNow-ai/lab-dev.wiki.git
Empty file added AGENTS.md
Empty file.
1 change: 1 addition & 0 deletions CLAUDE.md
61 changes: 41 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,40 +1,61 @@
# LabNow Container Image Stack - Lab Dev
# LabNow Container Image Stack Lab Dev

[![License](https://img.shields.io/badge/License-BSD%203--Clause-green.svg)](https://opensource.org/licenses/BSD-3-Clause)
[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/LabNow-ai/lab-dev/build-docker.yml?branch=main)](https://github.com/LabNow-ai/lab-dev/actions/workflows/build-docker.yml)
[![Recent Code Update](https://img.shields.io/github/last-commit/LabNow-ai/lab-dev.svg)](https://github.com/LabNow-ai/lab-dev/stargazers)
[![Visit Images on DockerHub](https://img.shields.io/badge/DockerHub-Images-green)](https://hub.docker.com/u/labnow)
[![GitHub Stars](https://img.shields.io/github/stars/LabNow-ai/lab-dev.svg?label=Stars)](https://github.com/LabNow-ai/lab-dev/stargazers)

Please generously STAR★ our project or donate to us! [![GitHub Starts](https://img.shields.io/github/stars/LabNow-ai/lab-dev.svg?label=Stars)](https://github.com/LabNow-ai/lab-dev/stargazers)
[![Donate-PayPal](https://img.shields.io/badge/Donate-PayPal-blue.svg)](https://paypal.me/haobibo)
[![Donate-AliPay](https://img.shields.io/badge/Donate-Alipay-blue.svg)](https://raw.githubusercontent.com/wiki/haobibo/resources/img/Donate-AliPay.png)
[![Donate-WeChat](https://img.shields.io/badge/Donate-WeChat-green.svg)](https://raw.githubusercontent.com/wiki/haobibo/resources/img/Donate-WeChat.png)
`lab-dev` provides standardized, pre-configured building blocks, IDEs, and gateway services to accelerate application development and cloud-native workflows.

Discussion and contributions are welcome:
[![Join the Discord Chat](https://img.shields.io/badge/Discuss_on-Discord-green)](https://discord.gg/kHUzgQxgbJ)
[![Open an Issue on GitHub](https://img.shields.io/github/issues/LabNow-ai/lab-dev)](https://github.com/LabNow-ai/lab-dev/issues)
---

## Lab Dev - Building Blocks and IDEs for Application Development
## 📖 Documentation & Tutorials
* **[Wiki & Document](https://doc.labnow.ai/)**
* **[中文使用指引 (含中国网络镜像)](https://doc.labnow.ai/zh-CN/)**

`LabNow lab-dev` ( [DockerHub](https://hub.docker.com/u/labnow) | [GitHub](https://github.com/LabNow-ai/lab-dev) ) provides Building Blocks and IDEs for Application Development.
---

## Documentation & Tutorial
## 🚀 Container Image Catalog

[Wiki & Document](https://doc.labnow.ai/) | [中文使用指引(含中国网络镜像)](https://doc.labnow.ai/zh-CN/)
Below is the directory map of all specialized modules maintained in this repository:

## Develop and Debug
| Module Directory | Image Target | Purpose / Stack | Default Ports | Key Persistence Volumes |
| :--- | :--- | :--- | :--- | :--- |
| **`docker_casdoor`** | `labnow/casdoor` | IAM / SSO Identity Gateway | `8000`, `389`, `1812` | `/opt/casdoor/files` |
| **`docker_clash`** | `labnow/clash` | Network Proxy Core (Mihomo) & UIs | `7890`, `9090`, `1053` | `/opt/clash/config` |
| **`docker_devbox`** | `labnow/developer` | JupyterLab, VS Code, RStudio Server | `8888`, `9999`, `8787` | `/root` |
| **`docker_gui`** | `labnow/gui-linux` | Selkies-GStreamer WebRTC GUI sessions | `8080` | `/tmp/runtime-root` |
| **`docker_hermes`** | `labnow/hermes` | Hermes Autonomous Agent Workspace | `9119` | `/root/workspace` |
| **`docker_keycloak`** | `labnow/keycloak` | Quarkus-based IAM / OAuth2 | `8080` | `/opt/keycloak/data` |
| **`docker_litellm`** | `labnow/litellm` | LiteLLM OpenAI-compatible API Proxy | `4000` | `/opt/litellm` |
| **`docker_logent`** | `labnow/logent` | Supervisord + logrotate + Vector pipeline | — | — |
| **`docker_nocobase`** | `labnow/nocobase` | Extensible Low-code Platform | `13000` | `/opt/nocobase/storage` |
| **`docker_openclaw`** | `labnow/openclaw` | AI Agent Automation Gateway | `18789`, `18790` | `/root/.openclaw/data` |
| **`docker_openresty`** | `labnow/openresty` | Nginx + Lua + acme.sh SSL certificate | `80`, `443` | `/etc/nginx/ssl`, `/root/.acme.sh` |
| **`docker_searxng`** | `labnow/searxng` | Privacy Metasearch Engine | `8080`, `9001` | `/etc/searxng` |
| **`docker_storebox`** | `labnow/storebox` | Alist WebDAV + Rclone Cloud Storage | `5244`, `5572` | `/opt/alist/data`, `/root/.config/rclone` |

---

## 🛠️ Development Quickstart

To run the unified **`developer`** container workspace with mounted directories:

```bash
IMG="labnow/developer"
# IMG="quay.io/labnow/developer"
IMG="labnow/developer:latest"

docker run -d --restart=always \
--name=labnow-dev \
--hostname=LabNow \
-p 18888-18890:8888-8890 \
-v $(pwd):/root/labnow \
-w /root/labnow \
-p 18888:8888 \
-p 19999:9999 \
-p 18787:8787 \
-v $(pwd):/root/workspace \
-w /root/workspace \
$IMG

sleep 5s && docker logs labnow-dev 2>&1|grep token=
```

1. **JupyterLab**: Access at `http://localhost:18888` (check `docker logs labnow-dev` for the token).
2. **VS Code (code-server)**: Access at `http://localhost:19999` (started by running `/usr/local/bin/start-code-server.sh` inside the container).
3. **RStudio Server**: Access at `http://localhost:18787` (started by running `/usr/local/bin/start-rserver.sh` inside the container).
1 change: 1 addition & 0 deletions doc
Submodule doc added at b20cfe
40 changes: 38 additions & 2 deletions docker_casdoor/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,41 @@
# Casdoor

Identity and Access Management (IAM) / Single-Sign-On (SSO) platform: https://github.com/casdoor/casdoor
`casdoor` is a Go-based open-source Identity and Access Management (IAM) and Single Sign-On (SSO) platform.

For configuration file (`/opt/casdoor/conf/app.conf`), refer to: https://casdoor.org/de/docs/basic/configuration/
---

## 1. Port Configuration

Casdoor exposes the following default network ports:
- **`8000` (HTTP Web UI / API)**: Main entry point for the administration interface and user login portals.
- **`389` (LDAP)**: Lightweight Directory Access Protocol directory service port.
- **`1812` (Radius)**: RADIUS authentication service port.

---

## 2. Data Persistence & Configurations

All uploaded files, avatar resources, and custom database attachments require volume mapping.

- **`/opt/casdoor/files`**: Local file system storage for user-uploaded resources (exposed as a Docker Volume).
- **`/opt/casdoor/conf/app.conf`** (Symlinked to `/conf/app.conf`): The core configuration file.

### Database Connection Configuration
Adjust the database connection in `app.conf` or pass them via database flags:
- `driverName`: Database type (e.g. `mysql`, `postgres`, `sqlite3`).
- `dataSourceName`: Database connection string parameters (e.g. `"user=postgres password=postgres host=localhost port=5432 sslmode=disable dbname=casdoor"`).

---

## 3. Quickstart Example

Run Casdoor using default configs:
```bash
docker run -d \
--name svc-casdoor \
-p 8000:8000 \
-p 389:389 \
-p 1812:1812 \
-v casdoor_uploads:/opt/casdoor/files \
labnow/casdoor:latest
```
48 changes: 40 additions & 8 deletions docker_clash/README.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,50 @@
# Clash / Mihomo

- mihomo core: https://github.com/MetaCubeX/mihomo/tree/Alpha
- webui zashboard: https://github.com/Zephyruso/zashboard
- webui matacubexd: https://github.com/MetaCubeX/metacubexd
- webui verge / client: https://clash-verge-rev.github.io
`clash` is a containerized proxy core (based on Mihomo/Clash Meta) bundled with built-in dashboard web UIs.

---

## 1. Port Configuration

Clash listens on the following service ports:
- **`7890` (HTTP/SOCKS5 Mixed Proxy)**: Main proxy endpoint for client systems and routing tools.
- **`9090` (External Controller REST API)**: Used by external dashboards to communicate with the proxy.
- **`1053` (DNS Server)**: Listens for DNS queries if DNS resolution redirection is enabled.

---

## 2. Data Persistence & Configurations

Configurations and cache files can be persisted by mapping the configuration folder:

## Usage
- **`/opt/clash/config`**: Directory housing the configuration file.

### Environment variables configuration:
- `PROXY_PROVIDER`: Subscription URL or YAML document URL to source proxy nodes from.
- `CLASH_CONFIG_PATH`: Custom path to target the config file (defaults to `/opt/clash/config/config.yaml`).

---

## 3. Quickstart Example

Run the Clash container:
```shell
docker run -d \
--name=svc-clash \
-p 7890:7890 -p 9090:9090 \
-p 7890:7890 \
-p 9090:9090 \
-p 1053:1053/udp \
-v clash_config:/opt/clash/config \
-e PROXY_PROVIDER="https://raw.githubusercontent.com/snakem982/proxypool/main/source/clash-meta.yaml" \
labnow/clash
labnow/clash:latest
```

After the container starts, visit this page to manage proxy: http://localhost:9090/ui/ui-zashboard/
After the container starts, open your web browser and navigate to the built-in dashboard:
`http://localhost:9090/ui/ui-zashboard/`

## Reference

- mihomo core: https://github.com/MetaCubeX/mihomo/tree/Alpha
- webui zashboard: https://github.com/Zephyruso/zashboard
- webui matacubexd: https://github.com/MetaCubeX/metacubexd
- webui verge / client: https://clash-verge-rev.github.io
79 changes: 59 additions & 20 deletions docker_devbox/README.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,70 @@
# Developer Box
# Developer Box (DevBox & Hub)

## Develop and Debug - Single User
`docker_devbox` provides containerized IDEs (JupyterLab, VS Code Server, RStudio Server) and JupyterHub orchestration. It is categorized into `developer` (base IDE stacks) and `dev-hub` (multi-user notebooks proxy).

```shell
IMG="labnow/developer"
# IMG="registry.cn-hangzhou.aliyuncs.com/labnow/full-stack-dev"
---

## 1. IDE Port Configurations

The development containers host multiple development environments on the following ports:
- **`8888` (JupyterLab / Notebook)**: Default interface loaded at startup via `start-jupyterlab.sh`.
- **`9999` (VS Code Server / code-server)**: Sourced and run via `/usr/local/bin/start-code-server.sh`.
- **`8787` (RStudio Server)**: Sourced and run via `/usr/local/bin/start-rserver.sh`.
- **`8000` (JupyterHub proxy)**: Serves the multi-user routing portal on the `dev-hub` image.

### Environment variables configuration:
- `JUPYTER_CMD`: Command to launch (defaults to `lab`).
- `CODER_ARGS`: Custom arguments passed to code-server (e.g. `--bind-addr=0.0.0.0:9999` or `--auth=password`).
- `RSTUDIO_ARGS`: Custom arguments passed to RStudio server (e.g. `--www-port=8787`).
- `USE_SSL` / `GEN_CERT`: Generates self-signed SSL certificates (`certificate.pem` in `/opt/conda/etc/jupyter/`).

---

## 2. Data Persistence & Workspace

To preserve active code databases, libraries, and shell histories, mount your host working directory directly:

- **`/root`**: The default home directory containing system configurations, SSH keys, and profile settings.
- **`/root/workspace`**: Shared workspaces for documents and project codes.

---

## 3. Quickstart Examples

### A. JupyterLab Server (Default)
Run a JupyterLab server in the background:
```shell
docker run -d --restart=always \
--name=labnow-dev \
--hostname=LabNow \
-p 18888-18890:8888-8890 \
-v $(pwd):/root/ \
-w /root/ \
$IMG

sleep 5s && docker logs labnow-dev 2>&1|grep token=
-p 8888:8888 \
-v $(pwd):/root/workspace \
-w /root/workspace \
labnow/developer:latest
```

Debug building:
### B. VS Code Server (code-server)
Run the container directly executing code-server:
```shell
docker run -d --restart=always \
--name=labnow-vscode \
--hostname=LabNow \
-p 9999:9999 \
-v $(pwd):/root/workspace \
-w /root/workspace \
labnow/developer:latest \
/usr/local/bin/start-code-server.sh
```

### C. RStudio Server
Run RStudio Server (requires R profile installed in base):
```shell
IMG="labnow/rust"
docker run --rm -it \
--name=labnow-dev --hostname=LabNow \
-p 18888-18890:8888-8890 \
-v $(pwd):/root/ -w /root/ \
$IMG bash

docker exec -it labnow-dev bash
docker run -d --restart=always \
--name=labnow-rstudio \
--hostname=LabNow \
-p 8787:8787 \
-v $(pwd):/root/workspace \
-w /root/workspace \
labnow/data-science-dev:latest \
/usr/local/bin/start-rserver.sh
```
Loading