Pular para o conteúdo principal

Pré-requisitos

Antes de prosseguir, certifique-se de ter a versão mais recente do docker e do docker-compose instalada. A partir de agora [no momento em que este documento foi escrito], recomendamos uma versão igual ou superior à seguinte.
$ docker --version
Docker version 20.10.10, build b485636
$ docker compose version
Docker Compose version v2.14.1
O nome do contêiner usa traços em vez de sublinhados por padrão com as novas versões do docker/compose. Se você estiver usando uma versão mais antiga do docker/compose, substitua - por _. Além disso, use docker-compose em vez de docker compose.

Passos para implantar o AirysChat usando docker-compose

1. Instale o Docker em sua VM

# exemplo no ubuntu
apt-get update
apt-get upgrade
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
apt install docker-compose-plugin

2. Baixe os arquivos necessários

# Baixar o template do arquivo de ambiente
wget -O .env https://raw.githubusercontent.com/airyschat/airyschat/develop/.env.example
# Baixar o template do Docker compose
wget -O docker-compose.yaml https://raw.githubusercontent.com/airyschat/airyschat/develop/docker-compose.production.yaml

3. Configurar variáveis de ambiente

Ajuste o .env e o docker-compose.yaml de acordo com suas preferências. Consulte as variáveis de ambiente disponíveis. Você também pode remover os serviços dependentes como Postgres, Redis etc., em favor de serviços gerenciados configurados via variáveis de ambiente.
# atualizar senhas do redis e postgres
nano .env
# atualizar docker-compose.yaml com a mesma senha do postgres
nano docker-compose.yaml

4. Preparar o banco de dados

docker compose run --rm rails bundle exec rails db:airyschat_prepare

5. Iniciar os serviços

docker compose up -d

6. Acesse sua instalação

Sua instalação do AirysChat está concluída. Observe que os contêineres não estão expostos à internet e eles se vinculam apenas ao host local. Configure algo como Nginx ou qualquer outro servidor proxy para fazer o proxy das solicitações para o contêiner. Se você quiser verificar se a instalação está funcionando, tente curl -I localhost:3000/api para ver se ele retorna 200. Além disso, você pode descartar temporariamente o 127.0.0.1:3000:3000 para o rails por 3000:3000 no arquivo compose para acessar sua instância em http://<your-external-ip>:3000. É recomendável reverter essa alteração e usar o Nginx ou algum servidor proxy na frente.

Etapas Adicionais

  1. Tenha um servidor web Nginx atuando como um proxy reverso para a instalação do AirysChat. Para que você possa acessar o AirysChat a partir de https://chat.yourdomain.com
  2. Execute docker compose run --rm rails bundle exec rails db:airyschat_prepare sempre que você decidir atualizar as imagens do AirysChat para lidar com as migrações.

Configurar o Nginx e Let’s Encrypt

1. Configure o Nginx para servir como um proxy frontend

sudo apt-get install nginx
cd /etc/nginx/sites-enabled
nano yourdomain.com.conf

2. Use a seguinte configuração do Nginx

Use a seguinte configuração do Nginx após substituir yourdomain.com em server_name.
server {
  server_name <yourdomain.com>;

  # Aponta o upstream para o Servidor de Aplicativo AirysChat
  set $upstream 127.0.0.1:3000;

  # Nginx remove o sublinhado nos cabeçalhos por padrão
  # AirysChat depende de sublinhado nos cabeçalhos para a API
  # Certifique-se de que a configuração esteja definida como on.
  underscores_in_headers on;
  location /.well-known {
    alias /var/www/ssl-proof/airyschat/.well-known;
  }

  location / {
    proxy_pass_header Authorization;
    proxy_pass http://$upstream;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Ssl on; # Opcional

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_http_version 1.1;
    proxy_buffering off;

    client_max_body_size 0;
    proxy_read_timeout 36000s;
    proxy_redirect off;
  }
  listen 80;
}

3. Verificar e recarregar a configuração do Nginx

nginx -t
systemctl reload nginx

4. Execute o Let’s Encrypt para configurar o certificado SSL

apt install certbot
apt-get install python3-certbot-nginx
mkdir -p /var/www/ssl-proof/airyschat/.well-known
certbot --webroot -w /var/www/ssl-proof/airyschat/ -d yourdomain.com -i nginx

5. Acesse sua instalação

Sua instalação do AirysChat deve estar acessível em https://yourdomain.com agora.

Passos para construir imagens você mesmo

Nós publicamos nossas imagens base no Docker hub. Você deve ser capaz de construir suas imagens web/worker do AirysChat a partir dessas imagens base.

Web

FROM airyschat/airyschat:latest
RUN chmod +x docker/entrypoints/rails.sh
ENTRYPOINT ["docker/entrypoints/rails.sh"]
CMD bundle exec bundle exec rails s -b 0.0.0.0 -p 3000

Worker

FROM airyschat/airyschat:latest
RUN chmod +x docker/entrypoints/rails.sh
ENTRYPOINT ["docker/entrypoints/rails.sh"]
CMD bundle exec sidekiq -C config/sidekiq.yml
Os servidores de aplicativo serão executados disponíveis na porta 3000. Certifique-se de que as imagens se conectem aos mesmos servidores de banco de dados e Redis. Forneça a configuração para esses serviços por meio de variáveis de ambiente.

Configuração inicial do banco de dados

Para configurar o banco de dados pela primeira vez, você deve executar rails db:airyschat_prepare. Você pode obter erros se tentar executar rails db:migrate neste ponto.

Atualizando

Se você não estiver usando a tag latest ou latest-ce, primeiro você precisa alterar a tag desejada em seu arquivo docker-compose. Depois disso você pode baixar a nova imagem e começar a usá-las:
docker compose pull
docker compose up -d
Finalmente você pode precisar atualizar o banco de dados:
docker compose run --rm rails bundle exec rails db:airyschat_prepare

Executando o Console do Rails

docker exec -it $(basename $(pwd))-rails-1 sh -c 'RAILS_ENV=production bundle exec rails c'

Imagens docker do AirysChat CE edition

Se você quiser executar a edição AirysChat CE, substitua a tag da imagem do docker pela tag da versão foss equivalente. A tag do docker para a versão atual master seria latest-ce. Tags específicas de versão seguiriam o padrão v*-ce. Por exemplo, a tag da edição ce do docker para o AirysChat v2.3.2 seria v2.3.2-ce.