Solucionado (ver solução)
Solucionado
(ver solução)
17
respostas

GIt => Servidor Locaweb

Olá, tudo bem ?

Eu fiz o curso de git e peguei como funcionam os comandos e a conexão entre a pasta local e o repositório no github/bitbucket.

Estou fazendo um teste simples para subir um projeto. Eu tenho uma conta no bitbucket e tenho um domínio na locaweb que queria aproveitar para fazer esse teste. O projeto já está no bitbucket (fiz os commits e push da minha máquina pro bitbucket) e inclusive fiz a conexão via ssh da minha máquina para o bitbucket (que nem sei se seria necessário). Mas como eu faço para transferir os arquivos do bitbucket para o servidor na locaweb?

Obrigado.

17 respostas

Olá Enzo, tudo bem? Não conheço o painel de controle da locaweb, e todas as hospedagens tem uma forma de trabalhar diferente. Então o servidor da locaweb é um servidor VPS (uma máquina em que você tem acesso ao terminal)? Ou é uma hospedagem única ou compartilhada (ambas apenas para colocar sites estáticos ou blogs, como WordPress). Bem para ambos os casos a própria locaweb disponibiliza tutoriais de como fazer o procedimento, então se for uma hospedagem Cloud Server (VPS) você pode seguir esse guia, se for apenas hospedagem de sites você deve seguir esse outro guia.

E fala pra gente se funcionou!

Opa, deu certo. É uma hospedagem de sites normal mesmo. Mas agora uma outra dúvida bem de iniciante. Eu fiz um teste criando um projeto em angular. E ai eu fiz um ngbuild para gerar o dist e depois transferi os arquivos via git para a pasta repo/meu-projeto.git.

Aparentemente está ok, mas eu não consigo acessá-lo pelo endereço da hospedagem. Que que será que falta para o projeto de fato subir e eu conseguir visualizar no endereço web ?

Enzo, depois que você enviou o seu "dist" para o repositório do GitHub você empurrou (push - ou usando os hooks) as alterações para a hospedagem, ou então foi até a hospedagem e puxou (pull) as alterações?

Acho que eu tenho que ir mais a fundo nesse deploy do angular. Sabe se eu tenho que enviar apenas o que tem dentro da pasta dist (o resto eu não deixo nem mapeado pelo git?). Eu fiz o comando push sim, mas não rolou :(

Bem Enzo, segundo a documentação os arquivos que ficam localizados na pasta dist/my-project-name são estáticos e podem ser adicionados em qualquer servidor Web. O ideal seria que seu repositório tivesse todas as coisas do projeto, porém parar o deploy no servidor fosse utilizado somente o que está dentro da pasta dist. Acho que seria melhor usando os próprios hooks do GitHub, eles podem facilitar seu trabalho!

Sabe me dizer como fazer isso ?!

Agora aparentemente está linkando o git com o servidor

ng build --prod
Date: 2020-08-02T00:34:24.129Z
Hash: b1c86dcb9e65c90bfe35
Time: 64961ms
chunk {0} runtime.69a8db0e473e58ff2840.js (runtime) 2.22 kB [entry] [rendered]
chunk {1} 1.b1de4ecca98c2a66f831.js () 16.1 kB  [rendered]
chunk {2} es2015-polyfills.32eaf837d3f04507a1e4.js (es2015-polyfills) 56.7 kB [initial] [rendered]
chunk {3} main.2284dbd7c50aa7624819.js (main) 432 kB [initial] [rendered]
chunk {4} polyfills.18a4f94c2a249303a7ef.js (polyfills) 44.2 kB [initial] [rendered]
chunk {5} styles.0b6ed75969ce7d46d051.css (styles) 143 kB [initial] [rendered]
chunk {6} vendor.2664b069c06752bb23e2.js (vendor) 423 kB [initial] [rendered]
chunk {7} 7.bc5b94f12a4d682d7337.js () 882 kB  [rendered]
chunk {8} 8.7342689ef51725024571.js () 92 bytes  [rendered]
chunk {9} 9.6ca69d435d5cf3a3cd07.js () 3.28 kB  [rendered]
chunk {scripts} scripts.9cebaee71c6a248e3324.js (scripts) 166 kB [entry] [rendered]

$git remote -v
origin  ssh://meuftp@meusite.com.br/~/repo/projeto.git (fetch)
origin  ssh://meuftp@meusite.com.br/~/repo/projeto.git (push)

$ git push
Everything up-to-date

O que será que precisa ser feito mais para que eu consiga acessar o projeto pelo site meusite.com.br

Não entendi muito bem essa saída do terminal Enzo, porque aparentemente o código já está sendo enviado diretamente para sua hospedagem, é isso? Se for então você precisa apenas configurar o ponto inicial na hospedagem, para que ela saiba qual arquivo deve fornecer primeiro ao receber uma requisição. Você poderia me dar mais detalhes de como é esse processo, você está enviado diretamente da sua máquina para a hospedagem compartilhada é isso? No caso você não está usando nenhum hook do GitHub é isso? Não estou entendendo muito bem como é seu Workflow, ou seja seu fluxo de trabalho, você envia primeira para o GitHub e depois para a hospedagem, ou já envia diretamente da máquina para a hospedagem?

Acho que é esse o ponto mesmo. Estou tentando enviar direto da máquina local para a hospedagem, sem utilizar o Github ou Bitbucket.

Teria que fazer (ou é melhor ou mais fácil) máquina local => bitbucket => servidor ?

Se for, eu tenho que fazer o git remote add [nome] [bitbucket] e depois eu teria que fazer a comunicação do bitbucket com o servidor ?

Mais simples, na verdade é enviar diretamente da sua máquina local mesmo, porque não vai precisar de nenhum hook ou nada do tipo, vai simplesmente utilizar o comando git push, porém não vai ter a facilidade ao longo prazo, se tiver precisar fazer mudanças sempre vai ter que fazer o processo manual. Mas voltando a seu problema, a questão é que só enviar o build para hospedagem talvez não funcione como esperado, é preciso que você configure, ou envie esses arquivos que estão dentro do build para a pasta onde a hospedagem serve o site, geralmente fica dentro da pasta public_html, dá uma olhada se os arquivos vão para dentro dessa pasta public_html! E fala pra gente!

Não está rolando :(

Tentei fazer um projeto novo para identificar onde que eu estou errando nessa conexão com o servidor. Criei um projeto chamado TesteGitLocaweb apenas com um index.html

=> Acessei o servidor pelo ssh:

-bash-3.2$ cd public_html/
-bash-3.2$ mkdir -p repo/TesteGitLocaweb.git
-bash-3.2$ cd repo/TesteGitLocaweb.git/
-bash-3.2$ git --bare init
Initialized empty Git repository in /home/storage/4/0e/f6/enzomarzo1/public_html/repo/TesteGitLocaweb.git/

=> Feito isso, sai do servidor e entrei na pasta do projeto.

TesteGitLocaweb$ git commit -a -m "Commit Inicial de Teste"
TesteGitLocaweb$ git remote rm origin
TesteGitLocaweb$ git remote add origin ssh://enzomarzo1@enzomarzo.com.br/~/public_html/repo/TesteGitLocaweb.git/
TesteGitLocaweb$ git push origin master
Enumerating objects: 27, done.
Counting objects: 100% (27/27), done.
Delta compression using up to 4 threads
Compressing objects: 100% (25/25), done.
Writing objects: 100% (27/27), 10.67 KiB | 1.52 MiB/s, done.
Total 27 (delta 3), reused 0 (delta 0)
To ssh://enzomarzo.com.br/~/public_html/repo/TesteGitLocaweb.git/
 * [new branch]      master -> master

Aparentemente deu certo, mas era para acessar enzomarzo.com.br/repo e aparecer o index.html. mas nada acontece ;(

Tenta o seguinte Enzo, entra no servidor via SSH e cópia esse arquivo index.html que está na pasta repo diretamente para a pasta public_html e tenta fazer o acesso e fala pra mim qual foi o resultado!

Funciona normal ;( .. criei uma pasta teste no servidor mandei o arquivo index.html pelo comando scp e funcionou normal. Abri o endereço na web e estava lá o teste. Em 30 seg deu tudo certo.

Pelo git não estou conseguindo de jeito nenhum. Já tentei de tudo quanto é jeito. Acabei de tentar usando o hook/bitbucket.

Pelo que eu tinha entendido a pasta que vai dar o start no git ficaria fora da pasta public.html. Então eu coloquei uma pasta chamada repo na raiz. Depois fiz o git init --bare nessa pastei, entrei na pasta hook e configurei o arquivo post-receive para fazer o git checkout -f na pasta public.

O ssh funciona, aparentemente quando eu faço o git push com o servidor conectado pelo ssh não dá nenhum erro, mas os arquivos não vão de jeito nenhum pra pasta public...

Enzo, o ainda não entendi muito bem a necessidade que ti levou a criar um repositório com o comando git init --bare e onde foi que você criou o repositório usando esse comando? Particularmente nunca tentei usar o Git numa hospedagem de site simples, porque sempre copiava a pasta completa do meu projeto e colocava diretamente na pasta public_html, já que como era um "site estático" as mudanças eram muito raridade. Utilizei o Git de forma meio "antiquada" para enviar um projeto para um servidor VPS, onde eu apenas tinha o Git no servidor e configurava o post-receive para enviar o ele recebesse para outro lugar, e esse outro lugar era o diretório onde realmente a aplicação era executada, nesse exemplo eu usava uma aplicação Laravel. Mais penso que na hospedagem já deve ter alguma ferramenta para usar o Git, e você precisa configurar o Hook apenas no GitHub ou Bitbucket, para que assim que o repositório receber um commit, ele já envie diretamente para o servidor, no seu caso, ele precisa enviar apenas a pasta "build". Peço desculpas, mas ainda não está muito claro, o que você está tentando fazer e a forma que está tentando implementar isso. Então pode detalhar melhor como está fazendo se puder enviar alguma imagem da hospedagem, eu posso ti dar uma resposta mais assertiva sobre o que pode fazer!

Opa, imagina, não há que desculpar, está ajudando bastante.

Eu tentei contatar a locaweb para ver se eles conseguiriam dar um help mas eles disseram que "não conseguem orientar na utilização do git" , rs..

Eu devo estar fazendo alguma configuração errada em algum lugar, mas não consegui descobrir onde.

O git init --bare que você questionou eu criei dentro da pasta repo no servidor. Basicamente o que eu fiz foi: 1. fazer o git init no projeto na minha máquina; 2. fazer o git init --bare no servidor; 3. fazer o git remote para estabelecer a conexão entre a máquina e o servidor e; 4. Fazer o commit e o push.

Aparentemente até ai dá certo. E para confirmar isso, antes de fazer o push eu verifiquei o tamanho da pasta repo (com o comando du -sh) e estava dando 120k (sem nada dentro, só com o git init --bare). E depois que eu fiz o push (apenas do index.html como teste) subiu para 400k.

A pasta do git que aumentou de tamanho foi a 'objects'. Se dentro dele tivesse o index.html, facilitaria kk, mas infelizmente não tem. E acho que é ai que estou falhando. Os arquivos estão sendo enviados, mas o arquivo index.html não está indo para a pasta public.html do servidor.

Será que isso é algo falho da locaweb e fazendo por exemplo via Google Cloud eu conseguiria resolver mais fácil ? Vou ver se tento subir o projeto no GS

Agora compreendi melhor o que você está tentando fazer Enzo. Bem nesse caso, você precisa fazer o seguinte:

  • Crie uma pasta, com um nome qualquer, nesse exemplo vou usar o nome app.

  • Agora criar a basta repo (no mesmo nível da pasta app) mas não execute o comando git init --bare dentro dela.

  • Dentro da pasta repo crie outra pasta (vou usar como nome "site.git", mas pode ser qualquer um) e depois entre nela e execute o comando git init --bare:

    mkdir site.git && cd site.git
    git init --bare
  • Agora dentro dessa pasta site.git liste todos os arquivos e ou pasta com o comando: ls.

  • Pronto você deve ver que existe a pasta hooks, entre dentro dela (hooks), e então crie o arquivo com o nome post-receive, bem eu gosto bastante de usar o editor nano então você pode fazer com o comando:

    sudo nano post-receive
  • Pronto, agora dentro dele você deve colocar o comando para levar os arquivos para pasta da sua aplicação, da seguinte forma:

    #!/bin/sh
    git --work-tree=/app --git-dir=/repo/site.git checkout -f

    Com esse código, vamos enviar o conteúdo para a nossa pasta app, isso acontece por os repositórios iniciado com o parâmetro --bare não armazenam o código apenas o rastreamento, as mudanças, então precisamos fazer com ele ao receber um push envie o conteúdo realmente para outra pasta, e então vamos acessar a aplicação nessa outra pasta.

  • Por fim, você precisa dar permissão de execução para esse arquivo post-receive com o comando:

    sudo chmod +x post-receive
  • E agora o restante do processo é feito na sua máquina local, você deve adicionar o remoto usando o SSH com o comando:

    git remote add production ssh://root@exemplo.com/repo/site.git
  • Pronto, agora basta enviar usando o push:

    git push production master

    E deve ver o código funcionando se acessar pasta app no navegador.

Dica importante: Lembre de alterar os caminhos das pasta se necessário, pode ser que suas pastas estejam dentro de outros diretórios como o /var ou outro.

E fala se deu certo!

boa, bem explicado! Mas em qual momento que estamos enviando isso para a pasta public_html para que ela seja publicada no w.ww.site.com.br ?! Ou a pasta app eu crio dentro do pulbic_html e o site vai ser acessado no www.site.com.br/repo ?

solução!

Foi mal Enzo, eu indiquei o passo a passo para verificar apenas se no final sua página HTML vai está disponível acessando www.site.com.br/repo, se funcionar então você pode refazer o passo a passo apenas substituindo a pasta app pela pasta public_html (que não vai precisar criar, só apagar o que estiver dentro dela, e continuar o processo).

Fala se deu certo!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software