PHP: Primeiros passos

Como começar com PHP na Stackhero

👋 Bem-vindo à documentação do Stackhero!

Stackhero oferece uma solução PHP cloud pronta a usar que proporciona uma série de benefícios, incluindo:

  • Implemente a sua aplicação em segundos com um simples git push.
  • Utilize o seu próprio nome de domínio e beneficie da configuração automática de certificados HTTPS para uma segurança reforçada.
  • Desfrute de tranquilidade com backups automáticos, atualizações com um clique, e uma tarifação simples, transparente e previsível.
  • Obtenha performance ótima e segurança robusta graças a uma VM privada e dedicada.

Poupe tempo e simplifique a sua vida: só leva 5 minutos para experimentar a solução de PHP cloud hosting do Stackhero!

Colocar a sua aplicação PHP online na Stackhero é simples e poderoso. Em apenas alguns passos, terá o seu projeto disponível e pronto a funcionar. Este guia irá acompanhá-lo na criação, configuração e deployment do seu serviço PHP de forma clara e passo a passo.

Para começar, pode criar um serviço PHP na Stackhero diretamente a partir do dashboard. A interface foi desenhada para tornar este processo rápido e intuitivo.

Antes de começar, certifique-se de que tem as seguintes ferramentas instaladas:

  1. Git. Pode descarregá-lo em https://git-scm.com/downloads.
  2. Windows Terminal (opcional para utilizadores Windows). Este terminal proporciona uma experiência melhorada e está disponível na Microsoft Store.

A configuração principal de que irá precisar é a sua chave pública SSH. Pode obter a sua chave pública executando um dos seguintes comandos:

cat ~/.ssh/id_rsa.pub

ou

cat ~/.ssh/id_ed25519.pub

Se ainda não tiver um par de chaves SSH, pode gerar um utilizando ssh-keygen em Linux e macOS ou ssh-keygen.exe em Windows.

Depois de obter a sua chave pública, aceda ao dashboard da Stackhero, selecione o seu serviço PHP, navegue até à página de configuração e cole a sua chave no campo indicado.

Tip: Se pretender definir a sua chave pública SSH para todos os serviços futuros, pode fazê-lo de forma global. Basta clicar na sua foto de perfil no canto superior direito do dashboard, ir a "O seu perfil" e colar aí a sua chave pública SSH.

Para facilitar o início, preparámos uma aplicação PHP de exemplo. Pode clonar o repositório com:

git clone https://github.com/stackhero-io/phpGettingStarted.git stackhero-php-getting-started
cd stackhero-php-getting-started

A Stackhero facilita o deployment da sua aplicação através do Git. Copie o comando git remote fornecido na primeira página do seu serviço PHP no dashboard. O comando será semelhante a:

git remote add stackhero ssh://stackhero@<XXXXXX>.stackhero-network.com:222/project.git

Agora está pronto para fazer o deployment da sua aplicação. Pode enviar o seu código com:

git push stackhero main

No primeiro push, ser-lhe-á pedido para aceitar a impressão digital da chave. Basta escrever "yes" quando solicitado. Após alguns instantes, a sua aplicação ficará online. Pode verificar o estado na URL indicada no seu dashboard Stackhero (normalmente https://<XXXXXX>.stackhero-network.com).

Para atualizar a sua aplicação, basta modificar o ficheiro www/index.php (ou qualquer outro ficheiro necessário) e voltar a fazer o deployment das alterações com:

git add -A .
git commit -m "Update www/index.php"
git push stackhero main

Se já tem uma aplicação PHP que pretende colocar online, só precisa de adicionar o repositório remoto ao seu projeto (ver Configurar o repositório remoto). Depois, pode enviar as suas alterações com:

git push stackhero main

Por predefinição, a Stackhero procura o seu código PHP e ficheiros estáticos na pasta www. Por exemplo, quando alguém acede a yourdomain.com/myphoto.jpg, o ficheiro será servido a partir de www/myphoto.jpg. Se a sua aplicação utilizar uma pasta pública diferente, pode alterar esta configuração no painel do seu serviço PHP.

Se encontrar um erro como este durante o deployment:

error: failed to push some refs to '[...]'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Esta mensagem indica que o repositório Git remoto tem alterações que não existem na sua cópia local. Se tiver a certeza de que pretende sobrescrever o remoto com a sua versão local, pode forçar o envio com:

git push -f stackhero main

Se vir este erro:

error: src refspec main does not match any
error: failed to push some refs to 'ssh://<XXXXXX>.stackhero-network.com:222/project.git'

Isto normalmente significa que a branch main não existe localmente. Nesse caso, pode querer enviar a branch master em alternativa:

git push stackhero master

Se o Git indicar Everything up-to-date e não vir as suas alterações online, provavelmente esqueceu-se de fazer commit das alterações. Pode resolver isto executando:

git add -A .
git commit -m "A sua mensagem de commit"
git push stackhero main

Se não alterou nenhum código mas pretende, ainda assim, forçar um deployment, pode usar um commit vazio:

git commit --allow-empty -m "Force update"
git push stackhero main

Se quiser fazer deploy de outra branch (por exemplo, production), pode usar:

git push stackhero production:main

Para fazer deploy de uma tag específica (como v1.0), execute:

git push stackhero 'v1.0^{}:main'

O ^{} garante que o commit associado à tag é enviado corretamente.

Se precisar de fazer deploy de um commit específico, primeiro encontre o seu hash com git log. Depois, pode forçar o envio desse commit com:

git push -f stackhero <HASH>:main

É comum ter serviços separados para diferentes ambientes, como produção e staging. Pode gerir isto renomeando e adicionando repositórios remotos.

Para renomear o seu remoto atual de stackhero para stackhero-staging, execute:

git remote rename stackhero stackhero-staging

De seguida, crie um novo serviço PHP para produção através do dashboard e adicione-o com:

git remote add stackhero-production ssh://stackhero@<XXXXXX>.stackhero-network.com:222/project.git

Agora pode fazer deploy para qualquer ambiente com:

git push stackhero-production main

ou

git push stackhero-staging main

Se está a utilizar macOS e lhe é pedido o password da sua chave SSH sempre que faz push do código, não precisa de remover a password da sua chave. Em vez disso, pode guardar a password de forma segura no keychain do macOS. Basta executar:

/usr/bin/ssh-add --apple-use-keychain ~/.ssh/id_rsa

Depois disto, o macOS deixará de pedir a password da chave ao enviar o seu código.

Para ambientes de produção e staging, é fundamental guardar dados sensíveis, como tokens e passwords, de forma segura. Em vez de incluir secrets diretamente no repositório, utilize variáveis de ambiente. Pode adicionar estas variáveis no dashboard da Stackhero e acedê-las no seu código. Por exemplo, se criar uma variável de ambiente chamada mySecret, pode obtê-la em PHP assim:

getenv("mySecret")

Quando faz push do seu código, os scripts de deployment da Stackhero vão ler o seu ficheiro composer.json e instalar automaticamente as dependências especificadas através do Composer.

Se a sua aplicação precisar de armazenar ficheiros (como fotos enviadas por utilizadores), é recomendável utilizar uma solução de object storage. Esta abordagem facilita a partilha de ficheiros entre vários serviços e mantém os ficheiros enviados separados do seu código. Pode, por exemplo, explorar o MinIO para uma solução rápida, fiável e compatível com S3.

Se preferir utilizar armazenamento local, pode aproveitar o armazenamento persistente incluído na sua instância PHP. Este armazenamento está disponível em /persistent/storage/.

Por exemplo, para guardar um ficheiro enviado, pode usar a função move_uploaded_file desta forma:

move_uploaded_file($_FILES['image']['tmp_name'], '/persistent/storage/image.jpg');

Para mais informações sobre uploads de ficheiros em PHP, consulte a documentação oficial: https://www.php.net/manual/en/features.file-upload.php.

ATENÇÃO: Guarde sempre os dados dentro da pasta /persistent/storage/.

Se a sua instância reiniciar ou se fizer push de alterações de código, quaisquer dados guardados fora do armazenamento persistente podem ser perdidos.