bossanovastudio / tmj

Turma da Mônica Jovem
http://tmjofilme.com.br/
0 stars 0 forks source link

Turma da Mônica Jovem

Como usar o docker

Criando ou re-configurando um container

docker-compose build [container-name]

Rodando um ou mais containers

docker-compose up [container-name] [container-name-2]

Rodando as aplicações

API

Criando ou re-configurando

Para gerar a imagem para o container, utilize o seguinte comando:

docker-compose build api

Para criação e migração do banco de dados:

docker-compose run --rm api rake db:create db:migrate

Subindo a aplicação

docker-compose up api

Crawler Social Network

Criando ou re-configurando

Para gerar a imagem para o container, utilize o seguinte comando:

docker-compose build crawler_sn

Para criação e migração do banco de dados:

docker-compose run --rm crawler_sn rake db:create db:migrate

Rodando o crawler

docker-compose run --rm crawler_sn

Crawler Parser

Criando ou re-configurando

Para gerar a imagem para o container, utilize o seguinte comando:

docker-compose build crawler_parser

Rodando o crawler

docker-compose run --rm crawler_parser

Acessar o terminal da API

docker-compose exec api bash
rails c

Popular API com dados da Ramona

User.create({ username: 'ramona', password: '123456', role: :editor, remote_image_url: 'https://s3-sa-east-1.amazonaws.com/cdntmjofilme/avatars/1/ramona.png' })
Provider.create({ user: User.where(username: 'ramona').first, provider: 'pinterest', uid: '840484486616463777' })
Provider.create({ user: User.where(username: 'ramona').first, provider: 'tumblr', uid: 'lunetalunatica' })
Provider.create({ user: User.where(username: 'ramona').first, provider: 'youtube', uid: 'UC2sp_4csOUc4VnmNdWxTXhQ' })

Popular remix com dados "fakes"

Balões e Stickers

Clique para expandir ```ruby Remix::Sticker.transaction do [ ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/1/balao21.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/2/balao2.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/3/balao8.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/4/balao11.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/5/balao19.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/6/balao9.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/7/balao14.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/8/balao4.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/9/balao1.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/10/balao16.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/11/balao7.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/12/balao13.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/13/balao6.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/14/balao15.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/15/balao5.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/16/balao10.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/17/balao22.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/18/balao17.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/19/balao20.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/20/balao18.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/21/balao12.png"], ["speech_balloon", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/22/balao23.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/23/onomatopeia4.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/24/sticker1.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/25/onomatopeia14.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/26/onomatopeia13.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/27/sticker7.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/28/onomatopeia8.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/29/onomatopeia11.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/30/sticker3.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/31/sticker2.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/32/onomatopeia15.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/33/onomatopeia12.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/34/onomatopeia16.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/35/onomatopeia2.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/36/sticker5.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/37/onomatopeia10.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/38/onomatopeia9.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/39/onomatopeia1.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/40/sticker6.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/41/sticker8.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/42/sticker10.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/43/onomatopeia6.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/44/onomatopeia7.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/45/sticker11.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/46/onomatopeia3.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/47/sticker4.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/48/sticker9.png"], ["common_sticker", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/sticker/image/49/onomatopeia5.png"] ].each do |pair| Remix::Sticker.create!(kind: pair[0], remote_image_url: pair[1]) end end ```

Categorias e Imagens

Clique para expandir ```ruby Remix::Category.transaction do [ { :name=>"casais", :cover=>"http://cdntmjofilme.s3.amazonaws.com/remix/remix/category/cover/1/cover.png", :images=>["http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/1/casais3.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/2/casais2.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/3/casais4.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/4/casais5.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/5/casais8.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/6/casais6.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/7/casais1.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/8/casais11.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/9/casais9.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/10/casais10.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/11/casais7.png"] }, { :name=>"turma", :cover=>"http://cdntmjofilme.s3.amazonaws.com/remix/remix/category/cover/2/cover.png", :images=>["http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/12/turma11.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/13/turma4.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/14/turma8.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/15/turma13.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/16/turma6.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/17/turma1.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/18/turma3.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/19/turma12.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/20/turma9.png"] }, { :name=>"personagens", :cover=>"http://cdntmjofilme.s3.amazonaws.com/remix/remix/category/cover/3/cover.png", :images=>["http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/21/personagem_v2_43.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/22/personagem_1.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/23/personagem_v2_55.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/24/personagem_16.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/25/personagem_36.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/26/personagem_v2_46.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/27/personagem_v2_47.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/28/personagem_26.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/29/personagem_v2_57.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/30/personagem_v2_60.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/31/personagem_3.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/32/personagem_38.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/33/personagem_39.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/34/personagem_40.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/35/personagem_v2_53.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/36/personagem_6.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/37/personagem_10.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/38/personagem_v2_61.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/39/personagem_13.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/40/personagem_19.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/41/personagem_33.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/42/personagem_v2_62.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/43/personagem_14.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/44/personagem_29.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/45/personagem_v2_58.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/46/personagem_22.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/47/personagem_34.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/48/personagem_23.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/49/personagem_32.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/50/personagem_v2_44.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/51/personagem_v2_45.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/52/personagem_11.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/53/personagem_v2_51.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/54/personagem_35.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/55/personagem_7.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/56/personagem_v2_50.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/57/personagem_28.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/58/personagem_21.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/59/personagem_v2_56.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/60/personagem_18.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/61/personagem_v2_48.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/62/personagem_27.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/63/personagem_30.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/64/personagem_5.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/65/personagem_v2_59.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/66/personagem_2.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/67/personagem_24.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/68/personagem_4.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/69/personagem_37.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/70/personagem_v2_42.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/71/personagem_v2_49.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/72/personagem_9.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/73/personagem_12.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/74/personagem_20.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/75/personagem_v2_54.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/76/personagem_31.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/77/personagem_17.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/78/personagem_v2_41.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/79/personagem_25.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/80/personagem_v2_52.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/image/image/81/personagem_8.png"] } ].each do |h| c = Remix::Category.create!(name: h[:name], remote_cover_url: h[:cover]) h[:images].each { |url| i = c.images.create!(remote_image_url: url) } end end ```

Cores de backgrounds

Clique para expandir ```ruby Remix::BackgroundColor.transaction do ["#E36069", "#BF40AB", "#5C5BC4", "#4FC495", "#EBCE41", "#EF8B4F", "#000000", "#FFFFFF"].each do |c| Remix::BackgroundColor.create!(color: c) end end ```

Patterns

Clique para expandir ```ruby Remix::Pattern.transaction do [ "http://cdntmjofilme.s3.amazonaws.com/remix/remix/pattern/image/1/pattern3.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/pattern/image/2/pattern4.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/pattern/image/3/pattern6.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/pattern/image/4/pattern5.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/pattern/image/5/pattern8.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/pattern/image/6/pattern2.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/pattern/image/7/pattern1.png", "http://cdntmjofilme.s3.amazonaws.com/remix/remix/pattern/image/8/pattern7.png" ].each do |url| Remix::Pattern.create!(remote_image_url: url) end end ```

Cores de texto

Clique para expandir ```ruby Remix::TextColor.transaction do [ ["#E36069", "#000000"], ["#BF40AB", "#000000"], ["#5C5BC4", "#000000"], ["#4FC495", "#000000"], ["#EBCE41", "#000000"], ["#EF8B4F", "#000000"], ["#000000", "#000000"], ["#FFFFFF", "#000000"], ["#000000", "#E36069"], ["#000000", "#BF40AB"], ["#000000", "#5C5BC4"], ["#000000", "#4FC495"], ["#000000", "#EBCE41"], ["#000000", "#EF8B4F"], ["#000000", "#FFFFFF"] ].each do |pair| # pair is fg, bg Remix::TextColor.create!(foreground: pair[0], background: pair[1]) end end ```

Provisionamento

Máquinas de produção estão usando a seguinte versão do Ubuntu:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"

Dependências necessárias

Software:

  1. docker-engine 1.12.5-0~ubuntu-xenial
  2. nginx 1.10.0-0ubuntu0.16.04.4

Env Files

/etc/tmj/deploy-vars

Contém informações para os scripts de deploy

export TMJ_ENV=master
export TMJ_INST_COUNT=2

/etc/tmj/env-vars

Contém variáveis de ambiente usadas pelos containers

FACEBOOK_APP_ID=
FACEBOOK_APP_SECRET=

TWITTER_CONSUMER_KEY=
TWITTER_CONSUMER_SECRET=
TWITTER_ACCESS_TOKEN=
TWITTER_ACCESS_TOKEN_SECRET=

GOOGLE_API_KEY=
GOOGLE_APP_NAME=

INSTAGRAM_CLIENT_ID=
INSTAGRAM_CLIENT_SECRET=

PINTEREST_APP_ID=
PINTEREST_APP_SECRET=

TUMBLR_API_KEY=
TUMBLR_TOKEN=
TUMBLR_TOKEN_SECRET=
TUMBLR_SECRET_KEY=

RDS_DB_NAME=
RDS_USERNAME=
RDS_PASSWORD=
RDS_HOSTNAME=
RDS_PORT=

CRAWLER_RDS_DB_NAME=
CRAWLER_RDS_USERNAME=
CRAWLER_RDS_PASSWORD=
CRAWLER_RDS_HOSTNAME=
CRAWLER_RDS_PORT=

AWS_ACCESS_KEY_ID=
AWS_S3_ASSETS_BUCKET=
AWS_S3_BUCKET=
AWS_SECRET_KEY=

MAILGUN_API_KEY=
MAILGUN_DOMAIN=

REDIS_URL=

API_URL=
ASSETS_URL=
SITE_URL=

QUEUE=*

FOG_DIRECTORY=
FOG_PROVIDER=
FOG_REGION=
AWS_SECRET_ACCESS_KEY=

MAILGUN_API_KEY=key-c736c844d65541ee60a9a43875ab868e
MAILGUN_DOMAIN=tmjofilme.com.br

SECRET_KEY_BASE=
RAILS_ENV=production

Scripts de deploy

Os subdiretórios do diretório deployment contido nesse repositório pode ser copiado para /root na máquina de produção. Após autenticar-se contra o DockerHub usando docker login, os seguintes comandos poderão ser executados:

# /root/deploy/crawlers/update.sh --force
# /root/deploy/web/update.sh --force

Configuração NGiNX

Copie o arquivo deployment/sites-available para /etc/nginx/sites-available.

Atualizações

Após atualizar qualquer imagem do DockerHub, /root/deploy/web/update.sh certifica-se de baixar e aplicar as atualizações.

Mergindo dev em master

Aviso: Essa seção da documentação assume que a máquina em que os comandos listados serão executados já possui o Docker CE instalado e uma conta do DockerHub configurada.

Após mergir as branches, é necessário gerar uma imagem e subi-la para o DockerHub. Para tal, certifique-se de que seu repositório local esteja usando a branch master, baixe todas as alterações presentes no remoto através do comando git pull --rebase, e execute o comando make web seguido de um make crawler.

Ambos os comandos são responsáveis por gerar uma imagem de produção e envia-lá ao DockerHub.

Caso o resultado de ambos os comandos seja positivo, conecte-se ao ambiente de produção e execute os scripts citados na seção Scripts de deploy.

Sources do Crawler

Fontes visitadas pelo crawler estão disponíveis no arquivo /crawlers/lib/social/statics.rb. Após alterar esse arquivo, será necessário executar um make crawler, tal como descrito na seção anterior. Após concluir o processo make, execute /root/deploy/crawlers/update.sh --force contra o ambiente desejado.

Mapeamento de branchs e ambientes

A fim de isolaremos completamente ambientes de produção e e teste (também chamado de staging), todo o desenvolvimento é executado na branch dev e testado em staging. Quando estável, o conteúdo de dev deve ser mergido contra master e enviado para produção.

Ambiente Branch
staging dev
production master