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 | begin | 3 | begin |
| 2 | load 'local.rake' | 4 | load 'local.rake' |
| 3 | rescue LoadError | 5 | rescue LoadError |
| @@ -13,15 +15,40 @@ iptables_file = "config/#{$SPB_ENV}/iptables-filter-rules" | @@ -13,15 +15,40 @@ iptables_file = "config/#{$SPB_ENV}/iptables-filter-rules" | ||
| 13 | 15 | ||
| 14 | ENV['CHAKE_SSH_CONFIG'] = ssh_config_file | 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 | require 'chake' | 43 | require 'chake' |
| 17 | 44 | ||
| 18 | if Chake::VERSION < '0.4.3' | 45 | if Chake::VERSION < '0.4.3' |
| 19 | fail "Please upgrade to chake 0.4.3+" | 46 | fail "Please upgrade to chake 0.4.3+" |
| 20 | end | 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 | $nodes.each do |node| | 52 | $nodes.each do |node| |
| 26 | node.data['config'] = config | 53 | node.data['config'] = config |
| 27 | node.data['peers'] = ips | 54 | node.data['peers'] = ips |
| @@ -38,13 +65,41 @@ task :test do | @@ -38,13 +65,41 @@ task :test do | ||
| 38 | end | 65 | end |
| 39 | 66 | ||
| 40 | file 'ssh_config.erb' | 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 | end | 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 | end | 103 | end |
| 49 | 104 | ||
| 50 | task :backup => ssh_config_file do | 105 | task :backup => ssh_config_file do |
| @@ -98,3 +153,5 @@ task :preconfig => ssh_config_file do | @@ -98,3 +153,5 @@ task :preconfig => ssh_config_file do | ||
| 98 | end | 153 | end |
| 99 | end | 154 | end |
| 100 | end | 155 | end |
| 156 | + | ||
| 157 | +Dir.glob('tasks/*.rake').each { |f| load f } |
Vagrantfile
| @@ -7,34 +7,49 @@ require 'yaml' | @@ -7,34 +7,49 @@ require 'yaml' | ||
| 7 | VAGRANTFILE_API_VERSION = "2" | 7 | VAGRANTFILE_API_VERSION = "2" |
| 8 | 8 | ||
| 9 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| | 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 | proxy = ENV['http_proxy'] || ENV['HTTP_PROXY'] | 11 | proxy = ENV['http_proxy'] || ENV['HTTP_PROXY'] |
| 12 | if proxy | 12 | if proxy |
| 13 | config.vm.provision 'shell', path: 'utils/proxy.sh', args: [proxy] | 13 | config.vm.provision 'shell', path: 'utils/proxy.sh', args: [proxy] |
| 14 | end | 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 | config.vm.define 'database' do |database| | 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 | end | 29 | end |
| 21 | config.vm.define 'integration' do |integration| | 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 | end | 35 | end |
| 27 | end | 36 | end |
| 28 | config.vm.define 'email' do |email| | 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 | end | 41 | end |
| 31 | config.vm.define 'social' do |social| | 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 | end | 46 | end |
| 34 | config.vm.define 'reverseproxy' do |reverseproxy| | 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 | reverseproxy.ssh.host = ips['reverseproxy'] | 53 | reverseproxy.ssh.host = ips['reverseproxy'] |
| 39 | end | 54 | end |
| 40 | end | 55 | end |
| @@ -0,0 +1,15 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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,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,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,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 @@ | @@ -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 @@ | @@ -0,0 +1 @@ | ||
| 1 | +# nothing yet |
| @@ -0,0 +1,35 @@ | @@ -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 | admins: | 1 | admins: |
| 2 | - - | ||
| 3 | - - Paulo Meirelles | ||
| 4 | - - paulo@softwarelivre.org | ||
| 5 | -external_hostname: softwarepublico.dev | 2 | + - ["Paulo Meirelles", "paulo@softwarelivre.org"] |
| 6 | site_url: https://softwarepublico.dev | 3 | site_url: https://softwarepublico.dev |
| 4 | +external_hostname: softwarepublico.dev | ||
| 5 | +external_ip: 10.10.10.6 | ||
| 7 | colab_from_address: '"Portal do Software Publico" <noreply@softwarepublico.dev>' | 6 | colab_from_address: '"Portal do Software Publico" <noreply@softwarepublico.dev>' |
| 8 | server_email: '"Portal do Software Publico" <noreply@softwarepublico.dev>' | 7 | server_email: '"Portal do Software Publico" <noreply@softwarepublico.dev>' |
| 9 | email_subject_prefix: '[spb]' | 8 | email_subject_prefix: '[spb]' |
| 10 | lists_hostname: listas.softwarepublico.dev | 9 | lists_hostname: listas.softwarepublico.dev |
| 11 | lists_admin: paulo@softwarelivre.org | 10 | lists_admin: paulo@softwarelivre.org |
| 12 | relay_hostname: relay.softwarepublico.dev | 11 | relay_hostname: relay.softwarepublico.dev |
| 12 | +relay_ip: 10.10.10.3 | ||
| 13 | alt_ssh_port: 5555 | 13 | alt_ssh_port: 5555 |
| 14 | from_address: noreply@softwarepublico.dev | 14 | from_address: noreply@softwarepublico.dev |
config/production/config.yaml
| 1 | admins: | 1 | admins: |
| 2 | - - | ||
| 3 | - - Paulo Meirelles | ||
| 4 | - - paulo@softwarelivre.org | 2 | + - ["Paulo Meirelles", "paulo@softwarelivre.org"] |
| 5 | external_hostname: beta.softwarepublico.gov.br | 3 | external_hostname: beta.softwarepublico.gov.br |
| 4 | +external_ip: 164.41.9.49 | ||
| 6 | site_url: https://beta.softwarepublico.gov.br | 5 | site_url: https://beta.softwarepublico.gov.br |
| 7 | colab_from_address: '"Portal do Software Publico" <noreply@beta.softwarepublico.gov.br>' | 6 | colab_from_address: '"Portal do Software Publico" <noreply@beta.softwarepublico.gov.br>' |
| 8 | server_email: '"Portal do Software Publico" <noreply@beta.softwarepublico.gov.br>' | 7 | server_email: '"Portal do Software Publico" <noreply@beta.softwarepublico.gov.br>' |
| @@ -10,5 +9,6 @@ email_subject_prefix: '[spb]' | @@ -10,5 +9,6 @@ email_subject_prefix: '[spb]' | ||
| 10 | lists_hostname: listas.softwarepublico.gov.br | 9 | lists_hostname: listas.softwarepublico.gov.br |
| 11 | lists_admin: paulo@softwarelivre.org | 10 | lists_admin: paulo@softwarelivre.org |
| 12 | relay_hostname: relay.softwarepublico.gov.br | 11 | relay_hostname: relay.softwarepublico.gov.br |
| 12 | +relay_ip: 164.41.9.48 | ||
| 13 | alt_ssh_port: 55555 | 13 | alt_ssh_port: 55555 |
| 14 | from_address: noreply@softwarepublico.gov.br | 14 | from_address: noreply@softwarepublico.gov.br |
cookbooks/basics/files/default/selinux-install-module
| @@ -9,6 +9,12 @@ if [ $# -ne 1 ]; then | @@ -9,6 +9,12 @@ if [ $# -ne 1 ]; then | ||
| 9 | exit 1 | 9 | exit 1 |
| 10 | fi | 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 | input="$1" | 18 | input="$1" |
| 13 | 19 | ||
| 14 | directory=$(dirname "$input") | 20 | directory=$(dirname "$input") |
cookbooks/basics/recipes/default.rb
| @@ -10,8 +10,19 @@ cookbook_file '/etc/selinux/config' do | @@ -10,8 +10,19 @@ cookbook_file '/etc/selinux/config' do | ||
| 10 | group 'root' | 10 | group 'root' |
| 11 | mode 0644 | 11 | mode 0644 |
| 12 | end | 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 | # directory for local type enforcements | 26 | # directory for local type enforcements |
| 16 | directory '/etc/selinux/local' do | 27 | directory '/etc/selinux/local' do |
| 17 | owner 'root' | 28 | owner 'root' |
| @@ -32,8 +43,14 @@ package 'less' | @@ -32,8 +43,14 @@ package 'less' | ||
| 32 | package 'htop' | 43 | package 'htop' |
| 33 | package 'ntp' | 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 | service 'ntpd' do | 51 | service 'ntpd' do |
| 36 | action [:enable, :start] | 52 | action [:enable, :start] |
| 53 | + not_if 'is-a-container' | ||
| 37 | end | 54 | end |
| 38 | 55 | ||
| 39 | service 'firewalld' do | 56 | service 'firewalld' do |
cookbooks/email/recipes/relay.rb
| @@ -46,3 +46,10 @@ execute 'transport:postmap' do | @@ -46,3 +46,10 @@ execute 'transport:postmap' do | ||
| 46 | command "postmap /etc/postfix/transport" | 46 | command "postmap /etc/postfix/transport" |
| 47 | action :nothing | 47 | action :nothing |
| 48 | end | 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 | # Allow access to Postfix | 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,7 +18,8 @@ end | ||
| 18 | execute 'gitlab:setup' do | 18 | execute 'gitlab:setup' do |
| 19 | user 'git' | 19 | user 'git' |
| 20 | cwd '/usr/lib/gitlab' | 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 | action :nothing | 24 | action :nothing |
| 24 | notifies :restart, 'service[gitlab]' | 25 | notifies :restart, 'service[gitlab]' |
cookbooks/noosfero/recipes/default.rb
| @@ -42,6 +42,10 @@ execute 'plugins:enable' do | @@ -42,6 +42,10 @@ execute 'plugins:enable' do | ||
| 42 | command '/usr/lib/noosfero/script/noosfero-plugins enable ' + plugins.join(' ') | 42 | command '/usr/lib/noosfero/script/noosfero-plugins enable ' + plugins.join(' ') |
| 43 | end | 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 | execute 'theme:enable' do | 49 | execute 'theme:enable' do |
| 46 | command 'psql -h database -U noosfero --no-align --tuples-only -q -c "update environments set theme=\'noosfero-spb-theme\' where id=1;"' | 50 | command 'psql -h database -U noosfero --no-align --tuples-only -q -c "update environments set theme=\'noosfero-spb-theme\' where id=1;"' |
| 47 | end | 51 | end |
cookbooks/reverse_proxy/recipes/default.rb
| @@ -12,7 +12,9 @@ cookbook_file "/etc/sysctl.d/ip_forward.conf" do | @@ -12,7 +12,9 @@ cookbook_file "/etc/sysctl.d/ip_forward.conf" do | ||
| 12 | mode 0644 | 12 | mode 0644 |
| 13 | end | 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 | cookbook_file "/etc/nginx/#{node['config']['external_hostname']}.key" do | 19 | cookbook_file "/etc/nginx/#{node['config']['external_hostname']}.key" do |
| 18 | owner 'root' | 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 | @echo | 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 @@ | @@ -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,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 @@ | @@ -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 @@ | @@ -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 @@ | @@ -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. |
| @@ -0,0 +1,10 @@ | @@ -0,0 +1,10 @@ | ||
| 1 | +$SPB_ENV = ENV.fetch('SPB_ENV', 'local') | ||
| 2 | + | ||
| 3 | +$_.gsub!('@@SPB_ENV@@', $SPB_ENV) | ||
| 4 | + | ||
| 5 | +$_.gsub!(/@@config\(([^\)]*)\)@@/) do |f| | ||
| 6 | + lines = File.read("../config/#{$SPB_ENV}/#{$1}").lines | ||
| 7 | + lines.shift + lines.map do |line| | ||
| 8 | + ' ' + line | ||
| 9 | + end.join | ||
| 10 | +end |
docs/conf.py
| @@ -1,331 +0,0 @@ | @@ -1,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 @@ | @@ -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,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 @@ | @@ -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 @@ | @@ -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,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 @@ | @@ -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,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 @@ | @@ -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,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 @@ | @@ -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,16 +21,16 @@ test_nginx_responds() { | ||
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | test_nginx_virtualhost() { | 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 | assertEquals "<title>Home - Colab</title>" "$title" | 25 | assertEquals "<title>Home - Colab</title>" "$title" |
| 26 | } | 26 | } |
| 27 | 27 | ||
| 28 | test_reverse_proxy_gitlab() { | 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 | test_reverse_proxy_noosfero() { | 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 | load_shunit2 | 36 | load_shunit2 |
| @@ -0,0 +1,137 @@ | @@ -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,7 +21,7 @@ test_mailman_delivery() { | ||
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | test_mailman_web_interface() { | 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 | assertEquals "<TITLE>listas.softwarepublico.dev Mailing Lists</TITLE>" "$title" | 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,12 +19,12 @@ test_reverse_proxy_noosfero() { | ||
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | test_reverse_proxy_static_files() { | 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 | assertEquals "Content-Type: image/png" "$content_type" | 23 | assertEquals "Content-Type: image/png" "$content_type" |
| 24 | } | 24 | } |
| 25 | 25 | ||
| 26 | test_redirect_with_correct_hostname_behind_proxy() { | 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 | assertEquals "Location: https://softwarepublico.dev/social/search/articles" "$redirect" | 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,7 +11,15 @@ sed -i -e 's/^#\?\s*Port\s*[0-9]\+\s*$/Port '$port'/g' /etc/ssh/sshd_config | ||
| 11 | yum install -y selinux-policy policycoreutils-python | 11 | yum install -y selinux-policy policycoreutils-python |
| 12 | 12 | ||
| 13 | # Tell SELinux to allow the new port | 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 | # Restart SSH | 24 | # Restart SSH |
| 17 | systemctl restart sshd | 25 | systemctl restart sshd |