anúncios

segunda-feira, 1 de março de 2021

Expondo seu ambiente local com Ngrok

O que é Ngrok?

Ngrok é uma ferramenta de linha de comando que te permite criar um túnel seguro, por meio de NAT e Firewall, que expõem serviços locais para a Internet, tudo isso de forma fácil e segura.

Ao criar uma conexão com tunelamento pode ser útil quando você precisa:

  • Mostrar uma prévia remota da aplicação que está localhost para algum cliente;
  • Desenvolver integrações de Webhook;
  • Testar aplicativos móveis conectado no Backend em execução local;

Instalando o Ngrok

O Ngrok é multiplataforma, assim pode ser instalado nos SOs Windows, Linux, macOS.

O primeiro passo é fazer o download Ngrok conforme o seu SO.

Considerando que salvou o arquivo .zip no diretório Downloads

$ cd $HOME/Downloads
$ sudo unzip ngrok-stable-linux-amd64.zip -d /opt

Agora só digitar no terminal, conforme segue:

$ /opt/ngrok

Para poder executar o ngrok em qualquer diretório, adicione no PATH do SO.

Tendo uma aplicação web no seu localhost na porta 80, execute

$ /opt/ngrok http 80

Irá exibir o log, com um link de domínio randômico para compartilhar para qualquer pessoa acessar, a aplicação está em execução na sua máquina com tunelamento no cloud da Ngrok.

É possível usar o ngrok sem nenhum tipo de conta, mas tem algumas limitações, por exemplo, o tempo máximo que irá limitar as seções após criar o túnel. Recomendo que crie a conta e assine o plano gratuito , com isso ao executar o ngrok na conta vinculada, elimina essa limitação de tempo por seção.

Para vincular o Ngrok na sua conta, precisa do Authtoken que é disponibilizado na configuração de conta, obtendo esse token, execute o comando:

$ /opt/ngrok authtoken [seu-authtoken-aqui]

Coloque sua aplicação localhost exposta na Internet

$ /opt/ngrok http 80

O Ngrok disponibiliza uma interface web para poder analisar em tempo real todos os detalhes das requições e respostas que estão trafegando no seu túnel.

Acesse no browser http://127.0.0.1:4000

Terá acesso todos os detalhes da requisição e da resposta, incluindo:

  • Tempo duração;
  • Headers;
  • Payload;
  • Parâmetros de consulta;
  • Bytes brutos

Outros recursos e configurações

É possível criar um túnel via TCP e expor qualquer serviço que esteja executndo localmente, por exemplo: SSH, SGBDs: MySQL (3306), PostgreSQL (5432).

Liberar acesso externo ao SSH
$ /opt/ngrok tcp 22

Liberar acesso externo ao SGBD MySQL
$ /opt/ngrok tcp 3306

Liberar acesso externo ao SGBD PostgreSQL
$ /opt/ngrok tcp 5432

O Ngrok vem com um file server embutido, assim pode criar um túnel HTTP direcionando para o diretório do seu sistema de arquivo local.

Exemplo para o diretório /srv/share

$ /opt/ngrok tcp --auth="user:password" file:///srv/share

Referências:

https://ngrok.com/docs

Feito!

sábado, 20 de fevereiro de 2021

Resolvendo o error 1018 Can't read dir of '.' (errno: 13) no MySQL

Se ao conectar no SGBD MySQL e tentar selecionar algum banco de dados, exibir a mensagem "ERROR 1018 (HY00): Can't read dir of '.' (errno: 13), então esse é o objetivo dessa postagem de apresentar a solução desse erro no SGBD MySQL.

Primeiro, verifique as permissões no diretório /var/lib/mysql, esse é o diretório default do MySQL, caso tenha instalado o MySQL e optado de escolher outro diretório e não lembra, execute which mysql para exibir o diretório onde foi instalado o MySQL.

$ ls -la /var/lib/mysql OU $ ls -la which mysql

Observe a saída que não está com permissão de usuário e grupo no diretório /var/lib/mysql.

SOLUÇÃO

Alterar o usuário:grupo para mysql no diretório /var/lib/mysql OU which mysql

# chown -R mysql:mysql /var/lib/mysql>

Setar a permissão

# chmod -R 755 /var/lib/mysql OU # chmod -R 755 which mysql

Feito!

segunda-feira, 15 de fevereiro de 2021

Configurando o HumHub no ambiente Docker

O que é HumHub ?

HumHub é um sistema de comunicação e colaboração que permite tornar em uma rede social na intranet, gratuito e de código aberto, desenvolvido em PHP com framework Yii.

O objetivo deste post é explicar os procedimentos para subir o ambiente HumHub no Docker com a imagem container oficial disponibilizada no Docker Hub

A premissa é ter Docker e Docker-Compose instalados, caso ainda não tenha, verifique Instalando Docker e Docker-Compose no Linux ou Instalando Docker e Docker-Compose no Windows 10

$ mkdir $HOME/ambiente-humhub-docker && cd $HOME/ambiente-humhub-docker

Crie o arquivo docker-compose.yml, conforme o conteúdo abaixo

docker-compose.yml
version: '3.1'
services:
humhub:
image: mriedmann/humhub:1.6.2
links:
- "db:db"
ports:
- "8080:80"
volumes:
- "config:/var/www/localhost/htdocs/protected/config"
- "uploads:/var/www/localhost/htdocs/uploads"
- "modules:/var/www/localhost/htdocs/protected/modules"
environment:
HUMHUB_DB_USER: user
HUMHUB_DB_PASSWORD: secret

db:
image: mariadb:10.2
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: humhub
MYSQL_USER: user
MYSQL_PASSWORD: secret
volumes:
- "./db:/var/lib/mysql"

Executar o build e execução do ambiente HumHub na raíz do diretório ambiente-humhub-docker

OBS: Antes de executar, verifique se as portas 8080 (Nginx), 9000 (FPM) e 3306 (MySQL) estão disponíveis na sua máquina.

$ docker-compose up -d

Aguarde e após estiver OK, acesse no browser http://localhost:8080 e segue as etapas, selecione o idioma, verifique o status de requisitos necessários, informe o host, usuário, password e nome do banco de dados que foram definidos no arquivo docker-compose em db. Por fim, algumas definições de segurança e criação do usuário administrador e seu password.

Referências


https://github.com/mriedmann/humhub-docker

Feito!

sábado, 6 de fevereiro de 2021

Configurando ambiente de desenvolvimento PHP 8 com Nginx no Docker

O objetivo deste howto é explicar os procedimentos de configuração do ambiente de desenvolvimento PHP 8 com JIT habilitado, composer, Nginx, Adminer e SGBD MySQL 8 no Docker.

A premissa é ter Docker e Docker-Compose instalados, caso ainda não tenha, verifique Instalando Docker e Docker-Compose no Linux ou Instalando Docker e Docker-Compose no Windows 10

$ cd $HOME
$ mkdir -p ambiente-php8-nginx-mysql-docker && cd ambiente-php8-nginx-mysql-docker
$ mkdir -p php8-fpm php8-fpm/config nginx src db

Os diretórios src, db são volumes mapeados entre o HOST e CONTAINER

O diretório ambiente-php8-nginx-mysql-docker/src é onde estará os fontes do projeto no HOST que irá mapear no diretório /var/www/html no CONTAINER

O diretório ambiente-php8-nginx-mysql-docker/db é onde está os arquivos do banco de dados no HOST que irá mapear no diretório /var/lib/mysql no CONTAINER

Se não tiver o volume db ao encerrar, o banco de dados irá para o espaço, pois o container é volátel.

Criar o Dockerfile para o PHP

php8-fpm/Dockerfile

FROM php:8.0.1-fpm-buster
RUN docker-php-ext-install pdo pdo_mysql bcmath opcache
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
EXPOSE 9000
ENTRYPOINT ["php-fpm"]

Criar os arquivos de configuração do PHP

Habilitar o JIT

php8-fpm/config/jit.ini

opcache.enable = 1
opcache.jit_buffer_size = 100M
opcache.jit = 1235
opcache.jit_debug = 0

Configurar o timezone, use conforme o seu fuso horário da sua região

php8-fpm/config/timezone.ini

date.timezone = "America/Sao_Paulo"

Criar o arquivo default.conf do Nginx no diretório ambiente-php8-nginx-mysql-docker/nginx/config

server {
  listen 80;
  index index.php index.html;
  root /var/www/html;
  server_name localhost;

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(./+)$;
    fastcgi_pass php-fpm:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
  }

  location / {
    try_files $uri $uri/ /index.php?$query_string;
    gzip_static on;
  }
}

Criar o arquivo docker-compose.yml na raiz do diretório ambiente-php8-nginx-mysql-docker

OBS: Esteja atento a indentação do arquivo docker-compose.yml para o correto funcionamento na hora que for executar.

docker-compose.yml

version: '3'
services:
  php-fpm:
    build: ./php8-fpm
    container_name: php8-fpm
    volumes:
      - ./src:/var/www/html
      - ./php8-fpm/config/jit.ini:/usr/local/etc/php/conf.d/jit.ini
      - ./php8-fpm/config/timezone.ini:/usr/local/etc/php/conf.d/timezone.ini
  nginx:
    image: nginx:1.19.6
    restart: always
    ports:
      - "8000:80"
    volumes:
      - "./src:/var/www/html"
      - "./nginx/default:/etc/nginx/conf.d/default.conf"
    depends_on:
      - php-fpm

  db:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - "./db:/var/lib/mysql"

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080


Executar o build e executação do ambiente na raíz do diretório ambiente-php8-nginx-mysql-docker

OBS: Antes de executar, verifique se as portas 8000 (Nginx), 9000 (FPM), 8080 (Adminer) e 3306 (MySQL) estão disponíveis na sua máquina.

$ docker-compose up -d

Aguarde e após estiver OK, crie um arquivo ambiente-php8-nginx-mysql-docker/src/info.php

<?php
  phpinfo();

Acesse no browser http://localhost:8000/info.php e para gerenciar bancos de dados http://localhost:8080

Usos gerais no container no ambiente

Para verificar logs do container php8-fpm

$ docker logs php8-fpm  

Para acessar o container similar o acesso SSH

$ docker exec -it php8-fpm bash

Para instalar alguma lib/framework via composer no container php8-fpm

Acesse o diretório ambiente-php8-nginx-mysql-docker/src e execute para iniciar um novo projeto com framework Laravel

$ docker exec -it php8-fpm composer create-project laravel/laravel

Referências

Ambiente PHP 8 com Nginx no Docker

Feito!

quarta-feira, 3 de fevereiro de 2021

Configurando ambiente de desenvolvimento PHP 8 com Apache no Docker

O objetivo deste howto é explicar os procedimentos de configuração do ambiente de desenvolvimento PHP 8 com JIT habilitado, composer, Apache, Adminer e SGBD MySQL 8 no Docker.

A premissa é ter Docker e Docker-Compose instalados, caso ainda não tenha, verifique Instalando Docker e Docker-Compose no Linux ou Instalando Docker e Docker-Compose no Windows 10

$ cd $HOME
$ mkdir -p ambiente-php8-apache-mysql-docker && cd ambiente-php8-apache-mysql-docker
$ mkdir -p php8-apache php8-apache/config src db

Os diretórios src, db são volumes mapeados entre o HOST e CONTAINER

O diretório ambiente-php8-apache-mysql-docker/src é onde estará os fontes do projeto no HOST que irá mapear no diretório /var/www/html no CONTAINER

O diretório ambiente-php8-apache-mysql-docker/db é onde está os arquivos do banco de dados no HOST que irá mapear no diretório /var/lib/mysql no CONTAINER

Se não tiver o volume db ao encerrar, o banco de dados irá para o espaço, pois o container é volátel.

Criar o Dockerfile para o PHP

php8-apache/Dockerfile

FROM php:8.0.1-apache-buster
RUN docker-php-ext-install pdo pdo_mysql bcmath opcache
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer


Criar os arquivos de configuração do PHP

Habilitar o JIT

php8-apache/config/jit.ini

opcache.enable = 1
opcache.jit_buffer_size = 100M
opcache.jit = 1235
opcache.jit_debug = 0

Configurar o timezone, use conforme o seu fuso horário da sua região

php8-apache/config/timezone.ini

date.timezone = "America/Sao_Paulo"

Criar o arquivo docker-compose.yml na raiz do diretório ambiente-php8-apache-mysql-docker

OBS: Esteja atento a indentação do arquivo docker-compose.yml para o correto funcionamento na hora que for executar.

docker-compose.yml

version: "3"
services:
  php-apache:
    container_name: php8-apache
    build: ./php8-apache
    ports:
      - "8000:80"
    volumes:
      - ./src:/var/www/html
      - ./php8-apache/config/jit.ini:/usr/local/etc/php/conf.d/jit.ini
      - ./php8-apache/config/timezone.ini:/usr/local/etc/php/conf.d/timezone.ini
  db:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - "./db:/var/lib/mysql"
  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

Executar o build e executação do ambiente na raíz do direitório ambiente-php8-apache-mysql

OBS: Antes de executar, verifique se as portas 8000, 8080 e 3306 estão disponíveis na sua máquina.

$ docker-compose up -d

Aguarde e após estiver OK, crie um arquivo ambiente-php8-apache-mysql/src/info.php

<?php
  phpinfo();

Acesse no browser http://localhost:8000/info.php e para gerenciar bancos de dados http://localhost:8080

Usos gerais no container no ambiente

Para verificar logs do container php8-apache

$ docker logs php8-apache  

Para acessar o container similar o acesso SSH

$ docker exec -it php8-apache bash

Para instalar alguma lib/framework via composer no container php8-apache

Acesse o diretório ambiente-php8-apache-mysql-docker/src e execute para iniciar um novo projeto com framework Laravel

$ docker exec -it php8-apache composer create-project laravel/laravel

Referências

Ambiente PHP 8 com Apache no Docker

Feito!

segunda-feira, 1 de fevereiro de 2021

Configurando servidor de arquivos com Python

O que é HTTP Server?

HTTP HypertText Transfer Protocol. Vamos pensar em um protocolo como um idioma qualquer de lingua nativa do seu país de origem ou secundário. Cada idioma tem um conjunto de regras e vocabulário. Portanto, se duas ou mais pessoas entender as regras e o vocabulário de um idioma, pode-se comunicar no idioma de maneira eficaz.

Assim como os seres humanos, os dispositivos eletrônicos tambémm se comunicam entre si. Eles, portanto, precisam de um "conjunto de regras e vocabulário" para transmitir e receber ativamente informações uns dos outros.

Um protocolo é um conjunto padrão de regras que facilita a comunicação bem-sucessida entre dispositivos eletrônicos. Esses conjuntos de regras mutuamente aceitas e implementas incluem os comandos usados para iniciar o envio e a recepção de dados, os tipos de dados a serem transmitidos entre os dispositivos, como detectar erros nos cabos, como as transferências de dados bem-sucessidas são confirmadas e muito mais.

Por exemplo, quando você executa uma pesquisa simples usando um navegador, há dois sisemas essenciais envolvidos. O cliente HTTP e o servidor HTTP.

O cliente, comumente referido como navegador, como Google Chrome ou Firefox, mas também pode ser tão simples quanto um aplicativo CLI. O cliente envia sua solicitação ao servidor, que processa as solicitações HTTP e fornece uma resposta ao cliente. No caso de navegadores, a resposta normalmente é uma página HTML.

Módulo SimpleHTTPServer do Python

Quando você precisa de um servidor web rápido em execução, configurar um servidor de nível de produção é uum exagero.

O módulo SimpleHTTPServer do Python é uma ferramenta de economia de trabalho que você pode aproveitar para transformar qualquer diretório em seu sistema em um servidor web descomplicado. Ele vem com uum servidor HTTP simples que oferece manipuladores de solicitação GET e HEAD padrão.

Com um servidor HTTP embutido, você não precisa instalar ou configurar nada para ter seu servidor web instalado e funcionando.

OBS: O módulo Python SimpleHTTPServer foi incorporado ao módulo http.server em Python 3, mas se você estiver usando Python 2, pode trocar http.server por SimpleHTTPServer e funciona de ambos os casos.

Inicializar o HTTPServer no Python

A maneira mais simples de iniciar um servidor web que atende ao diretório no qual o comando é executado, simplesmente acesse até o diretório onde tem os arquivos e execute no terminal:

Python 2
$ python -m SimpleHTTPServer 8000

Python 3
$ python3 -m http.server 8000

No browser na máquina local acesse http://localhost:8000

Para acessar de outra máquina da rede interna http://IPSERVIDOR:8000

Conclusão

A linguagem Python nos fornece o módulo SimpleHTTPServer que pode ser usado para servir arquivos de forma rápida e fácil de um diretório local via HTTP. Isso pode ser usado para tarefas internas, mas não recomendado utilizar em ambiente de produção.

Feito!

segunda-feira, 18 de janeiro de 2021

Monitorando a temperatura do processador no Linux

Se quiser monitorar a temperatura do processador no Linux, devido o barulho feito pela ventoinha da CPU. Nesse howto é apresentado uma ferramenta que permite monitorar a temperatura do processador e outros componentes do computador com o lm-sensors.

Instalando e utilizando o lm-sensors no Debian e derivados (Ubuntu)

$ sudo apt update
$ sudo apt install lm-sensors

Com o lm-sensors instalado, precisa configurar respondendo algumas perguntas sobre o que você gostaria de monitorar. Se optar pelo padrão, tecle ENTER nas perguntas solicitadas.

$ sudo sensors-detect

Após o passo anterior, execute o comando a seguir para exibir as informações sobre a temperatura de saída no formato Celsius.

$ sudo sensors

Caso queira obter leitura de temperatura em Fahrenheit, execute o comando a seguir.

$ sudo sensors -f

Para não precisar ficar executando o comando toda vez que queira obter temperatura, mas sim em tempo real, execute o comando a seguir.

$ sudo watch sensors

Também é possível fazer o monitoramento da temperatura do processador por meio da interface gráfica. Para isso, instale o Psensor.

$ sudo apt install psensor

Feito!