O Arch Linux oferece um ambiente de sistema cutting edge flexível e é uma solução poderosa mais adequada para o desenvolvimento de aplicações web em sistemas pequenos não críticos, devido ao fato de ser um completo Open Source e oferecer as últimas atualizações nos Kernels e softwares web para servidores e bancos de dados.

O principal objetivo deste tutorial é orientá-lo por meio de instruções passo a passo completas que, ao final, o levarão à instalação de uma das combinações de software mais utilizadas no Desenvolvimento Web: LAMP (Linux, Apache, MySQL/MariaDB e PHP/PhpMyAdmin) e apresentará algumas características agradáveis (scripts Bash rápidos e sujos) que não estão presentes em um sistema Arch Linux, mas podem facilitar a criação de vários Virtual Hosts, gerar Certificados SSL e Chaves necessárias para transações seguras de HTTP.
Requisitos
- Processo de instalação anterior do Arch Linux – pule a última parte com DHCP.
- Instalação anterior do LEMP no Arch Linux – apenas a parte de configurar Endereço IP estático e acesso remoto via SSH.
Passo 1: Instalar o Software Básico LAMP
1. Após a instalação mínima do sistema com endereço IP estático e acesso ao sistema remoto usando SSH, atualize seu Arch Linux usando o utilitário pacman.
$ sudo pacman -Syu
2. Quando o processo de atualização terminar, instale o LAMP peça por peça, primeiro instalando o Servidor Web Apache e iniciando/verificando cada processo de servidor de daemon.
$ sudo pacman -S apache $ sudo systemctl start httpd $ sudo systemctl status httpd

3. Instale a linguagem de script de servidor dinâmico PHP e seu módulo Apache.
$ sudo pacman -S php php-apache
4. No último passo, instale o banco de dados MySQL, escolha 1 bifurcação de banco de dados comunitário (MariaDB), em seguida, inicie e verifique o status do daemon.
$ sudo pacman -S mysql $ sudo systemctl start mysqld $ sudo systemctl status mysqld


Agora você tem o software LAMP básico instalado e iniciado com as configurações padrão até agora.
Passo 2: Proteger o Banco de Dados MySQL
5. O próximo passo é proteger o banco de dados MySQL configurando uma senha para a conta root, removendo contas de usuários anônimos, removendo o banco de dados de teste e proibindo login remoto para o usuário root (pressione a tecla [Enter] para a senha atual da conta root e responda com Sim em todas as perguntas de segurança).
$ sudo mysql_secure_installation


6. Verifique a conectividade do banco de dados MySQL executando o seguinte comando e saia do shell do banco de dados com sair ou comando exit.
$ mysql -u root -p

Passo 3: Modificar o Arquivo de Configuração Principal do Apache
7. As seguintes configurações estão na sua maioria relacionadas ao Servidor Web Apache para fornecer uma interface dinâmica para Hospedagem Virtual com a linguagem de script do PHP, Hosts Virtuais com ou sem SSL e podem ser feitas modificando as configurações do arquivo de serviço httpd.
Primeiramente, abra o arquivo de configuração principal do Apache com seu editor de texto favorito.
$ sudo nano /etc/httpd/conf/httpd.conf
No final do arquivo, adicione as seguintes duas linhas.
IncludeOptional conf/sites-enabled/*.conf IncludeOptional conf/mods-enabled/*.conf

O papel das declarações Incluir aqui é informar ao Apache que, a partir de agora, ele deve ler mais configurações de todos os arquivos que residem em /etc/httpd/conf/sites-enabled/ (para Hospedagem Virtual) e /etc/httpd/conf/mods-enabled/ (para módulos do servidor habilitados) que estão localizados em caminhos do sistema que terminam com a extensão .conf.
8. Após o Apache ter sido instruído com essas duas diretrizes, crie os diretórios do sistema necessários emitindo os seguintes comandos.
$ sudo mkdir /etc/httpd/conf/sites-available $ sudo mkdir /etc/httpd/conf/sites-enabled $ sudo mkdir /etc/httpd/conf/mods-enabled
O caminho sites-available contém todos os arquivos de configuração de Hosts Virtuais que não estão ativados no Apache, mas o próximo script Bash usará este diretório para vincular e habilitar sites que estão lá localizados.
Passo 4: Criar Comandos do Apache a2ensite e a2dissite
9. Agora é hora de criar os scripts do Apache a2ensite e a2dissite que servirão como comandos para habilitar ou desabilitar arquivos de configuração de Host Virtual. Digite o comando cd para retornar ao seu caminho de usuário $HOME e crie seus scripts bash a2eniste e a2dissite usando seu editor favorito.
$ sudo nano a2ensite
Adicione o seguinte conteúdo neste arquivo.
#!/bin/bash if test -d /etc/httpd/conf/sites-available && test -d /etc/httpd/conf/sites-enabled ; then echo "-------------------------------" else mkdir /etc/httpd/conf/sites-available mkdir /etc/httpd/conf/sites-enabled fi avail=/etc/httpd/conf/sites-available/$1.conf enabled=/etc/httpd/conf/sites-enabled site=`ls /etc/httpd/conf/sites-available/` if [ "$#" != "1" ]; then echo "Use script: n2ensite virtual_site" echo -e "\nAvailable virtual hosts:\n$site" exit 0 else if test -e $avail; then sudo ln -s $avail $enabled else echo -e "$avail virtual host does not exist! Please create one!\n$site" exit 0 fi if test -e $enabled/$1.conf; then echo "Success!! Now restart Apache server: sudo systemctl restart httpd" else echo -e "Virtual host $avail does not exist!\nPlease see avail virtual hosts:\n$site" exit 0 fi fi

Agora crie o arquivo de script bash a2dissite.
$ sudo nano a2dissite
Acrescente o seguinte conteúdo.
#!/bin/bash avail=/etc/httpd/conf/sites-enabled/$1.conf enabled=/etc/httpd/conf/sites-enabled site=`ls /etc/httpd/conf/sites-enabled` if [ "$#" != "1" ]; then echo "Use script: n2dissite virtual_site" echo -e "\nAvailable virtual hosts: \n$site" exit 0 else if test -e $avail; then sudo rm $avail else echo -e "$avail virtual host does not exist! Exiting" exit 0 fi if test -e $enabled/$1.conf; then echo "Error!! Could not remove $avail virtual host!" else echo -e "Success! $avail has been removed!\nsudo systemctl restart httpd" exit 0 fi fi

10. Depois que os arquivos forem criados, conceda permissões de execução e copie-os para um diretório executável $PATH para torná-los disponíveis em todo o sistema.
$ sudo chmod +x a2ensite a2dissite $ sudo cp a2ensite a2dissite /usr/local/bin/

Passo 5: Criar Hosts Virtuais no Apache
11. O arquivo de configuração padrão do Virtual Host para o servidor Apache no Arch Linux é fornecido pelo arquivo httpd-vhosts.conf localizado no caminho /etc/httpd/conf/extra/, mas se você tiver um sistema que use muitos Virtual Hosts, pode ser muito difícil acompanhar qual site está ativado ou não. Se você deseja desativar um site, você deve comentar ou excluir todas as suas diretivas e isso pode ser uma missão difícil se seu sistema fornecer muitos sites e seu site tiver mais diretivas de configuração.
O uso dos caminhos sites-available e sites-enabled simplifica bastante o trabalho de ativar ou desativar sites e também preserva todos os arquivos de configuração de seus sites, mesmo que estejam ativados ou não.
No próximo passo, vamos construir o primeiro Virtual Host que aponta para localhost padrão com o caminho padrão do DocumentRoot para servir arquivos de sites (/srv/http.
$ sudo nano /etc/httpd/conf/sites-available/localhost.conf
Adicione as seguintes diretivas do Apache aqui.
<VirtualHost *:80> DocumentRoot "/srv/http" ServerName localhost ServerAdmin [email protected] ErrorLog "/var/log/httpd/localhost-error_log" TransferLog "/var/log/httpd/localhost-access_log" <Directory /> Options +Indexes +FollowSymLinks +ExecCGI AllowOverride All Order deny,allow Allow from all Require all granted </Directory> </VirtualHost>

As declarações mais importantes aqui são as diretivas Port e ServerName, que instruem o Apache a abrir uma conexão de rede na porta 80 e redirecionar todas as consultas com o nome localhost para servir arquivos localizados no caminho /srv/http/.
12. Depois que o arquivo localhost foi criado, ative-o e então reinicie o daemon httpd para ver as alterações.
$ sudo a2ensite localhost $ sudo systemctl restart httpd

13. Em seguida, aponte seu navegador para http://localhost, se estiver executando do sistema Arch ou http://Arch_IP se estiver usando um sistema remoto.

Passo 6: Habilitar SSL com Hospedagem Virtual em LAMP
SSL (Secure Sockets Layer) é um protocolo projetado para criptografar conexões HTTP em redes ou na Internet, o que permite que o fluxo de dados seja transmitido por um canal seguro usando chaves de criptografia simétricas / assimétricas e é fornecido no Arch Linux pelo pacote OpenSSL.
14. Por padrão, o módulo SSL não está ativado no Apache no Arch Linux e pode ser ativado descomentando o módulo mod_ssl.so no arquivo de configuração principal httpd.conf e o arquivo Include httpd-ssl.conf localizado no caminho extra do httpd.
Mas para simplificar as coisas, vamos criar um novo arquivo de módulo para SSL no caminho mods-enabled e deixar o arquivo de configuração principal do Apache intocado. Crie o seguinte arquivo para o módulo SSL e adicione o conteúdo abaixo.
$ sudo nano /etc/httpd/conf/mods-enabled/ssl.conf
Adicione o seguinte conteúdo.
LoadModule ssl_module modules/mod_ssl.so LoadModule socache_shmcb_module modules/mod_socache_shmcb.so Listen 443 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 SSLPassPhraseDialog builtin SSLSessionCache "shmcb:/run/httpd/ssl_scache(512000)" SSLSessionCacheTimeout 300

15. Agora crie um arquivo de Virtual Host que aponta para o mesmo nome de localhost, mas usando configurações do servidor SSL desta vez, e altere ligeiramente seu nome para lembrá-lo de que se trata de localhost com SSL.
$ sudo nano /etc/httpd/conf/sites-available/localhost-ssl.conf
Adicione o seguinte conteúdo a este arquivo.
<VirtualHost *:443> DocumentRoot "/srv/http" ServerName localhost ServerAdmin [email protected] ErrorLog "/var/log/httpd/localhost-ssl-error_log" TransferLog "/var/log/httpd/localhost-ssl-access_log" SSLEngine on SSLCertificateFile "/etc/httpd/conf/ssl/localhost.crt" SSLCertificateKeyFile "/etc/httpd/conf/ssl/localhost.key" <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/srv/http/cgi-bin"> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-5]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog "/var/log/httpd/ssl_request_log" \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" <Directory /> Options +Indexes +FollowSymLinks +ExecCGI AllowOverride All Order deny,allow Allow from all Require all granted </Directory> </VirtualHost>

Além das diretivas Port e ServerName, outras diretivas importantes aqui são aquelas que apontam para o arquivo Certificado SSL e o arquivo de Chave SSL que ainda não foram criados, então não reinicie o Apache Web Server ou você terá alguns erros.
16. Para criar o arquivo de Certificado SSL e as Chaves necessárias, instale o pacote OpenSSL emitindo o comando abaixo.
$ sudo pacman -S openssl
17. Em seguida, crie o seguinte script Bash que automaticamente cria e armazena todos os seus Certificados e Chaves do Apache no caminho do sistema /etc/httpd/conf/ssl/.
$ sudo nano apache_gen_ssl
Adicione o seguinte conteúdo do arquivo e salve, tornando-o executável.
#!/bin/bash mkdir /etc/httpd/conf/ssl cd /etc/httpd/conf/ssl echo -e "Enter your virtual host FQDN: \nThis will generate the default name for Nginx SSL certificate!" read cert openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out $cert.key chmod 600 $cert.key openssl req -new -key $cert.key -out $cert.csr openssl x509 -req -days 365 -in $cert.csr -signkey $cert.key -out $cert.crt echo -e " The certificate "$cert" has been generated!\nPlease link it to Apache SSL available website!" ls -all /etc/httpd/conf/ssl exit 0

$ sudo chmod +x apache_gen_ssl
Se desejar que o script esteja disponível em todo o sistema, copie-o para um $PATH executável.
$ sudo cp /apache_gen_ssl /usr/local/bin/
18. Agora, gere o seu Certificado e suas Chaves executando o script. Forneça suas opções SSL e não se esqueça de que o nome do certificado e Nome Comum devem corresponder ao seu domínio oficial (FQDN).
$ sudo ./apache_gen_ssl


Depois que o certificado e as chaves tiverem sido criados, não se esqueça de modificar as configurações do certificado e das chaves do Virtual Host SSL para que correspondam ao nome deste certificado.
19. O último passo é ativar o novo Virtual Host SSL e reiniciar o servidor para aplicar as configurações.
$ sudo a2ensite localhost-ssl $ sudo systemctl restart httpd

É isso! Para verificar, abra o navegador e adicione o IP do Arch na URL usando o protocolo HTTPS: https://localhost ou https://system_IP.

Passo 7: Habilitar o PHP no Apache
20. Por padrão, o Apache serve apenas conteúdo de arquivos estáticos HTML no Arch Linux, sem suporte a linguagens de script dinâmicas. Para ativar o PHP, primeiro abra o arquivo de configuração principal do Apache, em seguida, pesquise e descomente a seguinte instrução LoadModule (php-apache não funciona com mod_mpm_event no Arch Linux).
$ sudo nano /etc/httpd/conf/httpd.conf
Usando [Ctrl]+[w], pesquise e comente a seguinte linha para ficar assim.
#LoadModule mpm_event_module modules/mod_mpm_event.so

21. Em seguida, crie um novo arquivo para o módulo PHP no caminho mods-enabled com o seguinte conteúdo.
$ sudo nano /etc/httpd/conf/mods-enabled/php.conf
Adicione exatamente o seguinte conteúdo (você deve usar mod_mpm_prefork).
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so LoadModule php5_module modules/libphp5.so Include conf/extra/php5_module.conf

22. Para verificar a configuração, crie um arquivo PHP chamado info.php no seu DocumnetRoot (/srv/http/), depois reinicie o Apache e aponte seu navegador para o arquivo info.php: https://localhost/info.php.
<?php phpinfo(); ?>
$ sudo systemctl restart httpd

É isso! Se tudo parecer com a imagem acima, agora você tem a linguagem de script de servidor PHP ativada no Apache e pode desenvolver sites usando CMS de código aberto como o WordPress, por exemplo.
Se você deseja verificar as configurações de sintaxe do Apache e ver uma lista de módulos carregados sem reiniciar o daemon httpd, execute os seguintes comandos.
$ sudo apachectl configtest $ sudo apachectl -M
Passo 8: Instalar e Configurar o PhpMyAdmin
23. Se você não domina a linha de comando do MySQL e deseja um acesso remoto simples ao banco de dados MySQL fornecido através de uma interface web, então você precisa do pacote PhpMyAdmin instalado em seu sistema Arch.
$ sudo pacman -S phpmyadmin php-mcrypt
24. Após a instalação dos pacotes, você precisa habilitar algumas extensões PHP (mysqli.so, mcrypt.so – para autenticação interna) e também pode habilitar outros módulos necessários para plataformas CMS futuras como openssl.so, imap.so ou iconv.so etc.
$ sudo nano /etc/php/php.ini
Localize e descomente as extensões acima.
extension=mcrypt.so extension=mssql.so extension=mysqli.so extension=openssl.so extension=iconv.so extension=imap.so extension=zip.so extension=bz2.so

Além disso, no mesmo arquivo, procure e localize a instrução open_basedir e adicione o caminho do sistema PhpMyAdmin (/etc/webapps/ e /usr/share/webapps/) para garantir que o PHP possa acessar e ler arquivos sob esses diretórios (Se você, também, alterar o caminho DocumentRoot do Virtual Host de /srv/http/ para outra localização, você precisa adicionar o novo caminho aqui também).

25. A última coisa que você precisa fazer para acessar a Interface Web do PhpMyAdmin é adicionar as declarações PhpMyAdmin Apache nos Virtual Hosts. Como medida de segurança, certifique-se de que a Interface Web do PhpMyAdmin só seja acessível a partir do localhost (ou endereço IP do sistema) usando o protocolo HTTPS e não de outros Virtual Hosts diferentes. Portanto, abra o arquivo Apache localhost-ssl.conf e, na parte inferior, antes da última instrução , adicione o seguinte conteúdo.
$ sudo nano /etc/httpd/conf/sites-enabled/localhost-ssl.conf
Alias /phpmyadmin "/usr/share/webapps/phpMyAdmin" <Directory "/usr/share/webapps/phpMyAdmin"> DirectoryIndex index.html index.php AllowOverride All Options FollowSymlinks Require all granted </Directory>

26. Em seguida, reinicie o daemon do Apache e aponte seu navegador para o seguinte endereço e você deve conseguir acessar a Interface Web do PhpMyAdmin: https://localhost/phpmyadmin ou https://system_IP/phpmyadmin.

27. Se, depois de fazer login no PhpMyAdmin, você ver um erro na parte inferior referente a um blowfish_secret, abra e edite o arquivo /etc/webapps/phpmyadmin/config.inc.php e insira uma sequência aleatória como a que está na seguinte instrução, em seguida atualize a página.
$cfg['blowfish_secret'] = ‘{^QP+-(3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V’ ;

Passo 9: Habilitar o Sistema LAMP em Todo o Sistema
28. Se você deseja que o conjunto LAMP seja iniciado automaticamente após a reinicialização do sistema, execute os seguintes comandos.
$ sudo systemctl enable httpd mysqld

Estas são algumas das principais configurações no LAMP necessárias para transformar um sistema Arch Linux em uma plataforma web simples, porém poderosa, rápida e robusta, com software de servidor de última geração para ambientes pequenos e não críticos. Mas se você for teimoso e ainda quiser usá-lo em um ambiente de produção grande, você deve se armar com muita paciência e prestar muita atenção nas atualizações dos pacotes e fazer imagens regulares de backup do sistema para uma rápida restauração em caso de falhas no sistema.