Instalando o Apache2 (com mod rewrite), PHP7, MariaDB (esqueça o MySQL) e PHPMyAdmin no Ubuntu

A long time ago fiz um tutorial ensinando a realizar a instalação conjunto, também conhecido como LAMP (Linux, Apache, Mysql, PHP) no Ubuntu. Hoje volto para ensinar a instalar as versões mais recentes para ter seu Web Server mais seguro e com melhor desempenho.

Além dos itens já mencionados também instalaremos e ativaremos alguns modulos do Apache como o módulo de rewrite para URLs amigáveis e bibliotecas do PHP que são exigidos em diversos frameworks e soluções como o Magento por exemplo, que exige o mcrypt.

Preparando o sistema

Os primeiros passos todos sabem: obter permissões root e atualizar a lista de pacotes.

Pegando root, digite o comando abaixo e informe sua senha quando ele pedir:

sudo su

Atualizando a lista de pacotes:

apt-get update

Em seguida vamos instalar o apache2

apt-get install -y apache2

Vamos ativar o módulo de rewrite:

a2enmod rewrite

Agora vamos instalar o PHP

apt-get install -y php7.0

Vamos aproveitar o momento para instalar aqueles módulos que falei mais cedo.

apt-get install -y libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json php-memcached php7.0-dev php7.0-mcrypt php7.0-sqlite3 php7.0-mbstring

Agora vamos instalar o MariaDB

Essa é uma distribuição baseada no MySQL, porém com mais atualizações. Funciona do mesmo modo que o MySQL, não notei nenhuma diferença em sintaxes e outras funcionalidades. Pelo que pesquisei entendi que ele recebe mais atualizações de segurança e tem um desempenho melhor. Por que não?

apt-get install -y mariadb-server mariadb-client

Agora, vamos dar um pouco de segurança pra instalação do MariaDB, pois, assim como o MySQL, ela vem com algumas configurações padrão que são perigosas.

mysql_secure_installation

Falta pouco agora, vamos rodar o MySQL para poder instalar o PhpMyAdmin que por sua vez cria uma tabela e um usuário, por isso precisamos do serviço rodando.

service mysql start

Agora vamos instalar o PHPMyAdmin

apt-get install -y phpmyadmin

 

Por último, basta rodar o apache2 para que tudo esteja funcionando.

service apache2 start

O diretório padrão onde você vai colocar seus arquivos é:

[code]/var/www/html/[/code]

Observações

O Magento 1.9.x não é compatível com o PHP7.

Se estiver querendo instalar o LAMP por causa dele prefira seguir esse tutorial.

Abraços.

Git Push via SSH

Tutorial objetivo e rápido. Não entrarei em detalhes.

1 – Criar a chave SSH:

ssh-keygen -t rsa -b 4096 -C "[email protected]"

– Pode dar enter nas 3 perguntas sem responder nada.

2 – Adicionar ao ssh-agent:

ssh-add git-rsa

Se não funcionar use esse:

ssh-add ~/.ssh/id_rsa

Se também não funcionar é porque o ssh-agent está desativado. Ative com esse comando:

eval $(ssh-agent)

Depois tente o primeiro comando desse passo 2 novamente.

3 – Adicionar a chave nas configurações do seu github:
– Acesse https://github.com/settings/keys
– Clique em [New SSH Key]
– Digite um nome qualquer e cole no campo de texto o conteúdo do arquivo id_rsa.pub (que é sua chave pública)

4 – Configurando seu usuário e e-mail no git
Primeiro certifique-se de estar na pasta anterior à pasta do git

cd ~

Agora configure:

git config user.name "seu-usuario"
git config user.email "[email protected]"

Se der algum erro ao digitar esse comandos tente isso primeiro:

mkdir ~/.git

Depois tente configurar novamente.

5 – Testar a conexão

ssh -T [email protected]

Você deverá receber um aviso assim:
[code]Hi seu-usuario! You’ve successfully authenticated, but GitHub does not provide shell access.[/code]
Se for isso deu tudo certo.

6 – Clonar o repositório:

https://github.com/seu-usuario/seu-repositorio.git

7 – Se clonou por HTTPS (como fiz acima), você precisará configurar o git origin para ser SSH ou ele te pedirá pelo e-mail e senha.

git remote set-url origin [email protected]:seu-usuario/seu-repositorio.git

8 – Pronto, depois disso é o de sempre:

git add .
git commit -am "comentário"
git push origin

Postando em uma Página do Facebook com PHP (CURL)

Obs: Tem um vídeo no final do post onde ensino tudo isso.

Resolvi criar esse tutorial para ajudar pessoas que precisam publicar um texto ou link em uma página do Facebook.

Exemplo de utilização: você tem um site e quer que logo após postar uma notícia que ela seja seja compartilhada no Facebook em forma de link para trazer leitores pro seu site.

Minha motivação para esse tutorial foi que depois de perder horas pesquisando na internet e na documentação do Facebook, descobri que é simples fazer isso sem o SDK deles.

Primeiro, temos que pegar o token de acesso para o local em que desejamos postar, seja na timeline de uma pessoa ou de uma página.

Nesse exemplo vamos publicar em uma página, mas o procedimento para publicar em uma timeline de pessoa é ainda mais simples, abordarei isso rapidamente no vídeo do final.

Acessamos o seguinte link para pegar o token:

https://developers.facebook.com/tools/explorer/

Primeiro selecionamos o app que será utilizado.

Em seguida clicamos em “Get token” e depois em “Get user access token”, e na janela que se abre marcamos uma dessas opções: manage_pages e publish_stream.

Após marcar as opções clicamos em “Get Access Token”.

Nas telas seguintes autorize o que o Facebook perguntar.

Segundo passo é pegar o ID da página desejada.

Clique novamente no botão “Get Token” e note que agora ele mostra todas as páginas que você tem acesso, selecione a desejada e clique no botão azul Submit.

Isso exibirá o ID da página, copie ele e também o “Access Token” que fica no input acima (o access token tem validade curta, no vídeo ensino como pegar um de maior duração).

Com essas duas informações vamos ao código necessário:

Obs.: caso não tenha o CURL instalado, clique aqui.

<?php
$page_access_token = 'XXXXXXX';
$page_id = 'YYYYYYYY';

// E as informações do que será postado.
$data['picture'] = "http://www.exemplo.com/imagem.jpg";
$data['link'] = "http://www.seulink.com.br/";
$data['message'] = "Mensagem (opcional)";
$data['caption'] = "Legenda (opcional)";
$data['description'] = "Descrição do link (opcional)";

Na verdade todos os campos acima são opcionais desde que ou o link ou o message estejam presentes.

Para mais informações aqui está a documentação: https://developers.facebook.com/docs/reference/api/post/

Continuando…

$data['access_token'] = $page_access_token;
$post_url = 'https://graph.facebook.com/'.$page_id.'/feed';

// E pra finalizar fazemos o post para o Facebook:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $post_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$return = curl_exec($ch);
curl_close($ch);
?>

O retorno o ID do post que poderia ser utilizado para apaga-lo ou edita-lo ou um erro.

Espero que isso resolva o problema de muita gente, pois a documentação do Facebook é péssima quando você quer uma coisa mais prática, eles tentam sempre te empurrar o SDK, o que não é necessário para coisas simples como essa.

Links úteis:

 

Habilitando usuário root para o SSH no Ubuntu Server

Logado como root no terminal digite:

vi /etc/ssh/sshd_config

Adicione uma linha contendo “PermitRootLogin yes”. Talvez essa linha já exista e esteja comentada com um “#”. Nesse caso apenas remova o “#”.

Para entrar no modo de edição do vi basta teclar [a].

Ficaria assim:

# Authentication:
#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

Salve as alterações teclando nessa ordem: [esq][:][q][w][enter]

Agora vamos reiniciar:

shutdown -r now

Agora você pode se conectar como root pelo SSH.

Talvez te interesse: Configurando IP estático no Ubuntu Server

Referências:
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/V2V_Guide/Preperation_Before_the_P2V_Migration-Enable_Root_Login_over_SSH.html

Encontrando arquivos pela data no Linux

Há momentos em que você precisa encontrar arquivos no linux que foram criados ou modificados em um determinado intervalo de tempo.

Por exemplo, você tem aquele WordPress de um cliente que não costuma atualizar os plugins e o próprio WordPress e acaba sendo vítima daquele código malicioso que muitas vezes acaba gerando um alerta no Google e o site acaba bloqueado com aquele aviso vermelho quando você tenta editar.

Então você cadastra o site no Google Webmaster Tools e descobre quais arquivos estão infectados.

Mas acredite, isso é só o começo.

Além dessa ferramenta do Google e outras ferramentas não dizerem todos os arquivos infectados, eles normalmente não dizem como resolver.

Mas você é esperto, você tinha um backup do site sem os arquivos infectados.

Então você sobe os arquivos do backup substituindo todos os infectados e problema resolvido.

#SóQueNão!

É bem comum eles criarem novos arquivos infectados, pois esperam que a primeira coisa que o dono do site faça é jogar um backup lá.

Então qual a solução?

São várias, mas uma bem prática é o assunto desse artigo.

Vamos encontrar arquivos editados dentre um intervalo de datas, pois como você já identificou um ou mais arquivos, é bem provável que os outros sejam da mesma data.

Encontrando arquivos mais novos do que a data X (sempre no formato americano yyyy-mm-dd):

find ./ -newermt "2016-03-05"

Encontrando arquivos editados nos últimos 15 dias:

find ./ -mtime -15 -print

Lembrando que você pode procurar em tipos espefíficos de arquivos, como arquivos PHP, adicionando no comando:

-iname "*.php"

Então ficaria:

find ./ -iname "*.php" -mtime -15 -print

Encontrando arquivos do dia X ao dia Y:

find ./ -newermt "2016-02-04" -and -not -newermt "2016-03-03"

 

Referências:
http://www.cyberciti.biz/faq/howto-finding-files-by-date/
http://www.cyberciti.biz/faq/linux-unix-osxfind-files-by-date/
http://stackoverflow.com/questions/158044/how-to-use-find-to-search-for-files-created-on-a-specific-date