Servidor Web: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
Sem resumo de edição
 
(118 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 32: Linha 32:


==Configuração do Apache no Ubuntu==
==Configuração do Apache no Ubuntu==
===Organização dos arquivos===


O '''apache''' é um aplicativo modular e se limita a executar a tarefa de entregar '''páginas HTML''' ou outros tipos de arquivos a clientes. Qualquer outra tarefa é executada por módulos externos.
O '''apache''' é um aplicativo modular e se limita a executar a tarefa de entregar '''páginas HTML''' ou outros tipos de arquivos a clientes. Qualquer outra tarefa é executada por módulos externos.
Linha 39: Linha 37:
Por exemplo, para acesso a uma '''página PHP''', o servidor apache repassa a requisição para o módulo '''mod_php''', que aciona o '''interpretador PHP''' que processa a página e entrega ao apache para este entregar ao cliente <ref name=MORIMOTO>MORIMOTO, C. E. Seridores Linux: Guia prático, Sul Editores, Porto Alegre, 2013.</ref>.
Por exemplo, para acesso a uma '''página PHP''', o servidor apache repassa a requisição para o módulo '''mod_php''', que aciona o '''interpretador PHP''' que processa a página e entrega ao apache para este entregar ao cliente <ref name=MORIMOTO>MORIMOTO, C. E. Seridores Linux: Guia prático, Sul Editores, Porto Alegre, 2013.</ref>.


;Arquivos de configuração: Os arquivos de configuração do '''apache''' também são modulares e estão organizados dentro do diretório '''/etc/apache2''':
===Arquivos de configuração===
Os arquivos de configuração do '''apache''' também são modulares e estão organizados dentro do diretório '''/etc/apache2''':
  /etc/apache2/
  /etc/apache2/
  |-- apache2.conf
  |-- apache2.conf
Linha 57: Linha 56:
*O diretório '''conf-available''' contem a configuração de fragmentos globais do apache.
*O diretório '''conf-available''' contem a configuração de fragmentos globais do apache.


===Sites hospedados===
==Sites hospedados==
===Configuração default===
Quando o '''apache''' é instalado é criado o arquivo '''/etc/apache2/sites-available/000-default.conf''' que contém a configuração de um '''site padrão'''. Este site usa o diretório '''/var/www/html''' para armazenar as '''páginas Web''', sendo o arquivo '''index.html''' a página base do site.


;Configuração default: Quando o '''apache''' é instalado é criado o arquivo '''/etc/apache2/sites-available/000-default.conf''' que contém a configuração de um '''site padrão'''. Este site usa o diretório '''/var/www/html''' para armazenar as '''páginas Web''', sendo o arquivo '''index.html''' a página base do site.
Se o '''servidor Web''' vai armazenar um único site, esta configuração é suficiente.


:Se o '''servidor Web''' vai armazenar um único site, esta configuração é suficiente.
===Hospedagem de vários sites===
O '''apache''' pode armazenar vários sites simultaneamente, cada um representado por um arquivo de configuração no diretório '''sites-available'''.  


====Hospedagem de vários sites====
====Configuração de sites compartilhado o endereço IP do hospedeiro====
O '''apache''' pode armazenar vários sites simultaneamente, cada um representado por um arquivo de configuração no diretório '''sites-available'''.  
Para cada site cria-se um '''arquivo de configuração''', por exemplo '''redes30.conf''', e armazena o mesmo no diretório '''sites-available'''.  


Para cada site cria-se um '''arquivo de configuração''', por exemplo '''redes10.conf''', e armazena o mesmo no diretório '''sites-available'''. O conteúdo do arquivo contém as seguintes informações básicas:
O conteúdo do arquivo contém as seguintes informações básicas:
<VirtualHost *:80>  
<syntaxhighlight lang="Apache">
  #Endereço IP e porta de escuta
<VirtualHost *:80>  
  #Endereço IP e porta de escuta
   
   
  ServerName www.redes10.edu.br
  ServerName www.redes30.edu.br
  # O nome de servidor
  # O nome de servidor
   
   
  ServerAdmin webmaster@redes10.edu.br
  ServerAdmin webmaster@redes30.edu.br
  #Administrador do site
  #Administrador do site
   
   
  DocumentRoot /var/www/html/redes10
  DocumentRoot /var/www/html/redes30
  # Diretório onde estão os documentos desse site
  # Diretório onde estão os documentos desse site
   
   
  <Directory /var/www/html/redes10>
  <Directory /var/www/html/redes30>
    Options Indexes
    Options Indexes
    DirectoryIndex index.html index.php
    DirectoryIndex index.html index.php
    order allow,deny
    order allow,deny
    allow from all
    allow from all
  </Directory>
  </Directory>
   # As restrições de acesso aos documentos
   # As restrições de acesso aos documentos  
   
</VirtualHost>
</VirtualHost>
</syntaxhighlight>
 
Usando no arquivo de configuração o cabeçalho '''<VirtualHost *:80>''',  com um '''asterisco''' ('''*''') no lugar do endereço IP, todos os sites hospedados terão como endereço de busca o mesmo '''endereço IP''' da '''máquina hospedeira'''. Cada site será buscado em função do parâmetro '''ServerName''' indicado no arquivo de configuração.
 
====Conteúdo de cada site====
 
A página de '''conteúdo html''' de cada site deve ser alocada no diretório criado para o site, por exemplo, '''/var/www/html/redes30''', com um arquivo '''index.html''' específico.
 
===Sites com Endereços IP específicos===
Cada site também pode ser cadastrado um '''endereço IP específico'''. Neste caso, o IP específico do site deve também ser atribuído ao hospedeiro, o qual, portanto, responderá a mais de um endereço IP.


====Endereços IP dos sites====
;Atribuindo outro endereço IP ao hospedeiro: Criar um endereço '''[http://200.17.101.9/wiki/index.php/Rede_e_Roteamento#IP_alias IP alias]''' para cada site, por exemplo (verificar o endereçamento de rede utilizado pelo servidor):
Para cada site pode ser cadastrado um '''endereço IP específico''' ou todos os sites podem '''compartilhar o mesmo endereço IP''' da máquina onde está instalado o servidor.
ifconfig eth0:0 192.168.71.230 netmask 255.255.254.0


;Endereço IP específico para cada site: Criar um endereço '''[http://200.17.101.9/wiki/index.php/Rede_e_Roteamento#IP_alias IP alias]''' para cada site, por exemplo:
Incluir no '''arquivo de configuração''' do site o '''endereço IP''' correspondente e a porta:
ifconfig eth0:0 192.168.100.10 netmask 255.255.255.0
<syntaxhighlight lang="Apache">
:Incluir no '''arquivo de configuração''' do site o '''endereço IP''' correspondente e a porta:
VirtualHost 192.168.71.230:80>  
<VirtualHost 192.168.100.10:80>  
  #Endereço IP e porta de escuta
  #Endereço IP e porta de escuta
  ...
...
   
   
</VirtualHost>
</VirtualHost>
</syntaxhighlight>
 
===Resolução de Nomes (DNS)===


;Endereço IP compartilhado: Usar no arquivo de configuração como endereço IP o '''asterisco''' ('''*'''), como mostrado na configuração exemplo anterior.
Tanto no caso de utilizar '''endereço IP específico''' ou '''endereço IP compartilhado''' para cada site, um '''servidor DNS''' é necessário para resolver o '''nome do site''' para ter acesso as páginas Web.  


Em ambos os casos um '''servidor DNS''' é necessário para resolver o '''nome do site''' para ter acesso as páginas Web.  
:No caso do uso de '''endereços IP compartilhados''', todas as consultas ao '''servidor DNS''', para os vários sites hospedados, vão apontar para o mesmo endereço IP. Neste caso, a '''mensagem de requisição HTTP''', montada pelo cliente, vai incluir o '''nome do site''' que o Apache possa fornecer a página correta.


Para fins de teste, uma alternativa é incluir o '''nome dos sites''' que queremos acessar no arquivo '''/etc/hosts''', por exemplo:
;Arquivo /etc/hosts: Para fins de testes, uma alternativa é incluir o '''nome dos sites''' que queremos acessar no arquivo '''/etc/hosts''' de cada cliente, por exemplo:
  192.168.100.10   www.redes10.edu.br
  192.168.71.230   www.redes30.edu.br


====Habilitação dos sites====
===Habilitação dos sites===


Para tornar o site disponível, cria-se um '''link''' do arquivo de configuração para o diretório  '''sites-enabled''', como por exemplo:
Para tornar o site disponível, cria-se um '''link''' do arquivo de configuração para o diretório  '''sites-enabled''', como por exemplo:
  ln -s /etc/apache2/sites-available/redes10.conf /etc/apache2/sites-enabled/redes10.conf
  ln -s /etc/apache2/sites-available/redes30.conf /etc/apache2/sites-enabled/redes30.conf
:Caso se desejar tornar o site indisponível, sem remover a configuração, apenas se apaga o link simbólico.
:Caso se desejar tornar o site indisponível, sem remover a configuração, apenas se apaga o link simbólico.


Os comandos '''a2ensite''' e '''a2dissite''' ativam e desativam os links de forma automática, por exemplo  <ref name=MORIMOTO/>:
Os comandos '''a2ensite''' e '''a2dissite''' ativam e desativam os links de forma automática, por exemplo  <ref name=MORIMOTO/>:
  a2ensite redes10.conf
  sudo a2ensite redes30.conf
:(ativa)
:(ativa)
:ou  
:ou  
  a2dissite redes10.conf
  sudo a2dissite redes30.conf
:(desativa)
:(desativa)


Depois de modificada a configuração, reiniciar o servidor apache:
Depois de modificada a configuração, reiniciar o servidor apache:
  service apache2 restart
  sudo systemctl reload apache2


====Exercício 1====
====Exercício 1====
Criar '''sites virtuais''' para armazenar no servidor '''apache''', para tal realize os seguintes procedimentos:
Criar '''sites virtuais''' para armazenar no servidor '''apache''', utilizando '''IP compartilhados''' para dois sites e '''IP específicos''' (IP alias) para um site. Para tal realize os seguintes procedimentos:
*Crie pelo menos dois '''IP alias''' para responder pelos sites.
*Crie pelo menos um '''IP alias''' para o site com '''IP específico'''.
*Crie '''arquivos de configuração''' para os sites.
*Crie '''arquivos de configuração''' para os três sites.
*Crie '''diretórios''' para armazenar as páginas dos sites no diretório '''/var/www/html/'''.
*Crie '''diretórios''' para armazenar as páginas dos sites no diretório '''/var/www/html/'''.
*Crie '''paginas HTML''' e salve nos diretórios do site correspondente, cada uma com o nome '''index.htlm'''.
*Crie '''paginas HTML''' e salve nos diretórios do site correspondente, cada uma com o nome '''index.html'''.
*Testar o acesso ao servidor Web usando o endereço IP dos sites a partir de um '''navegador'''.
*Testar o acesso ao servidor Web usando o endereço IP dos sites a partir de um '''navegador'''.
Para ter acesso as páginas Web a partir do '''nome do site''' seria necessário um '''servidor DNS''', entretanto, para fins de teste, podemos incluir o nome dos sites que queremos acessar no arquivo '''/etc/hosts''', para tal:
Para ter acesso as páginas Web a partir do '''nome do site''' seria necessário um '''servidor DNS''', entretanto, para fins de teste, podemos incluir o nome dos sites que queremos acessar no arquivo '''/etc/hosts''' em uma '''máquina virtual''', para tal:
*Edite o arquivo '''/etc/hosts''' e acrescente linhas com o nome dos sites, por exemplo:
*Edite o arquivo '''/etc/hosts''' e acrescente linhas com o nome dos sites, por exemplo:
  192.168.100.10   www.redes10.edu.br
  192.168.71.230   www.redes30.edu.br
;Dicas: Para não haver conflito de endereços IP entre as diversas equipes, utilizar a rede 192.168.100.0/24 e utilizar faixas específicas de IP para cada grupo.
;Dicas: Para não haver conflito de endereços IP entre as diversas equipes, utilizar a rede 192.168.70.0/23 e utilizar faixas específicas de IP para cada grupo.
:Compartilhar entre os grupos os endereços IP e nomes dos sites para testar acesso aos servidores dos demais colegas.
:Compartilhar entre os grupos os endereços IP e nomes dos sites para testar acesso aos servidores dos demais colegas.


===Módulos===
==Módulos==
A configuração dos '''módulos''' também é realizada em dois diretórios separados:
A configuração dos '''módulos''' também é realizada em dois diretórios separados:
*'''mods-available''', que contém a configuração e os scripts de inicialização dos módulos disponíveis;
*'''mods-available''', que contém a configuração e os scripts de inicialização dos módulos disponíveis;
Linha 161: Linha 175:


Para fins de teste, uma página pode ser criada com o comando:
Para fins de teste, uma página pode ser criada com o comando:
  echo "Oi! Eu sou $USER. Esta é minha página Web!" > ~/public_html/index.html
  echo "Oi! Eu sou $USER. Esta eh minha pagina Web!" > ~/public_html/index.html
:Ajustar as permissões para o arquivo para 0755.
:Ajustar as permissões para o arquivo para 0755.


Linha 171: Linha 185:


O  '''módulo SSL''' vem disponível com a instalação do '''apache''', mas deve ser habilitado com o comando:
O  '''módulo SSL''' vem disponível com a instalação do '''apache''', mas deve ser habilitado com o comando:
  a2enmod ssl
  sudo a2enmod ssl
Em seguida o '''apache''' deve ser reiniciado
Em seguida o '''apache''' deve ser reiniciado
  service apache2 restart
  sudo service apache2 restart


O '''servidor apache com suporte SSL''' escuta na '''porta 443'''.
O '''servidor apache com suporte SSL''' escuta na '''porta 443'''.


====Exercício 3====
===Cerfiticados SSL===
Criar e testar a hospedagem de páginas trocadas com HTTPS.
Para o funcionamento das '''páginas seguras''' é necessário um '''certificado SSL'''.
 
Os '''certificados SSL''' são validados por '''entidades certificadoras'''  (''Certificate Authority''), que são independentes e tem confiança reconhecida mundialmente, os navegadores já sabem de sua existência e por isto confiam nos certificados que são emitidos por essas entidades.
 
====Certificado Auto Assinado====
 
Para fins de testes, é possível gerar um '''certificado auto assinado''' ('''''self-signed''''') onde o próprio servidor Web faz o papel de entidade certificadora. Entretanto, os clientes receberão um aviso que o '''certificado não é reconhecido''' por uma '''unidade certificadora'''.
 
Para sites comerciais, é necessário que o certificado seja certificado por uma '''unidade certificadora'''.
 
;Geração de Certificado Auto Assinado ('''''self-signed'''''):
 
Instalar o OpenSSL, que é uma implementação de código aberto dos protocolos SSL e TLS:
sudo apt-get install openssl
 
Gerar um certificado SSL auto-assinado com o comando <ref NAME=digitalocean>https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-20-04-pt</ref>:
 
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
 
Depois de inserir o comando, você será levado a um ''prompt'' onde você pode inserir informações sobre seu site.
 
O comando gera as '''chaves de autenticação privada''' e o '''certificado''' por meio dos arquivos '''.key''' e '''.crt''', os quais são armazenados no diretório '''/etc/ssl'''.
 
Veja detalhes sobre o comando em <ref NAME=digitalocean/>.
 
===Habilitação do HTTPS no VirtualHost===
 
O próximo passo é habilitar o HTTPS no '''VirtualHost''' no qual ele será utilizado.
*Editar a configuração do '''VirtualHost''' correspondente no arquivo '''/etc/apache2/sites-available'''
*Duplicar o conteúdo da seção '''<VirtualHost *:80>''' para uma nova seção '''<VirtualHost *:443>''' e acrescentar as linhas mostradas abaixo no final da seção:
 
<syntaxhighlight lang="Apache">
<VirtualHost *:80>
...
</VirtualHost>
 
<VirtualHost *:443>
...
 
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
 
</VirtualHost>
</syntaxhighlight>
 
===Redirecionamento HTTP para HTTPS===
 
As requisições HTTPS são direcionadas a porta 443 do servidor, entretanto é possível responder a uma requisição HTTP na porta 80, utilizando SSL com tráfego criptografado, através do redirecionamento da porta 80 para 443.
 
Para isto, é necessário criar uma configuração para o site a ser redirecionado dentro do diretório
/etc/apache2/sites-available/
como segue <ref NAME=digitalocean/>
<syntaxhighlight lang="Apache">
<VirtualHost *:80>
    ServerName your_domain_or_ip
    Redirect / https://your_domain_or_ip/
</VirtualHost>
</syntaxhighlight>
 
===Exercício 3===
#Criar e testar a hospedagem de páginas trocadas com '''HTTPS''', utilizando um '''certificado próprio''' (''self-signed'').
#Testar a '''criptografia''' do protocolo HTTPS utilizando o '''Wireshark''' para '''capturar pacotes''' de uma troca de mensagens '''HTTP''' e de uma troca de mensagens '''HTTPS'''.
 
==Cotas em disco para Servidores Web==
 
As '''[[Cotas em disco]]''' são um recurso importante para disciplinar o uso do espaço em disco disponível para cada '''VirtualHost''' disponibilizar as conteúdo na Web.
 
Para tal, as cotas em disco devem ser ativadas para os administradores dos VirtualHosts e aplicadas no diretório /var/www/html, ou no diretório na qual o conteúdo Web ficará armazenado.


==Suporte a PHP==
==Suporte a PHP==
Linha 189: Linha 271:
As páginas '''.html''' geradas pelo '''interpretador PHP''' são descartadas depois de entregues ao cliente. A cada nova requisição elas são processadas novamente. Dependendo da complexidade do código, as páginas PHP podem ser bastante pesadas. Para sites com grande número de acessos a configuração do servidor deve ser robusta para não tornar o serviço lento.
As páginas '''.html''' geradas pelo '''interpretador PHP''' são descartadas depois de entregues ao cliente. A cada nova requisição elas são processadas novamente. Dependendo da complexidade do código, as páginas PHP podem ser bastante pesadas. Para sites com grande número de acessos a configuração do servidor deve ser robusta para não tornar o serviço lento.


;Instalação do PHP: No Ubuntu o PHP é instalado através do pacote:
;Instalação do PHP: No Ubuntu o PHP é instalado através dos pacotes:
  apt-get install php5
  sudo apt install php libapache2-mod-php php-mysql
:Depois é necessário instalar o módulo do Apache para trabalhar com PHP:
 
  apt-get install libapache2-mod-php5
Verificação da versão:
  php -v


:O '''apache''' deve ser reiniciado
:O '''apache''' deve ser reiniciado
  service apache2 restart
  sudo systemctl restart apache2


;Teste do PHP: Para fins de teste, um arquivo PHP pode ser criado '''/var/www/html/info.php''' com o conteúdo:
;Teste do PHP: Para fins de teste, um arquivo PHP pode ser criado '''/var/www/html/info.php''' com o conteúdo:
Linha 208: Linha 291:
Testar o acesso as páginas PHP em um navegador.
Testar o acesso as páginas PHP em um navegador.


==Suporte ao MySQL==
==Suporte ao Banco de Dados SQL==
O '''MySQL''' é um '''banco de dados''' que pode ser acessado a partir de um script '''PHP'''.
O '''MariaDB''' é um banco de dados '''SQL''' que pode ser acessado a partir de um script '''PHP'''.
 
O banco de dados '''MariaDB''' teve origem de um ''fork'' do banco de dados '''MySQL''', visando assegurar que sua base de dados seja livre para sempre. O '''MySQL''' hoje é mantido pela Oracle.
 
;Instalação do MariaDB:
  sudo apt-get install mariadb-server mariadb-client
 
:Verificar o status do banco de dados:
sudo systemctl status mysql
 
===Administração do banco de dados MySQL===
 
A forma elementar de administrar o '''MariaDB''' é a partir do prompt de comandos:
sudo mysql -u root -p
 
;Criação do banco de dados: Realizada no prompt do MariaDB:
CREATE DATABASE testedb;
 
;Senha: O '''MariaDB''' possui um usuário padrão chamado '''root''' que tem acesso completo ao banco de dados e é usado para a configuração do sistema. Inicialmente este usuário não tem senha, mas depois de iniciado deve-se, por segurança, definir uma senha com o comando:
sudo mysqladmin -u root password SENHA
 
<!--;phpMyAdmin: A administração do banco de dados MySQL pode ser realizada com aplicativos Web, como o '''phpMyAdmin''', o qual pode ser instalado com o comando:
sudo apt-get install phpmyadmin-->
exit
 
==MediaWiki==
O MediaWiki é um programa gratuito para disponibilização de conteúdo na Internet <ref> https://www.mediawiki.org/wiki/MediaWiki</ref>.
 
O MediaWiki usa PHP para processar e apresentar dados disponíveis na sua base de dados MariaDB.
 
As páginas no MediaWiki usam formatação WikiTexto, para que usuários sem conhecimento de HTML ou CSS possam editá-las facilmente.
 
;Download: O MediaWiki pode ser baixado no endereço https://www.mediawiki.org/wiki/Download.
 
:Download via terminal:
<!--wget https://releases.wikimedia.org/mediawiki/1.33/mediawiki-1.33.1.tar.gz
wget https://releases.wikimedia.org/mediawiki/1.35/mediawiki-1.35.2.tar.gz-->
wget https://releases.wikimedia.org/mediawiki/1.38/mediawiki-1.38.4.tar.gz


Um servidor '''Apache''' com suporte ao '''PHP''' e acesso ao banco de dados '''MySQL''' é conhecido como '''servidor LAMP''' ('''[https://help.ubuntu.com/community/ApacheMySQLPHP Linux/Apache/MySQL/PHP]''').
===Instalação do MediaWiki===


;Instalação do MySQL:
;Preliminares:
  apt-get install mysql-server
*Instalação do '''PHP'''
<!--:Instalar os módulos:
*:Pacotes adicionais para Wiki e ativação dos módulos no PHP:
  apt-get install libapache2-mod-auth-mysql php5-mysql-->
  sudo apt install php-mbstring php-xml
:Reiniciar o apache:
sudo phpenmod mbstring
  service apache2 restart
sudo phpenmod xml
*Instalação do banco de dados '''MariaDB'''
*:Criação da '''base de dados''' e '''usuário''' para a Wiki:
  sudo mysql -u root -p
CREATE DATABASE wikidb;
CREATE USER 'wikiuser'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON wikidb.* TO 'wikiuser'@'localhost' WITH GRANT OPTION;
  exit


Depois de instalado deve-se criar a '''base de dados''' MySQL com o comando:
;Descompactar arquivo baixado:
  mysql_install_db
  tar xvzf mediawiki-*.tar.gz


O passo seguinte é ativar o servidor:
;Copiar conteúdo descompactado para:
  /etc/init.d/mysql start
  /var/www/html/wiki


;Senha: O MySQL possui um usuário padrão chamado '''root''' que tem acesso completo ao banco de dados e é usado para a configuração do sistema. Inicialmente este usuário não tem senha, mas depois de iniciado deve-se, por segurança, definir uma senha com o comando:
;Acessar pelo navegador:
mysqladmin -u root password SENHA
http://localhost/wiki/index.php
:Verificar a configuração e possíveis pendências.


;Administração do banco de dados MySQL: A forma elementar de administrar o MySQL é a partir do prompt de comandos:
;Realizar a configuração da Wiki: Realizar as configurações locais da Wiki.
mysql -u root -p
:Atenção ao nome do banco de dados MariaDB e dos nomes de usuário e senhas que foram utilizados na do banco de dados.


A administração do banco de dados MySQL pode ser realizada com aplicativos Web, portanto, pesquise outras referências para instalar suporte para administrar o MySQL.
LocalSettings.php
:Deve ser copiado para o diretório principal da Wiki:
/var/www/html/wiki


==Apache Tomcat==
===Backup WIKI===
 
MediaWiki armazena dados importantes em dois lugares:
#'''Banco de dados''': Páginas e seus conteúdos, usuários e suas preferências, metadados, índices de pesquisa, etc.
#'''Sistema de arquivos''': Arquivos de configuração do software, interfaces personalizadas (skins), extensões, imagens, etc.
 
;Backup do Banco de Dasos:
mysqldump -h localhost -u root -p --default-character-set=binary wikidb > backup.sql
 
;Recuperação do Banco de Dados:
mysql -u root -p wikidb < backup.sql
 
;Backup do Sistema de Arquivos:
*Arquivos de upload:
:Backup:
tar zcvhf wikidata.tgz /var/www/http/wiki/images
:Recuperação:
tar -zxvf wikidata.tgz
*Extensões:
:Backup:
tar zcvhf wikiextentions.tgz /var/www/http/wiki/extensions
:Recuperação:
tar -zxvf wikiextentions.tgz
*Arquivo de configuração:
LocalSettings.php
 
<!--==Apache Tomcat==
mbstring
O '''Apache TomCat''' é uma implementação código aberto para '''Java Servlet''', '''JavaServer Pages''', '''Java Expression Language''' e '''Java WebSocket Technologies'''.
 
;[https://tomcat.apache.org/index.html Apache TomCat]: Página principal
 
===TomCat 7===
O servidor '''[https://help.ubuntu.com/lts/serverguide/tomcat.html Apache Tomcat]''' permite a hospedagem de aplicações web tipo '''Java Servlets''' e '''JSP''' (''Java Server Pages'').
O servidor '''[https://help.ubuntu.com/lts/serverguide/tomcat.html Apache Tomcat]''' permite a hospedagem de aplicações web tipo '''Java Servlets''' e '''JSP''' (''Java Server Pages'').


Linha 245: Linha 407:
;Diretório das páginas Web: O Tomcat guarda a página Web base, index.html, no diretório '''/var/lib/tomcat7/webapps/ROOT'''.
;Diretório das páginas Web: O Tomcat guarda a página Web base, index.html, no diretório '''/var/lib/tomcat7/webapps/ROOT'''.


===Configuração===
====Configuração====
Os arquivos de configuração do Tomcat podem ser encontrados em '''/etc/tomcat7'''.  
Os arquivos de configuração do Tomcat podem ser encontrados em '''/etc/tomcat7'''.  


Linha 267: Linha 429:
:Acesso: '''http://[hostname]:8080/manager/html'''
:Acesso: '''http://[hostname]:8080/manager/html'''


Veja outros detalhes da configuração na página oficial do servidor Tomcat.
Veja outros detalhes da configuração na página oficial do servidor Tomcat.-->
 
====Exercício 5====
Criar e configurar uma Wiki no servidor Web.
Criar uma página Wiki e hospedar no servidor para teste.


==Referências==
==Referências==
Linha 273: Linha 439:


----
----
--[[Usuário:Evandro.cantu|Evandro.cantu]] ([[Usuário Discussão:Evandro.cantu|discussão]]) 09h04min de 16 de dezembro de 2015 (BRST)
[[Usuário:Evandro.cantu|Evandro.cantu]] ([[Usuário Discussão:Evandro.cantu|discussão]]) 11h41min de 17 de maio de 2021 (-03)
----
----


[[Categoria:Administração de Servidores]]
[[Categoria:Administração de Servidores]]

Edição atual tal como às 00h28min de 26 de novembro de 2022

Servidor Web

Servidor Apache

O servidor Apache é um servidor web livre amplamente utilizado na Internet.

O Apache implementa o lado servidor da Aplicação Web e atende requisições de clientes Web, ou navegadores, através do Protocolo HTTP (HyperText Transfer Protocol).

O Apache pode transferir para o cliente Web diferentes tipos de documentos, incluindo páginas HTML (Hipertext Meta Language), arquivos em formato PDF, arquivos de imagens, etc.

Um documento pode ser um simples arquivo em disco, mas também pode ser gerado dinamicamente através de tecnologias Web como PHP, JSP, ASP e outras. Estas tecnologias se caracterizam por uma linguagem de programação integrada ao servidor web, obtendo dele informação sobre como gerar o conteúdo da resposta [1].

Instalação do Apache no Ubuntu

Página oficial do Servidor Web Apache2 no Ubuntu.

Instalação
sudo apt-get install apache2

Uma vez instalado o servidor Web já estará funcionando com um página Web básica, chamada index.html, localizada no diretório:

/var/www/html/

O servidor Web poderá ser testado com um navegador utilizando o endereço de loopback 127.0.0.1 (na própria máquina) ou através do endereço IP da máquina em uma rede.

Para o gerenciamento do apache deve instalar também alguns utilitários, disponíveis no pacote:

sudo apt-get install apache2-utils

Configuração do Apache no Ubuntu

O apache é um aplicativo modular e se limita a executar a tarefa de entregar páginas HTML ou outros tipos de arquivos a clientes. Qualquer outra tarefa é executada por módulos externos.

Por exemplo, para acesso a uma página PHP, o servidor apache repassa a requisição para o módulo mod_php, que aciona o interpretador PHP que processa a página e entrega ao apache para este entregar ao cliente [2].

Arquivos de configuração

Os arquivos de configuração do apache também são modulares e estão organizados dentro do diretório /etc/apache2:

/etc/apache2/
|-- apache2.conf
|       `--  ports.conf
|-- mods-available
|       |-- *.load
|       `-- *.conf
|-- conf-available
|       `-- *.conf
`-- sites-available
        `-- *.conf
  • O arquivo apache2.conf contem configurações diversas do servidor;
  • O arquivo ports.conf contem a configuração das portas TCP que o servidor vai escutar;
  • O diretório sites-available contem a configuração dos sites hospedados;
  • O diretório mods-available contem a configuração dos módulos.
  • O diretório conf-available contem a configuração de fragmentos globais do apache.

Sites hospedados

Configuração default

Quando o apache é instalado é criado o arquivo /etc/apache2/sites-available/000-default.conf que contém a configuração de um site padrão. Este site usa o diretório /var/www/html para armazenar as páginas Web, sendo o arquivo index.html a página base do site.

Se o servidor Web vai armazenar um único site, esta configuração é suficiente.

Hospedagem de vários sites

O apache pode armazenar vários sites simultaneamente, cada um representado por um arquivo de configuração no diretório sites-available.

Configuração de sites compartilhado o endereço IP do hospedeiro

Para cada site cria-se um arquivo de configuração, por exemplo redes30.conf, e armazena o mesmo no diretório sites-available.

O conteúdo do arquivo contém as seguintes informações básicas:

<VirtualHost *:80> 
  #Endereço IP e porta de escuta
 
  ServerName www.redes30.edu.br
  # O nome de servidor
 
  ServerAdmin webmaster@redes30.edu.br
  #Administrador do site
 
  DocumentRoot /var/www/html/redes30
  # Diretório onde estão os documentos desse site
 
  <Directory /var/www/html/redes30>
    Options Indexes
    DirectoryIndex index.html index.php
    order allow,deny
    allow from all
  </Directory>
   # As restrições de acesso aos documentos    
</VirtualHost>

Usando no arquivo de configuração o cabeçalho <VirtualHost *:80>, com um asterisco (*) no lugar do endereço IP, todos os sites hospedados terão como endereço de busca o mesmo endereço IP da máquina hospedeira. Cada site será buscado em função do parâmetro ServerName indicado no arquivo de configuração.

Conteúdo de cada site

A página de conteúdo html de cada site deve ser alocada no diretório criado para o site, por exemplo, /var/www/html/redes30, com um arquivo index.html específico.

Sites com Endereços IP específicos

Cada site também pode ser cadastrado um endereço IP específico. Neste caso, o IP específico do site deve também ser atribuído ao hospedeiro, o qual, portanto, responderá a mais de um endereço IP.

Atribuindo outro endereço IP ao hospedeiro
Criar um endereço IP alias para cada site, por exemplo (verificar o endereçamento de rede utilizado pelo servidor):
ifconfig eth0:0 192.168.71.230 netmask 255.255.254.0

Incluir no arquivo de configuração do site o endereço IP correspondente e a porta:

VirtualHost 192.168.71.230:80> 
  #Endereço IP e porta de escuta
  ...
 
</VirtualHost>

Resolução de Nomes (DNS)

Tanto no caso de utilizar endereço IP específico ou endereço IP compartilhado para cada site, um servidor DNS é necessário para resolver o nome do site para ter acesso as páginas Web.

No caso do uso de endereços IP compartilhados, todas as consultas ao servidor DNS, para os vários sites hospedados, vão apontar para o mesmo endereço IP. Neste caso, a mensagem de requisição HTTP, montada pelo cliente, vai incluir o nome do site que o Apache possa fornecer a página correta.
Arquivo /etc/hosts
Para fins de testes, uma alternativa é incluir o nome dos sites que queremos acessar no arquivo /etc/hosts de cada cliente, por exemplo:
192.168.71.230   www.redes30.edu.br

Habilitação dos sites

Para tornar o site disponível, cria-se um link do arquivo de configuração para o diretório sites-enabled, como por exemplo:

ln -s /etc/apache2/sites-available/redes30.conf /etc/apache2/sites-enabled/redes30.conf
Caso se desejar tornar o site indisponível, sem remover a configuração, apenas se apaga o link simbólico.

Os comandos a2ensite e a2dissite ativam e desativam os links de forma automática, por exemplo [2]:

sudo a2ensite redes30.conf
(ativa)
ou
sudo a2dissite redes30.conf
(desativa)

Depois de modificada a configuração, reiniciar o servidor apache:

sudo systemctl reload apache2

Exercício 1

Criar sites virtuais para armazenar no servidor apache, utilizando IP compartilhados para dois sites e IP específicos (IP alias) para um site. Para tal realize os seguintes procedimentos:

  • Crie pelo menos um IP alias para o site com IP específico.
  • Crie arquivos de configuração para os três sites.
  • Crie diretórios para armazenar as páginas dos sites no diretório /var/www/html/.
  • Crie paginas HTML e salve nos diretórios do site correspondente, cada uma com o nome index.html.
  • Testar o acesso ao servidor Web usando o endereço IP dos sites a partir de um navegador.

Para ter acesso as páginas Web a partir do nome do site seria necessário um servidor DNS, entretanto, para fins de teste, podemos incluir o nome dos sites que queremos acessar no arquivo /etc/hosts em uma máquina virtual, para tal:

  • Edite o arquivo /etc/hosts e acrescente linhas com o nome dos sites, por exemplo:
192.168.71.230   www.redes30.edu.br
Dicas
Para não haver conflito de endereços IP entre as diversas equipes, utilizar a rede 192.168.70.0/23 e utilizar faixas específicas de IP para cada grupo.
Compartilhar entre os grupos os endereços IP e nomes dos sites para testar acesso aos servidores dos demais colegas.

Módulos

A configuração dos módulos também é realizada em dois diretórios separados:

  • mods-available, que contém a configuração e os scripts de inicialização dos módulos disponíveis;
  • mods-enabled, que são os módulos habilitados.

Para habilitar um módulo, usamos o comando:

a2enmod

Para desabilitar um módulo, usamos o comando:

a2dismod

Páginas pessoais para usuários

O módulo userdir é usado pelo Apache para disponibilizar páginas pessoais aos usuários. As páginas ficam armazenadas no diretório public_html localizada no diretório home de cada usuário. O acesso as páginas pessoais é realizado pela URL http://[hostname]/~username/.

Por default o módulo userdir está disponível quando o apache é instalado, entretanto, o mesmo deve ser ativado com o comando:

a2enmod userdir

Em seguida, cada usuário deve criar o diretório public_html no diretório home e setar as permissões para 0755:

mkdir ~/public_html
chmod 0755 ~/public_html

Para cada usuário, criar a página pessoal e salvar no arquivo index.html.

Para fins de teste, uma página pode ser criada com o comando:

echo "Oi! Eu sou $USER. Esta eh minha pagina Web!" > ~/public_html/index.html
Ajustar as permissões para o arquivo para 0755.

Exercício 2

Habilitar o módulo userdir no servidor Web e criar páginas pessoais para alguns usuários. Testar o acesso as páginas a partir de um navegador.

Páginas HTTPS

O módulo SSL (Secure Socket Layer) é o protocolo usado para criar páginas seguras, criptografando todas as informações trocadas entre o cliente e o servidor Web. É comumente utilizada em páginas de comercio eletrônico, onde é necessário um ambiente seguro para a troca de dados confidenciais.

O módulo SSL vem disponível com a instalação do apache, mas deve ser habilitado com o comando:

sudo a2enmod ssl

Em seguida o apache deve ser reiniciado

sudo service apache2 restart

O servidor apache com suporte SSL escuta na porta 443.

Cerfiticados SSL

Para o funcionamento das páginas seguras é necessário um certificado SSL.

Os certificados SSL são validados por entidades certificadoras (Certificate Authority), que são independentes e tem confiança reconhecida mundialmente, os navegadores já sabem de sua existência e por isto confiam nos certificados que são emitidos por essas entidades.

Certificado Auto Assinado

Para fins de testes, é possível gerar um certificado auto assinado (self-signed) onde o próprio servidor Web faz o papel de entidade certificadora. Entretanto, os clientes receberão um aviso que o certificado não é reconhecido por uma unidade certificadora.

Para sites comerciais, é necessário que o certificado seja certificado por uma unidade certificadora.

Geração de Certificado Auto Assinado (self-signed)

Instalar o OpenSSL, que é uma implementação de código aberto dos protocolos SSL e TLS:

sudo apt-get install openssl

Gerar um certificado SSL auto-assinado com o comando [3]:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

Depois de inserir o comando, você será levado a um prompt onde você pode inserir informações sobre seu site.

O comando gera as chaves de autenticação privada e o certificado por meio dos arquivos .key e .crt, os quais são armazenados no diretório /etc/ssl.

Veja detalhes sobre o comando em [3].

Habilitação do HTTPS no VirtualHost

O próximo passo é habilitar o HTTPS no VirtualHost no qual ele será utilizado.

  • Editar a configuração do VirtualHost correspondente no arquivo /etc/apache2/sites-available
  • Duplicar o conteúdo da seção <VirtualHost *:80> para uma nova seção <VirtualHost *:443> e acrescentar as linhas mostradas abaixo no final da seção:
 <VirtualHost *:80>
 ...
 </VirtualHost>

 <VirtualHost *:443>
 ...

 SSLEngine on
 SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
 SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key

 </VirtualHost>

Redirecionamento HTTP para HTTPS

As requisições HTTPS são direcionadas a porta 443 do servidor, entretanto é possível responder a uma requisição HTTP na porta 80, utilizando SSL com tráfego criptografado, através do redirecionamento da porta 80 para 443.

Para isto, é necessário criar uma configuração para o site a ser redirecionado dentro do diretório

/etc/apache2/sites-available/

como segue [3]

<VirtualHost *:80>
    ServerName your_domain_or_ip
    Redirect / https://your_domain_or_ip/
</VirtualHost>

Exercício 3

  1. Criar e testar a hospedagem de páginas trocadas com HTTPS, utilizando um certificado próprio (self-signed).
  2. Testar a criptografia do protocolo HTTPS utilizando o Wireshark para capturar pacotes de uma troca de mensagens HTTP e de uma troca de mensagens HTTPS.

Cotas em disco para Servidores Web

As Cotas em disco são um recurso importante para disciplinar o uso do espaço em disco disponível para cada VirtualHost disponibilizar as conteúdo na Web.

Para tal, as cotas em disco devem ser ativadas para os administradores dos VirtualHosts e aplicadas no diretório /var/www/html, ou no diretório na qual o conteúdo Web ficará armazenado.

Suporte a PHP

O PHP é uma linguagem para criação de páginas Web dinâmicas e gerenciamento de conteúdos.

Uma página escrita em PHP é interpretada por interpretador que fica carregado continuamente na memória e vai executando os comandos recebidos dos scripts incluídos nas páginas.

Com o suporte ao PHP o Apache continua exibindo diretamente páginas com a extensão .html. Entretanto, as páginas com extensão .php são passadas ao interpretador PHP, que faz o processamento e devolve uma página .html ao Apache, que se encarrega de entregar ao cliente [2].

As páginas .html geradas pelo interpretador PHP são descartadas depois de entregues ao cliente. A cada nova requisição elas são processadas novamente. Dependendo da complexidade do código, as páginas PHP podem ser bastante pesadas. Para sites com grande número de acessos a configuração do servidor deve ser robusta para não tornar o serviço lento.

Instalação do PHP
No Ubuntu o PHP é instalado através dos pacotes:
sudo apt install php libapache2-mod-php php-mysql

Verificação da versão:

php -v
O apache deve ser reiniciado
sudo systemctl restart apache2
Teste do PHP
Para fins de teste, um arquivo PHP pode ser criado /var/www/html/info.php com o conteúdo:
<?php
phpinfo();
?>
Testar a partir de um navegador, acessando o endereço do servidor, por exemplo http://[hostname]/info.php. A página contém informações sobre a configuração do PHP instalada no servidor.

Exercício 4

Criar páginas PHP e hospedar nos sites criados no servidor Web desenvolvido no exercício anterior. Testar o acesso as páginas PHP em um navegador.

Suporte ao Banco de Dados SQL

O MariaDB é um banco de dados SQL que pode ser acessado a partir de um script PHP.

O banco de dados MariaDB teve origem de um fork do banco de dados MySQL, visando assegurar que sua base de dados seja livre para sempre. O MySQL hoje é mantido pela Oracle.

Instalação do MariaDB
 sudo apt-get install mariadb-server mariadb-client
Verificar o status do banco de dados:
sudo systemctl status mysql

Administração do banco de dados MySQL

A forma elementar de administrar o MariaDB é a partir do prompt de comandos:

sudo mysql -u root -p
Criação do banco de dados
Realizada no prompt do MariaDB:
CREATE DATABASE testedb;
Senha
O MariaDB possui um usuário padrão chamado root que tem acesso completo ao banco de dados e é usado para a configuração do sistema. Inicialmente este usuário não tem senha, mas depois de iniciado deve-se, por segurança, definir uma senha com o comando:
sudo mysqladmin -u root password SENHA
exit

MediaWiki

O MediaWiki é um programa gratuito para disponibilização de conteúdo na Internet [4].

O MediaWiki usa PHP para processar e apresentar dados disponíveis na sua base de dados MariaDB.

As páginas no MediaWiki usam formatação WikiTexto, para que usuários sem conhecimento de HTML ou CSS possam editá-las facilmente.

Download
O MediaWiki pode ser baixado no endereço https://www.mediawiki.org/wiki/Download.
Download via terminal:
wget https://releases.wikimedia.org/mediawiki/1.38/mediawiki-1.38.4.tar.gz

Instalação do MediaWiki

Preliminares
  • Instalação do PHP
    Pacotes adicionais para Wiki e ativação dos módulos no PHP:
sudo apt install php-mbstring php-xml
sudo phpenmod mbstring
sudo phpenmod xml
  • Instalação do banco de dados MariaDB
    Criação da base de dados e usuário para a Wiki:
sudo mysql -u root -p
CREATE DATABASE wikidb;
CREATE USER 'wikiuser'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON wikidb.* TO 'wikiuser'@'localhost' WITH GRANT OPTION;
exit
Descompactar arquivo baixado
tar xvzf mediawiki-*.tar.gz
Copiar conteúdo descompactado para
/var/www/html/wiki
Acessar pelo navegador
http://localhost/wiki/index.php
Verificar a configuração e possíveis pendências.
Realizar a configuração da Wiki
Realizar as configurações locais da Wiki.
Atenção ao nome do banco de dados MariaDB e dos nomes de usuário e senhas que foram utilizados na do banco de dados.
LocalSettings.php
Deve ser copiado para o diretório principal da Wiki:
/var/www/html/wiki

Backup WIKI

MediaWiki armazena dados importantes em dois lugares:

  1. Banco de dados: Páginas e seus conteúdos, usuários e suas preferências, metadados, índices de pesquisa, etc.
  2. Sistema de arquivos: Arquivos de configuração do software, interfaces personalizadas (skins), extensões, imagens, etc.
Backup do Banco de Dasos
mysqldump -h localhost -u root -p --default-character-set=binary wikidb > backup.sql
Recuperação do Banco de Dados
mysql -u root -p wikidb < backup.sql
Backup do Sistema de Arquivos
  • Arquivos de upload:
Backup:
tar zcvhf wikidata.tgz /var/www/http/wiki/images
Recuperação:
tar -zxvf wikidata.tgz
  • Extensões:
Backup:
tar zcvhf wikiextentions.tgz /var/www/http/wiki/extensions
Recuperação:
tar -zxvf wikiextentions.tgz
  • Arquivo de configuração:
LocalSettings.php


Exercício 5

Criar e configurar uma Wiki no servidor Web. Criar uma página Wiki e hospedar no servidor para teste.

Referências


Evandro.cantu (discussão) 11h41min de 17 de maio de 2021 (-03)