Arquivo da categoria: Linux

Como instalar e configurar o módulo nginx-upload-module no Nginx – Parte 1

Olá pessoal,

Estou procurando algumas formas de como resolver um problema de upload de arquivos grandes (+1GB) em uma aplicação escrita em Python utilizando o Microframework Flask. Neste post vou explicar como instalar o módulo nginx-upload-module no Nginx para que o upload dos arquivos seja trato pelo Nginx não mais pela aplicação.

ATENÇÃO: Antes de começar, este post é apenas para fins didáticos, não recomendo executar este procedimento em ambiente de produção a não ser que você tenha certeza do que você esta fazendo.

O Nginx quando instalado via gerenciado de pacotes vem com vários módulos, então para ter uma instalação funcional para vários propósitos também vou instalar os mesmos módulos que são instalados via gerenciador de pacotes.

Para este teste estou utilizando o Ubuntu 18.04 Server, acredito que seja possível reproduzir em outras distribuições baseadas no Debian

sudo apt update && apt upgrade
sudo apt install build-essential -y

Para compilação é necessários o código fonte de outras duas bibliotecas, o PCRE que é uma dependência do módulo de reescrita e OpenSSL que é uma dependência do módulo de ssl

PCRE

cd /tmp/
wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz && tar -xf pcre-8.44.tar.gz

OpenSSL

cd /tmp/
wget https://www.openssl.org/source/openssl-1.1.1h.tar.gz && tar -xf openssl-1.1.1h.tar.gz

No momento que escrevo este post, a versão estável do Nginx é a 1.18:

cd /tmp/
wget https://nginx.org/download/nginx-1.18.0.tar.gz && tar -xf nginx-1.18.0.tar.gz

O módulo nginx-upload-module precisa ser abaixado a partir do github do projeto

cd /tmp/
wget https://github.com/vkholodkov/nginx-upload-module/archive/master.zip && zip -d master.zip

Execute o ./configure com os módulos padrões, os caminhos das bibliotecas dependentes e do módulo nginx-upload-module

cd /tmp/nginx-1.18.0
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-pcre=../pcre-8.44 --with-openssl=../openssl-1.1.1h  --add-module=/root/nginx-upload-module-master --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'

Se tudo deu certo execute o comando abaixo para executar a instalação

sudo make 
sudo make install

Para facilitar a operação do serviço vou configurara o systemd para conseguir iniciar e parar o serviço utilizando o systemctl

sudo vim /etc/systemd/system/nginx.service

Copie e cole o trecho abaixo

[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target

Para testar pare e inicie o serviço utilizando o Nginx

systemctl stop nginx
systemctl start nginx

Para verificar a instação dos módulos, execute o comando

nginx -V

A resposta esperada é

nginx -V

Vou terminar por aqui esta primeira parte, em breve publico outro post explicando como configurar o Nginx para tratar o upload dos arquivos.

Como instalar o Node.js v12 (LTS) no Raspian (Raspberry Pi)

Os repositórios oficiais do Raspian não tem disponível nenhuma versão do Node.js, mas felizmente temos a disposição o repositório NodeSource com todas as versões do Node.js, neste post vou explicar o procedimento para realizar instalação versão 12 LTS (Long Term Support) do Node.js

O primeiro passo é instalar dependências para que seja possível compilar o Node.js

sudo apt-get install gcc g++ make

Em seguida instale o repositório

curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -

Junto com o Node.js vou fazer a instalação do gerenciador de pacotes Yarn

curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn nodejs

Pronto! para verificar a versão do Node.js instalada, execute:

nodejs --version

É isso ai pessoal até próxima 😉

 

Instalando o PHP 7.3 no Ubuntu 18.04 LTS

E aí pessoal, tudo beleza? Neste vou post vou explicar como instalar a versão 7.3 do PHP  no Ubuntu 18.04 LTS, atualmente o repositório oficial da Canonical vem com a versão 7.2 que no momento que escrevo este post esta recebendo apenas atualizações de segurança. No exemplo estou consideranto que a versão 7.2 esta instalada utilizando o FPM.

Atualize os respositórios do sistema

sudo apt update

Como o repositório oficial da Canonical não disponibiliza a versão 7.3 será necessário adicionar um novo repositório, as fontes que utilizei para escrever este post é recomendam o repositório mantido por Ondřej Surý (https://launchpad.net/~ondrej/+archive/ubuntu/php)

sudo add-apt-repository ppa:ondrej/php

Vou instalar as bibliotecas utilizadas pelo WordPress como exemplo

apt install php7.3 php7.3-fpm php7.3-curl php7.3-common php7.3-json php7.3-mbstring php7.3-mysql php-imagick php7.3-xml php7.3-zip

Pare e desative o serviço FPM do PHP 7.2

sudo systemctl stop php7.2-fpm
sudo systemctl disable php7.2-fpm

Caso exista algum arquivo de configuração de resource pool na versão 7.2, copie os arquivos de configuração para o diretório /etc/php/7.3/fpm/pool.d/

sudo cp /etc/php/7.2/fpm/pool.d/* /etc/php/7.3/fpm/pool.d/

Por fim configure o serviço FPM do PHP 7.3 para iniciar automaticamento no boot e inicie o serviço

systemctl enable php7.3-fpm
systemctl start php7.3-fpm

Pronto é isso pessoal, por hoje é só 🙂

Corrigindo o erro “unknown group ‘smmsp’ in statoverride file” após atualização do Ubuntu Server

Olá pessoal,

Recentemente fiz a atualização do Ubuntu Server da versão 16.04 para 18.04 utilizando o script do-release-upgrade, o processo de atualização correu bem, mas após a conclusão ao tentar instalar qualquer outro pacote passei a receber a mensagem de erro:

dpkg: unrecoverable fatal error, aborting:
 unknown group 'smmsp' in statoverride file
E: Sub-process /usr/bin/dpkg returned an error code (2)

No meu caso o que aconteceu é que o dpkg estava fazendo referência ao grupo “smmsp” que por algum motivo foi removido durante o processo de atualização, a evidência eu encontrei executando o comando:

$ grep 'smmsp' /var/lib/dpkg/statoverride

root smmsp 2755 /usr/lib/sm.bin/sendmail 
root smmsp 2755 /usr/lib/sm.bin/mailstats

Com esta informação identifiquei que o sendmail também não estava funcionando, mas não tenho certeza que seja uma regra, acredito que isso posso ocorrer com outros serviços

Resolvi o problema em duas partes, a primeira foi removendo as referências do arquivo /var/lib/dpkg/statoverride, para solucionar o problema de instalação de novos pacotes, usei o comando sed para remover todas as incidências que utilizam o grupo ‘smmsp’ no arquivo /var/lib/dpkg/statoverride:

$ sudo sed -i '/smmsp/d' /var/lib/dpkg/statoverride

A segunda parte do problema, recriei o grupo ‘smmsp’ e forcei o upgrade do sendmail, que reescreveu o arquivo /var/lib/dpkg/statoverride com as referências ao serviço novamente:

$ groupadd --gid 2755 smmsp
$ apt upgrade sendmail sendmail-bin

Caso você caro leitor tenha mais detalhe ou passou por um problema parecido, coloca ai nos comentários para enriquecer a postagem, até próxima 😉