Hospedando Sua Própria AI — Parte 03
Essa é a última parte, e pretendo finalizar essa pequena jornada. Quero que haja uma reflexão dos pontos abordados, procure compreender o que foi feito e busque se aprofundar em cada pontos.
Vamos ao trabalho…
Instalando o Ollama
O Ollama possibilita a execução local de uma LLM, com isso você pode expor o serviço ou consumi-lo como desejar.
Pense nele como um gestor de imagem, onde você escolhe a LLM que quer executar e o resto ele faz.
Leia a documentação no site, até porque você vai precisar escolher uma ou mais LLM para executar.
Inicie a instalação:
curl -fsSL https://ollama.com/install.sh | sh
Check se está tudo ok:
sudo systemctl status ollama.service
Configurando uma interface dummy, essa interface vamos vincular o listener do serviço do Ollama.
sudo nmcli connection add ifname ollama type dummy ipv4.addresses 172.70.0.1/24
Check se sua interface esta OK !
ip a
Agora vamos configurar o serviço do Ollama.
sudo nano /etc/systemd/system/ollama.service
Adiciona essa linha, conforme a imagem:
Environment=”OLLAMA_HOST=172.70.0.1:11434"
Execute:
sudo systemctl daemon-reload && sudo systemctl restart ollama.service
Check se está tudo OK:
ss -lntp | grep 11434
curl 172.70.0.1:11434 && echo
Criando uma nova entrada no Dnsmasq para o serviço do Ollama. Nesse ponto você deve voltar no artigo anterior e repedir esse passo de configuração.
adicione um apontamento:
address=/.ollama-service.com.br/172.70.0.1
Restart o Dnsmasq e valide se esta em execução:
sudo systemctl daemon-reload && sudo systemctl restart dnsmasq.service && curl ollama-service.com.br:11434 && echo
Executando sua primeira AI:
Adicione essa variável no seu environment.
export OLLAMA_HOST=172.70.0.1:11434
echo "export OLLAMA_HOST=172.70.0.1:11434" >> ~/.bashrc
ollama run llama3
Faça uma pergunta, essa LLM é a mais recente disponibilizada pela meta, mas você pode escolher outras. https://ollama.com/library
Digite “/bye” para sair, temos que continuar…
Instalando o Open-Webui
O principal objetivo é fornecer uma interface web para interagir com suas LLM’s, na prático você terá uma interface web muito parecida com a do chatgpt por exemplo.
Clone o repositório oficial:
git clone https://github.com/open-webui/open-webui.git && cd open-webui/kubernetes/manifest
Confirme se estamos do diretório: /open-webui/kubernetes/manifest
pwd && ll
Abra o arquivo: kustomization.yaml
nano kustomization.yaml
Edite conforme abaixo:
resources:
- base/open-webui.yaml
#- base/ollama-service.yaml
#- base/ollama-statefulset.yaml
- base/webui-deployment.yaml
- base/webui-service.yaml
- base/webui-ingress.yaml
- base/webui-pvc.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
#patches:
#- path: patches/ollama-statefulset-gpu.yaml
Salve : (ctrl + o ) e (ctrl + x / y)
no diretório: base (/open-webui/kubernetes/manifest/base), faremos duas edições:
Configurando ingress (Local):
nano webui-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: open-webui-ingress
namespace: open-webui
annotations:
# Use appropriate annotations for your Ingress controller, e.g., for NGINX:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: open-webui.mediumlab.com.br
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: open-webui-service
port:
number: 80
nano webui-service.yaml
apiVersion: v1
kind: Service
metadata:
name: open-webui-service
namespace: open-webui
spec:
type: ClusterIP # Use LoadBalancer if you're on a cloud that supports it
selector:
app: open-webui
ports:
- protocol: TCP
port: 80
targetPort: 8080
# If using NodePort, you can optionally specify the nodePort:
# nodePort: 30000
Configure do deployment, apontando para consumir o serviço local do Ollama, que esta em execução em : ollama-service:11434
nano webui-deployment.yaml
env:
- name: OLLAMA_BASE_URL
value: "http://ollama-service.com.br:11434"
Executando o deployment
kubectl apply -k .
Check:
kubectl get ing -A
Abra o navegador, e acesse : open-webui.mediumlab.com.br
Faça o seu “cadastro” em Sign Up:
Selecione o modelo desejado
Criando o ingress pelo ngrok, que vai expor seu serviço na internet.
Acesse : https://dashboard.ngrok.com/get-started/setup/kubernetes
Copie o seu domínio:
No ingress você vai precisar alterar algumas configurações, não adianta copiar e colocar direto no site ngrok.
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: open-webui-ngrok
namespace: open-webui
spec:
ingressClassName: ngrok
rules:
- host: $NGROK_DOMAIN
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: open-webui-service
port:
number: 8080
EOF
Finalizado, você agora tem seu serviço de LLM exposto e pode usar tranquilamente. Perceba que você tem aceleração de SSL “free” pelo ngrok.
Conclusão
Aqui tivemos contato com diversas ferramentas, e isso tudo precisa ser explorado por você. Tente fazer deploy de uma outra ferramenta no kubernetes, ou criar qualquer lab que lhe interessa.
Até logo, qualquer coisa deixe um comentário que eu lhe ajudo !!!