Commit 4227d12230f0ed075257a024a9fc76bff4596952
Exists in
backup
Merge branch 'master' into backup
Showing
58 changed files
with
2269 additions
and
1423 deletions
Show diff stats
.gitignore
Rakefile
1 | +require 'yaml' | |
2 | + | |
1 | 3 | begin |
2 | 4 | load 'local.rake' |
3 | 5 | rescue LoadError |
... | ... | @@ -13,15 +15,40 @@ iptables_file = "config/#{$SPB_ENV}/iptables-filter-rules" |
13 | 15 | |
14 | 16 | ENV['CHAKE_SSH_CONFIG'] = ssh_config_file |
15 | 17 | |
18 | +if $SPB_ENV == 'lxc' | |
19 | + system("mkdir -p config/lxc; sudo lxc-ls -f -F name,ipv4 | sed -e '/^softwarepublico/ !d; s/softwarepublico_//; s/_[0-9_]*/:/ ' > #{ips_file}.new") | |
20 | + begin | |
21 | + ips = YAML.load_file("#{ips_file}.new") | |
22 | + raise ArgumentError unless ips.is_a?(Hash) | |
23 | + FileUtils.mv ips_file + '.new', ips_file | |
24 | + rescue Exception => ex | |
25 | + puts ex.message | |
26 | + puts | |
27 | + puts "Q: did you boot the containers first?" | |
28 | + exit | |
29 | + end | |
30 | + config = YAML.load_file('config/local/config.yaml') | |
31 | + config['external_ip'] = ips['reverseproxy'] | |
32 | + config['relay_ip'] = ips['email'] | |
33 | + File.open(config_file, 'w') do |f| | |
34 | + f.puts(YAML.dump(config)) | |
35 | + end | |
36 | + | |
37 | + File.open('config/lxc/iptables-filter-rules', 'w') do |f| | |
38 | + lxc_host_bridge_ip = '192.168.122.1' # FIXME don't hardcode | |
39 | + f.puts "-A INPUT -s #{lxc_host_bridge_ip} -p tcp -m state --state NEW --dport 22 -j ACCEPT" | |
40 | + end | |
41 | +end | |
42 | + | |
16 | 43 | require 'chake' |
17 | 44 | |
18 | 45 | if Chake::VERSION < '0.4.3' |
19 | 46 | fail "Please upgrade to chake 0.4.3+" |
20 | 47 | end |
21 | 48 | |
22 | -config = YAML.load_file(config_file) | |
23 | -ips = YAML.load_file(ips_file) | |
24 | -firewall = File.open(iptables_file).read | |
49 | +ips ||= YAML.load_file(ips_file) | |
50 | +config ||= YAML.load_file(config_file) | |
51 | +firewall ||= File.open(iptables_file).read | |
25 | 52 | $nodes.each do |node| |
26 | 53 | node.data['config'] = config |
27 | 54 | node.data['peers'] = ips |
... | ... | @@ -38,13 +65,41 @@ task :test do |
38 | 65 | end |
39 | 66 | |
40 | 67 | file 'ssh_config.erb' |
41 | -file 'config/local/ssh_config' => ['nodes.yaml', 'config/local/ips.yaml', 'ssh_config.erb', 'Rakefile'] do |t| | |
42 | - require 'erb' | |
43 | - template = ERB.new(File.read('ssh_config.erb')) | |
44 | - File.open(t.name, 'w') do |f| | |
45 | - f.write(template.result(binding)) | |
68 | +if ['local', 'lxc'].include?($SPB_ENV) | |
69 | + file ssh_config_file => ['nodes.yaml', ips_file, 'ssh_config.erb', 'Rakefile'] do |t| | |
70 | + require 'erb' | |
71 | + template = ERB.new(File.read('ssh_config.erb')) | |
72 | + File.open(t.name, 'w') do |f| | |
73 | + f.write(template.result(binding)) | |
74 | + end | |
75 | + puts 'ERB %s' % t.name | |
46 | 76 | end |
47 | - puts 'ERB %s' % t.name | |
77 | +end | |
78 | + | |
79 | +task :backup => ssh_config_file do | |
80 | + # setup | |
81 | + sh 'ssh', '-F', ssh_config_file, 'integration', 'sudo', 'rm -rf /tmp/backups' | |
82 | + sh 'ssh', '-F', ssh_config_file, 'social', 'sudo', 'rm -rf /tmp/backups' | |
83 | + sh 'mkdir', '-p', 'backups' | |
84 | + # integration | |
85 | + sh 'scp', '-F', ssh_config_file, 'utils/migration/backup_integration.sh', 'integration:/tmp' | |
86 | + sh 'ssh', '-F', ssh_config_file, 'integration', 'sudo', '/tmp/backup_integration.sh' | |
87 | + sh 'scp', '-F', ssh_config_file, 'integration:/tmp/backups/*', 'backups/' | |
88 | + # social | |
89 | + sh 'scp', '-F', ssh_config_file, 'utils/migration/backup_social.sh', 'social:/tmp' | |
90 | + sh 'ssh', '-F', ssh_config_file, 'social', 'sudo', '/tmp/backup_social.sh' | |
91 | + sh 'scp', '-F', ssh_config_file, 'social:/tmp/backups/*', 'backups/' | |
92 | +end | |
93 | + | |
94 | +task :restore => ssh_config_file do | |
95 | + #integration | |
96 | + sh 'scp', '-r', '-F', ssh_config_file, 'backups', 'integration:/tmp' | |
97 | + sh 'scp', '-F', ssh_config_file, 'utils/migration/restore_integration.sh', 'integration:/tmp' | |
98 | + sh 'ssh', '-F', ssh_config_file, 'integration', 'sudo', '/tmp/restore_integration.sh' | |
99 | + #social | |
100 | + sh 'scp', '-r', '-F', ssh_config_file, 'backups', 'social:/tmp' | |
101 | + sh 'scp', '-F', ssh_config_file, 'utils/migration/restore_social.sh', 'social:/tmp' | |
102 | + sh 'ssh', '-F', ssh_config_file, 'social', 'sudo', '/tmp/restore_social.sh' | |
48 | 103 | end |
49 | 104 | |
50 | 105 | task :backup => ssh_config_file do |
... | ... | @@ -98,3 +153,5 @@ task :preconfig => ssh_config_file do |
98 | 153 | end |
99 | 154 | end |
100 | 155 | end |
156 | + | |
157 | +Dir.glob('tasks/*.rake').each { |f| load f } | ... | ... |
Vagrantfile
... | ... | @@ -7,34 +7,49 @@ require 'yaml' |
7 | 7 | VAGRANTFILE_API_VERSION = "2" |
8 | 8 | |
9 | 9 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| |
10 | - config.vm.box = ENV.fetch("VAGRANT_BOX", 'centos7') | |
10 | + config.vm.box = ENV.fetch("VAGRANT_BOX", 'chef/centos-7.0') | |
11 | 11 | proxy = ENV['http_proxy'] || ENV['HTTP_PROXY'] |
12 | 12 | if proxy |
13 | 13 | config.vm.provision 'shell', path: 'utils/proxy.sh', args: [proxy] |
14 | 14 | end |
15 | 15 | |
16 | - ips = YAML.load_file('config/local/ips.yaml') | |
16 | + load './local.rake' if File.exists?('local.rake') | |
17 | + env = ENV.fetch('SPB_ENV', 'local') | |
18 | + | |
19 | + if File.exist?("config/#{env}/ips.yaml") | |
20 | + ips = YAML.load_file("config/#{env}/ips.yaml") | |
21 | + else | |
22 | + ips = nil | |
23 | + end | |
17 | 24 | |
18 | 25 | config.vm.define 'database' do |database| |
19 | - database.vm.network 'private_network', ip: ips['database'] | |
26 | + database.vm.provider "virtualbox" do |vm| | |
27 | + database.vm.network 'private_network', ip: ips['database'] if ips | |
28 | + end | |
20 | 29 | end |
21 | 30 | config.vm.define 'integration' do |integration| |
22 | - integration.vm.network 'private_network', ip: ips['integration'] | |
23 | - integration.vm.provider "virtualbox" do |v| | |
24 | - v.memory = 1024 | |
25 | - v.cpus = 2 | |
31 | + integration.vm.provider "virtualbox" do |vm| | |
32 | + integration.vm.network 'private_network', ip: ips['integration'] if ips | |
33 | + vm.memory = 1024 | |
34 | + vm.cpus = 2 | |
26 | 35 | end |
27 | 36 | end |
28 | 37 | config.vm.define 'email' do |email| |
29 | - email.vm.network 'private_network', ip: ips['email'] | |
38 | + email.vm.provider "virtualbox" do |vm| | |
39 | + email.vm.network 'private_network', ip: ips['email'] if ips | |
40 | + end | |
30 | 41 | end |
31 | 42 | config.vm.define 'social' do |social| |
32 | - social.vm.network 'private_network', ip: ips['social'] | |
43 | + social.vm.provider "virtualbox" do |vm| | |
44 | + social.vm.network 'private_network', ip: ips['social'] if ips | |
45 | + end | |
33 | 46 | end |
34 | 47 | config.vm.define 'reverseproxy' do |reverseproxy| |
35 | - reverseproxy.vm.network 'private_network', ip: ips['reverseproxy'] | |
36 | - if File.exist?('tmp/preconfig.local.stamp') | |
37 | - reverseproxy.ssh.port = File.read('tmp/preconfig.local.stamp').strip.to_i | |
48 | + reverseproxy.vm.provider "virtualbox" do |vm| | |
49 | + reverseproxy.vm.network 'private_network', ip: ips['reverseproxy'] if ips | |
50 | + end | |
51 | + if File.exist?("tmp/preconfig.#{env}.stamp") | |
52 | + reverseproxy.ssh.port = File.read("tmp/preconfig.#{env}.stamp").strip.to_i | |
38 | 53 | reverseproxy.ssh.host = ips['reverseproxy'] |
39 | 54 | end |
40 | 55 | end | ... | ... |
... | ... | @@ -0,0 +1,15 @@ |
1 | +admins: | |
2 | + - ["Paulo Meirelles", "paulo@softwarelivre.org"] | |
3 | +external_hostname: dev.softwarepublico.gov.br | |
4 | +external_ip: 189.9.151.16 | |
5 | +site_url: https://dev.softwarepublico.gov.br | |
6 | +colab_from_address: '"Portal do Software Publico (dev)" <noreply@dev.softwarepublico.gov.br>' | |
7 | +server_email: '"Portal do Software Publico (dev)" <noreply@dev.softwarepublico.gov.br>' | |
8 | +email_subject_prefix: '[spb|dev]' | |
9 | +lists_hostname: listas.dev.softwarepublico.gov.br | |
10 | +lists_admin: paulo@softwarelivre.org | |
11 | +from_address: noreply@dev.softwarepublico.gov.br | |
12 | +relay_hostname: relay.dev.softwarepublico.gov.br | |
13 | +relay_ip: 189.9.151.44 | |
14 | +external_outgoing_mail_relay: 189.9.150.53 | |
15 | +external_outgoing_mail_domain: serpro.gov.br | ... | ... |
... | ... | @@ -0,0 +1,23 @@ |
1 | + | |
2 | +-A INPUT -s 200.198.196.192/26 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT | |
3 | +-A INPUT -s 200.198.196.192/26 -p tcp -m state --state NEW -m tcp --dport 5432 -j ACCEPT | |
4 | +-A INPUT -s 200.198.196.192/26 -p icmp --icmp-type 8 -j ACCEPT | |
5 | +-A INPUT -s 200.198.196.201/32 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT | |
6 | +-A INPUT -s 200.198.196.206/32 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT | |
7 | + | |
8 | +-A INPUT -s 189.9.150.85/32 -p tcp -m state --state NEW -m multiport --dports 22,80,5432 -j ACCEPT | |
9 | + | |
10 | + | |
11 | +# UnB | |
12 | +-A INPUT -s 164.41.86.12/32 -p tcp -m state --state NEW -m multiport --dports 22,80,443 -j ACCEPT | |
13 | +-A INPUT -s 164.41.9.36/32 -p tcp -m state --state NEW -m multiport --dports 22,80,5432 -j ACCEPT | |
14 | + | |
15 | + | |
16 | +# Sergio Oliveira | |
17 | +-A INPUT -s 179.111.229.232/32 -p tcp -m state --state NEW -m multiport --dports 22,80,5432 -j ACCEPT | |
18 | + | |
19 | + | |
20 | +-A INPUT -s 10.18.0.0/16 -p tcp -m state --state NEW -m multiport --dports 22,80,5432 -j ACCEPT | |
21 | +-A INPUT -s 10.18.0.0/16 -p icmp --icmp-type 8 -j ACCEPT | |
22 | +-A INPUT -s 189.9.137.239/32 -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT | |
23 | +-A INPUT -s 189.9.137.239/32 -p icmp --icmp-type 8 -j ACCEPT | ... | ... |
... | ... | @@ -0,0 +1,30 @@ |
1 | +Host * | |
2 | + ForwardAgent yes | |
3 | + | |
4 | +Host reverseproxy | |
5 | + Hostname 189.9.151.16 | |
6 | + User spb | |
7 | + | |
8 | +Host database | |
9 | + Hostname 10.18.0.16 | |
10 | + User spb | |
11 | + # connect via reverseproxy host | |
12 | + ProxyCommand ssh spb@189.9.151.16 nc %h %p | |
13 | + | |
14 | +Host social | |
15 | + Hostname 10.18.0.17 | |
16 | + User spb | |
17 | + # connect via reverseproxy host | |
18 | + ProxyCommand ssh spb@189.9.151.16 nc %h %p | |
19 | + | |
20 | +Host email | |
21 | + Hostname 10.18.0.18 | |
22 | + User spb | |
23 | + # connect via reverseproxy host | |
24 | + ProxyCommand ssh spb@189.9.151.16 nc %h %p | |
25 | + | |
26 | +Host integration | |
27 | + Hostname 10.18.0.19 | |
28 | + User spb | |
29 | + # connect via reverseproxy host | |
30 | + ProxyCommand ssh spb@189.9.151.16 nc %h %p | ... | ... |
config/development/config.yaml
... | ... | @@ -1,13 +0,0 @@ |
1 | -admins: | |
2 | - - | |
3 | - - Paulo Meirelles | |
4 | - - paulo@softwarelivre.org | |
5 | -external_hostname: dev.softwarepublico.gov.br | |
6 | -site_url: https://dev.softwarepublico.gov.br | |
7 | -colab_from_address: '"Portal do Software Publico (dev)" <noreply@dev.softwarepublico.gov.br>' | |
8 | -server_email: '"Portal do Software Publico (dev)" <noreply@dev.softwarepublico.gov.br>' | |
9 | -email_subject_prefix: '[spb|dev]' | |
10 | -lists_hostname: listas.dev.softwarepublico.gov.br | |
11 | -lists_admin: paulo@softwarelivre.org | |
12 | -relay_hostname: relay.dev.softwarepublico.gov.br | |
13 | -from_address: noreply@dev.softwarepublico.gov.br |
config/development/ips.yaml
config/development/iptables-filter-rules
... | ... | @@ -1,23 +0,0 @@ |
1 | - | |
2 | --A INPUT -s 200.198.196.192/26 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT | |
3 | --A INPUT -s 200.198.196.192/26 -p tcp -m state --state NEW -m tcp --dport 5432 -j ACCEPT | |
4 | --A INPUT -s 200.198.196.192/26 -p icmp --icmp-type 8 -j ACCEPT | |
5 | --A INPUT -s 200.198.196.201/32 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT | |
6 | --A INPUT -s 200.198.196.206/32 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT | |
7 | - | |
8 | --A INPUT -s 189.9.150.85/32 -p tcp -m state --state NEW -m multiport --dports 22,80,5432 -j ACCEPT | |
9 | - | |
10 | - | |
11 | -# UnB | |
12 | --A INPUT -s 164.41.86.12/32 -p tcp -m state --state NEW -m multiport --dports 22,80,443 -j ACCEPT | |
13 | --A INPUT -s 164.41.9.36/32 -p tcp -m state --state NEW -m multiport --dports 22,80,5432 -j ACCEPT | |
14 | - | |
15 | - | |
16 | -# Sergio Oliveira | |
17 | --A INPUT -s 179.111.229.232/32 -p tcp -m state --state NEW -m multiport --dports 22,80,5432 -j ACCEPT | |
18 | - | |
19 | - | |
20 | --A INPUT -s 10.18.0.0/16 -p tcp -m state --state NEW -m multiport --dports 22,80,5432 -j ACCEPT | |
21 | --A INPUT -s 10.18.0.0/16 -p icmp --icmp-type 8 -j ACCEPT | |
22 | --A INPUT -s 189.9.137.239/32 -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT | |
23 | --A INPUT -s 189.9.137.239/32 -p icmp --icmp-type 8 -j ACCEPT |
config/development/ssh_config
... | ... | @@ -1,30 +0,0 @@ |
1 | -Host * | |
2 | - ForwardAgent yes | |
3 | - | |
4 | -Host reverseproxy | |
5 | - Hostname 189.9.151.16 | |
6 | - User spb | |
7 | - | |
8 | -Host database | |
9 | - Hostname 10.18.0.16 | |
10 | - User spb | |
11 | - # connect via reverseproxy host | |
12 | - ProxyCommand ssh spb@189.9.151.16 nc %h %p | |
13 | - | |
14 | -Host social | |
15 | - Hostname 10.18.0.17 | |
16 | - User spb | |
17 | - # connect via reverseproxy host | |
18 | - ProxyCommand ssh spb@189.9.151.16 nc %h %p | |
19 | - | |
20 | -Host email | |
21 | - Hostname 10.18.0.18 | |
22 | - User spb | |
23 | - # connect via reverseproxy host | |
24 | - ProxyCommand ssh spb@189.9.151.16 nc %h %p | |
25 | - | |
26 | -Host integration | |
27 | - Hostname 10.18.0.19 | |
28 | - User spb | |
29 | - # connect via reverseproxy host | |
30 | - ProxyCommand ssh spb@189.9.151.16 nc %h %p |
... | ... | @@ -0,0 +1,16 @@ |
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 | +from_address: noreply@homologa.softwarepublico.gov.br | |
13 | +relay_hostname: relay.homologa.softwarepublico.gov.br | |
14 | +relay_ip: 189.9.151.66 | |
15 | +external_outgoing_mail_relay: 189.9.150.53 | |
16 | +external_outgoing_mail_domain: serpro.gov.br | ... | ... |
... | ... | @@ -0,0 +1 @@ |
1 | +# nothing yet | ... | ... |
... | ... | @@ -0,0 +1,35 @@ |
1 | +Host * | |
2 | + ForwardAgent yes | |
3 | + | |
4 | +Host reverseproxy.unconfigured | |
5 | + Hostname 189.9.151.65 | |
6 | + User spb | |
7 | + | |
8 | +Host reverseproxy | |
9 | + Hostname 10.0.13.2 | |
10 | + User spb | |
11 | + # connect via reverseproxy host | |
12 | + ProxyCommand ssh spb@189.9.151.65 nc %h %p | |
13 | + | |
14 | +Host database | |
15 | + Hostname 10.0.13.6 | |
16 | + User spb | |
17 | + # connect via reverseproxy host | |
18 | + ProxyCommand ssh spb@189.9.151.65 nc %h %p | |
19 | + | |
20 | +Host social | |
21 | + Hostname 10.0.13.4 | |
22 | + User spb | |
23 | + # connect via reverseproxy host | |
24 | + ProxyCommand ssh spb@189.9.151.65 nc %h %p | |
25 | + | |
26 | +Host email | |
27 | + Hostname 10.0.13.5 | |
28 | + User spb | |
29 | + # connect via reverseproxy host | |
30 | + ProxyCommand ssh spb@189.9.151.65 nc %h %p | |
31 | + | |
32 | +Host integration | |
33 | + Hostname 10.0.13.7 | |
34 | + User spb | |
35 | + # Porta 22 de 189.9.151.65 cai aqui entao nao precisa de ProxyCommand | ... | ... |
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: '[spb]' |
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 | ... | ... |
cookbooks/basics/files/default/selinux-install-module
... | ... | @@ -9,6 +9,12 @@ if [ $# -ne 1 ]; then |
9 | 9 | exit 1 |
10 | 10 | fi |
11 | 11 | |
12 | +selinux_status=$(sestatus | sed -e '/^SELinux status:/ !d; s/.*\s//') | |
13 | +if ! selinux-enabled; then | |
14 | + echo "I: SELinux disabled, skipping" | |
15 | + exit 0 | |
16 | +fi | |
17 | + | |
12 | 18 | input="$1" |
13 | 19 | |
14 | 20 | directory=$(dirname "$input") | ... | ... |
cookbooks/basics/recipes/default.rb
... | ... | @@ -10,8 +10,19 @@ cookbook_file '/etc/selinux/config' do |
10 | 10 | group 'root' |
11 | 11 | mode 0644 |
12 | 12 | end |
13 | -execute 'setenforce Enforcing' | |
14 | -execute 'setsebool httpd_can_network_connect 1' | |
13 | + | |
14 | +cookbook_file '/usr/local/bin/selinux-enabled' do | |
15 | + owner 'root' | |
16 | + group 'root' | |
17 | + mode '0755' | |
18 | +end | |
19 | + | |
20 | +execute 'setenforce Enforcing' do | |
21 | + only_if 'selinux-enabled' | |
22 | +end | |
23 | +execute 'setsebool httpd_can_network_connect 1' do | |
24 | + only_if 'selinux-enabled' | |
25 | +end | |
15 | 26 | # directory for local type enforcements |
16 | 27 | directory '/etc/selinux/local' do |
17 | 28 | owner 'root' |
... | ... | @@ -32,8 +43,14 @@ package 'less' |
32 | 43 | package 'htop' |
33 | 44 | package 'ntp' |
34 | 45 | |
46 | +cookbook_file '/usr/local/bin/is-a-container' do | |
47 | + owner 'root' | |
48 | + group 'root' | |
49 | + mode '0755' | |
50 | +end | |
35 | 51 | service 'ntpd' do |
36 | 52 | action [:enable, :start] |
53 | + not_if 'is-a-container' | |
37 | 54 | end |
38 | 55 | |
39 | 56 | service 'firewalld' do | ... | ... |
cookbooks/email/recipes/relay.rb
... | ... | @@ -46,3 +46,10 @@ execute 'transport:postmap' do |
46 | 46 | command "postmap /etc/postfix/transport" |
47 | 47 | action :nothing |
48 | 48 | end |
49 | + | |
50 | +external_relay = node['config']['external_outgoing_mail_relay'] | |
51 | +if external_relay | |
52 | + execute "postconf relayhost=#{external_relay}" | |
53 | +else | |
54 | + execute 'postconf -X relayhost' | |
55 | +end | ... | ... |
cookbooks/firewall/templates/default/iptables.erb
cookbooks/firewall/templates/host-database/iptables-nat.erb
0 → 100644
cookbooks/firewall/templates/host-email/iptables-filter.erb
1 | 1 | |
2 | 2 | # Allow access to Postfix |
3 | --A INPUT -s <%= node['peers']['integration'] %> -p tcp -m state --state NEW --dport 25 -j ACCEPT | |
4 | --A INPUT -s <%= node['peers']['social'] %> -p tcp -m state --state NEW --dport 25 -j ACCEPT | |
5 | --A INPUT -s <%= node['peers']['database'] %> -p tcp -m state --state NEW --dport 25 -j ACCEPT | |
6 | --A INPUT -s <%= node['peers']['reverseproxy'] %> -p tcp -m state --state NEW --dport 25 -j ACCEPT | |
3 | +-A INPUT -p tcp -m state --state NEW --dport 25 -j ACCEPT | ... | ... |
cookbooks/firewall/templates/host-email/iptables-nat.erb
0 → 100644
cookbooks/firewall/templates/host-integration/iptables-nat.erb
0 → 100644
cookbooks/firewall/templates/host-social/iptables-nat.erb
0 → 100644
cookbooks/gitlab/recipes/default.rb
... | ... | @@ -18,7 +18,8 @@ end |
18 | 18 | execute 'gitlab:setup' do |
19 | 19 | user 'git' |
20 | 20 | cwd '/usr/lib/gitlab' |
21 | - command 'yes yes | bundle exec rake db:setup RAILS_ENV=production' | |
21 | + command 'yes yes | bundle exec rake db:setup RAILS_ENV=production && touch /var/lib/gitlab/setup.done' | |
22 | + not_if { File.exists?('/var/lib/gitlab/setup.done') } | |
22 | 23 | |
23 | 24 | action :nothing |
24 | 25 | notifies :restart, 'service[gitlab]' | ... | ... |
cookbooks/noosfero/recipes/default.rb
... | ... | @@ -42,6 +42,10 @@ execute 'plugins:enable' do |
42 | 42 | command '/usr/lib/noosfero/script/noosfero-plugins enable ' + plugins.join(' ') |
43 | 43 | end |
44 | 44 | |
45 | +execute 'plugins:activate' do | |
46 | + command "RAILS_ENV=production bundle exec rake noosfero:plugins:enable_all_plugins" | |
47 | +end | |
48 | + | |
45 | 49 | execute 'theme:enable' do |
46 | 50 | command 'psql -h database -U noosfero --no-align --tuples-only -q -c "update environments set theme=\'noosfero-spb-theme\' where id=1;"' |
47 | 51 | end | ... | ... |
cookbooks/reverse_proxy/recipes/default.rb
... | ... | @@ -12,7 +12,9 @@ cookbook_file "/etc/sysctl.d/ip_forward.conf" do |
12 | 12 | mode 0644 |
13 | 13 | end |
14 | 14 | |
15 | -execute 'sysctl -w net.ipv4.ip_forward=1' | |
15 | +execute 'sysctl -w net.ipv4.ip_forward=1' do | |
16 | + not_if 'is-a-container' | |
17 | +end | |
16 | 18 | |
17 | 19 | cookbook_file "/etc/nginx/#{node['config']['external_hostname']}.key" do |
18 | 20 | owner 'root' | ... | ... |
docs/Makefile
1 | -# Makefile for Sphinx documentation | |
2 | -# | |
3 | - | |
4 | -# You can set these variables from the command line. | |
5 | -SPHINXOPTS = | |
6 | -SPHINXBUILD = sphinx-build | |
7 | -PAPER = | |
8 | -BUILDDIR = _build | |
9 | - | |
10 | -# User-friendly check for sphinx-build | |
11 | -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) | |
12 | -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) | |
13 | -endif | |
14 | - | |
15 | -# Internal variables. | |
16 | -PAPEROPT_a4 = -D latex_paper_size=a4 | |
17 | -PAPEROPT_letter = -D latex_paper_size=letter | |
18 | -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . | |
19 | -# the i18n builder cannot share the environment and doctrees with the others | |
20 | -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . | |
21 | - | |
22 | -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext | |
23 | - | |
24 | -help: | |
25 | - @echo "Please use \`make <target>' where <target> is one of" | |
26 | - @echo " html to make standalone HTML files" | |
27 | - @echo " dirhtml to make HTML files named index.html in directories" | |
28 | - @echo " singlehtml to make a single large HTML file" | |
29 | - @echo " pickle to make pickle files" | |
30 | - @echo " json to make JSON files" | |
31 | - @echo " htmlhelp to make HTML files and a HTML help project" | |
32 | - @echo " qthelp to make HTML files and a qthelp project" | |
33 | - @echo " devhelp to make HTML files and a Devhelp project" | |
34 | - @echo " epub to make an epub" | |
35 | - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" | |
36 | - @echo " latexpdf to make LaTeX files and run them through pdflatex" | |
37 | - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" | |
38 | - @echo " text to make text files" | |
39 | - @echo " man to make manual pages" | |
40 | - @echo " texinfo to make Texinfo files" | |
41 | - @echo " info to make Texinfo files and run them through makeinfo" | |
42 | - @echo " gettext to make PO message catalogs" | |
43 | - @echo " changes to make an overview of all changed/added/deprecated items" | |
44 | - @echo " xml to make Docutils-native XML files" | |
45 | - @echo " pseudoxml to make pseudoxml-XML files for display purposes" | |
46 | - @echo " linkcheck to check all external links for integrity" | |
47 | - @echo " doctest to run all doctests embedded in the documentation (if enabled)" | |
48 | - | |
49 | -clean: | |
50 | - rm -rf $(BUILDDIR)/* | |
51 | - | |
52 | -html: | |
53 | - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html | |
54 | - @echo | |
55 | - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." | |
56 | - | |
57 | -dirhtml: | |
58 | - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml | |
59 | - @echo | |
60 | - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." | |
61 | - | |
62 | -singlehtml: | |
63 | - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml | |
64 | - @echo | |
65 | - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." | |
66 | - | |
67 | -pickle: | |
68 | - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle | |
69 | - @echo | |
70 | - @echo "Build finished; now you can process the pickle files." | |
71 | - | |
72 | -json: | |
73 | - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json | |
74 | - @echo | |
75 | - @echo "Build finished; now you can process the JSON files." | |
76 | - | |
77 | -htmlhelp: | |
78 | - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp | |
79 | - @echo | |
80 | - @echo "Build finished; now you can run HTML Help Workshop with the" \ | |
81 | - ".hhp project file in $(BUILDDIR)/htmlhelp." | |
82 | - | |
83 | -qthelp: | |
84 | - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp | |
1 | +all: | |
2 | + @echo "Usage:" | |
85 | 3 | @echo |
86 | - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ | |
87 | - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" | |
88 | - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/softwarepublico.qhcp" | |
89 | - @echo "To view the help file:" | |
90 | - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/softwarepublico.qhc" | |
4 | + @echo "make html Builds the documentation in HTML" | |
5 | + @echo "make latexpdf Builds the documentation in PDF" | |
91 | 6 | |
92 | -devhelp: | |
93 | - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp | |
94 | - @echo | |
95 | - @echo "Build finished." | |
96 | - @echo "To view the help file:" | |
97 | - @echo "# mkdir -p $$HOME/.local/share/devhelp/softwarepublico" | |
98 | - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/softwarepublico" | |
99 | - @echo "# devhelp" | |
100 | - | |
101 | -epub: | |
102 | - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub | |
103 | - @echo | |
104 | - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." | |
105 | - | |
106 | -latex: | |
107 | - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex | |
108 | - @echo | |
109 | - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." | |
110 | - @echo "Run \`make' in that directory to run these through (pdf)latex" \ | |
111 | - "(use \`make latexpdf' here to do that automatically)." | |
112 | - | |
113 | -latexpdf: | |
114 | - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex | |
115 | - @echo "Running LaTeX files through pdflatex..." | |
116 | - $(MAKE) -C $(BUILDDIR)/latex all-pdf | |
117 | - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." | |
118 | - | |
119 | -latexpdfja: | |
120 | - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex | |
121 | - @echo "Running LaTeX files through platex and dvipdfmx..." | |
122 | - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja | |
123 | - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." | |
124 | - | |
125 | -text: | |
126 | - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text | |
127 | - @echo | |
128 | - @echo "Build finished. The text files are in $(BUILDDIR)/text." | |
129 | - | |
130 | -man: | |
131 | - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man | |
132 | - @echo | |
133 | - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." | |
134 | - | |
135 | -texinfo: | |
136 | - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo | |
137 | - @echo | |
138 | - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." | |
139 | - @echo "Run \`make' in that directory to run these through makeinfo" \ | |
140 | - "(use \`make info' here to do that automatically)." | |
7 | +SPB_ENV ?= local | |
141 | 8 | |
142 | -info: | |
143 | - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo | |
144 | - @echo "Running Texinfo files through makeinfo..." | |
145 | - make -C $(BUILDDIR)/texinfo info | |
146 | - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." | |
147 | - | |
148 | -gettext: | |
149 | - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale | |
150 | - @echo | |
151 | - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." | |
9 | +# autogenerated DNS documentation | |
10 | +BUILT += _build/dns.rst | |
11 | +_build/dns.rst: ../test/dns_test.sh | |
12 | + (cd .. && sh test/dns_test.sh --doc) > $@ | |
152 | 13 | |
153 | -changes: | |
154 | - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes | |
155 | - @echo | |
156 | - @echo "The overview file is in $(BUILDDIR)/changes." | |
14 | +BUILT += $(patsubst %.svg, _build/%.png, $(wildcard *.svg)) | |
15 | +_build/%.png: %.svg | |
16 | + inkscape --export-area-page --export-width=800 --export-width=600 --export-png=$@ $< | |
157 | 17 | |
158 | -linkcheck: | |
159 | - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck | |
160 | - @echo | |
161 | - @echo "Link check complete; look for any errors in the above output " \ | |
162 | - "or in $(BUILDDIR)/linkcheck/output.txt." | |
18 | +BUILT += $(patsubst %.in, _build/%, $(wildcard *.in)) | |
19 | +_build/%: %.in build.rb | |
20 | + ruby -p build.rb $< > $@ || ($(RM) $@; false) | |
163 | 21 | |
164 | -doctest: | |
165 | - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest | |
166 | - @echo "Testing of doctests in the sources finished, look at the " \ | |
167 | - "results in $(BUILDDIR)/doctest/output.txt." | |
22 | +CLEAN_FILES += $(BUILT) | |
168 | 23 | |
169 | -xml: | |
170 | - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml | |
171 | - @echo | |
172 | - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." | |
24 | +html latexpdf: $(BUILT) | |
25 | + $(MAKE) -C _build $@ | |
173 | 26 | |
174 | -pseudoxml: | |
175 | - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml | |
176 | - @echo | |
177 | - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." | |
27 | +clean: | |
28 | + $(RM) $(BUILT) | |
29 | + $(MAKE) -C _build $@ | ... | ... |
... | ... | @@ -0,0 +1,177 @@ |
1 | +# Makefile for Sphinx documentation | |
2 | +# | |
3 | + | |
4 | +# You can set these variables from the command line. | |
5 | +SPHINXOPTS = | |
6 | +SPHINXBUILD = sphinx-build | |
7 | +PAPER = | |
8 | +BUILDDIR = . | |
9 | + | |
10 | +# User-friendly check for sphinx-build | |
11 | +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) | |
12 | +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) | |
13 | +endif | |
14 | + | |
15 | +# Internal variables. | |
16 | +PAPEROPT_a4 = -D latex_paper_size=a4 | |
17 | +PAPEROPT_letter = -D latex_paper_size=letter | |
18 | +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . | |
19 | +# the i18n builder cannot share the environment and doctrees with the others | |
20 | +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . | |
21 | + | |
22 | +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext | |
23 | + | |
24 | +help: | |
25 | + @echo "Please use \`make <target>' where <target> is one of" | |
26 | + @echo " html to make standalone HTML files" | |
27 | + @echo " dirhtml to make HTML files named index.html in directories" | |
28 | + @echo " singlehtml to make a single large HTML file" | |
29 | + @echo " pickle to make pickle files" | |
30 | + @echo " json to make JSON files" | |
31 | + @echo " htmlhelp to make HTML files and a HTML help project" | |
32 | + @echo " qthelp to make HTML files and a qthelp project" | |
33 | + @echo " devhelp to make HTML files and a Devhelp project" | |
34 | + @echo " epub to make an epub" | |
35 | + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" | |
36 | + @echo " latexpdf to make LaTeX files and run them through pdflatex" | |
37 | + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" | |
38 | + @echo " text to make text files" | |
39 | + @echo " man to make manual pages" | |
40 | + @echo " texinfo to make Texinfo files" | |
41 | + @echo " info to make Texinfo files and run them through makeinfo" | |
42 | + @echo " gettext to make PO message catalogs" | |
43 | + @echo " changes to make an overview of all changed/added/deprecated items" | |
44 | + @echo " xml to make Docutils-native XML files" | |
45 | + @echo " pseudoxml to make pseudoxml-XML files for display purposes" | |
46 | + @echo " linkcheck to check all external links for integrity" | |
47 | + @echo " doctest to run all doctests embedded in the documentation (if enabled)" | |
48 | + | |
49 | +clean: | |
50 | + rm -rf $(BUILDDIR)/[a-z]* | |
51 | + | |
52 | +html: | |
53 | + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html | |
54 | + @echo | |
55 | + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." | |
56 | + | |
57 | +dirhtml: | |
58 | + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml | |
59 | + @echo | |
60 | + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." | |
61 | + | |
62 | +singlehtml: | |
63 | + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml | |
64 | + @echo | |
65 | + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." | |
66 | + | |
67 | +pickle: | |
68 | + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle | |
69 | + @echo | |
70 | + @echo "Build finished; now you can process the pickle files." | |
71 | + | |
72 | +json: | |
73 | + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json | |
74 | + @echo | |
75 | + @echo "Build finished; now you can process the JSON files." | |
76 | + | |
77 | +htmlhelp: | |
78 | + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp | |
79 | + @echo | |
80 | + @echo "Build finished; now you can run HTML Help Workshop with the" \ | |
81 | + ".hhp project file in $(BUILDDIR)/htmlhelp." | |
82 | + | |
83 | +qthelp: | |
84 | + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp | |
85 | + @echo | |
86 | + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ | |
87 | + | |
88 | + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/softwarepublico.qhcp" | |
89 | + @echo | |
90 | + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/softwarepublico.qhc" | |
91 | + | |
92 | +devhelp: | |
93 | + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp | |
94 | + @echo | |
95 | + @echo "Build finished." | |
96 | + @echo | |
97 | + @echo "# mkdir -p $$HOME/.local/share/devhelp/softwarepublico" | |
98 | + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/softwarepublico" | |
99 | + @echo "# devhelp" | |
100 | + | |
101 | +epub: | |
102 | + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub | |
103 | + @echo | |
104 | + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." | |
105 | + | |
106 | +latex: | |
107 | + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex | |
108 | + @echo | |
109 | + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." | |
110 | + @echo "Run \`make' in that directory to run these through (pdf)latex" \ | |
111 | + "(use \`make latexpdf' here to do that automatically)." | |
112 | + | |
113 | +latexpdf: | |
114 | + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex | |
115 | + @echo "Running LaTeX files through pdflatex..." | |
116 | + $(MAKE) -C $(BUILDDIR)/latex all-pdf | |
117 | + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." | |
118 | + | |
119 | +latexpdfja: | |
120 | + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex | |
121 | + @echo "Running LaTeX files through platex and dvipdfmx..." | |
122 | + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja | |
123 | + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." | |
124 | + | |
125 | +text: | |
126 | + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text | |
127 | + @echo | |
128 | + @echo "Build finished. The text files are in $(BUILDDIR)/text." | |
129 | + | |
130 | +man: | |
131 | + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man | |
132 | + @echo | |
133 | + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." | |
134 | + | |
135 | +texinfo: | |
136 | + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo | |
137 | + @echo | |
138 | + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." | |
139 | + @echo "Run \`make' in that directory to run these through makeinfo" \ | |
140 | + "(use \`make info' here to do that automatically)." | |
141 | + | |
142 | +info: | |
143 | + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo | |
144 | + @echo "Running Texinfo files through makeinfo..." | |
145 | + make -C $(BUILDDIR)/texinfo info | |
146 | + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." | |
147 | + | |
148 | +gettext: | |
149 | + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale | |
150 | + @echo | |
151 | + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." | |
152 | + | |
153 | +changes: | |
154 | + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes | |
155 | + @echo | |
156 | + @echo "The overview file is in $(BUILDDIR)/changes." | |
157 | + | |
158 | +linkcheck: | |
159 | + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck | |
160 | + @echo | |
161 | + @echo "Link check complete; look for any errors in the above output " \ | |
162 | + "or in $(BUILDDIR)/linkcheck/output.txt." | |
163 | + | |
164 | +doctest: | |
165 | + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest | |
166 | + @echo "Testing of doctests in the sources finished, look at the " \ | |
167 | + "results in $(BUILDDIR)/doctest/output.txt." | |
168 | + | |
169 | +xml: | |
170 | + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml | |
171 | + @echo | |
172 | + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." | |
173 | + | |
174 | +pseudoxml: | |
175 | + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml | |
176 | + @echo | |
177 | + @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 | -} |
... | ... | @@ -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 | ... | ... |
... | ... | @@ -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> | ... | ... |
... | ... | @@ -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/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 |
... | ... | @@ -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. |
... | ... | @@ -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). | ... | ... |
... | ... | @@ -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 |
... | ... | @@ -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 |
... | ... | @@ -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/make.bat
... | ... | @@ -1,242 +0,0 @@ |
1 | -@ECHO OFF | |
2 | - | |
3 | -REM Command file for Sphinx documentation | |
4 | - | |
5 | -if "%SPHINXBUILD%" == "" ( | |
6 | - set SPHINXBUILD=sphinx-build | |
7 | -) | |
8 | -set BUILDDIR=_build | |
9 | -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . | |
10 | -set I18NSPHINXOPTS=%SPHINXOPTS% . | |
11 | -if NOT "%PAPER%" == "" ( | |
12 | - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% | |
13 | - set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% | |
14 | -) | |
15 | - | |
16 | -if "%1" == "" goto help | |
17 | - | |
18 | -if "%1" == "help" ( | |
19 | - :help | |
20 | - echo.Please use `make ^<target^>` where ^<target^> is one of | |
21 | - echo. html to make standalone HTML files | |
22 | - echo. dirhtml to make HTML files named index.html in directories | |
23 | - echo. singlehtml to make a single large HTML file | |
24 | - echo. pickle to make pickle files | |
25 | - echo. json to make JSON files | |
26 | - echo. htmlhelp to make HTML files and a HTML help project | |
27 | - echo. qthelp to make HTML files and a qthelp project | |
28 | - echo. devhelp to make HTML files and a Devhelp project | |
29 | - echo. epub to make an epub | |
30 | - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter | |
31 | - echo. text to make text files | |
32 | - echo. man to make manual pages | |
33 | - echo. texinfo to make Texinfo files | |
34 | - echo. gettext to make PO message catalogs | |
35 | - echo. changes to make an overview over all changed/added/deprecated items | |
36 | - echo. xml to make Docutils-native XML files | |
37 | - echo. pseudoxml to make pseudoxml-XML files for display purposes | |
38 | - echo. linkcheck to check all external links for integrity | |
39 | - echo. doctest to run all doctests embedded in the documentation if enabled | |
40 | - goto end | |
41 | -) | |
42 | - | |
43 | -if "%1" == "clean" ( | |
44 | - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i | |
45 | - del /q /s %BUILDDIR%\* | |
46 | - goto end | |
47 | -) | |
48 | - | |
49 | - | |
50 | -%SPHINXBUILD% 2> nul | |
51 | -if errorlevel 9009 ( | |
52 | - echo. | |
53 | - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx | |
54 | - echo.installed, then set the SPHINXBUILD environment variable to point | |
55 | - echo.to the full path of the 'sphinx-build' executable. Alternatively you | |
56 | - echo.may add the Sphinx directory to PATH. | |
57 | - echo. | |
58 | - echo.If you don't have Sphinx installed, grab it from | |
59 | - echo.http://sphinx-doc.org/ | |
60 | - exit /b 1 | |
61 | -) | |
62 | - | |
63 | -if "%1" == "html" ( | |
64 | - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html | |
65 | - if errorlevel 1 exit /b 1 | |
66 | - echo. | |
67 | - echo.Build finished. The HTML pages are in %BUILDDIR%/html. | |
68 | - goto end | |
69 | -) | |
70 | - | |
71 | -if "%1" == "dirhtml" ( | |
72 | - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml | |
73 | - if errorlevel 1 exit /b 1 | |
74 | - echo. | |
75 | - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. | |
76 | - goto end | |
77 | -) | |
78 | - | |
79 | -if "%1" == "singlehtml" ( | |
80 | - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml | |
81 | - if errorlevel 1 exit /b 1 | |
82 | - echo. | |
83 | - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. | |
84 | - goto end | |
85 | -) | |
86 | - | |
87 | -if "%1" == "pickle" ( | |
88 | - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle | |
89 | - if errorlevel 1 exit /b 1 | |
90 | - echo. | |
91 | - echo.Build finished; now you can process the pickle files. | |
92 | - goto end | |
93 | -) | |
94 | - | |
95 | -if "%1" == "json" ( | |
96 | - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json | |
97 | - if errorlevel 1 exit /b 1 | |
98 | - echo. | |
99 | - echo.Build finished; now you can process the JSON files. | |
100 | - goto end | |
101 | -) | |
102 | - | |
103 | -if "%1" == "htmlhelp" ( | |
104 | - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp | |
105 | - if errorlevel 1 exit /b 1 | |
106 | - echo. | |
107 | - echo.Build finished; now you can run HTML Help Workshop with the ^ | |
108 | -.hhp project file in %BUILDDIR%/htmlhelp. | |
109 | - goto end | |
110 | -) | |
111 | - | |
112 | -if "%1" == "qthelp" ( | |
113 | - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp | |
114 | - if errorlevel 1 exit /b 1 | |
115 | - echo. | |
116 | - echo.Build finished; now you can run "qcollectiongenerator" with the ^ | |
117 | -.qhcp project file in %BUILDDIR%/qthelp, like this: | |
118 | - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\softwarepublico.qhcp | |
119 | - echo.To view the help file: | |
120 | - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\softwarepublico.ghc | |
121 | - goto end | |
122 | -) | |
123 | - | |
124 | -if "%1" == "devhelp" ( | |
125 | - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp | |
126 | - if errorlevel 1 exit /b 1 | |
127 | - echo. | |
128 | - echo.Build finished. | |
129 | - goto end | |
130 | -) | |
131 | - | |
132 | -if "%1" == "epub" ( | |
133 | - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub | |
134 | - if errorlevel 1 exit /b 1 | |
135 | - echo. | |
136 | - echo.Build finished. The epub file is in %BUILDDIR%/epub. | |
137 | - goto end | |
138 | -) | |
139 | - | |
140 | -if "%1" == "latex" ( | |
141 | - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex | |
142 | - if errorlevel 1 exit /b 1 | |
143 | - echo. | |
144 | - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. | |
145 | - goto end | |
146 | -) | |
147 | - | |
148 | -if "%1" == "latexpdf" ( | |
149 | - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex | |
150 | - cd %BUILDDIR%/latex | |
151 | - make all-pdf | |
152 | - cd %BUILDDIR%/.. | |
153 | - echo. | |
154 | - echo.Build finished; the PDF files are in %BUILDDIR%/latex. | |
155 | - goto end | |
156 | -) | |
157 | - | |
158 | -if "%1" == "latexpdfja" ( | |
159 | - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex | |
160 | - cd %BUILDDIR%/latex | |
161 | - make all-pdf-ja | |
162 | - cd %BUILDDIR%/.. | |
163 | - echo. | |
164 | - echo.Build finished; the PDF files are in %BUILDDIR%/latex. | |
165 | - goto end | |
166 | -) | |
167 | - | |
168 | -if "%1" == "text" ( | |
169 | - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text | |
170 | - if errorlevel 1 exit /b 1 | |
171 | - echo. | |
172 | - echo.Build finished. The text files are in %BUILDDIR%/text. | |
173 | - goto end | |
174 | -) | |
175 | - | |
176 | -if "%1" == "man" ( | |
177 | - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man | |
178 | - if errorlevel 1 exit /b 1 | |
179 | - echo. | |
180 | - echo.Build finished. The manual pages are in %BUILDDIR%/man. | |
181 | - goto end | |
182 | -) | |
183 | - | |
184 | -if "%1" == "texinfo" ( | |
185 | - %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo | |
186 | - if errorlevel 1 exit /b 1 | |
187 | - echo. | |
188 | - echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. | |
189 | - goto end | |
190 | -) | |
191 | - | |
192 | -if "%1" == "gettext" ( | |
193 | - %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale | |
194 | - if errorlevel 1 exit /b 1 | |
195 | - echo. | |
196 | - echo.Build finished. The message catalogs are in %BUILDDIR%/locale. | |
197 | - goto end | |
198 | -) | |
199 | - | |
200 | -if "%1" == "changes" ( | |
201 | - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes | |
202 | - if errorlevel 1 exit /b 1 | |
203 | - echo. | |
204 | - echo.The overview file is in %BUILDDIR%/changes. | |
205 | - goto end | |
206 | -) | |
207 | - | |
208 | -if "%1" == "linkcheck" ( | |
209 | - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck | |
210 | - if errorlevel 1 exit /b 1 | |
211 | - echo. | |
212 | - echo.Link check complete; look for any errors in the above output ^ | |
213 | -or in %BUILDDIR%/linkcheck/output.txt. | |
214 | - goto end | |
215 | -) | |
216 | - | |
217 | -if "%1" == "doctest" ( | |
218 | - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest | |
219 | - if errorlevel 1 exit /b 1 | |
220 | - echo. | |
221 | - echo.Testing of doctests in the sources finished, look at the ^ | |
222 | -results in %BUILDDIR%/doctest/output.txt. | |
223 | - goto end | |
224 | -) | |
225 | - | |
226 | -if "%1" == "xml" ( | |
227 | - %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml | |
228 | - if errorlevel 1 exit /b 1 | |
229 | - echo. | |
230 | - echo.Build finished. The XML files are in %BUILDDIR%/xml. | |
231 | - goto end | |
232 | -) | |
233 | - | |
234 | -if "%1" == "pseudoxml" ( | |
235 | - %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml | |
236 | - if errorlevel 1 exit /b 1 | |
237 | - echo. | |
238 | - echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. | |
239 | - goto end | |
240 | -) | |
241 | - | |
242 | -:end |
docs/postfix-to-mailman-centos.py
... | ... | @@ -0,0 +1,32 @@ |
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 'Publishes PDF' | |
17 | +task :pdfupload => :pdf do | |
18 | + require 'date' | |
19 | + | |
20 | + tag = Date.today.strftime('doc-%Y-%m-%d-') + $SPB_ENV | |
21 | + blob = `git hash-object -w docs/_build/latex/softwarepublico.pdf`.strip | |
22 | + tree = `printf '100644 blob #{blob}\tsoftwarepublico-#{$SPB_ENV}.pdf\n' | git mktree`.strip | |
23 | + commit = `git commit-tree -m #{tag} #{tree}`.strip | |
24 | + | |
25 | + sh 'git', 'tag', tag, commit | |
26 | + sh 'git', 'push', 'origin', tag | |
27 | +end | |
28 | + | |
29 | +desc 'Removes generated files' | |
30 | +task :clean do | |
31 | + sh 'make -C docs/ clean' | |
32 | +end | ... | ... |
test/colab_test.sh
... | ... | @@ -21,16 +21,16 @@ test_nginx_responds() { |
21 | 21 | } |
22 | 22 | |
23 | 23 | test_nginx_virtualhost() { |
24 | - local title="$(curl --header 'Host: softwarepublico.dev' http://$integration/dashboard | grep '<title>' | sed -e 's/^\s*//')" | |
24 | + local title="$(curl --header 'Host: softwarepublico.dev' http://$config_external_hostname/dashboard | grep '<title>' | sed -e 's/^\s*//')" | |
25 | 25 | assertEquals "<title>Home - Colab</title>" "$title" |
26 | 26 | } |
27 | 27 | |
28 | 28 | test_reverse_proxy_gitlab() { |
29 | - assertTrue 'Reverse proxy for gitlab' "curl --header 'Host: softwarepublico.dev' http://$integration/gitlab/public/projects | grep -i '<meta.*gitlab.*>'" | |
29 | + assertTrue 'Reverse proxy for gitlab' "curl --header 'Host: softwarepublico.dev' http://$config_external_hostname/gitlab/public/projects | grep -i '<meta.*gitlab.*>'" | |
30 | 30 | } |
31 | 31 | |
32 | 32 | test_reverse_proxy_noosfero() { |
33 | - assertTrue 'Reverse proxy for noosfero' "curl --header 'Host: softwarepublico.dev' http://$integration/social/search/people | grep -i '<meta.*noosfero.*>'" | |
33 | + assertTrue 'Reverse proxy for noosfero' "curl --header 'Host: softwarepublico.dev' http://$config_external_hostname/social/search/people | grep -i '<meta.*noosfero.*>'" | |
34 | 34 | } |
35 | 35 | |
36 | 36 | load_shunit2 | ... | ... |
... | ... | @@ -0,0 +1,137 @@ |
1 | +. $(dirname $0)/test_helper.sh | |
2 | + | |
3 | +if [ "$SPB_ENV" = local -o "$SPB_ENV" = lxc ]; 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' 'include:$expected\$'" | |
33 | +} | |
34 | + | |
35 | +check_spf() { | |
36 | + domain="$1" | |
37 | + spf_domain="$2" | |
38 | + local results="$(host -t TXT "$domain")" | |
39 | + assertTrue "TXT entry for $domain must have include:$spf_domain (found: $results)" "expr match '$results' 'include:$spf_domain'" | |
40 | +} | |
41 | + | |
42 | +test_dns_web() { | |
43 | + check_hostname "$config_external_hostname" "$config_external_ip" | |
44 | +} | |
45 | + | |
46 | +test_mx() { | |
47 | + check_mx "$config_external_hostname" "${config_relay_hostname}" | |
48 | +} | |
49 | + | |
50 | +test_dns_lists() { | |
51 | + check_hostname "$config_lists_hostname" "$config_external_ip" | |
52 | +} | |
53 | + | |
54 | +test_mx_lists() { | |
55 | + check_mx "$config_lists_hostname" "$config_relay_hostname" | |
56 | +} | |
57 | + | |
58 | +test_dns_relay() { | |
59 | + check_hostname "$config_relay_hostname" "$config_relay_ip" | |
60 | +} | |
61 | + | |
62 | +test_reverse_dns_web() { | |
63 | + check_reverse_dns "$config_external_ip" "$config_external_hostname" | |
64 | +} | |
65 | + | |
66 | +test_reverse_dns_relay() { | |
67 | + check_reverse_dns "$config_relay_ip" "$config_relay_hostname" | |
68 | +} | |
69 | + | |
70 | +if [ -n "$config_external_outgoing_mail_domain" ]; then | |
71 | + test_spf_domain() { | |
72 | + check_spf "$config_external_hostname" "$config_external_outgoing_mail_domain" | |
73 | + } | |
74 | + test_spf_lists() { | |
75 | + check_spf "$config_lists_hostname" "$config_external_outgoing_mail_domain" | |
76 | + } | |
77 | +fi | |
78 | + | |
79 | +if [ "$1" = '--doc' ]; then | |
80 | + check_hostname() { | |
81 | + echo ' * - A' | |
82 | + echo " - $1" | |
83 | + echo " - ${2}" | |
84 | + } | |
85 | + check_mx() { | |
86 | + echo ' * - MX' | |
87 | + echo " - $1" | |
88 | + echo " - ${2}." | |
89 | + } | |
90 | + check_reverse_dns() { | |
91 | + echo ' * - PTR' | |
92 | + echo " - $1" | |
93 | + echo " - ${2}." | |
94 | + } | |
95 | + check_spf() { | |
96 | + echo " * - TXT (SPF: \"v=spf1 ...\")" | |
97 | + echo " - $1 " | |
98 | + echo " - include:${2} " | |
99 | + } | |
100 | + header() { | |
101 | + local aponta="${2:-Aponta para}" | |
102 | + echo '.. list-table::' | |
103 | + echo ' :header-rows: 1' | |
104 | + echo | |
105 | + echo ' * - Tipo' | |
106 | + echo ' - Entrada' | |
107 | + echo " - $aponta" | |
108 | + } | |
109 | + footer() { | |
110 | + echo | |
111 | + } | |
112 | + ( | |
113 | + header 'DNS(A)' | |
114 | + test_dns_web | |
115 | + test_dns_lists | |
116 | + test_dns_relay | |
117 | + footer | |
118 | + | |
119 | + header 'MX' | |
120 | + test_mx | |
121 | + test_mx_lists | |
122 | + footer | |
123 | + | |
124 | + header 'DNS reverso' | |
125 | + test_reverse_dns_web | |
126 | + test_reverse_dns_relay | |
127 | + footer | |
128 | + | |
129 | + header 'SPF' 'Deve conter' | |
130 | + test_spf_domain | |
131 | + test_spf_lists | |
132 | + footer | |
133 | + | |
134 | + ) | |
135 | +else | |
136 | + . shunit2 | |
137 | +fi | ... | ... |
test/mailman_test.sh
... | ... | @@ -21,7 +21,7 @@ test_mailman_delivery() { |
21 | 21 | } |
22 | 22 | |
23 | 23 | test_mailman_web_interface() { |
24 | - local title="$(curl --location --header 'Host: listas.softwarepublico.dev' http://$integration/mailman/cgi-bin/listinfo | grep -i '<title>')" | |
24 | + local title="$(curl --location --header 'Host: listas.softwarepublico.dev' http://$config_external_hostname/mailman/cgi-bin/listinfo | grep -i '<title>')" | |
25 | 25 | assertEquals "<TITLE>listas.softwarepublico.dev Mailing Lists</TITLE>" "$title" |
26 | 26 | } |
27 | 27 | ... | ... |
test/noosfero_test.sh
... | ... | @@ -19,12 +19,12 @@ test_reverse_proxy_noosfero() { |
19 | 19 | } |
20 | 20 | |
21 | 21 | test_reverse_proxy_static_files() { |
22 | - local content_type="$(curl-host softwarepublico.dev --head http://$social/social/images/noosfero-network.png | grep-header Content-Type)" | |
22 | + local content_type="$(curl-host softwarepublico.dev --head http://$config_external_hostname/social/images/noosfero-network.png | grep-header Content-Type)" | |
23 | 23 | assertEquals "Content-Type: image/png" "$content_type" |
24 | 24 | } |
25 | 25 | |
26 | 26 | test_redirect_with_correct_hostname_behind_proxy() { |
27 | - local redirect="$(curl-host softwarepublico.dev --head https://softwarepublico.dev/social/search/contents | grep-header Location)" | |
27 | + local redirect="$(curl-host softwarepublico.dev --head https://$config_external_hostname/social/search/contents | grep-header Location)" | |
28 | 28 | assertEquals "Location: https://softwarepublico.dev/social/search/articles" "$redirect" |
29 | 29 | } |
30 | 30 | ... | ... |
test/test_helper.sh
utils/reverseproxy_ssh_setup
... | ... | @@ -11,7 +11,15 @@ sed -i -e 's/^#\?\s*Port\s*[0-9]\+\s*$/Port '$port'/g' /etc/ssh/sshd_config |
11 | 11 | yum install -y selinux-policy policycoreutils-python |
12 | 12 | |
13 | 13 | # Tell SELinux to allow the new port |
14 | -semanage port -a -t ssh_port_t -p tcp "$port" | |
14 | +if grep -q '/$' /proc/1/cgroup; then | |
15 | + # not in a container | |
16 | + semanage port -a -t ssh_port_t -p tcp "$port" | |
17 | +else | |
18 | + # in container; will fail if host does not have SELinux enabled | |
19 | + if ! semanage port -a -t ssh_port_t -p tcp "$port"; then | |
20 | + echo "I: can't use SELinux, your host probably does not have it enabled" | |
21 | + fi | |
22 | +fi | |
15 | 23 | |
16 | 24 | # Restart SSH |
17 | 25 | systemctl restart sshd | ... | ... |