Differences

This shows you the differences between two versions of the page.

Link to this comparison view

instalacao_e_configuracao_de_servidor_oapp_openbsd_apache_em_chroot_postgresql_php_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== Instalação e Configuração do Apache em Chroot + PostgreSQL + PHP + SSL no OpenBSD 5.1 ======
  
 +
 +E ai galera, aqui eu vou abordar a instalação e configuração do Apache trabalhando em modo chroot no <​nowiki>​OpenBSD</​nowiki>​ 5.1 trabalhando em conjunto com o <​nowiki>​PostgreSQL</​nowiki>​ e PHP.
 +
 +
 +Vamos setar o endereço do nosso repositório
 +<sxh bash>
 +export PKG_PATH=ftp://​openbsd.locaweb.com.br/​pub/​OpenBSD/​5.1/​packages/​`machine -a`/
 +</​sxh>​
 +
 +Agora vamos mandar instalar o PHP e o <​nowiki>​PostgreSQL</​nowiki>​ server
 +
 +Primeiro precisamos descobrir a versão da biblioteca php-pgsql
 +<sxh bash>
 +pkg_add php-pgsql
 +Ambiguous: php-pgsql could be php-pgsql-5.2.17p5 php-pgsql-5.3.10
 +</​sxh>​
 +
 +Pronto aqui temos que a versão da nossa biblioteca PHP é php-pgsql-5.3.10 vamos instalar ela e o <​nowiki>​PostgreSQL</​nowiki>​ server
 +<sxh bash>
 +pkg_add -v php-pgsql-5.3.10 postgresql-server postgresql-client postgresql-docs
 +</​sxh>​
 +
 +Agora precisamos acertar o link do php para o Apache
 +<sxh bash>
 +ln -s /​var/​www/​conf/​modules.sample/​php-5.3.conf \
 +        /​var/​www/​conf/​modules/​php.conf
 +</​sxh>​
 +
 +Agora precisamos acertar o link do <​nowiki>​PostgreSQL</​nowiki>​ para o PHP
 +<sxh bash>
 +ln -fs /​etc/​php-5.3.sample/​pgsql.ini \
 +        /​etc/​php-5.3/​pgsql.ini
 +</​sxh>​
 +
 +Agora vamos acertar a configuração do <​nowiki>​PostgreSQL</​nowiki>​
 +
 +Vamos mandar setar uma senha para o postgres
 +<sxh bash>
 +passwd _postgresql
 +Changing local password for _postgresql.
 +New password: #S3Nh4
 +Retype new password: #S3Nh4
 +</​sxh>​
 +
 +Agora vamos logar com o Postgres
 +<sxh bash>
 +su - _postgresql
 +</​sxh>​
 +
 +Agora vamos criar o diretório que vai armazenar os dados do Postgres
 +<sxh bash>
 +mkdir /​var/​postgresql/​data
 +</​sxh>​
 +
 +Agora vamos inicializar o banco e setar uma senha para o usuário postgres interno do Banco
 +<sxh bash>
 +initdb -D /​var/​postgresql/​data -U postgres -A md5 -W
 +The files belonging to this database system will be owned by user "​_postgresql"​.
 +This user must also own the server process.
 +
 +The database cluster will be initialized with locale C.
 +The default database encoding has accordingly been set to SQL_ASCII.
 +The default text search configuration will be set to "​english"​.
 +
 +fixing permissions on existing directory /​var/​postgresql/​data ... ok
 +creating subdirectories ... ok
 +selecting default max_connections ... 40
 +selecting default shared_buffers ... 24MB
 +creating configuration files ... ok
 +creating template1 database in /​var/​postgresql/​data/​base/​1 ... ok
 +initializing pg_authid ... ok
 +Enter new superuser password: #S3Nh4
 +Enter it again: #S3Nh4
 +setting password ... ok
 +initializing dependencies ... ok
 +creating system views ... ok
 +loading system objects'​ descriptions ... ok
 +creating collations ... not supported on this platform
 +creating conversions ... ok
 +creating dictionaries ... ok
 +setting privileges on built-in objects ... ok
 +creating information schema ... ok
 +loading PL/pgSQL server-side language ... ok
 +vacuuming database template1 ... ok
 +copying template1 to template0 ... ok
 +copying template1 to postgres ... ok
 +
 +Success. You can now start the database server using:
 +
 +    postgres -D /​var/​postgresql/​data
 +or
 +    pg_ctl -D /​var/​postgresql/​data -l logfile start
 +
 +</​sxh>​
 +
 +Agora vamos sair do usuário postgres
 +<sxh bash>
 +exit
 +</​sxh>​
 +
 +
 +Vamos agora à algumas configurações básicas, vamos começar liberando acesso ao <​nowiki>​PostgreSQL</​nowiki>​ para as máquinas.
 +
 +Aqui vamos configurar em qual endereço ip o servidor vai escutar vamos  colocar * para ele escutar em todas as interfaces disponíveis.
 +
 +<sxh apache>
 +vim /​var/​postgresql/​data/​postgresql.conf
 +[...]
 +listen_address = '​*'​
 +[...]
 +</​sxh>​
 +Agora precisamos liberar o acesso no postgresql para que os clientes ​ consigam se conectar nele, então vamos liberar a maquina do programador ​ por exemplo que tem o ip 10.0.0.20
 +
 +<sxh apache>
 +vim /​var/​postgresql/​data/​pg_hba.conf
 +[...]
 +#no final do arquivo adicione a seguinte linha
 +host    all         ​all ​        ​10.101.0.0/​24 ​            md5
 +</​sxh>​
 +Aqui no exemplo acima estamos liberando acesso para as máquinas da rede 10.101.0.0/​24
 +
 +Agora vamos reiniciar o nosso postgreSQL
 +<sxh bash>
 +/​etc/​rc.d/​postgresql restart
 +</​sxh>​
 +
 +Agora vamos verificar se ele esta escutando ​
 +<sxh bash>
 +netstat -na | egrep 5432
 +tcp          0      0  *.5432 ​                ​*.* ​                   LISTEN
 +tcp6         ​0 ​     0  *.5432 ​                ​*.* ​                   LISTEN
 +0xfffffe801de05778 stream ​     0      0 0xfffffe801d70fbc0 ​               0x0                0x0                0x0 /​tmp/​.s.PGSQL.5432
 +</​sxh>​
 +
 +
 +Agora vamos acessar o nosso postgres para ver se está tudo ok
 +<sxh bash>
 +psql -h localhost -U postgres -W
 +Password for user postgres: ​
 +psql (9.1.2)
 +Type "​help"​ for help.
 +
 +postgres=# \q
 +</​sxh>​
 +
 +
 +Agora vamos acertar as permissões do tmp da jaula do Apache
 +<sxh bash>
 +chmod 1777 /​var/​www/​tmp
 +</​sxh>​
 +
 +Agora vamos acertar o rc.conf para inicializar o Apache e o <​nowiki>​PostgreSQL</​nowiki>​
 +<sxh apache>
 +vim /​etc/​rc.conf
 +[...]
 +#Deixar o httpd_flags como abaixo
 +httpd_flags="" ​         # for normal use: ""​ (or "​-DSSL"​ after reading ssl(8))
 +#Deixar o pkg_scripts como abaixo
 +pkg_scripts="​postgresql"​
 +</​sxh>​
 +
 +
 +Agora vamos criar um arquivo para testarmos o php
 +<sxh bash>
 +echo "<?​php phpinfo(); ?>" > /​var/​www/​htdocs/​phpinfo.php
 +</​sxh>​
 +
 +Agora vamos criar um arquivo para testarmos o php com o <​nowiki>​PostgreSQL</​nowiki>​
 +<sxh php>
 +vim /​var/​www/​htdocs/​pgsql.php
 +<?php
 +$link = pg_connect("​host=localhost port=5432 user=postgres password=S3Nh4"​);​
 +if (!$link) {
 +    die('​Could not connect: ' . pg_last_error($link));​
 +}
 +echo '​Connected successfully';​
 +pg_close($link);​
 +?>
 +</​sxh>​
 +
 +Agora vamos mandar reiniciar o nosso servidor para recarregarmos todas as novas configurações
 +<sxh bash>
 +shutdown -r now
 +</​sxh>​
 +
 +Agora vamos testar o php acessando http://​ip_servidor/​phpinfo.php
 +
 +Agora vamos testar o <​nowiki>​PostgreSQL</​nowiki>​ acessando http://​ip_servidor/​pgsql.php
 +
 +====== Habilitando o https ======
 +
 +Vamos criar a primeira chave do servidor
 +<sxh bash>
 +openssl genrsa -des3 -out /​etc/​ssl/​private/​server.key 1024
 +Generating RSA private key, 1024 bit long modulus
 +..........................................++++++
 +...++++++
 +e is 65537 (0x10001)
 +Enter pass phrase for /​etc/​ssl/​private/​server.key:​
 +Verifying - Enter pass phrase for /​etc/​ssl/​private/​server.key:​
 +</​sxh>​
 +
 +Agora vamos gerar um pedido de assinatura do nosso certificado
 +<sxh bash>
 + ​openssl req -new -key /​etc/​ssl/​private/​server.key -out /​etc/​ssl/​private/​server.csr
 +Enter pass phrase for /​etc/​ssl/​private/​server.key:​
 +You are about to be asked to enter information that will be incorporated
 +into your certificate request.
 +What you are about to enter is what is called a Distinguished Name or a DN.
 +There are quite a few fields but you can leave some blank
 +For some fields there will be a default value,
 +If you enter '​.',​ the field will be left blank.
 +-----
 +Country Name (2 letter code) []:BR
 +State or Province Name (full name) []:Parana
 +Locality Name (eg, city) []:Curitiba
 +Organization Name (eg, company) []:Douglas
 +Organizational Unit Name (eg, section) []:TI
 +Common Name (eg, fully qualified host name) []:​openbsd.douglasqsantos.com.br
 +Email Address []:​douglas.q.santos@gmail.com
 +
 +Please enter the following '​extra'​ attributes
 +to be sent with your certificate request
 +A challenge password []:
 +An optional company name []:Douglas
 +</​sxh>​
 +
 +Agora vamos assinar o nosso certificado
 +<sxh bash>
 +openssl x509 -req -days 365 -in /​etc/​ssl/​private/​server.csr -signkey /​etc/​ssl/​private/​server.key -out /​etc/​ssl/​server.crt
 +Signature ok
 +subject=/​C=BR/​ST=Parana/​L=Curitiba/​O=Douglas/​OU=TI/​CN=openbsd.douglasqsantos.com.br/​emailAddress=douglas.q.santos@gmail.com
 +Getting Private key
 +Enter pass phrase for /​etc/​ssl/​private/​server.key:​
 +</​sxh>​
 +
 +Agora vamos tirar a senha do certificado pois senão a cada vez que iniciarmos o apache ele vai solicitar a senha
 +<sxh bash>
 +cd /​etc/​ssl/​private
 +cp server.key server.key.orig
 +openssl rsa -in server.key.orig -out server.key
 +Enter pass phrase for server.key.orig:​
 +writing RSA key
 +</​sxh>​
 +
 +Agora vamos acertar o /​etc/​rc.conf para o apache reconhecer o https
 +<sxh apache>
 +vim /​etc/​rc.conf
 +[...]
 +httpd_flags="​-DSSL"​
 +</​sxh>​
 +
 +Agora vamos parar o apache
 +<sxh bash>
 +apachectl stop
 +/​usr/​sbin/​apachectl stop: httpd stopped
 +</​sxh>​
 +
 +Agora vamos inicializar ele com o suporte a ssl
 +<sxh bash>
 +apachectl startssl
 +/​usr/​sbin/​apachectl startssl: httpd started
 +</​sxh>​
 +
 +Agora já podemos testar o apache em:
 +
 +Agora vamos testar o php acessando https://​ip_servidor/​phpinfo.php
 +
 +Agora vamos testar o <​nowiki>​PostgreSQL</​nowiki>​ acessando https://​ip_servidor/​pgsql.php
 +
 +
 +====== Referências ======
 +
 +  - http://​techdebug.com/​blog/​2008/​09/​29/​mysql-on-openbsd-43-using-the-apache-chroot/​
 +  - http://​www.h-i-r.net/​2009/​10/​oamp-openbsd-46-chroot-apache-mysql-php.html