% % This is part of the SIGI. % Copyright (C) 2008 Interlegis % See the file relatorio.tex for copying conditions. % \section{Anexos} \label{sec:anexos} \subsection{Visão Geral} \label{sec:a2} O \textbf{SIGI} é um projeto para um Sistema de Informações Gerenciais do \href{http://www.interlegis.gov.br/}{Interlegis}, escrito na linguagem de programação \href{http://www.python.org}{Python} com o framework para desenvolvimento web \href{http://www.djangoproject.org}{Django}. \begin{description} %[visit_definition_list_item] \item[{Página do projeto}:] %[visit_definition] \href{http://colab.interlegis.gov.br/wiki/ProjetoSigi}{http://colab.interlegis.gov.br/wiki/ProjetoSigi} %[depart_definition] %[depart_definition_list_item] \end{description} %___________________________________________________________________________ \hypertarget{caracter-sticas}{} \pdfbookmark[0]{Características}{caracter-sticas} \subsubsection*{Características} Lista das principais características do SIGI: \begin{itemize} \item {} Serviço web cliente/servidor, podendo ser disponibilizado tanto na internet quanto na intranet; \item {} Multi-plataforma; \item {} Baseia-se na interface de administração nativa do Django (\verb|django.contrib.admin|, maiores informações em \href{http://docs.djangoproject.com/en/dev/ref/contrib/admin/}{http://docs.djangoproject.com/en/dev/ref/contrib/admin/}); \item {} Gerencia convênios, equipamentos e inventários, serviços prestados e composição de Mesas Diretoras das Casas Legislativas; \item {} Autenticação no sistema baseada em usuários e grupos, com perfis diferentes; \item {} Emissão de relatórios. \end{itemize} %___________________________________________________________________________ \hypertarget{requisitos-b-sicos-de-software}{} \pdfbookmark[0]{Requisitos básicos de software}{requisitos-b-sicos-de-software} \subsubsection*{Requisitos básicos de software} \begin{itemize} \item {} Python {\textgreater}= 2.4 {\textless} 3.0 \item {} Django 1.0 \end{itemize} %___________________________________________________________________________ \hypertarget{licen-a-de-uso}{} \pdfbookmark[0]{Licença de uso}{licen-a-de-uso} \subsubsection*{Licença de uso} O SIGI é disponibilizado como \href{http://pt.wikipedia.org/wiki/Software_Livre}{software livre}, isto significa que você pode redistribuí-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU (GPL) como publicada pela Fundação do Software Livre (FSF); na versão 3 da Licença, ou (na sua opinião) em qualquer versão mais recente. Veja o arquivo \texttt{LEIA-ME} para maiores informações a respeito das condições de cópia e redistribuição. \subsection{Organização do sistema} \label{sec:org} \subsubsection{Listagem do conteúdo dos diretórios} \verbatiminput{../arquivos/tree.txt} \subsubsection{Descrição dos arquivos e diretórios} \begin{description} \item[COPYING:] Arquivo com a licença do sistema (GPLv3). \item[LEIA-ME/README:] Contém informações do sistema, nota de copyright e instruções de instalação. \item[devel.db:] Base de dados SQLite utilizada para desenvolvimento do sistema. \item[docs/:] Diretório com toda documentação escrita para o sistema (relatórios, manual de instalação, casos de uso, esquema de base de dados, etc). \item[etc/:] Diretório com arquivos variados: configuração do Apache, \textit{patchs} de códigos, etc. \item[media/:] Diretório com arquivos estáticos e de mídia do sistema (imagens, CSS, javascripts). \item[sigi/:] Pacote Python do sistema. \item[sigi/admin/:] Pacote de código relacionado com a aplicação \verb|admin| do Django (\verb|django.contrib.admin|). \item[sigi/apps/:] Pacote de aplicações do sistema, maiores informações na Seção \ref{sec:apps}. \item[sigi/settings.py:] Configurações padrões do sistema. \item[sigi/local\_settings.template:] Exemplo de configurações locais do sistema (pertinentes à instalação). Deverá ser copiado para \verb|sigi/local_settings.py| para sua utilização. \item[sigi/locale/:] Diretório com localização local do projeto. \item[sigi/manage.py:] Script de gerenciamento do projeto, gerado pelo framework Django. \item[sigi/templates/:] Diretório com templates HTML do Django. \item[sigi/urls.py:] Modulo de configuração de URLs. \end{description} \subsubsection{Descrição das aplicações} \label{sec:apps} O SIGI é composto de algumas aplicações Django, cada uma com um propósito bem definido. Uma aplicação Django é um pacote Python modular, podendo ser reaproveitado em outros projetos. Algumas aplicações possuem algum nível de relacionamento com as outras. Segue descrição de cada aplicação: \begin{description} \item[sigi.apps.casas:] Gerência de Casas Legislativas. \item[sigi.apps.contatos:] Gerência de Contatos do Interlegis com Casas Legislativas, fornecedores de equipamentos, serviços e etc. \item[sigi.apps.convenios:] Convênios do Interlegis com as Casas Legislativas. \item[sigi.apps.inventario:] Inventário de equipamentos disponibilizados pelo Interlegis para as Casas Legislativas. \item[sigi.apps.mesas:] Composição das Mesas Diretoras das Casas Legislativas. \item[sigi.apps.parlamentares:] Gerência de Parlamentares. \item[sigi.apps.servicos:] Serviços prestados às Casas Legislativas conveniadas ao Interlegis. \end{description} \subsubsection{Relacionamento entre as aplicações} \label{sec:rel} A Figura \ref{fig:apps} demonstra o relacionamento entre as aplicações e seus \emph{models}. Uma seta direcional representa uma relação \textit{muitos para um}. Uma seta bidirecional representa uma relação \textit{muitos para muitos}. A seta pontilhada representa uma relação genérica, como descrito na documentação do Django:\\ http://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/\#id1 \begin{figure}[p] \centering \includegraphics[angle=90,width=130mm]{../imagens/apps.png} \caption{Relacionamento entre as aplicações} \label{fig:apps} \end{figure} \subsection{Casos de Uso} \label{sec:casos} Esta seção descreve a utilização do sistema através de \emph{Casos de Uso}, representando os principais atores e suas interações com o sistema. Os Casos de Uso servem de auxílio à compreensão dos usuários quanto à implementação e uso do sistema. \subsubsection{Casos de Uso do SIGI} A Figura \ref{fig:casos} apresenta os Casos de Uso do SIGI de maneira simplificada. \begin{figure}[h] \centering \includegraphics[width=120mm]{../imagens/casosdeuso.png} \caption{Casos de Uso} \label{fig:casos} \end{figure} \paragraph{Descrição dos Atores} \begin{description} \item[Funcionário Interlegis Autorizado:] usuário apenas com atribuições de leitura no sistema. Inclui pessoal da Subsecretaria de Apoio Técnico e Relações Institucionais (SSATR) e Subsecretaria de Planejamento e Fomento (SSPLF). \item[SSFAC:] Subsecretaria de Formação e Atendimento à Comunidade do Legislativo. \item[SSADM:] Subsecretaria de Administração. \item[SEIT:] Serviço de Infra-estrutura Tecnológica. \end{description} \paragraph{Descrição das Atividades} \begin{description} \item[Emitir Relatórios:] consiste em obter informações e emitir relatórios de diversas partes do sistema. \item[Emitir Etiquetas:] consiste em obter informações e emitir etiquetas de algumas partes do sistema. \item[Pesquisar e Recuperar Informações:] habilidades de pesquisa e obtenção de informações da base de dados do sistema. \item[Gerenciar Mesas Diretoras:] consiste em inserir, atualizar e remover \emph{Mesas Diretoras}, \emph{Sessões Legislativas} e modificar a \emph{Composição das Mesas Diretoras}. \item[Gerenciar Parlamentares:] consiste em inserir, atualizar e remover \emph{Parlamentares} e \emph{Partidos}. \item[Gerenciar Equipamentos:] consiste em inserir, atualizar e remover \emph{Equipamentos} e \emph{Fornecedores}. \item[Gerenciar Casas Legislativas:] consiste em inserir, atualizar e remover \emph{Casas Legislativas}. \item[Gerenciar Convênios:] consiste em inserir, atualizar e remover \emph{Convênios}. \item[Gerenciar Inventário:] consiste em atualizar o \emph{Inventário} das Casas Legislativas. \item[Gerenciar Serviços:] consiste em inserir, atualizar e remover \emph{Serviços} prestados às Casas Legislativas. \end{description} \subsection{Modelo de dados} \label{sec:modelo} \subsubsection{Aplicação sigi.apps.casas (figura \ref{fig:casas})} \begin{figure}[h!] \centering \includegraphics[width=60mm]{../imagens/casas.png} \caption{Diagrama de Classes da aplicação sigi.apps.casas} \label{fig:casas} \end{figure} \subsubsection{Aplicação sigi.apps.contatos (figura \ref{fig:contatos})} \begin{figure}[h!] \centering \includegraphics[width=120mm]{../imagens/contatos.png} \caption{Diagrama de Classes da aplicação sigi.apps.contatos} \label{fig:contatos} \end{figure} \subsubsection{Aplicação sigi.apps.convenios (figura \ref{fig:convenios})} \begin{figure}[h!] \centering \includegraphics[width=100mm]{../imagens/convenios.png} \caption{Diagrama de Classes da aplicação sigi.apps.convenios} \label{fig:convenios} \end{figure} \subsubsection{Aplicação sigi.apps.inventario (figura \ref{fig:inventario})} \begin{figure}[h!] \centering \includegraphics[width=120mm]{../imagens/inventario.png} \caption{Diagrama de Classes da aplicação sigi.apps.inventario} \label{fig:inventario} \end{figure} \subsubsection{Aplicação sigi.apps.mesas (figura \ref{fig:mesas})} \begin{figure}[h!] \centering \includegraphics[width=145mm]{../imagens/mesas.png} \caption{Diagrama de Classes da aplicação sigi.apps.mesas} \label{fig:mesas} \end{figure} \subsubsection{Aplicação sigi.apps.parlamentares (figura \ref{fig:parlamentares})} \begin{figure}[h!] \centering \includegraphics[width=100mm]{../imagens/parlamentares.png} \caption{Diagrama de Classes da aplicação sigi.apps.parlamentares} \label{fig:parlamentares} \end{figure} \subsubsection{Aplicação sigi.apps.servicos (figura \ref{fig:servicos})} \begin{figure}[h!] \centering \includegraphics[width=60mm]{../imagens/servicos.png} \caption{Diagrama de Classes da aplicação sigi.apps.servicos} \label{fig:servicos} \end{figure} \subsection{Esquema de dados} \label{sec:esquema} Nesta seção estão descritos os esquemas de criação das entidades e de seus relacionamentos do banco de dados \emph{SQL} para cada aplicação do SIGI. \small \subsubsection{Aplicação sigi.apps.casas} \verbatiminput{../arquivos/casas.sql} \subsubsection{Aplicação sigi.apps.contatos} \verbatiminput{../arquivos/contatos.sql} \subsubsection{Aplicação sigi.apps.convenios} \verbatiminput{../arquivos/convenios.sql} \subsubsection{Aplicação sigi.apps.inventario} \verbatiminput{../arquivos/inventario.sql} \subsubsection{Aplicação sigi.apps.mesas} \verbatiminput{../arquivos/mesas.sql} \subsubsection{Aplicação sigi.apps.parlamentares} \verbatiminput{../arquivos/parlamentares.sql} \subsubsection{Aplicação sigi.apps.servicos} \verbatiminput{../arquivos/servicos.sql} \normalsize \subsection{Manual de Instalação} \label{sec:a3} Este documento descreve como efetuar a instalação do Sistema de Informações Gerenciais do Interlegis (SIGI). Os passos são baseados nas distribuições GNU/Linux Debian e Ubuntu. Podem ser aplicados sem dificuldades em outras distribuições, mas poderão sofrer alguma adaptação. %___________________________________________________________________________ \hypertarget{prepara-o-do-ambiente-para-a-instala-o}{} \pdfbookmark[0]{Preparação do ambiente para a instalação}{prepara-o-do-ambiente-para-a-instala-o} \subsubsection{Preparação do ambiente para a instalação} Há dois tipos de instalação do SIGI, uma para desenvolvimento e outra para produção. Para ambas instalações, certifique-se que os seguintes softwares estejam instalados em seu sistema: \begin{itemize} \item {} Python {\textgreater}= 2.4 {\textless} 3.0 \item {} Django 1.0 \end{itemize} O Python pode ser instalado a partir do pacote \texttt{python} com uma ferramenta de instalação de pacotes como o \texttt{apt-get} ou \texttt{aptitude}. Se a sua distribuição não possui o pacote \texttt{python-django}, para o Django na versão 1.0, será necessário obter e configurar o mesmo manualmente. A próxima seção traz mais detalhes para esta tarefa. %___________________________________________________________________________ \hypertarget{instala-o-do-django}{} \pdfbookmark[1]{Instalação do Django}{instala-o-do-django} \subsubsection*{Instalação do Django} O Django 1.0 pode ser obtido através da \href{http://www.djangoproject.com/download/}{página de download} do \href{http://www.djangoproject.com}{Django Project} via \emph{tarball} (\texttt{tar.gz}) ou via Subversion (revisão 8961). %___________________________________________________________________________ \hypertarget{obtendo-e-instalando-o-django}{} \pdfbookmark[2]{Obtendo e instalando o Django}{obtendo-e-instalando-o-django} \subsubsection*{Obtendo e instalando o Django} Primeiramente baixe o \href{http://www.djangoproject.com/download/1.0/tarball/}{tarball do Django 1.0} ou dê \emph{checkout} na tag 1.0 disponível no repositório do Subversion do projeto: \begin{quote}{\ttfamily \raggedright \noindent svn~checkout~http://code.djangoproject.com/svn/django/tags/releases/1.0/ }\end{quote} Após isso será necessário colocar o pacote Python do \texttt{django} (diretório \texttt{django} disponível dentro do diretório/tarball baixado) no \emph{path} do Python. Para saber quais são os diretórios que estão no path do Python, execute em linha de comando: \begin{quote}{\ttfamily \raggedright \noindent python~-c~'import~sys;~print~sys.path' }\end{quote} Você tem opção de mover o pacote \texttt{django} para algum diretório coberto pelo path ou adicionar um outro local no path utilizando a variável de ambiente \texttt{PYTHONPATH} do usuário que rodará o sistema. O formato do \texttt{PYTHONPATH} é o mesmo do \texttt{PATH} do sistema. Exemplo: \begin{quote}{\ttfamily \raggedright \noindent PYTHONPATH=/path/to/django:{\$}PYTHONPATH }\end{quote} De maneira simplificada, a instalação do Django é como a instalação de qualquer outro pacote Python. %___________________________________________________________________________ \hypertarget{preparando-o-ambiente-para-desenvolvimento}{} \pdfbookmark[1]{Preparando o ambiente para desenvolvimento}{preparando-o-ambiente-para-desenvolvimento} \subsubsection*{Preparando o ambiente para desenvolvimento} Se você irá desenvolver o SIGI, é necessário possuir os seguintes pacotes instalados em sua máquina: \begin{itemize} \item {} sqlite3, para SQLite 3; \item {} python-pysqlite2, interface Python para SQLite 3. \end{itemize} %___________________________________________________________________________ \hypertarget{preparando-o-ambiente-para-produ-o}{} \pdfbookmark[1]{Preparando o ambiente para produção}{preparando-o-ambiente-para-produ-o} \subsubsection*{Preparando o ambiente para produção} Para disponibilizar o SIGI em um ambiente para produção você necessitará do MySQL Server ou PostgreSQL, ou qualquer outro Sistema Gerenciador de Banco de Dados (SGBD) compatível com Django 1.0, e de suas seguintes interfaces para Python, como os pacotes \texttt{python-mysqldb} e \texttt{python-psycopg2} (respectivamente para MySQL e PostgreSQL). Será necessário também possuir o Apache ({\textgreater}= 2.2) instalado para disponibilizar o sistema via HTTP, de forma cliente/servidor, ou outro servidor web compatível com Python e WSGI (ou FastCGI). Opcionalmente, você pode utilizar o servidor web Lighttpd para servir os arquivos estáticos do sistema. Você encontrará configurações para Apache com WSGI neste documento, juntamente com instruções para configurar o SIGI com o banco de dados escolhido. %___________________________________________________________________________ \hypertarget{instala-o-e-configura-o-do-sigi}{} \pdfbookmark[0]{Instalação e configuração do SIGI}{instala-o-e-configura-o-do-sigi} \subsubsection{Instalação e configuração do SIGI} O SIGI está disponível no \href{http://colab.interlegis.gov.br}{Colab}, um portal colaborativo para a gerência dos projetos de software do \href{http://www.interlegis.gov.br}{Interlegis}. A página do projeto SIGI no Colab pode ser acessada através do link \href{http://colab.interlegis.gov.br/wiki/ProjetoSigi}{http://colab.interlegis.gov.br/wiki/ProjetoSigi}. %___________________________________________________________________________ \hypertarget{obtendo-e-instalando-o-sigi}{} \pdfbookmark[1]{Obtendo e instalando o SIGI}{obtendo-e-instalando-o-sigi} \subsubsection*{Obtendo e instalando o SIGI} Para baixar o SIGI, é necessário ter o Subversion instalado em sua máquina (pacote \texttt{subversion}). Para \emph{checkout} do sistema via Subversion, execute o comando abaixo: \begin{verbatim} svn checkout http://repositorio.interlegis.gov.br/SIGI/trunk/ \ /path/to/SIGI \end{verbatim} Substitua \texttt{/path/to/SIGI} para o local onde deseja instalar o SIGI. (Iremos considerar o diretório SIGI como a raiz do projeto durante o restante deste documento.) %___________________________________________________________________________ \hypertarget{configura-o-do-sigi}{} \pdfbookmark[1]{Configuração do SIGI}{configura-o-do-sigi} \subsubsection*{Configuração do SIGI} Dentro da raiz do projeto, encontra-se um diretório de nome \texttt{sigi} (pacote Python do projeto). Sua configuração padrão, se encontra no arquivo \texttt{settings.py}. Para alterar as configurações do projeto, é recomendado que copie o arquivo \texttt{local{\_}settings.template} para \texttt{local{\_}settings.py} e altere os parâmetros neste arquivo. %___________________________________________________________________________ \hypertarget{instala-o-em-ambiente-para-desenvolvimento}{} \pdfbookmark[1]{Instalação em ambiente para desenvolvimento}{instala-o-em-ambiente-para-desenvolvimento} \subsubsection*{Instalação em ambiente para desenvolvimento} As configurações padrão do projeto já estão direcionadas para um ambiente de desenvolvimento e não exige demais configurações. (Os comandos abaixo deverão ser executados dentro do diretório \texttt{sigi}, onde se encontra o arquivo \texttt{manage.py}.) %___________________________________________________________________________ \hypertarget{base-de-dados-em-ambiente-para-desenvolvimento}{} \pdfbookmark[2]{Base de dados em ambiente para desenvolvimento}{base-de-dados-em-ambiente-para-desenvolvimento} \subsubsection*{Base de dados em ambiente para desenvolvimento} Antes de executar o projeto, é necessário preencher o banco de dados com suas tabelas e valores padrão. Considerando que possua o SQLite instalado, basta executar o comando abaixo: \begin{quote}{\ttfamily \raggedright \noindent python~manage.py~syncdb }\end{quote} %___________________________________________________________________________ \hypertarget{execu-o-do-projeto-em-ambiente-para-desenvolvimento}{} \pdfbookmark[2]{Execução do projeto em ambiente para desenvolvimento}{execu-o-do-projeto-em-ambiente-para-desenvolvimento} \subsubsection*{Execução do projeto em ambiente para desenvolvimento} Para rodar o SIGI, execute em linha de comando: \begin{quote}{\ttfamily \raggedright \noindent python~manage.py~runserver }\end{quote} O projeto poderá ser acessado através do endereço \href{http://127.0.0.1:8000/}{http://127.0.0.1:8000/}. %___________________________________________________________________________ \hypertarget{instala-o-em-ambiente-para-produ-o}{} \pdfbookmark[1]{Instalação em ambiente para produção}{instala-o-em-ambiente-para-produ-o} \subsubsection*{Instalação em ambiente para produção} Para instalar o SIGI em ambiente para produção, devemos configurar um Sistema Gerenciador de Banco de Dados (SGBD), o qual armazenará os dados do sistema, e configurar um servidor HTTP, como o Apache, para disponibilizar o sistema na web. %___________________________________________________________________________ \hypertarget{configura-o-do-sgdb}{} \pdfbookmark[2]{Configuração do SGDB}{configura-o-do-sgdb} \subsubsection*{Configuração do SGDB} Modifique em seu \texttt{local{\_}settings.py} as variáveis \texttt{DATABASE{\_}ENGINE}, \texttt{DATABASE{\_}NAME}, \texttt{DATABASE{\_}USER}, \texttt{DATABASE{\_}PASSWORD}, \texttt{DATABASE{\_}HOST} e \texttt{DATABASE{\_}PORT} de acordo com o banco de dados disponibilizado para o SIGI. Em \texttt{DATABASE{\_}ENGINE}, suas opções são \texttt{postgresql{\_}psycopg2}, \texttt{postgresql}, \texttt{mysql}, \texttt{sqlite3} ou \texttt{ado{\_}mssql}. Após isso, é necessário preencher o banco de dados com suas tabelas e valores padrão. Para tal, execute em linha de comando: \begin{quote}{\ttfamily \raggedright \noindent python~manage.py~syncdb }\end{quote} %___________________________________________________________________________ \hypertarget{configura-o-do-servidor-web-apache-com-wsgi}{} \pdfbookmark[2]{Configuração do servidor web Apache com WSGI}{configura-o-do-servidor-web-apache-com-wsgi} \subsubsection*{Configuração do servidor web Apache com WSGI} Exemplos de configurações, de um \texttt{VirtualHost}, estão disponíveis no diretório \texttt{etc/apache/} dentro do diretório raiz do projeto (\texttt{SIGI/}). % % Local variables: % mode: flyspell % TeX-master: "relatorio.tex" % End: %