Como posso instalar vários aplicativos Atlassian em um único servidor?

1

Ok, esta é uma questão de duas partes.

Eu tenho um VPS não gerenciado com o CentOS de uma empresa de hospedagem para instalar várias ferramentas da Atlassian. No entanto, deparei com o problema de que, ao iniciar uma segunda aplicação, a primeira começa a falhar.

Até agora eu instalei o Confluence (rodando na porta 8090), o JIRA (rodando em 8080) e o Crowd (alguma outra porta que eu não consigo lembrar), mas eu só posso rodar um de cada vez. Eu tentei configurar um proxy reverso, mas isso não parece funcionar.

Enquanto fazia algumas pesquisas, descobri que aparentemente isso não é possível: link link

Acho isso estranho, já que pensei que cada aplicativo da Atlassian veio com seu próprio Tomcat ... então estou pensando se eu só preciso encontrar uma maneira de "usar diferentes contêineres do Tomcat", mas eu sou estúpido e não sei nem sei o que isso significa (sim, usei os googles e eles não fazem nada).

Então, parte # 1: estou faltando alguma coisa ?, ou simplesmente não há como fazer isso de uma maneira aceita

Acho que encontrei uma solução, no entanto, contêineres do Linux:

link link link

Como eles parecem isolar o ambiente de execução e até mesmo permitir que você configure o roteamento de rede entre o contêiner e seu SO.

Então, parte 2: os containers / docker linux são a solução aceita para meus problemas?

Eu sinceramente não sinto vontade de alugar vários servidores ...

    
por dukeofgaming 17.04.2015 / 07:53

3 respostas

1

I ran into the problem that when starting a second application, the first one begins to crash.

Você não mencionou nenhuma especificação do sistema do seu VPS. Para mim, isso parece que você está ficando sem memória. Você quer dizer que quando a aplicação falha, a JVM não é mais mostrada na lista de processos? Você deve verificar a saída de dmesg para ver se a JVM foi eliminada pelo killer da OOM.

I find this weird, since I thought each Atlassian app came with it's own Tomcat... so I'm wondering if I just need to find a way to "use different Tomcat containers",

Todos os aplicativos da Atlassian são empacotados com um Tomcat. Você também pode baixar os aplicativos nos pacotes WAR. Você pode implantar esses pacotes em seus próprios servidores de aplicativos, se quiser, mas isso é outra história.

Colocar todos os aplicativos em um contêiner do Tomcat não é sábio. De sua descrição deduzo que você não está familiarizado com a execução de vários aplicativos em uma instância do Tomcat. Portanto:

  • Os aplicativos que você menciona (Confluence, JIRA, Crowd) têm requisitos de memória diferentes, especialmente quando você instala plugins neles. Você vai encontrar erros de OOM com muita facilidade.
  • A atualização dos aplicativos é muito mais fácil quando todos os aplicativos estão em execução em suas próprias instâncias do Tomcat. De uma perspectiva de segurança, isso é muito importante.
  • Se você quiser migrar um aplicativo para outro servidor, basta copiar toda a instância do Tomcat como está com o aplicativo. Apenas pequenas alterações de configuração são necessárias.

Um fluxo de trabalho muito breve para instalar esse ambiente:

  • Crie usuários separados para todos os aplicativos.
  • Baixe aplicativos (a versão do pacote do Tomcat) e extraia-os.
  • Configure server.xml para que os aplicativos estejam sendo executados em portas diferentes. Isso é crucial. Caso contrário, apenas um aplicativo pode reservar uma porta TCP para o conector HTTP / AJP do Tomcat. Use uma porta exclusiva por aplicativo.
  • Crie hosts virtuais para todos os aplicativos.
  • Inicie os aplicativos por usuário do aplicativo.

So, part #2: are linux containers / docker the accepted solution to my problems?

É uma solução. Você deve considerar sua configuração. Se sua configuração atual permitir que você execute todos os aplicativos em suas próprias instâncias do Tomcat, quais são os benefícios de executá-los em contêineres separados do Linux? É muito fácil manipular sua configuração com o Docker. Além disso, se o Docker não for algo com o qual você esteja familiarizado, você terá que aprender a usá-lo.

    
por 28.04.2015 / 17:32
1

Isso é certamente possível, mas você usará três contêineres diferentes do Tomcat.

Cada produto pode ser executado de forma independente. IIRC, algo parecido com isto

/.../crowd/bin/start_crowd.sh
/.../jira/bin/start-jira.sh
/.../confluence/bin/start-confluence.sh

E você vai querer, digamos, o Apache httpd operando como um proxy reverso. Então / multidão aponta para sua porta de crowd, / jira aponta para sua porta jira, e / confluence aponta para sua porta de confluência.

Esses caminhos estarão errados, mas esperamos que você tenha a idéia (com /.../ sendo que você descompactou o produto).

Você pode fazer com que eles também usem JAVA_HOMEs iguais ou diferentes, o que pode ser útil se a pessoa / equipe responsável pela execução do aplicativo for diferente da pessoa / equipe que gerencia o sistema operacional.

Eu tenho um script de inicialização adequado para iniciar a pilha inteira (Crowd, Jira e depois Confluence nessa ordem e testar se está pronto antes de iniciar o próximo). É escrito para RHEL 5. Chame se você precisar; economiza tempo durante o patch.

    
por 17.04.2015 / 11:56
1

No momento, estou usando o apache como proxy reverso e 5 instâncias de jira.

<VirtualHost *:80>
    ServerName jira1.example.net

    ProxyTimeout 300
    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/

    <Location />
        Order allow,deny
        Allow from all
    </Location>
</VirtualHost>

<VirtualHost *:80>
    ServerName jira2.example.net

    ProxyTimeout 300
    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass / http://127.0.0.1:8181/
    ProxyPassReverse / http://127.0.0.1:8181/

    <Location />
        Order allow,deny
        Allow from all
    </Location>
</VirtualHost>

Tudo que você precisa é vincular cada instância de jira / confl / crowd à porta exclusiva. Para cada instância de jira, você deve editar o atlassian / jira / conf / server.xml

<Service name="Catalina">
   <Connector port="8080"
      maxThreads="150"
      minSpareThreads="25"
      connectionTimeout="20000"

      address="127.0.0.1"
      proxyName="jira1.example.net"
      proxyPort="80"
      scheme="http"

      enableLookups="false"
      maxHttpHeaderSize="8192"
      protocol="HTTP/1.1"
      useBodyEncodingForURI="true"
      redirectPort="8443"
      acceptCount="100"
      disableUploadTimeout="true"/>


<Service name="Catalina">
   <Connector port="8181"
      maxThreads="150"
      minSpareThreads="25"
      connectionTimeout="20000"

      address="127.0.0.1"
      proxyName="jira2.example.net"
      proxyPort="80"
      scheme="http"

      enableLookups="false"
      maxHttpHeaderSize="8192"
      protocol="HTTP/1.1"
      useBodyEncodingForURI="true"
      redirectPort="8443"
      acceptCount="100"
      disableUploadTimeout="true"/>
    
por 17.04.2015 / 12:08