O Arch Linux oferece um ambiente de sistema flexível e de vanguarda e é uma poderosa solução mais adequada para o desenvolvimento de aplicações web em sistemas pequenos e não críticos devido ao fato de ser um completo Código Aberto e oferecer as últimas versões dos Kernels e softwares web para servidores e bancos de dados.

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

3. Instale a linguagem de script de lado do servidor 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 da comunidade do banco de dados (MariaDB), então 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 configurações padrão até o momento.
Passo 2: Segurançar o Banco de Dados MySQL
5. O próximo passo é segurar o banco de dados MySQL definindo uma senha para a conta root, removendo contas de usuários anônimos, removendo o banco de dados de teste e impedindo o 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 depois saia do shell do banco de dados com sair ou a instrução sair.
$ mysql -u root -p

Passo 3: Modificar o Arquivo de Configuração Principal do Apache
7. As seguintes configurações estão em sua maioria relacionadas ao Servidor Web Apache para fornecer uma interface dinâmica para Hospedagem Virtual com a linguagem de script PHP, Hosts Virtuais com SSL ou não e podem ser feitas através da modificação das configurações do arquivo do serviço httpd.
Primeiro 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 duas seguintes 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 configurações adicionais de todos os arquivos que residem em /etc/httpd/conf/sites-enabled/ (para Hospedagem Virtual) e /etc/httpd/conf/mods-enabled/ (para módulos de servidores ativados) caminhos do sistema que terminam com a extensão .conf.
8. Depois que o Apache foi 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 mantém todos os arquivos de configuração de Virtual Hosts que não estão ativados no Apache, mas o próximo script Bash usará este diretório para vincular e habilitar sites localizados lá.
Passo 4: Criar Comandos Apache a2ensite e a2dissite
9. Agora é hora de criar scripts Apache a2ensite e a2dissite que servirão como comandos para habilitar ou desabilitar o arquivo de configuração do Virtual Host. 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
Anexe 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. Após os arquivos serem criados, aloque 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 Virtual Hosts no Apache
11. O arquivo de configuração padrão do Virtual Host para o servidor web Apache no Arch Linux é fornecido pelo arquivo httpd-vhosts.conf localizado no caminho /etc/httpd/conf/extra/, mas se você tiver um sistema que utiliza muitos Virtual Hosts, pode ser muito difícil acompanhar quais sites estão ativados 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 o seu sistema fornecer muitos sites e o seu site tiver mais diretivas de configuração.
Usar os caminhos sites-available e sites-enabled simplifica muito o trabalho de ativar ou desativar sites, e também preserva todos os arquivos de configuração dos seus sites, mesmo que estejam ativados ou não.
No próximo passo, vamos construir o primeiro Virtual Host que aponta para o 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 for criado, ative-o e depois reinicie o daemon httpd para visualizar as alterações.
$ sudo a2ensite localhost $ sudo systemctl restart httpd

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

Passo 6: Habilitar SSL com Virtual Hosting no LAMP
SSL (Secure Sockets Layer) é um protocolo projetado para criptografar conexões HTTP em redes ou na Internet, permitindo que o fluxo de dados seja transmitido por um canal seguro usando chaves de criptografia simétrica / assimétrica e é fornecido no Arch Linux pelo pacote OpenSSL.
14. Por padrão, o módulo SSL não está habilitado no Apache no Arch Linux e pode ser ativado descomentando o módulo mod_ssl.so do arquivo de configuração principal httpd.conf e o arquivo Include httpd-ssl.conf localizado no caminho extra do httpd.
Para simplificar, 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
Anexe 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 aponte para o mesmo nome de localhost, mas usando configurações de servidor SSL desta vez, e mude ligeiramente seu nome para lembrar que se refere ao 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 de 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ê receberá alguns erros.
16. Para criar o arquivo de Certificado SSL necessário e Chaves, instale o pacote OpenSSL emitindo o comando abaixo.
$ sudo pacman -S openssl
17. Em seguida, crie o seguinte script Bash que cria e armazena automaticamente todos os seus Certificados Apache e Chaves em /etc/httpd/conf/ssl/ caminho do sistema.
$ sudo nano apache_gen_ssl
Adicione o conteúdo do arquivo a seguir, salve-o e torne 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 deseja 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 seu Certificado e Chaves executando o script. Forneça suas opções SSL e não se esqueça de que o nome do certificado e o Nome Comum correspondam ao seu domínio oficial ( FQDN ).
$ sudo ./apache_gen_ssl


Depois que o certificado e as chaves forem criados, não se esqueça de modificar as configurações de certificado e chaves do Virtual Host SSL para corresponder 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: Ativar 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 e procure 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] procure 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 as configurações, crie um arquivo PHP chamado info.php em seu DocumnetRoot (/srv/http/), em seguida, reinicie o Apache e aponte seu navegador para o arquivo info.php: https://localhost/info.php.
<?php phpinfo(); ?>
$ sudo systemctl restart httpd

É isso aí! Se tudo parecer como na imagem acima, você agora tem a linguagem de script server-side PHP habilitada no Apache e pode agora desenvolver websites 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 o terminal de comandos do MySQL e deseja um acesso remoto simples ao banco de dados MySQL fornecido por meio 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 os pacotes terem sido instalados, você precisa habilitar algumas extensões do PHP (mysqli.so, mcrypt.so – para autenticação interna) e você também pode habilitar outros módulos necessários para futuras plataformas de CMS, 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, pesquise e localize a declaraçã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 mudar o caminho DocumentRoot do Virtual Hosts de /srv/http/ para outro local, você também precisa adicionar o novo caminho aqui).

25. A última coisa que você precisa fazer para acessar a Interface Web do PhpMyAdmin é adicionar declarações Apache do PhpMyAdmin nos Virtual Hosts. Como medida de segurança, certifique-se de que a Interface Web do PhpMyAdmin só pode ser acessada localmente (ou pelo endereço IP do sistema) usando o protocolo HTTPS e não de outros Virtual Hosts diferentes. Portanto, abra seu arquivo Apache localhost-ssl.conf e, na parte inferior, antes da última declaraçã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 Apache e aponte seu navegador para o seguinte endereço e você deverá conseguir acessar a Interface Web PhpMyAdmin: https://localhost/phpmyadmin ou https://system_IP/phpmyadmin.

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

Passo 9: Habilitar o Sistema LAMP em Toda a Extensão
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, mas poderosa, rápida e robusta, com software de servidor de ponta para pequenos ambientes não críticos. Se ainda assim você insistir em utilizá-lo em um ambiente de produção ampliado, é importante ter bastante paciência e prestar atenção extra nas atualizações dos pacotes, além de fazer regularmente imagens de backup do sistema para uma rápida restauração em caso de falhas do sistema.