Instalar e configurar servidor Linux + compilar Nginx e PHP 7 com acesso a Oracle, SQL Server, Postgres, Firebird e Mysql + Tomcat e Webmin

banner_post_php7_compile

Hello World!

Este tutorialzaço demorou, mas saiu! É, definitivamente este demorou um bocado, pois acredito que tenha colocado uma enquete sobre isso há uns 2 ou 3 anos.

Lembrando que este tutorial diz a respeito de uma integração do PHP 7 com proxy reverso Nginx que irá servir os seus arquivos para a web. Portanto farei outro tutorial baseado em Apache, pois no momento da compilação do PHP são passados parâmetros diferentes e não dá para para compilar para os dois ao mesmo tempo.

Neste tutorial iremos abordar:

Serão 74 passos que vão desde o básico da instalação do Linux Debian em modo texto até a configuração de um ambiente web propício para abrigar vários tipos de aplicações em PHP 7. Todos os passos são detalhados e tem destaque em azul quando é necessário detalhar ainda mais sobre o tema. Cada passo trata de um assunto diferente, porém complementar e por isso a necessidade de um só tutorial para abordar esta proposta de servidor. Boa leitura.

Vá direto para a instalação se não estiver afim de ler esta história chata aí abaixo.Voltar ao início

Uma breve história antes, pois você pode estar se perguntando de por que tanta coisa instalada em um só servidor?

Éramos uma equipe de desenvolvimento de sistemas de determinado setor público e não tínhamos oportunidade para mostrar o nosso valor porque quando se trabalha no setor público você costuma ver, a todo momento, empresas se beneficiarem de políticos para venderem seus serviços ou políticos que possuem empresas, utilizarem o seu cargo ou acesso privilegiado para enraizar o seu produto e assim iniciar um ciclo de dependência por anos, décadas ou por todo o sempre até que venha outro político de um grupo ainda mais forte que consiga quebrar este ciclo e que consequentemente ergue a partir dali um novo ciclo para também deixar o seu rastro e não sua marca como bom gestor.

Você pode se perguntar o que este tutorial tem a haver com isso? Bem, quando nossa equipe teve a oportunidade de mostrar o que sabíamos fazer, montamos servidor de correio, anti spam, novo portal, nova intranet, novo padrão de servidores de aplicativos, documentação atualizada e n aplicativos sob demanda com alto grau de produtividade e gerido por um efetivo, um comissionado e vários estagiários que hoje despontam no mercado como bons profissionais. Mas o nosso sucesso não seria atingido se não houvesse cumplicidade e perseverança de nossa parte. Não preciso dizer que uma boa equipe é um casamento e se a sua não for, se sempre tiver quem sabote ou quem não colabore, vá fazendo o que der, estude bastante, trabalhe para ver as coisas mudarem, pois isso também muda as pessoas e se não mudar, não se preocupe, as maçãs podres se alto isolam porque ninguém quer comê-las. Mas ainda sim seja sempre gentil com estas maçãs, não jogue-as fora, pois se tiverem de apodrecer, deixe que o destino delas se encarregue com isso.

Não estou aqui para condenar empresas que prestam serviço para o setor público, mas sejamos realistas, fora o fato de as vezes o poder público não pagar em dia o que deve, os valores dos contratos são atrativos e por muitas vezes a concorrência para prestar serviços é grande, mas a qualidade destes serviços prestados não é garantida porque o pregão para concorrência não mede qualidade e sim requisitos especificados no edital de abertura e o menor valor oferecido. E muitas vezes estes editais para concorrência de empresas são confeccionados para beneficiar uma empresa X ou são mal feitos a ponto de estarem cheio de brechas que permitem que qualquer empresa que não tenha a bagagem necessária para a prestação de serviços coloque o menor valor e ganhe a licitação.

Sempre tenha em mente que se sua equipe de desenvolvimento não se atualiza com o mercado e/ou não for comprometida com a evolução dos sistemas de informação vigentes, provavelmente ela não terá nem voz para impedir que seus integrantes formados por programadores e analistas se tornem operadores e administradores de sistemas de terceiros que podem ter todo o tipo de código sujo ou não, que funcionam como deveriam ou não. É a lei! Por isso use sua inteligência para propor sem criar discórdias.

E agora sobre o nosso padrão de servidor querido.

Nossa equipe desenhou este padrão de servidor porque tínhamos um Windows Server 2003, outro que era Windows 2000, outro um Red Hat Linux 5, um Cent-OS, outro que era um Windows XP e os scripts que as empresas terceirizadas deixavam ficavam espalhados e ninguém sabia o que rodava neles e quem deveria saber nunca saberá de nada. As aplicações que rodavam nestes servidores em sua maioria eram feitas em Java ou PHP e acessavam o banco de dados Oracle ou MySQL. Foi aí que chegamos a seguinte conclusão: para que ficar enfiando este monte de Windows com Linux,  cheios de vírus, fragmentando, sendo Windows do jeito que ele é e a gente nunca sabe o que tem lá dentro? Pra que Windows aqui se até o Obama espalhou Linux pela Casa Branca? Então. Depois de muitos testes com muitas versões Linux chegamos ao Debian, ficamos nele e definimos um padrão. O local dos scripts, o local do Java, o local do Apache, o local das apps em PHP, o local das apps em JSP, a opção de desabilitar ou habilitar determinado banco de dados caso apareça uma destas empresas “paraquedistas” que já entram na sua sala com a aplicação e o banco na mão e por aí vai.

Enfim, este tutorial foi batizado com o nome de Bender. Por que? Porque gostamos de Futurama.

fonte: https://mastigado.wordpress.com

Welcome to Bender!

benderInstalação do LinuxVoltar ao início

Baixamos a imagem ISO no site do Debian (http://www.debian.org) e instalarei em uma máquina virtual VMWare, mas você pode instalar no Virtual Box ou naquela do Windows que não me lembro o nome e aquela outra do Linux que eu também não lembro do nome e você também pode instalar no computador comum também.

E vamos começar a instalação.

– Criei um servidor Linux com as seguintes configurações, 20 GB de HD, 512 megabytes de memória RAM e dois processadores. Repare que fiz a configuração em uma máquina com pouca memória e pouco espaço em disco para que você perceba que um servidor Linux em modo texto não precisa de muita coisa, a não ser claro que você precise de mais desempenho e mais espaço em disco.

Criação do servidor Linux

– Ah! Abaixo está a tela de instalação do Debian 8, lindo não acham? Bem, eu escolhei a opção 64 bit install e não 64 bit graphical install porque eu prefiro o modo texto (só por isso), pois é a mesma coisa.

Tela de Instalação do Debian 8 Jessie

– Quanto a escolher a linguagem, é Hue hue hue BR mesmo. Maque aí, Portuguese (Brazil).

Escolha a linguagem

– Confirme se é este idioma mesmo que você vai querer instalar.

Confirme o idioma selecionado

– Confirme a sua localidade.

Selecione a localidade

– Agora escolha o idioma do teclado (não vou te ensinar a fazer isso se você não souber, por favor!).

Idioma do Teclado

– Defina o hostname ou seja, o nome do seu computador. Pode chamá-lo de nheconhecohost se preferir.

Nome do computador

– Aqui, coloque o nome do domínio em que você se encontra. Se você está em uma empresa, coloque aí o dominio de sua empresa, senão coloque aí HOUSE ou DISTRITO9 ou VILADOCHAVES.

Domínio

– Agora, esta aí é senha do root. Isso mesmo! A senha do admin mor do Linux. Com esta senha você faz qualquer coisa lá dentro, então tome cuidado com ela e coloque de preferência uma cheia de caracteres especiais, números, letras, etc.

Senha do Root

10º – Aqui você insere o nome real do seu usuário Linux. Tipo Joaquim José da Silva Xavier, sacou?

Nome do Usuário

11º – Agora você coloca o login do seu usuário. Tipo assim: tiradentes.

login da Conta

12º – And now, insira a senha deste usuário. Lembrando que este usuário é um usuário comum e não tem privilégios para instalar programas, executar algumas aplicações, fazer cagada, etc.

senha do usuário

13º – Agora, escolha a região adequada ao seu fuso horário.

Configurar o relógio

14º – E agora vamos particionar com o nosso particionador de disco. Antes de iniciarmos o particionamento gostaria de fazer uma observação e comparação referente ao sistema operacional Windows. – Voltar ao início

Explicação para você saber diferenciar (mais ou menos) como fica o particionamento no Windows e no LinuxVoltar ao início

No Windows, na hora em que você escolhe o disco que deseja para instalar o sistema operacional (dentro de seu instalador), ele cria automaticamente uma partição para guardar arquivos de inicialização e outras coisas que não sei o que é. No Windows as partições são dividas por C, D, E, F…Z: e etc. Por padrão, o sistema operacional no Windows é instalado na unidade C: e por muitos este C: também é chamado de raiz do HD. Na verdade, o termo raiz se refere basicamente ao nível mais abaixo que você consegue chegar da sua árvore de arquivos e pastas (nossa, já tô falando coisa de inclusão digital, vou parar por aqui). Mas peraê, outra coisinha sobre Windows é que quando ele é instalado, basicamente são deixadas os diretórios de Arquivos de Programas, as pastas dos Usuários e a pasta Windows, que guarda o sistema operacional. Pronto! Tá explicado.

Diretórios como partições no Linux

No Linux, você tem o diretório raiz (equivalente ao C: do Windows) chamado de / (sim, a gente chama ele de barra). E no Linux, este negócio de partição C, D, E e etc não existe, pois o conceito aqui é outro. Quando você instala um Linux, o seu diretório raiz / contém vários outros diretórios (usr, mnt, srv, media, home, bin, etc, boot, var e alguns outros) e cada um deles tem uma função. Existem muitas distribuições Linux que usam mais determinados tipos de diretórios do que outras. Quer um exemplo? Distribuições (baseadas em pacotes .deb) como Ubuntu, Mint, Debian, Knoppix, etc costumam usar o diretório chamado media para montar as suas unidades, já outras como Red Hat, Fedora, Mandriva (nem sei existe ainda), Cent-OS usam a pasta mnt e por aí vai. Mas no Linux, estes diretórios (ou qualquer diretório) podem e devem por muitas vezes serem transformados em partições. Como assim? É como se no Windows você transformasse a pasta Arquivos de Programas em uma partição. Complicado? Bem, pense que se no Windows as partições que geralmente são chamadas de C ou D:, como seria uma partição chamada Arquivos de ProgramasArquivos de Programas: ? Pois bem, no Windows não é possível “transformar” um diretório em uma partição, mas sim colocar um diretório dentro de uma partição. Já no Linux não, você pode dizer que um diretório chamado minhapasta seja uma partição e e sobre isso que eu irei tratar abaixo. Ah sim! Qual é a vantagem disso para o Linux? Inúmeras, vou citar algumas.

  • No Linux a pasta onde ficam os dados do usuário chama-se home (no Windows, Users, cópia descarada :p), daí você pode colocar um outro HD só para armazenar informações dos usuários e dizer que o diretório home aponta para ele.
  • Outro diretório conhecido no Linux é o var. Diretório este que costuma guardar os logs de acesso de vários programas instalados e do sistema operacional. Pois bem, imaginemos que você tenha um aplicativo que gera logs toda a hora e que geram tantos a ponto de ter uma média de 50 megas de logs por dia (não estou discutindo aqui boas práticas de programação) e sua partição que abriga o diretório var tiver 2GB de tamanho? Pois bem, ao ter este diretório criado como uma partição, você tem uma margem de segurança para caso os logs cheguem a ocupar toda a partição de 2GB e o máximo que pode acontecer nesta ocasião é que seu aplicativo pare de gerar logs e a partição onde está está a área principal de seu sistema operacional não terá todo o seu HD cheio e com isso não provoque a parada total do sistema, obrigando que você tenha a possível intervenção humana no computador porque possivelmente ele estará inacessível.

Espaço de área de troca de arquivos temporários (swap)

No Linux, quando você faz uma instalação do zero, o mínimo que você tem que criar são duas partições, uma chamada / (como expliquei anteriormente) e outra chamada swap (mas esta não fica visível para quem usa o sistema operacional).

No Windows, esta partição não existe e seu tamanho é variável ao grosso modo de dizer. Nele, toda a vez em que o sistema operacional não tem mais memória RAM disponível, o SO passa a usar hd como memória virtual sem limite de tamanho pré definido, mesmo existindo um local onde você pode definir se quer que a área de arquivos de paginação do Windows tenha um espaço pré determinado como é feito obrigatoriamente no Linux toda a vez em que você instala o sistema operacional, esta prática não é obrigatória. Existe inclusive uma corrente de pensamento que diz que se você instalar o seu Windows num HD de disco rígido e definir que toda a sua área de memória virtual fique numa partição de HD SSD, seu Windows ficará bem mais rápido. Faz sentido e isso também valeria para o Linux.

Essa área de memória com tamanho definido no Linux tem algumas interpretações de como ela deveria ser o tamanho ideal alocado durante a instalação do Linux. Para alguns o seu tamanho deve ser do mesmo tamanho da memória RAM, outros dizem que o ideal é de que seja o dobro do tamanho da RAM, entre outras vertentes. Mas no nosso caso, iremos criar com o dobro do tamanho da memória RAM definida do nosso computador e é assim que costumo fazer em instalações Linux.

Particionamento de disco

Como disse antes, você pode definir no Linux se quer que diretórios sejam também partições e é isso que faremos aqui com alguns diretórios.

Iremos usar o método de particionamento Manual e seguir em frente.

Particionamento Manual

15º – Escolhendo o HD que será particionado

No meu caso preferi fazer uma máquina virtual para testar esta aplicação. Você pode até se assustar por eu ter definido um HD de apenas 20GB, entretanto achei mais do que suficiente para este trabalho. Bem, então é isso, escolha o HD e dê Enter.

016_particionador

16º – Agora iremos definir este disco como Partição Livre para repartir esta partição de 20GB em tamanhos menores. Marque a opção Sim.

017_nova_tabela_particao

17º – Pronto! Agora definiremos a primeira partição de nosso HD. Dê Enter com o cursor em cima do ESPAÇO LIVRE.

018_particao_um

18º – Siga em criar uma nova partição.

019_nova_particao

19º – Como já havia explicado antes desta seção de particionamento, vou deixar 1GB para a área de swap e se você não leu o que escrevi sobre a partição swap, recomendo ler.

020_particao_swap

20º – Aqui definiremos como Primária a partição swap e para explicar o que são partições primárias e lógicas vou deixar este link para que você possa retirar suas dúvidas quanto a isso, pois não vou entrar neste assunto para que este grande tutorial não fique ainda MAIS maior (mais maior? Oh no!).

021_particao_primaria

21º – E em seguida definiremos que esta partição ficará no inicio do espaço disponível do disco.

022_particao_swap_no_inicio

22º – Bem, agora devemos usar esta partição como Área de troca (swap) e em seguida Finalizar a configuração da partição.

023_particao_swap

23º – Voltando para o menu principal do particionador, continuemos o resto das configurações no espaço livre restante. Marque a opção correspondente ao ESPAÇO LIVRE e dê Enter.

024_particao_barra

24º – Definimos aí que criaremos mais uma nova partição.

025_criar_particao_barra

25º – E agora, iremos criar a partição para o diretório /. Bem, este / (lê-se barra) será como explicado anteriormente, é a raiz do nosso sistema operacional. E no Linux não é exigido um tamanho tão grande assim, nada que 5GB não resolvam, mas eu vou deixar 15GB, porém eu recomendo que antes de definir este tamanho, pense bem onde você deixará este sistema instalado, porque se é num servidor, num cliente, em uma máquina virtual como esta e por aí vai, cada caso é um caso. Num servidor de correio que montei uma vez de espaço em disco de 2TB, deixei 100gb só para o / e não que tenha sido necessário esse tamanhozão, mas eu achei bom ter espaço disponível para caso o sistema operacional precisasse guardar algo numa emergência. Portanto veja bem, a situação é quem diz sobre sua necessidade e para este caso abaixo deixei 15.5GB disponível porque eu só tô aqui para ensinar.

026_definir_particao_barra

26º – E para este /, criar uma partição Lógica.

027_particao_barra_logica

27º – E definir para que fique no inicio do espaço disponível.

028_inicio_particao_barra

28º – Agora, definiremos que:

  1. O sistema de arquivos é do tipo ext4;
  2. Sim, queremos formatar esta partição;
  3. O Ponto de montagem fica como /;
  4. E por último, finalizamos a configuração da partição.

Lembrando que você não é obrigado a escolher o tipo de sistema de arquivos ext4, só estou o utilizando porque já usei ReiserFS, ext2, ext3, entre outros, e o ext4 me pareceu ser (por enquanto) algo que eu possa sentir um pouco mais de confiança quando há dano físico no HD e princípio de perda de acesso a dados.

029_sistema_arquivos_ext4_barra

29º – E agora que já temos duas partições definidas, iremos no espaço que restou, criar um espaço para outra área de partição. Esta partição será em cima do diretório srv. Separei este diretório porque nas distribuições Linux ele não costuma ser utilizado para guardar muitas coisas, daí será ele que usaremos para deixar os nossos arquivos publicados no servidor web.

030_particao_srv

30º – E para esta partição vamos deixar todo espaço em disco disponível, que no caso é de 5GB. Mas veja bem, eu tenho alguns servidores que deixo este espaço reservado com alguns bons gigas para eu colocar e publicar o que quiser, portanto saiba que esta é uma instalação teste e é você quem define como deve fazer isso com as suas partições.

031_criar_particao_srv

31º – Mais uma vez definiremos como tipo de partição Lógica.

032_criar_particao_srv_logica

32º – E aqui os passos serão:

  1. O sistema de arquivos é do tipo ext4;
  2. O Ponto de montagem como /srv;
  3. E por último, finalizamos a configuração da partição.

033_criar_particao_srv

33º – Bem, agora é finalizar o particionamento e escrever as mudanças no disco.

034_finalizar_particoes

34º – Confirme isso aí e espere a instalação ir para o próximo passo.

035_confirmar_alteracoes_nos_discos

35º – Agora configuraremos o repositório de nosso gerenciador de pacotes. Para quem não sabe como funciona um gerenciador de pacotes saiba que ele é basicamente um programa que baixa, instala e configura programas para você. Bem, lá na frente iremos utilizar bastante. No caso do Debian, que é a distribuição que estamos utilizando, ele usa o  gerenciador de pacotes chamado Apt-Get. Por agora vamos nos ater apenas a escolher um repositório para podermos pegar os programas dele.

036_configurar_local_gerenciador_pacotes

36º – E já que escolhemos o Brasil temos agora de escolher qual dos repositórios daqui iremos utilizar.

037_endereco_repositorio_pacotes

37º – Esta opção é para o caso o de se você precisar utilizar um proxy para sua conexão de internet funcionar, do contrário vá para o próximo passo sem alterar nada.

038_gerenciador_pacotes_proxy

38º – Esta janela abaixo lhe dá ao opção de participar do concurso de utilização de pacotes. Bem, eu sempre marco sim para que a comunidade tenha dados mais precisos do que eu estou utilizando.

039_concurso_utilizacao_pacotes

39º – E este aí abaixo é opção para você instalar o gerenciador de boot de nome GRUB. Eu particularmente sempre instalo este aí mesmo. Lembrando que se você não quiser instalar o GRUB ou se ele teve alguma incompatibilidade com sua máquina, você pode marcar a opção Não e escolher instalar o gerenciador de boot chamado LILO. Porém, nós iremos de GRUB mesmo.

040_instalando_o_grub

40º – Lembrando que ao escolher o gerenciador de boot ele irá lhe perguntar em que partição será instalado. E sobre isso preste atenção no texto a seguir.

Breve explicação sobre o gerenciador de bootVoltar ao início

Quando instalamos um gerenciador de boot em nosso HD, quero que saiba que é na partição onde se encontra o setor MBR (Master Boot Record) que ele deve ser instalado, pois é nesse local que costuma ser utilizado para a inicialização de um sistema operacional. Portanto observe que na configuração que fizemos no particionador, criamos uma partição primária e duas lógicas que pertencem a uma outra partição primária. Portanto só temos a partição sda. O que quero dizer com isso é que se tivéssemos duas partições, uma chamada de sda e outra como sda2 ou uma com sda e outra como sda1 e assim sucessivamente, você precisa saber que sempre tem que pegar a que define o dispositivo e isso é fácil de identificar porque ela não tem número junto com sua identificação, neste caso a sda. Mas aí você me pergunta, se eu tiver uma com o nome de sda e outra com o nome de sdb? Aí eu diria que você tem dois dispositivos (dois HDs provavelmente) em sua máquina e que escolher um deles para instalar o gerenciador de boot vai depender também de qual HD você escolheu na BIOS de sua máquina para estar no primeira opção de boot.

Eu gostaria muito de explicar a fundo sobre esta questão de boot e dispositivos que são listados no diretório /dev, mas por ora apenas escolheremos a partição sda.

041_instalacao_grub

41º – E depois de instalado o gerenciador de boot, nossa instalação do sistema operacional Debian está completa. Continue para reiniciar o sistema operacional.

042_instalacao_completa

42ºVoltar ao início – Reiniciado o computador, dê o comando apt-get update para atualizar a sua lista de repositório. Sobre essa lista de repositório eu comentei acima de que este repositório se trata de um servidor em algum lugar do mundo que guarda uma série de aplicativos que podem ser instalados após ter sido configurada esta lista na instalação ou no pós instalação do seu Linux Debian e o comando apt-get update é justamente para pedir informação para que este servidor nos envie a lista atualizada dos programas que ele tem disponibilizado para os usuários.

043_repositorio_debian_update

43º – Bem, agora iremos começar a nossa jornada de instalação de pacotes. – Voltar ao início

Breve explicação sobre Instalação de pacotes

Bem, como já havia comentado, iremos utilizar o gerenciador de pacotes Apt para que baixe, instale e configure os programas que solicitamos para ele. Várias distribuições Linux tem o seu próprio gerenciador de pacotes (no Mandriva era urpmi, no Cent-OS e derivados usamos o yum, no Arch Linux tem o pac                                              man e etc) e no Debian temos o nosso Apt. Dentre os comandos existentes para utilizarmos junto a ele só utilizaremos os básicos e isso será o bastante para o que precisamos.

Baixando alguns programas manualmente.

44º – Bem, agora iremos baixar os programas para começarmos a configurar o nosso Linux Debian, seja instalando e configurando aplicativos pelo gerenciador de pacotes, manualmente ou compilando. Vamos lá então.

O primeiro da lista é o Free Type. Você irá programar no Google por freetype e vai baixar sua versão mais recente. Bem eu baixei a versão 2.9 (em 10/05/2019), então eu não sei como estará lá no dia.050_freetype_download

45º – O próximo app será o Image Magick. Procure no tio Google e baixe sua última versão por favor. Eu baixo a 7.0.8-44 (em 10/05/2019), mas hoje não sei em que versão está, então esteja atualizado.

051_image_magick

46º – Agora (Se você quiser, vá até o site do Packges Debian e baixe a última versão do LibmCrypt. Eu baixei esta versão aí, a 2.5.8.3-3, mas se existir uma mais nova, baixe-a.

052_libmcrypt_download47º – Agora procure pela biblioteca Openssl. Eu baixei a versão 1-1.1 no repositório do Github (https://github.com/openssl/openssl/releases) (em 10/05/2019), portanto se não tiver uma mais nova, baixe essa aí mesmo.

054_openssl_download

48º – Agora vá até a página do Nginx e baixe sua última versão. Eu baixei essa 1.14.2 (em 10/05/2019) aí, mas fique a vontade em baixar uma mais recente.

055_nginx_download

50º – Agora meus caros, iremos baixar as bibliotecas de conexão com o Oracle. E chegando lá na área de download dos caras, você pode clicar em:

  • Instant Client for Linux x86-64 para Linux 64 bit;
  • Instant Client for Linux x86 para Linux 32 bit;

056_oracle_instant_client

51º – E depois de escolhida a plataforma, você deverá escolher quais bibliotecas desta plataforma irá baixar. As que eu escolhi foram (em 10/05/2-19):

  • (basic) – instantclient-basic-linux.x64-19.3.0.0.0.zip
  • (sdk) – instantclient-sdk-linux.x64-19.3.0.0.0.zip
  • (sqlplus) – instantclient-sqlplus-linux.x64-19.3.0.0.0.zip

Veja bem, não necessariamente precisa ser na mesma versão que eu baixei, contudo deverá ser obrigatoriamente as que contém os nomes basic, sdk e e sqlplus e só. Os pacotes também devem ser do tipo zip.

057_oracle_instant_client_download

52º – Baixe também a última versão do Apache Tomcat 6 (sim, já está no 9, mas eu defini o 6). E sim, neste tutorial iremos utilizar a versão 6 do Tomcat porque eu ainda não tive tempo de configurar as outras versões, mas presumo que não seja muito diferente, então se você quiser se aventurar em baixar uma versão mais recente é por sua conta e risco na hora de integrar com a biblioteca do Oracle. Ah sim! Baixe a versão para Linux ok? De preferência em pacote tarball tipo este apache-tomcat-6.0.45.tar.gz.

058_apache_tomcat

53º – Você também deve ir até a página do Unix ODBC e baixar a sua última versão. Eu baixei esta unixODBC-2.3.7.tar.gz aí (em 10/05/2019), mas fica a seu critério baixar uma mais nova ou não.

059_unix_odbc

54º – Você vai digitar Webmin no Google e na seção de Download da página irá baixar o pacote .deb relativo ao executável do Linux Debian. Sim é bom que você saiba que pacotes com extensão .deb são como .exe para Windows, a gente dá dois cliques e ele sai instalando. Não que não podemos instalar o pacote tarball, mas por ora este aí será o nosso pacote.

60_webmin

55º – E por fim o nosso querido PHP 7. Bem, eu baixei essa versão aí, php-7.3.5.tar.bz2 (em 10/05/2019), portanto fique a vontade se tiver uma mais atual, aliás eu aconselho.

php7_1PREPARAÇÃO!

Após ter instalado o Linux e ter baixado os pacotes, a primeira coisa que devemos fazer é instalar o pacote ssh usando Apt. Com ele teremos acesso remoto ao Linux. Alguns podem até dizer “ah, mas este pacote já vem instalado”, bem, instale com o comando abaixo.


apt-get install ssh

Descobrindo o seu ip no Linux

No Windows a gente digita ipconfig no terminal e no Linux digitamos ifconfig.

82_ifconfig
Portanto não tenha medo, digite:

ifconfig

E agora você pode acessar remotamente o seu servidor Linux utilizando o comando abaixo de outro terminal em outro computador.


ssh bender@ip_do_seu_servidor_linux

Repare que o acesso remoto para o servidor Linux só estará liberado para o usuário que criamos na instalação e não o root. Claro que isto é uma medida de segurança, portanto para logar como usuário root, você pode tanto digitar no terminal:

su

ou

login

E digitar o login root e a senha do root.

Mas, se você quiser sempre se logar como root remotamente utilize o Nano (leia a explicação sobre este editor neste post que fiz especialmente para você nunca usou este editor) que nos permite editar o arquivo responsável por esta “trava”. Por sua conta e risco, ok?


nano /etc/ssh/sshd_config

Desça até a linha onde é permitido o root login (PermitRootLogin yes) e descomente (retire o símbolo # se estiver na frente) e depois pressione as teclas Crtl + o para salvar as modificações no arquivo e Crtl + x para fechar o arquivo e voltar para o terminal.

67_sshd_config

Depois de feito o procedimento acima, reinicie o serviço de ssh com o comando abaixo.


/etc/init.d/ssh restart

Pronto. Agora você já poderá acessar remotamente o seu servidor Linux.

Configuração de Rede em modo textoVoltar ao início

Existe um arquivo no Linux que é praticamente padrão entre todas as distribuições sobre configuração de rede. E quando eu digo “praticamente” quero dizer que não vou me ater a possíveis erros que aconteceram em outras distribuições quando alterei este arquivo pelo modo texto, pois o que você tem que saber aqui é que no Debian ele funciona.

Para alterar sua configuração de redes como no Windows, vá no arquivo /etc/network/interfaces


nano /etc/network/interfaces

E lá você verá algo assim:


# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

A configuração acima indica que você está utilizando ip dinâmico e para configurarmos com ip fixo utilizamos algo assim:


# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.3.161
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.3.1
dns-nameserver 192.168.3.1

Repare que nesta desligamos o DHCP e a função “hotplug”.

Alterando o NameServer

Também existe um arquivo chamado resolv.conf e é nele que geralmente são guardados configurações do domínio que você está. Para acessá-lo digite:


nano /etc/resolv.conf


#domain Home
#search Home
nameserver 192.168.3.1

Estou deixando estas informações de rede apenas para caráter informativo, mas pode ser que em ambiente de produção você vá ter de alterar estes dois arquivos em algum momento.

O QUE VOCÊ DEVE SABER ANTES DE IR INSTALANDO TUDO QUANTO É PACOTEVoltar ao início

É necessário saber que quando se trabalha com Linux possíveis pesquisas e buscas sobre determinadas bibliotecas e suas respectivas configurações podem e devem acontecer. Não se sinta desesperado e nem desamparado, mas sim pronto para abrir a cabeça de que vida não tem de ser fácil.

Você tem de estar preparado para caso aconteça possíveis erros ao instalar qualquer pacote. Por que? Porque tudo o que está aqui descrito é baseado na minha instalação e não que a sua seja diferente, mas podem acontecer atualizações ou remoção de pacotes durante este período que instalei o Debian (lá pra outubro/novembro de 2015 até agora), pois como disse antes, este tutorial está me tomando muito tempo e a vida e a evolução dos sistemas não param.

Pois bem o que você pode fazer caso algum pacote não instale:

Se alguns destes pacotes que estão no ítem 55º passo não instalarem, se certifique que digitou o nome do pacote corretamente. E se ainda assim ele dizer que o pacote não existe ou que dependa de outro, dê o comando:


apt-get -f install

que ele tentará resolver as dependências daqueles pacotes.

E se ainda assim não instalar, você poderá procurar pelo nome do pacote ou similar utilizando o comando:


apt-cache search nome_do_pacote

ou


apt-cache search parte_do_nome_do_pacote

Exemplo:

Se ele não estiver encontrando o pacote blender-blablabla-dev, procure na listagem de pacotes disponíveis para serem baixados no servidor usando parte do nome do pacote. Tipo isso:


apt-cache search blender

63_apt_cache

Repare que na imagem acima ele trouxe tudo que está relacionado ao termo blender, estando escrito no nome do pacote ou não. Então fique esperto e aprenda como usar suas ferramentas disponíveis. Mas não significa que você pode ter seu problema resolvido completamente. Siga em frente lendo esta “carta de orientação”.

Outra situação que pode acontecer é o fato de você utilizar o comando para instalar pacotes do Debian, tipo este:


dpkg -i nome_do_pacote.deb

E também lhe ser mostrado as mesmas mensagens de que não é possível ser instalado, que é por causa de bla, bla, bla e etc. Neste caso, faça a mesma coisa, apt-get -f install para tentar resolver as dependências, se não der certo, tente procurar usando o comando search do Apt (como foi explicado acima). Se ainda assim não encontrar o pacote, digite o nome dele no Google e vá descobrir se ele está obsoleto ou não. Portanto se depois de tudo o que você fez para tentar instalar o pacote não deu certo, pule a etapa e siga em frente no tutorial, mas se por acaso lá na frente algo que você está tentando instalar depender de algum pacote que foi deixado de instalar aqui atrás, você vai ter de aprender a se virar, baixar o pacote, configurá-lo e compilá-lo manualmente. Não que isso vá acontecer, mas você deve estar preparado para saber ser virar no Linux porque este tutorial é de média complexidade, portanto para lhe dar o caminho das pedras e você conseguir resolver estes e outras inúmeras questões, criei este guia objetivo para leigos e esquecidos, pois tem inúmeras coisas aí que você pode usar para consulta. E se você quiser perguntar algo aqui no blog, fique a vontade, mas também não significa que eu seja um Oráculo.

Instalação e configuração dos pacotes (finalmente)

56º – Agora iremos baixar e instalar pacote por pacote via Apt. Portanto eventuais questionamentos sobre para que serve cada pacote irei me abster, porque muitos deles são dependências que outros pacotes estão pedindo, portanto para que não fiquemos baixando, compilando e configurando pacote por pacote, vou deixar uma lista dos que devem ser instalados utilizando o gerenciador de pacotes. Lembrando que caso algum pacote não instale peço que você verifique se o nome dele está mesmo correto, pesquise no Google se for preciso para ser informar se o pacote foi descontinuado ou se tem uma versão mais nova e se for este o caso, instale a versão mais nova, mas se ainda assim não existir mais este pacote para a sua versão do Debian, pule essa parte de sua instalação e vá para o próximo ítem.

Então vamos lá, se logue em em seu sistema operacional como root e execute linha por linha dos comandos abaixo.


apt-get install libxml2-dev

apt-get install binutils

apt-get install gcc

apt-get install make

apt-get install build-essential

apt-get install libmcrypt4

apt-get install libaio1

apt-get install libpng12-dev

apt-get install libjpeg62

apt-get install zlib1g

apt-get install zip

apt-get install libcurl4-openssl-dev

apt-get install libssl-dev

apt-get install libpng-dev

apt-get install libperl-dev

apt-get install libjpeg-dev

apt-get install libxslt1-dev

apt-get install libevent-dev

apt-get install libaprutil1

apt-get install libaprutil1-dev

apt-get install libpcre3-dev

apt-get install libicu-dev

apt-get install libzip-dev

apt-get install libmhash-dev

apt-get install libltdl-dev

apt-get install libbz2-dev

apt-get install libt1-dev

apt-get install libbz2 (caso haja erro na instalação do libbz2 no PHP) *

apt-get install libbz2-1.0 (caso haja erro na instalação do libbz2 no PHP) *

apt-get install libmcrypt-dev

apt-get install libtidy-dev

apt-get install libxpm-dev

apt-get install libsqlite3-dev

apt-get install autoconf2.13

apt-get install autoconf2.64

apt-get install libharfbuzz-dev 

apt-get install libxslt-dev

apt-get install libtidy-dev

apt-get install libpq-dev

apt-get install libfreetype6-dev

apt-get install mlocate

apt-get install pkg-config

apt-get install firebird-dev

apt-get install unixodbc

apt-get install unixodbc-bin

apt-get install unixodbc-dev

apt-get install tdsodbc

apt-get install python

apt-get install python-dev

apt-get install python-psycopg2

apt-get install python-django

apt-get install python-mysqldb

apt-get install python-pyodbc

apt-get install bison

apt-get install re2c

apt-get install memcached

apt-get install net-tools

apt-get install libssl-dev

apt-get install libsqlite3-dev

apt-get install cmake

apt-get install iodbc

Instalando arquivos necessários para a biblioteca freeTDS(responsável para a conexão com SQL-Server):


apt-get install libaprutil1-dbd-freetds
apt-get install freetds-common
apt-get install freetds-dev
apt-get install libct4
apt-get install libsybdb5
apt-get install tdsodbc
apt-get install libdbd-freetds libqt4-sql-tds sqsh

Opcionais:


(para gerenciar a inicialização de programas no Debian)
apt-get install rcconf 

(para caso as funções updatedb e locate não funcionarem)
apt-get install mlocate 

E por fim sobre estes pacotes abaixo

SÓ ACONSELHO VOCÊ INSTALAR OS DOIS PACOTES ABAIXO SE QUISER USAR MODO GRÁFICO!

Resumindo em outras palavras, se você quiser estragar tudo enfiando modo gráfico no nosso querido servidorzinho em modo texto tornando-o mais pesado com pacotes desnecessários para o que iremos fazer aqui, dê o comando abaixo (e aproveite e volte para o mundo gráfico do Windows).

Não instale estes dois pacotes abaixo por favor!

(para controlar a execução e paralisação do modo gráfico quando necessário, coisa que não será nunca)
apt-get install gdm

(para caso seja necessário um modo gráfico, mas não será necessário)
apt-get install gnome-core

Para acessarmos os arquivos do Linux no Windows ou do Linux no Linux (WinSCP ou Filezilla ou outros)Voltar ao início

Repare que estou fazendo esta observação após você ter instalado o pacote ssh no Linux. Com ele poderemos fazer conexões em modo texto e em modo gráfico utilizando gerenciadores de acesso SSH/FTP utilizando a porta 22 que é padrão do protocolo SFTP.

Você já deve ou já deveria ter pensado que se tivermos baixado alguns arquivos para serem executados no Linux foi utilizando outro computador que não é este que estamos configurando. Pois bem, para fazer isso temos vários programas tanto no Windows quanto no Linux, mas eu particularmente utilizo no Windows o programa WinSCP e no Linux o Filezilla, mesmo os dois sistemas operacionais tendo já gerenciadores de FTP embutidos. Vale lembrar que ambos programas tem a mesma finalidade. Então vá no Google e baixe o WinSCP se você estiver usando Windows e precisar acessar o Linux. As configurações são simples e estão como abaixo.

  • File Protocol: SFTP
  • Host name: o ip do seu Linux.
  • Port Number: 22
  • User name: root
  • Password: aquela sua senha que o bairro inteiro já sabe.

62_winscp

E quando conectado ficará algo assim:

64_winscp_conexao

Repare na imagem acima que do lado esquerdo você vê o seu computador e do lado direito você vê o seu servidor Linux. Você pode transferir os arquivos de um lado para o outro apenas arrastando ou clicando com o botão direito e clicando nas opções do menu que se abrirá.

Você também pode e deve baixar o software Putty para acessarmos via modo texto o servidor que estamos configurando. E nele configuramos o nosso tipo de acesso. No momento em que clicarmos em Open, será pedido o login e senha do servidor.

65_putty_config

E depois de conectado, faremos a nossa configuração via modo texto.

66_putty_access

57ºPreparando o ambiente Oracle

Extraia os arquivos do instantclient-basic, instantclient-sdk e instantclient-sqlplus (que você baixou anteriormente) para o diretório /usr/local descompactando antes:

Primeiro descompacte todos os pacotes (lembrando que não adianta sair copiando e colando se o pacote não for igual ao que eu baixei, portanto preste atenção, se baixou um pacote diferente coloque o nome correspondente a ele):

  • unzip instantclient-basic-linux-x86-64-19.3.0..0.zip
  • unzip instantclient-sdk-linux-x86-64-19.3.0.0.0.zip
  • unzip instantclient-sqlplus-linux-x86-64-19.3.0.0.0.zip

Depois mova o diretório para /usr/local.


mv instantclient_19_3 /usr/local/

O código riscado abaixo está provisoriamente inabilitado (não o utilize)

E então, criamos um link simbólico o library client da biblioteca


ln -sf /usr/local/instantclient_19_3/libclntsh.so.19.1 /usr/local/instantclient_19_3/libclntsh.so

Depois, para atualizar as informações da LD executamos o ldconfig.


ldconfig

Criamos os diretórios para as variáveis de ambiente do Oracle


mkdir /usr/local/instantclient_19_3/network/

mkdir /usr/local/instantclient_19_3/network/admin/

E para criar as variáveis de ambiente executamos cada linha abaixo


export LD_LIBRARY_PATH=/usr/local/instantclient_19_3/

export ORACLE_HOME=/usr/local/instantclient_19_3/network/admin/

export TNS_ADMIN=/usr/local/instantclient_19_3/network/admin/

Preparando o arquivo tnsnames.ora

Eu não sei qual a sua configuração de banco de dados, mas eu peguei um exemplo do arquivo tnsnames.ora que deve ser mais ou menos este formato abaixo. Este arquivo é utilizado para se conectar aos chamados “schemas” do Oracle, portanto se você sabe quais serão as configurações de banco do seu servidor, altere o que achar necessário e salve o arquivo com o nome de tnsnames.ora, mas se você não entende porcaria nenhuma de Oracle, copie este conteúdo abaixo e salve o arquivo com o nome de tnsnames.ora do mesmo jeito que se um dia alguém precisar utilizar este biblioteca só será preciso alterar algumas configurações.


GSA =
   (DESCRIPTION =
      (ADDRESS_LIST =
         (ADDRESS = (PROTOCOL = TCP)(HOST = dboracle1)(PORT = 1521))
      )
      (CONNECT_DATA =
         (SERVICE_NAME = gsa)
      )
)

GSATESTE =
   (DESCRIPTION =
      (ADDRESS_LIST =
         (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.19)(PORT = 1521))
      )
      (CONNECT_DATA =
         (SERVICE_NAME = gsa)
      )
   )

GSA_TREINA =
   (DESCRIPTION =
      (ADDRESS_LIST =
         (ADDRESS = (PROTOCOL = TCP)(HOST = 192.166.0.19)(PORT = 1521))
      )
      (CONNECT_DATA =
         (SERVICE_NAME = gsa)
      )
)

PORTAL =
   (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.28)(PORT = 1521))
      )
      (CONNECT_DATA =
      (SERVICE_NAME = portal)
      )
)

Feito o processo acima, copie o texto para um arquivo de nome tsnames.ora-modelo para dentro de ORACLE_HOME:


cp tnsnames.ora-modelo $ORACLE_HOME/tnsnames.ora

E pronto! Finalizamos por enquanto a parte do Oracle.

58ºInstalando o MySQL (Maria DB na prática se for no Debian)Voltar ao início

Não tem muito o que fazer, você vai usar o gerenciador de pacotes mesmo para instalar o MariaDB, pois o nosso foco aqui é compilar o PHP e seus derivados. Vale lembrar que se algum destes pacotes não estiverem disponíveis, retire um e bola pra frente. Se for pedido o password durante a instalação coloque o mesmo do usuário root da máquina que definimos na instalação e altere depois se preferir, porém não se surpreenda se o Debian não vier mais com o MySQL, mas sim o Maria DB (seu sucessor espiritual) quando dizer para instalar o MariaDB Server.


apt-get install mariadb-server-10.3

59ºInstalando o FirebirdVoltar ao início

E para quem nunca utilizou o Firebird saiba que este é um puta banco. Vou incluí-lo aqui na instalação porque na configuração do PHP também iremos integrá-lo. E segue a mesma orientação do MySQL, se for pedido o password durante a instalação coloque o mesmo do root da máquina que definimos na instalação e altere depois se preferir.


apt-get install firebird3.0-server

68_firebird_install

E em seguida coloque o password.

69_firebird_db_config

60º – Instalando o PostgresqlVoltar ao início

Aqui é a mesma coisa, será via Apt mesmo. Para quem não sabe o Postgres é um banco de dados muito bom e também muito utilizado e vamos preparar o PHP para recebê-lo durante sua configuração.


apt-get install postgresql postgresql-server-dev-all

61º – Instalando o OpenSSLVoltar ao início

Bem, este será pré configurado e compilado em nosso Linux. Já baixamos o arquivo e agora façamos nossa parte.

Vá até onde está o arquivo baixado e descompacte utilizando o comando tar.


tar -zxvf openssl-1.1.0-pre1.tar.gz

Depois entre no diretório descompactado.


cd openssl-1.1.0-pre1

Configure o local onde será instalada a biblioteca.


./config --prefix=/usr/local/open-ssl

Feita a configuração, compile utilizando os comandos abaixo.


make && make install

Terminado o processo, exclua o diretório.


rm -r openssl-1.1.0-pre1

62º – Instalando a biblioteca McryptVoltar ao início

Antigamente eu até compilava o libmcrypt, posso até fazer isso na 2ª versão deste tutorial que será direcionado para Apache e não Nginx, mas por ora iremos instalar a biblioteca a partir do pacote que baixamos no site de packages do Debian.


dpkg -i libmcrypt-dev_2.5.8-3.3_amd64.deb

63º – Instalando o FreetypeVoltar ao início

A biblioteca Freetype está relacionada a fonts (tipos de letra) e esta e outras bibliotecas foram utilizadas por mim para poder instalar CMS com o Drupal e a plataforma de ensino a distância Moodle.

Primeiro iremos descompactar a biblioteca que baixamos.


tar -jxvf freetype-2.4.4.tar.bz2

Depois entramos no diretório do Freetype.


cd freetype-2.4.4

Executamos o Autogen.


sh autogen.sh

Executamos o configurador.


./configure

E por fim enviamos o comando para que ele seja compilado.


make && make install

64º – Instalando o FreeTDSVoltar ao início

Esta biblioteca é geralmente utilizada para fazermos comunicação com SQL Server tanto via PHP ou Python (se servir para outra coisa também eu não sei dizer), porém o PHP 7 não oferece suporte para a biblioteca mssql contida nas versões anteriores do PHP, entretanto iremos instalar ainda assim caso utilizemos Python.

Primeiro descompactamos o pacote.


tar -zxvf freetds-pached.tar.gz

Entramos no diretório.


cd freetds-0.95.91

E configuramos a nossa pré compilação com os parâmetros abaixo.


./configure

--prefix=/usr/local/freetds

--with-tdsver=7.4

--enable-msdblib

--enable-dbmfix

--with-gnu-ld

Aqui vai o script já pronto para o copiar e colar:

./configure --prefix=/usr/local/freetds --with-tdsver=7.4 --enable-msdblib --enable-dbmfix --with-gnu-ld

E em seguida compilaremos.


make && make install

65º – Instalar a biblioteca UnixODBCVoltar ao início

Sim, este é o driver odbc para sistemas Unix e se não tem mais SQL Server poderíamos pelo menos o driver ODBC não? É, não se dizer sobre isso. Mas será incluído também em nosso PHP 7 mais a frente.

Mas antes em primeiro lugar descompacte a biblioteca.


tar -zxvf unixODBC-2.3.4.tar.gz

Entre no diretório do Unix ODBC.


cd unixODBC-2.3.4

E configure o aplicativo com os devidos parâmetros.


./configure

--prefix=/usr/local/unixODBC

Para facilitar copie e cole isso aqui se preferir:

./configure --prefix=/usr/local/unixODBC

E por fim compile.


make && make install

E depois de instalado, crie um link simbólico para o diretório libs.


ln -s /usr/local/unixODBC/lib /usr/local/lib64

E devido a um certo problema de compilação no PHP 7 tive de criar alguns links simbólicos no diretório /usr/local/lib64. Portanto vá até o diretório /usr/local/lib64 e execute os comandos abaixo lá. São eles:


ln -s /usr/local/unixODBC/include/odbc.h odbc.h

ln -s /usr/local/unixODBC/include/odbcsdk.h odbcsdk.h

ln -s /usr/local/unixODBC/include/iodbc.h iodbc.h

ln -s /usr/local/unixODBC/include/sqlunix.h sqlunix.h

ln -s /usr/local/unixODBC/include/sqltypes.h sqltypes.h

ln -s /usr/local/unixODBC/include/sqlucode.h sqlucode.h

ln -s /usr/local/unixODBC/include/sql.h sql.h

ln -s /usr/local/unixODBC/include/isql.h isql.h

ln -s /usr/local/unixODBC/include/sqlext.h sqlext.h

ln -s /usr/local/unixODBC/include/isqlext.h isqlext.h

ln -s /usr/local/unixODBC/include/udbcext.h udbcext.h

ln -s /usr/local/unixODBC/include/sqlcli1.h sqlcli1.h

ln -s /usr/local/unixODBC/include/LibraryManager.h LibraryManager.h

ln -s /usr/local/unixODBC/include/cli0core.h cli0core.h

ln -s /usr/local/unixODBC/include/cli0ext.h cli0ext.h

ln -s /usr/local/unixODBC/include/cli0cli.h cli0cli.h

ln -s /usr/local/unixODBC/include/cli0defs.h cli0defs.h

ln -s /usr/local/unixODBC/include/cli0env.h cli0env.h

Sim, eu acho meio “pedreiragem” isso aí, porém digamos que eu tentei fazer várias coisas e isso aí de colocar os links simbólicos foi o que funcionou na hora da compilação do PHP 7.

66º – Instalando e configurando o PHP 7Voltar ao início

Entremos em nossa pasta onde se encontra o arquivo compactado do PHP 7 e começemos o serviço.

Primeiro iremos apenas descompactá-lo, pois será preciso incluir algumas bibliotecas do SQL Server dentro dos fontes do PHP.


tar -jxvf php-7.3.7.tar.bz2

Configurando a biblioteca do SQL Server no PHP 7Voltar ao início

Agora, para você poder compilar tanto o PDO do SQL Server, quanto o próprio driver do SQL Server junto com o PHP 7 teremos de seguir um dos dois passos abaixo.

Primeiro, vamos baixar a última lib disponibilizada pela Microsoft no link oficial da Microsoft, que está no GitHub. Portanto se estiver como 5.6 escrito na área de releases (source code) da biblioteca não temas (baixe apenas).

E aí depois descompactamos o arquivo abaixo.
tar -zxvf msphpsql-5.6.1.tar.gz

Instalação e configuração do Microsoft  ODBC Driver 13 for SQL Server

Primeiro devemos fazer download do driver (e para o caso de você não conseguir baixar este arquivo usando o link abaixo, você pode utilizar este que reservei porque acho o link da Microsoft muito burocrático de se obter).

Apenas para caráter informativo tentei baixar a versão 17 do ODBC driver da Microsoft neste link, mas além de não permitirem que você realmente baixe os fontes, te dão um link doido pra você acrescentar no repositório do APT que comigo nunca funcionou, então fica aqui só para constar e ficar recomendado para não baixá-lo mesmo sendo atualizado.

Depois descompactamos o pacote,

tar -zxvf msodbcsql-13.0.0.0.tar.gz

entramos dentro do diretório descompactado

cd msodbcsql-13.0.0.0

e mandamos instalar o bichinho.

./install.sh install --force

Após a instalação, não se preocupe se for informado de que que houve uma falha ao checar a versão 64 bit do seu Linux. Siga em frente.

Checking for 64 bit Linux compatible OS …………………………… FAILED
Checking required libs are installed …………………………. NOT CHECKED
unixODBC utilities (odbc_config and odbcinst) installed ………… NOT CHECKED
unixODBC Driver Manager version 2.3.1 installed ……………….. NOT CHECKED
unixODBC Driver Manager configuration correct …………………. NOT CHECKED
Microsoft ODBC Driver 13 for SQL Server already installed ………. NOT CHECKED
Microsoft ODBC Driver 13 for SQL Server files copied …………………… OK
Symbolic links for bcp and sqlcmd created …………………………….. OK
Microsoft ODBC Driver 13 for SQL Server registered ………………. INSTALLED

Seguindo então, executamos os dois parâmetros abaixo e conferimos logo em seguida o resultado (utilizei-me do comando /usr/bin/odbcinst porque este faz referência a instalação do unixODBC da Microsoft).

/usr/bin/odbcinst -j
/usr/bin/odbcinst -q -d -n "ODBC Driver 13 for SQL Server"

E esperamos ver este resultado:
odbcinst_params
Bem, obtido o resultado satisfatório da imagem acima crie um diretório chamado unixODBCMS dentro de /usr/local.

 
mkdir /usr/local/unixODBCMS

E também crie uma pasta chama include dentro dentro dela.

 
mkdir /usr/local/unixODBCMS/include

Pronto. Agora criaremos um link simbólico para o ODBC da Microsoft que baixamos e instalamos.

 
ln -sf /usr/bin/odbcinst /usr/local/unixODBCMS/odbcinst

E também devemos criar um link simbólico para o cabeçalho de um arquivo do Unix ODBC que instalamos mais cedo.

 
ln -sf /usr/local/unixODBC/include/sqlext.h /usr/local/unixODBCMS/include/sqlext.h

Agora sim terminamos a parte referente ao Unix ODBC da Microsoft.

Configuração e preparação das bibliotecas PDO_SQLSRV e SQLSRV para o PHP 7Voltar ao início

Bem, agora voltamos para nosso diretório que contém os fontes das bibliotecas PDO_SQLSRV e SQLSRV, mais precisamente dentro da pasta source.

 
cd msphpsql-5.6.1/source

E e chegando lá, copie o diretório shared para dentro dos diretórios pdo_sqlsrv e sqlsrv como ilustra os comandos abaixo (caso não faça isso, você pode ter o erro: Cannot find PDO_SQLSRV headers exposto em seu browser na hora em que tentar configurar o PHP).

cp -r shared pdo_sqlsrv
cp -r shared sqlsrv

Em seguida, copie os diretórios pdo_sqlsrv e sqlsrv para dentro da pasta ext que está dentro dos fontes do PHP 7.3.5 já descompactados anteriormente.

cp -r /srv/bender13/php/msphpsql-5.6.1/source/pdo_sqlsrv /srv/bender13/php/php7.3.5/ext
cp -r /srv/bender13/php/msphpsql-5.6.1/source/sqlsrv /srv/bender13/php/php-7.3.5/ext

Pronto, os procedimentos para configuração do SQL Server junto aos fontes do PHP 7 estão finalizados por enquanto.

Depois entramos no diretório onde está os fontes do PHP 7.3.5

cd php/php-7.3.7

E executamos um buildconf

./buildconf --force

Agora, gostaria que você entendesse que todos os pacotes que baixamos, configuramos e instalamos até agora foram especificamente para a preparação deste ambiente do PHP compilado no seu Linux. Nas versões anteriores em que eu ainda instalava o PHP 5 existiam as bibliotecas que não estão mais compatíveis como por exemplo a mssql responsável pela conexão com o SQL Server e outras.

Agora, antes de configurarmos deixarei algumas observações.

– A primeira é para caso você tenha instalado uma nova versão da biblioteca do Oracle. Para compilar o PDO do Oracle é preciso observar como é referenciada esta biblioteca no PHP. A ordem para colocar o parâmetro de configuração é o local onde está instalado e a versão final do instant client, separado por vírgula.

Exemplo:


--with-pdo-oci=instantclient,/home/cjones/instantclient_19_3,19.1).

Mas veja bem não se preocupe com isso se você baixou a mesma versão que está neste tutorial.

– Esta segunda irá impactar totalmente na configuração do seu PHP. PORTANTO SE O SEU SERVIDOR FOR 64 BIT INSIRA O PARÂMETRO ABAIXO NA CONFIGURAÇÃO DO PHP JUNTO COM OS OUTROS que iremos mostrar mais abaixo (no script  de configuração já deixei inserido por padrão para você não ter este trabalho).


--with-libdir=lib64 

– Tive de retirar os parâmetros relacionados a libmcrypt e ao GD porque a partir do PHP 7.1.1 eles foram drepeciados.

 
--with-mcrypt 
--with-GD
--enable-gd-native-ttf

Configuração do PHP

Como disse anteriormente não irei explicar o porquê de cada biblioteca, mas quero dizer que fiz o que pude para que esta pré configuração do PHP seja compatível o máximo de apps web que temos que instalar, como Moodle, Drupal, Sonar, etc.

./configure 
CXXFLAGS=-std=c++11 
--enable-sqlsrv=shared 
--with-pdo_sqlsrv=shared 
--prefix=/opt/php7 
--with-config-file-path=/opt/php7/etc 
--enable-pdo 
--with-pdo-pgsql 
--with-pdo-firebird 
--with-pgsql 
--with-pdo_sqlite 
--with-pdo_mysql 
--with-pdo_oci 
--with-mysqli 
--with-unixODBC=/usr/local/unixODBCMS 
--with-pdo-odbc=unixODBC,/usr/local/unixODBC 
--enable-ftp 
--enable-mbstring 
--enable-ctype 
--with-curl 
--with-openssl 
--with-xmlrpc 
--with-zlib 
--with-gettext 
--with-freetype-dir=/usr/local/include/freetype2 
--enable-sockets 
--enable-tokenizer 
--enable-zip 
--enable-mbstring 
--with-jpeg-dir=/usr/lib 
--with-zlib-dir=/lib 
--with-bz2=/lib 
--with-iconv 
--enable-dba=shared 
--enable-soap 
--enable-fpm 
--enable-exif 
--enable-wddx 
--enable-bcmath 
--enable-calendar 
--enable-dba 
--enable-zip 
--enable-sysvmsg 
--enable-sysvsem 
--enable-sysvshm 
--with-png-dir 
--with-zlib-dir 
--with-layout=GNU 
--with-gettext 
--with-tidy 
--with-pear 
--with-xpm-dir 
--with-mhash 
--with-xsl 
--enable-intl 
--with-fpm-user=www-data 
--with-fpm-group=www-data 
--with-oci8=instantclient,/usr/local/instantclient_19_3 
--with-pdo-oci=instantclient,/usr/local/instantclient_19_3,19.1 
--with-libdir=lib64 
--enable-debug  

Para o caso de você ter dificuldade em copiar os comandos acima para colar no terminal, pode utilizar o que está abaixo.

./configure CXXFLAGS=-std=c++11 --enable-sqlsrv=shared --with-pdo_sqlsrv=shared --prefix=/opt/php7 --with-config-file-path=/opt/php7/etc --enable-pdo --with-pdo-pgsql --with-pdo-firebird --with-pgsql --with-pdo_sqlite --with-pdo_mysql --with-pdo_oci --with-mysqli --with-unixODBC=/usr/local/unixODBCMS --with-pdo-odbc=unixODBC,/usr/local/unixODBC/ --enable-ftp --enable-mbstring --enable-ctype --with-curl --with-openssl --with-xmlrpc --with-zlib --with-gettext --with-freetype-dir=/usr/local/include/freetype2 --enable-sockets --enable-tokenizer --enable-zip --enable-mbstring --with-jpeg-dir=/usr/lib --with-zlib-dir=/lib --with-bz2=/lib --with-iconv --enable-dba=shared --enable-soap --enable-fpm --enable-exif --enable-wddx --enable-bcmath --enable-calendar --enable-dba --enable-zip --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-png-dir --with-zlib-dir --with-layout=GNU --with-gettext --with-tidy --with-pear --with-xpm-dir --with-mhash --with-xsl --enable-intl --with-fpm-user=www-data --with-fpm-group=www-data --with-oci8=instantclient,/usr/local/instantclient_19_3 --with-pdo-oci=instantclient,/usr/local/instantclient_19_3,19.1 --with-libdir=lib64 --enable-debug 

E claro! Agora vamos compilar (e aguardar muito). Vá fazer um lanche se preferir e não saia do diretório do PHP assim que terminar de compilar.

make && make install

Observação a respeito do resultado pós compilação (observe a figura abaixo e siga as orientações seguintes):

Ao final da compilação o PHP 7 dá uma orientação para você adicionar o PEAR no seu arquivo php.ini.

Portanto, abra o arquivo php.ini-production que está no diretório onde você acabou de compilar o PHP 7.

nano php.ini-production

E inclua o path do pear arquivo conforme orientado. Pode ser logo abaixo da sessão onde ele trata do include_path do pear (; PHP’s default setting for include_path is “.;/path/to/php/pear”).

include_path = "/opt/php7/share/pear"

Observação a respeito do parâmetro sigchild:

Removi a opção –enable-sigchild por conta de avisos do Composer e do próprio site da Oracle que me recomenda não utilizá-lo. Você pode consultar em:
https://blogs.oracle.com/opal/entry/php_oci8_signal_handling_and_e_1

67º – Configurando o php-fpmVoltar ao início

Uma das coisas novas que o PHP traz de algumas versões recentes (acho que do 5.5 ou do 5.6 pra cá) é o fato de não precisarmos mais utilizar um servidor web para servir nossas aplicações em PHP porque o nosso querido PHP já vem com um servidor web embutido. Sim, nada de Apache ou Nginx, porém eu não vou abordar isso neste tutorial porque o foco deste é intengrá-lo com o proxy reverso Nginx. Proxy reverso? O que é isso? Vou utilizar a explicação do pessoal da net: imagina um proxy e depois imagina ele sendo reverso. Ah tá! Entendi porra nenhuma. Mas vamos lá configurar o nosso php-fpm.

Bem, ainda dentro do diretório do PHP faremos a configuração abaixo.

Crie um diretório para os logs do php-fpm.


mkdir /var/log/php-fpm

Torne o usuário www-data dono deste diretório.


chown -R www-data:www-data /var/log/php-fpm

Copie o arquivo de configuração do PHP que acabamos de gerar durante a compilação para dentro do diretório onde foi instalado o nosso PHP segundo orientação de nossa pré-configuração.


cp -f php.ini-production /opt/php7/etc/php.ini

Agora altere a permissão deste aquivo.


chmod 644 /opt/php7/etc/php.ini

Copie a configuração padrão do nosso php-fpm para o local onde ela deverá ficar.


cp /opt/php7/etc/php-fpm.conf.default /opt/php7/etc/php-fpm.conf

E copie a configuração do SAPI (Server Application Interface) para ele.


cp -f sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

Altere a permissão de seu arquivo php-fpm.


chmod 755 /etc/init.d/php-fpm

Atualize o mesmo para sua inicialização no Linux.


update-rc.d -f php-fpm defaults

Crie um arquivo para guardar o pid (id do processo do php-fpm) de quando ele estiver sendo executado.


touch /var/run/php-fpm.pid

Finalizando o assunto sobre as bibliotecas do PDO_SQLSRV e SQLSRV

Vá dentro do diretório /opt/php7/lib/php e provavelmente haverá um diretório com uma data e o nome debug no final. Estou dizendo isso porque na minha configuração apareceu a data de 3 de março de 2016, então pode ser que você pegue algum fonte de outra data de compilação que poderá fazer esta data variar.
Mas vamos no endereço em foram geradas as duas libs de extensão .so para a biblioteca do SQL Server e adicioná-las em seu arquivo php.ini.

Primeiro abra o seu arquivo php.ini

nano /opt/php7/etc/php.ini

Acrescente as linhas abaixo dentro dele, salve e feche o arquivo (mas antes preste atenção vendo se o diretório 20180731-debug tem mesmo esse nome porque sua forma varia conforme a data de compilação).

[PDO_SQLSRV]
;set pdo_sqlsrv para sql server
extension=/opt/php7/lib/php/20180731-debug/pdo_sqlsrv.so

;[SQLSRV]
;set sqlsrv para sql server
extension=/opt/php7/lib/php/20180731-debug/sqlsrv.so

Instale o PHAR sengundo resultado da compilação.


/srv/_LIBSPHP7/php-7.3.28/build/shtool install -c ext/phar/phar.phar /opt/php7/bin/
ln -s -f phar.phar /opt/php7/bin/phar

E por fim saia do diretório em que foi compilado o PHP e o remova.

rm -r php-7.1.1

Configuração dos arquivos do PHP-FPM

Definição do que é pra que serve (segundo o manual do PHP) :

FPM (FastCGI Process Manager) é uma alternativa para a implementação PHP FastCGI com algumas features adicionais (principalmente) usado em sites pessados.

Entre as features estão incluidas:

  • gerenciamento de processos avançado com stop/start;

  • habilidade para começar a trabalhar com uid/gid/chroot/environment diferentes, ouvindo em diferentes portas e últilizando-se de php.ini destintos (troca de safe_mode);

  • stdout e stderr logging;

  • reinício de emergência em caso de destruição acidental de opcode cache;

  • acelera o processo de upload;

  • “slowlog” – os scripts de registro (e não apenas seus nomes, mas o seu PHP backtraces também,         usando ptrace e coisas semelhantes para o processo de leitura remota execute_data) que são executados extraordinariamente lento;

  • fastcgi_finish_request() – função especial para finalizar pedido e liberar todos os dados ao mesmo tempo         continuando a fazer algo demorado (conversão de vídeo, processamento de estatísticas, etc);

  • dinâmico/estático child spawning;

  • informações básicas de estatus do SAPI (similar ao Apache mod_status);

  • php.ini-baseado em arquivos de configurações.

Mão na massa da configuração do PHP-FPM

Abra o arquivo de inicialização do php-fpm com editor Nano.


nano /etc/init.d/php-fpm

E altere a linha:


php_fpm_PID=${prefix}/var/run/php-fpm.pid

para:


php_fpm_PID=/var/run/php-fpm.pid

Agora, iremos iremos descomentar algumas linhas e também alterando alguns valores se necessário do arquivo php-fpm.conf. Portanto abra o arquivo de configuração usando o editor.


nano /opt/php7/etc/php-fpm.conf

E identifique onde estão as linhas que contém os valores abaixo. Se estiverem comentadas, descomente retirando o símbolo “#” que precede a linha e se conterem valores diferentes altere para os que são informados aqui (OBSERVE QUE NÃO É SÓ DESCOMENTAR, POIS AS VEZES OS VALORES SÃO PARECIDOS, PARECIDO TAMBÉM QUER DIZER NÃO IGUAL. PRESTE ATENÇÃO!).


pid = /var/run/php-fpm.pid

rlimit_core = 'unlimited'

Agora, iremos iremos descomentar algumas linhas e também alterando alguns valores se necessário do arquivo http://www.conf.default. Portanto abra o arquivo de configuração usando o editor.

nano /opt/php7/etc/php-fpm.d/www.conf.default

E aqui também identifique onde estão as linhas que contém os valores abaixo. Faça o mesmo que foi feito logo acima, se estiverem comentadas, descomente retirando o símbolo “#” que precede a linha e se conterem valores diferentes altere para os que são informados aqui.

user = www-data

group = www-data

listen = 127.0.0.1:9000

pm = dynamic

pm.max.children = 10

pm.start_servers = 4

pm.min_spare_servers = 2

pm.max_spare_servers = 6

pm.status_path = /status

ping.path = /ping

chdir = /srv/www

Pronto! Agora salve o arquivo e feche-o. Mas antes de prosseguirmos, copie renomeando este este arquivo para evitarmos problemas na hora de iniciar o PHP-FPM (aqui está a dica para resolução do problema que acontecerá se esta providência não for tamada).

cp /opt/php7/etc/php-fpm.d/www.conf.default /opt/php7/etc/php-fpm.d/www.conf

Comandos para gerenciarmos o PHP-FPM


/etc/init.d/php-fpm start
/etc/init.d/php-fpm stop
/etc/init.d/php-fpm reload

Nem preciso dizer o que cada um faz né? Pois bem, iremos utilizá-los adiante.

E para maiores detalhes sobre os parâmetros de configuração do arquivo php-fpm.conf, clonei um informativo da página oficial do PHP que contém a devida explicação para cada parâmetro do arquivo e para que eles servem. Está neste post.

Criação do nosso diretório público onde ficará nosso arquivo

Crie um um diretório para abrigar os nossos apps que estarão publicados utilizando o comando “Make Dir” do Linux.


mkdir /srv/www

E apesar de ser uma má prática, vou deixar aqui um comando para você deixar um comando para que você não tenha problemas com permissão de leitura ou escrita de arquivos futuramente neste diretório.


chmod 777 /srv/www

Este comando aí em cima chmod com o complemento 777 quer dizer que o diretório www terá permisão de leitura, escrita e gravação para para todo o tipo de usuário. Isso quer dizer de certa um furo de segurança, por isso recomendo a pesquisa de qual será a melhor opção de configuração de permissão para o seu diretório público porque eu não irei abordar isso aqui. Há um tempo atrás fiz este post onde abordo superficialmente como dar permissão específica no diretório.

Configurando o intl

Configuraremos o intl para uso conjunto com freetds para acesso ao SQL Server, pois felizmente a biblioteca sqlsrv (e não mais mssql) já está disponível para PHP7 assim como nas versões anteriores e por isso deixarei sua configuração aqui para caso alguém utilize o ODBC do PHP ou Python.

O que você deve fazer para incluir a informar a configuração do FreeTDS é alterar a linha no arquivo /opt/php7/etc/php.ini para igual está no parâmetros abaixo:


[intl]

intl.default_locale = pt_utf8

; This directive allows you to produce PHP errors when some error

; happens within intl functions. The value is the level of the error produced.

; Default is 0, which does not produce any errors.

intl.error_level = E_WARNING

intl.use_exceptions = 1

Lembrando para que surta efeito em qualquer configuração feita no php é necessário reiniciar (se ele ainda não estiver sido ligado o parâmetro é start).


/etc/init.d/php-fpm restart ou reload

(Em fase de teste e implementação. Segure as ondas mais um pouco)

Configuração do freeTDS para acessar o SQL Server
Acessar o arquivo freetds.conf, fazer o backup do arquivo original e altere todo o seu conteúdo para:

nano /etc/freetds/freetds.conf

[global]
host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)
port = 1433</del>
client charset = UTF-8
tds version = 8.0>
text size = 20971520

Observação para instalação da biblioteca do Image Magick.Voltar ao início

Talvez você precise instalar a biblioteca libjpeg62 para configurar esta biblioteca. Caso tenha problema ao configurar o Image Magick veja no inicio do tutorial, em apt-get install libjpeg62, caso não consiga baixar pelo apt-get, instale manualmente. Para instalar manualmente você pode tanto baixar um pacote dpkg ou baixar um tarball e instalar como já estamos fazendo com vários pacotes.

68º – Instalando o ImageMagick

Vamos agora pegar aquele versão que baixamos do Image Magick e a configuraremos.

Dê o comando para descompactar a biblioteca do Image Magick que baixamos anteriormente.


tar -zxvf ImageMagick-6.9.2-8.tar.gz

Agora entre no diretório onde foi descompactado o arquivo.


cd ImageMagick-6.9.2-8/

Configure.


./configure

Mande compilar o bicho.


make && make install

Depois saia o diretório e o remova.


rm -r ImageMagick-6.9.2-8/

69º – Instalando, configurando e integrando o Nginx ao PHP7Voltar ao início

Breve definição sobre Nginx (segundo o Wikipedia)

Nginx [engine x] é um servidor proxy HTTP e reverso, bem como um servidor de proxy de email, escrito por Igor Sysoev desde 2005. Segundo a Netcraft em fevereiro de 2013 o Nginx foi considerado o maior servidor HTTP, responsável por 12,81% dos servidores de HTTP e IMAP/POP3.

Começando:

Descompacte o Nginx que baixamos anteriormente.


tar –zxvf nginx-1.14.2.tar.gz

Depois entremos dentro do diretório com o comando.


cd nginx-1.14.2

E configuramos o bicho.


./configure 
--user=www-data 
--group=www-data 
--conf-path=/usr/local/nginx/nginx.conf 
--error-log-path=/usr/local/nginx/logs/error.log 
--pid-path=/usr/local/nginx/logs/nginx.pid&nbsp; 
--lock-path=/var/lock/nginx.lock 
--http-log-path=/usr/local/nginx/access.log 
--with-http_dav_module 
--with-http_ssl_module 
--http-proxy-temp-path=/usr/local/nginx/proxy_temp 
--with-http_stub_status_module 
--with-debug 
--with-http_flv_module 
--with-http_xslt_module 
--with-http_gzip_static_module 
--with-mail 
--with-mail_ssl_module 
--without-mail_pop3_module 
--without-mail_imap_module 
--without-mail_smtp_module 
--with-http_stub_status_module 
--http-client-body-temp-path=/usr/local/nginx/client_body_temp 
--http-fastcgi-temp-path=/usr/local/nginx/fastcgi

Você também pode copiar e colar a linha abaixo e colar no terminal.

./configure --user=www-data --group=www-data --conf-path=/usr/local/nginx/nginx.conf --error-log-path=/usr/local/nginx/logs/error.log --pid-path=/usr/local/nginx/logs/nginx.pid --lock-path=/var/lock/nginx.lock --http-log-path=/usr/local/nginx/access.log --with-http_dav_module --with-http_ssl_module --http-proxy-temp-path=/usr/local/nginx/proxy_temp --with-http_stub_status_module --with-debug --with-http_flv_module --with-http_xslt_module --with-http_gzip_static_module --with-mail --with-mail_ssl_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --with-http_stub_status_module --http-client-body-temp-path=/usr/local/nginx/client_body_temp --http-fastcgi-temp-path=/usr/local/nginx/fastcgi

Depois o compilamos e instalamos.


make && make install

E por fim, saímos do diretório e o removemos


cd..

rm -r nginx-1.14.2

Configurando o Nginx

Agora iremos criar dois diretórios para o nosso Nginx

Este primeiro será o local onde iremos guardar a configuração de cada site.


mkdir /usr/local/nginx/sites-available

Este segundo será o local onde iremos guardar os atalhos para a configuração de cada site


mkdir /usr/local/nginx/sites-enabled

Por que faremos as configurações acima? Bem, você pode querer manter a configuração de um site, mas não deixá-lo ativo e para isso apenas removemos o atalho que aponta para a configuração de um site da pasta sites-enabled.

Agora vamos até o local onde foi instalado o aplicativo segundo o nosso arquivo de configuração.


cd /usr/local/nginx

Configuração Repartida e Detalhada

Como passei muito tempo para aprender como configurar o Nginx na sua forma mais básica e que pudesse servir alguma app que fiz, adquiri o hábito de repartir bem a sua configuração para que fique o limpa e por isso faremos uma configuração detalhada do nosso amigo. Portanto agora, crie um diretório para guardar estas configurações.


mkdir /usr/local/nginx/conf

Em seguida vá dentro do diretório “conf” que criamos e crie um arquivo para guardar as configurações de charset chamado charset.conf.


touch charset.conf

Abra este arquivo com o Nano


nano charset.conf

E cole esta configuração lá dentro


charset utf-8;

Salve e feche o arquivo.

Agora crie um arquivo chamado expires.conf


nano expires.conf

Insira o conteúdo abaixo no arquivo e salve


expires max;

Crie também um arquivo chamado gzip.conf, coloque o conteúdo abaixo dentro dele, salve e feche o arquivo.


# most people include something like this. don't.
# check your default nginx.conf, it's already covered in a much better way.
#gzip_disable MSIE [1-6].(?!.*SV1);

# compress proxied requests too.
# it doesn't actually matter if the request is proxied, we still want it compressed.
gzip_proxied any;

# a pretty comprehensive list of content mime types that we want to compress
# there's a lot of repetition here because different applications might use different
# (and possibly non-standard) types. we don't really care, we still want them included

# don't include text/html -- it is always included anyway
gzip_types
text/css
text/plain
text/javascript
application/javascript
application/json
application/x-javascript
application/xml
application/xml+rss
application/xhtml+xml
application/x-font-ttf
application/x-font-opentype
application/vnd.ms-fontobject
image/svg+xml
image/x-icon
application/rss+xml
application/atom_xml;

# increase the compression level, at the expense of additional CPU
# cpu cycles are cheap virtually everywhere now, bandwidth not nearly as much
gzip_comp_level 9;

# the default is to gzip only HTTP 1.1 requests
# we want to gzip http 1.0 requests, too, so lower the level required
gzip_http_version 1.0;

# set the Vary: Accept-Encoding header to force proxies to store compressed and uncompressed versions
# per the nginx docs, a bug in IE 4 - 6 will cause them to not cache anything with this on
# most people aren't going to care about ie 6 anymore, but keep that in mind
gzip_vary on;

# increase the size of the buffers which hold responses to make sure larger content can be compressed too
# this means there are 16 buffers and they can each hold 8k
# if you serve a lot of ridiculously large text (like combined CSS) you might consider upping this slightly
gzip_buffers 16 8k;

# up the minimum length a little to account for gzip overhead
# this means anything smaller than 50 bytes won't be compressed.
# the default is 20 bytes, which is sooo tiny it's a waste to compress
gzip_min_length 50;

Crie agora um arquivo chamado ssl.conf, coloque o conteúdo abaixo nele, salve e feche o arquivo.

# we want to enable ssl session resumption to avoid
# having to start the handshake from scratch each page load
# so first we enable a shared cache, named SSL (creative!) that is 10mb large
ssl_session_cache shared:SSL:10m;

# save things in the cache for 3 minutes
# if you're not making a request at least every 3 minutes, this isn't going
# to accomplish anything anyway
ssl_session_timeout 3m;

# now we're going to change a bunch related to SSL ciphers and protocol
# the primary goal here is to be more secure, and i've generally tried to
# go with things that comply with the Federal Information Processing Standard (FIPS)
# set by the US government for non-military government use

# we don't want to support SSLv3, it's known to be insecure
# FIPS 140-2 compliance, TLS1+ only
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

# now we go through a couple different options for the SSL ciphers to support, mainly just to
# give you a bunch of options to pick from

# this is a very concise definition of ciphers that don't allow anonymous DH or MD5 - the big weaknesses
# per: https://calomel.org/nginx.html
#ssl_ciphers HIGH:!ADH!MD5:@STRENGTH;

# this is a very (not so) short list of very secure ciphers that may be incompatible with older browsers
# per: https://calomel.org/nginx.html
#ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:AES128-SHA;

# this excludes insecure ciphers and sorts the others by strength
# it is BEAST-resistant, prioritizing RC4
# per: http://groups.drupal.org/node/179344
#ssl_ciphers !aNULL:!LOW:!MD5:!EXP:RC4:CAMELLIA:AES128:3DES:SEED:AES256@STRENGTH;

# this is a combination of everything above and openssl docs - very secure, FIPS-compliant, ordered by strength
ssl_ciphers !aNULL:!eNULL:FIPS@STRENGTH;

# don't let the client decide what ciphers to use, we've told the server which to allow
ssl_prefer_server_ciphers on;

E por fim crie um arquivo chamado uploads.conf, coloque o conteúdo abaixo dentro dele, salve e feche o arquivo.


client_max_body_size 32m;

Alterando as configurações do arquivo nginx.conf

Agora, faça uma cópia do arquivo nginx.conf (que está dentro da raiz do diretório do Nginx) para outro arquivo.


cp nginx.conf nginx.conf.old

Abra o arquivo nginx.conf utilizando o editor Nano (ou outro de sua preferência)


nano nginx.conf

Apague todo o conteúdo do arquivo e cole o que está abaixo.


user www-data;
worker_processes 4;
error_log /usr/local/nginx/logs/error.log;
pid /usr/local/nginx/logs/nginx.pid;

events {
   worker_connections 1024;
}
http {
   include /usr/local/nginx/mime.types;
   default_type application/octet-stream;
   access_log /usr/local/nginx/logs/access.log;
   sendfile on;
   tcp_nopush on;
   keepalive_timeout 5;
   tcp_nodelay off;
   gzip on;
   include /usr/local/nginx/conf/gzip.conf;
   include /usr/local/nginx/conf/charset.conf;
   #include /usr/local/nginx/conf/ssl.conf;
   #include /usr/local/nginx/conf/uploads.conf;
   #include /usr/local/nginx/conf/expires.conf;
   include /usr/local/nginx/sites-enabled/*;
}

Salve e feche o arquivo.

Criando um arquivo default para o seu diretório principal.

Você pode fazer configurações personalizadas para cada utilizando o Nginx. Entretanto, para quem já está acostumado com o Apache gosta de jogar um monte de “projetinhos” dentro do diretório public_html para fazer testes e tudo mais. E por causa deste comportamento que muitos de nós temos vou deixar abaixo um arquivo padrão para ser criado dentro do diretório sites-available. Vamos lá?

Entre dentro do diretório sites-available

Crie um arquivo chamado default.conf, cole o conteúdo abaixo nele, salve o conteúdo e feche o arquivo.


server {
listen 80 default;

root /srv/www;
index index.php;

location ~ .php$ {
   include /usr/local/nginx/fastcgi_params;
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME /srv/www$fastcgi_script_name;
   }
}

Bem, vá até o diretório sites-enabled e crie um atalho para o arquivo de configuração default.conf.


ln -s /usr/local/nginx/sites-available/default.conf /usr/local/nginx/sites-enabled/default.conf

Algumas considerações sobre o arquivo default.conf

  • Deixamos por padrão que ele trabalhe escutando requisições na porta 80 (como já é de costume);
  • Definimos que o diretório root onde iremos colocar nossos projeto é o /srv/www;
  • Definimos que o primeiro arquivo que ele irá procurar dentro de qualquer diretório é index.php (lembrando que poderíamos ter definido mais arquivos que ele vai buscando por eliminação se não existir o determinado. Seria algo como isto index index.php index.html zedocaixao.htm precisosabercomoissofunciona.php).
  • Em location dizemos que iremos trabalhar com arquivos do tipo php.
  • Depois damos um include nas configurações de FastCGI.
  • E em seguida a porta que utilizaremos para passar estas informações via FastCGI. Repare que estas configurações de FastCGI tem de estar de acordo com a existente na configuração do seu PHP-FPM. Quero dizer que você não pode dizer que que lá você irá usar a porta 8000 e aqui 9000, porém fique tranquilo que já deixamos este tipo de configuração ok anteriormente na configuração do PHP.
  • Já as outras duas configurações também pertencem ao FastCGI.

Testando o Nginx com o PHP-FPM

Vá até o diretório /srv/www e crie um arquivo chamado info.php, cole o conteúdo abaixo nele, salve e feche o arquivo.


<?php phpinfo(); ?>

Use o comando abaixo para parar o PHP-FPM caso ele já esteja rodando (estes comandos já foram explicados anteriormente).


/etc/init.d/php-fpm stop

E em seguida inicie o serviço


/etc/init.d/php-fpm start

Agora, verifiquemos se o serviço do Nginx foi parado corretamente.


/usr/local/nginx/sbin/nginx -s stop

E iniciemos em seguida.


/usr/local/nginx/sbin/nginx

Inclusive fiz um artigo explicando sobre os comandos do Nginx. Recomendo a leitura.

Agora faça o teste no navegador e digite o endereço no seu navegador

http://ip_do_seu_servidor/info.php

E espero que você veja algo do tipo (porque eu vi).

Verifique também se as bibliotecas pdo_sqlsrv e slqsrv do SQL Server foram instaladas corretamente.

pdo_config

Instalação e Configuração do PHPMyAdminVoltar ao início

Para fazermos um teste com um site individual, baixemos o PHPMyAdmin com o arquivo zip no site do PHPMyAdmin.

71_phpmyadmin

Descompacte o arquivo do PHPMyAdmin.


unzip phpMyAdmin-4.6.2-all-languages.zip

Renomeie o diretório descompactado.


mv phpMyAdmin-4.6.2-all-languages phpmyadmin

E mova para o diretório público


mv phpmyadmin /srv/www

Agora vamos ao diretório /usr/local/nginx/sites-available e criamos o arquivo abaixo.


nano phpmyadmin

E agora cole o conteúdo abaixo, salve e feche o arquivo.


server {
   listen 80;
   #server_name phpmyadmin;
   #rewrite ^/(.*) http://phpmyadmin.com/$1 permanent;
}
server {
   listen 80;
   server_name phpmyadmin;
   #access_log /srv/www/phpmyadmin/logs/access.log;
   #error_log /srv/www/phpmyadmin/logs/error.log;

location ~ .php$ {
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME /srv/www/phpmyadmin$fastcgi_script_name;
   include fastcgi_params;
}

location /phpmyadmin {
   root /srv/www/phpmyadmin/;
   index index.php;
   }
}

Veja bem. Sobre o arquivo de configuração acima é similar ao que já configuramos anteriormente, mas o que você precisa saber é que já tivermos o arquivo default.conf configurado não necessariamente precisariamos deste aí porque se trata de uma configuração personalizada para cada site que inserirmos no diretório sites-available. Alguma linhas eu comentei porque não estou em um servidor com domínio ou outras coisas, enfim, para mim deixei aí o que está comentado para vocês verem como funciona na verdade.

Bem, vá até o diretório sites-enabled e crie um atalho para o arquivo de configuração do phpmyadmin.


ln -s /usr/local/nginx/sites-available/phpmyadmin /usr/local/nginx/sites-enabled/phpmyadmin

E faça o teste no navegador digitando o seu ip e seu diretório do PHPMyAdmin deixado na pasta pública www.

72_phpmyadminCorrigindo os bugs do PhpMyAdmin com Nginx e PHP 7

Pois bem, estou atualizando esta informação para os que como eu sofreram para se logarem com o PhpMyAdmin nesta nova versão de PHP. Eis abaixo a solução:

Entre dentro do diretório do PhpMyAdmin


cd /srv/www/phpmyadmin

E copie o arquivo config.sample.inc para outro arquivo.


cp config.sample.inc.php config.inc.php

Depois, edite o arquivo config.inc.php


nano config.inc.php

E acrescente as linhas abaixo


$cfg['Servers'][$i]['connect_type'] = 'socket';
$cfg['Servers'][$i]['socket'] = '/var/run/mysqld/mysqld.sock';

Salve o arquivo e feche-o.

E por último, altere a permissão dele.


chmod 644 config.inc.php

Agora, dê um Ctrl + F5 para atualizar a sua página e pronto!

Para o caso de surgir a mensagem: Wrong permissions on configuration file, should not be world writable!

Altere a permissão do seu config inc para 755 como no comando abaixo.


chmod 755 config.inc.php

Capturando variáveis de ambiente do Linux no NginxVoltar ao início

Por que estou abordando isso aqui?

Você deve ter reparado que criamos várias variáveis de ambiente aqui no Linux, principalmente algumas relacionadas ao Oracle. Pois bem, se está utilizando Apache e sua aplicação PHP precisa acessar a variável ORACLE_HOME, provavelmente você fará este acesso por vias normais e não terá problema em se conectar no banco, mas caso esteja usando o Nginx, vou deixar aqui uma observação sobre o Nginx.

Enfim, li no stackoverflow(ruby on rails – How do I pass ImageMagick environment variables to nginx mongrels? – Stack Overflow) uma resposta de um post, dizendo que o Nginx não lida com variáveis de ambiente e não foi feito para isso, principalmente por causa de seu design, segurança e administração. Citou também que o modo passenger utilizado para o Ruby(utilizado para passar variáveis de ambiente) é um módulo feito por terceiros e que não respeita os padrões do Nginx e no final, ele argumenta que existem várias formas de resolver este problema sem que o Nginx tenha de lidar com isso.

Pois bem, no Nginx você tem de ir na configuração do seu site, mais precisamente na altura do código abaixo e enfiá-las lá!

location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;

fastcgi_param ORACLE_HOME “/usr/local/instantclient_19_3/network/admin”;
fastcgi_param LD_LIBRARY_PATH “/usr/local/instantclient_19_1”;

fastcgi_param SCRIPT_FILENAME /srv/www/phpmyadmin$fastcgi_script_name;
include fastcgi_params;
}

Este método acima deve-se pelo fato de que o Nginx foi projeto até para ficar em outro servidor e isso é um dos motivos porque ele não lê as variáveis de ambiente do sistema operacional.

70ºInstalando o Xdebug a partir dos fontesVoltar ao início

Para quem não sabe o Xdebug é uma extensão para utilizar o debug em seu PHP, inclusive nele estando em um servidor que não seja local.

Pois bem, vamos lá.

Vá na página de downloads do Xdebug e baixe o último fonte (virá num pacote estilo tarball(tar.gz)) no endereço:

https://xdebug.org/download.php

Agora, descompacte o pacote


tar -zxvf xdebug-2.7.2.tgz

Daí, entre na pasta descompactada.


cd xdebug-2.7.2/

E chame o comando phpize do PHP que instalamos.


/opt/php7/bin/phpize

Quando executar o comando acima será possível ver no terminal algo assim:


Configuring for:
PHP Api Version: 20160303
Zend Module Api No: 20160303
Zend Extension Api No: 320160303

E agora que executamos o phpize iremos preparar a configuração para ser compilada.


./configure

--enable-xdebug

--with-php-config=/opt/php7/bin/php-config

Aqui já vai o script pronto para copiar e colar:

./configure --enable-xdebug --with-php-config=/opt/php7/bin/php-config

E compilar.


make && make install

Algo assim deverá aparecer:

xdebug_pos_comp

Ainda dentro do diretório com os fontes copie o arquivo xdebug.so para dentro do diretório lib.


cp modules/xdebug.so /usr/lib/.

Agora, como nossa configuração foi feita para o FPM, iremos seguir os passos a seguir:

Tenha em mente que não executamos somente o comando make, mas também o make install e após efetuar este comando a biblioteca xdebug.so já foi adicionada dentro da instalação do PHP 7 (dentro do diretório /opt/php7/lib/php/20160303-debug/xdebug.so).

Execute as linhas abaixo para preencher o arquivo de configuração do Xdebug no PHP7 (muita atenção para o nome do diretório do xdebug porque ele muda de versão pra versão do php).


echo 'zend_extension="/opt/php7/lib/php/20180731-debug/xdebug.so"' >> /opt/php7/etc/php-fpm.d/20-xdebug.ini

echo 'xdebug.remote_enable=1' >> /opt/php7/etc/php-fpm.d/20-xdebug.ini

Agora abra o arquivo php.ini da instalação do nosso PHP 7 e adicione a seguinte linha dentro dele. Eu adicionei logo após a referência do [soap], mas isso fica a seu critério.


[xdebug]
zend_extension=/opt/php7/lib/php/20180731-debug/xdebug.so

Agora para finalizarmos, reinicie o seu PHP FPM.


/etc/init.d/php-fpm restart

E confira utilizando a função do phpinfo() está deste jeito.

xdebug_php_ini

Pronto. Agora é só integrar o seu Xdebug com seu Eclipse, Netbeans, PHP Storm ou outra ferramenta que preferir.

Para acessar o Xdebug remotamente do seu Windows com sua IDE

Abra o seu arquivo php.ini como feito anteriormente, vá até a linha onde você adicionou a configuração do seu Xdebug e acrescente o código logo abaixo das observações a seguir.

  • O valor para xdebug.remote_host deve ser o endereço IP do host que vai acessar o servidor com a IDE (não o endereço IP do seu servidor!). Se você não tem um IP estático, você pode ter que atualizar isso e reiniciar o servidor web cada vez que você reiniciar seu pc! O ideal é que tanto o cliente quanto o servidor tenham IPs estáticos. No código abaixo coloquei o IP 192.168.1.72 somente para ilustrar.
  • Certifique-se de que a porta xdebug.remote_port esteja aberta no seu host e no servidor (provavelmente por padrão estará, contudo ainda assim vou deixar (mais abaixo) dois comandos do Iptables para ser executado no Linux caso sua porta 9000 este bloqueada).

xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=192.168.1.72
xdebug.remote_port=9000

E aqui a configuração do Iptables para caso sua porta estiver bloqueada no Linux (não vai estar, então só utilize para tira dúvida)


iptables -t filter -A INPUT -p tcp --dport 9000 -j ACCEPT

iptables -t filter -A INPUT -p udp --dport 9000 -j ACCEPT

Deixei também a configuração no Gist do Blog para caso preferirem: https://gist.github.com/blogmastigado/ee9e9e306e9ef4d22dd94ff76ce6cb8a

71º – Instalando o WebminVoltar ao início

Bem gente se eu não me engano nós baixamos a versão .deb do Webmin e a instalaremos aqui.

Uma breve definição do Webmin segundo o site da Wikipedia.

Webmin é um programa de gerenciamento de servidor, que roda em plataformas unix. Com ele você pode usar também o Usermin e o Virtualmin. O Webmin funciona como um centralizador de configurações do sistema, monitoração dos serviços e de servidores, fornecendo uma interface amigável, e que quando configurado com um servidor web, pode ser acessado de qualquer local, através de um navegador: https:(ip do servidor):(porta de utilização). Exemplo: https:172.168.5.12:10000

Para inslalar o Webmin


dpkg -i webmin_1.791_all.deb

E tentar acessar no navegador utilizando o protocolo https no seguinte endereço https://ip_do_seu_servidor:10000.

73_webmin_loginSim. Com o Webmin você usa login e senha de root para entrar nele e depois você pode acessar deste terminal ssh via browser de onde estiver, passando por configurações de usuários e servidores de FTP, de backup, de correio até gerenciador quase todos os tipos de bancos de dados sem precisar fazer nada pelo terminal e claro, entre tantas outras coisas que você só vai saber quando se logar no Webmin.

Dica para alterar a linguagem

Repare que estou utilizando a linguagem Português-BR e para que você deixe o seu Webmin assim também vá no menu esquerdo onde está escrito Webmin > Change Language and Theme e altere para PORTUGUESE_BRAZILIAN (PT_BR). Vale a dica para não escolherem a opção com UTF-8 porque senão ficará com alguns “capetinhas” nos caracteres assim como o meu ficou.

Agora veja com com seus próprios olhos. Utilizando o Webmin você não vai precisar nem de atualizar mais os pacotes do seu Linux via terminal ou no próprio modo Desktop.

74_webmin

Mas claro sempre é bom lembrar que deixar algo assim exposto na web não é aconselhável para quem se preocupa com segurança, pois mesmo que você não passe sua senha de root para alguma pessoa, não é necessário nem que você tenha feito redirecionamento da porta SSH no seu modem para que alguém utilize o serviço de SSH, porque só o fato do cara se logar no Webmin ele estará logado como usuário local e não remoto. Portanto todo cuidado é muito pouco quando se tem o Webmin instalado.

Comandos (básicos) para gerenciar o Webmin (se você instalou o pacote com extensão dpkg):

Para iniciá-lo:


/etc/init.d/webmin start

Para pará-l0:


/etc/init.d/webmin stop

Para reiniciá-lo:


/etc/init.d/webmin restart

Configurando o PHP no Webmin

Alguns aplicativos você pode instalar no seu Linux via Webmin, assim como você fazer hoje com seu instalador de pacotes ou com a Play Store do Google. Você tem de saber que quando você instala o Webmin ele já detecta alguns dos apps que estão instalados no Linux e permite que você os gerencie a partir dele. Porém quando compilamos e instalamos manualmente estes pacotes ou apps é necessário que tenhamos de ir até o Webmin e dizer para ele onde estão estas configurações, como é o caso do PHP.

Para incluir o PHP em sua configuração clique na opção Módulos Não Utilizados em seu lado esquerdo, siga até PHP Configuration, clique em cima dela e irá aparecer a tela abaixo.

Apague as duas linhas marcadas com pontinhos vermelhos e na primeira linha altere o caminho:


/etc/php5/apache2/php.ini

Para:


/opt/php7/etc/php.ini

75_webmin_php_config

E ficará deste jeito abaixo. Depois é só clicar em Manage que você poderá gerenciar o seu PHP via browser.

76_webmin_phpconfig2

72º – Instalando o Tomcat 6Voltar ao início

Baixamos anteriormente o Tomcat, que é utilizado para rodar aplicações Java feitas em JSP que a grosso modo será o PHP do Java ou ainda melhor, o Aspx do Java! Nossa! Que definição “maravilhosa”! Mas então, vamos precisar baixar a última versão do JDK e o JRE no site da Oracle (detalhe que quando eu comecei a escrever este tutorial o Java ainda era da Sun).

Baixe os dois em sua última versão. Você terá de clicar onde estão assinalados com os pontos vermelhos e escolher o que é compatível com sua plataforma Linux. No caso de nossa instalação utilizamos a versão 64 bit.

77_jdk_jre_download

Eu baixei os pacotes jdk-8u66-linux-x64.tar.gz e jre-8u66-linux-x64.tar.gz e o arquivo do Tomcat que baixamos anteriormente apache-tomcat-6.0.45.tar.gz, mas você deve sempre baixar a versão mais atual.

Copie os dois pacotes para o diretório /usr/local


cp jre-8u66-linux-x64.tar.gz /usr/local

cp jdk-8u66-linux-x64.tar.gz /usr/local

cp apache-tomcat-6.0.45.tar.gz /usr/local

Vá até o diretório /usr/local e descompacte os dois lá dentro.


tar -zxvf jre-8u66-linux-x64.tar.gz

tar -zxvf jdk-8u66-linux-x64.tar.gz

tar -zxvf apache-tomcat-6.0.45.tar.gz

E agora remova os pacotes compactados


rm jre-8u66-linux-x64.tar.gz

rm jdk-8u66-linux-x64.tar.gz

rm apache-tomcat-6.0.45.tar.gz

Configurando o Apache Tomcat

Renomeie o diretório de instalação do Tomcat para apache-tomcat


mv /usr/local/apache-tomcat-6.0.55/ /usr/local/apache-tomcat/

Crie um diretório dentro do Apache-Tomcat chamado modules


mkdir /usr/local/apache-tomcat/modules

Vá na página do mod_jk e baixe a última versão (de 2010! Meu Deus, que vergonha!)

78_mod_jk_download

Copie o arquivo baixado para o diretório /usr/local/apache-tomcat/modules


cp mod_jk-1.2.31-httpd-2.0.x.so /usr/local/apache-tomcat/modules

Renomeie o arquivo para mod_jk.so


mv mod_jk-1.2.31-httpd-2.0.x.so mod_jk.so

Inserindo variáveis de Ambiente no Linux (Você pode consultar este post e este outro que fiz se desejar se aprofundar mais em variáveis de ambiente)

Abra o arquivo profile com o editor de texto Nano


nano /etc/profile

E lá no final do arquivo você vai inserir as informaçõs abaixo de acordo com os nomes dos diretórios que estão no seu servidor. Repare bem que as cinco primeiras linhas eu informei o caminho de acordo com o que está configurado aqui, por isso preste atenção que quando você estiver lendo este tutorial novas versões de bibliotecas já estarão sendo disponibilizadas para download e seus nomes deverão serem consequentemente alterados aqui neste arquivo você estará alterando.


export JRE_HOME=/usr/local/jre1.8.0_66
export JAVA_HOME=/usr/local/jdk1.8.0_66
export LD_LIBRARY_PATH=/usr/local/instantclient_19_3/
export ORACLE_HOME=/usr/local/instantclient_19_3/network/admin/
export TNS_ADMIN=/usr/local/instantclient_19_3/network/admin/

export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
export MANPATH=$JAVA_HOME/man:$MANPATH
export JAVA_OPTS=-Xms64m -Xmx512m;

Nas últimas quatro linhas acima estou definindo o classpath do meu Java, acrescentando a variável JAVA_HOME ao path de minha máquina, acrescentando a JAVA_HOME ao MANPATH e definindo quanto de memória o Java estará utilizando ao ser iniciado e até quanto de memória ele poderá utilizar.

Feita estas alterações, salve e feche o arquivo.

Alterando o usuário e senha de acesso do Tomcat

Para alterar o usuário e senha de acesso do Apache Tomcat acesse o arquivo tomcat-users.xml no caminho /usr/local/apache-tomcat/conf/tomcat-users.xml e altere suas informações conforme necessário.

73º – Configuração do freeTDS para acessar o SQL ServerVoltar ao início

É pessoal, devo ter explicado anteriormente que no PHP 7 foram retiradas algumas (várias) funções que os desenvolvedores podem ter considerado obsoletas ou desnecessárias e uma delas foi a biblioteca mssql. E era por esta biblioteca que conseguíamos acessar o SQL Server, mas pelo que andei lendo não sei quando esta biblioteca estará disponível e para retirar suas dúvidas sobre o que digo, acompanhem a discussão com o pessoal da Microsoft neste post.

E voltando ao FreeTDS, você ainda pode utilizá-lo com o Python ou com o PHP 5 já o que o PHP 7 te avacalha. Se você o instalou via apt-get como este tutorial lhe orientou, vá em /etc/freetds/freetds.conf e faça as seguintes alterações no arquivo, apague tudo o que tem lá dentro, salve e feche.


[global]

host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)

port = 1433

client charset = UTF-8

tds version = 8.0

text size = 20971520

Repare que coloquei os xxx que não tem nada a haver com os xxx que nós conhecemos (e gostamos na maioria das vezes), é para você substituir para o seu ip do seu servidor que está instalado o SQL Server, a porta que o SQL Server está usando, a versão do Free TDS e o tamanho em bytes do texto. Perceba também que para várias conexões com SQL Server você repete este bloco de código alterando sempre onde está entre colchetes, e o ip e a porta se necessário.

74º – Scripts de InicializaçãoVoltar ao início

Você pode se perguntar em algum momento se quando precisar reiniciar o seu servidor o Tomcat e o Nginx inicializarão automaticamente. Pois bem, quando você instala via apt-get ou a partir de um pacote dpkg estas configurações de inicialização são automáticas, mas quando você instala na mão isso não acontece ou não costuma a acontecer.

Vou deixar 2 scripts de inicialização disponíveis para download neste link (e se tiver alguma dúvida em relação ao scripts do Nginx você também pode consultar o site oficial).  Um é o arquivo nginx_start.sh e o outro é o tomcat_start.sh. Portanto faça o download, decompacte o pacote e copie os dois para o diretório /etc/init.d.


cp tomcat_start.sh /etc/init.d/

cp nginx_start.sh /etc/init.d/

Em seguida vá até o diretório /etc/init.d e torne os scripts executáveis acrescentando sua permissão de execução.


chmod +x tomcat_start.sh

chmod +x nginx_start.sh

E por fim, execute o comando insserv para torná-los “inicializáveis”.


insserv tomcat_start.sh

insserv nginx_start.sh

Pronto. Agora você pode controlar tanto o Nginx, quanto o Apache Tomcat utilizando os comandos abaixo.


/etc/init.d/nginx_start.sh start Inicia o Nginx

/etc/init.d/tomcat_start.sh start Inicia o Tomcat

/etc/init.d/tomcat_start.sh stop Para o Tomcat

/etc/init.d/tomcat_start.sh restart Reinicia o Tomcat

Você pode estar perguntando o porquê de eu não ter o comando para pelo parar o Nginx. Bem, não me interessava fazer isso porque já faço isso com o comando /usr/local/nginx/sbin/nginx -s stop e também porque eu não consegui enfiar isso neste script aí (na verdade eu tava desanimado pra fazer isso) e o fato de já iniciar sozinho já resolveu o meu problema e vai resolver o seu também.

RCConfVoltar ao início

Bem no começo da parte onde informo que quais pacotes devem serem instalados, eu peço que para seja instalado um aplicativo chamado rcconf. Pois bem, ele lembra aquela área do Windows onde podemos desativar ou ativar seletivamente o que desejamos que seja inicializado junto no carregamento do sistema operacional. Pois bem, este cara aqui tem uma função similar. E quero que vocês observem que após termos devidamente inseridos os nossos scripts na inicialização do Debian (nginx_start.sh e tomcat_start.sh), vejam que eles já foram detectados por este aplicativo e portanto se em algum você quiser que estes scripts sejam desativados, basta você desmarcar qual deseja e em seguida clicar em ok. Para chamar o aplicativo RCConf basta abrir o terminal e digitar rcconf estando logado como root.

79_rcconf

E este aqui é como você controlar o seu Apache Tomcat com os comandos citados anteriormente, caso deseje.

80_tomcat_iniciando

E para testar o seu Tomcat, digite no navegador http://ip_do_seu_servidor:8080.

81_tomcat_rodando

Se você viu esta tela aí tá ok, senão aconselho refazer o processo.

Bem pessoal por aqui finalizo este tutorial que em breve terá sua versão com Apache no lugar do Nginx e portanto com algumas alterações. Se ainda assim existirem dúvidas fiquem a vontade para postar.

fonte: https://mastigado.wordpress.com

fonte: http://php.net/manual/pt_BR/install.fpm.php

fonte: http://stackoverflow.com/questions/37552307/mariadb-phpmyadmin-with-ngnix-on-ubuntu-14-04

fonte: https://gist.github.com/kamilZ/b11d1448e1479fe591f6

fonte: https://gist.github.com/blogmastigado/ee9e9e306e9ef4d22dd94ff76ce6cb8a

fonte: https://php-built.com/2016/01/20/installing-xdebug-for-php7/

fonte: http://www.dragonbe.com/2015/12/installing-php-7-with-xdebug-apache-and.html

fonte: https://howto.biapy.com/en/debian-gnu-linux/servers/php/install-the-php-extension-xdebug-on-debian

fonte: https://github.com/phpenv/phpenv/issues/37

–SQL Server

fonte: https://github.com/meet-bhagdev/phptekdemo/blob/master/test2.md

fonte: http://www.e-gaulue.com/en/2016/01/24/microsoft-odbc-driver-13-for-sql-server-on-debian-jessie-installation/

fonte: http://stackoverflow.com/questions/13887328/sqlgetprivateprofilestring-failed-with

fonte: https://github.com/meet-bhagdev/phptekdemo/blob/master/test2.md

fonte: https://github.com/Microsoft/msphpsql/tree/PHP-7.0-Linux

fonte: https://aur.archlinux.org/packages/php-sqlsrv/

fonte: http://pecl.php.net/package/sqlsrv

fonte: http://pecl.php.net/package/pdo_sqlsrv

fonte: http://stackoverflow.com/questions/11839368/install-sqlsrv-driver-on-linux-or-other-utf-8-capable-driver

fonte: https://github.com/Microsoft/msphpsql/wiki/Install-pdo_sqlsrv-for-PHP-7.0-on-Debian-in-3-ways

fonte: https://github.com/Microsoft/msphpsql/issues/58

fonte: https://github.com/Microsoft/msphpsql/

fonte: http://php.net/manual/pt_BR/ref.pdo-sqlsrv.php

— Xdebug

fonte: https://fairwaytech.com/2010/01/php-remote-debugging-with-xdebug-and-netbeans/

— Drivers SQL Server PHP 7 Linux (Releases)

fonte: https://github.com/Microsoft/msphpsql/releases