Criando e configurando openLDAP e NFS com clientes Linux e Windows

Sejam bem vindos ao sétimo post do blog.
Iremos configurar o LDAP (Lightweight Directory Access Protocol) , que tem como objetivo centralizar e padronizar dados geralmente usado pelo meio corporativo para integrar e autenticar dados da organização.

Instalando e configurando o openLdap Client/Server

[shell]Sudo dnf install openldap openldap-clients openldap-servers;[/shell]

Após a instalação, iremos configurar o arquivo de configuração da base de dados, copiando arquivo exemplo para o local correto e alterando o owner para ldap com os comandos abaixo:

[shell]sudo cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG ;
chown -R ldap:ldap /var/lib/ldap[/shell]

Gerando uma senha para o adminstrador:

[shell]sudo slappasswd[/shell]

A senha será: senha

Com retorno:

[shell]New password:
Re-enter new password:
{SSHA}KFqiattbutOk81eO3DDG7HEhLyJRH2mG[/shell]

Onde será exibido o hash gravado:

{SSHA}KFqiattbutOk81eO3DDG7HEhLyJRH2mG

Habilitando e ativando o serviço:

[shell]systemctl enable slapd.service ; systemctl start slapd.service;[/shell]

Configurando Senha Root do LDAP

Abra o arquivo ldaprootpasswd.ldif (inexistente):

[shell]sudo vi /tmp/ldaprootpasswd.ldif;[/shell]

E adicione o conteúdo:

[shell]
dn: olcDatabase={0}config,cn=config
changetype: add
add: olcRootPW
olcRootPW: {SSHA}PASSWORD
[/shell]

Altere a última linha com o hash extraido no comando slappasswd
e altere o {SSHA}PASSWORD por {SSHA}KFqiattbutOk81eO3DDG7HEhLyJRH2mG como no meu exemplo.

Iremos importar a base de dados para adicionar a senha de root:

[shell]sudo ldapadd -H ldapi:// -Y EXTERNAL -f /tmp/ldaprootpasswd.ldif[/shell]

Feito isso, iremos adicionar diversos arquivos ao diretório /etc/openldap/schema:

[shell]for def in cosine.ldif nis.ldif inetorgperson.ldif; do sudo ldapadd -H ldapi:// -Y EXTERNAL -f /etc/openldap/schema/$def; done[/shell]

Criando domínio no LDAP

[shell]sudo vi /tmp/ldapdomain.ldif[/shell]

Com o conteúdo:

[shell]
dn: olcDatabase={1}monitor,cn=config
changetype: add
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
read by dn.base="cn=Manager,dc=dominiocaramelo,dc=com" read by * none

dn: olcDatabase={2}mdb,cn=config
changetype: add
replace: olcSuffix
olcSuffix: dc=dominiocaramelo,dc=com

dn: olcDatabase={2}mdb,cn=config
changetype: add
replace: olcRootDN
olcRootDN: cn=Manager,dc=dominiocaramelo,dc=com

dn: olcDatabase={2}mdb,cn=config
changetype: add
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

dn: olcDatabase={2}mdb,cn=config
changetype: add
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=Manager,dc=dominiocaramelo,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=dominiocaramelo,dc=com" write by * read
[/shell]

Importando domínio ao ldap:

[shell]sudo ldapadd -H ldapi:// -Y EXTERNAL -f /tmp/ldapdomain.ldif[/shell]

Com retorno:

[shell]
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry entry "olcDatabase={1}monitor,cn=config"

adding new entry entry "olcDatabase={2}mdb,cn=config"

adding new entry entry "olcDatabase={2}mdb,cn=config"

adding new entry entry "olcDatabase={2}mdb,cn=config"

adding new entry entry "olcDatabase={2}mdb,cn=config"
[/shell]

Adicionando níveis a base organizacional.

Criar arquivo baseldapdomain.ldif com o comando:

[shell]sudo vi /tmp/baseldapdomain.ldif[/shell]

Com o conteúdo:

[shell]
dn: dc=dominiocaramelo,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: dominiocaramelo com
dc: dominiocaramelo

dn: cn=Manager,dc=dominiocaramelo,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=dominiocaramelo,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=dominiocaramelo,dc=com
objectClass: organizationalUnit
ou: Group
[/shell]

Adicionando ao ldap:

[shell]sudo ldapadd -x -D cn=Manager,dc=dominiocaramelo,dc=com -W -f /tmp/baseldapdomain.ldif[/shell]

Com retorno:

[shell]adding new entry "dc=dominiocaramelo,dc=com"

adding new entry "cn=Manager,dc=dominiocaramelo,dc=com"

adding new entry "ou=People,dc=dominiocaramelo,dc=com"

adding new entry "ou=Group,dc=dominiocaramelo,dc=com"
[/shell]

Iremos criar 3 grupos:

1 – Desenvolvimento
2 – Infraestrutura
3 – Operação

Criando Grupos no LDAP

Criando Grupo Desenvolvimento

Criando o grupo:

[shell]sudo groupadd Grupo_Desenvolvimento;[/shell]

Descobrindo o id do grupo:

[shell]sudo getent group Grupo_Desenvolvimento | cut -d: -f3[/shell]

Criando arquivo de importação:

[shell]sudo vi /tmp/ldapgrupodesenvolvimento.ldif[/shell]

Com o conteúdo:

[shell]
dn: cn=Grupo_Desenvolvimento,ou=Group ,dc=dominiocaramelo,dc=com
objectClass: top
objectclass: posixGroup
gidNumber: 1007
cn: Grupo_Desenvolvimento
description: grupo do setor de desenvolvimento
[/shell]

Adicionando ao LDAP:

[shell]sudo ldapadd -x -D cn=Manager,dc=dominiocaramelo,dc=com -W -f /tmp/ldapgrupodesenvolvimento.ldif[/shell]

Com retorno:

[shell]Enter LDAP Password:
adding new entry "cn=desenvolvimento,ou=groups,dc=dominiocaramelo,dc=com"
[/shell]

Criando Grupo Infraestrutura

Criando o grupo:

[shell]sudo groupadd Grupo_Infraestrutura;[/shell]

Descobrindo o id do grupo:

[shell]sudo getent group Grupo_Infraestrutura | cut -d: -f3[/shell]

Criando o grupo:

[shell]sudo groupadd Grupo_Infraestrutura;[/shell]

Criando arquivo de importação:

[shell]sudo vi /tmp/ldapgrupoinfraestrutura.ldif[/shell]

Com o conteúdo:

[shell]
dn: cn=Grupo_Infraestrutura,ou=Group,dc=dominiocaramelo,dc=com
objectClass: top
objectclass: posixGroup
gidNumber: 1003
cn: Grupo_Infraestrutura
description: grupo do setor de Infraestrutura
[/shell]

Adicionando ao LDAP:

[shell]sudo ldapadd -x -D cn=Manager,dc=dominiocaramelo,dc=com -W -f /tmp/ldapgrupoinfraestrutura.ldif[/shell]

Com retorno:

[shell]
Enter LDAP Password:
adding new entry "cn=desenvolvimento,ou=groups,dc=dominiocaramelo,dc=com"
[/shell]

Criando Grupo Operação

Descobrindo o id do grupo:

[shell]sudo getent group Desenvolvimento | cut -d: -f3[/shell]

Criando arquivo de importação:

[shell]sudo vi /tmp/ldapgrupooperacao.ldif[/shell]

Com o conteúdo:

[shell]
dn: cn=Grupo_Operacao,ou=Group ,dc=dominiocaramelo,dc=com
objectClass: top
objectclass: posixGroup
gidNumber: 1005
cn: Grupo_Operacao
description: grupo do setor de Operacao
[/shell]

Adicionado ao LDAP:

[shell]sudo ldapadd -x -D cn=Manager,dc=dominiocaramelo,dc=com -W -f /tmp/ldapgrupooperacao.ldif[/shell]

Com retorno:

[shell]
Enter LDAP Password:
adding new entry "cn=operacao,ou=Group ,dc=dominiocaramelo,dc=com"
[/shell]

Criando usuários no LDAP

Criando usuário Infraestrutura

Criando usário no Sistema Operacional:

[shell]sudo useradd -G Grupo_Infraestrutura primeiro.infra[/shell]

Criando senha para usuário:

[shell]sudo passwd primeiro.infra[/shell]

Com retorno:

[shell]Mudando senha para o usuário primeiro.infra.[/shell]

Recuperando dados do usuário:

[shell]sudo id primeiro.infra[/shell]

Com retorno:

[shell]uid=1003(primeiro.infra) gid=1004(primeiro.infra) grupos=1004(primeiro.infra),1003(Grupo_Infraestrutura)[/shell]

Gerando senha para o LDAP:

[shell]sudo slappasswd -h {SHA} -s infra[/shell]

Gerando arquivo para importação no LDAP:

[shell]sudo vi /tmp/ldapcriarusuariouminfra.ldif[/shell]

Com o conteúdo:

[shell]
dn: uid=primeiro.infra,ou=People,dc=dominiocaramelo,dc=com
cn: Primeiro Infra
givenName: Primeiro
sn: Infra
uid: primeiro.infra
uidNumber: 1004
gidNumber: 1003
homeDirectory: /home/primeiro.infra
mail: primeiro.infra@dominiocaramelo.com
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
loginShell: /bin/bash
userPassword: {SHA}XgOljcCFDlE3qOu84pYQZwx1au0=
[/shell]

Adicionando ao ldap

[shell]sudo ldapadd -x -D cn=Manager,dc=dominiocaramelo,dc=com -W -f /tmp/ldapcriarusuariouminfra.ldif[/shell]

Com retorno:

[shell]adding new entry "uid=primeiro.infra,ou=People,dc=dominiocaramelo,dc=com"[/shell]

Criando usuário Operação

Criando usário no Sistema Operacional:

[shell]sudo useradd -G Grupo_Operacao primeiro.operacao[/shell]

Criando senha para usuário:

[shell]sudo passwd primeiro.operacao[/shell]

Com retorno:

[shell]Mudando senha para o usuário primeiro.operacao.[/shell]

Recuperando dados do usuário:

[shell]sudo id primeiro.operacao[/shell]

Com retorno:

[shell]uid=1004(primeiro.operacao) gid=1006(primeiro.operacao) grupos=1006(primeiro.operacao),1005(Grupo_Operacao)[/shell]

Gerando senha para o LDAP:

[shell]sudo slappasswd -h {SHA} -s operacao[/shell]

Gerando arquivo para importação no LDAP:

[shell]sudo vi /tmp/ldapcriarusuarioumoperacao.ldif[/shell]

Com o conteúdo:

[shell]
dn: uid=primeiro.operacao,ou=People,dc=dominiocaramelo,dc=com
cn: Primeiro Operacao
givenName: Primeiro
sn: Operacao
uid: primeiro.operacao
uidNumber: 1006
gidNumber: 1005
homeDirectory: /home/primeiro.operacao
mail: primeiro.infra@dominiocaramelo.com
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
loginShell: /bin/bash
userPassword: {SHA}RcjwHPqOKoleAPGamrayTjkE9dw=
[/shell]

Adicionando ao ldap

[shell]sudo ldapadd -x -D cn=Manager,dc=dominiocaramelo,dc=com -W -f /tmp/ldapcriarusuarioumoperacao.ldif[/shell]

Com retorno:

[shell]adding new entry "uid=primeiro.operacao,ou=People,dc=dominiocaramelo,dc=com"[/shell]

Criando usuário Desenvolvimento

Criando usário no Sistema Operacional:

[shell]sudo useradd -G groupadd Grupo_Desenvolvimento primeiro.desenvolvimento[/shell]

Criando senha para usuário:

[shell]sudo passwd primeiro.desenvolvimento[/shell]

Com retorno:

[shell]Mudando senha para o usuário primeiro.desenvolvimento.
Nova senha:
SENHA INCORRETA: A senha é menor do que 8 caracteres
Redigite a nova senha:
passwd: todos os tokens de autenticações foram atualizados com sucesso.
[/shell]

Recuperando dados do usuário:

[shell]sudo id primeiro.desenvolvimento[/shell]

Com retorno:

[shell]uid=1005(primeiro.desenvolvimento) gid=1008(primeiro.desenvolvimento) grupos=1008(primeiro.desenvolvimento),1007(Grupo_Desenvolvimento)[/shell]

Gerando senha para o LDAP:

[shell]sudo slappasswd -h {SHA} -s desenvolvimento[/shell]

Gerando arquivo para importação no LDAP:

[shell]sudo vi /tmp/ldapcriarusuarioumdesenvolvimento.ldif[/shell]

Com o conteúdo:

[shell]
dn: uid=primeiro.desenvolvimento,ou=People,dc=dominiocaramelo,dc=com
cn: Primeiro Desenvolvimento
givenName: Primeiro
sn: Desenvolvimento
uid: primeiro.desenvolvimento
uidNumber: 1008
gidNumber: 1007
homeDirectory: /home/primeiro.desenvolvimento
mail: primeiro.infra@dominiocaramelo.com
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
loginShell: /bin/bash
userPassword: {SHA}eo6JbSC9OWjUesX8IEtSGPJCZ/A=
[/shell]

Adicionando ao LDAP:

[shell]sudo ldapadd -x -D cn=Manager,dc=dominiocaramelo,dc=com -W -f /tmp/ldapcriarusuarioumdesenvolvimento.ldif[/shell]

Com retorno:

[shell]adding new entry "uid=primeiro.desenvolvimento,ou=People,dc=dominiocaramelo,dc=com"[/shell]

Facilitando o trabalho com PHP Ldap Admin

Iremos trabalhar com a lib PHP Ldap Admin no link.

Criando host para o ldap.

Adicione o host : dominiocaramelo.com ao ip 127.0.0.1 no documento /etc/hosts

Configurando no Nginx:

[shell]sudo vi /etc/nginx/conf.d/phpldapadmin.conf[/shell]

Com o conteúdo:

[shell]
server {

listen 80;
server_name phpldapadmin.local;
#root /usr/share/nginx/html;
root /var/www/html/phpldapadmin;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
}

location ~ \.php$ {
root /var/www/html/phpldapadmin;
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php56-fpm;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

}
[/shell]

Restartando servidor:

[shell]sudo systemctl restart nginx;[/shell]

Configurando no Apache:

[shell]sudo vim /etc/httpd/conf.d/phpldapadmin.conf[/shell]

Com o conteúdo:

[shell]
<VirtualHost *:81>
DocumentRoot /var/www/html/phpldapadmin/
ServerName phpldapadmin.local
ServerAlias phpldapadmin.local

<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
<IfModule mod_fcgid.c>
<FilesMatch \.php$>
SetHandler application/x-httpd-php-default
</FilesMatch>
</IfModule>
</Directory>
</VirtualHost>
[/shell]

Restartando servidor:

[shell]sudo systemctl restart httpd[/shell]

Editando configuração da aplicação:

Copie o arquivo config.php.example para config.php:

[shell]sudo cp /var/www/html/phpldapadmin/config/config.php.example /var/www/html/phpldapadmin/config/config.php[/shell]

Configurando conexão ao LDAP:

adicione as Linhas

[shell]
$servers->setValue(‘server’,’name’,’dominiocaramelo.com’);
$servers->setValue(‘server’,’base’,array(‘dc=dominiocaramelo,dc=com’));
[/shell]

Após a linha com o valor:

[shell]$servers->newServer(‘ldap_pla’);[/shell]

Acesse a aplicação no endereço: phpldapadmin.local

Login:

Login do php Ldap Admin

Login do php Ldap Admin

Tela Inicial e menus com itens cadastrados antes:

Inicio do php Ldap Admin

Inicio do php Ldap Admin

Configurando Client

Linux

Instalando Componentes:

[shell]apt-get install ldap-auth-client nscd;[/shell]

Após instalado iremos preparar a configuração:

[shell]
auth-client-config -t nss -p lac_ldap;
[/shell]

Definindo domínio do LDAP

Definindo domínio do LDAP

Iremos configurar: ldap://dominiocaramelo.com

Definindo conta e adminstrador do LDAP

Definindo conta e adminstrador do LDAP

Iremos definir: cn=Manager,dc=dominiocaramelo,dc=com

Definindo versão do LDAP

Definindo versão do LDAP

Iremos definir : 3

Definindo configurações PAM

Definindo configurações PAM

Configurando criação do /home automático:

[shell]sudo vim /usr/share/pam-configs/mkhomedir[/shell]

Com o seguinte conteúdo.

[shell]
Name:mkhomedir
Default:yes
Priority:900
Session-Type:Additional
Session-Interactive-Only:yes
Session:

required pam_mkhomedir.so skel=/etc/skel umask=0022

[/shell]

Atualizando pam-auth:

Com o comando :

[shell]sudo pam-auth-update[/shell]

E o módulo será exibido ativo.

Reiniciando nscd:

[shell]sudo service nbsp restart;[/shell]

Após isso veremos os novos usuários importados, com o comando:

[shell]getent passwd;[/shell]

Onde surgiram os usuários:

[shell]
primeiro.infra:x:1003:1004:Primeiro Infra:/home/primeiro.infra:/bin/bash
primeiro.operacao:x:1004:1006:Primeiro Operacao:/home/primeiro.operacao:/bin/bash
primeiro.desenvolvimento:x:1005:1008:Primeiro Desenvolvimento:/home/primeiro.desenvolvimento:/bin/bash
[/shell]

Ativando usuários:

Login usuário LDAP

Login usuário LDAP

É possível usar o login de um usuário pelo GUI, obtendo o mesmo resultado (criação de um perfil login na estação).

Diretório home novo usuário

Diretório home novo usuário

Para utilizar o compartilhamento NFS, é necessário seguir o procedimento contido em: Criando e consumindo uma rede de compartilhamento NFS

Raiz do compartilhamento NFS

Raiz do compartilhamento NFS

Arquivo aberto no compartilhamento NFS

Arquivo aberto no compartilhamento NFS

Windows

Iremos configurar o client no Windows através do programa pGina disponível no link

Para configurar a aplicação, iremos a aba Plugin session:

Configurando pGina

Configurando pGina

Ao clicar em configure, preencha os parâmetros.

Configurando Parâmetros do LDAP no pGina

Configurando Parâmetros do LDAP no pGina

Depois de configurar , iremos a a aba Plugin order.

Vamos colocar o LDAP antes de Local Machine como a imagem abaixo:

Ordenando Protocolo no pGina

Ordenando Protocolo no pGina

Agora iremos simular as configurações na aba Simulation:

Simulando usuário no pGina

Simulando usuário no pGina

Realizando Login:

Realizando login no Windows

Realizando login no Windows

Windows preparando usuário

Windows preparando usuário

Usuário finalizado

Usuário finalizado

O próximo passo é habilitar o Serviço NFS para acesso à montagem no servidor.

Iremos em: Painel de Controle -> Programas -> Ativar ou desativar recursos do Windows:

Habilitando NFS no Windows

Habilitando NFS no Windows

Mapear unidade de rede:

Opção de mapeamento de rede

Opção de mapeamento de rede

Configurando montagem:

Configurando montagem NFS no Windows

Configurando montagem NFS no Windows

Montagem efetuada,como visto abaixo:

Raiz do compartilhamento

Arquivo aberto no compartilhamento:

Exibindo arquivo do compartilhamento

Exibindo arquivo do compartilhamento

Raiz do compartilhamento:

Compartilhamento exibido na barra lateral

Compartilhamento exibido na barra lateral

Observação: recurso disponível nas versões Ultimate e Enterprise do Windows 7.

Temos um LDAP e rede de NFS de compartilhamento para serem usados.

É isso aí.
Espero ter sido claro na explicação.
Valeu e até a próxima!

Criando e consumindo uma rede de compartilhamento NFS

Sejam bem vindos ao sexto post do blog.
Iremos configurar um servidor NFS (Network File System) , que tem como objetivo compartilhar diretórios e arquivos entre máquinas conectadas em rede, através deste protocolo.

Configurando Server

A Instalação será feita em um Fedora 25, começando com o seguinte comando:

[shell]sudo dnf install nfs-utils[/shell]

Arquivos de configuração:

Diretório Finalidade
/etc/exports Arquivo principal de configuração
/etc/hosts.allow hosts para habilitar acesso
/etc/hosts.deny Hosts para negar acesso

Para utilizar o serviço nfsd, será necessario ativar os itens abaixo:

[shell]sudo systemctl enable rpcbind; sudo systemctl enable nfs-server ; sudo service rpcbind start; sudo service nfs-server start;[/shell]

Para verificar o status do serviço:

[shell]service nfs status;[/shell]

Com output:

Agora, iremos prover os diretórios de compartilhamento, criando diretórios, arquivos e aplicando permissões:

[shell]
sudo mkdir -p /home/compartilhamento/leitura;
sudo mkdir -p /home/compartilhamento/leituraescrita;
sudo mkdir -p /home/compartilhamento/vip;
sudo mkdir -p /home/compartilhamento/multirules;

sudo chmod 777 /home/compartilhamento/leitura;
sudo chmod 777 /home/compartilhamento/leituraescrita;
sudo chmod 777 /home/compartilhamento/vip;
sudo chmod 777 /home/compartilhamento/multirules;[/shell]

Criando arquivos de teste:

[shell]sudo echo ‘sou escrita’ /home/compartilhamento/leituraescrita/escrita.txt;
sudo echo ‘sou leitura’ /home/compartilhamento/leitura/leitura.txt;
sudo echo ‘apenas o escolhido’ /home/compartilhamento/vip/vip.txt;
sudo echo ‘aqui tem duas regra’ /home/compartilhamento/multirules/multirules.txt;[/shell]

Observação: O parâmetro -p do mkdir significa parents, que cria toda a hierarquia até o diretório desejado.

Diretório Finalidade
leitura Apenas leitura
leituraescrita apenas leitura
vip Apenas uma das máquinas da rede poderá enxergar o diretório
multirules Onde a rede poderá usar leitura e uma máquina poderá editar

Configurando: /etc/exports

A configuração precisará da faixa ou IP, onde o compartilhamento será disponibilizado.

Verifique com o comando:

[shell]ifconfig[/shell]

Depois de recuperar a Faixa de IP, iremos configurar:

[shell]
/home/compartilhamento/leitura 192.168.2.0/255.255.255.0(ro,sync,no_subtree_check,root_squash)
/home/compartilhamento/leituraescrita 192.168.2.0/255.255.255.0(rw,sync,no_subtree_check,root_squash)
/home/compartilhamento/vip 192.168.2.108(ro,sync,no_subtree_check,root_squash)
/home/compartilhamento/multirules 192.168.2.0/255.255.255.0(ro,sync,no_subtree_check,root_squash) 192.168.2.108(rw,sync,no_subtree_check,root_squash)
[/shell]

Descrição da configuração acima:

/diretorio/para/compartilhar IP_OU_FAIXA_OU_HOST/MASCARA(OPCIONAL) (OPCOES)

No meu caso, minha faixa é 192.168.2.0
Também é possível disponibilizar apenas para um host.

Aplicando mudança com o comando:

[shell]sudo exportfs -ra;[/shell]

Opções disponíveis:

Diretório Finalidade
(rw) Leitura e escrita
(ro) Leitura
(root_squash) Impede que usuarios root conectados remotamente tenham privilégios de root,opção padrão.
(no_root_squash) Permite que usuarios root conectados remotamente tenham privilégios de root
(async) Opção de melhor desempenho onde o servidor grava dados sem intervalo regular, porém se houver falha durante a escrita solicitada pelo host, os dados podem ser perdidos, principalmente se forem feitos por hosts diferentes ao mesmo tempo
(wdelay) Faz com que o servidor retenha a gravação caso haja suspeita de outra solicitação de escrita. Somente pode ser usada com a opção sync
(no_wdelay) O Oposto à opção wdelay
(all_squash) Identificar o IDs de usuário e grupo a que serão usados por usuários remotos
(no_subtree_check) Não é checada a hierarquia de diretório que está sendo acessada.
Para grande volume, tem um desempenho melhor
(sync) Usado por padrão, aguarda a confirmação de escrita quando o arquivo terminar a escrita

Reiniciando serviço NFS Server:

[shell]sudo systemctl restart nfs-server;[/shell]

Caso tenha alterado os arquivos: /etc/hosts.allow ou /etc/host.deny

Será necessário reiniciar o servico nfs:

[shell]sudo systemctl status nfs;[/shell]

Configurando: /etc/hosts.allow

[shell]sudo vim /etc/hosts.allow;[/shell]

Aplique as seguintes configurações, Usando a mesma faixa ou host da SUA rede:

[shell]portmap:192.168.2.0/255.255.255.0
lockd:192.168.2.0/255.255.255.0
mountd:192.168.2.0/255.255.255.0
rquotad:192.168.2.0/255.255.255.0
statd:192.168.2.0/255.255.255.0[/shell]

Configurando: /etc/hosts.deny

[shell]sudo vim /etc/hosts.deny;[/shell]

Aplique as seguintes configurações:

[shell]
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
[/shell]

Finalizado o Server, iremos ao próximo passo:

Configurando Client

Linux

Nosso primeiro cliente é um Ubuntu 16.10.

Instalação do client.

Executando o comando Debian Based:

[shell]sudo apt-get install nfs-common;[/shell]

Instalando no Fedora /Cent OS:

[shell]sudo yum install nfs-utils;[/shell]

Iremos consumir o serviço preparado no NFS Server acima.

Criando diretório onde será compartilhado o diretório no servidor localmente:

[shell]sudo mkdir -p /mnt/nfs_client_dir/leitura;
sudo mkdir -p /mnt/nfs_client_dir/leituraescrita;
sudo mkdir -p /mnt/nfs_client_dir/vip;
sudo mkdir -p /mnt/nfs_client_dir/multirules;[/shell]

Aplicando permissões:

[shell]sudo chmod 755/mnt/nfs_client_dir/leitura;
sudo chmod 755/mnt/nfs_client_dir/leituraescrita;
sudo chmod 755/mnt/nfs_client_dir/vip;
sudo chmod 755/mnt/nfs_client_dir/multirules;
[/shell]

Verificando resultado:

Executar o comando para testar:

[shell]sudo mount -o vers=3 -v 192.168.2.107:/home/compartilhamento/multirules /mnt/nfs_client_dir/multirules;[/shell]

Explicando comando:

mount -o opcao=valor -v servidor:diretorio_no_servidor diretorio_local

Verificando resultado:

Acionando por: /etc/fstab

[shell]sudo vim /etc/fstab;[/shell]

Aplique as seguintes configurações, usando a mesma faixa ou host da SUA rede:

[shell]192.168.2.105:/home/compartilhamento/leitura /mnt/nfs_client_dir/leitura nfs vers=3,rsize=8192,wsize=8192,timeo=14,intr
192.168.2.105:/home/compartilhamento/vip /mnt/nfs_client_dir/vip nfs vers=3,rsize=8192,wsize=8192,timeo=14,intr
192.168.2.105:/home/compartilhamento/leituraescrita /mnt/nfs_client_dir/leituraescrita nfs vers=3,rsize=8192,wsize=8192,timeo=14,intr
192.168.2.105:/home/compartilhamento/multirules /mnt/nfs_client_dir/multirules nfs vers=3,rsize=8192,wsize=8192,timeo=14,intr[/shell]

Possibilitando que ao iniciar a máquina, a montagem seja feita automaticamente.

Para montar todas as unidades configuradas no: /etc/fstab

[shell]sudo mount -a[/shell]

Verificando Resultado:

Iremos conferir parâmetros de ro,rw no NFS server.

Salvando arquivo com permissão de escrita:

Salvando arquivo com permissão apenas de leitura:

Terminamos a configuração no Linux.

Windows

Nosso segundo cliente é um Windows 7.

Iremos consumir com o Windows. O software utilizado seá o NFSClient encontrado neste link.

Após a instalação,abrindo o programa, iremos configurar o host clicando em Add no canto superior direito:

Após configurar, clique em Connect:

A opção Z , a última no menu, montará a Unidade no Windows Explorer:

Conferindo diretórios:

Salvando arquivo com permissão de escrita:

Salvando arquivo com permissão apenas de leitura:

Temos uma rede de compartilhamento NFS pronta para ser usada.

É isso aí.
Espero ter sido claro na explicação.
Valeu e até a próxima!

Configurando Nginx e Apache para diversas versões do PHP

Sejam, bem vindos ao quinto post do blog, tendo em vista que já temos um Nginx configurado e/ou um Apache , iremos prepara-los para poder executar as diversas versões do PHP.

Sendo necessário seguir os passos dos posts:
Configurando NGINX, PHP-FPM e Mysql no Fedora
Instalando mais de uma versão do PHP com repositórios Remi

Configurando o Nginx

Iremos criar um host para testar a versão 5.6 do php

1- criar um diretório para testar versão

[shell]sudo mkdir /var/www/html/testar_versao/ ; echo ‘<?php phpinfo();?>’; /var/www/html/testar_versao/index.php[/shell]

RETIRANDO CONFIGURAÇÃO PADRÃO DE EXECUÇÃO DO PHP

No arquivo /etc/nginx/default.d o bloco deverá estar comentado como o exemplo abaixo, caso não esteja , comente e salve

[shell]
#location ~ \.php$ {
# try_files $uri =404;
# fastcgi_intercept_errors on;
# fastcgi_index index.php;
# include fastcgi_params;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi_pass php-fpm;
#}
[/shell]

Com isso , sendo necessário configurar em cada host (em /etc/nginx/conf.d)

Criando parâmetro para nova versão

Em /etc/nginx/conf.d/php-fpm.conf

[shell]
upstream php-fpm {
server unix:/run/php-fpm/www.sock;
}

upstream php56-fpm {
server unix:/opt/remi/php56/root/var/run/php-fpm/www.sock;
}
[/shell]

Adicionar php56-fpm o mesmo deve ser feito para contemplar novas versões do php configuradas

Criando host para aplicação : testando php

[shell]vim /etc/nginx/conf.d/testar_versao.conf;[/shell]

E adicione o seguinte conteúdo

[shell]
server {
listen 80;
server_name testarversao.local;
#root /usr/share/nginx/html;
root /var/www/html/testar_versao;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
}

location ~ \.php$ {
root /var/www/html/testar_versao;
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php56-fpm;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

}[/shell]

Onde podemos notar que a propriedade (location ~ \.php$)
O atributo recebe

[shell]fastcgi_pass php56-fpm;[/shell]

Ao salvar verificar sintaxe do arquivo

[shell]nginx -t[/shell]

Com output

[shell]
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[/shell]

altere o arquivo /etc/hosts

E adicione o host testarversao.local ao ip 127.0.0.1
E reinicie o nginx

[shell]systemctl reload nginx[/shell]

Verifique o resultado em : (http://testarversao.local/)

Caso quisermos usar o php corrente do sistema operacional.

Na propriedade (location ~ \.php$)

O atributo deve ser alterado para:

[shell]fastcgi_pass php-fpm;[/shell]

E reiniciar o Nginx.

Com o seguinte resultado.


Com isso finalizando o processo para o Nginx.

Configurando o Apache

Para configurar o apache é necessario alterar o script:
/etc/httpd/conf.d/fcgid.conf

[shell]sudo vim /etc/httpd/conf.d/fcgid.conf[/shell]

E adicionar o trecho:

[shell]<IfModule mod_fcgid.c>
# Use FastCGI to process .fcg .fcgi &amp;amp; .fpl scripts
AddHandler fcgid-script fcg fcgi fpl

# PHP 5.6
Action application/x-httpd-php56 /cgi-bin/php56.fcgi
AddType application/x-httpd-php56 .php56

# PHP default
Action application/x-httpd-php-default /cgi-bin/php-default.fcgi
AddType application/x-httpd-php-default .php-default

# Sane place to put sockets and shared memory file
FcgidIPCDir /var/run/mod_fcgid
FcgidProcessTableFile /var/run/mod_fcgid/fcgid_shm
</IfModule>
[/shell]

onde serão criados os modulos para leitura das versões expecificadas acima.

Iremos criar o arquivo de configuração do php default.

[shell]sudo vim /var/www/cgi-bin/php-default.fcgi[/shell]

com os seguintes dados:

[shell]
#!/bin/bash
PHPRC="/etc/php.ini"
PHP_CGI="/usr/bin/php-cgi"
PHP_FCGI_CHILDREN=8
PHP_FCGI_MAX_REQUESTS=3000
export PHPRC
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS
exec $PHP_CGI
[/shell]

E salve.
E o arquivo para o php 5.6.

[shell]sudo vim /var/www/cgi-bin/php56.fcgi[/shell]

[shell]
#!/bin/bash
PHPRC="/opt/remi/php56/root/etc/php.ini"
PHP_CGI="/opt/remi/php56/root/bin/php-cgi"
PHP_FCGI_CHILDREN=8
PHP_FCGI_MAX_REQUESTS=3000
export PHPRC
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS
exec $PHP_CGI
[/shell]

E salve.

Criando host para aplicação.

[shell]sudo vim /etc/httpd/testarversao.conf[/shell]

Observação estou usando a porta 81 para executar o Apache caso use como 80 ou outra , alterar <VirtualHost *:81>
para <VirtualHost *:80> por exemploCom o conteúdo:

 

[shell]
<VirtualHost *:81>
DocumentRoot /var/www/html/testar_versao/
ServerName testarversao.local
ServerAlias testarversao.local
ErrorLog /var/www/html/testar_versao/LOG/http_log
CustomLog /var/www/html/testar_versao/LOG/example.com-access_log common

<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
<IfModule mod_fcgid.c>
<FilesMatch \.php$>
SetHandler application/x-httpd-php56
</FilesMatch>
</IfModule>
</Directory>
</VirtualHost>
[/shell]

E Salve.

Reinicie o Apache.

[shell]systemctl reload httpd[/shell]

verificando resultado em : (http://testarversao.local:81/)

 

alterando parâmetro:

[shell]SetHandler application/x-httpd-php56[/shell]

para

[shell]SetHandler application/x-httpd-php-default[/shell]

verificando novamente.

 

É isso aí espero ter sido claro na explicação. Valeu e até a próxima!

Instalando mais de uma versão do PHP com repositórios Remi

Sejam, bem vindos ao quarto post do blog, onde iremos preparar duas versões do PHP .
São as versões 5.6 e a versão 7.0 que é a versão atual da versão 25 do Fedora.

Iremos configurar o servidor Apache para realizar esta troca de maneira simples.

Iniciamos com a execução do seguinte comando

[shell]wget http://rpms.famillecollet.com/fedora/remi-release-25.rpm; sudo dnf install remi-release-25.rpm[/shell]

Tendo o seguinte retorno

[shell]–2017-01-07 17:24:07– http://rpms.famillecollet.com/fedora/remi-release-25.rpm
Resolvendo rpms.famillecollet.com (rpms.famillecollet.com)… 2001:bc8:33a1:100::1, 195.154.241.117
Conectando-se a rpms.famillecollet.com (rpms.famillecollet.com)|2001:bc8:33a1:100::1|:80… conectado.
A requisição HTTP foi enviada, aguardando resposta… 200 OK
Tamanho: 12957 (13K) [application/x-rpm]
Salvando em: “remi-release-25.rpm.1”

remi-release-25.rpm 100%[===================&amp;amp;gt;] 12,65K –.-KB/s in 0,003s

Failed to synchronize cache for repo ‘postinstallerf-updates’, desativando.
Última verificação de data de vencimento de metadados: 1:44:52 atrás em Sat Jan 7 15:39:43 2017.
Dependências resolvidas.
================================================================================
Package Arq. Versão Repo Tam.
================================================================================
Instalando:
remi-release noarch 25-1.fc25.remi @commandline 13 k

Resumo da transação
================================================================================
Instalar 1 Pacote

Tamanho total: 13 k
Tamanho depois de instalado: 4.4 k

Correto? [s/N]: s
Baixando pacotes:
Executando verificação da transação
Verificação de transação completa.
Executando teste de transação
Teste de transação completo
Executando a transação
Instalando : remi-release-25-1.fc25.remi.noarch 1/1
Verificando : remi-release-25-1.fc25.remi.noarch 1/1

Instalados:
remi-release.noarch 25-1.fc25.remi

Concluído![/shell]

 

Após isso , realizar o update

[shell]sudo dnf update[/shell]

Após a instalação , iremos instalar o PHP , PHP-FPM e extensões úteis

[shell]sudo dnf –enablerepo=remi install php56-php-fpm php56-php-cli php56-php-mysqlnd php56-php-gd php56-php-imap php56-php-ldap php56-php-odbc php56-php-pear php56-php-xml php56-php-xmlrpc php56-php-magickwand php56-php-mbstring php56-php-mcrypt php56-php-mssql php56-php-snmp php56-php-soap php56-php-tidy php56-php-opcache[/shell]

Obtendo a saida

[shell]Instalados:
php56-php-cli.x86_64 5.6.28-1.fc25.remi php56-php-common.x86_64 5.6.28-1.fc25.remi php56-php-fpm.x86_64 5.6.28-1.fc25.remi
php56-php-gd.x86_64 5.6.28-1.fc25.remi php56-php-imap.x86_64 5.6.28-1.fc25.remi php56-php-ldap.x86_64 5.6.28-1.fc25.remi
php56-php-magickwand.x86_64 1.0.9.2-9.fc25.remi php56-php-mbstring.x86_64 5.6.28-1.fc25.remi php56-php-mcrypt.x86_64 5.6.28-1.fc25.remi
php56-php-mssql.x86_64 5.6.28-1.fc25.remi php56-php-mysqlnd.x86_64 5.6.28-1.fc25.remi php56-php-odbc.x86_64 5.6.28-1.fc25.remi
php56-php-opcache.x86_64 5.6.28-1.fc25.remi php56-php-pdo.x86_64 5.6.28-1.fc25.remi php56-php-pear.noarch 1:1.10.1-7.fc25.remi
php56-php-pecl-jsonc.x86_64 1.3.10-1.fc25.remi php56-php-pecl-zip.x86_64 1.13.5-1.fc25.remi php56-php-process.x86_64 5.6.28-1.fc25.remi
php56-php-snmp.x86_64 5.6.28-1.fc25.remi php56-php-soap.x86_64 5.6.28-1.fc25.remi php56-php-tidy.x86_64 5.6.28-1.fc25.remi
php56-php-xml.x86_64 5.6.28-1.fc25.remi php56-php-xmlrpc.x86_64 5.6.28-1.fc25.remi php56-runtime.x86_64 2.1-5.fc25.remi
[/shell]

poderemos efetuar a instalação de outros módulos com o comando

[shell]dnf –enablerepo=remi install php56-php-svn [/shell]

Os pacotes instalados estão presentes em /opt/remi/php56
Conferindo Instalação

Para Conferir a Instalação basta executar

[shell]php56 -v[/shell]

Com output

[shell]PHP 5.6.28 (cli) (built: Nov 9 2016 06:26:30)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies[/shell]

Conferindo php-fpm

[shell]systemctl status php56-php-fpm[/shell]

Com output

[shell]Main PID: 22349 (php-fpm)
Status: &amp;quot;Ready to handle connections&amp;quot;
Tasks: 6 (limit: 4915)
CGroup: /system.slice/php56-php-fpm.service
├─22349 php-fpm: master process (/opt/remi/php56/root/etc/php-fpm.conf)
├─22350 php-fpm: pool www
├─22351 php-fpm: pool www
├─22352 php-fpm: pool www
├─22353 php-fpm: pool www
└─22354 php-fpm: pool www

Jan 07 19:17:06 caramelo systemd[1]: Starting The PHP FastCGI Process Manager…
Jan 07 19:17:06 caramelo systemd[1]: Started The PHP FastCGI Process Manager.
[/shell]

Criando link simbólico

[shell]systemctl enable php56-php-fpm[/shell]

Com output

[shell]Created symlink /etc/systemd/system/multi-user.target.wants/php56-php-fpm.service → /usr/lib/systemd/system/php56-php-fpm.service.[/shell]

Configurando serviço php-fpm

Alterar o arquivo

/opt/remi/php56/root/etc/php-fpm.d/www.conf

Alterar parametro de ip listen

[shell]listen.allowed_clients = 127.0.0.1[/shell]

Para

[shell]listen.allowed_clients = 127.0.0.56[/shell]

E adicionar o parametro include_path

[shell]php_value[include_path]=".:/opt/remi/php56/root/usr/share/pear:/opt/remi/php56/root/usr/share/php:/usr/share/pear:/usr/share/php"[/shell]

Iremos também configurar os servidores Apache e Nginx para  aceitar este recurso no post:
Configurando Nginx e Apache para diversas versões do PHP

É isso aí espero ter sido claro na explicação. Valeu e até a próxima!

Rodando Projeto Django no NGINX com Gunicorn e Supervisor

Sejam, bem vindos ao terceiro post do blog, tendo em vista que já temos um Nginx configurado e um ambiente com virtualenv que foi mostrado nos dois posts anteriores , iremos faze-lo rodar no NGINX.

confira os posts anteriores para que seja dada acontinuação (apenas instalação do Nginx)

Configurando  NGINX, PHP-FPM e Mysql no Fedora


Preparando Virtualenv para projeto Django

Vamos aos passos:

instalação da lib Gunicorn
Web Server Gateway Interface (WSGI)  python

[shell]pip install gunicorn[/shell]

retorno

 

[shell]Collecting gunicorn

Downloading gunicorn-19.4.1-py2.py3-none-any.whl (112kB)[/shell]

 

 

Caso queira escolher outro WSGI
seguem alguns candidatos

https://www.digitalocean.com/community/tutorials/a-comparison-of-web-servers-for-python-based-web-applications

projeto utilizado
http://gunicorn.org/

 

acesse

[shell]cd /var/www/python/projetos/teste_projeto[/shell]

 

 

validando servidor

[shell]gunicorn –bind 0.0.0.0:8000 myproject.wsgi:application[/shell]

 

 

que habilitara o servidor novamente sem a necessidade do manage.py

runserver_Django_puro

 

 

 

 

edite o arquivo

/var/www/python/projetos/teste_projeto/teste_projeto/settings.py

e insira a seguinte linha

[shell]STATIC_ROOT = "teste_projeto/static"[/shell]

 

 

criando pasta para static files

[shell]python manage.py collectstatic[/shell]

retornando

 

[shell]

You have requested to collect static files at the destination
location as specified in your settings:

/var/www/python/projetos/teste_projeto/teste_projeto/static

This will overwrite existing files!
Are you sure you want to do this?

Type ‘yes’ to continue, or ‘no’ to cancel: yes

Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/timeparse.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/collapse.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/inlines.min.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/urlify.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/collapse.min.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/actions.min.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/inlines.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/jquery.init.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/SelectBox.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/actions.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/calendar.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/prepopulate.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/core.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/SelectFilter2.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/prepopulate.min.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.min.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/LICENSE-JQUERY.txt’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/LICENSE-XREGEXP.txt’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.min.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/LICENSE’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/tooltag-arrowright.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/README.txt’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/search.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/selector-icons.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/icon-alert.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/calendar-icons.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/icon-no.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/icon-yes.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/sorting-icons.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/icon-unknown.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/icon-clock.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Light-webfont.woff’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Regular-webfont.woff’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/fonts/README.txt’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Bold-webfont.woff’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/css/base.css’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/css/forms.css’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/css/widgets.css’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/css/changelists.css’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/css/dashboard.css’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/css/rtl.css’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/css/login.css’
Copying ‘/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/css/fonts.css’

56 static files copied to ‘/var/www/python/projetos/teste_projeto/teste_projeto/static’

[/shell]

 

coloque o dominio testeprojeto.local

no arquivo /etc/hosts , grave
criando arquivo de configuraçao para host testeprojeto.local

[shell]vim /et c/nginx/conf.d/testeprojeto.conf[/shell]

e insira o seguinte conteudo

[shell]
upstream gunicorn_testeprojeto {

server 127.0.0.1:8009 fail_timeout=0;
# server 127.0.0.1:8081;
# ..
# .

}

# Configuration for Nginx
server {

# Running port
listen 80;
server_name testeprojeto.local;
# Settings to serve static files
location ^~ /static/ {

# Example:
# root /full/path/to/application/static/file/dir;
root /var/python/projetos/teste_projeto/teste_projeto/static/;
#try_files $uri @proxy_to_app;
}

# Serve a static file (ex. favico)
# outside /static directory
location = /favico.ico {

root /teste_projeto/favico.ico;

}

# Proxy connections to the application servers
# app_servers
location / {

proxy_pass http://gunicorn_testeprojeto;
proxy_redirect off;
proxy_set_header Host $host;
#proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;

}
}
[/shell]

importante: apelidar o upstream , no caso gunicorn_testeprojeto

e no proxy_pass deve ser passado este atributo como visto acima
http://gunicorn_testeprojeto

Valide o arquivo de configuração

[shell]nginx -t -c /etc/nginx/nginx.conf[/shell]

e reinicie o servidor

[shell]systemctl restart nginx[/shell]

com o seguinte resultado

gunicorn_ligado

 

mantendo a aplicacao de pe com supervisor

[shell]dnf install supervisor[/shell]

que retornara

 

[shell]

==================================================================================================
Package Arq. Versão Repo Tam.
==================================================================================================
Instalando:
python-meld3 x86_64 0.6.7-10.fc22 fedora 76 k
supervisor noarch 3.0-2.fc21 fedora 560 k

Resumo da transação
==================================================================================================
Instalar 2 Packages

Tamanho total do download: 637 k
Tamanho depois de instalado: 2.8 M
Correto? [s/N]:s
Baixando pacotes:
(1/2): python-meld3-0.6.7-10.fc22.x86_64.rpm 145 kB/s | 76 kB 00:00
(2/2): supervisor-3.0-2.fc21.noarch.rpm 685 kB/s | 560 kB 00:00
————————————————————————————————–
Total 233 kB/s | 637 kB 00:02
Executando verificação da transação
Verificação de transação completa.
Executando teste de transação
Teste de transação completo
Executando a transação
Instalando : python-meld3-0.6.7-10.fc22.x86_64 1/2
Instalando : supervisor-3.0-2.fc21.noarch 2/2
Verificando : supervisor-3.0-2.fc21.noarch 1/2
Verificando : python-meld3-0.6.7-10.fc22.x86_64 2/2

Instalados:
python-meld3.x86_64 0.6.7-10.fc22 supervisor.noarch 3.0-2.fc21
[/shell]

[shell]vim /etc/supervisord.d/testeprojetopy.conf[/shell]

[shell]
[program:testeprojetopy]
command=/var/www/python/virtual_envs/projeto_teste_um_django-1.9/bin/gunicorn –bind 127.0.0.1:8009 teste_projeto.wsgi:application w9
directory=/var/www/python/projetos/teste_projeto
logfile=/tmp/testeprojetopy.log
stdout_logfil=/tmp/testeprojetopy.log
autostart=true
autorestart=true
[/shell]

ativando supervisor

[shell]systemctl enable supervisord ; systemctl restart supervisord[/shell]

agora e possivel invocar a aplicacao por

[shell]supervisorctl start testeprojetopy[/shell]

resulta em

[shell]testeprojetopy: started[/shell]

e

[shell]supervisorctl stop testeprojetopy[/shell]

resulta em

[shell]testeprojetopy: stopped[/shell]

gunicorn_desligado

e reativando

[shell]
supervisorctl start testeprojetopy
testeprojetopy: started[/shell]

 

gunicorn_ligado

 

É isso aí espero ter sido claro na explicação. Valeu e até a próxima!

Preparando Virtualenv para projeto Django

Sejam, bem vindos ao segundo post do blog, tendo em vista que já temos um Nginx configurado que foi mostrado no primeiro post , iremos preparar o virtualenv para um projeto Django.

confira o post anterior para que seja dada acontinuação (apenas instalação do Nginx)

Configurando  NGINX, PHP-FPM e Mysql no Fedora
Vamos aos passos:

Iniciando a sessão como root

[shell]sudo su[/shell]

 

instalação do virtual env (isolamento de ambientes para evitar conflitos de versões de bibliotecas e dependências )

[shell]dnf install python-virtualenv[/shell]

por comodade iremos trabalhar no nivel /var/www o diretorio python e virtual_envs

entao iremos criar

[shell]cd /var/www; mkdir python; chmod 755 pyhton ; cd python; mkdir virtual_envs; chmod 755 virtual_env; cd virtual_env;[/shell]

iremos usar a versão 1.9 do django atraves do seguinte comando

parametros de configuração

–system-site-packages = usa pacotes globais (instalados no SO)

–no-site-packages = nao usa pacotes globais

[shell]virtualenv – -system-site-packages projeto_teste_um_django-1.9[/shell]

que trara o seguinte resultado

[shell]New python executable in projeto_teste_um_django-1.9/bin/python2
Also creating executable in projeto_teste_um_django-1.9/bin/python[/shell]

consultando criação

[shell]cd projeto_teste_um_django-1.9; ls[/shell]

exibira os seguintes diretorios

bin include lib lib64

checando dependencias

[shell]pip freeze > dependencias.txt;[/shell]

sera retornado algo parecido com isso

[shell]
<span style="line-height: 1.5;">backports.ssl-match-hostname==3.4.0.2
Beaker==1.5.4
blivet==1.0.10
cffi==0.8.6
characteristic==14.3.0
chardet==2.2.1
coverage==4.0.3
cryptography==0.9
decorator==3.4.0
deluge==1.3.12
di==0.3
Django==1.9
dnf-langpacks==0.15.1
ecdsa==0.11
enum34==1.0.4
GeoIP-Python==1.2.8
Glances==2.3
idna==2.0
iniparse==0.4
initial-setup==0.3.31
ipaddress==1.0.7
IPy==0.81
kitchen==1.2.1
langtable==0.0.34
liveusb-creator==3.14.2
Magic-file-extensions==0.2
Mako==1.0.1
MarkupSafe==0.23
mechanize==0.2.5
nose==1.3.7
ntplib==0.3.2
numpy==1.9.2
paramiko==1.15.2
Paste==1.7.5.1
pbr==1.8.1
pexpect==3.1
Pillow==2.8.2
ply==3.4
policycoreutils-default-encoding==0.1
psutil==2.1.3
pwquality==1.2.4
pyasn1==0.1.7
pyasn1-modules==0.0.5
pycparser==2.10
pycrypto==2.6.1
pycryptopp==0.6.0.1206569328141510525648634803928199668821045408958
pycurl==7.19.5.1
pygame===1.9.1release
pygobject==3.16.2
pygpgme==0.3
PyIscsi==1.0
pykickstart==1.99.66
pyliblzma==0.5.3
pyOpenSSL==0.15.1
pyparsing==2.0.3
pyparted==3.10.7
pyserial==2.7
python-augeas==0.5.0
python-dmidecode==3.10.13
python-libtorrent==1.0.6
python-meh==0.40
pytz===2012d
pyudev==0.16.1
pyxattr==0.5.3
pyxdg==0.25
rencode==1.0.3
requests==2.7.0
rpm-python==4.12.0.1
scdate==1.10.9
selenium==2.47.1
selenium-requests==1.2.7
seobject==0.1
sepolicy==1.1
service-identity==14.0.0
setproctitle==1.1.9
setroubleshoot==1.1
six==1.9.0
slip==0.6.4
slip.dbus==0.6.4
SSSDConfig==1.13.2
stevedore==1.10.0
Tempita==0.5.1
Terminator==0.98
tld==0.7.3
Twisted==15.1.0
urlgrabber==3.10.1
urllib3==1.10.4
vboxapi==1.0
virtualenv==12.0.7
virtualenv-clone==0.2.6
virtualenvwrapper==4.7.1
wxPython==3.0.2.0
wxPython-common==3.0.2.0
yum-metadata-parser==1.1.4
zope.event==4.0.3
zope.interface==4.1.1

[/shell]

 

 

ativando servico

[shell]source projeto_teste_um_django-1.9/bin/activate[/shell]

instalando django caso queira uma versão expecifica

[shell]pip install django==1.9[/shell]

como ja esta atualizado em meu caso me foi retornada a mensagem abaixo

[shell]Requirement already satisfied (use –upgrade to upgrade): django==1.9 in /usr/lib/python2.7/site-package[/shell]

iniciando projeto

[shell]django-admin.py[/shell]

exibindo o resultado

[shell]

Available subcommands:

[django]
check
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
makemigrations
migrate
runserver
sendtestemail
shell
showmigrations
sqlflush
sqlmigrate
sqlsequencereset
squashmigrations
startapp
startproject
test
testserver

[/shell]

criando diretorio de projetos

[shell]cd /var/www/python; mkdir projetos; chmod 755 projetos; cd projetos;[/shell]

e execute

[shell]django-admin.py startproject teste_projeto;[/shell]

verifique o projeto trara

[shell]
ls projeto;
manage.py teste_projeto
[/shell]

subindo a aplicação

[shell]cd teste_projeto;

python manage.py syncdb ;
python manage.py migrate
python manage.py runserver

[/shell]

que retornara

[shell]

System check identified no issues (0 silenced).

December 14, 2015 – 01:54:32
Django version 1.9, using settings ‘teste_projeto.settings’
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Not Found: /
[14/Dec/2015 01:54:46] "GET / HTTP/1.1" 200 1767
Not Found: /favicon.ico
[14/Dec/2015 01:54:46] "GET /favicon.ico HTTP/1.1" 404 1943
[/shell]

visivel como exemplo

http://localhost:8000

runserver_Django_puro

no próximo post iremos subir este projeto no Nginx com o apoio do gunicorn e supervisor até a próxima

Configurando NGINX, PHP-FPM e Mysql no Fedora

Sejam, bem vindos ao primeiro post do blog, bom a ideia é descrever e explicar a instalação e configuração dos serviços: Nginx , php-fpm e mysql no fedora.
Vamos aos passos:

Iniciando a sessão como root

[shell]sudo su[/shell]

 

Instalação do Mysql

[shell]dnf install mysql mysql-server[/shell]

ativando o serviço

[shell]
systemctl enable mysqld.service
systemctl start mysqld.service
[/shell]

caso tenha o seguinte problema

[shell]systemctl enable mysqld.service;

Failed to execute operation: No such file or directory[/shell]

tente o seguinte comando

[shell]
systemctl enable mariadb
systemctl start mariadb
[/shell]

execute o seguinte comando para colocar seus dados de segurança

[shell]
/usr/bin/mysql_secure_installation
[/shell]

 

Instalação do servidor NGINX

[shell]
dnf install nginx
[/shell]

Habilitando serviço

[shell]
systemctl enable nginx
systemctl start nginx
[/shell]

checando status

[shell]
systemctl status nginx

nginx.service – The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Dom 2015-07-26 01:14:57 BRT; 57s ago
Main PID: 10525 (nginx)
CGroup: /system.slice/nginx.service
├─10525 nginx: master process /usr/sbin/nginx
├─10526 nginx: worker process
├─10527 nginx: worker process
├─10528 nginx: worker process
└─10529 nginx: worker process

[/shell]

agora é possivel verificar no browser sua disponibilidade (http://localhost/)

Nginx Ativo

Alterando o arquivo de configuração
/etc/nginx/nginx.conf

alterar linha
worker_processes auto;
para worker_processes 4;

Comando para checagem do arquivo de configuração do Nginx

[shell]
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[/shell]

 

Instalação do PHP-FPM

[shell]dnf install php-fpm php-cli php-mysqlnd php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy php-opcache
[/shell]

checando instalação

[shell]
php-fpm -v
PHP 5.6.11 (fpm-fcgi) (built: Jul 13 2015 15:48:45)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
[/shell]

alterando o arquivo de configuração /etc/php.ini

encontre a linhacgi.fix_pathinfo=1
e alterar para
cgi.fix_pathinfo=0

iniciando serviço

[shell]systemctl enable php-fpm.service
systemctl start php-fpm.service
[/shell]

 

Integrando php-fpm ao Nginx

Alterar o arquivo /etc/nginx/nginx.conf

1 – Coloque o trecho de código abaixo dentro do parâmetro “server {”

2 – caso prefira altere também a diretiva root para o path /var/www/html

[shell]
location ~ \.php$ {
root           /var/www/html;
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include        fastcgi_params;
}
[/shell]

Após isso pode validar a configuração

[shell]
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[/shell]

Reinicie o servidor

[shell]
systemctl reload nginx.service
[/shell]

Checando status

[shell]
systemctl reload nginx.service
[/shell]

crie um arquivo info.php
no diretorio definido em /var/www
com o codigo

[php]
<?php phpinfo(); ?>
[/php]

E aplique

[shell]
chmod 755 /var/www/info.php
[/shell]

Verificando Resultado no Browser: http://localhost/

 

Configuração de host

crie um diretorio dentro do seu root

[shell]mkdir /var/www/html/meudominio; cp /var/www/html/info.php /var/www/html/meudominio/index.php; chmod 755 /var/www/html/meudominio/index.php[/shell]

altere o conteúdo do novo arquivo para

[php]
<?php echo ‘testando o php e algo dinamico aqui ‘.date(‘d/m/Y H:i:s’); ?>[/php]

copie o arquivo

[shell]cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/meudominio.conf[/shell]

Insira o seguinte conteúdo
1 – altere o server_name
2 – altere o caminho do root

[shell]
server {
listen 80;
server_name meudominio.local;
#root /usr/share/nginx/html;
root /var/www/html/meudominio;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
}

location ~ \.php$ {
root /var/www/html/meudominio;
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
[/shell]

altere o arquivo /etc/hosts

[shell]
127.0.0.1 localhost.localdomain localhost meudominio.local
::1 localhost6.localdomain6 localhost6
[/shell]

insira seu novo host

reinicie o servidor

[shell]
systemctl reload nginx.service
[/shell]

Verifique o resultado em : (http://meudominio.local/)

evitando dores de cabeça:
desabilitando serviço SELinux (causa bloqueio de streams do php-fpm Permission Denied)

https://wiki.hackstore.com.br/Desabilitando_SELinux_na_fam%C3%ADlia_de_distros_baseado_em_RedHat_(RHEL,_CentOS,_Fedora)

É isso aí espero ter sido claro na explicação. Valeu e até a próxima!