Fazendo o deployment para a DigitalOcean

Com o azk, fazer o deployment de uma aplicação para a DigitalOcean é muito simples.

Configurando suas chaves SSH

O primeiro passo é configurar as chaves SSH em sua máquina. Elas vão ser úteis para fazermos a conexão ao droplet e para enviarmos os arquivos de seu projeto. Se você ainda não tem chaves SSH criadas em sua máquina (ou não tem certeza sobre isso), siga os passos 1 e 2 deste tutorial.

Atualizando seu Azkfile.js

Nota: Caso você tenha executado a aplicação a partir da galeria do Run Project, o Azkfile.js já está devidamente configurado e você pode pular esta etapa.

Em seguida, adicione o sistema deploy ao seu Azkfile.js:

systems({
  // ...

  deploy: {
    image: {"docker": "azukiapp/deploy-digitalocean"},
    mounts: {
      "/azk/deploy/src" :    path("."),
      "/azk/deploy/.ssh":    path("#{env.HOME}/.ssh"),
      "/azk/deploy/.config": persistent("deploy-config"),
    },
    scalable: {"default": 0, "limit": 0},
  },
  envs: {
    // Adicione aqui as opções de configuração do deploy
  }
});

Depois, adicione os seguintes http.domains ao seu sistema principal:

systems({
  'my-app': {
    // ...
    http: {
      domains: [
        "#{env.HOST_DOMAIN}",
        "#{env.HOST_IP}"
        // ...
      ]
    },
  },

  // ...
});

Obtendo uma chave de acesso para a API da DigitalOcean

Obtenha uma chave de acesso (personal access token - precisa estar logado) da DigitalOcean e coloque-o em um arquivo chamado .env:

$ cd path/to/the/project
$ echo "DEPLOY_API_TOKEN=COLOQUE-SEU-TOKEN-AQUI" >> .env

Fazendo o deployment da aplicação

Por fim, faça o deployment da aplicação rodando o seguinte comando:

$ azk deploy

Ferramentas adicionais

O comando azk deploy suporta argumentos que oferecem funcionalidades extras:

  • full: Força a reconfiguração do droplet (é o padrão executado no primeiro deploy);
  • fast: Faz o deploy da aplicação sem configurar o droplet (é o padrão para as demais execuções do deploy);
  • restart: Reinicia a aplicação no droplet;
  • versions: Lista todas as versões da aplicação deployadas no droplet (retorna as versões e o título do commit em cada versão correspondente);
  • rollback [ref]: Reverte a aplicação para uma versão anterior. O parâmetro [ref] pode ser um número de versão (e.g. v4), como retornado pelo comando azk deploy versions, ou uma referência do git (identificador de um branch, tag ou commit). Se nenhum parâmetro [ref] for passado, a aplicação será revertida para a versão anterior;
  • ssh: Cria uma conexão SSH com o droplet de destino da aplicação;
  • shell: Abre um terminal de dentro do container do sistema de deploy (ainda na máquina local do usuário);
  • clear-cache: Limpa os dados de configuração do deploy armazenados em cache;
  • help: Exibe uma mensagem de ajuda com instruções do deploy.

Exemplos:

$ azk deploy
$ azk deploy shell
$ azk deploy full
$ azk deploy fast
$ azk deploy versions
$ azk deploy rollback                 # reverte a aplicação para a versão anterior
$ azk deploy rollback v2              # reverte a aplicação para a versão v2
$ azk deploy rollback feature/add     # reverte a aplicação para o branch feature/add
$ azk deploy rollback 880d01a         # reverte a aplicação para o commit 880d01a
$ azk deploy restart

Customizações suportadas

Você pode alterar as configurações do deploy adicionando opções no objeto env. As opções disponíveis são:

  • DEPLOY_API_TOKEN: User's API token in DigitalOcean (precisa estar logado);
  • BOX_NAME (opcional, padrão: $AZK_MID || azk-deploy): Nome do droplet;
  • BOX_REGION (opcional, padrão: nyc3): Região onde o droplet será alocado. Veja todas as regiões disponíveis se seus nomes slug correspondentes aqui;
  • BOX_IMAGE (opcional, padrão: ubuntu-14-04-x64): Nome da imagem usada no droplet. O padrão é Ubuntu 14.04 x86-64 e nós recomendamos fortemente que você a use. Veja todas as imagens disponíveis e seus nomes slug correspondentes aqui;
  • BOX_SIZE (opcional, padrão: 1gb): Tamanho do droplet (envolve o número de CPUs, quantidade de memória RAM, capacidade de armazenamento e tráfego de dados). Veja todos os tamanhos de droplet disponíveis e seus nomes slug correspondentes aqui;
  • BOX_BACKUP (opcional, padrão: false): Se true, habilita o backup do droplet na DigitalOcean;
  • BOX_PRIVATE_NETWORKING (opcional, padrão: false): Se true, habilita para o droplet o acesso à rede privada da DigitalOcean naquela região;
  • LOCAL_PROJECT_PATH (opcional, padrão: /azk/deploy/src): Caminho do código fonte do projeto dentro do container de deploy;
  • LOCAL_DOT_SSH_PATH (opcional, padrão: /azk/deploy/.ssh): Caminho da pasta onde estão armazenadas as chaves SSH dentro do container de deploy. Caso nenhuma chave seja passada ao container, um novo par de chaves SSH será criado;
  • LOCAL_DOT_CONFIG_PATH (optional, padrão: /azk/deploy/.config): Caminho da pasta a ser mapeada como persistent folder no Azkfile.js. Utilizada como cache dos dados do deploy;
  • REMOTE_USER (opcional, padrão: git): Nome do usuário a ser criado (ou utilizado, caso já exista) no servidor remoto;
  • GIT_REF (optional, padrão: master): Objeto do git a ser deployado. Pode ser um branch, commit ou tag;
  • AZK_DOMAIN (opcional, padrão: azk.dev.io): Domínio do azk no namespace atual;
  • HOST_DOMAIN (opcional): Domínio com o qual a aplicação poderá ser acessada;
  • AZK_RESTART_COMMAND (optional, default: azk restart -R): Comando a ser executado após cada deploy;
  • REMOTE_PROJECT_PATH_ID (opcional): Por padrão, o projeto será criado na pasta /home/REMOTE_USER/REMOTE_PROJECT_PATH_ID (i.e., REMOTE_PROJECT_PATH) no servidor remoto. Se nenhum valor for informado, um valor aleatório será gerado;
  • REMOTE_PROJECT_PATH (opcional): Caminho onde o projeto será armazenado no servidor remoto. Se nenhum valor for informado, o valor utilizado será /home/REMOTE_USER/REMOTE_PROJECT_PATH_ID;
  • RUN_SETUP (opcional, padrão: true): Variável booleana que define se a instalação de dependências no servidor remoto deve ser executada;
  • RUN_CONFIGURE (optional, padrão: true): Variável booleana que define se a configuração do servidor remoto deve ser executada;
  • RUN_DEPLOY (opcional, padrão: true): Variável booleana que define se o passo de deploy da aplicação deve ser executado;
  • DISABLE_ANALYTICS_TRACKER (opcional, padrão: false): Variável booleana que define se o azk deve ou não coletar dados analíticos anonimamente;
  • ENV_FILE (optional, default: .env): Caminho para o arquivo .env que será copiado para o droplet.