# Cloudflare Tunnel: Make Localhost Public Without Port Forwarding

**Video:** https://youtu.be/etluT8UC-nw
**Durată:** 18:02
**Data:** 2026-01-29
**Tags:** #cloudflare #tunnel #localhost #networking #devops @work

---

## TL;DR
Cloudflare Tunnel permite expunerea unui server local (localhost) pe internet printr-un domeniu public, fără port forwarding, fără configurare router, fără expunerea IP-ului public. App-ul rămâne pe mașina ta, Cloudflare doar rutează traficul securizat.

---

## Două metode prezentate

### 1. Quick Tunnel (temporar, pentru teste rapide)

**Instalare Cloudflared:**
```bash
# Mac
brew install cloudflared

# Windows (PowerShell)
winget install -id cloudflare.cloudflared

# Linux Debian/Ubuntu
# Vezi documentația oficială pentru package-ul apt
```

**Verificare instalare:**
```bash
cloudflared --version
```

**Rulare Quick Tunnel:**
```bash
cloudflared tunnel --url localhost:3000
```

**Ce se întâmplă:**
- Apare un URL public temporar: `https://random-words.trycloudflare.com`
- Oricine poate accesa aplicația ta prin acest URL
- **Limitare:** URL-ul se schimbă la fiecare restart

---

### 2. Permanent Tunnel (cu domeniu propriu)

**Cerințe:**
- Cont Cloudflare (gratuit)
- Domeniu propriu (cumpărat de oriunde: GoDaddy, Namecheap, etc.)
- DNS-ul domeniului trebuie mutat la Cloudflare

**Pași detaliați:**

#### Pas 1: Adaugă domeniul în Cloudflare
1. Login pe Cloudflare Dashboard
2. Domains → Onboard a domain
3. Introdu numele domeniului
4. Lasă "Quick scan for DNS records" activat
5. Alege planul **Free** (suficient pentru tunnel)

#### Pas 2: Schimbă nameservers la registrar
1. Cloudflare îți dă 2 nameservers (ex: `xxx.ns.cloudflare.com`)
2. Mergi la registrar-ul tău (GoDaddy, etc.)
3. Schimbă nameservers cu cele de la Cloudflare
4. Așteaptă propagare DNS (5-10 min până la 24h)

#### Pas 3: Autentifică Cloudflared
```bash
cloudflared tunnel login
```
- Se deschide browser-ul
- Selectezi domeniul pentru care autorizezi
- Se creează fișier credentials în `~/.cloudflared/`

#### Pas 4: Creează tunnel
```bash
cloudflared tunnel create nume-tunnel
```
- Se creează un fișier JSON cu credentials în `~/.cloudflared/`
- Notează **Tunnel ID** (ex: `1ed140...`)

#### Pas 5: Creează rută DNS
```bash
cloudflared tunnel route dns nume-tunnel subdomain.domeniu.com
```
Exemplu: `cloudflared tunnel route dns myapp demo.romfast.ro`

#### Pas 6: Creează config file
```bash
touch ~/.cloudflared/config.yml
```

**Conținut `config.yml`:**
```yaml
tunnel: TUNNEL_ID_AICI
credentials-file: /Users/user/.cloudflared/TUNNEL_ID.json

ingress:
  - hostname: demo.romfast.ro
    service: http://localhost:3000
  - service: http_status:404
```

**Important:** La `credentials-file` pune calea ABSOLUTĂ!

#### Pas 7: Pornește tunnel
```bash
cloudflared tunnel run nume-tunnel
```

---

## Puncte cheie

### Ce face Cloudflare Tunnel:
- Creează conexiune **outbound** securizată de la mașina ta la Cloudflare
- **NU** hostează app-ul pe serverele Cloudflare
- App-ul rulează **doar** pe mașina ta
- Traficul: Internet → Cloudflare → Tunnel securizat → Localhost

### Limitări:
- Dacă PC-ul e oprit → site-ul nu funcționează
- Dacă serverul local e oprit → Cloudflare returnează 404
- Nu e hosting, e routing

### Cazuri de utilizare ideale:
- Demo-uri pentru clienți
- Tool-uri interne
- Testare/staging
- Acces temporar public fără VPS

### Avantaje:
- **Gratuit** (planul free e suficient)
- Fără port forwarding
- Fără expunere IP public
- Fără configurare router/firewall
- Funcționează din orice rețea (și din spatele NAT)

---

## Comenzi utile

```bash
# Vezi toate tunnelele
cloudflared tunnel list

# Verifică path-ul complet al credentials
realpath ~/.cloudflared/TUNNEL_ID.json

# Pornește tunnel din config
cloudflared tunnel run nume-tunnel
```

---

## Aplicabilitate pentru ROA/Flowise

Poți expune chatbot-ul Flowise pe `chat.romfast.ro`:
1. Flowise rulează pe `localhost:3000` pe PC-ul tău
2. Configurezi tunnel: `hostname: chat.romfast.ro` → `service: http://localhost:3000`
3. Clienții accesează `chat.romfast.ro`, ajung la Flowise pe PC-ul tău

**Condiție:** PC-ul trebuie să fie pornit și conectat la internet.
