Servidor Web com Banco de Dados
Resumo:
Um servidor Web com suporte a HTML, CSS, JSP, servlet e banco de dados MySQL.
Ingredientes:
- Um Raspberry Pi
- Fonte de alimentação de 2 A, se for utilizar rede wireless, caso contrário, basta 1 A.
- Java 7/8
- Apache Tomcat 8
- MySQL
- Sua aplicação Web com HTML, CSS, Javascript, JSP, servlet e banco de dados MySQL.
Comandos interessantes:
$ sudo netstat -tulpn
$ sudo iwlist wlan0 scan
Configuração:
Configurações Iniciais
Instale o Raspbian normalmente e utilize o comando abaixo para configurar o seu Raspberry Pi:
$ sudo raspi-config
Configure os seguintes itens:
- Expand Filesystem
- Change User Password
- Internationalisation Options
- Change Locale ==> en_US ISO-8859-1 e pt_BR ISO-8859-1 (Default locale en_US)
- Change Timezone ==> America, Sao_Paulo
- Change Keyboard Layout ==> Generic 105-key (Intl) PC, English (US) - English (US, alternative international)
- Advanced Options
- Hostname
- Memory Split ==> 0
Caso você esteja utilizando uma interface WiFi, configure o acesso WPA2 como mostrado a seguir. Primeiro crie uma senha de acesso à rede sem fio criptografada. A segurança que esta criptografia acrescenta é discutível uma vez que qualquer um pode utilizar a mesma string para se conectar a sua rede:
$ wpa_passphrase seu_ssid sua_senha
network={
ssid="seu_ssid"
#psk="sua_senha"
psk=banananaotemcarocoeminhaavonaotocaviolaoporqueopneudonaviofurounacamaquetiradentesmorreu
}
Edite o arquivo /etc/wpa_supplicant/wpa_supplicant.conf.
$ sudo cp /etc/wpa_supplicant/wpa_supplicant.conf{,.velho}
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
E acrescente o texto obtido anteriormente. O resultado do arquivo deverá ser semelhante a:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="seu_ssid"
#psk="sua_senha"
psk=banananaotemcarocoeminhaavonaotocaviolaoporqueopneudonaviofurounacamaquetiradentesmorreu
}
Obs.: você pode (e deve) remover a linha com o comentário contendo a sua senha em texto livre.
Normalmente o wpa-supplicant percebe que você modificou o arquivo de configuração e faz a conexão automaticamente. Se você for do tipo impaciente (bem-vindo ao grupo), você pode usar os comandos abaixo para reiniciar a interface wireless:
$ sudo ifdown wlan0
$ sudo ifup wlan0
Instalação do Java
Depois de instalar e configurar o sistema operacional no Raspberry Pi (incluindo as atualizações), instale o Java:
$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk
ou
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
Instalação do Tomcat
Você pode instalar o Tomcat usando o comando apt-get como mostrado logo a seguir ou fazer uma instalação personalizada como o passo-a-passo mostrado um pouco mais abaixo.
Para instalar usando o apt-get:
$ sudo apt-get install tomcat8
Ou faça download do Apache Tomcat no formato tar.gz do site do Tomcat (óbvio). Se achar melhor, copie o link e utilize o comand wget. Neste exemplo, vamos utilizar o Tomcat v8.0.14:
$ cd Download/
$ wget http://mirror.nbtelecom.com.br/apache/tomcat/tomcat-8/v8.0.14/bin/apache-tomcat-8.0.14.tar.gz
Decompacte o pacote:
$ sudo tar xvzf apache-tomcat-8.0.14.tar.gz
Mova o conteúdo expandido para /opt/tomcat. Utilize o seguinte comando:
$ sudo mv apache-tomcat-8.0.14 /opt/tomcat
Teste o funcionamento. Para iniciar o Apache Tomcat, utilize o comando a seguir uma vez que o Apache Tomcat não foi instalado como serviço (veja nota no final):
$ sudo /opt/tomcat/bin/startup.sh
Você deverá obter o seguinte resultado:
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Tomcat started.
Utilize o seguinte comando para desligar o Apache Tomcat
$ sudo /opt/tomcat/bin/shutdown.sh
Edite o arquivo /etc/profile:
$ sudo cp /etc/profile{,.velho}
$ sudo vi /etc/profile
Inclua o seguinte texto no final do arquivo:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-armhf
export CATALINA_HOME=/opt/tomcat
Veja como ficou o arquivo clicando aqui.
Reinicie o computador:
$ sudo reboot
Depois de reiniciado... Para que o Tomcat possa executar como um deamon:
$ cd $CATALINA_HOME/bin/
$ sudo tar xvfz commons-daemon-native.tar.gz
$ cd commons-daemon-1.0.15-native-src/unix/
$ sudo ./configure
$ sudo make
$ sudo cp jsvc ../..
$ cd ../..
$ CATALINA_BASE=$CATALINA_HOME
$ cd $CATALINA_HOME
$ sudo ./bin/jsvc -classpath $CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/tomcat-juli.jar \
-outfile $CATALINA_BASE/logs/catalina.out \
-errfile $CATALINA_BASE/logs/catalina.err \
-Dcatalina.home=$CATALINA_HOME \
-Dcatalina.base=$CATALINA_BASE \
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties \
org.apache.catalina.startup.Bootstrap
$ sudo mkdir /var/lib/tomcat
$ sudo ln -s /opt/tomcat/webapps/ /var/lib/tomcat/webapps
$ sudo groupadd tomcat
$ sudo useradd -s /sbin/nologin -g tomcat -d $CATALINA_HOME tomcat
$ sudo passwd tomcat
$ sudo chown -R tomcat:tomcat $CATALINA_HOME
$ sudo chmod 775 $CATALINA_HOME/webapps
$ sudo ln -s /opt/tomcat/bin/catalina.sh /etc/init.d/tomcat
Modifique o arquivo catalina.sh:
$ sudo mkdir /var/lib/tomcat
$ sudo ln -s /opt/tomcat/webapps/ /var/lib/tomcat/webapps
$ sudo groupadd tomcat
$ sudo useradd -s /sbin/nologin -g tomcat -d $CATALINA_HOME tomcat
$ sudo passwd tomcat
$ sudo chown -R tomcat:tomcat $CATALINA_HOME
$ sudo chmod 775 $CATALINA_HOME/webapps
$ sudo ln -s /opt/tomcat/bin/catalina.sh /etc/init.d/tomcat
E inclua o seguinte texto logo abaixo de #!/bin/sh:
### BEGIN INIT INFO
# Provides: tomcat
# Required-Start: $local_fs $network
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: tomcat
# Description: tomcat
### END INIT INFO
Veja como ficou o arquivo clicando aqui.
Atualize o script de inicialização com o comando:
$ sudo update-rc.d tomcat defaults
E assim termina a instalação manual do Tomcat (como visto, a instalação automática é muito mais simples, mas a manual é mais emocionante).
Se o Apache Tomcat tiver sido instalado como serviço, utilize os comandos abaixo para iniciar e para o serviço:
$ sudo /etc/init.d/tomcat8 start
$ sudo /etc/init.d/tomcat8 stop
--- OU ---
$ sudo service tomcat8 start
$ sudo service tomcat8 stop
Para criar um virtual host, edite o arquivo /opt/tomcat/conf/server.xml (ou /etc/tomcat8/server.xml):
$ sudo cp /opt/tomcat/conf/server.xml{,.velho}
$ sudo vi /opt/tomcat/conf/server.xml
E inclua um novo <Host> dentro de <Engine>:
<Engine ...
...
<Host name="exemplosweb.meslin.com.br" appBase="ExemplosWeb"/>
</Engine>
Veja como ficou o arquivo clicando aqui.
Crie um diretório dentro de $CATALINA_HOME com o nome base da aplicação (provavelmente o diretório é /var/lib/tomcat8). Importante: o seu usuário deve ter privilégio de escrita no diretório. A melhor forma de fazer isso é incluir o seu usuário no grupo tomcat e acrescentar permissão de escrita para o grupo:
$ sudo mkdir $CATALINA_HOME/ExemplosWeb
$ sudo chown tomcat $CATALINA_HOME/ExemplosWeb
$ sudo chgrp tomcat $CATALINA_HOME/ExemplosWeb
$ sudo chmod g+w $CATALINA_HOME/
ExemplosWeb
$ ls -l $CATALINA_HOME
total 132
drwxr-xr-x 2 tomcat tomcat 4096 Oct 25 2014 bin
drwxr-xr-x 3 tomcat tomcat 4096 Aug 11 23:51 conf
drwxrwxr-x 3 tomcat tomcat 4096 Aug 16 22:56 ExemplosWeb
drwxr-xr-x 2 tomcat tomcat 4096 Oct 25 2014 lib
-rw-r--r-- 1 tomcat tomcat 56977 Sep 24 2014 LICENSE
drwxr-xr-x 2 tomcat tomcat 12288 Aug 18 23:06 logs
-rw-r--r-- 1 tomcat tomcat 1397 Sep 24 2014 NOTICE
-rw-r--r-- 1 tomcat tomcat 6779 Sep 24 2014 RELEASE-NOTES
-rw-r--r-- 1 tomcat tomcat 16204 Sep 24 2014 RUNNING.txt
drwxr-xr-x 2 tomcat tomcat 4096 Oct 25 2014 temp
drwxrwxr-x 8 tomcat tomcat 4096 Aug 1 22:53 webapps
drwxr-xr-x 3 tomcat tomcat 4096 Oct 25 2014 work
E faça o deployment do arquivo ROOT.war nele.
Por padrão, o Tomcat se instala escutando a porta 8080, que não é a porta padrão HTTP. Opcionalmente, você pode modificar a porta para 80, que é a porta padrao. Edite o arquivo /var/lib/tomcat8/conf/server.xml, substituindo todas as portas 8080 por 80 (HTTP) e todas as portas 8443 por 443 (HTTPS).
$ sudo vi /var/lib/tomcat8/conf/server.xml
Por motivo de segurança (???), o Tomcat não se permite escutar a porta 80. Para habilitá-lo, edite o arquivo /etc/default/tomcat8.
$ sudo cp /etc/default/tomcat8{,.velho}
$ sudo vi /etc/default/tomcat8
Remova o comentário da linha com AUTHBIND e coloque o seu valor como yes como mostrado a seguir:
# If you run Tomcat on port numbers that are all higher than 1023, then you
# do not need authbind. It is used for binding Tomcat to lower port numbers.
# (yes/no, default: no)
AUTHBIND=yes
Também é necessário que você instale e configure o authbind como mostrado a sequir:
$ sudo apt-get install authbind
$ sudo touch /etc/authbind/byport/80
$ sudo chmod 500 /etc/authbind/byport/80
$ sudo chown tomcat8 /etc/authbind/byport/80
$ sudo touch /etc/authbind/byport/443
$ sudo chmod 500 /etc/authbind/byport/443
$ sudo chown tomcat8 /etc/authbind/byport/443
Ops... se você quiser facilitar a sua vida, crie um link simbólico do diretório de deployment para dentro (ou abaixo) do seu diretório HOME.
$ sudo ln -s /opt/tomcat/ExemplosWeb ~/webappsExemplosWeb
$ ls -l
total 28
lrwxrwxrwx 1 root root 23 Oct 27 2014 webappsExemplosWeb -> /opt/tomcat/ExemplosWeb
--- OU --- (verifique qual é o seu diretório de deployment)
$ sudo ln -s /var/lib/tomcat8/ExemplosWeb ~/webappsExemplosWeb
$ ls -l
total 0
lrwxrwxrwx 1 root root 28 Dec 20 23:08 webappsExemplosWeb -> /var/lib/tomcat8/ExemplosWeb
Instalação do MySQL
A instalação do MySQL é simples:
$ sudo apt-get install mysql-server
Nas versões atuais do MySQL, edit o arquivo /etc/mysql/mysql.conf.d/mysqld.cnf:
$ sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf{,.velho}
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
Nas versões mais antigas, edite o arquivo /etc/mysql/my.cnf:
$ sudo cp /etc/mysql/my.cnf{,.velho}
$ sudo vi /etc/mysql/my.cnf
Modifique a linha bind-address da seção [mysqld] para:
bind-address = 0.0.0.0
Veja como ficou o arquivo clicando aqui.
Libere acesso a porta através do comando iptable mostrado a seguir:
$ sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
Nas versões atuais do MySQL, pode ser necessário desligar o plugin de validação de senha (veja o primeiro comando dentro do MySQL). Dê permissão para o administrador administrar o servidor através de qualquer computador:
$ mysql -u root -p
mysql> uninstall plugin validate_password;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ROOT'@'%' IDENTIFIED BY 'alert' with grant option;
mysql> set password for 'ROOT'@'%' = PASSWORD('MINHA_SENHA_DO_ADMINISTRADOR');
Se for necessário, crie um novo usuário (ATENÇÃO: o username é case-sensitive):
mysql> create user 'aluno'@'localhost' identified by 'SENHA_QUASE_SECRETA_DO_ALUNO';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'aluno'@'localhost';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'aluno'@'%' IDENTIFIED BY
'SENHA_QUASE_SECRETA_DO_ALUNO';
mysql> FLUSH PRIVILEGES;
Reinicie o serviço:
$ sudo service mysql stop
$ sudo service mysql start
E pronto...