Lewati ke konten

gtc start

Perintah gtc start meluncurkan server runtime Greentic. Perintah ini memulai semua layanan yang diperlukan termasuk server HTTP, bus NATS, dan executor flow.

Terminal window
gtc start [OPTIONS] <BUNDLE_PATH>
OpsiDeskripsiDefault
--host <HOST>Alamat bind0.0.0.0
--port <PORT>Port HTTP8080
--cloudflared <on/off>Aktifkan tunnel Cloudflareon
--ngrok <on/off>Aktifkan tunnel ngrokoff
--nats <on/off>Aktifkan NATS embeddedon
--skip-setupLewati flow setup providerfalse
--force-setupPaksa jalankan ulang flow setupfalse
-v, --verboseAktifkan logging verbose/debugfalse
-q, --quietOutput minimalfalse
Terminal window
gtc start ./my-bundle

Ini akan memulai:

  • Server HTTP di 0.0.0.0:8080
  • Server NATS embedded
  • Tunnel Cloudflared (jika tersedia)
Terminal window
# Use ngrok instead of cloudflared
gtc start ./my-bundle --cloudflared off --ngrok on
# With verbose logging
gtc start ./my-bundle --verbose
# Skip setup (if already configured)
gtc start ./my-bundle --skip-setup
Terminal window
# No tunnels, external NATS
gtc start ./my-bundle --cloudflared off --ngrok off
# Custom port
gtc start ./my-bundle --port 3000 --cloudflared off

Cloudflared membuat tunnel aman ke jaringan Cloudflare:

Terminal window
gtc start ./my-bundle --cloudflared on
# Output:
# Cloudflare tunnel started: https://random-words.trycloudflare.com
# Webhook URLs will use: https://random-words.trycloudflare.com

Gunakan ngrok untuk URL yang stabil selama pengembangan:

Terminal window
gtc start ./my-bundle --ngrok on
# Output:
# ngrok tunnel started: https://abc123.ngrok-free.app
# Webhook URLs will use: https://abc123.ngrok-free.app

Untuk produksi dengan domain publik:

Terminal window
gtc start ./my-bundle --cloudflared off --ngrok off
# Make sure your server is publicly accessible
# and update provider webhooks with your domain
Terminal window
gtc start ./my-bundle --nats on
# Starts embedded NATS on localhost:4222
Terminal window
# Disable embedded, use external
gtc start ./my-bundle --nats off
# Set NATS URL via environment
GREENTIC_NATS_URL=nats://nats.example.com:4222 gtc start ./my-bundle --nats off

Secara default, gtc start menjalankan flow setup jika provider belum dikonfigurasi:

Terminal window
gtc start ./my-bundle
# Runs setup flows for unconfigured providers

Lewati seluruh flow setup (gunakan konfigurasi yang sudah ada):

Terminal window
gtc start ./my-bundle --skip-setup

Paksa jalankan ulang semua flow setup (berguna setelah URL berubah):

Terminal window
gtc start ./my-bundle --force-setup

Saat berjalan, server mengekspos:

EndpointTujuan
GET /healthHealth check
GET /readyProbe kesiapan
POST /webhook/{provider}/{tenant}/{team}Webhook provider
GET /api/v1/sessionsManajemen sesi
POST /api/v1/messagesKirim pesan
GET /auth/configEndpoint konfigurasi OAuth
POST /oauth/token-exchangeProxy pertukaran token OIDC sisi server
Terminal window
curl http://localhost:8080/health
# {"status": "healthy"}

Runtime mengekspos dua endpoint untuk integrasi OAuth/OIDC dengan provider messaging yang memerlukan autentikasi pengguna (seperti WebChat atau Teams).

Membaca konfigurasi OAuth dari secrets store dan mengembalikannya ke client. Client menggunakan endpoint ini untuk menemukan pengaturan identity provider yang diperlukan untuk memulai authorization flow.

Terminal window
curl http://localhost:8080/auth/config
# {
# "authority": "https://login.microsoftonline.com/{tenant-id}/v2.0",
# "client_id": "your-client-id",
# "redirect_uri": "https://your-public-url/auth/callback",
# "scope": "openid profile"
# }

Proxy pertukaran token sisi server untuk authorization code exchange OIDC. Endpoint ini memungkinkan client menukar authorization code dengan token tanpa terkena pembatasan CORS browser yang terjadi saat memanggil token endpoint identity provider langsung dari frontend.

Terminal window
curl -X POST http://localhost:8080/oauth/token-exchange \
-H "Content-Type: application/json" \
-d '{"code": "authorization_code_here", "redirect_uri": "https://your-public-url/auth/callback"}'

Static route (seperti health check dan endpoint OAuth) dapat dikonfigurasi tanpa memerlukan public base URL eksplisit. Artinya endpoint ini tersedia segera saat server mulai, bahkan sebelum tunnel atau URL publik terbentuk.

Terminal window
# Debug (most verbose)
GREENTIC_LOG_LEVEL=debug gtc start ./my-bundle
# Info (default)
GREENTIC_LOG_LEVEL=info gtc start ./my-bundle
# Warning
GREENTIC_LOG_LEVEL=warn gtc start ./my-bundle
Terminal window
gtc start ./my-bundle --verbose
# Equivalent to GREENTIC_LOG_LEVEL=debug
Terminal window
# JSON format (for production)
GREENTIC_LOG_FORMAT=json gtc start ./my-bundle
# Pretty format (for development, default)
GREENTIC_LOG_FORMAT=pretty gtc start ./my-bundle
SignalPerilaku
SIGTERMShutdown anggun
SIGINT (Ctrl+C)Shutdown anggun
SIGHUPMuat ulang konfigurasi
VariabelDeskripsi
GREENTIC_HOSTAlamat bind
GREENTIC_PORTPort HTTP
GREENTIC_LOG_LEVELVerbositas log
GREENTIC_LOG_FORMATFormat log (json/pretty)
GREENTIC_NATS_URLURL NATS eksternal
GREENTIC_REDIS_URLURL Redis untuk sesi
Error: Address already in use (os error 48)

Proses lain sedang memakai port 8080. Hentikan proses itu atau gunakan port lain:

Terminal window
gtc start ./my-bundle --port 3000
Error: Failed to connect to NATS

Jika menggunakan NATS eksternal, pastikan NATS berjalan dan dapat diakses. Jika tidak, aktifkan embedded:

Terminal window
gtc start ./my-bundle --nats on
Error: Failed to start cloudflared tunnel

Instal cloudflared atau gunakan ngrok sebagai gantinya:

Terminal window
# Install cloudflared
brew install cloudflared
# Or use ngrok
gtc start ./my-bundle --cloudflared off --ngrok on
Error: Setup flow failed for messaging-telegram

Periksa kredensial Anda di file jawaban dan pastikan URL publik dapat diakses:

Terminal window
# Re-run setup
gtc start ./my-bundle --force-setup --verbose
Dockerfile
FROM rust:1.90 as builder
WORKDIR /app
COPY . .
RUN cargo build --release
FROM debian:bookworm-slim
COPY --from=builder /app/target/release/gtc /usr/local/bin/
COPY my-bundle /app/bundle
WORKDIR /app
EXPOSE 8080
CMD ["gtc", "start", "/app/bundle", "--cloudflared", "off"]
Terminal window
docker build -t my-worker .
docker run -p 8080:8080 my-worker