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.
| Camada | O que é | Quem mexe |
|---|---|---|
| Organização | pessoas, cobrança, domínios e infraestrutura | dono e administradores |
| Ambiente | onde as coisas rodam; cada um aponta pra um cluster (Ambientes) | dono e administradores |
| Projeto | um produto; existe em todos os ambientes | os 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
apide 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,membersnemprojects; - não pode ser o slug de um dos ambientes de partida:
production,stagingedevelopment.
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 umapiem 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
| Papel | O que pode |
|---|---|
| dono | tudo, infraestrutura inclusive; é o único que mexe em cobrança, transfere ou apaga a organização |
| administrador | convida 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 |
| colaborador | acessa 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
| Papel | O que pode |
|---|---|
| administrador | tudo o que o desenvolvedor faz, mais gerenciar as pessoas do projeto e os usuários de banco (as credenciais de conexão) |
| desenvolvedor | criar, publicar e configurar apps, bancos, volumes e ligações entre app e banco, em qualquer ambiente do projeto |
| leitor | ver 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
- Dono e administrador da organização são administradores de todos os projetos.
- Membro é desenvolvedor em todos os projetos. Se tiver uma concessão maior num projeto, vale a concessão ali.
- 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:
| Ambiente | Slug | Cluster |
|---|---|---|
| Desenvolvimento (padrão) | development | cluster GoShip |
| Homologação (ativada) | staging | acme-sp, um cluster da acme na conta de nuvem dela |
| Produção | production | cluster GoShip |
Ela tem dois projetos além do default, e os dois existem nos três ambientes:
| Projeto | Slug | O que tem |
|---|---|---|
| Loja | loja | em produção, apps api e web e um banco PostgreSQL; em homologação, um app api |
| App mobile | app-mobile | em produção, app api e um banco |
acme-loja-apié oapida loja em produção: roda no cluster GoShip e é cobrado pelo plano.acme-loja-staging-apié outro app, também chamadoapidentro do projeto, em homologação: roda no cluster daacmee não paga plano por recurso.acme-app-mobile-apié um terceiro app, chamadoapidentro 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-mobilecomo desenvolvedora. Ela publica ali e não enxerga aloja. - Davi é colaborador em
lojacomo 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çaO 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.