Não sei qual é a melhor maneira de fazer essa pergunta. Ao longo de vários anos desenvolvi meu caminho em um canto e preciso descobrir algumas coisas. Eu quase certamente não estive seguindo as melhores práticas até agora, mas lá está você.
Eu faço e hospedo sites do Django no meu próprio servidor Linux (Ubuntu). Eu gerencio o controle de versão com o Bazaar e faço o upload via SSH + BZR. Todos eles entram em um diretório pai imaginativamente chamado /websites/
. As cópias de produção são apenas ramificações master BZR (não exportações). Eu não executo nenhum tipo de servidor FTP, apenas SSH.
Meu fluxo de trabalho é editar uma cópia local de um site, confirmar a alteração. Como todos são ramificações vinculadas, o commit é enviado ao servidor automaticamente e tem um hook que executa uma atualização, que por sua vez decide se o site do Django precisa ser recarregado. Eu acabei de roteirizar as coisas para que elas trabalhem para mim.
Todos os arquivos dos sites são de propriedade da minha conta de usuário oli
. Os sites atualmente todos são executados por essa conta também.
Ocasionalmente, um cliente quer acessar seus sites de forma justa, mas não tenho certeza se posso fazer isso na estrutura atual. Acho que as coisas precisam mudar para que eu consiga as seguintes coisas:
-
Eu posso criar uma nova conta de usuário para um cliente, para que ele possa fazer login e jogar com os sites deles (e somente os deles). Eu confio em meus clientes, mas meus outros clientes não devem ser colocados em uma posição onde eu os force a confiar uns nos outros.
-
Ainda posso trabalhar em todos os sites como faria com minha própria conta, idealmente em um lugar, mas sobreviveria se, no servidor, eles fossem divididos com base nos usuários.
-
Se possível, force os usuários a passarem pelo BZR para não atrapalhar o ramo de produção com um fandom bobo que não pode ser revertido facilmente. Você sabe como isso funciona: se eu der acesso a um cliente e algo "misteriosamente" parar de funcionar, a culpa é minha, independentemente do que aconteceu. Eu preciso ser capaz de rastrear o que está acontecendo, mas da mesma forma os clientes precisam ser capazes de fazer mudanças sem a minha interação (o modelo VCS do gatekeeper não funcionaria para mim).
Então, supondo que eu possa fazer alguma coisa para alterar minha configuração atual, qual é a melhor maneira de fazer isso?
Minhas ideias atuais são:
-
Instalando um servidor FTP (et al) simples que é executado como oli
para preservar quaisquer permissões e tentar coagi-las a usar o BZR, mas de outra forma precisando sincronizar atualizações.
Se você acha que isso é viável, existe um equivalente seguro ao FTP que o sistema vê como um usuário, mas similarmente algo que posso limitar arbitrariamente a certos diretórios (por exemplo, cliente-cliente só pode ver um subconjunto dos diretórios do site? ).
-
Agite-se completamente, use logins SSH distintos, mantenha os sites em $HOME
dirs dos clientes. Se esse for o seu voto, qual é a minha melhor tática para impedi-los de fazer qualquer coisa além de acessar os arquivos deles ? Existe uma boa combinação para limitar ForceCommand internal-sftp
com um mecanismo chroot?
Mas aprendi maus hábitos ao invadir as coisas. Como você faz fazer isso?