anúncios

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 execução do ambiente na raiz 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 execução do ambiente na raiz 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!

sábado, 16 de janeiro de 2021

Reconhecendo caracteres em imagens com Tesseract

O que é Tesseract?

É um software de reconhecimento ótico de caracteres de código aberto com Licença Apache 2.0, originalmente desenvolvido pela Hewlett-Packard e foi por um tempo mantido pelo Google. Se aplica a imagens em formato tiff com texto puro em uma única coluna, convertendo a saída em um arquivo txt. Não possui mecanismos para reconhecimento de layout, desta forma não é recomendável para textos que possuam imagens, fórmulas ou mais de uma coluna.

Instalando o tesseract-ocr no Debian, Ubuntu e derivados

$ sudo apt install imagemagick graphicsmagick-libmagick-dev-compat exactimage tesseract-ocr

Convertendo um imagem "teste.jpg" para texto

Na imagem deve ter letras, números ou uma combinação de letras e números para o tesseract fazer a leitura e extrair o resultado.

No diretório onde está a imagem com texto, execute o comando abaixo.

# tesseract teste.jpg -psm 8 output.txt

Integrando o tesseract-ocr em um sistema em PHP

Com o ambiente PHP configurado, pode ser adicionado a lib tesseract-ocr via composer.

Após instalar o tesseract-ocr e realizado os testes de captura de texto de uma imagem pelo terminal, execute no diretório do projeto.

$ composer require thiagoalessio/tesseract_ocr

Uso básico na prática com PHP


<?php
require_once "vendor/autoload.php";

use thiagoalessio\TesseractOCR\TesseractOCR;

   echo (new TesseractOCR('imagens/teste.png'))->run();


Demais exemplos de como utilizar a lib TesseractOCR no PHP, use a referência [2].

Referências


[1] https://github.com/tesseract-ocr/tesseract

[2] https://github.com/thiagoalessio/tesseract-ocr-for-php

Feito!