Hospedando Sua Própria AI — Parte 03

Claudio Lazaro
5 min readApr 22, 2024

--

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
Saída esperada.

Check se está tudo ok:

sudo systemctl status ollama.service
Resultado esperado.

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
Confirme se sua interface esta como na imagem.

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
Saída esperada.

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
Saída esperada.

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

Click em Sign up

Faça o seu “cadastro” em Sign Up:

Pronto você tem seu próprio serviço de LLM

Selecione o modelo desejado

Escreva algo …

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:

Esse é seu domínio que criamos.

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
Click
Pronto !!

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 !!!

--

--