Chroot com SFTP

Neste novo tutorial irei mostrar como fazer um ambiente seguro com SFTP o sistema de transferência de arquivos sob o SSH. Nele poderemos ter um acesso controlado apenas ao ambiente do usuário sem acesso root.

Vamos seguir os comandos agora onde o nome de usuário usuario deve ser substituido pelo nome de usuário que você quizer. 

groupadd sftponly
useradd usuario
passwd usuario
usermod -G sftponly usuario
mkdir -p /var/www/vhosts/usuario/httpdocs
chown usuario /var/www/vhosts/usuario/httpdocs
usermod -d /var/www/vhosts/usuario usuario
usermod -s /bin/false usuario

Feito isto vamos abrir o arquivo de configuração do SSH e adicionar as seguintes linhas abaixo:

Subsystem sftp internal-sftp
     Match group sftponly
     ChrootDirectory %h
     X11Forwarding no
    AllowTcpForwarding no

Agora reinicie o ssh com o comando:

/etc/init.d/ssh restart

pronto! você já terá seu ambiente controlado

Removendo pacotes RC no Ubuntu/Debian

A ideia hoje é remover todos os pacotes marcados com RC pelo Apt-Get. Para começar precisamos primeiramente encontrar quais são os pacotes que estão marcado com este prefixo:

sudo dpkg -l | grep "^rc"

Depois para remover todos os pacotes execute

  • sudo apt-get remove --purge $(sudo dpkg -l | grep "^rc" | awk '{print $2}' | tr '\n' ' ')

Determinando o PID de uma porta no macOS

Existem diversas formas de identificar o id de um processo nas plataformas baseadas em Unix. No caso do macOS uma forma de determinar o PID que está relacionado a uma determinada porta é usando o lsof.

No exemplo a seguir nós vamos determinar qual o PID do processo que está rodando na porta 4200 que é uma Angular Development Server.

Ex:

lsof -i:4200 -t

Usando o Proxy reverso do Apache para carregar aplicação NodeJS

A ideia aqui é simples, você tem uma aplicação NodeJS que está rodando na mesma máquina na porta 4000 e quer carregar esta aplicação na porta :80 para carregar como site principal permitindo uma melhor experiência de navegação para o usuário.

Bom primeiramente vamos deixar a aplicação rodando no NodeJS. Para isto podemos utilizar aplicações que gerenciam isto como o PM2.

Adicionando isto é necessário que você entre dentro do seu VirtualHost do Apache e adicione as seguinte linhas abaixo. Lembrando que no nosso exemplo a aplicação em NodeJS está rodando na porta 4000

 ProxyPass / http://0.0.0.0:4000/
 ProxyPassReverse / http://0.0.0.0:4000/

Básicamente é isto a configuração. Lembre-se de sempre resetar o Apache para que as alterações tenham efeito.

Adicionando um novo par de chaves em uma instância EC2

A ideia aqui é muito simples, temos uma instância Linux rodando em uma Amazon EC2 no qual já possui uma par de chaves e nós gostaríamos de trocar estes pares de chaves por uma outra.

E por que queremos mudar o par de chaves ? Imaginem que vocês estão trocando a equipe e aquele par de chaves dá acesso remoto aos colaboradores fazerem modificações na plataforma.

Por este motivo vamos alterar o par de chaves. Neste vídeo do canal Amazon Web Services exemplifica de forma muito simples como fazer esta modificação.

Vamos lá

Acessando o Amazon EC2 usando uma chave ppk

Para quem chegou neste post deve estar procurando uma solução para acessar uma Amazon EC2 através de uma chave PPK. Se você estiver pelo Windows o processo é bem simples se estiver utilizando o Putty.

Caso esteja utilizando o Mac através do terminal precisa converter a chave PPK em uma chave do tipo PEM. O processo é simples mas você irá precisar do Puttygen.

Utilize os seguintes comandos abaixo:

sudo port install putty

ou

brew install putty

Através dele iremos criar com o comando puttygen uma nova chave

puttygen privatekey.ppk -O private-openssh -o privatekey.pem

Explicando:

-O private-openssh: esta flag diz para que a chave tem a output ( saída ) do tipo OpenSSH

-o privatekey.pem: É o nome que iremos dar para a nova chave .PEM

Feito isto e convertendo para uma chave do tipo PEM, basta utilizar o seu terminal para acessar a máquina remota.

ssh -i privatekey.pem user@my.server.com

Redirecionando conexões http para https via Htaccess

A ideia aqui é simples, queremos redirecionar todas as conexões http para a mesma url em https. Para isto sem reinventar a roda podemos utilizar o htaccess para fazer isto no Apache:

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

WordPress 5 será baseado em ReactJS

Para os profissionais que hoje trabalham com desenvolvimento em cima da plataforma WordPress a grande novidade é que o WordPress 5 terá o front-end baseado em ReatJS. A ideia é separar completamente o front-end da aplicação do back-end que continuará a rodar em cima do PHP.

É uma atítude bem interessante e que impactará nos milhões de desenvolvedores espalhados pelo mundo. A Stack Javascript a partir de agora tomará um corpo ainda maior e a adoção do ReactJS poderá dar um salto importante tendo em vista a grande quantidade de sites e plataformas baseadas neste CMS

As mudanças estão previstas para a versão 5.0 e ainda não tem data prevista para release.

Erro ao gerar builds no Ionic2 com o plugin do OneSignal

Um erro comum que pode acontecer quando você for utilizar o Ionic2 com o plugin do OneSignal é a PromiseError. O log do console do Ionic diz que está faltando um arquivo do OneSignal mas na verdade é uma incompatibilidade que pode ser resolvida com os POD Update.

Sendo assim vamos para os primeiros passos para fazer o fix deste problema:

sudo gem install cocoapods
pod repo update

Depois execute

cordova plugin rm onesignal-cordova-plugin --save
cordova plugin add onesignal-cordova-plugin --save

Lembre-se de executar os comandos acima dentro da pasta do seu projecto do Ionic

Iniciando com Docker

Depois de algum tempo sem escrever para o blog resolvi compartilhar com os amigos um pouco mais sobre o tão falado Docker.

Primeiramente é importante destacar o que é um container e qual a diferença entre o container e uma máquina virtual. Para explicar melhor a diferença entre um e outro vamos ver a imagem abaixo:

O container ele abstrai da máquina host o kernel e todos os binários para execução de um novo sistema operacional abstraído dentro do Container. Na Virtual Machine é necessário que cada VM tenha uma instalação completa
do sistema operacional. Isto consome mais recursos visto que precisamos o sistema operacional completo para executar nossas aplicações. A grande vantagem do Docker é você poder dividir dentro de uma mesma máquina diversos containers com apenas aquela
parte do SO que precisamos para rodar nossa aplicação. Além disso assim como o antigo Chroot Jail ele possibilita individualizarmos as estruturas de modo que cada container acesse apenas o file system mapeado no container.

A diferença entre a imagem vs Container

O que é uma imagem
A imagem é a aplicação que nós queremos rodar

O que é um container
O container é a instância da imagem que rodará o processo, nós podemos ter vários containers rodando sob a mesma imagem do SO.
Em nossos testes iremos utilizar uma imagem do servidor web NGINX. O docker procura por padrão uma imagem registrada com o nome solicitado no repositório
do Docker Hub hub.docker.com

– Nosso primeiro teste baixando a imagem do NGINX pelo Docker Hube colocar para rodar em foreground

Para começar vamos fazer o NGINX rodar em nossa porta 80 em foreground usando o comando

docker container run –publish 80:80 nginx

1. No exemplo acima o Docker baixou do hub.docker.com uma imagem com o nome de NGINX
2. Iniciou um novo container pela imagem do NGINX
3. Abriu a porta 80 no localhost
4. Roteou o tráfego do container para o IP e porta 80 local

Rodando o container do NGINX em background

Para colocarmos a imagem do NGINX em background devemos adicionar o comando –detach

docker container run --publish 80:80 --detach nginx
a saída do comando irá gerar algo como o exemplo abaixo. que é a hash gerada pelo docker

c51b53bf4e45f97e1f06a827c8b18bd050f15a388609cc2360e4c01f94b4da77

Verificando os containers online
Para verificarmos o status dos containers abertos usamos o comando

docker container ls

Um exemplo de saída de comando será algo como:

bash-3.2# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c51b53bf4e45 nginx "nginx -g 'daemon of…" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp pensive_stallman

* Isto mostra que temos o container NGinx rodando a 3 minutos. O ID do container serve para tomarmos ações junto ao container

Com o comando abaixo você pode verificar todos os containers que fora executados e stopados anteriormente. Basta adicionar a flag -a

docker container ls -a

Parando um container
Para parar um container ativo devemos executar o comando:

docker container stop c51b53bf4e45

Para verificar o efeito do comando basta executar o docker container ls para ver o status dos containers

Iniciando um novo container e dando um nome
O comando abaixo adiciona um nome ao nosso container. No exemplo abaixo vamos adicionar o nome de webhost

docker container run --publish 80:80 --detach --name webhost nginx

Verificando os logs de um determinado container
Para verificarmos os logs em tempo real de um determinado container vamos utilizar o comando:

docker container logs webhost

* temos que especificar o nome do container no qual queremos ver os logs

Consultando os processos de um determinado container
A forma mais fácil de verificar o que um determinado container está executando é o comando top. Com o comando abaixo você
pode consultar em tempo real os containers que estão em ação:

docker container top webhost

Removendo múltiplos containers
Para remover múltiplos container simultaneamente precisamos execificar as iniciais dos IDs. Siga o nosso exemplo abaixo:

docker container rm 105 c51 1b9 8e0 2ae 9bc 5c6 ff9 f03 2a6 474 563 5b6

* OBS: Você não pode remover um container que está em execução a menos que utilize a flag -f para forçar. O correto é você parar o container e depois remover

Criando um novo container e mapeando um diretório local para dentro do container

Vamos imaginar agora que queremos mapear o diretório src/ para dentro do container e vamos utilizar este diretório como diretório principal do NGINX. Para isto siga os passos abaixo:

Primeiramente vamos criar um diretório para nosso exemplo. No meu caso resolvi centralizar tudo em

/Docker/dockerfiles/nginx-test/

Dentro deste diretório criei meu arquivo Dockerfile com o seguinte conteúdo:

FROM nginx:latest

Este docker file é muito simples, podemos adicionar diversas outras linhas nele mas começaremos apenas especificando esta dependência.

Vamos mandar o docker executar o comando:

docker build -t helloworld .

Com o comando acima estamos levando em consideração que criamos um novo container para ser rodado com o nome de helloworld.

Depois basta rodarmos o comando

docker run -v src:/usr/share/nginx/html -p 80:80 helloworld

Mapeando portas locais diferentes das portas do container
Vamos imaginar que eu queira mapear a porta 8080 para dentro da porta 80 dentro do container. Para isto vamos executar o comando:

docker container run -p 8080:80 nginx

Mapeando diretórios locais dentro de um container em modo interativo
O modo interativo é interessante para testes de scripts e desenvolvimento, mas para ambiente de produção é interssante utilizar o Dockerfile. Vamos utilizar um exemplo simples de mapeamento de diretório para dentro do nosso container com NGINX.

Primeiramente vamos criar um diretório chamado public_html. Dentro deste diretório criaremos um arquivo chamado index.html com o conteúdo Hello World.

Agora vamos mapear este diretório padrão para o NGINX para dentro de nosso container:

docker container run -p 8080:80 -v $(pwd)/public_html:/usr/share/nginx/html nginx

O comando acima quer dizer:

-p 8080:80: isto diz para que container rode da porta local 8080 para dentro da porta 80 do NGINX

-v $(pwd)/public_html: diz para mapear o volume public_html do diretório do NGINX /usr/share/nginx/html

 

Mobisale: Plugin Pagarme com Split payment e parcelamento

Demos um inicio a um novo projeto dentro da Mobisale que é uma customização no plugin de pagamentos da Pagarme utilizando o split payment com parcelamento. O plugin open source liberado

pela Pagarme não possui este recurso oficialmente e com decidimos fazer um fork do projeto implementado o split payment com parcelamento para atender as funcionalidades de marketplace que temos no Mobisale.

No plugin temos parametrizado os tokens dos recebedores, porcentagem do recebedor principal e taxa fixa da transação persistindo isto na tabelas do plugin.

Tem um projeto que precise de pagamentos com split no seu e-commerce ? entre em contato conosco o Mobisale já faz isto para você.

 

Será o fim do Hackintosh ?

O anúncio da Apple de começar a utilizar uma arquitetura própria a partir de 2020 para todos aqueles que utilizam o macOs no PC o poderoso Hackintosh vem a dúvida. Será que o Hackintosh não existirá mais ? Se você conhece a história da Apple esta migração já aconteceu uma vez. Foi quando a Apple resolveu parar de utilizar os poderosos PPC970 ( arquitetura risc ) para abraçar uma parceria que levaria anos com a Intel.

Nesta migração a Apple deu suporte através do Rosetta por volta de uns 4 anos até migrar 100% para arquitetura Intel. Isto quer dizer que há garantia de funcionamento dos Hackintoshs com suas atualizações de SO pelo menos até 2024.

Vamos acompanhar….

Um pouco de história João Jacon e Josefa Jacon

É sempre interessante buscar as origens da família e de onde viemos. Procurando um pouco a respeito da família Jaccon descobri que sou descendente de Italianos e que minha família teve origem primeiramente na cidade de Limeira interior de SP. Lá  inclusive há uma homenagem ao meu tataravo João Jacon.

Rua João Jacon

É sempre bom descobrir nossas origens

 

Testes de performance e disponibilidade no seu web server

A melhor forma de prever problemas de performance e disponibilidade é colocando o Apache para funcionar com o máximo dos recursos disponíveis no ambiente. Para realizar um teste de performance ou disponibilidade no seu web server você pode usar ferramentas como o AB.
Uma forma de testar estes ambientes é o AB ( Apache Benchmark Tool ). Com esta ferramenta é possível fazer diversos testes de disponibilidade tanto no Apache quanto em qualquer outro web server.

Testando o ambiente

Abaixo estou apresentando um exemplo de teste com 10.000 requisições apontadas para um determinado web server

ab -n 10000 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://www.example.com/

Explicando:

-n 10000
número de requisições que enviaremos para o servidor
-c 10 
Número de conexões concorrentes

-k
Seta o Keep Alive

-H 
Adiciona informações na chamada do header do pacote TCP

Você pode encontrar uma documentação completa do ab usando as man pages no seu ambiente shell

man ab

Inteligência artificial aplicada ao e-commerce

Inteligência Artificial

Embora a IA tenha penetrado em inúmeros setores, trazendo mudanças em nossa vida cotidiana, a indústria de varejo on-line, em particular, foi significativamente transformada pela adoção desses novos recursos.
A aceitação e o crescimento de inteligência artificial para o e-commerce no último ano confirma que a experiência de compra no futuro tanto on-line quanto em lojas físicas será dominada pela tecnologia da IA.

Um dos exemplos de aplicação da inteligência artificial no e-commerce torna os produtos mais detectáveis ​​na internet, elimina a necessidade de uma pesquisa de palavras-chave tradicionais e permite que as plataformas sociais se tornem um caminho direto para a compra.
A utilização de inteligência artificial irá ajudar no processamento de metadados para pesquisa de produtos por imagens. Durante anos, a precisão daquilo que procuramos e do que recebíamos de volta nos retornos das buscas baseava-se na qualidade dos metadados e na avaliação dos consumidores.

Com o uso do IA, existe agora a capacidade de automatizar a classificação de imagens e a marcação de produtos, garantindo maior alinhamento nos resultados de pesquisa com base na identificação aprimorada de atributos. As próprias imagens também podem se tornar uma fonte de dados rica para as pesquisas.

Mobile Commerce

O Mobile Commerce é um novo fenômeno que tem se destaca há algum tempo em grande parte da Europa e da Ásia. Só recentemente começou a ganhar terreno nos Estados Unidos e Canadá, com o Brasil liderando o uso na América Latina. Com o surgimento das redes 3G, smartphones e outros dispositivos portáteis de tecnologia avançada, é cada vez mais popular o uso de dispositivos móveis para compras na web. Há milhares de pessoas que utilizam seus telefones com dispositivos de conexão a internet e estão aprendendo a fazer suas atividades cotidianas se utilizando de tal aparelho. O número de pessoas que estão substituindo as tradicionais compras on-line pela alternativa móvel vem aumentando a cada dia. É possível que se chegue a um ponto no qual quase todas as transações sejam concluídas a partir de dispositivos móveis.

O modelo de compras através das grandes market places vem ganhando força com plataformas White Label customizadas. A grande vantagem de ter um mobile commerce é o engajamento dos usuários as métricas de Geo-localização, recursos de push notification, segurança nas transações e facilidade na UX ( User Expirience ) é o que a startup Mobisale vem trabalhando nos últimos dois anos.