menu
Adianti Framework
menu Menu
Para trabalharmos bem com uma ferramenta de desenvolvimento é fundamental a preparação do ambiente, e com o Adianti Framework não é diferente. Durante muitos anos, recebemos posts com dúvidas que não diziam respeito ao Framework, mas de detalhes no ambiente que não estavam corretamente configurados. Requisitos como a versão do PHP, a habilitação de logs de erros, configurações de uso de memória, de sessão, dentre outros, muitas vezes não estavam adequados. Além disso, algumas revendas de hospedagem agem restringindo algumas funções do PHP, o que também atrapalha o desenvolvedor. Felizmente hoje podemos instanciar um servidor na nuvem e configurá-lo do nosso jeito. É isso que eu explico neste tutorial. Como criar um servidor gabarito. Vamos preparar um servidor Ubuntu 16.04 server com PHP7, e PostgreSQL 9.5, além de alguns controles de segurança, que serão explicados a seguir.

Criação da conta


Na Adianti, usamos muito o DigitalOcean, que oferece servidores por preços previsíveis e módicos. O primeiro passo é criar a conta. Usando este link a seguir, você ainda ganha U$ 10,00 em créditos após validar a conta.

www.digitalocean.com/?refcode=1ae3426a91ab

Criação da instância


O próximo passo é criar a instância de máquina virtual na nuvem, o que a Digital Ocean chama de Droplet. Você receberá a senha de superusuário (root) por e-mail após a criação do servidor. Em seguida, bastará fazer o acesso por SSH.

ssh root@<ip>

entrar com senha de root enviada por e-mail

Após o primeiro acesso, aproveite para definir uma senha definitiva:
passwd root



Básico Apache e PHP


Agora podemos iniciar as instalações. Vamos iniciar instalando Apache, PHP7, e alguns utilitários como rpl, zip, git, vim, e curl.
Habilitaremos módulos como opcache (aceleração), gd (imagens), sqlite3 (banco de dados), mcrypt (criptografia), e mbstring (unicode).

sudo apt-get update sudo apt-get install apache2 php7.0 libapache2-mod-php7.0 sudo apt-get install php7.0-soap php7.0-xml php7.0-curl php7.0-opcache php7.0-gd php7.0-sqlite3 php7.0-mcrypt php7.0-mbstring sudo apt-get install rpl zip unzip git vim curl


Em seguida, habilitaremos os módulos do apache, com destaque para o prefork:
a2dismod mpm_event a2dismod mpm_worker a2enmod mpm_prefork a2enmod rewrite a2enmod php7.0


Obs: Não é objetivo deste artigo entrar nos modos de operação do Apache, mas você pode ler esta discussão:
serverfault.com/questions/383526/how-do-i-select-which-apache-mpm-to

Configuração DEV
Agora vamos ajustar algumas configurações do PHP, para habilitar a exibição e log de erros, aumentar o limite de uso de RAM, o tempo de execução, o tempo de sessão, e definir limites de upload.

echo "" >> /etc/php/7.0/apache2/php.ini echo "error_log = /tmp/php_errors.log" >> /etc/php/7.0/apache2/php.ini echo "display_errors = On" >> /etc/php/7.0/apache2/php.ini echo "memory_limit = 256M" >> /etc/php/7.0/apache2/php.ini echo "max_execution_time = 120" >> /etc/php/7.0/apache2/php.ini echo "error_reporting = E_ALL" >> /etc/php/7.0/apache2/php.ini echo "file_uploads = On" >> /etc/php/7.0/apache2/php.ini echo "post_max_size = 100M" >> /etc/php/7.0/apache2/php.ini echo "upload_max_filesize = 100M" >> /etc/php/7.0/apache2/php.ini echo "session.gc_maxlifetime = 14000" >> /etc/php/7.0/apache2/php.ini


Quando a aplicação entrar em produção, desligue a exibição de erros. Você pode também ser mais tolerante quanto ao nível de erros a ser reportado.

Configuração PROD
echo "display_errors = Off" >> php.ini echo "error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE" >> php.ini



Quando tudo estiver configurado, restarte o apache:
service apache2 restart



Banco de dados


Agora vamos ao banco de dados. Eu utilizo PostgreSQL e sou apaixonado pelo banco de dados desde o ano 2000. Considero ele muito robusto, e já participei de mais de 40 projetos de sistema de gestão, sempre com PostgreSQL. Bancos com mais de 200 milhões de registros, bases com mais de 70Gb de dados, então me sinto confortável em recomendar sua utilização.
O primeiro passo é instalar o PostgreSQL, e o driver do PHP para acessá-lo. Aproveito para instalar o driver do Mysql:

sudo apt-get install postgresql php7.0-pgsql php7.0-mysql


Em seguida, vou reconstruir o arquivo de configuração de acesso, para permitir uma administração mais facilitada pela linha de comando, sem pedir senha para acesso local. Recomendo você estudar estas diretivas faz e não simplesmente manter essa configuração a longo prazo.

rm /etc/postgresql/9.5/main/pg_hba.conf echo 'local all all trust' >> /etc/postgresql/9.5/main/pg_hba.conf echo 'host all all 127.0.0.1/32 password' >> /etc/postgresql/9.5/main/pg_hba.conf echo 'host all all ::1/128 password' >> /etc/postgresql/9.5/main/pg_hba.conf echo 'host all all all password' >> /etc/postgresql/9.5/main/pg_hba.conf


Agora vamos reiniciar o serviço.
service postgresql restart



Segurança



Agora algumas configurações para manter o PHP mais seguro, principalmente para proteger as sessões. As seguintes configurações ajudam a diminuir significativamente a chance de ataques como session hijack e session fixation. Além disso, o nosso template de criação de aplicações já gera novos IDs de sessão a cada login (session_regenerate_id).

echo "session.name = CUSTOMSESSID" >> /etc/php/7.0/apache2/php.ini echo "session.use_only_cookies = 1" >> /etc/php/7.0/apache2/php.ini echo "session.cookie_httponly = true" >> /etc/php/7.0/apache2/php.ini echo "session.use_trans_sid = 0" >> /etc/php/7.0/apache2/php.ini echo "session.entropy_file = /dev/urandom" >> /etc/php/7.0/apache2/php.ini echo "session.entropy_length = 32" >> /etc/php/7.0/apache2/php.ini


Agora vamos instalar o módulo Evasive, do Apache. Este módulo é utilizado para evitar ataques de negação DDOS:
sudo apt-get install libapache2-mod-evasive


Agora vamos habilitar este módulo.
a2enmod evasive


Agora vamos definir os parâmetros do módulo Evasive para evitar ataques de negação DDOS:
rm /etc/apache2/mods-enabled/evasive.conf echo '<IfModule mod_evasive20.c>' >> /etc/apache2/mods-enabled/evasive.conf echo ' DOSHashTableSize 2048' >> /etc/apache2/mods-enabled/evasive.conf echo ' DOSPageCount 10' >> /etc/apache2/mods-enabled/evasive.conf echo ' DOSSiteCount 200' >> /etc/apache2/mods-enabled/evasive.conf echo ' DOSPageInterval 2' >> /etc/apache2/mods-enabled/evasive.conf echo ' DOSSiteInterval 2' >> /etc/apache2/mods-enabled/evasive.conf echo ' DOSBlockingPeriod 10' >> /etc/apache2/mods-enabled/evasive.conf echo ' DOSLogDir "/var/log/apache2/evasive"' >> /etc/apache2/mods-enabled/evasive.conf echo '</IfModule>' >> /etc/apache2/mods-enabled/evasive.conf


Agora vamos alterar o Apache para ele ler os arquivos .htaccess presentes na estrutura de diretório do Framework. Estes arquivos protegem determinados diretórios do acesso indevido.
rpl "AllowOverride None" "AllowOverride All" /etc/apache2/apache2.conf


Agora vamos reinicar o Apache:
service apache2 restart


Neste ponto, você já terá um servidor Ubunt 16.04 rodando Apache, PHP7 e PostgreSQL 9.5, prontamente configurado. Agora vamos instalar o template de criação de aplicações do Adianti Framework, e criar as bases de dados para nosso primeiro projeto.

Antes de continuar, dê uma olhada no projeto LetsEncrypt, que distribui certificados HTTPS gratuitamente. É muito importante rodar a aplicação em HTTPS. Com o LetsEncrypt, você consegue fazer tudo da linha de comando:
letsencrypt

Template



Agora vamos instalar o Template do Adianti Framework, que já vem com controle de login, permissões de acesso, gestão de documentos, comunicação entre usuários, dentre outros recursos comuns na criação de sistemas. Vamos supor que o mesmo encontra-se no diretório /tmp. Então vamos descompactá-lo e movê-lo para project1 (use qualquer nome para nomear seu projeto):
cd /var/www/html/ unzip /tmp/adianti-template-4.0.0.zip mv template projeto1 cd projeto1 rpl "template" "projeto1" app/config/application.ini


Criando bases de dados (.sql)


Agora vamos criar as bases de dados. Vamos simplificar e criar uma base de dados com o nome do projeto (project1) para armazenar as tabelas do projeto em si e também as tabelas de permissão (permission) e comunicação (communication). Mas o banco de logs (log) vamos manter separado, pois facilita o backup. Afinal, como o log crescerá rapidamente, não vamos querer fazer backup dele todo dia.
Para importar as bases de dados vamos utilizar os arquivos no formato SQL já distribuidos com o Framework no diretório app/database.
psql template1 -Upostgres -c "create user projeto1 with password 'projeto1'" psql template1 -Upostgres -c "create database projeto1 owner projeto1" psql template1 -Upostgres -c "create database projeto1_log owner projeto1" psql projeto1 -Uprojeto1 -c "\\i app/database/permission.sql" psql projeto1 -Uprojeto1 -c "\\i app/database/communication.sql" psql projeto1_log -Uprojeto1 -c "\\i app/database/log.sql"


Configurando acesso (.ini)


Agora que criamos as bases de dados, vamos recriar os arquivos de configuração de acesso (INI) para apontar para as novas bases recém criadas.
Após definirmos uma base de dados (permission), copiamos para os outros conectores (communication, e log). Ao final, utilizamos o comando RPL para fazer uma substituição em um arquivo.

rm app/config/permission.ini echo "host = localhost" >> app/config/permission.ini echo "port = 5432" >> app/config/permission.ini echo "name = projeto1" >> app/config/permission.ini echo "user = projeto1" >> app/config/permission.ini echo "pass = projeto1" >> app/config/permission.ini echo "type = pgsql" >> app/config/permission.ini echo "prep = 1" >> app/config/permission.ini cp app/config/permission.ini app/config/communication.ini cp app/config/permission.ini app/config/log.ini rpl "name = projeto1" "name = projeto1_log" app/config/log.ini


Pronto, agora você poderá acessar o template e começar a criar sua aplicação utilizando o Adianti Framework por meio do IP disponibilizado pelo DigitalOcean.
<ip>/projeto1

Para ter maior propriedade ao desenvolver com o Adianti Framework, é fundamental conhecer sua arquitetura, fundamentos, compoentes, e filosofia de desenvolvimento.
Para tal, não deixe de ler o livro sobre o Framework: www.adianti.com.br/bkframe

Temos também o curso em videoaulas, uma metodologia mais dinâmica: www.adianti.com.br/framework-videoaulas

E também o Adianti Studio, a IDE aceleradora para desenvolvimento com o Framework: www.adianti.com.br/studio

Confira os produtos da Adianti em nossa loja virtual: www.adianti.com.br/store/

Obrigado,
Pablo


Comentários

Jackson Meires: ( 2017-03-28)
Parabéns Pablo,

excelente artigo, é bastante útil.

Gustavo Ferreira Araujo Silva: ( 2017-05-29)
Muito bom. Rodando que é uma beleza... apenas estou com problema em mapear uma unidade... alguma dica?...
Geovani Oliveira: ( 2017-12-27)
Olá, bom dia!
Eu tive que instalar um pacote adicional:
$ sudo apt-get install libapache2-mod-php7.0

Só depois eu conseguir executar o comando:
sudo a2enmod php7.0
Geovani Oliveira: ( 2017-12-27)
Olá, bom dia!
Eu tive que instalar um pacote adicional:
$ sudo apt-get install libapache2-mod-php7.0

Só depois eu conseguir executar o comando:
sudo a2enmod php7.0
Stones Junior: ( 2018-01-24)
Olá, estou seguindo as orientações, surgiu uma dúvida:
Gostaria de acessar a URL www.meusistema.com e carregasse o www.meusistema.com/projeto1, essa informação eu inclui no próprio digital ocean na área de domínio ? Vocês tem alguma informação complementar ? Obrigado
Wagner Nunes da Silva: ( 2018-08-25)
Uso o ubuntu 16.04, segui o guia todo, instalei o template 5.0.0, primeiro tentei no windows, eu tinha o xamp, ele abre, faz o login. Inclui uma tabela no postgres local e dá sempre o erro "cold not find driver" quando tento clicar na visualização de tabela, ai fiz como manda o site para usar o Wamp, ele conecta no sqllite, consigo fazer o login, mas só com apache 5.6, no apache 7 ele dá mesmo erro quando entro com admin, admin, e nao conecta no Postgres nem a reza brava dando a msg acima, então peguei o ubuntu meu 16.04 e segui este tutorial aqui, não consigo fazer login, fica o mesmo erro, segui tudo aqui, o postgres está configurado nessa maquina e acessivel tanto localmente quanto remotamente, fiz tudo esta configurado no apache, não sei mais o que fazer, considerava o uso da ferramenta mas tá dificil achar informação a respeito, nao sei mais onde procurar. Sou usuário médio avançado tanto em programação quanto em Linux, não tenho mais configuração a ser feita. Me dêm uma luz! abraços.
 


Você precisa realizar login para enviar posts, comentários, dentre outros. Para isso, clique em um dos botões a seguir para logar utilizando a API de um dos serviços.