API do plataforma Zeladoria Urbana Participativa (ZUP)
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.travis
app
config
cubes-model/zup.cubesmodel
cubes
db
docker
docs
lib
log
public
spec
tmp
vendor/assets
.dockerignore
.gitignore
.rspec.sample
.rubocop.yml
.rubocop_todo.yml
.ruby-gemset
.ruby-version
.travis.yml
CHANGELOG.md
Dockerfile
Gemfile
Gemfile.lock
LICENSE
Procfile
Procfile.dev
README.md
Rakefile
application.rb
boot.sh
build_and_test.sh
config.ru
docker-compose.yml
environment.rb
godfile.rb
kill_procs.sh
knapsack_rspec_report.json
nginx.conf
nginx.conf.erb
parallel_tests.sh
sample.env
version.rb

README.md

Zeladoria Urbana Participativa - API

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/>.

Introdução

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:

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.

Tecnologias utilizadas

O ZUP-API é um projeto escrito em Ruby com diversos componentes e bibliotecas.

Dependências

Para instalar o ZUP na sua máquina, para desenvolvimento, você precisará:

Instalação

Instalação de dependências

  1. Tenha um servidor Ubuntu 14.04+ ou Debian 8.0+ instalado e atualizado. `

apt-get update

2. Como root, crie um usuário para aplicação. Usaremos esse usuário para executar algumas coisas:

useradd -G www-data,sudo --create-home zup-production

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

Bibliotecas

Após instalada essas dependências, vamos instalar as bibliotecas, rode o seguinte comando na raiz do projeto:

bundle install

Configuração do ambiente

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 email
  • SMTP_PORT - Porta do servidor de SMTP
  • SMTP_USER - Usuário para autenticação do SMTP
  • SMTP_PASS - Senha para autenticação do SMTP
  • SMTP_TTLS - Configuração TTLS para o SMTP
  • SMTP_AUTH - Configuração do modo de autenticação do SMTP
  • REDIS_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

Configuração inicial do banco de dados

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.

Instalação do Cubes

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