diff --git a/Codigos/gpt.md b/Codigos/gpt.md new file mode 100644 index 0000000..e6ea5d0 --- /dev/null +++ b/Codigos/gpt.md @@ -0,0 +1,406 @@ +--- +title: GPT +description: Como criar um chat para o gpt pro +published: true +date: 2026-07-24T00:20:31.706Z +tags: +editor: markdown +dateCreated: 2026-07-24T00:20:31.706Z +--- + +# Guia: Aplicacao Web GPT em LXC no Proxmox + + +Sim. O caminho mais limpo e hospedar uma aplicacao web no **LXC** e deixar a chave da OpenAI somente no servidor. + +A arquitetura fica assim: + +```text +Voce no navegador + -> https://gpt.seudominio.com + -> Nginx no LXC + -> App Node.js/Next.js + -> OpenAI API +``` + +## 1. Criar o container LXC no Proxmox + +No Proxmox, crie um CT com: + +```text +Template: Debian 12 ou Ubuntu 24.04 +CPU: 2 cores +RAM: 2 GB +Disco: 10-20 GB +Rede: IP fixo ou DHCP reservado +Unprivileged container: sim +Start at boot: sim +``` + +Depois entre no container: + +```bash +pct enter ID_DO_CONTAINER +``` + +Ou por SSH: + +```bash +ssh root@IP_DO_CONTAINER +``` + +## 2. Instalar dependencias + +Dentro do LXC: + +```bash +apt update && apt upgrade -y +apt install -y curl git nginx ca-certificates +``` + +Instale Node.js LTS: + +```bash +curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - +apt install -y nodejs +``` + +Confirme: + +```bash +node -v +npm -v +``` + +## 3. Criar o app web + +Crie uma pasta: + +```bash +mkdir -p /opt/meu-gpt +cd /opt/meu-gpt +``` + +Crie um projeto Next.js: + +```bash +npx create-next-app@latest . +``` + +Sugestao de escolhas: + +```text +TypeScript: yes +ESLint: yes +Tailwind: yes +App Router: yes +src directory: no +Turbopack: no +Import alias: yes +``` + +Instale o SDK da OpenAI: + +```bash +npm install openai +``` + +## 4. Configurar a chave da OpenAI + +Crie o arquivo `.env.local`: + +```bash +nano .env.local +``` + +Coloque: + +```env +OPENAI_API_KEY=sua_chave_aqui +OPENAI_MODEL=gpt-4.1-mini +APP_PASSWORD=uma_senha_forte_aqui +``` + +Importante: essa chave **nunca** deve ir para o frontend. + +## 5. Criar uma API de chat + +Crie o arquivo: + +```bash +nano app/api/chat/route.ts +``` + +Conteudo: + +```ts +import OpenAI from "openai"; + +const client = new OpenAI({ + apiKey: process.env.OPENAI_API_KEY, +}); + +export async function POST(req: Request) { + const { messages, password } = await req.json(); + + if (password !== process.env.APP_PASSWORD) { + return Response.json({ error: "Unauthorized" }, { status: 401 }); + } + + const response = await client.responses.create({ + model: process.env.OPENAI_MODEL || "gpt-4.1-mini", + input: messages, + }); + + return Response.json({ + text: response.output_text, + }); +} +``` + +## 6. Criar tela simples de chat + +Edite: + +```bash +nano app/page.tsx +``` + +Com uma versao basica: + +```tsx +"use client"; + +import { useState } from "react"; + +type Message = { + role: "user" | "assistant"; + content: string; +}; + +export default function Home() { + const [password, setPassword] = useState(""); + const [input, setInput] = useState(""); + const [messages, setMessages] = useState([]); + const [loading, setLoading] = useState(false); + + async function sendMessage() { + if (!input.trim()) return; + + const nextMessages: Message[] = [ + ...messages, + { role: "user", content: input }, + ]; + + setMessages(nextMessages); + setInput(""); + setLoading(true); + + const res = await fetch("/api/chat", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + password, + messages: nextMessages.map((m) => ({ + role: m.role, + content: m.content, + })), + }), + }); + + const data = await res.json(); + + setLoading(false); + + if (!res.ok) { + setMessages([ + ...nextMessages, + { role: "assistant", content: data.error || "Erro ao responder." }, + ]); + return; + } + + setMessages([ + ...nextMessages, + { role: "assistant", content: data.text }, + ]); + } + + return ( +
+
+

Meu GPT

+ + setPassword(e.target.value)} + /> + +
+ {messages.map((m, i) => ( +
+ {m.role === "user" ? "Voce" : "GPT"}:{" "} + {m.content} +
+ ))} + + {loading &&
Respondendo...
} +
+ +
+