This content is not available in your language... So if you don't understand the language... well, at least you can appreciate the pictures of the post, right?

Cansado de depender de hospedagens grátis que ficam mais offline do que ficam online? Querendo aprender a como hospedar o seu bot em uma VPS? Então você chegou ao lugar certo! Neste tutorial você irá aprender a como escolher uma VPS, proteger ela, como copiar arquivos e rodar o seu bot!

Porque eu deveria hospedar o meu bot em uma VPS se existe Heroku/Glitch/Discloud que são grátis?

Grátis não significa que são boas, Heroku/Glitch/Discloud possuem limites de recursos do que você pode fazer na sua máquina (Quem nunca viu uma gambiarras que fazem para o bot não morrer na Heroku/Glitch/Discloud?).

Sim, elas são boas se o seu bot é pequeno (menos de 100 servidores), mas com o passar do tempo o seu bot irá precisar de mais recursos, coisas que uma hospedagem grátis não irá conseguir te oferecer.

Se você está querendo fazer que o seu bot seja grande, você terá que alguma hora ou outra tirar dinheiro do bolso para conseguir investir nele, você não pode ficar dependendo eternamente de hospedagens grátis.

Sem contar que essas hospedagens grátis não te garantem estabilidade ou performance, elas compartilham CPU com várias pessoas (ou seja, se uma pessoa está usando muita CPU você também será afetado, isto também acontece com VPS convencionais mas empresas com reputação boa tentam evitar ao máximo isto) e estão cagando para você.

Hospedagens grátis compartilham o mesmo IP para vários usuários, se algum dos seus amiguchos de IP resolverem ficar floodando a API do Discord com requests inválidos, o Discord irá banir o IP por uma hora e todos os bots serão afetados, e olha que isso nem é apenas uma hipótese, isto já aconteceu na Discloud!

E o melhor: Uma VPS é apenas sua, sério! Quer hospedar um website pessoal na sua VPS? Só instalar um nginx e se divertir! Querendo que o seu bot tenha música com o Lavalink? Só hospedar e conectar o seu bot nele! Você quer hospedar um servidor de Minecraft na sua VPS? Só craftar meu parça! O céu é o limite! (E é claro, os recursos da sua VPS)

E mexendo com VPS você aprende sobre Linux e como resolver problemas nele, algo útil para você colocar no seu currículo.

Tá mas grátis >>>>

Então esse tutorial não é para você, se você quer que o seu bot cresca, você terá que investir nele. Este tutorial são para pessoas que querem fazer um bot decente que cresca, e não para as pessoas que ficam fazendo um bot que só responde comando de ping e já ficam se achando.

Preparações

  • Windows Subsystem for Linux (WSL)
    • WSL meio que "emula" Linux no seu Windows 10, extremamente útil! Você pode instalar WSL pela Microsoft Store no Windows 10, só procurar por "Ubuntu" e instalar!
    • Daria para seguir o tutorial apenas utilizando o PowerShell do Windows 10, mas tem alguns comandos (ssh-copy-id, por exemplo) que não estão disponíveis no PowerShell.
    • Dica: Você pode usar SHIFT + Botão direito em uma pasta para abrir o Linux Shell na pasta que você selecionou, isto será extremamente útil neste guia!
  • WinSCP
    • WinSCP é utilizado para conectar via SFTP para copiar arquivos para a sua máquina
  • Um cartão de crédito internacional
    • Se você for menor de idade, você pode comprar um cartão pré-pago!
    • Sim, tem hospedagens que aceitam boleto bancário, você pode comprar nelas se preferir. Mas eu não recomendo em comprar em empresas brasileiras, pois hospedagem no Brasil é MUITO caro e não existe nenhuma vantagem de hospedar seu bot no Brasil, já que os servidores de API do Discord ficam nos Estados Unidos.
  • Uns 40 reais por mês... Infelizmente o dólar está caro.

Escolhendo uma VPS para o seu bot

Se o seu bot é pequeno, é melhor começar com uma VPS pequena também! Uma VPS de 1GB de RAM e dois núcleos já está de bom tamanho para um bot pequeno. Se no futuro você precisar de uma nova máquina, você pode fazer upgrade no VPS atual ou comprar uma nova máquina e migrar seu bot para ela... e talvez em um futuro distante migrar para um dedicado da SoYouStart ou da OVH!

Sobre o sistema operacional, recomendo escolher Ubuntu! Ubuntu é utilizado por várias pessoas, então encontrar soluções para seus problemas no Google é fácil.

Neste tutorial eu irei utilizar o Ubuntu 20.04 para a minha VPS, mas os passos serão parecidos em versões mais antigas/novas do Ubuntu.

Ao comprar a sua VPS, eles podem perguntar para você...

  • Localização da sua VPS: Tente comprar o mais próximo dos Estados Unidos que você conseguir, já que o Discord usa Google Cloud e eles hospedam nos Estados Unidos. Quanto mais próximo dos servidores da Google Cloud = menos latência de gateway. Você não precisa comprar grudado a máquinas deles, afinal, menos de 100ms de gateway ping = muito bom! Para comparação, meus servidores na SoYouStart no Canadá (BHS) tem uns 50ms de ping ao gateway do Discord.
  • Root password: Isto será a senha do usuário root da sua máquina (como se fosse uma "Conta de administrador"), escolha uma senha segura e guarde ela!
  • Hostname: Isto será o nome da sua máquina, você pode colocar qualquer coisa, por exemplo... alfajor!

Comprou a sua VPS? Yay! Agora é só esperar ela te enviar os dados da sua máquina para você (algumas enviam por email, outras te mostram no próprio painel deles) e, quando tiver, avance para a próxima etapa!

Conectando a sua VPS

Você terá que conectar a sua VPS via SSH (Secure Shell Protocol), abra o WSL (pode ser em qualquer pasta do seu PC) no seu computador e execute... ssh root@{ip da sua máquina}

  • ssh: Nome do comando
  • root: O nome do usuário na sua VPS, como você quer conectar via administrador, iremos usar root
  • {ip da sua máquina}: O IP da sua VPS
  • root@{ip da sua máquina}: Significa "root @ (at) IP", que em português seria "root em IP": "Quero me conectar como root em IP"!

Exemplo: ssh [email protected]

Ao conectar, você irá ver a seguinte mensagem:

Apenas escreva yes

Depois ele irá pedir a senha da máquina, coloque a senha que você recebeu (ou configurou) e, se der tudo certo, você estará conectado na sua máquina! Ah, não se preocupe se você estiver escrevendo mas não estiver aparecendo nenhum caractere, o SSH está recebendo a sua senha sim, ele só não mostra para evitar gente espiando atrás de você... motivo bem bobo, mas vida que segue.

Parabéns! Agora quer esfregar na cara das suas amigaxxx que agora você tem uma VPS? Então instale o neofetch com... apt install neofetch

e depois neofetch

Nice! Tá, mas vamos voltar ao nosso foco.

Ah, e uma dica: CTRL-C não copia textos em uma janela SSH, CTRL-C serve para você enviar um pedido de finalizar o processo para o Linux! Se você quer copiar algo da sua tela, selecione com o mouse e depois clique com botão direito, isto irá copiar o texto selecionado. Se você quiser colar algo, aperte com o botão direito na tela SSH.

Protegendo a sua VPS

Uma coisa que você precisa fazer é proteger a sua VPS contra invasores, enquanto uma senha de login é seguro... sabia que tem uma alternativa mais segura que senhas?

Você pode proteger o seu servidor com uma SSH identity key, uma SSH identity key é um arquivo que apenas pessoas com esse arquivo vão conseguir logar no seu servidor, assim deixando impossível de invasores conseguirem entrar na sua VPS! Exceto se você passar o arquivo para alguém e ela usar o arquivo para logar... mas aí foi você que decidiu ser burrinho.

Para gerar uma key SSH, abra o WSL em uma nova janela, vá na sua "home" do seu WSL (cd ~) e use explorer.exe ., isto irá abrir uma nova janela do Explorer do seu ambiente WSL! Isto será útil no futuro quando a gente precisar copiar a nossa key gerada para o Windows.

Para gerar uma key SSH, no WSL use ssh-keygen, escreva um nome para a sua key (eu irei chamar a minha de alfajor_key) e coloque uma senha para ela (enquanto uma senha na sua key deixa ela mais segura (já que precisa de uma senha para poder usar ela) eu recomendo deixar vazio, ou seja, sem nenhuma senha.)

A sua key será gerada e será salva na pasta que você está no shell, agora precisamos copiar a sua key para a sua VPS!

Para isto, iremos usar o comando ssh-copy-id, que serve para copiar keys para outras máquinas.

ssh-copy-id -i {nome da key} root@{ip da sua máquina}

Ao usar o comando, ele irá pedir a senha da sua VPS, só colocar ela e, se aparecer Number of key(s) added: 1 quer dizer que deu certo! Yay!

Antes de você tentar conectar, você precisa alterar as permissões da key gerada, para isto, use chmod 400 {nome da sua key}

Exemplo: chmod 400 alfajor_key

Isto irá alterar a permissão da sua key para que o ssh não reclame que as permissões estão "muito abertas". (Frescura do SSH)

Para testar se deu certo, use o comando de SSH novamente, mas coloque -i {nome da key} como parâmetro, isto irá falar para o SSH "use essa key aqui vlw te amo"

Exemplo: ssh -i alfajor_key [email protected]

Se você conseguir conectar na sua máquina sem o SSH pedir a sua senha, então quer dizer que deu certo!

Agora iremos desativar para meliantes não conseguirem logar como root no seu servidor sem ter a sua key.

Na sua máquina, use nano /etc/ssh/sshd_config (nano é um editor de texto!) e procure por PasswordAuthentication

Dica: Você pode procurar por palavras no nano usando CTRL + W e depois escrevendo o que você quer procurar.

Tire o # na frente do PasswordAuthentication e troque de yes para no e salve o arquivo (CTRL + X, depois escreva y e depois aperte ENTER)

Reinicie o servidor SSH da sua máquina utilizando service ssh restart e pronto, meliantes não irão conseguir ficar tentando chutar a sua senha!

Tente se conectar na sua máquina novamente com a sua key gerada (com o parâmetro -i {sua key} e depois sem a key (sem o parâmetro -i), se você conseguir logar com a key mas não conseguir logar sem a key, então deu tudo certo!

Conectando a VPS com WinSCP

Agora precisamos conectar a VPS via SFTP para que você consiga copiar arquivos da máquina. Nós iremos usar WinSCP para isto.

Lembra daquela tela do Windows Explorer que você abriu no passo passado? Então, copie a sua key gerada para alguma pasta no seu Windows 10 para que o WinSCP possa encontrar.

Ao abrir o WinSCP, vai aparecer várias opções, vá em "New Site".

  • File protocol: SFTP
  • Host name: IP da sua máquina
  • User name: root
  • Password: Deixe vazio

Agora vá em "Advanced" -> "SSH" -> "Authentication" e selecione o arquivo da sua key em "Private key file"! Ah, não se esqueça de trocar para mostrar todos os arquivos!

O WinSCP irá perguntar se você deseja converter a sua key para um formato compatível com o PuTTY, clique em "Sim" e escolha o local da sua key em formato PuTTY (pode ser na mesma pasta que você deixou a key criada anteriormente).

Clique em "OK" e, na tela inicial de criação de sites, clique em "Save", assim você não precisará colocar essas informações toda hora que você quiser mexer nos arquivos da sua VPS.

Agora é só clicar em "Login", o WinSCP irá perguntar se você deseja confiar no host, só clicar em "Yes"

Incrível! Aliás, eu prefiro usar o WinSCP no estilo de interface "Explorer", se você quiser trocar, é em "Preferences" -> "Interface".

Instalando Node.js/Python/JDK

Antes de tudo, instale o curl na sua máquina, curl é uma ferramenta útil para baixar coisas da internet e algumas packages precisam dela!

apt install curl

node.js v14

Para instalar o node.js na sua máquina, só usar

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs

Se você precisar de uma versão mais antiga/nova do node.js, veja aqui!

Use aquele node maroto no terminal para ver se está tudo funcionando...

E, se tudo estiver certo, o npm também irá funcionar!

Python

Por padrão o Ubuntu 20.04 já vem com o Python 3.8.2, então...

Caso tenha algum update disponível você pode atualizar o Python com apt upgrade python3.

Java (JDK)

Para instalar o JDK na sua máquina, só usar

wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add -
sudo apt-get install -y software-properties-common
sudo apt-get install adoptopenjdk-11-hotspot

E use aquele java -version maroto no terminal para ver se tudo está funcionando...

Como utilizar screen

Screen é uma ferramenta que permite você criar sessões adicionais na sua VPS.

Um exemplo seria no Windows: Se você rodar o seu bot em um prompt de comando e fechar o prompt de comando, o seu bot morre. A sua sessão SSH é como se fosse um prompt de comando do Windows, se você fechar a sua conexão o seu bot morre.

E para isto que serve o screen! O screen permite você criar mais "prompts de comandos" na sua VPS, assim você poderá executar vários processos ao mesmo tempo e eles não irão encerrar automaticamente ao fechar a sua conexão!

Para instalar o screen, use

apt install screen

Usar o screen é fácil:

  • screen -S {nome da sua screen}: Cria uma screen com o nome {nome da sua screen}
  • screen -r {nome da sua screen}: Volta para a sua screen já criada
  • CTRL + A + D: Desconecta de uma screen caso você esteja dentro dela
  • exit: Dentro de uma screen o exit deleta a screen criada.
  • screen -Dr {nome da sua screen}: Raramente você irá utilizar este comando, você só deverá usar ele quando a sua screen mostra que está "Attached" mesmo que você não esteja dentro dela! As vezes isto acontece quando a sua conexão SSH morre por problemas de internet/energia.

Executando seu bot

Agora chegamos na seção que todos estavam esperando... como executar o seu bot!

Primeiro teremos que copiar o nosso humilde bot para a VPS, para isto iremos usar o WinSCP. Neste tutorial eu irei usar como exemplo um bot feito em JavaScript (node.js), mas são os mesmos passos para bots em outras linguagens, basta alterar os comandos para executar o bot.

No WinSCP, conecte na sua VPS e na barrinha de "Address" escreva /home e aperte ENTER para acessar a pasta /home na sua VPS.

Na pasta /home, crie uma pasta com um nome muito foof para o seu bot... que tal chamar ela de alfajor?

Para criar uma pasta no WinSCP, clique com botão direito -> "New" -> "Folder", e aí é só escolher o nome dela.

Entre dentro da sua nova pasta e copie os arquivos do seu bot para o WinSCP (É simples! Só selecionar todos os seus arquivos e arrastar para o WinSCP).

Dica: Copiar vários arquivos pequenos demora muito mais tempo do que copiar um único arquivo grande, então uma alternativa é compactar todos os arquivos do seu projeto (com o 7zip/WinRAR, etc), instalar o unzip na sua VPS com apt install unzip e depois descompactar na VPS utilizando unzip NomeDoArquivo.zip!

Quando acabar, vá para a janela aonde você está conectado ao seu servidor via SSH e utilize cd /home/alfajor (o comando cd serve para você se mover para uma pasta, igual como funciona no prompt de comando do Windows).

Se você compactou o arquivo igual como o Power Tech Tips disse, use unzip NomeDoArquivo.zip!

E agora vem a hora tão emocionante, executar o bot!

Para executar, use node index.js (Ou o comando necessário para iniciar o seu bot) e, se der tudo certo...

Yay! Deu tudo certo!! Mas agora a gente precisa rodar o bot em uma screen, já que, se você fechar a sua conexão SSH, o bot irá morrer.

Primeiro vamos matar o processo do bot utilizando CTRL + C, isto irá parar o seu bot e irá retornar para o terminal.

Agora, vamos criar uma screen com screen -S bot (você pode alterar bot para outro nome, tipo owo_meu_bot_fofo ou algo assim) e aí é só usar node index.js dentro da screen!

Agora você pode fechar a sua conexão SSH e ficar em paz e harmonia e ser feliz! Caso você queria voltar ao processo do seu bot futuramente, você pode usar screen -r bot

E é isso, se divirta com a casa do seu novo bot!