Documents NETWORK=corp|home env var approach for seamless switching between corporate proxy and home network. Covers npm, pnpm, pip, curl, Node.js, lock file cleanup.
130 lines
4.8 KiB
Markdown
130 lines
4.8 KiB
Markdown
# Dual-Network Development Setup
|
|
|
|
**Description**: Seamlessly switch between corporate (SSL-intercepting proxy) and home (direct internet) networks using a single environment variable.
|
|
|
|
## How It Works
|
|
|
|
One env var — `NETWORK` — controls all proxy/registry config for npm, pnpm, pip, curl, and Node.js:
|
|
|
|
| `NETWORK` | Effect |
|
|
| ----------------- | ---------------------------------------- |
|
|
| `corp` | Proxy + JFrog npm registry + relaxed SSL |
|
|
| `home` (or unset) | Direct internet, default registries |
|
|
|
|
**Script**: `scripts/switch-network.sh` — sourced from `~/.zshrc`, runs on every new shell.
|
|
|
|
## Setup (one-time)
|
|
|
|
### 1. Add to `~/.zshrc`
|
|
|
|
```bash
|
|
# Dual-network: set to "corp" at work, "home" at home
|
|
export NETWORK=corp
|
|
source "$HOME/code/mygh/learning_ai_common_plat/scripts/switch-network.sh"
|
|
```
|
|
|
|
### 2. Remove old `~/.npmrc`
|
|
|
|
```bash
|
|
rm ~/.npmrc
|
|
```
|
|
|
|
The env vars (`NPM_CONFIG_REGISTRY`, `NPM_CONFIG_PROXY`, etc.) override `.npmrc` — no config file needed.
|
|
|
|
### 3. Open a new terminal
|
|
|
|
You'll see either:
|
|
|
|
- `🏢 NETWORK=corp — proxy active`
|
|
- `🏠 NETWORK=home — direct internet`
|
|
|
|
## Switching Networks
|
|
|
|
Just edit `~/.zshrc` and change the value:
|
|
|
|
```bash
|
|
export NETWORK=home # at home
|
|
export NETWORK=corp # at work
|
|
```
|
|
|
|
Then open a new terminal (or `source ~/.zshrc`).
|
|
|
|
## What Gets Configured
|
|
|
|
### `NETWORK=corp`
|
|
|
|
| Variable | Value |
|
|
| ------------------------------ | --------------------------------- |
|
|
| `http_proxy` / `https_proxy` | Corporate proxy URL |
|
|
| `NPM_CONFIG_REGISTRY` | JFrog Artifactory npm proxy |
|
|
| `NPM_CONFIG_PROXY` | Corporate proxy URL |
|
|
| `NPM_CONFIG_STRICT_SSL` | `false` |
|
|
| `PIP_TRUSTED_HOST` | `pypi.org files.pythonhosted.org` |
|
|
| `NODE_TLS_REJECT_UNAUTHORIZED` | `0` |
|
|
|
|
### `NETWORK=home`
|
|
|
|
All proxy vars are **unset**. npm/pnpm use `registry.npmjs.org`, pip uses `pypi.org` — standard defaults.
|
|
|
|
## Lock File Cleanup (one-time, from home)
|
|
|
|
After switching to home for the first time, regenerate lock files to remove corporate proxy URLs:
|
|
|
|
```bash
|
|
# Common platform (pnpm)
|
|
cd $HOME/code/mygh/learning_ai_common_plat
|
|
rm pnpm-lock.yaml && pnpm install
|
|
|
|
# Dashboards (npm)
|
|
cd $HOME/code/mygh/learning_voice_ai_agent/admin-dashboard-web
|
|
rm package-lock.json && npm install
|
|
cd ../user-dashboard-web && rm package-lock.json && npm install
|
|
cd ../tracker-dashboard-web && rm package-lock.json && npm install
|
|
|
|
# MindLyst
|
|
cd $HOME/code/mygh/learning_multimodal_memory_agents
|
|
rm package-lock.json && npm install
|
|
cd mindlyst-native/web && rm package-lock.json && npm install
|
|
```
|
|
|
|
Commit and push the clean lock files. They'll work on both networks going forward.
|
|
|
|
## Affected Tools
|
|
|
|
| Tool | How proxy is picked up |
|
|
| ------------------------- | ----------------------------------------------------------------------------- |
|
|
| **npm** | `NPM_CONFIG_REGISTRY`, `NPM_CONFIG_PROXY` env vars |
|
|
| **pnpm** | Same `NPM_CONFIG_*` env vars |
|
|
| **pip** | `http_proxy`, `https_proxy`, `PIP_TRUSTED_HOST` |
|
|
| **curl** | `http_proxy`, `https_proxy` |
|
|
| **git** (HTTPS) | `http_proxy`, `https_proxy` |
|
|
| **Node.js** (fetch/axios) | `NODE_TLS_REJECT_UNAUTHORIZED` for SSL |
|
|
| **Docker** | Not affected — Docker Desktop has its own proxy settings |
|
|
| **az CLI** | Reads `http_proxy`/`https_proxy` but may need `REQUESTS_CA_BUNDLE` separately |
|
|
|
|
## Troubleshooting
|
|
|
|
### `npm install` hangs or times out
|
|
|
|
- Verify `NETWORK` is set correctly: `echo $NETWORK`
|
|
- Check proxy is reachable: `curl -I $http_proxy`
|
|
|
|
### SSL errors from pip
|
|
|
|
- Ensure `PIP_TRUSTED_HOST` is set: `echo $PIP_TRUSTED_HOST`
|
|
- Or pass explicitly: `pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org <package>`
|
|
|
|
### Lock file has wrong registry URLs after install
|
|
|
|
- You installed on the wrong network. Switch, delete lock file, reinstall.
|
|
|
|
### Docker builds fail behind proxy
|
|
|
|
- Docker doesn't use shell env vars. Configure proxy in Docker Desktop → Settings → Resources → Proxies.
|
|
|
|
## Related Skills
|
|
|
|
- [Local Development Setup](./local-development.md) — Starting all services
|
|
- [Docker Compose](./docker-compose.md) — Container-based development (home network only)
|
|
- [Production Readiness](./production-readiness.md) — Pre-release validation
|