Como instalar o Piwigo no Linux

O Piwigo é um software para criar e gerenciar galerias e álbuns de fotos, voltado para profissionais de fotografia e pessoas comuns (eu!!!) — que apenas querem ter um espaço seu, para guardar suas imagens.

Desenvolvedores e usuários trabalham junto, para fazer do Piwigo um app (de código aberto) cada vez melhor.

Softwares de galerias de foto são a solução ideal para quem deseja publicar suas imagens — do seu jeito e ter total liberdade sobre elas.
Uma empresa pode deixar todo o seu banco de imagens disponível interna e/ou externamente através da galeria online.
O Piwigo permite editar os níveis de privacidade das fotos individualmente ou de álbuns inteiros.

Quais são os requisitos para instalar e rodar o Piwigo

O aplicativo é muito “democrático” e pode ser instalado em uma gama variada de configurações. Segue os requisitos básicos, de acordo com a documentação oficial:

  • Um servidor web Apache. Mas também pode ser Lighttpd ou Nginx.
  • Um servidor de banco de dados MySQL 5 ou MariaDB.
  • Suporte a PHP 5.2.
  • A suíte de aplicativos ImageMagick ou GD.
  • 30 Mb para instalar o app. Mas você vai precisar bem mais, para armazenar suas fotos, claro.

Instalação com um único clique

Alguns provedores de hospedagem, como o DreamHost, possuem um painel de controle a partir do qual é possível instalar com um clique (one-click installs) dezenas de aplicativos web.
piwigo one-click install
Se você possui uma conta em um provedor de hospedagem Linux, então os requisitos estão, provavelmente, todos preenchidos.

Se o seu provedor oferece o Piwigo como opção de instalação simplificada — e você não se importa de usar uma versão desatualizada, porém estável, sugiro usar este meio para instalar o software.

Como instalar a versão mais atual do Piwigo direto do site oficial

Usuários mais avançados, contudo, podem preferir uma versão mais atualizada do software, mesmo que tenham que “meter a mão na massa” para isto.
Neste caso, você vai ter que fazer o download do site oficial e instalar por conta própria — o que inclui configurar o seu banco de dados.
Este é o cenário onde fiz a minha instalação:

  • Servidor Ubuntu 14.04 LTS.
  • MySQL 5.5.
  • PHP 7.0
  • Apache web server —. Se você não tiver um servidor LAMP (Linux, Apache, PHP e MySQL) instalado, leia este post.

Este artigo, parte do pressuposto de que você já tem instalado um servidor web, com suporte a PHP e MySQL.
Vou mostrar como proceder através do uso do aplicativo netinstall — por que ele é pequeno e leve e baixa apenas o que é preciso para a nossa configuração.
Você pode encontrá-lo neste endereço.
piwigo netinstall
Para mandar o netinstall para o servidor em que você fará a instalação, use o scp ou baixe-o direto com o comando wget, na pasta em que você deseja instalar o Piwigo:


wget http://piwigo.org/download/dlcounter.php?code=netinstall -O piwigo-netinstall.php


--2017-06-06 14:55:19--  http://piwigo.org/download/dlcounter.php?code=netinstall
Resolving piwigo.org (piwigo.org)... 87.98.147.22
Connecting to piwigo.org (piwigo.org)|87.98.147.22|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 15282 (15K) [application/zip]
Saving to: ‘piwigo-netinstall.php’

piwigo-netinstall.php                 100%[========================================================================>]  14,92K  83,4KB/s    in 0,2s    

2017-06-06 14:55:23 (83,4 KB/s) - ‘piwigo-netinstall.php’ saved [15282/15282]

Daqui pra frente, o processo segue via web. Acesse a página em que você instalou o netinstall: http://meusite.com.br/galeria/.
Para conseguir concluir o processo, você precisa ter em mãos (ou de memória) as seguintes informações:

  1. O hostname do servidor MySQL ou MariaDB.
  2. O nome do banco de dados.
  3. Um nome de usuário do banco de dados.
  4. A senha deste usuário.
  5. Um prefix predefinido para a tabela de dados do Piwigo, o que irá facilitar a organização do aplicativo dentro do banco de dados.

Se você não tem estas informações, peça ao administrador da rede ou do servidor para te ajudar.
Abra um navegador e acesse o endereço para o qual você copiou o arquivo piwigo-netinstall.php.
Na primeira tela da instalação, é possível indicar o idioma da instalação (1), uma outra pasta ou diretório para instalar o app e, por fim, começar o processo (3).
piwigo install
Na tela que segue, já será necessário fornecer aquelas informações, de que falamos há pouco.
Preencha com toda a atenção.
piwigo install
Abaixo destas informações preencha os campos para a criação da conta do webmaster/administrador da galeria de fotos.
Prossiga.
piwigo install
Na outra tela, o sistema informa se tudo deu certo.
Se houver alguma mensagem de erro, volte à tela anterior e verifique cuidadosamente, meticulosamente, cada informação dada.
Se tudo correu bem, o programa de instalação irá baixar os arquivos de que precisa, criar as pastas e organizar o banco de dados para finalizar a sua galeria.
O Piwigo oferece um tour, logo após sua primeira tela de apresentação.
Vale a pena seguir, para começar a entender o funcionamento da galeria.
piwigo install tour

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Guia de instalação do sistema de armazenamento na nuvem ownCloud no Debian

Mandar seus arquivos para a nuvem é uma excelente opção para obter a portabilidade e acessibilidade deles, sempre que precisar.
Eu disse, SEMPRE?!!
Só se a nuvem for sua, claro!

O motto do aplicativo, originalmente, era “seus dados, sua nuvem, seu jeito.”
Atualmente, é “web services under your control” ou “serviços web sob seu controle”, em português.
É autoexplicativo.

Se você está lendo este texto, contudo, ninguém precisa lhe explicar por que vocẽ deveria ter “sua própria nuvem”…
Vamos à instalação!
owncloud-login-screen

Requisitos de sistema

Neste artigo, fiz uso de um notebook com processador Intel Atom N270, com arquitetura 32 bits e apenas 2 GB de memória.
A máquina tem o Debian 8.6 Jessie instalado e usei a versão padrão do ownCloud, para esta versão do Debian:

apt show owncloud | grep -i vers
Version: 7.0.4+dfsg-4~deb8u4
 ownCloud gives you universal access to your files through a web interface

Este hardware foi perfeito para os meus testes, mas suas especificações estão muito longe de poder aguentar dezenas (ou mais) de conexões simultâneas.
O aplicativo, em si, não é muito voraz, em termos de recursos de hardware.
A documentação oficial recomenda 512 MB de memória RAM e afirma que 128 MB podem ser suficientes para instalar tudo.
Para obter um bom desempenho, é interessante ter drives SSD para armazenamento dos arquivos dos usuários e uma boa conexão. Estas duas condições irão garantir um fluxo constante e ininterrupto de dados entre usuários e servidor.

A arquitetura de 32 bits tem limitações em relação ao tamanho máximo dos arquivos a serem transferidos.
Se você deseja reaproveitar alguma máquina antiga, como servidor de nuvem, opte por hardware de 64 bits, que supera esta barreira.

Uma última palavra sobre a minha instalação Debian: use o tasksel para selecionar e instalar um servidor web. Depois disto, tudo o que você irá precisar fazer, é instalar o MySQL ou MariaDB.
instalar servidor web debian tasksel
Se preferir, contudo, há outras maneiras de instalar um servidor web LAMP — Linux, Apache, MySQL e PHP.
Clique na tag LAMP para ler mais sobre este assunto.

Instalação e configuração do MySQL

Quem optou pelo uso do tasksel, pode instalar a versão padrão do MySQL, com esta linha de comando:

apt install mysql-server mysql-client

Se o MySQL já está rodando no seu sistema, será necessário configurar um banco de dados e uma conta de usuário dentro dele para ser usado pelo ownCloud.
Autentique-se no MySQL:

mysql --defaults-file=/etc/mysql/debian.cnf

Na linha de comando do MySQL, execute as instruções que seguem (para criar um banco de dados ‘owncloud’; criar um usuário com o mesmo nom)
Não esqueça de trocar a palavra ‘minhasenha’ pela da sua senha:

-> CREATE DATABASE owncloud;
-> CREATE USER owncloud@localhost IDENTIFIED BY 'minhasenha';
-> GRANT ALL PRIVILEGES ON owncloud.* TO owncloud@localhost;
-> flush privileges;
-> quit

Como instalar o ownCloud

Se o sistema está pronto, o ownCloud pode também ser instalado através do apt:

apt install owncloud

Depois disto, pode ser necessário reiniciar o Apache:

service apache2 restart

Para acessar a interface web do ownCloud e fazer os próximos ajustes, abra o seu navegador e acesse o endereço ‘http://localhost/owncloud’.
Se o ownCloud estiver em um servidor remoto, indique o seu nome: ‘http://nome-do-servidor/owncloud’.
owncloud install
Forneça cuidadosamente os dados pedidos e já pode usar o novo sistema.

Se quiser, leia também sobre como instalar o ownCloud no Ubuntu.
Clique na tag onwCloud, para ler todos os textos sobre o sistema, neste site.

Aplicações do ownCloud

Tanto no ambiente doméstico como no corporativo, um servidor de nuvem pode ajudar a manter seus backup 100% em dia.
Do seu laptop, é possível enviar seus arquivos para a nuvem, arrastando e soltando, a partir da janela do gerenciador de arquivos.
Do celular, é fácil acessar a interface web do aplicativo e subir todas as suas fotos, quando estiver em casa, por exemplo.

Como instalar um servidor LAMP no openSUSE

Um servidor Linux, com serviços Apache, banco de dados MySQL ou MariaDB e a linguagem de scripts PHP é um ambiente muito comum para desenvolvedores web, administradores de servidores web etc.
Há variações para esta configurações.
Alguns administradores ou desenvolvedores preferem usar outros servidores web, que não o Apache. Também podem optar por outro banco de dados que não o MySQL — neste caso, o PostreSQL e o MariaDB são bastante comuns.

A tendência atual de distros como openSUSE, Ubuntu, Fedora, entre outras, é a substituição do MySQL pelo MariaDB

Como opção ao PHP, surgem o Python e o Perl, entre outros.
Neste texto, vamos nos ater ao LAMP tradicional, em uma maquina openSUSE Leap 42.1 — até por que ele é muito fácil de instalar.
Se quiser saber mais sobre como verificar a versão do openSUSE em uso no seu sistema, leia este texto.
Se, posteriormente, quiser acrescentar suporte ao Perl, Python ou Ruby on Rails, isto pode ser feito de modo muito natural.

Como encontrar o padrão de instalação LAMP no openSUSE

A ferramenta zypper, de gestão de pacotes, permite encontrar rapidamente qualquer coisa que esteja dentro dos repositórios do sistema operacional.
Se quiser saber mais sobre o zypper, leia este texto.
No exemplo que segue, a gente começa com um refresh, para sincronizar o nosso cache local com os repositórios remotos. Em seguida faremos uma busca, com o comando search, pelos padrões (patterns) que contenham a string “lamp”. Veja abaixo:

sudo zypper update
zypper search --type pattern lamp
Carregando dados de repositório...
Lendo os pacotes instalados...

S | Nome        | Resumo                   | Tipo  
--+-------------+--------------------------+-------
  | lamp_server | Servidor Internet e LAMP | padrão

Quer obter mais informações sobre o pattern lamp_server?
Use o parâmetro info:

zypper info -t pattern lamp_server
.
Carregando dados de repositório...
Lendo os pacotes instalados...


Informação para padrão lamp_server:
-----------------------------------
Repositório: Repositório principal de atualização
Nome: lamp_server
Versão: 20150918-12.1
Arquitetura: x86_64
Fornecedor:openSUSE
Instaladas: Não
Visível ao Usuário: Sim
Resumo:Servidor Internet e LAMP
Descrição: 
  Programa para configurar um servidor de Internet que possa lidar com conteúdo
  estático, dinâmico e interativo (como uma loja da Internet). Isso inclui o
  servidor HTTP Apache, o sistema de gerenciamento de banco de dados MySQL e
  linguagens de script como PHP, Python, Ruby on Rails ou Perl.
Conteúdo:

S | Nome                          | Tipo    | Dependência
--+-------------------------------+---------+------------
  | apache2                       | package |            
  | apache2-doc                   | package |            
  | apache2-example-pages         | package |            
  | apache2-mod_perl              | package |            
  | apache2-mod_php5              | package |            
  | apache2-mod_python            | package |            
  | apache2-prefork               | package |            
  | mariadb                       | package |            
i | patterns-openSUSE-base        | package |            
  | patterns-openSUSE-lamp_server | package |            
  | php5-ctype                    | package |            
  | php5-dom                      | package |            
  | php5-iconv                    | package |            
  | php5-mysql                    | package |            
  | yast2-http-server             | package |  

Observe que na relação de pacotes a ser instalada, o banco de dados MariaDB é default nesta versão do openSUSE.
Para, enfim, fazer a instalação deste pattern, use o comando install:

sudo zypper install -t pattern lamp_server
root's password:
Carregando dados de repositório...
Lendo os pacotes instalados...
Resolvendo dependências de pacote...

The following 32 NEW packages are going to be installed:
  apache2 apache2-doc apache2-example-pages apache2-mod_dnssd apache2-mod_perl
  apache2-mod_php5 apache2-mod_python apache2-prefork apache2-utils libapr1
  libapr-util1 libmysqlclient18 libmysqlclient_r18 libmysqlcppconn7
  libreoffice-base-drivers-mysql mariadb mariadb-client mariadb-errormessages
  patterns-openSUSE-lamp_server perl-Linux-Pid php5 php5-ctype php5-dom
  php5-iconv php5-json php5-mysql php5-pdo php5-sqlite php5-tokenizer
  php5-xmlreader php5-xmlwriter yast2-http-server

The following NEW pattern is going to be installed:
  lamp_server

The following 18 recommended packages were automatically selected:
  apache2 apache2-doc apache2-example-pages apache2-mod_perl apache2-mod_php5
  apache2-mod_python apache2-prefork mariadb php5-ctype php5-dom php5-iconv
  php5-json php5-mysql php5-sqlite php5-tokenizer php5-xmlreader php5-xmlwriter
  yast2-http-server

32 novos pacotes para instalado.
Tamanho total do download: 22,5 MiB. Já em cache: 0 B. Após a operação, 161,3
MiB adicionais serão utilizados.
deseja continuar? [s/n/? mostrar todas as opções] (s): 

Não se esqueça de ler atenciosamente o texto que segue o processo de instalação e confirmar aonde for apropriado.

Pós instalação

Antes de dar o trabalho por encerrado, vamos testar a instalação.
Comece por verificar o estado atual do (MySQL) MariaDB:

sudo rcmysql status
mysql.service - MySQL server
   Loaded: loaded (/usr/lib/systemd/system/mysql.service; disabled)
   Active: inactive (dead)

Ok. As palavras disabled e dead — respectivamente, “desabilitado” e “morto” — não são muito animadoras.
Então vamos colocar o banco de dados no ar!

sudo rcmysql start
sudo rcmysql status

Agora, a mensagem é outra:

mysql.service - MySQL server
   Loaded: loaded (/usr/lib/systemd/system/mysql.service; disabled)
   Active: active (running) since Sat 2016-05-14 19:42:27 BRT; 4s ago
  Process: 4524 ExecStartPost=/usr/lib/mysql/mysql-systemd-helper wait default (code=exited, status=0/SUCCESS)
  Process: 4514 ExecStartPre=/usr/lib/mysql/mysql-systemd-helper upgrade default (code=exited, status=0/SUCCESS)
  Process: 4423 ExecStartPre=/usr/lib/mysql/mysql-systemd-helper install default (code=exited, status=0/SUCCESS)
 Main PID: 4523 (mysqld)
   CGroup: /system.slice/mysql.service
           └─4523 /usr/sbin/mysqld --defaults-file=/etc/my.cnf --user=mysql

May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: 160514 19:42:26 [Note] InnoDB: Initializing buffer pool, size = 128.0M
May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: 160514 19:42:26 [Note] InnoDB: Completed initialization of buffer pool
May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: 160514 19:42:26 [Note] InnoDB: Highest supported file format is Barracuda.
May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: 160514 19:42:26 [Note] InnoDB: 128 rollback segment(s) are active.
May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: 160514 19:42:26 [Note] InnoDB: Waiting for purge to start
May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: 160514 19:42:26 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.26-74.0 started; log sequence number 1616707
May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: 160514 19:42:26 [Note] Server socket created on IP: '::'.
May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: 160514 19:42:26 [Note] /usr/sbin/mysqld: ready for connections.
May 14 19:42:26 linux-ewci.suse mysql-systemd-helper[4523]: Version: '10.0.22-MariaDB'  socket: '/var/run/mysql/mysql.sock'  port: 3306  openSUSE package
May 14 19:42:27 linux-ewci.suse mysql-systemd-helper[4524]: MySQL is alive

Ajuste a senha do root no MariaDB

Caso você não saiba, o root do banco de dados MySQL/MariaDB é diferente do root do Linux.
Use o seguinte comando, no terminal:

/usr/bin/mysqladmin -u root password 'nova-senha'

Substitua ‘nova-senha’ pela sua senha.

Como baixar e usar imagens prontas do repositório Docker

Neste post introdutório vou mostrar como trabalhar com as imagens do Docker Hub.
Tanto é possível usar imagens prontas, como alterá-las e criar novas a partir do zero.
Esta última opção é voltada para usuários mais avançados.
A primeira, permite que usuários novatos possam trabalhar com imagens feitas por profissionais e que podem ser encontradas no repositório oficial do Docker — ou Docker Hub.
Na primeira vez em que você roda uma imagem do Docker Hub, ela é baixada para o seu computador — o Docker usa a cópia local para trabalhar.
Se você ainda não instalou o Docker, confira estes métodos de instalação.
logo docker com bombas nos contêineres
Use o comando docker images para listar (se houver) imagens armazenadas localmente no seu sistema.
O diretório de armazenamento das suas imagens é o ‘/var/lib/docker’, caso você esteja curioso.

O que é possível encontrar no Docker Hub

É possível baixar uma das várias imagens prontas do repositório do Docker. Entre elas, há de várias distribuições, tais como Ubuntu, CentOS, Arch Linux, Debian etc.
Você pode baixar também uma imagem vazia, adequada para quem deseja um modelo (ou esqueleto) para construir a sua própria, “do zero”.
Entre recursos e funcionalidades, o hub oferece os seguintes itens:

  • Repositórios de imagens — encontre, gerencie, armazene suas imagens e baixe outras – da comunidade, privadas ou oficiais.
  • Builds automatizados — crie novas imagens automaticamente durante a mudança de repositório fonte GitHub/Bitbucket.
  • Webhooks — um dos recursos dos builds automatizados, permite disparar ações programadas após uma transferência de sucesso a um repositório.
  • Organizações — cria grupos de trabalho para gerenciar acesso de usuário a repositórios de imagens.
  • Integração ao GitHub e ao Bitbucket — adiciona o Hub e suas imagens Docker ao seu fluxo de trabalho (workflow) atual.

Você pode buscar e baixar imagens públicas do Docker Hub livremente.
Contudo, para enviar e armazenar suas imagens no hub é necessário ter uma conta e assinar o serviço.

Como acessar os repositórios de imagens do Docker

O Hub oferece um local onde desenvolvedores podem montar e armazenar imagens Docker — que podem ser distribuídas publicamente ou apenas dentro da sua equipe de trabalho.
Você pode fazer uma busca por imagens no repositório público com o comando search. Veja um exemplo de busca por imagens relacionadas a distro Linux CentOS:

docker search centos
NAME                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                        The official build of CentOS.                   1960      [OK]       
jdeathe/centos-ssh            CentOS-6 6.7 x86_64 / SCL/EPEL/IUS Repos /...   15                   [OK]
million12/centos-supervisor   Base CentOS-7 with supervisord launcher, h...   9                    [OK]
blalor/centos                 Bare-bones base CentOS 6.5 image                8                    [OK]
nimmis/java-centos            This is docker images of CentOS 7 with dif...   7                    [OK]
torusware/speedus-centos      Always updated official CentOS docker imag...   7                    [OK]
centos/mariadb55-centos7                                                      3                    [OK]
nathonfowlie/centos-jre       Latest CentOS image with the JRE pre-insta...   3                    [OK]
nickistre/centos-lamp         LAMP on centos setup                            3                    [OK]
consol/sakuli-centos-xfce     Sakuli end-2-end testing and monitoring co...   2                    [OK]
feduxorg/centos-postgresql    Centos Image with postgres                      1                    [OK]
softvisio/centos              Centos                                          1                    [OK]
layerworx/centos              CentOS container with etcd, etcdctl, confd...   1                    [OK]
darksheer/centos              Base Centos Image -- Updated hourly             1                    [OK]
lighthopper/orientdb-centos   A Dockerfile for creating an OrientDB imag...   1                    [OK]
yajo/centos-epel              CentOS with EPEL and fully updated              1                    [OK]
ericuni/centos                centos dev                                      0                    [OK]
blacklabelops/centos          CentOS Base Image! Built and Updates Daily!     0                    [OK]
ustclug/centos                 USTC centos                                    0                    [OK]
januswel/centos               yum update-ed CentOS image                      0                    [OK]
jsmigel/centos-epel           Docker base image of CentOS w/ EPEL installed   0                    [OK]
grayzone/centos               auto build for centos.                          0                    [OK]
lighthopper/openjdk-centos    A Dockerfile for creating an OpenJDK image...   0                    [OK]
insaneworks/centos            CentOS 6.5 x86_64 + @update                     0                    [OK]
timhughes/centos              Centos with systemd installed and running       0                    [OK]

Você também pode fazer uma busca no website oficial do Docker. Repositórios privados não serão listados.
No próximo exemplo vou mostrar como baixar uma imagem do Alpine Linux:

docker pull alpine

Veja o resultado do meu download, abaixo:

latest: Pulling from library/alpine
ee54741ab35b: Pull complete 
Digest: sha256:24a36bbc059b1345b7e8be0df20f1b23caa3602e85d42fff7ecd9d0bd255de56
Status: Downloaded newer image for alpine:latest

Neste momento, já é possível ver a imagem na relação de disponíveis localmente:

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
alpine              latest              90239124c352        9 days ago          4.79 MB

O Alpine é uma distro GNU/Linux construída em torno das bibliotecas musl, libc e do Busybox.
Estas características permitem que seja bastante pequena e muito eficiente em termos de uso de recursos do sistema.
Para rodar no Docker, o contêiner não requer mais do que 8 MB.

Para rodar a imagem, use o comando run.
Uma vez que o Alpine é baseado no Busybox, é fácil iniciar esta imagem rodando-o:

docker run -t -i alpine busybox

Dá para fazer mais do que isto.
Nos exemplos abaixo, determinamos a versão do Alpine em uso no contêiner:

docker run -t -i alpine cat /etc/alpine-release
3.3.1

Quando uma imagem não é encontrada localmente, ela é baixada automaticamente, pelo Docker.
Se você quiser rodar uma shell dentro do contêiner Alpine, use o ash (semelhante ao Bash):

docker run -t -i alpine /bin/ash

Como rodar um servidor LAMP dentro do Docker

Eu sei, eu sei… este assunto merece um post só para ele — ainda assim, insisto em usar este exmplo pra ilustrar a utilidade das imagens prontas do Docker. 😉
Você pode montar o seu próprio servidor LAMP dentro do Docker. Mas também pode baixar uma imagem em que ele já venha pronto.
Neste caso, sugiro a imagem do usuário nickistre, com o CentOS rodando um servidor Linux, Apache, MySQL e PHP.
Baixe a imagem e veja como proceder:

docker pull nickistre/centos

A seguir rode a imagem, com o comando ifconfig (para você saber exatamente em qual IP encontrar o servidor)

docker run -t -i nickistre/centos-lamp ifconfig

Veja o meu resultado:

eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:03  
          inet addr:172.17.0.3  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:acff:fe11:3/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:1 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:90 (90.0 b)  TX bytes:180 (180.0 b)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Na segunda linha, acima, se encontra o endereço IP, que eu devo acessar, do meu navegador: inet addr:172.17.0.3
Coloque-o no ar e acesse o IP informado no seu navegador favorito:

docker run -t -i nickistre/centos-lamp

Apache server running on CentOS
Esta é uma entre várias formas de se usar imagens prontas em contêineres Docker.
Desenvolvedores web podem achar mais interessante rodar seus servidores desta forma, do que instalar o LAMP inteiro em sua máquina — além de tudo, este método permite alterar e testar diferentes configurações do servidor, sem bagunçar o seu sistema.

Referẽncias

Como instalar e usar o Docker.
https://docs.docker.com/docker-hub/overview/.
http://www.alpinelinux.org/about/.

Como configurar o módulo mpm prefork para melhorar a performance do servidor web Apache

Ao concluir a instalação do seu servidor web Apache, pode ser interessante realizar alguns ajustes na sua configuração para obter um melhor desempenho ou adequá-lo às condições de hardware e de uso.
Neste post, vou mostrar como ajustar o mpm_prefork.conf do Apache.
apache-feather-logo-24colors
As informações contidas neste post foram testadas em um sistema operacional Debian 8.2 “jessie”, com o servidor web Apache 2.4 padrão da distribuição — e servem para Ubuntu 14.04 LTS (ou superior) também.
Outras diretivas e parâmetros de configuração, presentes no Apache, precisam ser incluídas no ato da compilação do software — e, portanto, não serão abordados neste texto.
Para saber a versão do seu servidor Apache, use o seguinte comando:

sudo apache2 -v
Server version: Apache/2.4.10 (Debian)
Server built:   Aug 28 2015 16:28:08

O que é o MPM prefork do Apache?

MPM é sigla para Multi-Processing Module ou Módulo de Processamento Múltiplo (em uma tradução livre).
É responsável pela implementação de um servidor web sob a “metodologia” non-threaded, em um servidor pre-forking, que lida com as requisições de modo similar ao do Apache 1.3. (Veja o quadro ao final deste texto)
É apropriado para sites que precisam evitar a criação de threads, para manter compatibilidade com bibliotecas non-thread-safe (PHP, por exemplo…).
O MPM é autorregulado, de modo que raramente é necessário ajustar diretivas de configuração.

O conteúdo do arquivo mpm_prefork.conf

Para ver o conteúdo do arquivo de configuração, tema deste artigo, use o comando cat.
O conteúdo do meu arquivo mpm_prefork.conf (tirando os comentários) é o que segue:

cat /etc/apache2/mods-enabled/mpm_prefork.conf
#
<IfModule mpm_prefork_module>
	StartServers			5
	MinSpareServers			5
	MaxSpareServers			10
	MaxRequestWorkers		150
	MaxConnectionsPerChild  	0
</IfModule>

Estes são os valores originais.
O significado de cada uma destas linhas de configuração é o que segue:

  • StartServers — número de processos do servidor para iniciar
  • MinSpareServers — quantidade mínima de processos do servidor a ser reservada
  • MaxSpareServers — quantidade máxima de processos do servidor a ser reservada
  • MaxRequestWorkers — número máximo de processos do servidor permitidos para iniciar.
    Em versões anteriores ao Apache 2.4, era chamado de MaxClients
  • MaxConnectionsPerChild — número máximo de requisições que um processo do servidor deve atender

Como funciona o MPM

Um único processo é responsável pelo lançamento dos processos filhos, que ouvem as conexões e as atendem, quando chegam.
O Apache sempre tenta manter vários processos do servidor em reserva, prontos a atender novas requisições — desta forma, economiza tempo para criar novos processos filhos (forking) para atender a novas requisições.
As diretivas StartServers, MinSpareServers, MaxSpareServers e MaxRequestWorkers controlam o modo como os processos pais criam novos processos filhos para servir às novas requisições.
Em geral, o Apache é bom em se autorregular em função da demanda, de modo que muitos administradores de sites não vão precisar ajustar estas diretivas.
Manter os valores padrão é o recomendado para a maioria, portanto.
Sites que precisam servir mais do que 256 requisições simultâneas, contudo, podem precisar aumentar o valor de MaxRequestWorkers.
Caso os recursos de memória sejam limitados, pode ser necessário reduzir este valor para prevenir que o servidor faça thrashing — ou seja, faça uso da memória swap em disco (o que vai ocasionar um problema severo de lentidão).

O mais importante é que o MaxRequestWorkers seja grande o suficiente para comportar a quantidade de requisições simultâneas que você espera receber.
Ao mesmo tempo, o valor desta diretiva deve ser pequeno o suficiente para assegurar que haja memória RAM física suficiente para todos os processos.

Enquanto o processo pai é costumeiramente iniciado como root (UNIX e GNU/Linux) para se conectar à porta 80, os processos filhos são iniciados pelo Apache com privilégios de usuário comum.
As diretivas de Usuário e Grupo são usados para ajustar os privilégios dos processos filhos do Apache — que só precisam estar habilitados a ler aquele conteúdo que será servido.
A diretiva MaxRequestsPerChild controla a frequencia com que o servidor recicla processos, matando os velhos e criando novos.

A diretiva StartServers

Este parâmetro ajusta o número de processos filhos que devem ser criados na inicialização do Apache.
Uma vez que este número é controlado dinamicamente, em função da carga de trabalho do servidor web, geralmente há poucas razões para alterar este número.

A diretiva MaxSpareServers

O valor padrão desta diretiva é 10, de acordo com a documentação oficial do Apache (link no final do texto).
Este parâmetro determina o número máximo de processos ociosos do servidor.
É denominado processo ocioso aquele que não esteja trabalhando com alguma requisição.
O processo pai vai ‘matar’ os processos filhos ociosos, assim que sua quantidade exceder o limite determinado em MaxSpareServers.
Ajustar este parâmetro só é necessário em sites muito ocupados.
Se você ajustar o valor deste parâmetro para um número igual ou menor do que o valor de MinSpareServers, o Apache irá automaticamente reajustá-lo para MinSpareServers + 1.

Ajustar os parâmetros MinSpareServers e MaxSpareServers para valores extremos é quase sempre uma idéia ruim.
Ao fazer isto, você adiciona ao servidor um excesso de carga de trabalho ou overhead, por que ele precisará terminar/iniciar, sem necessidade, os workers de reserva em execução no background.

A diretiva MinSpareServers

Esta variável ajusta o número desejado de processos filhos ociosos do servidor.
Como você já sabe, processo ocioso é aquele que não está lidando com alguma requisição.
Havendo menos destes processos do que a quantidade determinada em MinSpareServers, o processo pai irá iniciar a criação de novos processos filhos, a uma taxa máxima de 1 por segundo.

A diretiva MaxConnectionsPerChild

Delimita o número de conexões com que cada processo filho pode trabalhar individualmente.
Após atingir o valor definido em MaxConnectionsPerChild, o processo filho irá terminar (morrer).
Você pode ajustar o valor para 0 (zero), se quiser que o processo nunca expire.
Ao usar valores diferentes de 0, contudo, você vai limitar a quantidade de memória que cada processo poderá consumir em caso de vazamento acidental de memória.

Conclusão

Quando terminar de configurar estes parâmetros, não use o reload para reiniciar o Apache.
O certo é parar o servidor e, em seguida, iniciá-lo.
A razão disto é que nem todas as mudanças farão efeito até que você desligue o processo principal (inicial) do Apache.
No Debian, use o seguinte comando para isto:

sudo service apache2 stop
sudo service apache2 start
sudo service apache2 status

O resultado do último comando deve ser parecido com o que segue:

● apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2)
   Active: active (running) since Sex 2015-12-04 10:00:49 BRT; 1min 7s ago
  Process: 7399 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
  Process: 6561 ExecReload=/etc/init.d/apache2 reload (code=exited, status=0/SUCCESS)
  Process: 7451 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/apache2.service
           ├─7465 /usr/sbin/apache2 -k start
           ├─7469 /usr/sbin/apache2 -k start
           ├─7470 /usr/sbin/apache2 -k start
           ├─7471 /usr/sbin/apache2 -k start
           ├─7472 /usr/sbin/apache2 -k start
           ├─7473 /usr/sbin/apache2 -k start
           └─7474 /usr/sbin/apache2 -k start

Dez 04 10:00:48 ultra apache2[7451]: Starting web server: apache2AH00558:...e
Dez 04 10:00:49 ultra apache2[7451]: .
Hint: Some lines were ellipsized, use -l to show in full.

O que são Non-threaded e Pre-fork no Apache?

Servidores web diferentes, tem diversas técnicas de manipulação das requisições HTTP em paralelo.
Uma das metodologias mais populares envolve o uso de threads — ou seja, o servidor web vai criar/dedicar uma única thread a cada nova requisição recebida.
O servidor web Apache suporta múltiplos modelos de tratamento de requisições — um deles, o MPM, usa threads.
Além disto, suporta um outro modelo chamado prefork MPM, que usa processos — no qual o servidor web cria/dedica um único processo a cada nova requisição.

Referências:

https://httpd.apache.org/docs/2.2/mod/prefork.html.
http://askubuntu.com/questions/488044/neither-prefork-nor-worker-settings-are-found-in-etc-apache2-apache2-conf-why.
http://wiki.zarafa.com/index.php/Apache_tuning.
http://stackoverflow.com/questions/1623914/what-is-thread-safe-or-non-thread-safe-in-php.
http://serverfault.com/questions/684424/how-to-tune-apache-on-ubuntu-14-04-server.