Oracle Cloud Free Tier

A Oracle oferece uma faixa gratuita de máquinas virtuais com recursos limitados que podem ajudar muito para pequenos projetos ou serviços temporários de avaliação.

https://www.oracle.com/cloud

Basta fazer um cadastro com fornecimento de um cartão de crédito (caso você ultrapasse a faixa gratuita, será debitado) para ter acesso ao painel de configuração.

Em Compute -> Instances podemos criar as máquinas virtuais. Atente para o selo “Always Free” ao lado de cada opção que fizer.

Juntamente com as instâncias, as redes (net e sub-net) são criadas.

Podemos escolher uma imagem de SO e uma plataforma de hardware. Essa combinação pode ou não ser gratuita de acordo com os recursos selecionados.

Nas configuração da rede criada, as configurações de portas do firewall deverão ser habilitadas bem como dentro do SO instalado.

Lembrando que a imagem Ubuntu fornecida é modificada pela Oracle e precisa da configuração do iptables para abrir portas. Exemplo:

sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT
sudo netfilter-persistent save

Migrando um site WordPress

Existem várias formas de migrar um site em WordPress entre servidores diferentes.

Aqui seguem alguns passos sobre uma forma de executar esse processo.

  1. Certifique-se de que o sistema de recuperação de senha está funcionando no site origem. Após a migração a conta do administrador pode sofrer alteração de senha e você pode ficar com dificuldade em logar novamente no servidor destino.
  2. Instalar o plugin UpdraftPlus WordPress Backup na origem. Esse plugin também poderá ser usado para backup com armazenamento nos serviços de nuvem.
  3. Faça um backup dentro desse plugin em Backup/Restauração.
  4. Em Backups Existentes, baixe o arquivo de cada recurso para sua máquina local (Banco de dados, Plugins, Temas, etc).
  5. No servidor destino, crie um site padrão WordPress que vai receber o backup. Atenção para o detalhe da senha do administrador que será alterada após a restauração do backup para o valor usado no site de origem.
  6. Altere o registro DNS para apontar para o IP do servidor destino.
  7. Ative a versão ssl do site com o comando:
    certbot –apache –redirect -d site.com -m user@mail.com –agree-tos
  8. Acesse o site destino e instale o plugin UpdraftPlus WordPress Backup.
  9. Enviar os arquivos de backup para o servidor e executar a restauração.
  10. Deletar as pasta antigas (delete old folders).
  11. Verifique se os links estão funcionando. Caso necessário, altere os links permanentes para o formato padrão.

GIT – Push to Production

Uma das formas de publicar um branch local para um servidor de produção é usar o recurso de hooks nativo do git.

Vamos aqui listar os passos para configurar esse recurso e conseguir enviar as alteração para o servidor usando apenas um único comando na máquina local.

No lado de produção vamos acessar o servidor e criar uma pasta para abrigar os arquivos do projeto. Eu prefiro utilizar o nome do branch que está associado ao ambiente de produção (nesse caso será o main) mas você pode usar qualquer nome, inclusivo o nome do seu projeto.

ssh user@server
mkdir pasta-do-branch

Em seguida, vamos criar um ambiente git vazio para abrigar os comando de hook necessários.

git init --bare ~/projeto.git

Na pasta hooks desse ambiente criado (entre na pasta nome-do-projeto.git) vamos criar o arquivo post-receive e inserir o código nele por esse abaixo.

#!/bin/bash
TARGET="/pasta-do-branch"
GIT_DIR="/projeto.git"
BRANCH="main"

while read oldrev newrev ref
do
  if [ "$ref" = "refs/heads/$BRANCH" ];
  then
    echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
    git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f $BRANCH
  fi
done

Esse arquivo, post-receive, deve ser marcado como executável.

chmod +x post-receive

Na máquina local vamos adicionar o branch remoto.

git remote add branch user@server:/path/project.git

Dessa forma, de agora em diante, para publicar o código do branch basta executar o comando abaixo.

git push projeto main

Para se aprofundar nos detalhes desse recurso, consulte a página desse link:
https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks

Docker MySQL 5.7 Crash de Memória

Essa imagem específica do MySQL (tag 5.7) pode fechar inesperadamente após a inicialização caso, por exemplo, ocorra uma alteração no tamanho da memória ou swap do host.

Para resolver essa questão, o exemplo abaixo indica o caminho.

docker run -e MYSQL_ROOT_PASSWORD=password \
  --name mysql57 --ulimit nofile=262144:262144 \
  -d -p 3306:3306 -v mysql57-volume:/var/lib/mysql \
  mysql:5.7 --sql-mode=""

Descobrindo um arquivo de configuração de um serviço no MacOS

Para descobrir, por exemplo, onde o arquivo de configuração usado pelo MySQL está armazenado, em um terminal digite:

mysql --verbose --help | grep my.cnf

Em outro terminal, reinicie o serviço:

brew services restart mysql@5.7

Retorne ao primeiro terminal e observe o output com os dados usados pelo serviço.

* Essa dica provavelmente funciona em sistemas *nix trocando o comando de restart do serviço pelo específico da plataforma.

Configurando Apache/PHP no Scoop para CodeIgniter

O Scoop é um sistema de gerenciamento de pacotes para Windows similar ao APT para Linux e BREW para MacOS onde a manutenção do processo de instalação/remoção de aplicativos é feito diretamente no prompt de comando com poucos ou apenas um único comando.

CodeIgniter é um framework PHP para desenvolvimento de aplicativos WEB.

Com o scoop é possível instalar o Apache Web Server junto com uma versão específica do PHP para configurar um ambiente de desenvolvimento.

A instalação do Scoop pode ser feita seguindo essa documentação: https://scoop-docs.vercel.app/

Importante habilitar os buckets php, extras e versions no scoop:

  • scoop bucket add extras
  • scoop bucket add php
  • scoop bucket add versions

Após a instalação os seguintes comandos são utilizados para instalar Apache/PHP:

  • scoop install apache php7.4
  • scoop install sudo
  • iex (new-object net.webclient).downloadstring('https://gist.githubusercontent.com/nilkesede/c98a275b80b6d373131df82eaba96c63/raw/apache-php-init.ps1')
  • sudo httpd -k install -n Apache2.4
  • sudo net start apache

A configuração do PHP através do arquivo php.ini deve ser feita dentro da pasta persist\php7.4 do scoop para que as modificações permaneçam inalteradas após atualizações do PHP.

Por padrão, o apache não  configurou o caminho do php.ini para a pasta persist, então, troque a linha

PHPIniDir "D:\Aplicativos\Scoop\apps\php7.4\current"

por

PHPIniDir "D:\Aplicativos\Scoop\persist\php7.4"

no httpd.conf de acordo com o caminho na sua máquina.

Dicas:

  1. é necessário reiniciar o Windows para receber as alterações  feitas no PATH do sistema durante o processo
  2. qualquer alteração em  httpd.conf ou php.ini, o serviço do apache deve ser reiniciado
  3. para ver algum erro de configuração no php, use o phpinfo e também o comando php -v no prompt
  4. inclua o caminho do php corrente no path do sistema (necessário para a carga das extensões). ex: D:\Aplicativos\Scoop\apps\php7.4\current
  5. carregue a extensão intl (necessária para o CodeIgniter)

Apache

Em httpd.conf da pasta persist, habilite o módulo rewrite e remove o comentário da linha

Include conf/extra/httpd-vhosts.conf

para habilitar a leitura dos hosts virtuais em httpd-hosts.conf da pasta persist.

Adicionar a linha abaixo no http.conf dentro de <IfModule dir_module>

 DirectoryIndex index.php

Exemplo de vhost para um projeto:

<VirtualHost *:80>
ServerAdmin rdconsolo@gmail.com

ErrorLog "D:\Projetos\logs\error_log"
CustomLog "D:\Projetos\logs\access_log" common

Alias "/project-root" "D:\Projetos\project-root\public"
<Directory "D:\Projetos\project-root">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted

RewriteEngine On
RewriteBase /project-root/index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</Directory>
</VirtualHost>

Scoop Installer

O Scoop Installer é um gerenciador de aplicativos para Windows nos moldes de um apt do Linux ou um brew do MacOS.

Esses gerenciadores permitem instalar, remover e atualizar aplicativos do sistema operacional pelo prompt de comando. Isso pode parecer “defasado” mas na verdade os benefícios sobre os instaladores tradicionais em modo gráfico são superiores como, por exemplo:

  • instalação sem passos
  • escolha de uma versão específica do aplicativo
  • velocidade de resposta
  • administração centralizada

Para saber como instalar e usar esse aplicativo, veja os docs em https://scoop-docs.vercel.app/docs

Alguns comando úteis:

  • scoop update
  • scoop update –all
  • scoop search <aplicativo>
  • scoop install <aplicativo>
  • scoop install <aplicativo>@<versão>
  • scoop list
  • scoop status
  • scoop bucket add <bucket>
  • scoop uninstall <aplicativo>

Buckets úteis:

  • extras
  • versions
  • php
  • nerd-fonts

O Scoop não remove automaticamente as versões anteriores dos aplicativos atualizados. Para fazer isso, execute o comando “scoop cleanup *”.

Para trocar a versão de um pacote quando mantiver mais de uma instalada, use o comando scoop reset <app>@<version>.

Prevenindo o kernel de atualizar no Ubuntu 20.04

Atualizações de kernel são bem-vindas por trazerem correções, melhorias e maior segurança mas, dependendo do hardware podem ocorrer incompatibilidades causando consequências indesejáveis.

Para manter uma versão de kernel que comprovadamente funciona no seu hardware, é possível travar o sistema de atualização para determinado pacote:

sudo apt-mark hold <linux-image>

Onde linux-image é o nome completo da imagem a ser mantida.

Para desmarcar e permitir a atualização, trocamos o comando para:

sudo apt-mark unhold <linux-image>

Para saber quais pacotes estão marcados um hold:

sudo apt-mark showhold

Permissões para pastas e arquivos do WordPress

Após uma instalação manual do WordPress onde baixamos o pacote e criamos um banco de dados vazio para o instalador gerar os dados, os comandos abaixo deixarão os direitos de acesso às pastas e arquivos da melhor forma possível considerando funcionalidade e segurança.

chown -R www-data:www-data .
find . -type f -exec chmod 644 {} +
find . -type d -exec chmod 755 {} +
mv wp-config-sample.php wp-config.php
chmod 640 wp-config.php

Após esses comandos podemos prosseguir com a instalação do WordPress alterando os dados de acesso ao banco de dados no arquivo wp-config.php.