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