Instalando o Nota Fiscal de Serviços Eletrônica (NFS-e) a partir dos fontes no Linux

 

A Nota Fiscal de Serviços Eletrônica possui integração com entes públicos que utilizam o sistema e-Cidade, gerando cobranças automáticas no momento da emissão de guias e facilitando o processo de fiscalização. Além disso, o produto permite a integração com outros sistemas de gestão pública, visando sempre atender às necessidades dos nossos clientes.

1. Instalação do Ubuntu Server 16.04.x LTS

O Ubuntu Server é a versão do sistema operacional da Canonical voltada para servidores. Como o uso em servidores exige um tempo maior de suporte, a versão indicada para o uso com esta documentação é a Ubuntu Server 16.04.x LTS.

1.1 Obtendo a mídia de instalação

A mídia de instalação pode ser obtida diretamente do site da Canonical e gravada em CD, DVD ou pendrive. No site http://www.ubuntu.com/download/server esta disponível a versão mais recente, mas utilizaremos a versão 16.04.x LTS disponível em http://releases.ubuntu.com/xenial/ (ubuntu-16.04.2-server-amd64.iso) por questões de compatibilidade com o produto.

1.2 Instalando o Ubuntu Server 16.04.x LTS

O processo de instalação do sistema operacional não é coberto por esta documentação, mas recomendamos a instalação mínima padrão, em “pt_BR” Português do Brasil, somente com os softwares “standard system utilities” e “OpenSSH server”.

Dica: Maiores informações sobre a instalação e personalização do sistema operacional podem ser obtidas em:
https://help.ubuntu.com/16.04/serverguide/

1.3 Editando os arquivos de configuração

Durante o processo de configuração descrito nesta documentação, é necessário editar e modificar diversos arquivos de texto. Para realizar estas modificações, sugerimos a utilização do editor “nano”, mas você pode usar qualquer outro editor de texto de sua preferência.

Dica: Mais informações sobre o editor de textos “nano” podem ser obtidas em:
http://www.nano-editor.org/.

2. Instalação do PostgreSQL 9.5.x

PostgreSQL é um sistema gerenciador de banco de dados objeto relacional (SGBDOR), desenvolvido como projeto de código aberto sem custo de licença. Este é o programa que vai gerenciar e armazenar o banco de dados relacional utilizado pelo NFS-e.

Dica: Mais informações sobre o PostgreSQL podem ser obtidas em:
http://www.postgresql.org/.

2.1 Configurando o repositório

Para instalar o PostgreSQL 9.5.x e suas dependências, utilizaremos o gerenciador de pacotes apt, que nos prove as últimas atualizações dos pacotes requeridos através de um canal seguro e confiável.

2.1.1 Crie o arquivo pgdg.list através dos comandos abaixo.
[linux]$ sudo touch /etc/apt/sources.list.d/pgdg.list
[linux]$ echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list

Dica: Mais informações sobre a configuração do repositório podem ser obtidas em:
https://www.postgresql.org/download/linux/ubuntu/

2.1.2 Baixe e importe a chave de assinatura do repositório através do comando:
[linux]$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv ACCC4CF8

Dica: Mais informações sobre o gerenciador de pacotes “apt” podem ser obtidas em:
https://help.ubuntu.com/16.04/serverguide/package-management.html

2.2 Ajustando o idioma

Atenção: Este procedimento só é necessário se você não instalou o sistema operacional em “pt_BR” – Português do Brasil.

[linux]$ sudo apt -y install language-pack-gnome-pt language-pack-pt-base myspell-pt myspell-pt-br wbrazilian wportuguese

2.3 Instalando o PostgreSQL 9.5.x

Para realizar a instalação do PostgreSQL 9.5.x através do gerenciador de pacotes execute os comandos:

[linux]$ sudo apt update
[linux]$ sudo apt -y install postgresql-9.5 postgresql-client-9.5 postgresql-contrib-9.5

2.4 Criando e configurando o cluster

O NFS-e utiliza encoding UTF-8 no cluster do PostgreSQL 9.5.x. Por isso vamos parar, remover e recriar o cluster quer será utilizado pela aplicação.

Atenção: O NFS-e não pode ser instalado no mesmo cluster dos demais produtos como: e-cidade, e-cidadeonline, etc. A codificação utilizada pelo NFS-e é UTF-8, enquanto que nos outros produtos é LATIN1!

Dica: Mais informações sobre a configuração do cluster:
http://www.postgresql.org/docs/9.5/static/sql-cluster.html

2.4.1 Vamos parar o cluster criado pelo processo de instalação do PostgreSQL através do comando:
[linux]$ sudo pg_dropcluster --stop 9.5 main
2.4.2 Vamos criar o novo cluster do banco de dados como LATIN1 usando o comando:
[linux]$ sudo pg_createcluster -u postgres -g postgres -e UTF8 --locale="pt_BR.UTF-8" --lc-collate="pt_BR.UTF-8" 9.5 nfse
2.4.3 Para permitir o acesso de qualquer local ao banco de dados é necessário modificar o arquivo /etc/postgresql/9.5/nfse/pg_hba.conf usando o comando:
[linux]$ sudo nano /etc/postgresql/9.5/nfse/pg_hba.conf

Localize e altere as linhas do arquivo do arquivo de configuração que não estão comentadas (# na frente da linha), substituindo os valores correspondentes por trust, conforme a tabela abaixo.

local all postgres
local all all
host all all 127.0.0.1/32
host all all ::1/128
2.4.4 Para a correta integração com o NFS-e, é necessário alterar algumas configurações do cluster criado através do comando:
[linux]$ sudo nano /etc/postgresql/9.5/nfse/postgresql.conf

Atenção: Os demais parâmetros, não descritos aqui, não precisam ser alterados.

Localize e altere as linhas do arquivo do arquivo de configuração, descomentando-as se necessário (remover o caractere # do início da linha), substituindo os valores correspondentes conforme a indicação abaixo.

listen_addresses = '*'
max_connections = 20
2.4.5 Inicie o servidor PostgreSQL através do comando:
[linux]$ sudo systemctl start postgresql.service
2.4.6 Verifique o resultado da configuração usando o comando:
[linux]$ psql -U postgres -h localhost -l

A saída do comando deve ser parecida com os valores abaixo.

   Nome    |   Dono   | Codificação |     Collate      |      Ctype       | Privilégios de acesso
-----------+----------+-------------+------------------+------------------+-----------------------
 postgres  | postgres | UTF8        | pt_BR.UTF-8      | pt_BR.UTF-8      |
 template0 | postgres | UTF8        | pt_BR.UTF-8      | pt_BR.UTF-8      | =c/postgres          +
           |          |             |                  |                  | postgres=CTc/postgres
 template1 | postgres | UTF8        | pt_BR.UTF-8      | pt_BR.UTF-8      | =c/postgres          +
           |          |             |                  |                  | postgres=CTc/postgres

2.5 Criando a estrutura de banco de dados para o NFS-e

Vamos criar os usuários necessários para o funcionamento do NFS-e através dos comandos:

Atenção: Em ambientes de produção, nunca utilize senhas que tenham o mesmo nome da conta de usuário. Mais informações sobre segurança de senhas podem ser obtidas em:
http://cartilha.cert.br/senhas/.

psql -U postgres -c "CREATE ROLE nfse WITH SUPERUSER LOGIN PASSWORD 'nfse';"

Em seguida, utilize o comando abaixo para criar o banco de dados:

psql -U postgres -c "CREATE DATABASE nfse OWNER nfse;"

3. Instalação do Apache

Apache é o servidor web mais usado em sistemas Linux. Servidores web são usados para servir páginas Web que, normalmente, são solicitadas pelos computadores clientes através de navegador, como o Firefox, Chromium, etc.

Dica: Mais informações sobre o Apache podem ser obtidas em:
http://www.apache.org/.

3.1 Instalando o Apache

Para realizar a instalação do servidor web Apache através do gerenciador de pacotes, execute o comando:

[linux]$ sudo apt -y install apache2

3.2 Configurando a diretiva VirtualHost

3.2.1 Faça uma cópia de segurança do arquivo de configuração padrão, que é criado pelo Apache durante o processo de instalação através do comando:
[linux]$ sudo cp -a /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.dist
3.2.2 Para a correta integração com o NFS-e, é necessário adicionar alguns parâmetros ao arquivo de configuração do VirtualHost através do comando:
[linux]$ sudo nano /etc/apache2/sites-available/000-default.conf

Atenção: Os demais parâmetros, não descritos aqui, não precisam ser alterados.

Adicione as linhas que não existirem e edite as existentes dentro do bloco VirtualHost, conforme é exibido abaixo.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/nfse/public

  SetEnv APPLICATION_ENV "production"
  SetEnv no-gzip 1

    <Directory /var/www/html/nfse/public>
        DirectoryIndex index.php
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error-nfse.log
    CustomLog ${APACHE_LOG_DIR}/access-nfse.log combined

</VirtualHost>

Dica: Mais informações sobre o VirtualHost podem ser obtidas em:
http://httpd.apache.org/docs/current/vhosts/examples.html.

4. Instalação do PHP 5.6 e PHP-FPM

PHP é uma linguagem interpretada livre, usada originalmente apenas para o desenvolvimento de aplicações presentes e atuantes no lado do servidor, capazes de gerar conteúdo dinâmico na World Wide Web.

O PHP-FPM é uma alternativa ao PHP FastCGI com muitas funcionalidades voltadas a sites com grande número de acessos e carga.

Dica: Mais informações sobre o PHP e PHP-FPM podem ser obtidas em:
http://www.php.net/ e http://php-fpm.org/

4.1 Configurando o repositório

Para instalar o PHP 5.6 e suas dependências, utilizaremos o gerenciador de pacotes apt, que nos prove as últimas atualizações dos pacotes requeridos através de um canal seguro e confiável.

4.1.1 Instale o repositório PPA através dos comandos abaixo.
[linux]$ sudo apt-add-repository -y ppa:ondrej/php
[linux]$ sudo apt update

4.2 Instalando o PHP 5.6 e o PHP-FPM

Para realizar a instalação do PHP 5.6 através do gerenciador de pacotes, execute o comando:

[linux]$ sudo apt -y install php5.6 php5.6-bcmath php5.6-bz2 php5.6-cli php5.6-common php5.6-curl php5.6-gd php5.6-interbase php5.6-json php5.6-mbstring php5.6-mcrypt php5.6-pgsql php5.6-soap php5.6-sqlite3 php5.6-xml php5.6-xmlrpc php5.6-zip php5.6-fpm

4.3 Configurando o PHP 5.6 e o PHP-FPM

4.3.1 Habilitar as dependências de módulos através do comando:
[linux]$ sudo a2enmod proxy_fcgi setenvif rewrite
4.3.2 Habilitar as dependências de configuração através do comando:
[linux]$ sudo a2enconf php5.6-fpm
4.3.3 Configurar o arquivo de log do PHP-FPM através dos comandos:
[linux]$ sudo touch /var/log/php_errors.log
[linux]$ sudo chown www-data.www-data /var/log/php_errors.log
4.3.4 Para a correta integração com o NFS-e, é necessário alterar algumas configurações do PHP através do comando:
[linux]$ sudo nano /etc/php/5.6/fpm/php.ini

Atenção: Os demais parâmetros, não descritos aqui, não precisam ser alterados.

Localize e altere as linhas do arquivo do arquivo de configuração, descomentando-as se necessário (remover o caractere ; do início da linha), substituindo os valores correspondentes conforme a indicação abaixo.

short_open_tag = On
session.gc_maxlifetime = 7200
date.timezone = "America/Sao_Paulo"

Também é necessário alterar o arquivo de configuração utilizado pelo php-cli através do comando:

[linux]$ sudo nano /etc/php/5.6/cli/php.ini

Atenção: Os demais parâmetros, não descritos aqui, não precisam ser alterados.

Localize e altere as linhas do arquivo do arquivo de configuração, descomentando-as se necessário (remover o caractere ; do início da linha), substituindo os valores correspondentes conforme a indicação abaixo.

short_open_tag = On
date.timezone = "America/Sao_Paulo"
4.3.5 Reinicie o serviço do PHP-FPM usando o comando:
[linux]$ sudo systemctl restart php5.6-fpm.service

5. Instalação do NFS-e

5.1 Obtendo o pacote de instalação

O pacote de instalação pode ser obtido diretamente do site do Portal do Software Público. No endereço da comunidade do e-cidade (https://softwarepublico.gov.br/social/e-cidade) estão disponíveis as últimas versões e suas atualizações. Como estamos realizando uma nova instalação, você deve baixar o pacote completo, um exemplo de nome do pacote seria: e-cidadeonline2.completo.Vxxxxxx.tar.bz2.

5.2 Configurando o servidor

5.2.1 Vamos criar um usuário administrativo para o NFS-e, neste exemplo criaremos o usuário dbseller através do comando:
[linux]$ sudo useradd -d /home/dbseller -g www-data -G sudo,adm,cdrom,dip,plugdev -k /etc/skel -m -s /bin/bash dbseller
5.2.2 Em seguida, vamos definir uma senha para este novo usuário usando o comando:
[linux]$ sudo passwd dbseller

Dica: Neste exemplo, defina a senha como o mesmo nome de usuário, como “dbseller”.

Atenção: Em ambientes de produção, nunca utilize senhas que tenham o mesmo nome da conta de usuário. Mais informações sobre segurança de senhas podem ser obtidas em:
http://cartilha.cert.br/senhas/.

5.2.3 Também devemos corrigir a máscara de criação de arquivos modificando os arquivos através dos comandos:
[linux]$ sudo nano /etc/login.defs

Atenção: Os demais parâmetros, não descritos aqui, não precisam ser alterados.

Localize e altere a linha do arquivo do arquivo de configuração, descomentando-a se necessário (remover o caractere # do início da linha), substituindo o valor correspondente conforme a indicação abaixo.

UMASK           002

Em seguida, edite o arquivo de configuração de variáveis do apache com o comando abaixo:

[linux]$ sudo nano /etc/apache2/envvars

Adicione a linha abaixo no final do arquivo.

umask 002

5.3 Configurando o acesso do webservice no e-cidade

O NFS-e se comunica com o e-cidade através de um webservice, para que essa comunicação seja possível, é necessário liberar o acesso no e-cidade.

5.3.1 Liberando o acesso ao webservice do e-cidade

Após realizar o login no e-cidade, acesse:

  1. Selecione a instituição da prefeitura;
  2. Selecione o módulo DB:Configuração;
  3. Selecione o módulo Configuração;
  4. Selecione o menu Cadastros;
  5. Selecione o menu Cadastro de Acessos ao Sistema;
  6. Selecione o menu Inclusão;

Em seguida, preencha os campos conforme as instruções abaixo:

  1. No campo Data Início, selecione a data de hoje;
  2. No campo Hora Início, informe o valor 08:00;
  3. No campo Data Final, selecione uma data no futuro, como o valor 31/12/2099;
  4. No campo Hora Final, informe o valor 08:00;
  5. No campo Observação, informe o valor Acesso ao webservice pelo NFS-e;
  6. Clique no botão Incluir.

Após incluir o acesso, clique na aba Usuário e selecione no campo Cod. Usuário o usuário que será utilizado para comunicação com o webservice, em seguida, clique no botão Alterar.

Após incluir o usuário, clique na aba IP/Máscara e informe o valor no campo Máscara do IP o endereço IP do servidor do NFS-e que será utilizado para comunicação com o webservice do e-cidade, em seguida, clique no botão Alterar.

5.4 Instalando o NFS-e

5.4.1 Descompacte o pacote do NFS-e através do comando:
[linux]$ tar xjf e-cidadeonline2.completo.Vxxxxxx.tar.bz2
5.4.2 Copie o diretório do NFS-e para o diretório raiz do Apache usando o comando:
[linux]$ sudo cp -r e-cidadeonline2.completo.Vxxxxxx /var/www/html/nfse

5.5 Configurando o NFS-e

5.5.1 Crie o arquivo de configuração da aplicação através do comando:
[linux]$ sudo cp /var/www/html/nfse/application/configs/application.ini.dist /var/www/html/nfse/application/configs/application.ini

Utilize o seguinte comando para editar o arquivo de configuração:

[linux]$ sudo nano /var/www/html/nfse/application/configs/application.ini

Em seguida, atualize as configurações conforme o exemplo abaixo.

...
doctrine.connectionParameters.dbname                    = "nfse"
doctrine.connectionParameters.host                      = "localhost"
doctrine.connectionParameters.password                  = "nfse"
doctrine.connectionParameters.port                      = "5432"
doctrine.connectionParameters.user                      = "nfse"
// Verifique a versão do sistema em /var/www/html/nfse/versao.txt
ecidadeonline2.versao                                   = "V011114"
resources.mail.transport.host                           = "smtp.exemplo.com"
resources.mail.transport.password                       = "nfse@exemplo.com"
resources.mail.transport.port                           = "587"
resources.mail.transport.username                       = "nfse@exemplo.com"
resources.mail.defaultFrom.email                        = "nfse@exemplo.com"
resources.mail.defaultFrom.name                         = "NFS-e Nome da Prefeitura"
settings.application.cache                              = "011114"
webservice.client.uri                                   = "http://url_acesso_ecidade/e-cidade/"
webservice.client.url                                   = "http://url_acesso_ecidade/e-cidade/"
webservice.client.location                              = "http://url_acesso_ecidade/e-cidade/webservices/requisicao.webservice.php"
// md5 do ID do usuário selecionado na regra de acesso do e-cidade
webservice.cliente.user                                 = "c4ca4238a0b923820dcc509a6f75849b"
...
5.5.2 Crie os arquivos de configuração do webservice através dos comandos:
[linux]$ sudo cp /var/www/html/nfse/application/configs/webservice-ecidade.ini.dist /var/www/html/nfse/application/configs/webservice-ecidade.ini

Utilize o seguinte comando para editar o arquivo de configuração:

[linux]$ sudo nano /var/www/html/nfse/application/configs/webservice-ecidade.ini

Em seguida, atualize as configurações conforme o exemplo abaixo.

...
DB_id_usuario          = 'Id do usuário que criou a regra de acesso';
DB_login               = 'Login o usuário que criou a regra de acesso';
DB_ip                  = 'IP de acesso ao servidor do E-cidade';
SERVER_ADDR            = 'IP local do servidor do E-cidade';
SERVER_PORT            = 'Porta local do servidor do E-cidade';
DOCUMENT_ROOT          = 'Diretório raiz do E-cidade ex: /var/wwww';
SERVER_ADMIN           = 'e-mail do administrador do servidor web';
PHP_SELF               = 'webservices/requisicao.webservice.php';
HTTP_HOST              = 'Nome do host do E-cidade ex localhost';
...
[linux]$ sudo cp /var/www/html/nfse/public/webservice/wsdlValidations/producao/modelo1.wsdl.dist /var/www/html/nfse/public/webservice/wsdlValidations/producao/modelo1.wsdl

Utilize o seguinte comando para editar o arquivo de configuração:

[linux]$ sudo nano /var/www/html/nfse/public/webservice/wsdlValidations/producao/modelo1.wsdl

Em seguida, altere todos os valores {URL}, pela URL do NFS-e conforme o exemplo abaixo.

...
xmlns:ii="http://{URL}/webservice/index/producao"
...

Um exemplo de como ficaria a configuração, se fosse configurado um nome de domínio no VirtualHost:

...
xmlns:ii="http://nfse.prefeitura.gov.br/webservice/index/producao"
...

Atenção: Existem diversas linhas que devem ser substituídas, você deve verificar todo o arquivo.

Atenção: Utilize a mesma URL configurada no VirtualHost do apache, ou o endereço IP do servidor.

[linux]$ sudo cp /var/www/html/nfse/public/webservice/wsdlValidations/homologacao/modelo1.wsdl.dist /var/www/html/nfse/public/webservice/wsdlValidations/homologacao/modelo1.wsdl

Utilize o seguinte comando para editar o arquivo de configuração:

[linux]$ sudo nano /var/www/html/nfse/public/webservice/wsdlValidations/homologacao/modelo1.wsdl

Em seguida, altere todos os valores {URL}, pela URL do NFS-e conforme o exemplo abaixo.

...
xmlns:ii="http://{URL}/webservice/index/homologacao"
...

Um exemplo de como ficaria a configuração, se fosse configurado um nome de domínio no VirtualHost:

...
xmlns:ii="http://nfse.prefeitura.gov.br/webservice/index/homologacao"
...

Atenção: Existem diversas linhas que devem ser substituídas, você deve verificar todo o arquivo.

Atenção: Utilize a mesma URL configurada no VirtualHost do apache, ou o endereço IP do servidor.

[linux]$ sudo cp /var/www/html/nfse/public/webservice/wsdlValidations/integracao/modelo1.wsdl.dist /var/www/html/nfse/public/webservice/wsdlValidations/integracao/modelo1.wsdl

Utilize o seguinte comando para editar o arquivo de configuração:

[linux]$ sudo nano /var/www/html/nfse/public/webservice/wsdlValidations/integracao/modelo1.wsdl

Em seguida, altere todos os valores {URL}, pela URL do NFS-e conforme o exemplo abaixo.

...
xmlns:ii="http://{URL}/webservice/index/integracao"
...

Um exemplo de como ficaria a configuração, se fosse configurado um nome de domínio no VirtualHost:

...
xmlns:ii="http://nfse.prefeitura.gov.br/webservice/index/integracao"
...

Atenção: Existem diversas linhas que devem ser substituídas, você deve verificar todo o arquivo.

Atenção: Utilize a mesma URL configurada no VirtualHost do apache, ou o endereço IP do servidor.

5.5.3 Ajuste as permissões dos diretórios através dos comandos:
[linux]$ sudo chown -R dbseller.www-data /var/www/html/nfse
[linux]$ sudo chmod -R 775 /var/www/html/nfse

Em seguida, limpe qualquer cache existente através do comando:

[linux]$ sudo rm -rf /var/www/html/nfse/application/data/Proxy/*
5.5.4 Faça a carga do schema do NFS-e através do comando:
[linux]$ cd /var/www/html/nfse
[linux]$ php bin/ruckus.php db:migrate
5.5.5 Reinicie o serviço do Apache usando o comando:
[linux]$ sudo systemctl restart apache2.service

5.6 Acessando o NFS-e

Após finalizar os procedimentos de instalação e configuração, abra um navegador e acesse o NFS-e através do endereço IP ou nome do servidor. EX: http://nfse.prefeitura.gov.br/, utilize como nome de usuário admin, e e como senha 123456.

Atenção: Altere a senha ao realizar o primeiro acesso. Mais informações sobre segurança de senhas podem ser obtidas em: http://cartilha.cert.br/senhas/.

Glossário

Termo Significado
encoding http://en.wikipedia.org/wiki/Character_encoding
cluster http://www.postgresql.org/docs/8.2/interactive/creating-cluster.html
apt-get http://www.debian.org/doc/manuals/apt-howto
apt-get http://pt.wikipedia.org/wiki/Advanced_Packaging_Tool
nano http://www.nano-editor.org
Firefox http://www.mozilla.org/firefox
DBSeller Sistemas http://www.dbseller.com.br
proxy http://pt.wikipedia.org/wiki/Proxy
squid http://pt.wikipedia.org/wiki/Squid

Um comentário em “Instalando o Nota Fiscal de Serviços Eletrônica (NFS-e) a partir dos fontes no Linux

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s