quinta-feira, 24 de outubro de 2013

Configurando o Sendmail para uso com o Jobsworth (ClockingIT)

O Sendmail é um sistema envio e recebimento de e-mail que pode ser usado em conjunto com com o Jobsworth. Os e-mails podem ser utilizados de duas formas. A primeira, quando o sistema envia alertas de novas atividades ou andamento em atividades já existentes. A segunda, quando o usuário responde ao e-mail de alerta enviado pelo sistema e esta resposta é automaticamente anexada aos andamentos da atividade correspondente.

Envio
Para configurar o Sendmail para envio de e-mails no Ubuntu 12.04:
1. Simplesmente instale o Sendmail
sudo apt-get install sendmail

e pronto! Você já pode enviar e-mails!

2. Supondo que o sendmail está instalado no mesmo servidor em que está a aplicação, configure o context.xml para usar localhost como SMTP.
  <!-- Jobsworth SMTP settings -->
  <Parameter name="config.smtp_host" value="localhost" override="false"/>
  <Parameter name="config.smtp_port" value="25" override="false"/>
  <Parameter name="config.smtp_domain" value="seudominio.com.br" override="false"/>


Crie uma nova tarefa e veja se chegou o e-mail de alerta do Jobsworth.

Recebimento
A configuração para recebimento de e-mails é um pouco mais complicada pois o Sendmail vai redirecionar os e-mails recebidos para um script do Linux. O sistema sabe a que atividade associar o e-mail que chegou porque o destinatário contém o código da mesma. Por exemplo:
task-1234@jobs.seudominio.com.br
[Aqui, jobs é o subdomínio definido no cadastro da empresa, na tabela ´companies´]

Vamos lá:
1. Instale o Sendmail. Se não estiver instalado, veja as instruções acima em "Envio".
2. Adicione o domínio em /etc/mail/local-host-names
jobs.seudominio.com.br

3. Adicione uma entrada em /etc/mail/aliases para associar um alias a um script.
jobsworth: "|/usr/local/share/jobsworth/mail_script.sh"

4. Adicione uma entrada em /etc/mail/virtusertable para direcionar os e-mails que chegam no nosso subdomínio para o alias criado acima. Possivelmente esse arquivo precisará ser criado.
@jobs.seudominio.com.br    jobsworth

5. Crie o script /usr/local/share/jobsworth/mail_script.sh que vai tratar de encaminhar o e-mail para uma chamada ao Jobsworth. A variável SECRET deve ser setada em ${TOMCAT_HOME}/context.xml e a variável URL deve conter o endereço do servidor.
#!/bin/sh
SECRET=password1234
URL=https://jobs.seudominio.com.br/emails
cat $2 | /usr/local/bin/curl -s -k --data-urlencode secret=${SECRET} --data-urlencode email@- ${URL}

6. Por segurança, a configuração padrão do Sendmail não envia e-mails. É preciso habilitá-lo para que o faça. Adicione o seguinte em /etc/mail/sendmail.mc
DAEMON_OPTIONS(`Family=inet,  Name=MTA-v4, Port=smtp, Addr=seu_ip_aqui')dnl

7. Por padrão, o Sendmail também não vem com virtusertable habilitado. Adicione o seguinte em /etc/mail/sendmail.mc
FEATURE(`virtusertable')dnl

Isso é suficiente para receber e-mails pelo Sendmail. Você pode fazer um teste com
telnet jobs.seudominio.com.br 25
Se aparecer algo parecido com
Connected to localhost.
Escape character is '^]'.
220 jobs.seudominio.com.br ESMTP Sendmail 8.12.8/8.12.8; Sun, 30 Nov 2003 13:19:45 +1300
seu servidor estará configurado corretamente.

Agora responda a um e-mail enviado pelo Jobsworth e veja se o corpo do e-mail aparece na lista de comentários da tarefa.

quinta-feira, 17 de outubro de 2013

Configurando o Apache como proxy reverso

A situação é a seguinte: eu tenho um web server Tomcat que roda na porta 8080 e quero expor a aplicação que roda lá sem que o usuário final tenha que digitar o :8080 no endereço.

A forma mais fácil e direta de fazer isso é alterando o conf/server.xml do Tomcat para que ele rode na porta 80. No entanto, a forma mais flexível e segura é configurando um proxy reverso - no nosso caso o Apache - para receber as solicitações na porta 80 e encaminhá-las para o servidor Tomcat. Para o usuário final, isso tudo fica invisível pois, para o browser, só vai existir um servidor web Apache comum na porta 80. Usar o proxy reverso permitirá inclusive criar um cluster de servidores Tomcat respondendo por um endereço só.

Como fazer isso no Ubuntu 12.04:

1. Instale o Apache e o mod_proxy
sudo apt-get install libapache2-mod-proxy-html libxml2-dev

2. Carregue o mod_proxy no Apache
a2enmod proxy_http

3. Abra o arquivo de configuração do Apache para edição
nano /etc/apache2/sites-enabled/000-default

4. Configure o endereço do Tomcat
<VirtualHost *:80>
   ServerAdmin admin@acme.com
   ServerName acme.com
   ServerAlias acme.com
   ProxyPass /nome_da_aplicacao http://servidor:8080/app
   ProxyPassReverse /nome_da_aplicacao  http://servidor:8080/app
</VirtualHost>


Em /nome_da_aplicacao você pode usar apenas / se quiser que ela apareça na raiz do Apache.

5. Reinicie o Apache
service apache2 restart

Pronto. Agora é só chamar a aplicação pelo browser.

terça-feira, 15 de outubro de 2013

Configurando o Jobsworth (ClockingIT)

O sistema de controle de projetos e chamados Jobsworth é um fork do ClockingIT. Desenvolvido em Ruby On Rails, há até bem pouco tempo se necessitava de algum conhecimento das dependências envolvidas na utilização deste framework para a instalação do pacote. A partir da versão 4.0, o Jobsworth traz a opção de usar o Tomcat como servidor web, tornando a instalação bem mais simplificada porque há disponível um arquivo com o sistema e todas as dependências que você precisará.

É neste cenário que montei um passo a passo para começar a utilizar o Jobsworth. Lá vai:

UPDATE FROM



Os usuários de SQL Server estão acostumados com o comando UPDATE FROM que não existe em outros SGBDs. Qual a alternativa ? Siga o exemplo:

Eu tenho uma tabela de produtos e outra tabela de grupos de produto. Se eu quero atualizar em 10% o preço de todos os produtos cuja grupo seja do tipo 1 eu uso o seguinte comando em SQL Server:

UPDATE PRODUTO
SET P.PRECO = P.PRECO * 1.1
FROM PRODUTO P, GRUPO G
WHERE P.ID_GRUPO = G.ID_GRUPO
AND G.TIPO = 1

No Oracle o UPDATE FROM não existe. Usa-se o seguinte:
UPDATE PRODUTO P
SET P.PRECO = P.PRECO * 1.1
WHERE EXISTS (SELECT *
FROM GRUPO G
WHERE G.ID_GRUPO = P.ID_GRUPO
AND G.TIPO = 1)