Instalando o Apache2 e configurando SSL/TLS

Instalando o Apache2

sudo apt install apache2

Copie os arquivos do seu projeto para o Document root do Apache: /var/www/html

Altere as permissões de dono e grupo para o usuário do apache: 

sudo chown -R www-data:www-data /var/www/html/

Aplicando URL Rewriting

Avalie se para o seu caso o rewrite é aplicável.
Ativando o mod_rewrite

sudo a2enmod rewrite

Apache rodando sem SSL/TLS, edite o arquivo:

/etc/apache2/sites-available/000-default.conf

Dentro do bloco de código <VirtualHost *:80> </VirtualHost> , insira a configuração a seguir. O bloco deve ficar mais ou menos assim:

<VirtualHost *:80>
  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>
  <Directory /var/www/html>
    Options FollowSymLinks
    AllowOverride All
    Order Allow,Deny
    Allow from all
  </Directory>
</VirtualHost>

Apache rodando com SSL/TLS, edite o arquivo:

/etc/apache2/sites-available/000-default-ssl.conf

Obs: Pode haver variação no nome desse arquivo dependendo de como foi configurado o ssl/tls.

Dentro do bloco de código <VirtualHost *:443> </VirtualHost>, insira a configuração abaixo:

<VirtualHost *:443>
  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>
  <Directory /var/www/html>
    Options FollowSymLinks
    AllowOverride All
    Order Allow,Deny
    Allow from all
  </Directory>
</VirtualHost>

Reinicie o Apache2

sudo systemctl restart apache2

Configurando a criptografia na comunicação  (certificado digital/HTTPS/TLS/SSL)


Com Let’s Encrypt

Siga os passos descritos no site da organização https://letsencrypt.org/getting-started/ .Geralmente instalar usando o https://certbot.eff.org/ dá certo.

Observação

Quando tentei instalar o certificado em instâncias da AWS, utilizando o DNS público da instância, exemplo ec2-52-548-54-242.compute-1.amazonaws.com, não deu certo.

Criando o seu certificado

Habilitando o módulo ssl

sudo a2enmod ssl

Reiniciando o Apache2

sudo systemctl restart apache2

Criando a pasta onde ficará armazenado os arquivos do certificados:

sudo mkdir /etc/apache2/ssl

Criando os arquivos da chave e certificado

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

Durante o processo de criação, irão aparecer algumas perguntas para você responder, a mais importante é “Common Name (e.g. server FQDN or YOUR name)”, insira o nome do seu domínio ou o IP público do seu servidor WEB.

Edite o arquivo de configuração do ssl:

sudo vim /etc/apache2/sites-available/default-ssl.conf

Sem os comentários, ele deve estar mais ou menos assim:

<IfModule mod_ssl.c>
   <VirtualHost _default_:443>
   	ServerAdmin webmaster@localhost
   	DocumentRoot /var/www/html
   	ErrorLog ${APACHE_LOG_DIR}/error.log
   	CustomLog ${APACHE_LOG_DIR}/access.log combined
   	SSLEngine on
   	SSLCertificateFile  /etc/ssl/certs/ssl-cert-snakeoil.pem
   	SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
   	<FilesMatch "\.(cgi|shtml|phtml|php)$">
           	SSLOptions +StdEnvVars
   	</FilesMatch>
   	<Directory /usr/lib/cgi-bin>
           	SSLOptions +StdEnvVars
   	</Directory>
   </VirtualHost>
</IfModule>

Edite o arquivo para ele ficar assim:

<IfModule mod_ssl.c>
	<VirtualHost default:443>
    	 ServerAdmin admin@example.com
    	 ServerName your_domain.com
    	 ServerAlias www.your_domain.com
    	 DocumentRoot /var/www/html
    	 ErrorLog ${APACHE_LOG_DIR}/error.log
    	 CustomLog ${APACHE_LOG_DIR}/access.log combined
    	 SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.crt
    	 SSLCertificateKeyFile /etc/apache2/ssl/apache.key
    	<FilesMatch ".(cgi|shtml|phtml|php)$">
        	SSLOptions +StdEnvVars
    	</FilesMatch>
    	<Directory /usr/lib/cgi-bin>
        	SSLOptions +StdEnvVars
    	</Directory>
	</VirtualHost>
</IfModule>

Habilitando a configuração

sudo a2ensite default-ssl.conf

Reiniciando o Apache2

sudo systemctl restart apache2

Ativando redirecionamento HTTP para HTTPS

Ativando o redirecionamento usando virtualHost

Edite o arquivo:

sudo vim /etc/apache2/sites-available/000-default.conf

Adicione a linha no bloco <VirtualHost *:80> </VirtualHost> e salve.

Redirect / https://seu-dominio-aqui.com

Reiniciando o Apache2

sudo systemctl restart apache2

Trabalhando as permissões de arquivo

Alterando a propriedade e grupo da pasta /var/www/html/ para o usuário do apache: 

sudo chown -R www-data:www-data /var/www/html/

Alterando as permissões de acesso da pasta.
Obs: Esse nível de acesso pode variar conforme a sua necessidade.

sudo chmod -R 750 /var/www/html/

Debugando problemas

Para acompanhar as requisições que estão chegando:

tail -f /var/log/apache2/access.log

Para acompanhar os erros:

tail -f /var/log/apache2/error.log

Referências

Docker: Comandos basicos

O processo de instalação no Ubuntu e derivados você pode encontrar aqui e para Windows aqui.

Sintaxe do comando Docker: 

usuario@host# docker [OPTIONS] COMMAND [ARG...]

O docker é uma CLI (comand-line interface).

usuario@host# docker --version
Docker version 19.03.5, build 633a0ea838

O –version é uma opção. Para ver outras opções execute o comando man docker

usuario@host# docker run hello-world

O run é um comando do docker. Ao executar esse comando, caso a imagem hello-world não exista na sua máquina, o docker solicita ao docker hub e baixa a imagem

Listar os containers em execução

docker ps

Listar todos os containers da máquina

docker ps -a

Na saída do comando, cada coluna tem seu significado:
IMAGE -> imagem que esse container utilizou 
COMMAND -> O comando que foi executado
PORTS -> Se o container estiver respondendo em uma porta, aparecerá aqui.
NAMES -> Se não for dado um nome ao container o docker dará um nome a ele.

Listar as imagens da minha máquina

docker images

Na saída do comando, cada coluna tem seu significado:
REPOSITORY -> Nome da imagem
TAG -> versão da imagem

Criar um container com interatividade, terminal e dando um nome

docker run -ti --name [nome] [nome-da-imagem] /bin/bash

Exemplo: docker run -ti –name desenvolvimento ubuntu /bin/bash

O /bin/bash é um comando que eu posso executar ao rodar o container.

O –name [nome] é um nome que você pode dar para o container.

Criar e executar um container em background (demon)

docker run -d [imagem]

Criar um container com limitação de memória

docker run -ti --memory 512m --name teste ubuntu 

Criar um container a partir de uma versão específica de imagem

docker run [nome-da-imagem]:[versao]
Exemplo: docker run centos:7

Finalizar o container por dentro

CTRL+D

Esse atalho finaliza o  processo principal do container e por conseguinte encerra o finaliza.

Sair do container sem finalizar

CTRL+P+Q

Entrar em um container já em execução

docker attach [CONTAINER ID | NOME-CONTAINER]

Dar um STOP no container

docker stop [CONTAINER ID | NOME-CONTAINER]

Dar um START em um container ‘stopado’

docker start [CONTAINER ID | NOME-CONTAINER]

Dar um PAUSE no container

docker pause [CONTAINER ID | NOME-CONTAINER]

Despausar um container

docker unpouse  [CONTAINER ID | NOME-CONTAINER]

Saber o consumo de recursos do container

docker stats  [CONTAINER ID | NOME-CONTAINER]

Saber o consumo dos processos rodando no container

docker top [CONTAINER ID | NOME-CONTAINER]

Listar os logs do container

docker logs [CONTAINER ID | NOME-CONTAINER]

Remover um container

docker rm [CONTAINER ID | NOME-CONTAINER]

Se o container estiver em execução você precisa acrescentar o parametro -f:

docker rm -f [CONTAINER ID | NOME-CONTAINER]

Saber todas as informações sobre um container

docker inspect [CONTAINER ID | NOME-CONTAINER]

Criar um container passando um volume

docker run -ti -v /volume [nome-da-imagem] [comando]

Descobrir onde está o diretório no HOST-DOCKER que foi criado o volume

docker inspect -f {{.Mounts}} [CONTAINER ID | NOME-CONTAINER]

Criar um container mapeando um diretório local para um volume dentro do container

docker run -ti -v /diretorio-no-host-docker:/volume [nome-da-imagem] [comando]

Referências

Descomplicando o docker v1 (Linux Tips)