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

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

 

Instalando o Bittorrent Sync no Ubuntu Server

Instalar o Bittorrent Sync no Ubuntu é bem simples.

O bom do Sync é poder manter os projetos sempre sincronizados entre os membros da equipe, principalmente quando algum deles não tem acesso à rede local do servidor, como um home office por exemplo ou em uma empresa que tem duas sedes, como a que trabalho.

Sem mais delongas…

Adicionando o repositório.

sudo add-apt-repository -y ppa:tuxpoldo/btsync

Instalando o Bittorrent Sync

sudo apt-get update; sudo apt-get -y install btsync

Após a instalação aparecerá uma tela de configuração.

Recomendo fortemente que você faça isso nesse momento ou terá que fazer de forma muito complicada depois de forma manual.

A tela será mais ou menos como essa:

configuração-do-sync-no-ubuntu-server

 

Após isso siga o “wizard” e complete a instalação com as configurações de sua preferência.

Se por acaso você cometer algum erro, a dica que dou é desinstalar e instalar novamente, já que ainda não começou a utilizar.

Depois disso acesse o endereço do servidor dele e comece a compartilhar:

http://127.0.0.1:8888/

Se estiver em outra maquina na mesma rede é só ajustar o IP de acorco com o necessário.

É isso.

Boa sorte!

Localizar e substituir em grandes arquivos com sed

Hoje precisei localizar e substituir todas as ocorrencias de uma string dentro de um arquivo muito grande de um dump de um banco de dados MySQL de uma loja magento que mudou de domínio. Normalmente eu fazia isso com o Notepad++ que tem o melhor desempenho nessa tarefa em comparação com outros editores como Sublime Text, Dreamweaver, Bloco de Notas, etc. Porém alguma coisa estava saindo errado no processo e eu não estava conseguindo importar o banco. E como o arquivo era muito pesado não tinha possibilidade de eu encontrar a linha com erro e corrigir.

Então encontrei um comando que substitui lá no linux, chamado sed. Isso salvou minha vida e do cliente que estava atendendo.

O comando é bem simples, no meu caso, como queria mudar um domínio por outro, o comando que executei foi:

$ sed -i 's/dominioantigo.com/novodominio.com/g' database.sql

Como é uma expressão regular, recomendo escapar todos os símbolos presentes na string. No meu caso como o único símbolo era um ponto, e mesmo ele sendo um coringa nas expressões regulares, não achei que poderia prejudicar e no fim deu tudo certo, mas o correto seria eu ter executado este comando:

$ sed -i 's/dominioantigo\.com/novodominio\.com/g' database.sql

É uma solução prática para muitas tarefas, mas acho que o que mais acontece por aí que exige essa tarefa é mudança de domínio.

Instalando e ativando a extensão PHP mCrypt no Ubuntu

Alguns frameworks como o Magento precisam dessa extensão.

Mãos à obra!

Obter permissões de root

sudo su

Instalando as bibliotecas necessárias

apt-get install php5-mcrypt

Ativando a extensão

php5enmod mcrypt

Reiniciando o apache

service apache2 restart

Feito!

Configurando IP estático no Ubuntu Server

Para configurar um endereço estático no servidor seguiremos os passos:

Obter privilégios de root:

sudo su

Abrir o arquivo interfaces com um editor:

vim /etc/network/interfaces

Troque o texto abaixo:

auto eth0
iface eth0 inet dhcp

Por:

auto eth0
iface eth0 inet static
dns-nameservers 8.8.8.8 8.8.4.4
address 192.168.25.50
netmask 255.255.255.0
network 192.168.25.0
broadcast 192.168.25.255
gateway 192.168.25.1

Os endereços acima são baseados na minha rede, que é 192.168.25.xxx.

Você deve fazer de acordo com a sua.

Reinicie a interface de rede:

/etc/init.d/networking restart

Testando:

ping www.google.com

É isso.

Boa sorte!

Instalando a biblioteca cURL do PHP no Ubuntu

Alguns frameworks como a API do Facebook, sistemas como o Magento e vários outros precisam de algumas bibliotecas.

Passos para instalação:

1 – Obter permissões de root

sudo su

2 – Instalando as bibliotecas necessárias

apt-get install curl libcurl3 libcurl3-dev php5-curl

3 – Reiniciando o apache

service apache2 restart

Habilitando o mod_rewrite no apache

Habilitar o modo rewrite é essencial para que o seu wordpress ou qualquer outro site funcione com a URL amigável.

Por exemplo, um wordpress sem a URL amigável ficaria assim:

www.seusite.com.br/?p=123

E com a URL amigável seria:

www.seusite.com.br/viajens

Isso além de ser melhor para o usuário, também ajuda muito na indexação do Google e outros mecanismos de buscas.

Então, mãos à obra!

Antes de tudo temos que ter permissão de administrador no linux.

Para isso, digite no terminal o seguinte comando:

sudo su

Então confirme sua senha e pronto.

Vamos agora, verificar se ele está instalado.

Se você instalou o apache2 pelo meu tutorial então você já tem esse módulo, mas vamos verificar mesmo assim.

Utilize o seguinte comando:

ls /usr/lib/apache2/modules/mod_rewrite.so

Se o arquivo existir, o nome dele será impresso logo abaixo do seu comando executado.

Se não existir dará uma mensagem que o arquivo não pode ser encontrado.

Mais ou menos assim:

ls: cannot access /usr/lib/apache2/modules/mod_rewrite.so1: No such file or directory

Habilitando o modo rewrite no apache2

Agora que sabemos que o módulo existe vamos liga-lo.

Execute o comando:

a2enmod rewrite

Você verá algo semelhante a isso:

Enabling module rewrite.
Run '/etc/init.d/apache2 restart' to activate new configuration!

Isso significa que já está habilitado.

O próximo passo é habilitar o modo rewrite no seu site, pois normalmente vem desativado.

Abra o arquivo 000-default.conf no seu editor de preferência e localize a configuração do site que você deseja ativar.

O arquivo fica em: /etc/apache2/sites-available/000-default.conf

Encontre DocumentRoot /var/www/html

E adicione logo abaixo:

<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>

Agora é só reiniciar o apache e tudo estará funcionando.

Execute o seguinte comando no seu terminal:

/etc/init.d/apache2 restart

Instalando um servidor SMTP no Linux (postfix)

O servidor SMTP é o servidor de e-mail.

A instalação do servidor SMTP é muito simples.

No terminal digite:

sudo apt-get install postfix

Quando ele te pedir uma senha você deve definir uma de sua preferência.

Depois disso ele concluirá a instalação.

Para futuras configurações no servidor SMTP apenas digite no terminal:

sudo dpkg-reconfigure postfix

E é isso, agora você já tem o servidor rodando no seu Linux.

Com isso você já poderá enviar e-mails utilizando a função mail() do php.

Se quiser configurar algum programa de e-mail para enviar usando seu servidor você deve configurar o programa para o IP ou domínio da sua máquina e usar a porta 25 que é a padrão.

Viu?! Foi rápido e fácil!

Como Importar e Exportar grandes bancos de dados no MySQL

Quando você não consegue fazer operações como exportar e importar arquivos no banco de dados pelo PHPMyAdmin por causa do tempo limite então o jeito é ir pelo comando mesmo.

No linux você faz isso com esses comandos:

  • Exportar:

mysqldump -uusuario_do_banco -psenha nome_do_banco > nomedoarquivo.sql

  • Importar:

mysql -uusuario_do_banco -psenha nome_do_banco < nomedoarquivo.sql

No WINDOWS os comandos são iguais, porém você precisa estar na pasta bin do seu mysql.

Caso use o EasyPHP por exemplo você precisa estar em C:\EasyPHP\mysql\bin\ quando usar o comando.

Permissão de arquivos (CHMOD)

Todo arquivo ou pasta tem seu conteúdo e seu nome visível para qualquer usuário.

Mas além disso eles tem um dono e permissões de arquivos que podem ser vistos nas propriedades do arquivo ou da pasta.

Uma outra forma de visualizar a permissão do arquivo é pelo FTP ou digitando o comando abaixo no terminla do seu Linux:

ls -l

Que teria mais ou menos esse resultado:

-rw-r–r– 1 surrealad surrealad 2267 2011-04-14 18:39 insertLogo.php
drwxr-xr-x 2 surrealad surrealad   69 2011-05-26 14:47 npub/
-rw-r–r– 1 surrealad surrealad 2749 2011-03-09 15:52 pictogramaBranco.png
-rw-r–r– 1 surrealad surrealad 2545 2011-03-09 15:52 pictogramaPreto.png

A primeira, a terceira e a quarta linha são arquivos e a segunda um diretórios. Sabemos disso pela letra d no começo da segunda linha.

Se fossemos ver esses arquivos no FTP eles teriam a permissão 755 para a pasta e 644 para os arquivos.

Isso porque no FTP a permissão é representada em números e no terminal do Linux ou SSH ela é representada em letras.

Essa representação da permissão é dividida em 3 partes que são:

1 – Permissão para o dono ou usuário
2 – Permissão para usuários do mesmo grupo
3 – Permissão para todos os usuários

Cada número (para o FTP) ou letra (para o terminal do Linux ou SSH) significa um tipo de permissão, que são:

0 : — (nenhuma permissão)
1 : –x (somente execução)
2 : -w- (somente escrita)
3 : -wx (escrita e execução)
4 : r– (somente leitura)
5 : r-x (leitura e execução)
6 : rw- (leitura e escrita)
7 : rwx (leitura, escrita e execução)

Algumas vezes, acontece de um usuário colocar permissão 777 para todos os arquivos e pastas de seu site e isso não é seguro.

A permissão 777 só deve ser utilizada em pastas que terão seu conteúdo alterado, como pastas de upload ou de cache por exemplo.

Utilizando de um bom cliente FTP como o FileZilla, você pode “rapidamente” corrigir isso, pois ele te dar a opção de aplicar a mesma permissão às subpastas e/ou arquivos das subpastas.

Já no linux isso é um pouco diferente, embora você possa diferenciar arquivos de pastas pelo comando o CHMOD não pode.

Para isso, você precisará da ajuda do comando find e do xargs.

Use este comando para mudar a permissão de todos os arquivos daquela pasta:

find -type f | xargs -i chmod 644 {}

Use esse comando para aplicar a permissão apenas para a pasta e as subpastas:

find -name '*' -type d | xargs -i chmod 755 {}

Basicamente é isso.

Já da pra brincar um pouco ou sair de uma furada.

Instalando o Apache2, PHP5, MariaDB (esqueça o MySQL), PHPMyAdmin no Ubuntu

O que vou ensinar aqui é tudo que você precisa pra montar um Web Server com o Ubuntu.

Estou usando sempre o Ubuntu nos meus tutoriais de Linux porque estou tendo meus primeiros contatos com o Linux agora e o Ubuntu é, se não o mais fácil, um dos mais faceis para os iniciantes.

Outra coisa, esse tutorial começa no terminal, então se nem no terminal você sabe chegar sugiro que dê uma navegada no “menu iniciar do seu Ubuntu.

Preparando o sistema

Primeiro vamos obter as permissões de administrador, que no Linux é conhecido como usuário root.

Para isso digite o comando abaixo e informe sua senha quando ele pedir:

sudo su

Agora vamos fazer um update das listas de aplicativos com o comando:

apt-get update

Em seguida vamos instalar o apache2

apt-get install -y apache2

Agora vamos instalar o PHP5 (PHP5 é a versão. Esse é o php que você conhece)

apt-get install -y php5

É bom instalar também algumas bibliotecas úteis do PHP, pois cedo ou tarde será necessário.

apt-get install -y php5-mhash php5-mcrypt php5-curl php5-cli php5-mysql php5-gd

Agora vamos instalar o MySQL

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

Falta pouco agora.

O Web Server já está basicamente pronto, mas seria bom adicionar um gerenciador para o banco de dados.

Para isso vamos instalar o PHPMyAdmin com o comando:

apt-get install -y phpmyadmin

Agora precisamos que o apache rode o phpmyadmin.

Para isso use o comando:

echo "Include /etc/phpmyadmin/apache.conf" >> /etc/apache2/apache2.conf

Ou se preferir, edite o arquivo com o editor do debian e insira a linha manualmente.

Agora basta reiniciar o apache2 para que tudo esteja pronto para funcionar.

/etc/init.d/apache2 restart

Certo, mas onde está aquela pasta www onde irei jogar os meus .php e fazer meu site?

Inicialmente a pasta fica em:

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

Em breve farei outro tutorial ensinando como mudar o local padrão da pasta www do apache2.

Abraços.

Talvez você também se interesse por:
Habilitando o mod_rewrite no apache
Instalando e ativando a extensão PHP mCrypt no Ubuntu
Instalando a biblioteca cURL do PHP no Ubuntu

Compactando/Descompactando arquivos no linux pelo terminal

Compactar e descompactar aquivos no linux pelo terminal pod ser um tanto quanto complicado, não pela complexidade dos comandos, mas pela diversidade deles já que cada tipo de arquivo tem uma forma diferente de fazer isso. Lembrando que se você não tiver alguma desses comandos disponíveis no seu Ubuntu, basta instalar os pacotes com o comando apt-get install, por exemplo pro zip seria:

apt-get install zip

Os comandos são:

  • .zip

Compactando:

zip -r nomedoarquivo.zip nome_do_arquivo_ou_pasta

Descompactando:

unzip nomedoarquivo.zip
  • .rar

Compactando:

rar a -r  nomedoarquivo.rar arquivo1 pasta1 arquivo2 pasta2

Descompactando:

rar x nomedoarquivo.rar
  • .tar

Compactando:

tar -zcvf nomedoarquivo.tar arquivo1 pasta1 arquivo2 pasta2

Descompactando:

tar -xvf nomedoarquivo.tar
  • .tar.gz

Compactando:

tar -czfv nomedoarquivo.tar.gz pasta1 arquivo1 pasta2 arquivo2

Descompactando:

tar -vzxf nomedoarquivo.tar.gz
  • .tar.bz2

Compactando:

tar -cjfv nomedoarquivo.tar.bz2 arquivo1 pasta1 arquivo2 pasta2

Descompactando:

tar -jxvf nomedoarquivo.tar.bz2

Reiniciando o som do Ubuntu sem reiniciar o sistema

As vezes o som do meu Ubuntu pára de funcionar e só volta quando eu reinicio.

Mas isso era antes de eu descobrir esse comando:

sudo alsa force-reload

Execute este comando no seu terminal que o som do seu Ubuntu voltará a funcionar num passe de mágicas.