Ollama-Privatisierung und Team-Deployment

Ein Server mit einer GPU kann zu einem gemeinsam genutzten Modelldienst für das gesamte Team werden: containerisierte Orchestrierung, LAN-Freigabe, Reverse-Proxy und Modellverteilung. Dieser Artikel setzt diese zu einer vollständigen Team-Deployment-Lösung zusammen.

Zunächst muss das grundlegende Verständnis geschaffen werden: Ollama selbst hat keinen Authentifizierungsmechanismus; die Sicherheitsgrenze muss mit einem Reverse-Proxy und Netzwerkrichtlinien aufgebaut werden.


Überblick über die Team-Deployment-Topologie

Die empfohlene Standardtopologie ist dreistufig: Der Datenverkehr der Mitglieder erreicht zuerst den Reverse-Proxy, und nachdem der Proxy die Authentifizierung abgeschlossen hat, leitet er an den Ollama-Dienst weiter, der nur auf dem lokalen Loopback lauscht.

团队部署拓扑:客户端、Nginx 反代、Ollama 服务与模型库

Das zentrale Design dieser Struktur besteht darin, dass Ollama nur auf 127.0.0.1 lauscht, sodass jeder externe Zugriff über den Proxy erfolgen muss, wodurch der Authentifizierungseinstiegspunkt eindeutig und kontrollierbar wird.


Docker- und Compose-Orchestrierung

Bevorzugen Sie Docker für das Server-Deployment und verwenden Sie Compose, um die Konfiguration in Team-Szenarien zu fixieren:

# 文件路径:docker-compose.yml
services:
  ollama:
    image: ollama/ollama          # AMD 显卡改用 ollama/ollama:rocm
    container_name: ollama
    restart: unless-stopped
    volumes:
      - ollama:/root/.ollama      # 模型持久化,升级镜像不丢模型
    ports:
      - "127.0.0.1:11434:11434"   # 只暴露给本机,交给 Nginx 对外
    # NVIDIA GPU 直通(需要先装好 NVIDIA Container Toolkit)
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

volumes:
  ollama:

Docker-bezogene Befehle:

# 启动 / 查看日志 / 升级
docker compose up -d
docker compose logs -f ollama
docker compose pull && docker compose up -d

Beachten Sie, dass das Port-Mapping als 127.0.0.1:11434:11434 und nicht als 11434:11434 geschrieben wird: Ersteres beschränkt den Port auf das lokale Loopback, sodass externer Zugriff nur über Nginx erfolgen kann; Letzteres ist gleichbedeutend damit, den unauthentifizierten Dienst direkt an die Netzwerkschnittstelle freizugeben, was die häufigste Ursache für Sicherheitsvorfälle im Team ist.


Einen Modellserver in einem LAN gemeinsam nutzen

Wenn ein kleines Team keinen Proxy einrichten möchte, besteht die kostengünstigste Freigabemethode darin, Ollama direkt im Intranet lauschen zu lassen:

# 服务器端:监听所有网卡
OLLAMA_HOST=0.0.0.0:11434 ollama serve

Richten Sie auf den Rechnern der Mitglieder OLLAMA_HOST auf den Server, und der lokale Befehl ollama steuert dann den entfernten Dienst:

# 成员电脑:CLI 与 SDK 都认这个变量
export OLLAMA_HOST=http://192.168.1.100:11434

# 之后所有命令都作用在服务器上
ollama run qwen3.5

Für die Kapazitätsplanung bei der gemeinsamen Nutzung durch mehrere Benutzer ziehen Sie direkt die Formel im Konfigurationsabschnitt heran: Die Anzahl gleichzeitiger Anfragen multipliziert mit der Kontextlänge bestimmt die VRAM-Nutzung. Für ein Team von 10 wird nicht empfohlen, NUM_PARALLEL auf 10 zu setzen; eine Warteschlange ist oft schonender, als den VRAM zu erschöpfen.


Reverse-Proxy und Tunnel

Nginx-Reverse-Proxy (empfohlen)

# 文件路径:/etc/nginx/conf.d/ollama.conf
server {
    listen 80;
    server_name model.example.com;   # 换成你的域名或内网 IP

    location / {
        proxy_pass http://localhost:11434;
        proxy_set_header Host localhost:11434;
        # Ollama 流式响应为 NDJSON,建议关闭缓冲避免"卡顿"
        proxy_buffering off;
    }
}

Temporäre Tunnel: ngrok und Cloudflare Tunnel

Für Demos oder gemeinsame Remote-Fehlersuche können Sie Tunnel verwenden, um den lokalen Dienst vorübergehend im öffentlichen Internet bereitzustellen:

# ngrok
ngrok http 11434 --host-header="localhost:11434"

# Cloudflare Tunnel
cloudflared tunnel --url http://localhost:11434 --http-host-header="localhost:11434"

Ein Tunnel entspricht dem Bereitstellen des unauthentifizierten Dienstes im öffentlichen Internet. Er wird nur für kurzfristige Demos empfohlen und sollte nach der Nutzung sofort geschlossen werden. Für langfristigen externen Zugriff verwenden Sie die authentifizierte Nginx-Lösung.


Authentifizierung: Aufbau Ihrer eigenen Sicherheitsgrenze

Ollama hat kein integriertes Kontosystem. Team-Deployment muss eine eigene Authentifizierung aufbauen. Es gibt drei gängige Wege:

LösungAnsatzAnwendbar auf
Nginx Basic Authhtpasswd erzeugt eine Passwortdatei, einheitliche Verifizierung auf der Proxy-EbeneKleine Teams, innerhalb von zehn Minuten umsetzbar
API GatewayGateways wie Kong, APISIX für API-Key-Ausstellung, Ratenbegrenzung und AuditMulti-Team-Sharing, erfordert Verbrauchsmessung
NetzwerkisolierungOllama ist nur im Intranet oder VPN-Subnetz erreichbar, nicht im öffentlichen Internet exponiertUmgebungen mit Unternehmensnetzwerkkontrolle

Nehmen Sie das gängigste Nginx Basic Auth als Beispiel:

# 生成密码文件
sudo htpasswd -c /etc/nginx/.htpasswd zhangsan

# Nginx location 块中追加两行:
# auth_basic "Ollama API";
# auth_basic_user_file /etc/nginx/.htpasswd;

Die oben genannten Authentifizierungslösungen stammen aus gängigen Community-Praktiken und nicht aus offiziellen Ollama-Funktionen. Bei der Auswahl sollte man der vorhandenen Infrastruktur des Teams folgen. Es gibt nur ein Prinzip: 11434 nicht direkt in einem nicht vertrauenswürdigen Netzwerk exponieren.


Private Modellverteilung und Versionsverwaltung

Gute, von Teams angepasste Modelle benötigen einen Verteilungsmechanismus. Ollamas Ansatz sind Namespaces plus Push.

Der Prozess hat vier Schritte: ein Konto auf ollama.com registrieren; den lokalen öffentlichen Schlüssel (~/.ollama/id_ed25519.pub) auf der Einstellungsseite der offiziellen Website binden; das Modell in einen Namen mit dem Benutzernamen kopieren; pushen.

# 复制成带命名空间的名字,用 tag 标版本
ollama cp example-helper myteam/example-helper:v1

# 推送到 ollama.com
ollama push myteam/example-helper:v1

# 成员拉取使用(私有模型需登录授权账号)
ollama run myteam/example-helper:v1

Die Versionsverwaltung wird mit Tags ausgedrückt: v1, v2 sind unabhängig voneinander, und ein Rollback ist einfach das Zurückschalten auf den alten Tag.

Eine vollständig offlinefähige Intranet-Alternative existiert ebenfalls: Legen Sie die angepasste Modelfile und die Gewichtsdateien in ein internes Code-Repository oder einen Dateidienst, und Mitglieder führen create lokal aus, um zu bauen. Ollama bietet derzeit keinen Server für selbst gehostete private Registries, daher erfolgt die netzwerkübergreifende Verteilung hauptsächlich in diesen beiden Formen.


Monitoring und Betrieb

Der tägliche Betrieb selbst gehosteter Dienste dreht sich um drei Dinge: Der Dienst läuft, Ressourcen sind ausreichend und Fehler sind nachvollziehbar.

Die offiziellen Ansatzpunkte sind ollama ps (Modellladen und VRAM), Logs (Fundorte in der Zusammenfassungstabelle des Konfigurationsabschnitts) und das usage-Feld der API (Timing-Statistiken auf Token-Ebene).

Community-Lösungen füllen die Lücke beim metrikbasierten Monitoring: Der Open-Source-Ollama-Exporter kann Metriken wie Anfragenanzahl und Token-Durchsatz für Prometheus bereitstellen und Grafana für Dashboards nutzen. Wenn die Anforderungen einfach sind, genügt auch ein Skript, das regelmäßig /api/ps abfragt und bei Log-Schlüsselwörtern alarmiert.

Die meisten Monitoring-Lösungen werden von der Community gepflegt; vergewissern Sie sich vor der Auswahl, welche Ollama-Version unterstützt wird. Dieser Artikel legt keine bestimmten Projektnamen fest; Sie können auch Ihre eigene Lösung erstellen, indem Sie dem Trio-Ansatz "Metrik-Exposition - Zeitreihendatenbank - Dashboard" folgen.


Einführung in Kubernetes Deployment

Teams mit vorhandener K8s-Infrastruktur können Ollama in einem Cluster mithilfe eines Deployments ausführen. Es gibt drei wichtige Punkte: PVC für die Persistenz von Modelldaten verwenden, Ressourcen-Scheduling-Deklarationen für GPU-Knoten verwenden und den Dienst über einen In-Cluster-Service verfügbar machen.

# 骨架示意:Deployment + GPU 资源声明
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ollama
spec:
  replicas: 1
  template:
    spec:
      containers:
        - name: ollama
          image: ollama/ollama
          ports:
            - containerPort: 11434
          volumeMounts:
            - name: models          # 模型持久化,避免 Pod 重建重新拉取
              mountPath: /root/.ollama
          resources:
            limits:
              nvidia.com/gpu: 1    # 声明 GPU,配合集群 GPU 调度
      volumes:
        - name: models
          persistentVolumeClaim:
            claimName: ollama-models

Ollama hat kein offizielles Helm-Chart veröffentlicht; die Cluster-Bereitstellung stützt sich meist auf Community-Charts oder selbst entwickelte Manifeste. Die Vorteile des Umstiegs auf K8s liegen hauptsächlich im Scheduling und in der Selbstheilung. Wenn Sie nur einen GPU-Server haben, ist Docker Compose normalerweise die sorgenfreiere Wahl.