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.