Commit d9cc7a194df497cd417cdc15f0a389c66b1add68

Authored by Antonio Terceiro
2 parents 9b521d8c 6f79024c
Exists in master and in 90 other branches 3.x, add_sisp_to_chef, add_super_archives_plugin, api_for_colab, automates_core_packing, backup, backup_not_prod, cdtc_configuration, changes_in_buttons_on_content_panel, colab_automated_login, colab_spb_plugin_recipe, colab_widgets_settings, design_validation, dev-lappis, dev_env_minimal, disable_email_dev, docs, fix_breadcrumbs_position, fix_categories_software_link, fix_edit_institution, fix_edit_software_with_another_license, fix_get_license_info, fix_gitlab_assets_permission, fix_list_style_inside_article, fix_list_style_on_folder_elements, fix_members_pagination, fix_merge_request_url, fix_models_translations, fix_no_license, fix_software_api, fix_software_block_migration, fix_software_communities_translations, fix_software_communities_unit_test, fix_style_create_institution_admin_panel, fix_superarchives_imports, fix_sym_links_noosfero, focus_search_field_theme, gov-user-refactoring, gov-user-refactoring-rails4, header_fix, institution_modal_on_rating, kalibro-conf-refactoring, kalibro-processor-package, lxc_settings, margin_fix, mezuro_cookbook, performance, prezento, r3, refactor_download_block, refactor_software_communities, refactor_software_for_sisp, register_page, release-process, release-process-v2, remove-unused-images, remove_backup_emails, remove_broken_theme, remove_secondary_email_from_user, remove_sisp_buttons, removing_super_archives_email, review_message, scope2method, signals_user_noosfero, sisp_catalog_header, sisp_colab_config, sisp_dev, sisp_dev_master, sisp_simple_version, software_as_organization, software_catalog_style_fix, software_communities_html_refactor, software_infos_api, spb_minimal_env, spb_to_rails4, spec_refactor, stable-4.1, stable-4.2, stable-4.x, stable-devel, support_docs, syslog, temp_soft_comm_refactoring, theme_header, theme_javascript_refactory, thread_dropdown, thread_page, update_search_by_categories, update_software_api, update_softwares_boxes

Merge branch 'doc'

.gitignore
... ... @@ -4,6 +4,7 @@
4 4 /.tmp
5 5 /tmp
6 6 /docs/_build
  7 +/docs/dns.rst
7 8 /.*.html
8 9 /local.rake
9 10 *.swp
... ...
Rakefile
... ... @@ -98,3 +98,5 @@ task :preconfig => ssh_config_file do
98 98 end
99 99 end
100 100 end
  101 +
  102 +Dir.glob('tasks/*.rake').each { |f| load f }
... ...
config/homologa/config.yaml 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +admins:
  2 + - ["Nayanne Araújo", "nayanne.bonifacio@planejamento.gov.br"]
  3 + - ["Marisa Souza dos Santos", "marisa.santos@planejamento.gov.br"]
  4 +external_hostname: homologa.softwarepublico.gov.br
  5 +external_ip: 189.9.151.65
  6 +site_url: https://homologa.softwarepublico.gov.br
  7 +colab_from_address: '"Portal do Software Publico (homologação)" <noreply@homologa.softwarepublico.gov.br>'
  8 +server_email: '"Portal do Software Publico (homologação)" <noreply@homologa.softwarepublico.gov.br>'
  9 +email_subject_prefix: '[spb]'
  10 +lists_hostname: listas.homologa.softwarepublico.gov.br
  11 +lists_admin: nayanne.bonifacio@planejamento.gov.br
  12 +relay_hostname: relay.homologa.softwarepublico.gov.br
  13 +relay_ip: 189.9.151.66
  14 +alt_ssh_port: 55555
  15 +from_address: noreply@homologa.softwarepublico.gov.br
... ...
config/homologa/ips.yaml 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +reverseproxy: 10.0.13.2
  2 +database: 10.0.13.6
  3 +social: 10.0.13.4
  4 +email: 10.0.13.5
  5 +integration: 10.0.13.7
... ...
config/homologa/iptables-filter-rules 0 → 100644
... ... @@ -0,0 +1 @@
  1 +# nothing yet
... ...
config/homologa/ssh_config 0 → 100644
... ... @@ -0,0 +1,33 @@
  1 +Host *
  2 + ForwardAgent yes
  3 +
  4 +Host reverseproxy
  5 + Hostname 164.41.9.49
  6 + Port 55555
  7 +
  8 +Host reverseproxy.unconfigured
  9 + Hostname 164.41.9.49
  10 +
  11 +Host database
  12 + Hostname 10.10.40.47
  13 + Port 55555
  14 + # connect via reverseproxy host
  15 + ProxyCommand ssh 164.41.9.49 -p %p nc %h 22
  16 +
  17 +Host social
  18 + Hostname 10.10.40.46
  19 + Port 55555
  20 + # connect via reverseproxy host
  21 + ProxyCommand ssh 164.41.9.49 -p %p nc %h 22
  22 +
  23 +Host email
  24 + Hostname 10.10.40.48
  25 + Port 55555
  26 + # connect via reverseproxy host
  27 + ProxyCommand ssh 164.41.9.49 -p %p nc %h 22
  28 +
  29 +Host integration
  30 + Hostname 10.10.40.45
  31 + Port 55555
  32 + # connect via reverseproxy host
  33 + ProxyCommand ssh 164.41.9.49 -p %p nc %h 22
... ...
config/local/config.yaml
1 1 admins:
2   - -
3   - - Paulo Meirelles
4   - - paulo@softwarelivre.org
5   -external_hostname: softwarepublico.dev
  2 + - ["Paulo Meirelles", "paulo@softwarelivre.org"]
6 3 site_url: https://softwarepublico.dev
  4 +external_hostname: softwarepublico.dev
  5 +external_ip: 10.10.10.6
7 6 colab_from_address: '"Portal do Software Publico" <noreply@softwarepublico.dev>'
8 7 server_email: '"Portal do Software Publico" <noreply@softwarepublico.dev>'
9 8 email_subject_prefix: '[spb]'
10 9 lists_hostname: listas.softwarepublico.dev
11 10 lists_admin: paulo@softwarelivre.org
12 11 relay_hostname: relay.softwarepublico.dev
  12 +relay_ip: 10.10.10.3
13 13 alt_ssh_port: 5555
14 14 from_address: noreply@softwarepublico.dev
... ...
config/production/config.yaml
1 1 admins:
2   - -
3   - - Paulo Meirelles
4   - - paulo@softwarelivre.org
  2 + - ["Paulo Meirelles", "paulo@softwarelivre.org"]
5 3 external_hostname: beta.softwarepublico.gov.br
  4 +external_ip: 164.41.9.49
6 5 site_url: https://beta.softwarepublico.gov.br
7 6 colab_from_address: '"Portal do Software Publico" <noreply@beta.softwarepublico.gov.br>'
8 7 server_email: '"Portal do Software Publico" <noreply@beta.softwarepublico.gov.br>'
... ... @@ -10,5 +9,6 @@ email_subject_prefix: &#39;[spb]&#39;
10 9 lists_hostname: listas.softwarepublico.gov.br
11 10 lists_admin: paulo@softwarelivre.org
12 11 relay_hostname: relay.softwarepublico.gov.br
  12 +relay_ip: 164.41.9.48
13 13 alt_ssh_port: 55555
14 14 from_address: noreply@softwarepublico.gov.br
... ...
docs/.gitignore 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +architecture.png
  2 +*.rst
  3 +conf.py
... ...
docs/Makefile
... ... @@ -46,132 +46,135 @@ help:
46 46 @echo " linkcheck to check all external links for integrity"
47 47 @echo " doctest to run all doctests embedded in the documentation (if enabled)"
48 48  
  49 +include local.mk
  50 +
49 51 clean:
50 52 rm -rf $(BUILDDIR)/*
  53 + rm -rf $(CLEAN_FILES)
51 54  
52   -html:
  55 +html: $(BUILT)
53 56 $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
54 57 @echo
55 58 @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
56 59  
57   -dirhtml:
  60 +dirhtml: $(BUILT)
58 61 $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
59 62 @echo
60 63 @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
61 64  
62   -singlehtml:
  65 +singlehtml: $(BUILT)
63 66 $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
64 67 @echo
65 68 @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
66 69  
67   -pickle:
  70 +pickle: $(BUILT)
68 71 $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
69 72 @echo
70 73 @echo "Build finished; now you can process the pickle files."
71 74  
72   -json:
  75 +json: $(BUILT)
73 76 $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
74 77 @echo
75 78 @echo "Build finished; now you can process the JSON files."
76 79  
77   -htmlhelp:
  80 +htmlhelp: $(BUILT)
78 81 $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
79 82 @echo
80 83 @echo "Build finished; now you can run HTML Help Workshop with the" \
81 84 ".hhp project file in $(BUILDDIR)/htmlhelp."
82 85  
83   -qthelp:
  86 +qthelp: $(BUILT)
84 87 $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
85 88 @echo
86 89 @echo "Build finished; now you can run "qcollectiongenerator" with the" \
87   - ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
  90 + ".qhcp project file in $(BUILDDIR)/qthelp, like this: $(BUILT)"
88 91 @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/softwarepublico.qhcp"
89   - @echo "To view the help file:"
  92 + @echo "To view the help file: $(BUILT)"
90 93 @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/softwarepublico.qhc"
91 94  
92   -devhelp:
  95 +devhelp: $(BUILT)
93 96 $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
94 97 @echo
95 98 @echo "Build finished."
96   - @echo "To view the help file:"
  99 + @echo "To view the help file: $(BUILT)"
97 100 @echo "# mkdir -p $$HOME/.local/share/devhelp/softwarepublico"
98 101 @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/softwarepublico"
99 102 @echo "# devhelp"
100 103  
101   -epub:
  104 +epub: $(BUILT)
102 105 $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
103 106 @echo
104 107 @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
105 108  
106   -latex:
  109 +latex: $(BUILT)
107 110 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
108 111 @echo
109 112 @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
110 113 @echo "Run \`make' in that directory to run these through (pdf)latex" \
111 114 "(use \`make latexpdf' here to do that automatically)."
112 115  
113   -latexpdf:
  116 +latexpdf: $(BUILT)
114 117 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
115 118 @echo "Running LaTeX files through pdflatex..."
116 119 $(MAKE) -C $(BUILDDIR)/latex all-pdf
117 120 @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
118 121  
119   -latexpdfja:
  122 +latexpdfja: $(BUILT)
120 123 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
121 124 @echo "Running LaTeX files through platex and dvipdfmx..."
122 125 $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
123 126 @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
124 127  
125   -text:
  128 +text: $(BUILT)
126 129 $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
127 130 @echo
128 131 @echo "Build finished. The text files are in $(BUILDDIR)/text."
129 132  
130   -man:
  133 +man: $(BUILT)
131 134 $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
132 135 @echo
133 136 @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
134 137  
135   -texinfo:
  138 +texinfo: $(BUILT)
136 139 $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
137 140 @echo
138 141 @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
139 142 @echo "Run \`make' in that directory to run these through makeinfo" \
140 143 "(use \`make info' here to do that automatically)."
141 144  
142   -info:
  145 +info: $(BUILT)
143 146 $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
144 147 @echo "Running Texinfo files through makeinfo..."
145 148 make -C $(BUILDDIR)/texinfo info
146 149 @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
147 150  
148   -gettext:
  151 +gettext: $(BUILT)
149 152 $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
150 153 @echo
151 154 @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
152 155  
153   -changes:
  156 +changes: $(BUILT)
154 157 $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
155 158 @echo
156 159 @echo "The overview file is in $(BUILDDIR)/changes."
157 160  
158   -linkcheck:
  161 +linkcheck: $(BUILT)
159 162 $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
160 163 @echo
161 164 @echo "Link check complete; look for any errors in the above output " \
162 165 "or in $(BUILDDIR)/linkcheck/output.txt."
163 166  
164   -doctest:
  167 +doctest: $(BUILT)
165 168 $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
166 169 @echo "Testing of doctests in the sources finished, look at the " \
167 170 "results in $(BUILDDIR)/doctest/output.txt."
168 171  
169   -xml:
  172 +xml: $(BUILT)
170 173 $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
171 174 @echo
172 175 @echo "Build finished. The XML files are in $(BUILDDIR)/xml."
173 176  
174   -pseudoxml:
  177 +pseudoxml: $(BUILT)
175 178 $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
176 179 @echo
177 180 @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
... ...
docs/architecture.dot
... ... @@ -1,27 +0,0 @@
1   -digraph architecture {
2   -
3   - subgraph cluster_0 {
4   - style=filled;
5   - color="#d3d7cf";
6   - label = "Local network";
7   - node [style=filled,fillcolor=white];
8   -
9   - reverseproxy [shape=box];
10   - social [shape=box];
11   - email [shape=box];
12   - integration [shape=box];
13   - database [shape=box];
14   -
15   - reverseproxy -> social [label="HTTP"];
16   - social -> integration [label="HTTP"];
17   - social -> database [label="PostgreSQL (5432)"];
18   - integration -> database [label="PostgreSQL (5432)"];
19   - email -> integration [label="SMTP"];
20   -
21   - }
22   -
23   - internet -> reverseproxy [label="HTTP"];
24   - internet -> email [label="SMTP"];
25   - email -> internet [label="SMTP"];
26   -
27   -}
docs/arquitetura.png 0 → 100644

40.7 KB

docs/arquitetura.rst.in 0 → 100644
... ... @@ -0,0 +1,25 @@
  1 +Arquitetura
  2 +===========
  3 +
  4 +A arquitetura do SPB consiste em 5 servidores, representados na figura
  5 +a seguir.
  6 +
  7 +.. image:: arquitetura.png
  8 +
  9 +Servidores e serviços
  10 +---------------------
  11 +
  12 +*Esta seção é um trabalho em andamento. Ela cobrirá:*
  13 +
  14 +* descrever arquitetura
  15 +* descrever papel de cada máquina
  16 +* descrever conexões
  17 +
  18 +Gestão de configuração
  19 +----------------------
  20 +
  21 +*Esta seção é um trabalho em andamento. Ela cobrirá:*
  22 +
  23 +* adicionar links com o repositório de gestão de configuração
  24 +* descrever repositório de gestão de configuração
  25 +* descrever como o chake funciona
... ...
docs/arquitetura.svg 0 → 100644
... ... @@ -0,0 +1,818 @@
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<!-- Created with Inkscape (http://www.inkscape.org/) -->
  3 +
  4 +<svg
  5 + xmlns:dc="http://purl.org/dc/elements/1.1/"
  6 + xmlns:cc="http://creativecommons.org/ns#"
  7 + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  8 + xmlns:svg="http://www.w3.org/2000/svg"
  9 + xmlns="http://www.w3.org/2000/svg"
  10 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
  11 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
  12 + width="1052.3622"
  13 + height="744.09448"
  14 + id="svg2"
  15 + version="1.1"
  16 + inkscape:version="0.91 r13725"
  17 + sodipodi:docname="arquitetura.svg">
  18 + <defs
  19 + id="defs4">
  20 + <marker
  21 + inkscape:stockid="Arrow2Lend"
  22 + orient="auto"
  23 + refY="0.0"
  24 + refX="0.0"
  25 + id="Arrow2Lend"
  26 + style="overflow:visible;">
  27 + <path
  28 + id="path4235"
  29 + style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
  30 + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
  31 + transform="scale(1.1) rotate(180) translate(1,0)" />
  32 + </marker>
  33 + <marker
  34 + inkscape:stockid="Arrow1Lend"
  35 + orient="auto"
  36 + refY="0.0"
  37 + refX="0.0"
  38 + id="Arrow1Lend"
  39 + style="overflow:visible;">
  40 + <path
  41 + id="path4217"
  42 + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
  43 + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;"
  44 + transform="scale(0.8) rotate(180) translate(12.5,0)" />
  45 + </marker>
  46 + <marker
  47 + inkscape:stockid="Arrow2Lstart"
  48 + orient="auto"
  49 + refY="0.0"
  50 + refX="0.0"
  51 + id="Arrow2Lstart"
  52 + style="overflow:visible">
  53 + <path
  54 + id="path4232"
  55 + style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
  56 + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
  57 + transform="scale(1.1) translate(1,0)" />
  58 + </marker>
  59 + <marker
  60 + inkscape:stockid="Arrow2Lstart"
  61 + orient="auto"
  62 + refY="0"
  63 + refX="0"
  64 + id="Arrow2Lstart-4"
  65 + style="overflow:visible">
  66 + <path
  67 + inkscape:connector-curvature="0"
  68 + id="path4232-0"
  69 + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
  70 + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
  71 + transform="matrix(1.1,0,0,1.1,1.1,0)" />
  72 + </marker>
  73 + </defs>
  74 + <sodipodi:namedview
  75 + id="base"
  76 + pagecolor="#ffffff"
  77 + bordercolor="#666666"
  78 + borderopacity="1.0"
  79 + inkscape:pageopacity="0.0"
  80 + inkscape:pageshadow="2"
  81 + inkscape:zoom="0.65045503"
  82 + inkscape:cx="526.18109"
  83 + inkscape:cy="372.04724"
  84 + inkscape:document-units="px"
  85 + inkscape:current-layer="layer6"
  86 + showgrid="false"
  87 + inkscape:window-width="1366"
  88 + inkscape:window-height="702"
  89 + inkscape:window-x="0"
  90 + inkscape:window-y="27"
  91 + inkscape:window-maximized="1" />
  92 + <metadata
  93 + id="metadata7">
  94 + <rdf:RDF>
  95 + <cc:Work
  96 + rdf:about="">
  97 + <dc:format>image/svg+xml</dc:format>
  98 + <dc:type
  99 + rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  100 + <dc:title />
  101 + </cc:Work>
  102 + </rdf:RDF>
  103 + </metadata>
  104 + <g
  105 + inkscape:label="Camada 1"
  106 + inkscape:groupmode="layer"
  107 + id="layer1"
  108 + transform="translate(0,-308.2677)"
  109 + style="display:inline">
  110 + <g
  111 + inkscape:groupmode="layer"
  112 + id="layer4"
  113 + inkscape:label="Release 1"
  114 + style="display:inline">
  115 + <text
  116 + xml:space="preserve"
  117 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  118 + x="642.34241"
  119 + y="491.6839"
  120 + id="text5794"
  121 + sodipodi:linespacing="125%"><tspan
  122 + style="font-size:16.46647072px"
  123 + id="tspan5796"
  124 + sodipodi:role="line"
  125 + x="642.34241"
  126 + y="491.6839">HTTP</tspan><tspan
  127 + style="font-size:16.46647072px"
  128 + id="tspan5798"
  129 + sodipodi:role="line"
  130 + x="642.34241"
  131 + y="512.26697">reverse proxy</tspan></text>
  132 + <g
  133 + id="g4382"
  134 + transform="matrix(0.68610294,0,0,0.68610294,325.50286,328.94289)">
  135 + <g
  136 + transform="translate(-104.51642,-10.919621)"
  137 + id="g4315">
  138 + <rect
  139 + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#babdb6;fill-opacity:0.61568627;fill-rule:nonzero;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
  140 + id="rect4317"
  141 + width="703.53589"
  142 + height="193.43335"
  143 + x="45.238449"
  144 + y="819.93018"
  145 + rx="24.959101"
  146 + ry="24.959101" />
  147 + <text
  148 + xml:space="preserve"
  149 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.92820835px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  150 + x="62.26289"
  151 + y="991.02106"
  152 + id="text4319"
  153 + sodipodi:linespacing="125%"><tspan
  154 + sodipodi:role="line"
  155 + id="tspan4321"
  156 + x="62.26289"
  157 + y="991.02106"
  158 + style="font-size:22.5px;fill:#555753">database</tspan></text>
  159 + </g>
  160 + <g
  161 + style="display:inline"
  162 + id="g4246"
  163 + transform="matrix(1.0487632,0,0,1.0487632,-73.081866,298.25531)">
  164 + <rect
  165 + transform="translate(0,308.2677)"
  166 + ry="24.959145"
  167 + rx="24.959145"
  168 + y="205.91293"
  169 + x="99.836578"
  170 + height="106.07636"
  171 + width="215.27261"
  172 + id="rect4248"
  173 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate" />
  174 + <text
  175 + sodipodi:linespacing="125%"
  176 + id="text4250"
  177 + y="575.53479"
  178 + x="143.37675"
  179 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  180 + xml:space="preserve"><tspan
  181 + y="575.53479"
  182 + x="143.37675"
  183 + id="tspan4252"
  184 + sodipodi:role="line">PostgreSQL</tspan></text>
  185 + </g>
  186 + <g
  187 + transform="matrix(1.0487632,0,0,1.0487632,218.62813,298.25532)"
  188 + id="g4263"
  189 + style="display:inline">
  190 + <rect
  191 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate"
  192 + id="rect4265"
  193 + width="215.27261"
  194 + height="106.07636"
  195 + x="99.836578"
  196 + y="205.91293"
  197 + rx="24.959145"
  198 + ry="24.959145"
  199 + transform="translate(0,308.2677)" />
  200 + <text
  201 + xml:space="preserve"
  202 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  203 + x="178.57445"
  204 + y="575.53479"
  205 + id="text4267"
  206 + sodipodi:linespacing="125%"><tspan
  207 + sodipodi:role="line"
  208 + id="tspan4269"
  209 + x="178.57445"
  210 + y="575.53479">Redis</tspan></text>
  211 + </g>
  212 + </g>
  213 + <g
  214 + id="g4396"
  215 + transform="matrix(0.68610294,0,0,0.68610294,548.29673,158.97368)">
  216 + <g
  217 + id="g4307"
  218 + transform="translate(-73.317486,-262.07101)">
  219 + <rect
  220 + ry="24.959101"
  221 + rx="24.959101"
  222 + y="819.93018"
  223 + x="45.238449"
  224 + height="385.60645"
  225 + width="641.40228"
  226 + id="rect4309"
  227 + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#babdb6;fill-opacity:0.61568627;fill-rule:nonzero;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
  228 + <text
  229 + sodipodi:linespacing="125%"
  230 + id="text4311"
  231 + y="1185.0211"
  232 + x="62.26289"
  233 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.92820835px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  234 + xml:space="preserve"><tspan
  235 + style="font-size:22.5px;fill:#555753"
  236 + y="1185.0211"
  237 + x="62.26289"
  238 + id="tspan4313"
  239 + sodipodi:role="line">integration</tspan></text>
  240 + </g>
  241 + <g
  242 + transform="matrix(1.0487632,0,0,1.0487632,-79.431935,244.40644)"
  243 + id="g3018"
  244 + style="display:inline">
  245 + <rect
  246 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate"
  247 + id="rect3020"
  248 + width="215.27261"
  249 + height="106.07636"
  250 + x="99.836578"
  251 + y="205.91293"
  252 + transform="translate(0,308.2677)"
  253 + rx="24.959145"
  254 + ry="24.959145" />
  255 + <text
  256 + xml:space="preserve"
  257 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  258 + x="175.63876"
  259 + y="575.49884"
  260 + id="text3022"
  261 + sodipodi:linespacing="125%"><tspan
  262 + sodipodi:role="line"
  263 + id="tspan3024"
  264 + x="175.63876"
  265 + y="575.49884">Gitlab</tspan></text>
  266 + </g>
  267 + <g
  268 + transform="matrix(1.0487632,0,0,1.0487632,-80.194985,44.124888)"
  269 + id="g3034"
  270 + style="display:inline">
  271 + <rect
  272 + transform="translate(0,308.2677)"
  273 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate"
  274 + id="rect3036"
  275 + width="215.27261"
  276 + height="106.07636"
  277 + x="99.836578"
  278 + y="205.91293"
  279 + rx="24.959145"
  280 + ry="24.959145" />
  281 + <text
  282 + xml:space="preserve"
  283 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  284 + x="169.5842"
  285 + y="575.53479"
  286 + id="text3038"
  287 + sodipodi:linespacing="125%"><tspan
  288 + sodipodi:role="line"
  289 + id="tspan3040"
  290 + x="169.5842"
  291 + y="575.53479">COLAB</tspan></text>
  292 + </g>
  293 + <g
  294 + transform="matrix(1.0487632,0,0,1.0487632,226.64988,243.33747)"
  295 + id="g4271"
  296 + style="display:inline">
  297 + <rect
  298 + transform="translate(0,308.2677)"
  299 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate"
  300 + id="rect4273"
  301 + width="215.27261"
  302 + height="106.07636"
  303 + x="99.836578"
  304 + y="205.91293"
  305 + rx="24.959145"
  306 + ry="24.959145" />
  307 + <text
  308 + xml:space="preserve"
  309 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  310 + x="163.01907"
  311 + y="575.53479"
  312 + id="text4275"
  313 + sodipodi:linespacing="125%"><tspan
  314 + sodipodi:role="line"
  315 + id="tspan4277"
  316 + x="163.01907"
  317 + y="575.53479">Mailman</tspan></text>
  318 + </g>
  319 + <g
  320 + style="display:inline"
  321 + id="g4288"
  322 + transform="matrix(1.0487632,0,0,1.0487632,226.64988,125.74526)">
  323 + <rect
  324 + ry="24.959145"
  325 + rx="24.959145"
  326 + y="205.91293"
  327 + x="99.836578"
  328 + height="106.07636"
  329 + width="215.27261"
  330 + id="rect4290"
  331 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate"
  332 + transform="translate(0,308.2677)" />
  333 + <text
  334 + sodipodi:linespacing="125%"
  335 + id="text4292"
  336 + y="575.53479"
  337 + x="140.90532"
  338 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  339 + xml:space="preserve"><tspan
  340 + y="575.53479"
  341 + x="140.90532"
  342 + id="tspan4294"
  343 + sodipodi:role="line">Mailman-API</tspan></text>
  344 + </g>
  345 + </g>
  346 + <text
  347 + sodipodi:linespacing="125%"
  348 + id="text4541"
  349 + y="619.28687"
  350 + x="457.85617"
  351 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  352 + xml:space="preserve"><tspan
  353 + y="619.28687"
  354 + x="457.85617"
  355 + sodipodi:role="line"
  356 + id="tspan4543"
  357 + style="font-size:16.46647072px">HTTP</tspan><tspan
  358 + y="639.86993"
  359 + x="457.85617"
  360 + sodipodi:role="line"
  361 + id="tspan4545"
  362 + style="font-size:16.46647072px">reverse proxy</tspan></text>
  363 + <text
  364 + xml:space="preserve"
  365 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  366 + x="649.13086"
  367 + y="657.7215"
  368 + id="text4547"
  369 + sodipodi:linespacing="125%"><tspan
  370 + style="font-size:16.46647072px;text-align:start;text-anchor:start"
  371 + id="tspan4549"
  372 + sodipodi:role="line"
  373 + x="649.13086"
  374 + y="657.7215">HTTP</tspan><tspan
  375 + style="font-size:16.46647072px;text-align:start;text-anchor:start"
  376 + id="tspan4551"
  377 + sodipodi:role="line"
  378 + x="649.13086"
  379 + y="678.30457">reverse proxy</tspan></text>
  380 + <text
  381 + sodipodi:linespacing="125%"
  382 + id="text4553"
  383 + y="566.24707"
  384 + x="769.04694"
  385 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  386 + xml:space="preserve"><tspan
  387 + y="566.24707"
  388 + x="769.04694"
  389 + sodipodi:role="line"
  390 + id="tspan4557"
  391 + style="font-size:16.46647072px;text-align:start;text-anchor:start">HTTP</tspan></text>
  392 + <text
  393 + xml:space="preserve"
  394 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  395 + x="345.62704"
  396 + y="851.43207"
  397 + id="text4561"
  398 + sodipodi:linespacing="125%"><tspan
  399 + style="font-size:16.46647072px"
  400 + id="tspan4565"
  401 + sodipodi:role="line"
  402 + x="345.62704"
  403 + y="851.43207">SQL</tspan></text>
  404 + <text
  405 + sodipodi:linespacing="125%"
  406 + id="text4569"
  407 + y="753.59344"
  408 + x="485.86237"
  409 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  410 + xml:space="preserve"><tspan
  411 + y="753.59344"
  412 + x="485.86237"
  413 + sodipodi:role="line"
  414 + id="tspan4571"
  415 + style="font-size:16.46647072px">SQL</tspan></text>
  416 + <text
  417 + xml:space="preserve"
  418 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  419 + x="513.03973"
  420 + y="822.08044"
  421 + id="text4573"
  422 + sodipodi:linespacing="125%"><tspan
  423 + style="font-size:16.46647072px"
  424 + id="tspan4575"
  425 + sodipodi:role="line"
  426 + x="513.03973"
  427 + y="822.08044">SQL</tspan></text>
  428 + <text
  429 + sodipodi:linespacing="125%"
  430 + id="text4577"
  431 + y="850.34491"
  432 + x="643.99384"
  433 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  434 + xml:space="preserve"><tspan
  435 + y="850.34491"
  436 + x="643.99384"
  437 + sodipodi:role="line"
  438 + id="tspan4579"
  439 + style="font-size:16.46647072px;text-align:start;text-anchor:start">Protocolo</tspan><tspan
  440 + y="870.92798"
  441 + x="643.99384"
  442 + sodipodi:role="line"
  443 + style="font-size:16.46647072px;text-align:start;text-anchor:start"
  444 + id="tspan4581">nativo</tspan></text>
  445 + <text
  446 + sodipodi:linespacing="125%"
  447 + id="text4589"
  448 + y="556.0722"
  449 + x="177.66902"
  450 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  451 + xml:space="preserve"><tspan
  452 + y="556.0722"
  453 + x="177.66902"
  454 + sodipodi:role="line"
  455 + id="tspan4591"
  456 + style="font-size:16.46647072px">SMTP</tspan></text>
  457 + <text
  458 + sodipodi:linespacing="125%"
  459 + id="text4597"
  460 + y="505.26852"
  461 + x="432.2182"
  462 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  463 + xml:space="preserve"><tspan
  464 + y="505.26852"
  465 + x="432.2182"
  466 + sodipodi:role="line"
  467 + id="tspan4599"
  468 + style="font-size:16.46647072px">SMTP</tspan></text>
  469 + </g>
  470 + <g
  471 + inkscape:groupmode="layer"
  472 + id="layer5"
  473 + inkscape:label="Release 2"
  474 + style="display:inline">
  475 + <g
  476 + id="g4372"
  477 + transform="matrix(0.68610294,0,0,0.68610294,-257.62288,142.05473)">
  478 + <g
  479 + id="g4323"
  480 + transform="translate(471.10384,-45.23844)"
  481 + style="display:inline">
  482 + <rect
  483 + ry="24.959101"
  484 + rx="24.959101"
  485 + y="819.93018"
  486 + x="45.238449"
  487 + height="193.43336"
  488 + width="491.38315"
  489 + id="rect4325"
  490 + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#babdb6;fill-opacity:0.61568627;fill-rule:nonzero;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
  491 + <text
  492 + sodipodi:linespacing="125%"
  493 + id="text4327"
  494 + y="991.02106"
  495 + x="62.26289"
  496 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.92820835px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  497 + xml:space="preserve"><tspan
  498 + style="font-size:22.5px;fill:#555753"
  499 + y="991.02106"
  500 + x="62.26289"
  501 + id="tspan4329"
  502 + sodipodi:role="line">social</tspan></text>
  503 + </g>
  504 + <g
  505 + id="g3042"
  506 + transform="matrix(1.0487632,0,0,1.0487632,544.44394,276.5302)"
  507 + style="display:inline">
  508 + <rect
  509 + ry="24.959145"
  510 + rx="24.959145"
  511 + transform="translate(0,308.2677)"
  512 + y="205.91293"
  513 + x="99.836578"
  514 + height="106.07636"
  515 + width="215.27261"
  516 + id="rect3044"
  517 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate" />
  518 + <text
  519 + sodipodi:linespacing="125%"
  520 + id="text3046"
  521 + y="575.46283"
  522 + x="157.44057"
  523 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  524 + xml:space="preserve"><tspan
  525 + y="575.46283"
  526 + x="157.44057"
  527 + id="tspan3048"
  528 + sodipodi:role="line">Noosfero</tspan></text>
  529 + </g>
  530 + </g>
  531 + <g
  532 + id="g4343"
  533 + transform="matrix(0.68610294,0,0,0.68610294,-313.27764,36.270151)">
  534 + <g
  535 + transform="translate(552.22106,-389.98662)"
  536 + id="g4331"
  537 + style="display:inline">
  538 + <rect
  539 + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#babdb6;fill-opacity:0.61568627;fill-rule:nonzero;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
  540 + id="rect4333"
  541 + width="491.38315"
  542 + height="193.43336"
  543 + x="45.238449"
  544 + y="819.93018"
  545 + rx="24.959101"
  546 + ry="24.959101" />
  547 + <text
  548 + xml:space="preserve"
  549 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.92820835px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  550 + x="62.26289"
  551 + y="991.02106"
  552 + id="text4335"
  553 + sodipodi:linespacing="125%"><tspan
  554 + sodipodi:role="line"
  555 + id="tspan4337"
  556 + x="62.26289"
  557 + y="991.02106"
  558 + style="font-size:22.5px;fill:#555753">email</tspan></text>
  559 + </g>
  560 + <g
  561 + transform="translate(277.45747,43.873309)"
  562 + id="g4240">
  563 + <g
  564 + id="g4232"
  565 + transform="matrix(1.0487632,0,0,1.0487632,348.10369,-112.09129)"
  566 + style="display:inline">
  567 + <rect
  568 + ry="24.959145"
  569 + rx="24.959145"
  570 + transform="translate(0,308.2677)"
  571 + y="205.91293"
  572 + x="99.836578"
  573 + height="106.07636"
  574 + width="215.27261"
  575 + id="rect4234"
  576 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate" />
  577 + <text
  578 + sodipodi:linespacing="125%"
  579 + id="text4236"
  580 + y="575.46283"
  581 + x="170.96269"
  582 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  583 + xml:space="preserve"><tspan
  584 + y="575.46283"
  585 + x="170.96269"
  586 + id="tspan4238"
  587 + sodipodi:role="line">Postfix</tspan></text>
  588 + </g>
  589 + </g>
  590 + </g>
  591 + <g
  592 + transform="matrix(0.68610294,0,0,0.68610294,-326.80522,364.9756)"
  593 + id="g4449">
  594 + <rect
  595 + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d3d7cf;fill-opacity:0.61568627;fill-rule:nonzero;stroke:#babdb6;stroke-width:2.91501451;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
  596 + id="rect4531"
  597 + width="257.68625"
  598 + height="245.36218"
  599 + x="494.24698"
  600 + y="743.06433"
  601 + rx="9.5793791"
  602 + ry="9.5793791" />
  603 + <g
  604 + style="display:inline"
  605 + transform="translate(471.03,-45.23844)"
  606 + id="g4451">
  607 + <rect
  608 + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#babdb6;fill-opacity:0.61568627;fill-rule:nonzero;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
  609 + id="rect4453"
  610 + width="213.55743"
  611 + height="65.710571"
  612 + x="45.238449"
  613 + y="947.65295"
  614 + rx="15.452409"
  615 + ry="15.452409" />
  616 + <text
  617 + xml:space="preserve"
  618 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.92820835px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  619 + x="62.26289"
  620 + y="991.02106"
  621 + id="text4455"
  622 + sodipodi:linespacing="125%"><tspan
  623 + sodipodi:role="line"
  624 + id="tspan4457"
  625 + x="62.26289"
  626 + y="991.02106"
  627 + style="font-size:22.5px;fill:#555753">servidor</tspan></text>
  628 + </g>
  629 + <g
  630 + style="display:inline"
  631 + transform="matrix(1.0487632,0,0,1.0487632,410.82571,289.93364)"
  632 + id="g4459">
  633 + <rect
  634 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate"
  635 + id="rect4461"
  636 + width="106.31865"
  637 + height="52.388897"
  638 + x="99.836578"
  639 + y="205.91293"
  640 + transform="translate(0,308.2677)"
  641 + rx="6.5724359"
  642 + ry="6.5724359" />
  643 + <text
  644 + xml:space="preserve"
  645 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  646 + x="112.57272"
  647 + y="546.08508"
  648 + id="text4463"
  649 + sodipodi:linespacing="125%"><tspan
  650 + sodipodi:role="line"
  651 + id="tspan4465"
  652 + x="112.57272"
  653 + y="546.08508">Serviço</tspan></text>
  654 + </g>
  655 + <g
  656 + id="g4526"
  657 + transform="translate(0,3.0637686e-6)">
  658 + <path
  659 + sodipodi:nodetypes="cc"
  660 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart-4);enable-background:accumulate"
  661 + d="m 615.18822,805.26531 -99.9181,0.22208"
  662 + id="path4467"
  663 + inkscape:connector-curvature="0" />
  664 + <text
  665 + sodipodi:linespacing="125%"
  666 + id="text4522"
  667 + y="794.6015"
  668 + x="515.53412"
  669 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20.40509987px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  670 + xml:space="preserve"><tspan
  671 + y="794.6015"
  672 + x="515.53412"
  673 + id="tspan4524"
  674 + sodipodi:role="line">conexão</tspan></text>
  675 + </g>
  676 + <text
  677 + xml:space="preserve"
  678 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20.40509987px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
  679 + x="665.66437"
  680 + y="769.95325"
  681 + id="text4533"
  682 + sodipodi:linespacing="125%"><tspan
  683 + sodipodi:role="line"
  684 + id="tspan4535"
  685 + x="665.66437"
  686 + y="769.95325"
  687 + style="-inkscape-font-specification:'Cantarell Bold';font-family:Cantarell;font-weight:bold;font-style:normal;font-stretch:normal;font-variant:normal;fill:#555753;">Legenda</tspan></text>
  688 + </g>
  689 + </g>
  690 + <g
  691 + inkscape:groupmode="layer"
  692 + id="layer6"
  693 + inkscape:label="Release 3"
  694 + style="display:inline">
  695 + <g
  696 + id="g4358"
  697 + transform="matrix(0.68610294,0,0,0.68610294,499.06367,112.26031)">
  698 + <g
  699 + transform="translate(-1.5599465,-500.74283)"
  700 + id="g4302"
  701 + style="display:inline">
  702 + <rect
  703 + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#babdb6;fill-opacity:0.61568627;fill-rule:nonzero;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
  704 + id="rect4296"
  705 + width="491.38315"
  706 + height="193.43336"
  707 + x="45.238449"
  708 + y="819.93018"
  709 + rx="24.959101"
  710 + ry="24.959101" />
  711 + <text
  712 + xml:space="preserve"
  713 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.92820835px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  714 + x="62.26289"
  715 + y="991.02106"
  716 + id="text4298"
  717 + sodipodi:linespacing="125%"><tspan
  718 + sodipodi:role="line"
  719 + id="tspan4300"
  720 + x="62.26289"
  721 + y="991.02106"
  722 + style="font-size:22.5px;fill:#555753">reverseproxy</tspan></text>
  723 + </g>
  724 + <g
  725 + id="g3987"
  726 + transform="matrix(1.0487632,0,0,1.0487632,71.78015,-178.97419)"
  727 + style="display:inline">
  728 + <rect
  729 + ry="24.959145"
  730 + rx="24.959145"
  731 + y="205.91293"
  732 + x="99.836578"
  733 + height="106.07636"
  734 + width="215.27261"
  735 + id="rect3989"
  736 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate"
  737 + transform="translate(0,308.2677)" />
  738 + <text
  739 + sodipodi:linespacing="125%"
  740 + id="text3991"
  741 + y="575.11481"
  742 + x="126.62383"
  743 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  744 + xml:space="preserve"><tspan
  745 + y="575.11481"
  746 + x="126.62383"
  747 + id="tspan3993"
  748 + sodipodi:role="line">Frontend HTTP</tspan></text>
  749 + </g>
  750 + </g>
  751 + <path
  752 + inkscape:connector-curvature="0"
  753 + id="path5590"
  754 + d="m 634.01413,553.48165 c -0.36236,-61.8148 62.32682,-56.21368 62.508,-114.76719"
  755 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  756 + sodipodi:nodetypes="cc" />
  757 + <path
  758 + sodipodi:nodetypes="cc"
  759 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  760 + d="m 642.85409,689.15591 0.62824,-49.04397"
  761 + id="path4433"
  762 + inkscape:connector-curvature="0" />
  763 + <path
  764 + sodipodi:nodetypes="cc"
  765 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  766 + d="M 859.12722,609.13106 C 829.91865,575.18646 753.05114,554.30963 723.07388,599.54037"
  767 + id="path4437"
  768 + inkscape:connector-curvature="0" />
  769 + <path
  770 + inkscape:connector-curvature="0"
  771 + id="path4439"
  772 + d="m 271.00931,696.41651 c -0.36236,-61.8148 48.40654,-100.93072 283.89148,-100.93072"
  773 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  774 + sodipodi:nodetypes="cc" />
  775 + <path
  776 + inkscape:connector-curvature="0"
  777 + id="path4441"
  778 + d="m 630.55501,896.50178 c -2.09667,-64.00693 20.40483,-66.51846 19.07686,-115.92023"
  779 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  780 + sodipodi:nodetypes="cc" />
  781 + <path
  782 + sodipodi:nodetypes="cc"
  783 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  784 + d="M 397.48723,898.80785 C 397.78887,788.16087 262.61615,877.38604 264.36295,782.88763"
  785 + id="path4443"
  786 + inkscape:connector-curvature="0" />
  787 + <path
  788 + inkscape:connector-curvature="0"
  789 + id="path4445"
  790 + d="m 424.41946,896.50178 c -1.80573,-37.68499 12.38386,-120.28208 48.96766,-120.62805 38.60999,-0.36513 5.96395,-98.15121 42.04501,-99.61416 86.6488,-3.51329 82.65006,9.13901 86.41488,-35.58008"
  791 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  792 + sodipodi:nodetypes="cssc" />
  793 + <path
  794 + sodipodi:nodetypes="cc"
  795 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  796 + d="M 450.58299,896.50178 C 451.5611,765.36235 628.56982,888.6602 627.24185,779.81286"
  797 + id="path4447"
  798 + inkscape:connector-curvature="0" />
  799 + <path
  800 + sodipodi:nodetypes="cc"
  801 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  802 + d="m 260.24762,444.28533 c 2.71241,99.61065 -131.46755,100.46675 -126.5904,221.92019"
  803 + id="path4583"
  804 + inkscape:connector-curvature="0" />
  805 + <path
  806 + inkscape:connector-curvature="0"
  807 + id="path4585"
  808 + d="m 301.98953,444.28533 c -11.02329,92.39356 107.94916,65.41353 177.6501,74.78698 29.8001,4.00755 50.59374,14.66025 48.37091,44.1284"
  809 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  810 + sodipodi:nodetypes="csc" />
  811 + </g>
  812 + </g>
  813 + <g
  814 + inkscape:groupmode="layer"
  815 + id="layer2"
  816 + inkscape:label="Manutenção"
  817 + style="display:inline" />
  818 +</svg>
... ...
docs/backup.rst.in 0 → 100644
... ... @@ -0,0 +1,39 @@
  1 +Backup
  2 +======
  3 +
  4 +O SPB possui rotinas automatizadas para backup e restore dos dados de
  5 +todos os seus componentes. As seções a seguir descrevem estas rotinas.
  6 +Ambos os procedimentos devem ser realizados num *shell* onde o diretório
  7 +atual é o repositório de controle de versão do SPB.
  8 +
  9 +Procedimento de backup
  10 +----------------------
  11 +
  12 +Suponha que estamos realizando um backup do ambiente de produção,
  13 +chamado de ``prod``; o comando para realizar um *backup* é o seguinte
  14 +(note ``SPB_ENV=prod``)::
  15 +
  16 + $ rake backup SPB_ENV=prod
  17 +
  18 +Esta operação vai copiar arquivos e *dumps* dos bancos de dados do
  19 +Noosfero, GitLab, Colab e Mailman, e copiá-los para um subdiretório
  20 +chamado ``backups`` na sua estação de trabalho.
  21 +
  22 +Procedimento de restauração
  23 +---------------------------
  24 +
  25 +**Importante:** o procedimento de restauração é suportado apenas para uma
  26 +versão idêntica da plataforma, ou seja, não é suportado fazer um *backup*
  27 +de uma versão mais antiga da plataforma e restaurar esse *backup* numa
  28 +versão mais recente da plataforma, e nem vice-versa.
  29 +
  30 +O comando para restaurar um backup no ambiente **@@SPB_ENV@@** é o seguinte::
  31 +
  32 + $ rake restore SPB_ENV=@@SPB_ENV@@
  33 +
  34 +Esta operação vai restaurar o último backup realizado no ambiente
  35 +chamado **@@SPB_ENV@@**.
  36 +
  37 +**Importante:** a restauração do backup irá apagar os dados existes no
  38 +ambiente @@SPB_ENV@@. Confira duas vezes antes de iniciar o
  39 +procedimento.
... ...
docs/build.rb 0 → 100644
... ... @@ -0,0 +1,10 @@
  1 +$SPB_ENV = ENV.fetch('SPB_ENV', 'local')
  2 +
  3 +$_.gsub!('@@SPB_ENV@@', $SPB_ENV)
  4 +
  5 +$_.gsub!(/@@config\(([^\)]*)\)@@/) do |f|
  6 + lines = File.read("../config/#{$SPB_ENV}/#{$1}").lines
  7 + lines.shift + lines.map do |line|
  8 + ' ' + line
  9 + end.join
  10 +end
... ...
docs/conf.py
... ... @@ -1,331 +0,0 @@
1   -# -*- coding: utf-8 -*-
2   -#
3   -# softwarepublico documentation build configuration file, created by
4   -# sphinx-quickstart on Thu Nov 6 15:48:07 2014.
5   -#
6   -# This file is execfile()d with the current directory set to its
7   -# containing dir.
8   -#
9   -# Note that not all possible configuration values are present in this
10   -# autogenerated file.
11   -#
12   -# All configuration values have a default; values that are commented out
13   -# serve to show the default.
14   -
15   -import sys
16   -import os
17   -
18   -# If extensions (or modules to document with autodoc) are in another directory,
19   -# add these directories to sys.path here. If the directory is relative to the
20   -# documentation root, use os.path.abspath to make it absolute, like shown here.
21   -#sys.path.insert(0, os.path.abspath('.'))
22   -
23   -# -- General configuration ------------------------------------------------
24   -
25   -# If your documentation needs a minimal Sphinx version, state it here.
26   -#needs_sphinx = '1.0'
27   -
28   -# Add any Sphinx extension module names here, as strings. They can be
29   -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
30   -# ones.
31   -extensions = []
32   -
33   -# Add any paths that contain templates here, relative to this directory.
34   -templates_path = ['_templates']
35   -
36   -# The suffix of source filenames.
37   -source_suffix = '.rst'
38   -
39   -# The encoding of source files.
40   -#source_encoding = 'utf-8-sig'
41   -
42   -# The master toctree document.
43   -master_doc = 'index'
44   -
45   -# General information about the project.
46   -project = u'softwarepublico'
47   -copyright = u'2014, Universidade de Brasília - UnB. Documentação licenciada sob a Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional'
48   -
49   -# The version info for the project you're documenting, acts as replacement for
50   -# |version| and |release|, also used in various other places throughout the
51   -# built documents.
52   -#
53   -# The short X.Y version.
54   -version = '2.0'
55   -# The full version, including alpha/beta/rc tags.
56   -release = '2.0'
57   -
58   -# The language for content autogenerated by Sphinx. Refer to documentation
59   -# for a list of supported languages.
60   -#language = None
61   -
62   -# There are two options for replacing |today|: either, you set today to some
63   -# non-false value, then it is used:
64   -#today = ''
65   -# Else, today_fmt is used as the format for a strftime call.
66   -#today_fmt = '%B %d, %Y'
67   -
68   -# List of patterns, relative to source directory, that match files and
69   -# directories to ignore when looking for source files.
70   -exclude_patterns = ['_build']
71   -
72   -# The reST default role (used for this markup: `text`) to use for all
73   -# documents.
74   -#default_role = None
75   -
76   -# If true, '()' will be appended to :func: etc. cross-reference text.
77   -#add_function_parentheses = True
78   -
79   -# If true, the current module name will be prepended to all description
80   -# unit titles (such as .. function::).
81   -#add_module_names = True
82   -
83   -# If true, sectionauthor and moduleauthor directives will be shown in the
84   -# output. They are ignored by default.
85   -#show_authors = False
86   -
87   -# The name of the Pygments (syntax highlighting) style to use.
88   -pygments_style = 'sphinx'
89   -
90   -# A list of ignored prefixes for module index sorting.
91   -#modindex_common_prefix = []
92   -
93   -# If true, keep warnings as "system message" paragraphs in the built documents.
94   -#keep_warnings = False
95   -
96   -
97   -# -- Options for HTML output ----------------------------------------------
98   -
99   -# The theme to use for HTML and HTML Help pages. See the documentation for
100   -# a list of builtin themes.
101   -html_theme = 'default'
102   -
103   -# Theme options are theme-specific and customize the look and feel of a theme
104   -# further. For a list of options available for each theme, see the
105   -# documentation.
106   -#html_theme_options = {}
107   -
108   -# Add any paths that contain custom themes here, relative to this directory.
109   -#html_theme_path = []
110   -
111   -# The name for this set of Sphinx documents. If None, it defaults to
112   -# "<project> v<release> documentation".
113   -#html_title = None
114   -
115   -# A shorter title for the navigation bar. Default is the same as html_title.
116   -#html_short_title = None
117   -
118   -# The name of an image file (relative to this directory) to place at the top
119   -# of the sidebar.
120   -#html_logo = None
121   -
122   -# The name of an image file (within the static path) to use as favicon of the
123   -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
124   -# pixels large.
125   -#html_favicon = None
126   -
127   -# Add any paths that contain custom static files (such as style sheets) here,
128   -# relative to this directory. They are copied after the builtin static files,
129   -# so a file named "default.css" will overwrite the builtin "default.css".
130   -html_static_path = ['_static']
131   -
132   -# Add any extra paths that contain custom files (such as robots.txt or
133   -# .htaccess) here, relative to this directory. These files are copied
134   -# directly to the root of the documentation.
135   -#html_extra_path = []
136   -
137   -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
138   -# using the given strftime format.
139   -#html_last_updated_fmt = '%b %d, %Y'
140   -
141   -# If true, SmartyPants will be used to convert quotes and dashes to
142   -# typographically correct entities.
143   -#html_use_smartypants = True
144   -
145   -# Custom sidebar templates, maps document names to template names.
146   -#html_sidebars = {}
147   -
148   -# Additional templates that should be rendered to pages, maps page names to
149   -# template names.
150   -#html_additional_pages = {}
151   -
152   -# If false, no module index is generated.
153   -#html_domain_indices = True
154   -
155   -# If false, no index is generated.
156   -#html_use_index = True
157   -
158   -# If true, the index is split into individual pages for each letter.
159   -#html_split_index = False
160   -
161   -# If true, links to the reST sources are added to the pages.
162   -#html_show_sourcelink = True
163   -
164   -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
165   -#html_show_sphinx = True
166   -
167   -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
168   -#html_show_copyright = True
169   -
170   -# If true, an OpenSearch description file will be output, and all pages will
171   -# contain a <link> tag referring to it. The value of this option must be the
172   -# base URL from which the finished HTML is served.
173   -#html_use_opensearch = ''
174   -
175   -# This is the file name suffix for HTML files (e.g. ".xhtml").
176   -#html_file_suffix = None
177   -
178   -# Output file base name for HTML help builder.
179   -htmlhelp_basename = 'softwarepublicodoc'
180   -
181   -
182   -# -- Options for LaTeX output ---------------------------------------------
183   -
184   -latex_elements = {
185   -# The paper size ('letterpaper' or 'a4paper').
186   -#'papersize': 'letterpaper',
187   -
188   -# The font size ('10pt', '11pt' or '12pt').
189   -#'pointsize': '10pt',
190   -
191   -# Additional stuff for the LaTeX preamble.
192   -#'preamble': '',
193   -}
194   -
195   -# Grouping the document tree into LaTeX files. List of tuples
196   -# (source start file, target name, title,
197   -# author, documentclass [howto, manual, or own class]).
198   -latex_documents = [
199   - ('index', 'softwarepublico.tex',
200   - u'Documentação - Software Público Brasileiro (SPB)',
201   - u'Universidade de Brasília', 'manual'),
202   -]
203   -
204   -# The name of an image file (relative to this directory) to place at the top of
205   -# the title page.
206   -#latex_logo = None
207   -
208   -# For "manual" documents, if this is true, then toplevel headings are parts,
209   -# not chapters.
210   -#latex_use_parts = False
211   -
212   -# If true, show page references after internal links.
213   -#latex_show_pagerefs = False
214   -
215   -# If true, show URL addresses after external links.
216   -#latex_show_urls = False
217   -
218   -# Documents to append as an appendix to all manuals.
219   -#latex_appendices = []
220   -
221   -# If false, no module index is generated.
222   -#latex_domain_indices = True
223   -
224   -
225   -# -- Options for manual page output ---------------------------------------
226   -
227   -# One entry per manual page. List of tuples
228   -# (source start file, name, description, authors, manual section).
229   -man_pages = [
230   - ('index', 'softwarepublico',
231   - u'Documentação - Software Público Brasileiro (SPB)',
232   - [u'Universidade de Brasília'], 1)
233   -]
234   -
235   -# If true, show URL addresses after external links.
236   -#man_show_urls = False
237   -
238   -
239   -# -- Options for Texinfo output -------------------------------------------
240   -
241   -# Grouping the document tree into Texinfo files. List of tuples
242   -# (source start file, target name, title, author,
243   -# dir menu entry, description, category)
244   -texinfo_documents = [
245   - ('index', 'softwarepublico',
246   - u'Documentação - Software Público Brasileiro (SPB)',
247   - u'Universidade de Brasília', 'softwarepublico', 'One line description of project.',
248   - 'Miscellaneous'),
249   -]
250   -
251   -# Documents to append as an appendix to all manuals.
252   -#texinfo_appendices = []
253   -
254   -# If false, no module index is generated.
255   -#texinfo_domain_indices = True
256   -
257   -# How to display URL addresses: 'footnote', 'no', or 'inline'.
258   -#texinfo_show_urls = 'footnote'
259   -
260   -# If true, do not generate a @detailmenu in the "Top" node's menu.
261   -#texinfo_no_detailmenu = False
262   -
263   -
264   -# -- Options for Epub output ----------------------------------------------
265   -
266   -# Bibliographic Dublin Core info.
267   -epub_title = u'softwarepublico'
268   -epub_author = u'Universidade de Brasília'
269   -epub_publisher = u'Universidade de Brasília'
270   -epub_copyright = u'2014, Universidade de Brasília. Documentação licenciada sob a Licença Crea tive Commons Atribuição-CompartilhaIgual 4.0 Internacional'
271   -
272   -# The basename for the epub file. It defaults to the project name.
273   -#epub_basename = u'softwarepublico'
274   -
275   -# The HTML theme for the epub output. Since the default themes are not optimized
276   -# for small screen space, using the same theme for HTML and epub output is
277   -# usually not wise. This defaults to 'epub', a theme designed to save visual
278   -# space.
279   -#epub_theme = 'epub'
280   -
281   -# The language of the text. It defaults to the language option
282   -# or en if the language is not set.
283   -#epub_language = ''
284   -
285   -# The scheme of the identifier. Typical schemes are ISBN or URL.
286   -#epub_scheme = ''
287   -
288   -# The unique identifier of the text. This can be a ISBN number
289   -# or the project homepage.
290   -#epub_identifier = ''
291   -
292   -# A unique identification for the text.
293   -#epub_uid = ''
294   -
295   -# A tuple containing the cover image and cover page html template filenames.
296   -#epub_cover = ()
297   -
298   -# A sequence of (type, uri, title) tuples for the guide element of content.opf.
299   -#epub_guide = ()
300   -
301   -# HTML files that should be inserted before the pages created by sphinx.
302   -# The format is a list of tuples containing the path and title.
303   -#epub_pre_files = []
304   -
305   -# HTML files shat should be inserted after the pages created by sphinx.
306   -# The format is a list of tuples containing the path and title.
307   -#epub_post_files = []
308   -
309   -# A list of files that should not be packed into the epub file.
310   -epub_exclude_files = ['search.html']
311   -
312   -# The depth of the table of contents in toc.ncx.
313   -#epub_tocdepth = 3
314   -
315   -# Allow duplicate toc entries.
316   -#epub_tocdup = True
317   -
318   -# Choose between 'default' and 'includehidden'.
319   -#epub_tocscope = 'default'
320   -
321   -# Fix unsupported image types using the PIL.
322   -#epub_fix_images = False
323   -
324   -# Scale large images.
325   -#epub_max_image_width = 0
326   -
327   -# How to display URL addresses: 'footnote', 'no', or 'inline'.
328   -#epub_show_urls = 'inline'
329   -
330   -# If false, no index is generated.
331   -#epub_use_index = True
docs/conf.py.in 0 → 100644
... ... @@ -0,0 +1,331 @@
  1 +# -*- coding: utf-8 -*-
  2 +#
  3 +# softwarepublico documentation build configuration file, created by
  4 +# sphinx-quickstart on Thu Nov 6 15:48:07 2014.
  5 +#
  6 +# This file is execfile()d with the current directory set to its
  7 +# containing dir.
  8 +#
  9 +# Note that not all possible configuration values are present in this
  10 +# autogenerated file.
  11 +#
  12 +# All configuration values have a default; values that are commented out
  13 +# serve to show the default.
  14 +
  15 +import sys
  16 +import os
  17 +
  18 +# If extensions (or modules to document with autodoc) are in another directory,
  19 +# add these directories to sys.path here. If the directory is relative to the
  20 +# documentation root, use os.path.abspath to make it absolute, like shown here.
  21 +#sys.path.insert(0, os.path.abspath('.'))
  22 +
  23 +# -- General configuration ------------------------------------------------
  24 +
  25 +# If your documentation needs a minimal Sphinx version, state it here.
  26 +#needs_sphinx = '1.0'
  27 +
  28 +# Add any Sphinx extension module names here, as strings. They can be
  29 +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
  30 +# ones.
  31 +extensions = []
  32 +
  33 +# Add any paths that contain templates here, relative to this directory.
  34 +templates_path = ['_templates']
  35 +
  36 +# The suffix of source filenames.
  37 +source_suffix = '.rst'
  38 +
  39 +# The encoding of source files.
  40 +#source_encoding = 'utf-8-sig'
  41 +
  42 +# The master toctree document.
  43 +master_doc = 'index'
  44 +
  45 +# General information about the project.
  46 +project = u'softwarepublico'
  47 +copyright = u'2014-2015, Universidade de Brasília - UnB. Documentação licenciada sob a Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional'
  48 +
  49 +# The version info for the project you're documenting, acts as replacement for
  50 +# |version| and |release|, also used in various other places throughout the
  51 +# built documents.
  52 +#
  53 +# The short X.Y version.
  54 +version = '3'
  55 +# The full version, including alpha/beta/rc tags.
  56 +release = '3'
  57 +
  58 +# The language for content autogenerated by Sphinx. Refer to documentation
  59 +# for a list of supported languages.
  60 +language = 'pt_BR'
  61 +
  62 +# There are two options for replacing |today|: either, you set today to some
  63 +# non-false value, then it is used:
  64 +#today = ''
  65 +# Else, today_fmt is used as the format for a strftime call.
  66 +#today_fmt = '%B %d, %Y'
  67 +
  68 +# List of patterns, relative to source directory, that match files and
  69 +# directories to ignore when looking for source files.
  70 +exclude_patterns = ['_build']
  71 +
  72 +# The reST default role (used for this markup: `text`) to use for all
  73 +# documents.
  74 +#default_role = None
  75 +
  76 +# If true, '()' will be appended to :func: etc. cross-reference text.
  77 +#add_function_parentheses = True
  78 +
  79 +# If true, the current module name will be prepended to all description
  80 +# unit titles (such as .. function::).
  81 +#add_module_names = True
  82 +
  83 +# If true, sectionauthor and moduleauthor directives will be shown in the
  84 +# output. They are ignored by default.
  85 +#show_authors = False
  86 +
  87 +# The name of the Pygments (syntax highlighting) style to use.
  88 +pygments_style = 'sphinx'
  89 +
  90 +# A list of ignored prefixes for module index sorting.
  91 +#modindex_common_prefix = []
  92 +
  93 +# If true, keep warnings as "system message" paragraphs in the built documents.
  94 +#keep_warnings = False
  95 +
  96 +
  97 +# -- Options for HTML output ----------------------------------------------
  98 +
  99 +# The theme to use for HTML and HTML Help pages. See the documentation for
  100 +# a list of builtin themes.
  101 +html_theme = 'default'
  102 +
  103 +# Theme options are theme-specific and customize the look and feel of a theme
  104 +# further. For a list of options available for each theme, see the
  105 +# documentation.
  106 +#html_theme_options = {}
  107 +
  108 +# Add any paths that contain custom themes here, relative to this directory.
  109 +#html_theme_path = []
  110 +
  111 +# The name for this set of Sphinx documents. If None, it defaults to
  112 +# "<project> v<release> documentation".
  113 +#html_title = None
  114 +
  115 +# A shorter title for the navigation bar. Default is the same as html_title.
  116 +#html_short_title = None
  117 +
  118 +# The name of an image file (relative to this directory) to place at the top
  119 +# of the sidebar.
  120 +#html_logo = None
  121 +
  122 +# The name of an image file (within the static path) to use as favicon of the
  123 +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
  124 +# pixels large.
  125 +#html_favicon = None
  126 +
  127 +# Add any paths that contain custom static files (such as style sheets) here,
  128 +# relative to this directory. They are copied after the builtin static files,
  129 +# so a file named "default.css" will overwrite the builtin "default.css".
  130 +html_static_path = ['_static']
  131 +
  132 +# Add any extra paths that contain custom files (such as robots.txt or
  133 +# .htaccess) here, relative to this directory. These files are copied
  134 +# directly to the root of the documentation.
  135 +#html_extra_path = []
  136 +
  137 +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
  138 +# using the given strftime format.
  139 +#html_last_updated_fmt = '%b %d, %Y'
  140 +
  141 +# If true, SmartyPants will be used to convert quotes and dashes to
  142 +# typographically correct entities.
  143 +#html_use_smartypants = True
  144 +
  145 +# Custom sidebar templates, maps document names to template names.
  146 +#html_sidebars = {}
  147 +
  148 +# Additional templates that should be rendered to pages, maps page names to
  149 +# template names.
  150 +#html_additional_pages = {}
  151 +
  152 +# If false, no module index is generated.
  153 +#html_domain_indices = True
  154 +
  155 +# If false, no index is generated.
  156 +#html_use_index = True
  157 +
  158 +# If true, the index is split into individual pages for each letter.
  159 +#html_split_index = False
  160 +
  161 +# If true, links to the reST sources are added to the pages.
  162 +#html_show_sourcelink = True
  163 +
  164 +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
  165 +#html_show_sphinx = True
  166 +
  167 +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
  168 +#html_show_copyright = True
  169 +
  170 +# If true, an OpenSearch description file will be output, and all pages will
  171 +# contain a <link> tag referring to it. The value of this option must be the
  172 +# base URL from which the finished HTML is served.
  173 +#html_use_opensearch = ''
  174 +
  175 +# This is the file name suffix for HTML files (e.g. ".xhtml").
  176 +#html_file_suffix = None
  177 +
  178 +# Output file base name for HTML help builder.
  179 +htmlhelp_basename = 'softwarepublicodoc'
  180 +
  181 +
  182 +# -- Options for LaTeX output ---------------------------------------------
  183 +
  184 +latex_elements = {
  185 +# The paper size ('letterpaper' or 'a4paper').
  186 +#'papersize': 'letterpaper',
  187 +
  188 +# The font size ('10pt', '11pt' or '12pt').
  189 +#'pointsize': '10pt',
  190 +
  191 +# Additional stuff for the LaTeX preamble.
  192 +#'preamble': '',
  193 +}
  194 +
  195 +# Grouping the document tree into LaTeX files. List of tuples
  196 +# (source start file, target name, title,
  197 +# author, documentclass [howto, manual, or own class]).
  198 +latex_documents = [
  199 + ('index', 'softwarepublico.tex',
  200 + u'Software Público Brasileiro: Manual de Operação (@@SPB_ENV@@)',
  201 + u'Universidade de Brasília', 'manual'),
  202 +]
  203 +
  204 +# The name of an image file (relative to this directory) to place at the top of
  205 +# the title page.
  206 +#latex_logo = None
  207 +
  208 +# For "manual" documents, if this is true, then toplevel headings are parts,
  209 +# not chapters.
  210 +#latex_use_parts = False
  211 +
  212 +# If true, show page references after internal links.
  213 +#latex_show_pagerefs = False
  214 +
  215 +# If true, show URL addresses after external links.
  216 +#latex_show_urls = False
  217 +
  218 +# Documents to append as an appendix to all manuals.
  219 +#latex_appendices = []
  220 +
  221 +# If false, no module index is generated.
  222 +#latex_domain_indices = True
  223 +
  224 +
  225 +# -- Options for manual page output ---------------------------------------
  226 +
  227 +# One entry per manual page. List of tuples
  228 +# (source start file, name, description, authors, manual section).
  229 +man_pages = [
  230 + ('index', 'softwarepublico',
  231 + u'Documentação - Software Público Brasileiro (SPB)',
  232 + [u'Universidade de Brasília'], 1)
  233 +]
  234 +
  235 +# If true, show URL addresses after external links.
  236 +#man_show_urls = False
  237 +
  238 +
  239 +# -- Options for Texinfo output -------------------------------------------
  240 +
  241 +# Grouping the document tree into Texinfo files. List of tuples
  242 +# (source start file, target name, title, author,
  243 +# dir menu entry, description, category)
  244 +texinfo_documents = [
  245 + ('index', 'softwarepublico',
  246 + u'Documentação - Software Público Brasileiro (SPB)',
  247 + u'Universidade de Brasília', 'softwarepublico', 'One line description of project.',
  248 + 'Miscellaneous'),
  249 +]
  250 +
  251 +# Documents to append as an appendix to all manuals.
  252 +#texinfo_appendices = []
  253 +
  254 +# If false, no module index is generated.
  255 +#texinfo_domain_indices = True
  256 +
  257 +# How to display URL addresses: 'footnote', 'no', or 'inline'.
  258 +#texinfo_show_urls = 'footnote'
  259 +
  260 +# If true, do not generate a @detailmenu in the "Top" node's menu.
  261 +#texinfo_no_detailmenu = False
  262 +
  263 +
  264 +# -- Options for Epub output ----------------------------------------------
  265 +
  266 +# Bibliographic Dublin Core info.
  267 +epub_title = u'softwarepublico'
  268 +epub_author = u'Universidade de Brasília'
  269 +epub_publisher = u'Universidade de Brasília'
  270 +epub_copyright = u'2014, Universidade de Brasília. Documentação licenciada sob a Licença Crea tive Commons Atribuição-CompartilhaIgual 4.0 Internacional'
  271 +
  272 +# The basename for the epub file. It defaults to the project name.
  273 +#epub_basename = u'softwarepublico'
  274 +
  275 +# The HTML theme for the epub output. Since the default themes are not optimized
  276 +# for small screen space, using the same theme for HTML and epub output is
  277 +# usually not wise. This defaults to 'epub', a theme designed to save visual
  278 +# space.
  279 +#epub_theme = 'epub'
  280 +
  281 +# The language of the text. It defaults to the language option
  282 +# or en if the language is not set.
  283 +#epub_language = ''
  284 +
  285 +# The scheme of the identifier. Typical schemes are ISBN or URL.
  286 +#epub_scheme = ''
  287 +
  288 +# The unique identifier of the text. This can be a ISBN number
  289 +# or the project homepage.
  290 +#epub_identifier = ''
  291 +
  292 +# A unique identification for the text.
  293 +#epub_uid = ''
  294 +
  295 +# A tuple containing the cover image and cover page html template filenames.
  296 +#epub_cover = ()
  297 +
  298 +# A sequence of (type, uri, title) tuples for the guide element of content.opf.
  299 +#epub_guide = ()
  300 +
  301 +# HTML files that should be inserted before the pages created by sphinx.
  302 +# The format is a list of tuples containing the path and title.
  303 +#epub_pre_files = []
  304 +
  305 +# HTML files shat should be inserted after the pages created by sphinx.
  306 +# The format is a list of tuples containing the path and title.
  307 +#epub_post_files = []
  308 +
  309 +# A list of files that should not be packed into the epub file.
  310 +epub_exclude_files = ['search.html']
  311 +
  312 +# The depth of the table of contents in toc.ncx.
  313 +#epub_tocdepth = 3
  314 +
  315 +# Allow duplicate toc entries.
  316 +#epub_tocdup = True
  317 +
  318 +# Choose between 'default' and 'includehidden'.
  319 +#epub_tocscope = 'default'
  320 +
  321 +# Fix unsupported image types using the PIL.
  322 +#epub_fix_images = False
  323 +
  324 +# Scale large images.
  325 +#epub_max_image_width = 0
  326 +
  327 +# How to display URL addresses: 'footnote', 'no', or 'inline'.
  328 +#epub_show_urls = 'inline'
  329 +
  330 +# If false, no index is generated.
  331 +#epub_use_index = True
... ...
docs/dependencies.rst
... ... @@ -1,96 +0,0 @@
1   -
2   -.. _dependencies:
3   -
4   -Dependências
5   -============
6   -
7   -O repositório do SPB contém os pacotes que não são nativos do Sistema
8   -Operacional onde o mesmo o sistema do Portal do Software Público deve ser
9   -instalado. Esse repositório contém os pacotes referentes ao Bottle, Mailman-api,
10   -Solr, Colab e às dependências do Colab (pacote Colab-deps).
11   -
12   -Colab
13   -----------
14   -Esse pacote, contém o sistema Colab. O processo de
15   -criação desse pacote depende do pacote `python-virtualenv`, além de um
16   -conjunto de dependências python, contidos no pacote `colab-deps`, descrito na
17   -próxima seção. O processo de instalação desse pacote requer uma instalação
18   -prévia do pacote `colab-deps`, que é instalado automaticamente se o repositório
19   -do mesmo estiver disponível no conjunto de repositórios do `yum`.
20   -
21   -Colab-deps
22   -----------
23   -Este pacote contém as dependências *python* do Colab. Tais dependências foram
24   -encapsuladas em um ambiente virtual python (`python-virtualenv`), permitindo uma
25   -maior independência e, consequentemente, compatibilidade com o Sistema
26   -Operacional no qual o pacote seja instalado. Esse pacote é composto pelas
27   -ferramentas listadas a seguir.
28   -
29   -* Chardet
30   -* Django
31   -* Django-browserid
32   -* Django-cliauth
33   -* Django-common
34   -* Django-conversejs
35   -* Django-haystack
36   -* Django-hitcounter
37   -* Django-i18n-model
38   -* Django-mobile
39   -* Django-mptt
40   -* Django-piston
41   -* Django-revproxy
42   -* Django-taggit
43   -* Django-tastypie
44   -* Dpaste
45   -* Etiquetando
46   -* Eventlet
47   -* Fancy_tag
48   -* Feedzilla
49   -* Grab
50   -* Gunicorn
51   -* Html2text
52   -* Lorem-ipsum-generator
53   -* Lxml
54   -* Paste
55   -* Pip
56   -* Poster
57   -* Psycopg2
58   -* Pure-sasl
59   -* Pygments
60   -* Pysolr
61   -* Python-dateutil
62   -* Python-memcached
63   -* Python-mimeparse
64   -* PyYAML
65   -* Raven
66   -* Repoze.lru
67   -* Requests
68   -* Setuptools
69   -* Six
70   -* Sleekxmpp
71   -* South
72   -* Stemming
73   -* Tornado
74   -* Transliterate
75   -
76   -
77   -Mailman-api
78   ------------
79   -
80   -Esse pacote contém o Mailman-api. Esta ferramenta python possui como
81   -dependência os pacotes Bottle e python. Como o Bottle não é provido
82   -nativamente pelo CentOS 7, foi necessário empacotá-lo separadamente.
83   -
84   -Bottle
85   ------------
86   -
87   -Esse pacote contém a ferramenta Bottle, um framowork web escrito em
88   -python, e requisito para a utilização da ferramenta Mailman-api. Este pacote
89   -possui como dependência o pacote python, que está disponível nativamente no
90   -CentOS.
91   -
92   -Solr
93   -----
94   -Esse pacote contém a ferramenta python Bottle, e integra o conjunto de
95   -ferramentas do SPB. Sua instalação requer o pacote Java, que já existe
96   -nativamente no CentOS.
docs/firewall.rst.in 0 → 100644
... ... @@ -0,0 +1,72 @@
  1 +Gestão do Firewall
  2 +==================
  3 +
  4 +Firewall Interno
  5 +-----------------
  6 +
  7 +O Portal do Software Público atualmente é composto por diversos serviços
  8 +funcionando em diferentes servidores. Para o seu correto funcionamento é
  9 +esperado que estes serviços se comuniquem através de TCP/IP.
  10 +
  11 +Os scripts de instalação do Portal do Software Público também cuidam da
  12 +manutenção das regras de firewall. Cada máquina possui um firewall
  13 +(iptables) local que por padrão nega todos os tipos de conexão de
  14 +entrada em todas as portas (INPUT rules) mas permite conexões de saída
  15 +(OUTPUT rules).
  16 +
  17 +Todas as regras de firewall são definidas no cookbook ``firewall``. Para
  18 +definir regras de comunidacação entre hosts locais, válidas para todos
  19 +os ambientes (local, produção, homologação, testes, etc) são utilizados
  20 +templates que podem ser encontrados em
  21 +``cookbooks/firewall/templates/``. Para regras de filtro utilize o
  22 +arquivo ``iptables-filter.erb`` e para regras de `NAT` o arquivo
  23 +``iptables-nat.erb``.
  24 +
  25 +Para adicionar regras específicas de cada ambiente (por exemplo, abrir
  26 +uma porta diferente em homologação) utilize o arquivo
  27 +``config/@@SPB_ENV@@/iptables-filter-rules``. Este arquivo aceita apenas
  28 +regras de filtro do tipo INPUT.
  29 +
  30 +
  31 +Comunicação Entre Serviços
  32 +++++++++++++++++++++++++++++
  33 +
  34 +Os serviços que compõe o portal e suas portas de entrada são descritos
  35 +na tabela a seguir:
  36 +
  37 +============= ============= ============== =====
  38 +Destino Origem Serviço Porta
  39 +============= ============= ============== =====
  40 +database integration Redis 6379
  41 +database integration PostgreSQL 5432
  42 +database social PostgreSQL 5432
  43 +social reverseproxy Nginx 80
  44 +social reverseproxy Nginx 443
  45 +integration reverseproxy Nginx 80
  46 +integration reverseproxy Nginx 443
  47 +email externa Postfix 25
  48 +reverseproxy externa Nginx 80
  49 +reverseproxy externa Nginx 443
  50 +reverseproxy externa OpenSSH (git) 22
  51 +============= ============= ============== =====
  52 +
  53 +
  54 +Comunicação externa
  55 +-------------------
  56 +
  57 +============ ============= =====
  58 +Destino Serviço Porta
  59 +============ ============= =====
  60 +email Postfix 25
  61 +reverseproxy Nginx 80
  62 +reverseproxy Nginx 443
  63 +reverseproxy OpenSSH (git) 22
  64 +============ ============= =====
  65 +
  66 +**Outros firewalls da rede:**
  67 +
  68 +Além do firewall local é importante que os serviços com origem
  69 +``externa`` tenham suas portas de INPUT abertas em todos os firewalls da
  70 +rede. No caso do host ``email`` a porta **25** também deve estar aberta
  71 +para OUTPUT (alternativamente o Postfix pode ser configurado para enviar
  72 +e-mails utilizando um relay interno).
... ...
docs/firewall.rstin 0 → 100644
... ... @@ -0,0 +1,65 @@
  1 +Gestão do Firewall
  2 +==================
  3 +
  4 +Firewall Interno
  5 +-----------------
  6 +
  7 +O Portal do Software Público atualmente é composto por diversos serviços funcionando em diferentes servidores. Para o seu correto funcionamento é esperado que estes serviços se comuniquem através de TCP/IP.
  8 +
  9 +Os scripts de instalação do Portal do Software Público também cuidam da manutenção das regras de firewall. Cada máquina possui um firewall (iptables) local que por padrão nega todos os tipos de conexão de entrada em todas as portas (INPUT rules) mas permite conexões de saída (OUTPUT rules).
  10 +
  11 +Todas as regras de firewall são definidas no cookbook ``firewall``. Para definir regras de comunidacação entre hosts locais, válidas para todos os ambientes (local, produção, homologação, testes, etc) são utilizados templates que podem ser encontrados em ``cookbooks/firewall/templates/``. Para regras de filtro utilize o arquivo ``iptables-filter.erb`` e para regras de nat o arquivo ``iptables-nat.erb``.
  12 +
  13 +Para adicionar regras específicas de cada ambiente (por exemplo, abrir uma porta diferente em homologação) utilize o arquivo ``config/<nome_do_ambiente>/iptables-filter-rules``. Este arquivo aceita apenas regras de filtro do tipo INPUT.
  14 +
  15 +
  16 +Comunicação Entre Serviços
  17 +++++++++++++++++++++++++++++
  18 +
  19 +Os serviços que compõe o portal e suas portas de entrada são descritos na tabela a seguir:
  20 +
  21 ++--------------+--------------+---------------+--------+
  22 +| Destino | Origem + Serviço | Porta |
  23 ++==============+==============+===============+========+
  24 +| database | integration | Redis | 6379 |
  25 ++--------------+--------------+---------------+--------+
  26 +| database | integration | PostgreSQL | 5432 |
  27 ++--------------+--------------+---------------+--------+
  28 +| database | social | PostgreSQL | 5432 |
  29 ++--------------+--------------+---------------+--------+
  30 +| social | reverseproxy | Nginx | 80 |
  31 ++--------------+--------------+---------------+--------+
  32 +| social | reverseproxy | Nginx | 443 |
  33 ++--------------+--------------+---------------+--------+
  34 +| integration | reverseproxy | Nginx | 80 |
  35 ++--------------+--------------+---------------+--------+
  36 +| integration | reverseproxy | Nginx | 443 |
  37 ++--------------+--------------+---------------+--------+
  38 +| email | externa | Postfix | 25 |
  39 ++--------------+--------------+---------------+--------+
  40 +| reverseproxy | externa | Nginx | 80 |
  41 ++--------------+--------------+---------------+--------+
  42 +| reverseproxy | externa | Nginx | 443 |
  43 ++--------------+--------------+---------------+--------+
  44 +| reverseproxy | externa | OpenSSH (git) | 22 |
  45 ++--------------+--------------+---------------+--------+
  46 +
  47 +
  48 +Comunicação externa
  49 +-------------------
  50 +
  51 ++--------------+---------------+--------+
  52 +| Destino | Serviço | Porta |
  53 ++==============+===============+========+
  54 +| email | Postfix | 25 |
  55 ++--------------+---------------+--------+
  56 +| reverseproxy | Nginx | 80 |
  57 ++--------------+---------------+--------+
  58 +| reverseproxy | Nginx | 443 |
  59 ++--------------+---------------+--------+
  60 +| reverseproxy | OpenSSH (git) | 22 |
  61 ++--------------+---------------+--------+
  62 +
  63 +**Outros firewalls da rede:**
  64 +
  65 +Além do firewall local é importante que os serviços com origem ``externa`` tenham suas portas de INPUT abertas em todos os firewalls da rede. No caso do host ``email`` a porta **25** também deve estar aberta para OUTPUT (alternativamente o Postfix pode ser configurado para enviar e-mails utilizando um relay interno).
... ...
docs/implantacao.rst.in 0 → 100644
... ... @@ -0,0 +1,202 @@
  1 +Implantação
  2 +===========
  3 +
  4 +Preparação da estação de trabalho
  5 +---------------------------------
  6 +
  7 +Para gerenciar o SPB, é necessária uma estação de trabalho GNU/Linux,
  8 +que pode ser Debian 8 ou posterior, Ubuntu 14.04 ou superior, ou CentOS
  9 +7 ou superior (e equivalentes como RHEL 7 ou superior, ou Fedora). O
  10 +processo também pode ser feito em outros sistemas, desde que os pacotes
  11 +equivalentes estejam instalados.
  12 +
  13 +As seguintes ferramentas serão necessárias:
  14 +
  15 +* git_: ferramenta de controle de versão.
  16 +* chake_: ferramenta de gestão de configuração.
  17 +
  18 +.. _chake: https://gitlab.com/terceiro/chake
  19 +.. _git: http://git-scm.com/
  20 +
  21 +Para instalar em Debian/Ubuntu::
  22 +
  23 + $ sudo apt-get install git ruby
  24 + $ sudo gem install chake
  25 +
  26 +Para instalar em CentOS/RHEL/Fedora::
  27 +
  28 + $ sudo yum install git ruby
  29 + $ sudo gem install chake
  30 +
  31 +Além dessas ferramentas, será necessário um emulador de terminal. O
  32 +emulador de terminal padrão do seu ambiente de trabalho, ou qualquer
  33 +outro, vai servir.
  34 +
  35 +Obtendo o repositório de configuração
  36 +-------------------------------------
  37 +
  38 +Para iniciar, é necessário uma conta e usuário no SPB, com uma chave SSH
  39 +configurada.
  40 +
  41 +Para obter o repositório de configuração, é necessário clonar o
  42 +repositório com ``git``::
  43 +
  44 + $ git clone git@beta.softwarepublico.gov.br:softwarepublico/softwarepublico.git
  45 +
  46 +A partir daqui, todos os passos serão executados de dentro do
  47 +repositório, então se certifique que o seu *shell* está no diretório
  48 +onde foi clonado o repositório::
  49 +
  50 + $ cd softwarepublico/
  51 +
  52 +
  53 +Preparação dos servidores
  54 +-------------------------
  55 +
  56 +* Os servidores precisam estar acessíveis por SSH. Caso necessário,
  57 + podem ser feitas configurações do SSH em
  58 + ``config/@@SPB_ENV@@/ssh_config`` para isso.
  59 +* O usuário que vai conectar via SSH nos servidores precisa:
  60 + * ter acesso SSH configurado via chave SSH para evitar digitar senha.
  61 + * ter permissão de usar ``sudo`` sem a necessidade de digitar senha.
  62 +
  63 +Configuração do ambiente alvo
  64 +-----------------------------
  65 +
  66 +O SPB tem o conceito de "ambientes", que são diferentes instalações da
  67 +mesma plataforma. Todas as informações específicas sobre um determinado
  68 +ambiente estão centralizadas em arquivos dentro do diretório
  69 +``config/${ambiente}/``. Por exemplo, o ambiente "local", que se destina
  70 +ao uso para desenvolvimento local com máquinas virtuais, possui o
  71 +seguinte conteúdo::
  72 +
  73 + $ find config/local/ | sort
  74 + config/local/config.yaml
  75 + config/local/ips.yaml
  76 + config/local/ssh_config
  77 +
  78 +Estes arquivos possuem a seguinte finalidade:
  79 +
  80 +* ``config.yaml``: Parâmetros gerais de configuração
  81 +* ``ips.yaml``: Tabela de IP's (na rede local) das máquinas que compõem
  82 + o ambiente.
  83 +* ``ssh_config``: Configuração necessária para o SSH. Pode ser um
  84 + arquivo caso não seja necessária nenhuma configuração especial para
  85 + acessar as máquinas (e.g. se você está na mesma rede local que elas.
  86 +
  87 +Vamos agora verificar o conteúdo de cada arquivo no ambiente
  88 +**@@SPB_ENV@@**. Primeiro, ``config.yaml``:
  89 +
  90 +.. code-block:: yaml
  91 +
  92 + @@config(config.yaml)@@
  93 +
  94 +Para nossa sorte, o significado de cada um dos campo acima deve ser
  95 +autoexplicativo.
  96 +
  97 +O arquivo ``ips.yaml`` contém uma tabela com os endereços IP de cada
  98 +servidor da plataforma na rede local. Exemplo:
  99 +
  100 +.. code-block:: yaml
  101 +
  102 + @@config(ips.yaml)@@
  103 +
  104 +Já o arquivo ``ssh_config`` contém opções padrão de configuração do
  105 +``ssh`` para conexão às máquinas::
  106 +
  107 + @@config(ssh_config)@@
  108 +
  109 +Configuração do DNS
  110 +-------------------
  111 +
  112 +A tabela a seguir foi gerada dinamicamente a partir da configuração do
  113 +ambiente **@@SPB_ENV@@**. As seguintes entradas precisam ser configuradas no
  114 +DNS:
  115 +
  116 +.. include:: dns.rst
  117 +
  118 +Verificando o ambiente
  119 +----------------------
  120 +
  121 +Para listar as máquinas do ambiente::
  122 +
  123 + $ rake nodes SPB_ENV=@@SPB_ENV@@
  124 +
  125 +O comando acima deve dar o seguinte resultado::
  126 +
  127 + integration ssh
  128 + email ssh
  129 + social ssh
  130 + database ssh
  131 + reverseproxy ssh
  132 +
  133 +Note que todas as vezes que formos chamar ``rake``, será preciso
  134 +informar sobre qual ambiente desejamos operar (``SPB_ENV=@@SPB_ENV@@``).
  135 +Caso você for operar sobre apenas um ambiente, ou caso você queira
  136 +evitar digitação, você pode criar um arquivo ``local.rake`` na raiz do
  137 +repositório com o seguinte conteúdo::
  138 +
  139 + ENV['SPB_ENV'] ||= '@@SPB_ENV@@'
  140 +
  141 +Isto fará com que o valor e ``SPB_ENV`` seja sempre ``@@SPB_ENV@@``, a
  142 +não ser que você informe na linha de comando. Daqui para frente, vamos
  143 +sempre exibir o parâmetro ``SPB_ENV=@@SPB_ENV@@``, mas lembre-se que ele pode ser omitido se você tiver configurado o *default* em ``local.rake``.
  144 +
  145 +Para testar a conectividade às máquinas, podemos executar um comando
  146 +nelas::
  147 +
  148 + $ rake nodes SPB_ENV=@@SPB_ENV@@
  149 + $ <PROMPT PARA VOCÊ DIGITAR>
  150 +
  151 +No prompt, entre um comando simples como ``sudo date``. O resultado deve ser
  152 +parecido com o seguinte::
  153 +
  154 + $ rake run
  155 + $ sudo date
  156 + integration: $ sudo date
  157 + integration: Qui Mai 14 18:59:19 BRT 2015
  158 + email: $ sudo date
  159 + email: Qui Mai 14 18:59:22 BRT 2015
  160 + social: $ sudo date
  161 + social: Qui Mai 14 18:59:24 BRT 2015
  162 + database: $ sudo date
  163 + database: Qui Mai 14 18:59:27 BRT 2015
  164 + reverseproxy: $ sudo date
  165 + reverseproxy: Qui Mai 14 18:59:28 BRT 2015
  166 +
  167 +Se o resultado se parece com o exemplo acima, e você não precisou digitar a sua
  168 +senha nehuma vez, significa que 1) você conseguiu conectar em todas as máquinas
  169 +e 2) o sudo sem senha está configurado corretamente. Está tudo certo para
  170 +começar!
  171 +
  172 +Primeira instalação
  173 +-------------------
  174 +
  175 +Uma vez configurados os parâmetros em ``config/@@SPB_ENV@@/``, podemos
  176 +dar início à instalação. O primeiro passo é uma preconfiguração que
  177 +precisamos fazer::
  178 +
  179 + $ rake preconfig SPB_ENV=@@SPB_ENV@@
  180 +
  181 +
  182 +Este comando vai fazer uma configuração inicial que é necessária para o
  183 +resto do processo, e **só é necessária fazer uma vez**.
  184 +
  185 +Depois de completo o procedimento acima, para aplicar as configurações a
  186 +todos os servidores basta executar::
  187 +
  188 + $ rake converge SPB_ENV=@@SPB_ENV@@
  189 +
  190 +O comando ``converge`` na verdade é o *default*, então o seguinte é
  191 +equivalente::
  192 +
  193 + $ rake SPB_ENV=@@SPB_ENV@@
  194 +
  195 +Se você tiver configurado o ambiente **@@SPB_ENV@@** no ``local.rake``
  196 +(ver instruções acima), então o comando seguinte, também equivalente, é
  197 +muito mais simples::
  198 +
  199 + $ rake
  200 +
  201 +Todas as possibilidades de comandos serão listados se você executar
  202 +``rake -T``. Consulte também a documentação do chake_.
... ...
docs/index.rst
... ... @@ -1,39 +0,0 @@
1   -
2   -Documentação do Software Público Brasileiro (SPB)
3   -=================================================
4   -
5   -Introdução
6   -----------
7   -
8   -Bem-vindo a documentação do Portal do Software Público Brasileiro.
9   -
10   -O Portal do Software Público Brasileiro (SPB), na prática, é um sistema Web
11   -que se consolidou como um ambiente de compartilhamento de softwares. O projeto
12   -de evolução deste portal está sendo desenvolvido pela Universidade de Brasília.
13   -
14   -Hoje o SPB é um sistema Web composto por ferramentas livres integradas porém com
15   -desenvolvimento e comunidades independentes.
16   -
17   -As ferramentas que compõe o Software Público são:
18   -
19   -* **Mailman**: Para lista de e-mail estamos utilizando o Mailman na versão 2, que é um software gratuito para gerenciamento de discussão eletrônica de e-mail e listas *e-newsletter*;
20   -
21   -* **Noosfero**: Para rede social estamos utilizando o Noosfero que é uma plataforma web livre para criação de redes sociais com blog, e-Portifólios, CMS, RSS, discussão temática, agenda de eventos, galeria de imagens, chat, entre outros. Ele foi desenvolvido pela Cooperativa de Tecnologias Livres – Colivre 3 em 2007, sob a licença AGPL v.3, com a proposta de permitir ao usuário criar sua própria rede social personalizada, livre e autônoma;
22   -
23   -* **Gitlab**: Para Forge para Git estamos utilizando o GitLab, que é um software livre de colaboração de código *online* que utiliza a ferramenta de gerência de código fonte Git;
24   -
25   -* **Solr**: Para Plataforma de Buscas estamos utilizando Apache Solr, que é uma plataforma de busca open source da Apache Lucene escrita em Java;
26   -
27   -* **Persona**: Para suporte a autentição Federada estamos utilizando o Mozilla Persona, que foi desenvolvido pela Mozilla Foundation.
28   -
29   -* **Colab**: Para integrar todas estas ferramentas estamos utilizando o Colab, que é uma plataforma de integração de ferramentas. Nele, são também integradas as interfaces das ferramentas para que, ao navegar, o usuário tenha a sensação de estar navegando em uma única ferramenta.
30   -
31   -
32   -Conteúdos
33   -----------
34   -
35   -.. toctree::
36   - :maxdepth: 3
37   -
38   - install
39   - dependencies
docs/index.rst.in 0 → 100644
... ... @@ -0,0 +1,12 @@
  1 +Software Público Brasileiro: Manual de Operação (@@SPB_ENV@@)
  2 +*******************************************************************************
  3 +
  4 +.. toctree::
  5 + :maxdepth: 1
  6 +
  7 + introducao
  8 + arquitetura
  9 + implantacao
  10 + manutencao
  11 + backup
  12 + firewall
... ...
docs/install.rst
... ... @@ -1,403 +0,0 @@
1   -Instalação
2   -==========
3   -
4   -.. Descrição dos pacotes e listagem das dependências de cada pacote
5   -
6   -Para instalação das ferramentas que compõem o Software Público, é necessária a
7   -instalação de um conjunto de pacotes RPM. Um pacote RPM consiste em uma coleção
8   -de uma ou mais ferramentas que permite um meio automático de instalação,
9   -atualização, configuração e remoção de softwares.
10   -
11   -O processo de instalação aqui descrito permite a instalação e configuração
12   -desses pacotes em uma máquina com o Sistema Operacional CentOS 7 instalado e
13   -atualizado. Os pacotes a seguir já são fornecidos nativamente pelo Sistema
14   -Operacional, não sendo necessária uma configuração adicional para a
15   -instalação dos mesmos.
16   -
17   -* Mailman
18   -* Nginx
19   -* PostgreSQL Server
20   -
21   -Somados a esses, alguns pacotes não fornecidos nativamente também são
22   -necessários. Os mesmos estão listados a seguir.
23   -
24   -* Noosfero
25   -* Gitlab
26   -* Gitlab-deps
27   -* Solr
28   -* Colab
29   -* Colab-deps
30   -* Mailman-api
31   -
32   -Para disponibilizar cada pacote não nativo do CentOS 7, fez-se um levantamento
33   -das dependências de cada ferramenta empacotada, bem como do processo de
34   -instalação de cada uma, de modo a automatizar esse processo.
35   -A seção :ref:`dependencies` descreve brevemente o levantamento de dependências
36   -feito.
37   -
38   -
39   -Repositório do SPB
40   --------------------
41   -
42   -.. Configuração do repositório yum em /etc/yum.repos.d
43   -
44   -Para instalação dos pacotes existentes no repositório do SPB através do
45   -gerenciador de instalação e remoção de pacotes do CentOS (o *Yum*), é preciso
46   -adicionar o arquivo de configuração desse repositório no diretório
47   -`/etc/yum.repos.d/` do Sistema Operacional onde o Portal do Software Público deve
48   -Procedimento:
49   -
50   -Os comandos a seguir devem ser executados via terminal, com permissões de super
51   -usuário do sistema.
52   -
53   -1. Instalar (caso não esteja instalado) o programa `wget`, para download das
54   - configurações de repositório
55   -
56   -::
57   -
58   - yum install -y wget
59   -
60   -2. Ir para o diretório `/etc/yum.repos.d/`
61   -
62   -::
63   -
64   - cd /etc/yum.repos.d/
65   -
66   -3. Fazer o *download* dos arquivos de configuração nesse diretório:
67   -
68   -::
69   -
70   - wget http://download.opensuse.org/repositories/isv:/spb:/colab/CentOS_7/isv:spb:colab.repo
71   - wget http://download.opensuse.org/repositories/isv:/spb:/mailman-api/CentOS_7/isv:spb:mailman-api.repo
72   - wget http://download.opensuse.org/repositories/isv:/spb:/gitlab/CentOS_7/isv:spb:gitlab.repo
73   -
74   -4. Instalar repositório para instalação do servidor web Nginx:
75   -
76   -::
77   -
78   - rpm -i http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
79   -
80   -
81   -Instalação das Ferramentas (via pacote)
82   ----------------------------------------
83   -
84   -.. Instalação dos pacotes via yum
85   -
86   -Após a configuração do repositório do SPB, todos os pacotes deverão estar
87   -disponíveis através do *yum*. Ainda que algumas dependências sejam tratadas
88   -automaticamente, o comportamento de alguns pacotes é dependente da ordem em que
89   -os mesmos são instalados. Portanto, deve-se executar a instalação na ordem
90   -especificada a seguir.
91   -Os comandos a seguir devem ser executados via terminal, com permissões de super
92   -usuário do sistema.
93   -
94   -Procedimento:
95   -
96   -1. Instalar o pacote PostreSQL Server
97   -
98   -::
99   -
100   - yum install -y postgresql-server
101   -
102   -2. Instalar o pacote do servidor de estrutura de dados Redis
103   -
104   -::
105   -
106   - yum install -y redis
107   -
108   -3. Instalar os pacotes do source forge Gitlab e gerenciador de repositórios
109   - Gitlab-shell
110   -
111   -::
112   -
113   - yum install -y gitlab gitlab-shell
114   -
115   -4. Instalar o pacote da ferramenta Noosfero
116   -
117   -::
118   -
119   - yum install -y noosfero
120   -
121   -5. Instalar o pacote da ferramenta de integração Colab
122   -
123   -::
124   -
125   - yum install -y colab
126   -
127   -6. Instalar o pacote do servidor web Nginx
128   -
129   -::
130   -
131   - yum install -y nginx
132   -
133   -Configurações
134   ---------------
135   -
136   -
137   -Nginx
138   -+++++
139   -
140   -Para configurar o Nginx crie o arquivo ``/etc/nginx/conf.d/colab.conf`` com o conteúdo abaixo:
141   -
142   -.. code-block:: nginx
143   -
144   - upstream colab {
145   - server 127.0.0.1:8001 fail_timeout=10s;
146   - }
147   -
148   - server {
149   - listen *:80;
150   -
151   - server_name beta.softwarepublico.gov.br;
152   - return 301 https://$server_name$request_uri;
153   - }
154   -
155   - server {
156   - listen *:443 ssl;
157   -
158   - server_name beta.softwarepublico.gov.br;
159   -
160   - ssl on;
161   -
162   - ssl_certificate /etc/nginx/colab.crt;
163   - ssl_certificate_key /etc/nginx/colab.key;
164   - ssl_session_cache shared:SSL:10m;
165   - ssl_session_timeout 5m;
166   - ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
167   - ssl_ciphers HIGH:!aNULL:!MD5;
168   - ssl_prefer_server_ciphers on;
169   -
170   - access_log /var/log/nginx/ssl-colab.access.log;
171   - error_log /var/log/nginx/ssl-colab.error.log;
172   -
173   - location /gitlab/assets/ {
174   - alias /var/lib/gitlab-assets/;
175   - }
176   -
177   - location / {
178   - root /usr/share/nginx/colab;
179   - try_files $uri @colab-app;
180   - }
181   -
182   - location @colab-app {
183   - proxy_pass http://colab;
184   - proxy_read_timeout 90;
185   - proxy_connect_timeout 90;
186   - proxy_redirect off;
187   - proxy_set_header Host $host;
188   - proxy_set_header X-Real-IP $remote_addr;
189   - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
190   - proxy_set_header X-Forwarded-Proto https;
191   - }
192   - }
193   -
194   -
195   -Substitua o domínio de exemplo ``beta.softwarepublico.gov.br`` pelo domínio
196   -desejado.
197   -
198   -Certifique-se de instalar o certificado SSL (``/etc/nginx/colab.crt``) e sua
199   -chave privada (``/etc/nginx/colab.key``).
200   -
201   -Reinicie o serviço do Nginx com o comando: ``sudo service nginx restart``.
202   -
203   -
204   -Colab
205   -+++++
206   -
207   -Edite o arquivo ``/etc/colab/settings.yaml`` e adicione o nome e e-mail dos administradores do sistema:
208   -
209   -.. code-block:: yaml
210   -
211   - ## System admins
212   - ADMINS: &admin
213   - -
214   - - John Foo
215   - - john@example.com
216   - -
217   - - Mary Bar
218   - - mary@example.com
219   -
220   - MANAGERS: *admin
221   -
222   -
223   -Edite o arquivo ``/etc/colab/settings.yaml`` e configure a URL principal da aplicação, quais hosts deverão aceitar requisições e quais hosts poderão ser utilizadas para que o login seja efetuado. Exemplo:
224   -
225   -.. code-block:: yaml
226   -
227   - SITE_URL: 'https://beta.softwarepublico.gov.br'
228   -
229   - ALLOWED_HOSTS:
230   - - beta.softwarepublico.gov.br
231   -
232   - BROWSERID_AUDIENCES:
233   - - http://beta.softwarepublico.gov.br
234   - - https://beta.softwarepublico.gov.br
235   -
236   -
237   -Edite o arquivo ``/etc/colab/settings.yaml`` e configure o endereço que será utilizado no FROM dos e-mails enviados pelo Colab. Veja o exemplo:
238   -
239   -.. code-block:: yaml
240   -
241   - COLAB_FROM_ADDRESS: '"Portal do Software Publico" <noreply@beta.softwarepublico.gov.br>'
242   - SERVER_EMAIL: '"Portal do Software Publico" <noreply@beta.softwarepublico.gov.br>'
243   -
244   -
245   -Edite o arquivo ``/etc/colab/settings.yaml`` e configure o endereço das ferramentas a serem integradas ao Colab. Veja o exemplo:
246   -
247   -.. code-block:: yaml
248   -
249   - PROXIED_APPS:
250   - gitlab:
251   - upstream: 'http://localhost:8080/gitlab'
252   - noosfero:
253   - upstream: 'http://localhost:8090/noosfero'
254   -
255   -
256   -Após editar todos os arquivos desejados reinicie o processo do Colab com
257   -utilizando o comando ``service colab restart``.
258   -
259   -
260   -Gitlab
261   -++++++
262   -
263   -Edite o arquivo ``/etc/gitlab/gitlab.yml`` acrescentando o atributo
264   -relative_url_root após a linha ``email_from: example@example.com``.
265   -Veja o exemplo a seguir:
266   -
267   -.. code-block:: yaml
268   -
269   - email_from:example@example.com
270   - relative_url_root: /gitlab
271   -
272   -
273   -Descomente a linha a seguir no arquivo ``/etc/gitlab/unicorn.rb``, veja o exemplo:
274   -
275   -.. code-block:: ruby
276   -
277   - ENV['RAILS_RELATIVE_URL_ROOT'] = "/gitlab"
278   -
279   -
280   -Altere o atributo gitlab_url no arquivo ``/etc/gitlab-shell/config.yml``, acrescentando /gitlab a url existente. Veja o exemplo:
281   -
282   -.. code-block:: yaml
283   -
284   - gitlab_url: "http://localhost:8080/gitlab"
285   -
286   -
287   -Descomente a linha a seguir no arquivo ``/usr/lib/gitlab/config/application.rb``, veja o exemplo:
288   -
289   -.. code-block:: ruby
290   -
291   - config.relative_url_root = "/gitlab"
292   -
293   -
294   -Após a configuração acima ter sido feita o serviço do gitlab precisa ser reiniciado utilizando o comando ``service gitlab restart``.
295   -
296   -Noosfero
297   -++++++++
298   -
299   -Edite o arquivo ``/etc/noosfero/thin.yml``, e adicione uma linha com o
300   -seguinte conteúdo:
301   -
302   -.. code-block:: yaml
303   -
304   - prefix: /social
305   -
306   -Crie/edite o arquivo ``/etc/default/noosfero`` e adicione a seguinte
307   -linha:
308   -
309   -.. code-block:: ruby
310   -
311   - export RAILS_RELATIVE_URL_ROOT=/social
312   -
313   -Reinicie o serviço:
314   -
315   -.. code-block:: sh
316   -
317   - $ sudo service noosfero restart
318   -
319   -Mailman
320   -+++++++
321   -
322   -Edite o arquivo de configuração do `mailman` em
323   -``/etc/mailman/mm_cfg.py``, e ajuste os seguintes valores:
324   -
325   -.. code-block:: python
326   -
327   - DEFAULT_EMAIL_HOST = 'listas.softwarepublico.gov.br'
328   - MTA = None
329   - POSTFIX_STYLE_VIRTUAL_DOMAINS = ['listas.softwarepublico.gov.br']
330   -
331   -Crie a lista de discussão default, necessária para a inicialização do
332   -serviço. Substitua ``USER@DOMAIN.COM`` pelo email a ser usado como
333   -administrador do `mailman`, e ``PASSWORD`` pela senha de administração do
334   -`mailman`.
335   -
336   -.. code-block:: sh
337   -
338   - $ sudo -u mailman /usr/lib/mailman/bin/newlist --quiet mailman USER@DOMAIN.COM PASSWORD
339   - $ sudo service mailman restart
340   -
341   -
342   -Postfix
343   -+++++++
344   -
345   -Configure o postfix:
346   -
347   -.. code-block:: sh
348   -
349   - $ sudo postconf relay_domains=listas.softwarepublico.gov.br
350   - $ sudo postconf transport_maps=hash:/etc/postfix/transport
351   -
352   -Crie/edite ``/etc/postfix/transport`` com o seguinte conteúdo:
353   -
354   -.. code-block:: sh
355   -
356   - listas.softwarepublico.gov.br mailman:
357   -
358   -
359   -Faça o download do arquivo :download:`postfix-to-mailman-centos.py` e salve no
360   -diretório ``/etc/postfix``, e altere as permissões para tornar o arquivo
361   -executável:
362   -
363   -.. code-block:: sh
364   -
365   - $ sudo chmod +x /etc/postfix/postfix-to-mailman-centos.py
366   -
367   -Adicione o seguinte conteúdo no final do arquivo ``/etc/postfix/master.cf``:
368   -
369   -::
370   -
371   - mailman unix - n n - - pipe
372   - flags=FR user=mailman:mailman
373   - argv=/etc/postfix/postfix-to-mailman-centos.py ${nexthop} ${user}
374   -
375   -Gere o banco de dados para consulta, e reinicie o serviço:
376   -
377   -.. code-block:: sh
378   -
379   - $ sudo postmap /etc/postfix/transport
380   - $ sudo service postfix restart
381   -
382   -Inicie o serviço do mailman-api:
383   -
384   -.. code-block:: sh
385   -
386   - $ sudo service mailman-api start
387   -
388   -
389   -Habilitar inicialização automática dos serviços
390   -+++++++++++++++++++++++++++++++++++++++++++++++
391   -
392   -Para permitir que os serviços iniciem automaticamente, execute os comandos
393   -abaixo:
394   -
395   -.. code-block:: sh
396   -
397   - $ sudo systemctl enable mailman
398   - $ sudo systemctl enable mailman-api
399   - $ sudo systemctl enable nginx
400   - $ sudo systemctl enable colab
401   - $ sudo systemctl enable noosfero
402   - $ sudo chkconfig --add gitlab
403   - $ sudo chkconfig --add solr
docs/introducao.rst.in 0 → 100644
... ... @@ -0,0 +1,55 @@
  1 +Introdução
  2 +==========
  3 +
  4 +Bem-vindo a documentação do Portal do Software Público Brasileiro.
  5 +
  6 +O Portal do Software Público Brasileiro (SPB) é uma plataforma de
  7 +compartilhamento e colaboração no desenvolvimento de softwares. O
  8 +projeto de evolução deste portal está sendo desenvolvido pela
  9 +Universidade de Brasília.
  10 +
  11 +O SPB é composto de um conjunto de ferramentas com funcionalidades
  12 +complementares, que são desenvolvidas de forma independentes pelas suas
  13 +respectivas comunidades. Estas ferramentas estão sendo integradas pela
  14 +nossa equipe de forma a apresentar uma experiência de usuário
  15 +consistente.
  16 +
  17 +* O Colab_ é uma ferramenta especializada na integração de outras
  18 + ferramentas. O Colab fornece um ponto central de autenticação de
  19 + usuários para as demais ferramentas da plataforma, indexa informações
  20 + das demais ferramentas para busca e gamificação, e fornece integração
  21 + visual entre as diferentes ferramentas que compõem o SOB. O Colab é um
  22 + software livre criado no Brasil, que teve sua origem no
  23 + Programa `Interlegis` do Senado Federal.
  24 +
  25 +.. _Colab: https://github.com/colab-community
  26 +.. _`Programa Interlegis do Senado Federal`: http://www.interlegis.leg.br/
  27 +
  28 +* O Noosfero_ é uma plataforma para criação de redes sociais que conta com
  29 + diversas funcionalidades de gestão de conteúdo como blogs, galeria de
  30 + imagens e vídeos, entre outros. O Noosfero também é um software livre
  31 + criado no Brasil, iniciado em 2007 pela COLIVRE_ e que hoje conta com
  32 + uma comunidade de desenvolvimento que inclui o SERPRO, a Universidade de
  33 + Brasília e o Fórum Brasileiro de Economia Solidária.
  34 +
  35 +.. _Noosfero: http://www.noosfero.org/
  36 +.. _COLIVRE: http://www.colivre.coop.br/
  37 +
  38 +* O Gitlab_ é uma plataforma para desenvolvimento colaborativo. Projetos
  39 + no gitlab são mantidos em repositorios ``git``, com gestão de tarefas
  40 + (*issue tracker*), *merge requests*, gestão de marcos (*milestones*),
  41 + suporte a integração com plataformas de integração contínua e
  42 + notificações.
  43 +
  44 +.. _Gitlab: https://www.gitlab.com/
  45 +
  46 +* O `GNU Mailman`_ é uma gerenciador de listas de email tradicionalmente
  47 + usado por diversas organizações no Brasil e no mundo.
  48 +
  49 +.. _`GNU Mailman`: http://www.gnu.org/software/mailman/
  50 +
  51 +O restando deste manual descreve a arquitetura do SPB bem como os
  52 +procedimentos necessários para sua implantação, manutenção, backup e
  53 +restauração e gestão de firewall.
  54 +
  55 +
... ...
docs/local.mk 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +# autogenerated DNS documentation
  2 +
  3 +SPB_ENV ?= local
  4 +
  5 +BUILT += dns.rst
  6 +dns.rst: ../test/dns_test.sh
  7 + (cd .. && sh test/dns_test.sh --doc) > $@
  8 +
  9 +BUILT += arquitetura.png
  10 +%.png: %.svg
  11 + inkscape --export-area-page --export-width=800 --export-width=600 --export-png=$@ $<
  12 +
  13 +BUILT += $(patsubst %.in, %, $(wildcard *.in))
  14 +%: %.in build.rb
  15 + ruby -p build.rb $< > $@ || ($(RM) $@; false)
  16 +
  17 +CLEAN_FILES += $(BUILT)
... ...
docs/manutencao.rst.in 0 → 100644
... ... @@ -0,0 +1,12 @@
  1 +Manutenção
  2 +==========
  3 +
  4 +Mantendo o sistema atualizado
  5 +-----------------------------
  6 +
  7 +*Esta seção é um trabalho em andamento.*
  8 +
  9 +Modificando configurações
  10 +-------------------------
  11 +
  12 +*Esta seção é um trabalho em andamento.*
... ...
docs/postfix-to-mailman-centos.py
... ... @@ -1 +0,0 @@
1   -../cookbooks/mailman/files/centos/postfix-to-mailman-centos.py
2 0 \ No newline at end of file
tasks/doc.rake 0 → 100644
... ... @@ -0,0 +1,19 @@
  1 +desc 'Builds documentation (HTML)'
  2 +task :doc do
  3 + sh 'make -C docs/ html'
  4 +end
  5 +
  6 +desc 'Builds documentation (PDF)'
  7 +task :pdf do
  8 + sh 'make -C docs/ latexpdf'
  9 +end
  10 +
  11 +desc 'Opens PDF documentation'
  12 +task :viewpdf => :pdf do
  13 + sh 'xdg-open', 'docs/_build/latex/softwarepublico.pdf'
  14 +end
  15 +
  16 +desc 'Removes generated files'
  17 +task :clean do
  18 + sh 'make -C docs/ clean'
  19 +end
... ...
test/config_helper.sh 0 → 100644
... ... @@ -0,0 +1,6 @@
  1 +# exports all configuration variables into the environment with a config_
  2 +# prefix, e.g.
  3 +#
  4 +# external_hostname → $config_external_hostname
  5 +
  6 +eval $(sed -e '/^\S*:\s*\S\+/!d; s/^/config_/; s/:\s*/=/' ${ROOTDIR:-.}/config/${SPB_ENV:-local}/config.yaml)
... ...
test/dns_test.sh 0 → 100644
... ... @@ -0,0 +1,114 @@
  1 +. $(dirname $0)/test_helper.sh
  2 +
  3 +if [ "$SPB_ENV" = local ]; then
  4 + echo "_No DNS for local environment_"
  5 + exit
  6 +fi
  7 +
  8 +
  9 +export LANG=C
  10 +
  11 +check_hostname() {
  12 + local host="$1"
  13 + local ip="$2"
  14 + local results="$(host -t A $host)"
  15 + local expected="$host has address $ip"
  16 + assertEquals "$host must resolve to $ip" "$results" "$expected"
  17 +}
  18 +
  19 +check_mx() {
  20 + local host="$1"
  21 + local mx="$2"
  22 + local results="$(host -t MX $host)"
  23 + local expected="$host mail is handled by 0 ${mx}."
  24 + assertEquals "$host MX must be $mx" "$results" "$expected"
  25 +}
  26 +
  27 +check_reverse_dns() {
  28 + local ip="$1"
  29 + local hostname="$2"
  30 + local results="$(host $ip)"
  31 + local expected=".*in-addr.arpa domain name pointer ${hostname}."
  32 + assertTrue "Reverse DNS of $ip must be $hostname (found: $results)" "expr match '$results' '$expected\$'"
  33 +}
  34 +
  35 +test_dns_web() {
  36 + check_hostname "$config_external_hostname" "$config_external_ip"
  37 +}
  38 +
  39 +test_mx() {
  40 + check_mx "$config_external_hostname" "${config_relay_hostname}"
  41 +}
  42 +
  43 +test_dns_lists() {
  44 + check_hostname "$config_lists_hostname" "$config_external_ip"
  45 +}
  46 +
  47 +test_mx_lists() {
  48 + check_mx "$config_lists_hostname" "$config_relay_hostname"
  49 +}
  50 +
  51 +test_dns_relay() {
  52 + check_hostname "$config_relay_hostname" "$config_relay_ip"
  53 +}
  54 +
  55 +test_reverse_dns_web() {
  56 + check_reverse_dns "$config_external_ip" "$config_external_hostname"
  57 +}
  58 +
  59 +test_reverse_dns_relay() {
  60 + check_reverse_dns "$config_relay_ip" "$config_relay_hostname"
  61 +}
  62 +
  63 +# TODO test_spf_external_relay
  64 +
  65 +if [ "$1" = '--doc' ]; then
  66 + check_hostname() {
  67 + echo ' * - A'
  68 + echo " - $1"
  69 + echo " - ${2}"
  70 + }
  71 + check_mx() {
  72 + echo ' * - MX'
  73 + echo " - $1"
  74 + echo " - ${2}."
  75 + }
  76 + check_reverse_dns() {
  77 + echo ' * - PTR'
  78 + echo " - $1"
  79 + echo " - ${2}."
  80 + }
  81 + header() {
  82 + echo '.. list-table::'
  83 + echo ' :header-rows: 1'
  84 + echo
  85 + echo ' * - Tipo'
  86 + echo ' - Entrada'
  87 + echo ' - Aponta para'
  88 + }
  89 + footer() {
  90 + echo
  91 + }
  92 + (
  93 + header 'DNS(A)'
  94 + test_dns_web
  95 + test_dns_lists
  96 + test_dns_relay
  97 + footer
  98 +
  99 + header 'MX'
  100 + test_mx
  101 + test_mx_lists
  102 + footer
  103 +
  104 + header 'DNS reverso'
  105 + test_reverse_dns_web
  106 + test_reverse_dns_relay
  107 + footer
  108 +
  109 + # FIXME test_spf_external_relay
  110 +
  111 + )
  112 +else
  113 + . shunit2
  114 +fi
... ...
test/test_helper.sh
... ... @@ -19,4 +19,5 @@ load_shunit2() {
19 19 }
20 20  
21 21 . $(dirname $0)/ip_helper.sh
  22 +. $(dirname $0)/config_helper.sh
22 23  
... ...