Merge pull request 'Configure/deploy HTTP upload service for Kosmos Chat/XMPP' (#245) from feature/http_upload_service into master
Reviewed-on: #245
This commit is contained in:
commit
3da883864b
4
clients/uploads-1.json
Normal file
4
clients/uploads-1.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"name": "uploads-1",
|
||||||
|
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwJwWaz8TeGv3SFlKzLMx\nqN8GTL/c0N9ppBvv8xNSS/yF9Y40SbL418uxYzm9hIhOXgIygIgLT2EKIXX32t+R\neOJCdYycQFM3At2fhMkjhuUW0gmDRcYBcBJLC5hLh2EZ+A8V7k4qgrBpPLOjEv48\nhQY0vuAw2DGndWr4QLh5NLUmQiOrfuzcZSSNCBOTIgUZgNmRd9QcCHDq4WDH3poa\nosJo4a9JGEGUL1irOivvEdyJPwEd2f++nYAdWwj8pjCYgpRshQlLhxOlylMx7MxB\nQt2bgJC9sahfbfJCOqdlCU3DMJL0bRUiuxK77WeSsxWBJmrsiF3+Ljs2Ix+s7fnS\nywIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||||
|
}
|
@ -1,23 +1,30 @@
|
|||||||
{
|
{
|
||||||
"id": "ejabberd",
|
"id": "ejabberd",
|
||||||
"5apps_ldap_password": {
|
"5apps_ldap_password": {
|
||||||
"encrypted_data": "mfV9TyC4OM055JnyV73mq4qY840pH1tZC9LnIaA3A80CY2kVteC4\n",
|
"encrypted_data": "RdzDZk2F4yBvgII84JGt8AF0LT4cyjRQFQvMJ5LhdB54T06Kjq3S\n",
|
||||||
"iv": "gpEC3IK9BN9RkaYz\n",
|
"iv": "+3WlMHiNAFVE4iku\n",
|
||||||
"auth_tag": "WXYWOjUCgEw5OR5VMh+Enw==\n",
|
"auth_tag": "mKheQu/KeHSyt8W783lrzA==\n",
|
||||||
"version": 3,
|
"version": 3,
|
||||||
"cipher": "aes-256-gcm"
|
"cipher": "aes-256-gcm"
|
||||||
},
|
},
|
||||||
"kosmos_ldap_password": {
|
"kosmos_ldap_password": {
|
||||||
"encrypted_data": "Q9znUOIIXU+XsPWet4rDCjHsPPxlA3EfNTkEER/EdfoCajd1Txuh\n",
|
"encrypted_data": "fABWhxMuLaF2qLFdIN//R6bgBkD60WRWiBZPErB1eBOxHqOp813o\n",
|
||||||
"iv": "7SAOAwSU8rZGopB1\n",
|
"iv": "uBPPYY/FM2hee05V\n",
|
||||||
"auth_tag": "X8yIyw2BFbQMAVTMYLA67g==\n",
|
"auth_tag": "cO+zP2QggWIzbuVxtkct2w==\n",
|
||||||
|
"version": 3,
|
||||||
|
"cipher": "aes-256-gcm"
|
||||||
|
},
|
||||||
|
"uploads_secret": {
|
||||||
|
"encrypted_data": "03Y8CNBstV7vYopx8X54hkRSlnwwbOg5Y0KwTPV4qys1\n",
|
||||||
|
"iv": "gLTP7Y2Y70jL+sxH\n",
|
||||||
|
"auth_tag": "HJoyOF4rYm9ayKfViuKBlA==\n",
|
||||||
"version": 3,
|
"version": 3,
|
||||||
"cipher": "aes-256-gcm"
|
"cipher": "aes-256-gcm"
|
||||||
},
|
},
|
||||||
"admins": {
|
"admins": {
|
||||||
"encrypted_data": "xKtiBOgn4ysJt4byry31cVJUHEsatWDwHEzEve/N5NxTOh1f4QBD+Q68IYzv\nV0ulBjtW91yFcQqKNx/prAVcK3khbnsEzg8uoub9o6hSMwp16LL5x/u6T6u2\n5DwWBEy08yuaujkko57ir0Yv7mfRedT1i5SaH9pgg5VLm56G/PXrlPFfjwaU\n",
|
"encrypted_data": "mRX2Lxqxb//Gd76bk+G3V+eObaq+NILiMsHHjFvjBCvJrznvRzezqW1VHhwW\ndH/ZY2gM8CVCcmYNQ8Xtg/1loPYAUjROvDRirj5i9fP7zgJRc1anNmohDOle\n34aNPYverGm+IJ21sFrAv4Xe/KleJBO5ynuiInqqvljcu3LiuvSYBXW34yWB\n",
|
||||||
"iv": "fpL3EA1VbXxxi+yq\n",
|
"iv": "QqJJM8gmox565JUd\n",
|
||||||
"auth_tag": "iJMJAmw5gHWLFJM5kdzR9A==\n",
|
"auth_tag": "yWRLb22JwJjjoK6Wdr1ujg==\n",
|
||||||
"version": 3,
|
"version": 3,
|
||||||
"cipher": "aes-256-gcm"
|
"cipher": "aes-256-gcm"
|
||||||
}
|
}
|
||||||
|
64
nodes/uploads-1.json
Normal file
64
nodes/uploads-1.json
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
{
|
||||||
|
"name": "uploads-1",
|
||||||
|
"normal": {
|
||||||
|
"knife_zero": {
|
||||||
|
"host": "10.147.20.98"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"automatic": {
|
||||||
|
"fqdn": "uploads-1",
|
||||||
|
"os": "linux",
|
||||||
|
"os_version": "5.4.0-54-generic",
|
||||||
|
"hostname": "uploads-1",
|
||||||
|
"ipaddress": "192.168.122.230",
|
||||||
|
"roles": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"recipes": [
|
||||||
|
"kosmos-base",
|
||||||
|
"kosmos-base::default",
|
||||||
|
"kosmos-ejabberd::upload_service",
|
||||||
|
"apt::default",
|
||||||
|
"timezone_iii::default",
|
||||||
|
"timezone_iii::debian",
|
||||||
|
"ntp::default",
|
||||||
|
"ntp::apparmor",
|
||||||
|
"kosmos-base::systemd_emails",
|
||||||
|
"apt::unattended-upgrades",
|
||||||
|
"kosmos-base::firewall",
|
||||||
|
"kosmos-postfix::default",
|
||||||
|
"postfix::default",
|
||||||
|
"postfix::_common",
|
||||||
|
"postfix::_attributes",
|
||||||
|
"postfix::sasl_auth",
|
||||||
|
"hostname::default",
|
||||||
|
"kosmos-nginx::with_perl",
|
||||||
|
"nginx::default",
|
||||||
|
"nginx::package",
|
||||||
|
"nginx::ohai_plugin",
|
||||||
|
"nginx::repo",
|
||||||
|
"nginx::commons",
|
||||||
|
"nginx::commons_dir",
|
||||||
|
"nginx::commons_script",
|
||||||
|
"nginx::commons_conf",
|
||||||
|
"kosmos-base::letsencrypt"
|
||||||
|
],
|
||||||
|
"platform": "ubuntu",
|
||||||
|
"platform_version": "20.04",
|
||||||
|
"cloud": null,
|
||||||
|
"chef_packages": {
|
||||||
|
"chef": {
|
||||||
|
"version": "15.14.0",
|
||||||
|
"chef_root": "/opt/chef/embedded/lib/ruby/gems/2.6.0/gems/chef-15.14.0/lib"
|
||||||
|
},
|
||||||
|
"ohai": {
|
||||||
|
"version": "15.12.0",
|
||||||
|
"ohai_root": "/opt/chef/embedded/lib/ruby/gems/2.6.0/gems/ohai-15.12.0/lib/ohai"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"run_list": [
|
||||||
|
"recipe[kosmos-base]",
|
||||||
|
"recipe[kosmos-ejabberd::upload_service]"
|
||||||
|
]
|
||||||
|
}
|
@ -10,3 +10,12 @@ node.override["tor"]["HiddenServices"]["ejabberd"] = {
|
|||||||
"5269 127.0.0.1:5269"
|
"5269 127.0.0.1:5269"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
node.default["kosmos-ejabberd"]["uploads"] = {
|
||||||
|
"domain" => "uploads.kosmos.chat",
|
||||||
|
"max_upload_size_mb" => "100",
|
||||||
|
"upload.pm" => {
|
||||||
|
"repo" => "https://gitea.kosmos.org/kosmos/ngx_http_upload.git",
|
||||||
|
"revision" => "0.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -19,8 +19,9 @@ chef_version '>= 12.14' if respond_to?(:chef_version)
|
|||||||
#
|
#
|
||||||
# source_url 'https://github.com/<insert_org_here>/kosmos-ejabberd'
|
# source_url 'https://github.com/<insert_org_here>/kosmos-ejabberd'
|
||||||
|
|
||||||
depends "kosmos-postgresql"
|
|
||||||
depends "kosmos-base"
|
depends "kosmos-base"
|
||||||
|
depends "kosmos-postgresql"
|
||||||
|
depends "kosmos-nginx"
|
||||||
depends "backup"
|
depends "backup"
|
||||||
depends "firewall"
|
depends "firewall"
|
||||||
depends "tor-full"
|
depends "tor-full"
|
||||||
|
@ -64,6 +64,11 @@ modules:
|
|||||||
max_user_conferences: 1000
|
max_user_conferences: 1000
|
||||||
default_room_options:
|
default_room_options:
|
||||||
mam: true
|
mam: true
|
||||||
|
mod_http_upload:
|
||||||
|
put_url: "https://uploads.kosmos.chat/8af2c77"
|
||||||
|
external_secret: "#{ejabberd_credentials["uploads_secret"]}"
|
||||||
|
max_size: 104857600
|
||||||
|
thumbnail: false # otherwise needs the identify command from ImageMagick installed
|
||||||
EOF
|
EOF
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -89,6 +94,11 @@ modules:
|
|||||||
public_list: false
|
public_list: false
|
||||||
persistent: true
|
persistent: true
|
||||||
mam: true
|
mam: true
|
||||||
|
mod_http_upload:
|
||||||
|
put_url: "https://uploads.kosmos.chat/2802cfe"
|
||||||
|
external_secret: "#{ejabberd_credentials["uploads_secret"]}"
|
||||||
|
max_size: 104857600
|
||||||
|
thumbnail: false # otherwise needs the identify command from ImageMagick installed
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
64
site-cookbooks/kosmos-ejabberd/recipes/upload_service.rb
Normal file
64
site-cookbooks/kosmos-ejabberd/recipes/upload_service.rb
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
#
|
||||||
|
# Cookbook:: kosmos-ejabberd
|
||||||
|
# Recipe:: upload_service
|
||||||
|
#
|
||||||
|
|
||||||
|
include_recipe "kosmos-nginx::with_perl"
|
||||||
|
|
||||||
|
ejabberd_credentials = data_bag_item("credentials", "ejabberd")
|
||||||
|
uploads_secret = ejabberd_credentials["uploads_secret"]
|
||||||
|
|
||||||
|
upload_config = node["kosmos-ejabberd"]["uploads"]
|
||||||
|
domain = upload_config["domain"]
|
||||||
|
|
||||||
|
git "/opt/upload.pm" do
|
||||||
|
repository upload_config["upload.pm"]["repo"]
|
||||||
|
revision upload_config["upload.pm"]["revision"]
|
||||||
|
action :sync
|
||||||
|
end
|
||||||
|
|
||||||
|
directory "/var/www/upload" do
|
||||||
|
user node["nginx"]["user"]
|
||||||
|
group node["nginx"]["group"]
|
||||||
|
mode "0755"
|
||||||
|
end
|
||||||
|
|
||||||
|
ruby_block "configure uploads.pm" do
|
||||||
|
block do
|
||||||
|
file = Chef::Util::FileEdit.new("/opt/upload.pm/upload.pm")
|
||||||
|
file.search_file_replace(%r{it-is-secret}, uploads_secret)
|
||||||
|
file.search_file_replace_line(
|
||||||
|
%r{my \$uri_prefix_components = 0;},
|
||||||
|
'my $uri_prefix_components = 1;'
|
||||||
|
)
|
||||||
|
file.write_file
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
ruby_block "configure perl module in nginx" do
|
||||||
|
block do
|
||||||
|
file = Chef::Util::FileEdit.new("/etc/nginx/nginx.conf")
|
||||||
|
file.insert_line_after_match(
|
||||||
|
%r{types_hash_bucket_size},
|
||||||
|
"\n\n perl_modules /opt/upload.pm;\n perl_require upload.pm;"
|
||||||
|
)
|
||||||
|
file.write_file
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
template "#{node["nginx"]["dir"]}/sites-available/#{domain}" do
|
||||||
|
source "nginx_conf_upload_service.erb"
|
||||||
|
owner node["nginx"]["user"]
|
||||||
|
mode 0640
|
||||||
|
variables server_name: domain,
|
||||||
|
ssl_cert: "/etc/letsencrypt/live/#{domain}/fullchain.pem",
|
||||||
|
ssl_key: "/etc/letsencrypt/live/#{domain}/privkey.pem",
|
||||||
|
max_upload_size_mb: upload_config["max_upload_size_mb"]
|
||||||
|
notifies :reload, "service[nginx]", :delayed
|
||||||
|
end
|
||||||
|
|
||||||
|
nginx_site domain do
|
||||||
|
action :enable
|
||||||
|
end
|
||||||
|
|
||||||
|
nginx_certbot_site domain
|
@ -191,10 +191,6 @@ modules:
|
|||||||
name: "abuse-addresses"
|
name: "abuse-addresses"
|
||||||
urls: ["mailto:abuse@@HOST@"]
|
urls: ["mailto:abuse@@HOST@"]
|
||||||
mod_bosh: {}
|
mod_bosh: {}
|
||||||
mod_http_upload:
|
|
||||||
docroot: "/opt/ejabberd/uploads/xmpp.@HOST@/"
|
|
||||||
put_url: "https://xmpp.@HOST@:5443/upload"
|
|
||||||
thumbnail: false # otherwise needs the identify command from ImageMagick installed
|
|
||||||
mod_last: {}
|
mod_last: {}
|
||||||
mod_mam:
|
mod_mam:
|
||||||
default: always
|
default: always
|
||||||
|
@ -0,0 +1,19 @@
|
|||||||
|
<% if File.exist?(@ssl_cert) && File.exist?(@ssl_key) -%>
|
||||||
|
# Generated by Chef
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 443 ssl http2;
|
||||||
|
server_name <%= @server_name %>;
|
||||||
|
|
||||||
|
ssl_certificate <%= @ssl_cert %>;
|
||||||
|
ssl_certificate_key <%= @ssl_key %>;
|
||||||
|
|
||||||
|
root /var/www/upload;
|
||||||
|
|
||||||
|
client_max_body_size <%= @max_upload_size_mb %>m;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
perl upload::handle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
<% end -%>
|
33
site-cookbooks/kosmos-nginx/recipes/with_perl.rb
Normal file
33
site-cookbooks/kosmos-nginx/recipes/with_perl.rb
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
node.override['nginx']['default_site_enabled'] = false
|
||||||
|
node.override['nginx']['server_tokens'] = 'off'
|
||||||
|
|
||||||
|
node.override['nginx']['package_name'] = 'nginx-core'
|
||||||
|
include_recipe 'nginx'
|
||||||
|
|
||||||
|
package 'libnginx-mod-http-perl'
|
||||||
|
|
||||||
|
# Generate Strong Diffie-Hellman Group (increases security)
|
||||||
|
# https://weakdh.org/sysadmin.html
|
||||||
|
openssl_dhparam "/etc/ssl/private/dhparams.pem" do
|
||||||
|
key_length 2048
|
||||||
|
mode 0600
|
||||||
|
owner 'www-data'
|
||||||
|
end
|
||||||
|
|
||||||
|
cookbook_file "#{node['nginx']['dir']}/conf.d/tls_config.conf" do
|
||||||
|
source 'nginx_tls_config.conf'
|
||||||
|
owner 'root'
|
||||||
|
group 'root'
|
||||||
|
mode '0644'
|
||||||
|
notifies :restart, 'service[nginx]'
|
||||||
|
end
|
||||||
|
|
||||||
|
unless node.chef_environment == "development"
|
||||||
|
include_recipe 'kosmos-base::firewall'
|
||||||
|
|
||||||
|
firewall_rule 'http/https' do
|
||||||
|
port [80, 443]
|
||||||
|
protocol :tcp
|
||||||
|
command :allow
|
||||||
|
end
|
||||||
|
end
|
@ -8,8 +8,6 @@ property :site, String
|
|||||||
action :create do
|
action :create do
|
||||||
return if node.chef_environment == "development"
|
return if node.chef_environment == "development"
|
||||||
|
|
||||||
include_recipe "kosmos-nginx"
|
|
||||||
|
|
||||||
domain = new_resource.domain
|
domain = new_resource.domain
|
||||||
site = new_resource.site || domain
|
site = new_resource.site || domain
|
||||||
root_directory = "/var/www/#{domain}"
|
root_directory = "/var/www/#{domain}"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user