Run Jean Server on Gozunga Cloud
Deploy Jean — the headless AI coding assistant server by CoolLabs — on a Gozunga Cloud VM in minutes using cloud-init.
Jean Server on Gozunga Cloud
Jean is an open-source AI development environment from CoolLabs. The server edition (jean-server) runs headlessly on Linux and exposes the full Jean UI in your browser, so you can manage AI coding sessions, git worktrees, and multiple projects from any device on your network.
Running Jean on a Gozunga Cloud VM instead of your local machine is a genuinely better experience. Your laptop stays free — no background processes draining your battery mid-session, no fan spinning up when you kick off a long agent run. The VM runs 24/7 in a data center with conditioned power, redundant cooling, and a fast uplink, so Jean is always there when you pick up your phone or switch machines. Start a session at your desk, pick it up on your laptop at a coffee shop, check in from your phone — the context stays put because the server never sleeps.
This guide walks you through launching a Jean Server on Gozunga Cloud using a ready-made cloud-init recipe — no manual setup required.
What You'll Get
- A running
jean-serversystemd service on port 3456 - A randomly generated secure access token saved to
/etc/jean-server.env - Jean Web Access available at
http://<your-ip>:3456/?token=<token>immediately after boot - Always the latest release — the official installer fetches the current version automatically
Prerequisites
- A Gozunga Cloud account
- Familiarity with launching instances in the portal
- (Optional) A domain name if you want to add TLS later
Step 1: Create a Security Group
Jean Server needs a handful of ports open. In the Gozunga portal, create (or update) a Security Group with the following rules:
| Direction | Protocol | Port | Source | Purpose |
|---|---|---|---|---|
| Inbound | TCP | 22 | Your IP | SSH management |
| Inbound | TCP | 3456 | Your IP | Jean Web Access |
| Outbound | All | All | 0.0.0.0/0 | Outbound internet (for git, npm, AI CLIs, etc.) |
Security tip: Restrict port 3456 to your own IP or VPN range. Jean uses token authentication by default, but limiting network access is always a good extra layer. For public-facing access, consider putting Jean behind a reverse proxy with TLS instead of exposing port 3456 directly.
Step 2: Choose Your Instance
Jean is lightweight but you'll want headroom for the AI CLIs you install inside it:
| Workload | Flavor | Specs |
|---|---|---|
| Light use / single project | gp.small1 | 2 vCPU / 4 GB RAM |
| Active development | gp.medium1 | 4 vCPU / 8 GB RAM |
| Heavy multi-agent / large repos | gp.large1 | 8 vCPU / 16 GB RAM |
The recipe has been tested on Ubuntu 26.04 LTS.
Step 3: Launch with Cloud-Init
This recipe is part of our open-source Gozunga Cloud-Init Collection — a growing library of ready-to-paste cloud-init configs for popular apps and tools, all pre-configured for Gozunga Cloud. You can always find the latest version of this config directly in the repo: ai/ubuntu-jean.yaml
In the Gozunga portal, when launching a new instance:
- Select Ubuntu 26.04 LTS as the OS image
- Choose your instance size
- Assign your Jean security group
- Under Cloud config, check Insert cloud-init script and paste the recipe into the Cloud init configuration field
- Launch the instance
#cloud-config
# Jean Server (jean.build) on Ubuntu
# Uses the official installer — always installs the latest release.
#
# After boot: http://<server-ip>:3456/?token=<your-token>
# Token: sudo grep JEAN_TOKEN /etc/jean-server.env
# sudo cat /root/jean-first-login.txt
bootcmd:
- |
for f in /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list; do
[ -f "$f" ] && sed -i \
-e 's|https\?://archive\.ubuntu\.com/ubuntu|https://mirror.gozunga.com/ubuntu|g' \
-e 's|https\?://security\.ubuntu\.com/ubuntu|https://mirror.gozunga.com/ubuntu|g' \
-e 's|https\?://ports\.ubuntu\.com/ubuntu-ports|https://mirror.gozunga.com/ubuntu|g' \
"$f" || true
done
apt:
primary:
- arches: [default]
uri: https://mirror.gozunga.com/ubuntu
security:
- arches: [default]
uri: https://mirror.gozunga.com/ubuntu
package_update: true
package_upgrade: true
packages:
- curl
- ca-certificates
runcmd:
- |
set -e
# Install Jean Server using the official installer (always gets latest release).
# Binds to all interfaces (0.0.0.0:3456) — token auth is enabled by default.
# Your token is auto-generated and saved to /etc/jean-server.env
curl -fsSL https://raw.githubusercontent.com/coollabsio/jean/main/scripts/install-jean-server.sh \
| bash -s -- --host 0.0.0.0 --port 3456 -y
final_message: |
Jean Server is running on port 3456 after $UPTIME seconds.
Retrieve your token: sudo grep JEAN_TOKEN /etc/jean-server.env
Note on latest version: The installer script always fetches the current release from GitHub automatically — no version pinning needed.
Step 4: First Login
Cloud-init typically completes within 2–3 minutes. Once your instance is up:
- SSH into the server:
ssh ubuntu@<your-server-ip> - Read the first-login file to get your access URL and token:
sudo cat /root/jean-first-login.txt - Open the URL in your browser — it will look like:
http://<your-server-ip>:3456/?token=abc123... - Jean will guide you through connecting your first AI CLI (Claude, Codex, OpenCode, Grok, Kimi Code, etc.).
Step 5: Managing the Service
Jean runs as a systemd service (jean-server). Standard commands apply:
# Check status
sudo systemctl status jean-server
# View live logs
sudo journalctl -u jean-server -f
# Restart
sudo systemctl restart jean-server
# View your token and config
sudo cat /etc/jean-server.env
Keeping Jean Updated
Jean releases frequently. The simplest upgrade path is to re-run the official installer — it detects the existing install and updates the binary while preserving your token:
curl -fsSL https://raw.githubusercontent.com/coollabsio/jean/main/scripts/install-jean-server.sh \
| sudo bash -s -- --host 0.0.0.0 --port 3456 -y
Your token in /etc/jean-server.env is preserved across upgrades.
(Optional) Hardening: TLS with Nginx
For production use or access over the public internet, put Jean behind Nginx with a TLS certificate:
sudo apt install -y nginx certbot python3-certbot-nginx
sudo tee /etc/nginx/sites-available/jean <<'EOF'
server {
listen 80;
server_name jean.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:3456;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
EOF
sudo ln -s /etc/nginx/sites-available/jean /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d jean.yourdomain.com
Then update your security group to allow ports 80 and 443, and restrict port 3456 to 127.0.0.1 only (no longer needs to be open externally).
Summary
| Item | Value |
|---|---|
| Default port | 3456 |
| Auth | Token (auto-generated, stored in /etc/jean-server.env) |
| Service | systemd: jean-server |
| First login info | sudo cat /root/jean-first-login.txt |
| Latest releases | github.com/coollabsio/jean/releases |
Jean gives you a powerful browser-based AI coding environment on your own infrastructure — no cloud subscriptions, no vendor lock-in, your data stays on your server.
Have questions or need a custom setup? Contact Gozunga support or open a ticket in the portal.