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!