Desenvolvimento

27 ago, 2012

Criando um repositório Clojars privado

Publicidade

Tenho escrito Clojure fora do trabalho por algum tempo. Recentemente, isso começou entrar no trabalho também. Nós chegamos a um ponto em que gostaríamos de ser capazes de compartilhar nossas bibliotecas. Quando adequado, nós fizemos as coisas em código aberto, mas nem sempre é possível. A maneira real de compartilhamento de bibliotecas Clojure é com Clojars; eu decidi implantar um repositório Clojars interno para compartilhar as coisas que não podemos tornar públicas. Aqui está como eu fiz.

Estou usando o Ubuntu para hospedar Clojars, e criei um domínio interno (clojars.private.com) para apontar para o serviço Clojars interno, que está rodando atrás do Nginx. Eu não vou descrever a instalação do Nginx – é bastante simples – mas vou mostrar a configuração que eu usei para o meu repositório Clojars.

Crie um usuário Clojars, clojars. Ele será o usuário que irá rodar Clojars.

adduser clojars

Coloque o fonte do Clojars em /opt. Rodei git clone com sudo e então usei chown para alterar a propriedade do diretório.

cd /opt
sudo git clone https://github.com/ato/clojars-web
sudo chown -R clojars:clojars clojars-web

Instale sqlite3 e crie o banco de dados do repositório.

cd /opt
sudo git clone https://github.com/ato/clojars-web
sudo chown -R clojars:clojars clojars-web

O Clojars está agora pronto para ser executado. Você pode testá-lo, executando o comando lein run. O aplicativo irá escutar na porta 8080. Certifique-se de que você está usando a versão 2 do Leiningen. Eu instalei Leiningen em /home/clojars/bin e acrescentei o diretório bin para o caminho do usuário clojars.

Clojars usa Nailgun quando recebe jars através de SSH. Instale Nailgun com apt-get install nailgun. Infelizmente no Ubuntu o executável nailgun é nailgun-ng, mas Clojars depende de ele ser chamado de ng. Eu criei um link simbólico em /usr/bin de ng-nailgun para ng com o comando ln -s /usr/bin/ng-nailgun /usr/bin/ng.

O webapp gera um arquivo authorized_keys SSH no diretório data, mas chama dev_authorized_keys. Crie um diretório SSH e vincule arquivos keys autorizados para o arquivo Clojars gerado.

sudo su - clojars
cd /home/clojars
mkdir .ssh
cd .ssh
ln -s /opt/clojars-web/data/dev_authorized_keys ./authorized_keys

Ubuntu usa o Upstart para gerenciar serviços. Crie um arquivo de configuração Upstart em /etc/init para que ele possa gerenciar Clojars também. Aqui está o arquivo clojars.conf que eu uso.

script
    cd /opt/clojars-web
    exec sudo -u clojars /home/clojars/bin/lein run --port 9020 --nailgun-port 8700
end script

Esse script não iniciará Clojars automaticamente quando o computador for inicializado. Adicione a linha start on started network-services antes de script fazê-lo. O Upstart cookbook possui diversas informações sobre como escrever scripts Upstart.

O script Upstart acima executa Clojars na porta 9020. Eu escolhi essa porta não-padrão para manter 8080 livre. Não se preocupe, 9020 não será visível na URL depois que Nginx for configurado.

Instale Nginx; garanta que o serviço esteja sendo executado. Eu uso o seguinte bloco server.

server {
        server_name clojars clojars.private.com;
        root /opt/clojars-web/data/dev_repo;

        location / {
            proxy_pass http://localhost:9020;
            proxy_redirect off;

            proxy_set_header Host $host;
            allow all;
        }

        location /repo {

            try_files $uri $uri/ /index.html;
            autoindex on;
            rewrite ^/repo/(.*) /$1 break;
        }
}

Agora você pode iniciar o serviço com sudo start clojars e parar com sudo stop clojars. Navegue até http://clojars.private.com e criar um usuário. Depois de ter adicionado a chave SSH pública, a implementação é tão fácil quanto scp pom.xml jarfile.jar clojars@clojars.private.com:.

Você pode dizer a Leiningen sobre o repositório em http://clojars.private.com/repo e ele vai baixar todas as suas dependências privadas.

***

Texto original disponível em http://www.andrewhjon.es/creating-a-private-clojars-repository