Tutorial container httpd apache com docker compose e suporte SSL

Objetivo

Criar um container com servidor de páginas apache2 para prover suporte a páginas html somente. Configurações específicas por .htaccess ou virtualhost também suportados. Container com suporte tanto para acesso http ou ssl (https://).

Requisitos

  • Capacidade de criação de containers com Docker e suporte a docker compose.
  • Conexão com internet para download da imagem do apache2 (httpd).

É possível configurar um domínio pra acesso ao seu container. Ou se preferir, pode acessá-lo diretamente pelo seu ip e porta definidos.

Como instalar imagem do httpd (apache2) com docker compose tendo suporte a certificado SSL

Passo 1: Criação de arquivos para configurar o container do wordpress

  • .env – este arquivo irá conter informações sobre variáveis que podemos definir previamente, para serem utilizadas no arquivo de configuração do container. Neste exemplo, vamos configurar o nome de domínio que queremos vincular ao servidor de páginas httpd e container
  • docker-compose – arquivo principal de definição das configurações do container.
  • my-http.conf – arquivo de configuração do apache onde vamos definir o virtualhost para acesso http e https.

Nosso diretório base para o container será:

~/docker/website

Então vamos criar o diretório docker e website, caso ainda não estejam criados:

mkdir ~/docker
mkdir ~/docker/website

Agora vamos criar o arquivo .env:

nano ~/docker/website/.env

Precisamos colar o conteúdo:

DOMAIN=dev.viniciuspaes.com

Neste exemplo, vamos definir o domínio/subdomínio dev.viniciuspaes.com nesse container.

Vamos criar o arquivo do docker-compose.yml:

nano ~/docker/website/docker-compose.yml

Cole no seu conteúdo as informações abaixo:

services:
  apache:
    container_name: ${DOMAIN}_web
    image: httpd:latest
    env_file:
      - .env
    volumes:
      - ./my-httpd.conf:/usr/local/apache2/conf/httpd.conf
      - ./logs:/var/log/apache2
      - ./public_html:/usr/local/apache2/htdocs
      - /etc/letsencrypt/live/${DOMAIN}/fullchain.pem:/usr/local/apache2/conf/server.crt
      - /etc/letsencrypt/live/${DOMAIN}/privkey.pem:/usr/local/apache2/conf/server.key
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
    ports:
      - "8080:80"
      - "8081:443"
    restart: always

Por fim, precisamos fazer o download do arquivo httpd.conf do container do httpd:latest:

cd ~/docker/website
docker run --rm httpd:latest cat /usr/local/apache2/conf/httpd.conf > my-httpd.conf

Com o comando acima, será feito o download do arquivo httpd.conf de dentro do repositório do httpd e será renomeado para my-httpd.conf.

Passo 2: Editar o arquivo my-httpd.conf e configurar virtualhost

Vamos editar o arquivo my-httpd.conf:

nano my-httpd.conf

Agora é necessário remover o caractere # do começo das seguintes linhas:

#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
#LoadModule ssl_module modules/mod_ssl.so
#Include conf/extra/httpd-ssl.conf
#LoadModule rewrite_module modules/mod_rewrite.so

As linhas acima estão em sequência no arquivo, é necessário encontrá-las. Após editadas, devem ficar como:

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
LoadModule rewrite_module modules/mod_rewrite.so

Ainda na edição do my-httpd.conf, precisamos configurar o virtualhost e inserir o conteúdo no fim do arquivo:

Passo 3: Confirmar caminho para certificado SSL

Neste tutorial estamos supondo que já possui um servidor de proxy reverso instalado e configurado e que o certificado SSL para o domínio que escolheu está presente no caminho:

/etc/letsencrypt/live/dev.viniciuspaes.com/fullchain.pem
/etc/letsencrypt/live/dev.viniciuspaes.com/privkey.pem

Caso não vá utilizar um domínio configurado em seu container, ou não vai precisar de acesso SSL, é só comentar essas linhas no docker-compose.yml e remover o virtual host para porta 443 (SSL).

Passo 4: Iniciar o Container

Para iniciar o container, vamos utilizar o docker compose, mas lembre-se que precisa estar na mesma pasta onde o arquivo está configurado:

cd ~/docker/website
docker compose up -d

Se todos os passos foram executados com sucesso, vamos ter o container configurado com as portas:

  • 8080: para acesso http
  • 8081: para acesso https (SSL)

Basta acessar seu domínio pela URL configurada:

dev.viniciuspaes.com

Ou se optou por não configurar um domínio e SSL, basta acessar pelo endereço IP do seu servidor. Exemplo de um servidor configurado na porta 192.168.1.100:

  • http://192.168.1.100:8080
  • https://192.168.1.100:8081

Conclusão

O processo para criação do container com suporte a páginas html pelo httpd (apache) é bem simples. O docker compose permite uma estrutura bem legível das configurações do container, permitindo parametrizações de acordo com as necessidades. Com este container, podemos servir páginas html de forma bem intuitiva, inserindo os arquivos na pasta public_html.