ZUP API
Copyright (C) <2014> <Instituto TIM>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Sabemos que o manejo de informação é uma das chaves para uma gestão eficiente, para isso o ZUP apresenta um completo histórico de vida de cada um dos ativos e dos problemas do município, incorporando solicitacões de cidadãos, dados georeferenciados, laudos técnicos, fotografias e ações preventivas realizadas ao longo do tempo. Desta forma, o sistema centraliza todas as informações permitindo uma rápida tomada de decisões tanto das autoridades como dos técnicos em campo.
Esse componente é toda a base do processamento de informação do ZUP, atuando como o ponto final de consumo de todos os componentes envolvidos no sistema, tais como:
- Painel administrativo WEB
- Aplicativo WEB para cidadão
- Aplicativo ANDROID para cidadão
- Aplicativo ANDROID para uso técnico
- Aplicativo iOS para cidadão
Esse README informa como subir o projeto em ambiente para desenvolvimento. Para informações sobre como fazer o deploy do projeto para produção, leia o Guia de instalação.
O ZUP-API é um projeto escrito em Ruby com diversos componentes e bibliotecas.
Para instalar o ZUP na sua máquina, para desenvolvimento, você precisará:
- Linux server, recomendamos Ubuntu 14.04+ ou Debian 8.0+
- Banco de dados Postgres 9.4+
- Extensão para dados geoespaciais Postgis 2.1+
- Editor de imagens via linha de comando ImageMagick 6.8+
- Armazenador/cache e balance de estrura de dados em memória Redis 2.8.9
- Compilador de linguagem - Ruby 2.2.1
- Versionador de código - GIT 2.7+
- GEOS - Geometry Engine, Open Source GEOS
- Cubes Cubes 1.0.1
- Tenha um servidor Ubuntu 14.04+ ou Debian 8.0+ instalado e atualizado. `
2. Como root, crie um usuário para aplicação. Usaremos esse usuário para executar algumas coisas:
3. Instale o postgres e postgis:
apt-get install postgresql postgresql-contrib postgis postgresql-9.4-postgis-2.1 postgresql-9.4-postgis-2.1-scripts
Fique atento quanto a versão instalada, você poderá usar a 9.4 ou superior. Caso esteja usando um servidor já com Postgres, verifique a versão com o seguinte comando:
$ psql --version
`
Caso esteja usando Ubuntu 14.04, é possível que a versão 9.4 do postgres não esteja disponível. Nesse caso, adicione o repositório do postgres no server para baixar a versão mais nova. Veja mais infos aqui.
// Abra o arquivo source.list do sistema com seu editor de preferencia (aqui usamos vi)
# vi /etc/apt/source.list
// Acrescente a linha do repositório voltada para a versão do ubuntu 14.04
# deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main
// Salve o arquivo e rode este comando
# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# sudo apt-get update
// Feito isso com sucesso você já pode rodar novamente o comando de instalação do postgres e postgis
# apt-get install postgresql postgresql-contrib postgis postgresql-9.4-postgis-2.1 postgresql-9.4-postgis-2.1-scripts
4.Instale o ImageMagic:
# apt-get install imagemagick
5.Instale o git:
# apt-get install git
6.Instale o Ruby, utilizaremos o RVM mas fique a vontade para instalar de outra forma:
// Antes de instalar precisamos de de uma chave publica de segurança
# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
// Baixe a versão estável
# \curl -sSL https://get.rvm.io | bash -s stable
// Recarreque o shell
# source ~/.rvm/scripts/rvm
// Teste o RVM
# type rvm | head -n 1
// Instale a versão 2.2.1 do ruby
# rvm install 2.2.1
// Cheque se o ruby foi instalado
# ruby -v
7.Instale o Redis - Ver mais infos aqui http://redis.io/download
// Instale o buld-essencials para compilar o código
# sudo apt-get install build-essential
//Baixe o código
$ wget http://download.redis.io/releases/redis-stable.tar.gz
// Descompacte a pasta
$ tar xzf redis-3.2.0.tar.gz
// Entre na pasta do fonte da aplicação
$ cd redis-3.2.0
// Rode o make
$ make
Caso tenho problemas de instalação causado por algumas bibliotecas faltantes como jemalloc, execute os seguintes passos:
// Instale o jemalloc
$ cd deps
$ make jemalloc
$ make hiredis lua jemalloc linenoise
Rode o make test e depois instale no sistema:
$ make test
$ sudo make install
Os binários ficarão compilados no diretório /src. Você pode rodar o regis com
// Server
$ src/redis-server
// Client
$ src/redis-cli
Após instalada essas dependências, vamos instalar as bibliotecas, rode o seguinte comando na raiz do projeto:
bundle install
Após ter instalado essas bibliotecas, você precisa configurar as variáveis de ambiente para a aplicação funcionar corretamente.
Abrindo o arquivo sample.env
na raiz do projeto você tem todas as variáveis de ambiente disponíveis para a configuração do projeto.
Copie este arquivo para a raiz do projeto com o nome .env
e preencha pelo menos as variáveis que são obrigatórias para o funcionamento do componente:
API_URL
- URL completa na qual a API responderá (incluir a porta, caso não seja a porta 80)SMTP_ADDRESS
- Endereço do servidor de SMTP para envio de emailSMTP_PORT
- Porta do servidor de SMTPSMTP_USER
- Usuário para autenticação do SMTPSMTP_PASS
- Senha para autenticação do SMTPSMTP_TTLS
- Configuração TTLS para o SMTPSMTP_AUTH
- Configuração do modo de autenticação do SMTPREDIS_URL
- URL onde o servidor Redis está ouvindo (ex.: redis://10.0.0.1:6379)WEB_URL
- A URL completa da URL onde o componente ZUP-PAINEL está acessível publicamente
Após configurar as variáveis de ambiente no arquivo .env
, você estará pronto para configurar o banco de dados.
Primeiramente, copie o arquivo config/database.yml.sample
para config/database.yml
e modifique com os dados do seu Postgres.
Feito isso, faça o setup do banco de dados:
rake db:setup
Ao final desse comando será gerado um usuário e senha de administrador, anote-os em um lugar seguro, você precisará dele para logar no sistema pela primeira vez.
Para iniciar o servidor, você só precisa executar o seguinte comando:
bundle exec foreman start -f Procfile.dev
Se tudo estiver ok, este deverá ser o seu output:
12:05:22 web.1 | started with pid 63360
12:05:22 worker.1 | started with pid 63361
12:05:23 web.1 | =============== Phusion Passenger Standalone web server started ===============
12:05:23 web.1 | PID file: /Users/user/projects/zup-api/passenger.3000.pid
12:05:23 web.1 | Log file: /Users/user/projects/zup-api/log/passenger.3000.log
12:05:23 web.1 | Environment: development
12:05:23 web.1 | Accessible via: http://0.0.0.0:3000/
12:05:23 web.1 |
12:05:23 web.1 | You can stop Phusion Passenger Standalone by pressing Ctrl-C.
12:05:23 web.1 | Problems? Check https://www.phusionpassenger.com/library/admin/standalone/troubleshooting/
12:05:23 web.1 | ===============================================================================
12:05:25 web.1 | App 63391 stdout:
12:05:29 worker.1 | /Users/user/projects/zup-api/lib/mapquest.rb:6: warning: already initialized constant Mapquest::API_ROOT
12:05:29 worker.1 | /Users/user/projects/zup-api/lib/mapquest.rb:6: warning: previous definition of API_ROOT was here
12:05:29 worker.1 | 2015-09-23T15:05:29.390Z 63361 TID-owtng2518 INFO: Booting Sidekiq 3.4.2 with redis options {:url=>"redis://127.0.0.1:6379", :namespace=>"zup"}
12:05:29 worker.1 | 2015-09-23T15:05:29.431Z 63361 TID-owtng2518 INFO: Cron Jobs - add job with name: unlock_inventory_items
12:05:29 worker.1 | 2015-09-23T15:05:29.437Z 63361 TID-owtng2518 INFO: Cron Jobs - add job with name: set_reports_overdue
12:05:29 worker.1 | 2015-09-23T15:05:29.443Z 63361 TID-owtng2518 INFO: Cron Jobs - add job with name: expire_access_keys
12:05:29 worker.1 | 2015-09-23T15:05:29.454Z 63361 TID-owtng2518 INFO: Running in ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-darwin14]
12:05:29 worker.1 | 2015-09-23T15:05:29.454Z 63361 TID-owtng2518 INFO: See LICENSE and the LGPL-3.0 for licensing details.
12:05:29 worker.1 | 2015-09-23T15:05:29.454Z 63361 TID-owtng2518 INFO: Upgrade to Sidekiq Pro for more features and support: http://sidekiq.org/pro
12:05:29 worker.1 | 2015-09-23T15:05:29.454Z 63361 TID-owtng2518 INFO: Starting processing, hit Ctrl-C to stop
12:05:30 web.1 | App 63391 stderr: /Users/user/projects/zup-api/lib/mapquest.rb:6: warning: already initialized constant Mapquest::API_ROOT
12:05:30 web.1 | App 63391 stderr: /Users/user/projects/zup-api/lib/mapquest.rb:6: warning: previous definition of API_ROOT was here
12:05:31 web.1 | App 63411 stdout:
Você poderá acessar a seguinte URL para certificar-se que o servidor subiu corretamente:
Está pronto! Para maiores informações sobre os componentes internos da API, leia os documentos escritos na pasta docs/
que pode ser encontrada na raiz do projeto.
O ZUP utiliza o Cubes para a interface analítica com o banco de dados, fornecendo os dados e funcionalidades necessárias para o funcionamento do módulo de relatórios.
Para isto, é necessário a instalação do Cubes na versão 1.0.1, você pode utilizar o seguinte comando para instalar através do pip:
pip install Flask SQLAlchemy psycopg2 cubes==1.0.1