Skip to content

Organizações e projetos

Três camadas organizam tudo no GoShip. A organização é quem contrata: reúne as pessoas, a cobrança, os domínios e a infraestrutura. Os ambientes (desenvolvimento, homologação, produção) dizem onde as coisas rodam. O projeto é onde o trabalho acontece: um produto, com os seus apps, bancos e volumes em cada ambiente.

CamadaO que éQuem mexe
Organizaçãopessoas, cobrança, domínios e infraestruturadono e administradores
Ambienteonde as coisas rodam; cada um aponta pra um cluster (Ambientes)dono e administradores
Projetoum produto; existe em todos os ambientesos papéis do projeto

Organização

A organização é dona de:

  • Pessoas: quem entra, com qual papel.
  • Cobrança: uma só, na assinatura do dono. Os recursos de todos os projetos entram na mesma fatura — veja Planos e cobrança.
  • Domínios: só o dono e os administradores da organização mexem neles.
  • Infraestrutura: tudo o que dá lugar pro trabalho rodar, e que serve a todos os projetos:
    • ambientes: desenvolvimento, homologação (desativada até um administrador ativá-la), produção e os que você criar (Ambientes);
    • clusters: o cluster GoShip, ou os seus (uma máquina que o GoShip instala, ou um Kubernetes que você conecta) — veja Clusters;
    • contas de nuvem: as conexões com os seus provedores, que o GoShip usa pra criar clusters e servidores de banco (Contas de nuvem);
    • servidores de banco: os seus Cloud SQL, que qualquer ambiente pode usar (Banco no seu Google Cloud).

A infraestrutura é da organização, não de um projeto: um cluster ou uma conta de nuvem serve a qualquer ambiente de qualquer projeto.

Projetos

Um projeto reúne tudo o que pertence a um mesmo produto:

  • apps e os bancos ligados a eles;
  • volumes;
  • tudo isso por ambiente: o app api de produção e o de homologação são dois apps do mesmo projeto.

O projeto não escolhe onde roda. Quem decide isso é o ambiente, e o ambiente decide pelo cluster. Um projeto existe em todos os ambientes, mas só usa um quando tem algo lá (Ambientes).

Toda organização já nasce com um projeto, de slug default, com o nome da própria organização. Ele não pode ser apagado, mas nome e slug podem ser trocados em Project settings; default continua apontando pra esse projeto depois da troca, então goship project use default e configs antigas seguem funcionando. Quem usa só um projeto nunca vê a palavra “projeto” no painel: a barra lateral e o seletor mostram só a organização. Ao criar o segundo projeto, o formulário New project oferece renomear o primeiro.

Com mais de um projeto, a barra lateral lista todos eles no grupo Projects, cada um com suas páginas (Overview, Apps, Databases, Volumes e, pra quem administra, Project settings) dobradas sob o nome do projeto: o projeto em que você está começa aberto, os outros fechados, e qualquer um abre e fecha com um clique no nome. Numa página da organização, como Team, o projeto aberto é o último que você abriu, ou o default. All projects leva à página com todos os projetos da organização e New project cria outro. O seletor no topo do painel troca só de organização.

Slug do projeto

O slug identifica o projeto na CLI, na API e no goship.yaml:

  • começa com letra minúscula e tem até 31 caracteres, só com letras minúsculas, números e hífens, sem terminar em hífen (^[a-z]([a-z0-9-]{0,29}[a-z0-9])?$);
  • não pode ser new, settings, members nem projects;
  • não pode ser o slug de um dos ambientes de partida: production, staging e development.

Nome dos apps

Na plataforma, o app de um projeto se chama <org>-<projeto>-<app> em produção e <org>-<projeto>-<ambiente>-<app> nos outros ambientes. No projeto default o nome fica <org>-<app> em produção, como sempre foi, e <org>-<ambiente>-<app> nos outros ambientes. Daí duas consequências:

  • o nome do app precisa ser único dentro do projeto e do ambiente, não na organização: dois projetos podem ter um app api, e o mesmo projeto pode ter um api em homologação e outro em produção;
  • o nome completo tem no máximo 40 caracteres, então organização e projeto com slugs curtos deixam mais espaço pro app.

A regra completa, com bancos e volumes, está em Ambientes → Nomes na plataforma.

Papéis

Na organização

PapelO que pode
donotudo, infraestrutura inclusive; é o único que mexe em cobrança, transfere ou apaga a organização
administradorconvida pessoas, muda papéis da organização, gerencia a infraestrutura (ambientes, clusters, contas de nuvem e servidores de banco) e os domínios; é administrador de todos os projetos
membroé desenvolvedor em todos os projetos; uma concessão no projeto pode subir o papel dele a administrador ali
colaboradoracessa só os projetos em que foi incluído, com o papel concedido em cada um

Colaborador serve pra quem é de fora do time, como um freelancer ou um cliente: ele só alcança os projetos em que foi incluído.

No projeto

PapelO que pode
administradortudo o que o desenvolvedor faz, mais gerenciar as pessoas do projeto e os usuários de banco (as credenciais de conexão)
desenvolvedorcriar, publicar e configurar apps, bancos, volumes e ligações entre app e banco, em qualquer ambiente do projeto
leitorver apps, logs, status e unidades. Não vê variáveis de ambiente, nem abre shell, nem lê credenciais de banco

Desenvolvedores podem criar recursos pagos, e quem paga é a organização. Criar ou mudar ambientes, clusters, contas de nuvem e servidores de banco fica de fora do projeto: é só do dono e dos administradores da organização.

Como o papel efetivo é calculado

  1. Dono e administrador da organização são administradores de todos os projetos.
  2. Membro é desenvolvedor em todos os projetos. Se tiver uma concessão maior num projeto, vale a concessão ali.
  3. Colaborador só tem os projetos em que foi incluído, com o papel dado em cada um.

O papel vale em todos os ambientes do projeto: não há papel por ambiente.

Convites

Cada pessoa tem um convite por organização. O convite diz o papel na organização e, se quiser, os projetos com um papel em cada um. Um convite de colaborador precisa de pelo menos um projeto.

Exemplo: convidar uma freelancer só pro app mobile, com acesso de desenvolvedora, é um convite com papel colaborador e o projeto app-mobile como desenvolvedor.

Exemplo

A organização acme vende pela internet e tem também um aplicativo. A infraestrutura dela:

AmbienteSlugCluster
Desenvolvimento (padrão)developmentcluster GoShip
Homologação (ativada)stagingacme-sp, um cluster da acme na conta de nuvem dela
Produçãoproductioncluster GoShip

Ela tem dois projetos além do default, e os dois existem nos três ambientes:

ProjetoSlugO que tem
Lojalojaem produção, apps api e web e um banco PostgreSQL; em homologação, um app api
App mobileapp-mobileem produção, app api e um banco
  • acme-loja-api é o api da loja em produção: roda no cluster GoShip e é cobrado pelo plano. acme-loja-staging-api é outro app, também chamado api dentro do projeto, em homologação: roda no cluster da acme e não paga plano por recurso.
  • acme-app-mobile-api é um terceiro app, chamado api dentro do seu projeto.
  • Ana é dona da acme: administra os dois projetos e a infraestrutura, e recebe a fatura única.
  • Bruno é membro: desenvolve nos dois projetos, em qualquer ambiente. Criar um ambiente ou um cluster não é com ele.
  • Carla é colaboradora, convidada só em app-mobile como desenvolvedora. Ela publica ali e não enxerga a loja.
  • Davi é colaborador em loja como leitor: acompanha logs e status, sem ver variáveis nem credenciais.

Na CLI

goship projects                       # os projetos que você alcança, com o seu papel em cada um
goship project use loja               # fixa `loja` como padrão
goship project create app-mobile --name "App mobile"
goship deploy --project app-mobile    # só neste comando
goship environments                   # os ambientes, o cluster de cada um e se estão ativados
goship clusters                       # os clusters que a organização alcança

O projeto vale pro comando inteiro: goship apps, goship db create e os demais agem dentro dele, no ambiente em uso. A ordem de escolha do projeto, a variável GOSHIP_PROJECT e a chave project: do goship.yaml estão em Login, organização, projeto e ambiente e em goship.yaml. A escolha do ambiente está em Ambientes. Pra quem chama a API direto, os caminhos estão na Referência da API.

Os comandos de projeto estão disponíveis a partir da versão 0.5.0 da CLI.