Compare commits
40 Commits
jammy_jell
...
7949fd067c
| Author | SHA1 | Date | |
|---|---|---|---|
|
7949fd067c
|
|||
|
0726e58f7c
|
|||
|
fe581c348a
|
|||
|
af62078960
|
|||
|
9b4deff91e
|
|||
| 0944bc5266 | |||
|
eb06926606
|
|||
| 15096ca17b | |||
|
3551b71154
|
|||
|
752bb74663
|
|||
|
c64526a944
|
|||
|
da242d4817
|
|||
|
0af4bc1d0d
|
|||
| c9f5a745a3 | |||
|
d935b99d7d
|
|||
| d048bbb297 | |||
|
61bd121709
|
|||
| ec9b912e45 | |||
|
d53ba42a1d
|
|||
|
a99f7f7574
|
|||
|
1c8ee14bb3
|
|||
| cdedf49be3 | |||
|
5e727ec279
|
|||
|
9d928298d2
|
|||
|
1174661b46
|
|||
| 2dff7cf850 | |||
|
232360efba
|
|||
|
8b8e8f3438
|
|||
|
522c213b09
|
|||
|
80eddfbf56
|
|||
|
7e664723a1
|
|||
|
f5961af7fe
|
|||
|
d1301dad3e
|
|||
|
42c46a5645
|
|||
|
5be9081613
|
|||
|
1649d03665
|
|||
|
b9a3910364
|
|||
|
9835b85181
|
|||
|
dbccd9d2bf
|
|||
|
1a5f312699
|
6
.gitmodules
vendored
6
.gitmodules
vendored
@@ -4,3 +4,9 @@
|
|||||||
[submodule "site-cookbooks/openresty"]
|
[submodule "site-cookbooks/openresty"]
|
||||||
path = site-cookbooks/openresty
|
path = site-cookbooks/openresty
|
||||||
url = https://github.com/67P/chef-openresty.git
|
url = https://github.com/67P/chef-openresty.git
|
||||||
|
[submodule "site-cookbooks/strfry"]
|
||||||
|
path = site-cookbooks/strfry
|
||||||
|
url = git@gitea.kosmos.org:kosmos/strfry-cookbook.git
|
||||||
|
[submodule "site-cookbooks/deno"]
|
||||||
|
path = site-cookbooks/deno
|
||||||
|
url = git@gitea.kosmos.org:kosmos/deno-cookbook.git
|
||||||
|
|||||||
4
clients/strfry-1.json
Normal file
4
clients/strfry-1.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"name": "strfry-1",
|
||||||
|
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzDV/RMGMXVDbvoA6PNh8\nQzhtHwYDCFcUSkbrwP6tzh6GpVunGEOdOdhj2V63T2tF1H+lujxQXh5pK7C0D6VZ\niO04ftJlo7/svyxUcwWr+znyN5sFdQRh3cBZiGSBYolizwoqgtPFlbNhmWAzV0Du\n9t8mhz70IK3B+UdwWyHtoK0NNsJGnQ9YzAvcjyDmEO/3sCjAhNnxVpmXftpcSmd9\nMonzFtIDBbRRll4AHZYRbmXCzx63+VmelvdnufnbY82liol0zzBwJaBD1wyNlG0y\ni96p3Kx03bLNlIaYVGbjZeJi+6oo2VDWJ4OloLLAYoHDSipeHT9qWfUdnE6ge4Lm\nywIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||||
|
}
|
||||||
@@ -1,27 +1,38 @@
|
|||||||
{
|
{
|
||||||
"id": "backup",
|
"id": "backup",
|
||||||
"s3_access_key_id": {
|
"s3_access_key_id": {
|
||||||
"encrypted_data": "emGNH4v7TTEh05Go/DsI3k7CFnaK4p/4JxodC4BYpyWw47/Z3dsuRMu4vXM3\n3YLH\n",
|
"encrypted_data": "245TrPvuoBRRTimhbt6qqsFb+JnnD377sPt1pguJy7Q2BXOy/jrX0wyMt+cP\nuA==\n",
|
||||||
"iv": "Dau+ekb3UTYdl8w3fQKVcA==\n",
|
"iv": "ylmRxSRO3AA4MSJN\n",
|
||||||
"version": 1,
|
"auth_tag": "45tBcYZowPLrbv4Zu2P0Fw==\n",
|
||||||
"cipher": "aes-256-cbc"
|
"version": 3,
|
||||||
|
"cipher": "aes-256-gcm"
|
||||||
},
|
},
|
||||||
"s3_secret_access_key": {
|
"s3_secret_access_key": {
|
||||||
"encrypted_data": "Mxyly86JxrWUbubbSiqPdRosChzfI1Q8eBEG4n+2B9JJG4yExltO5Wc5kgSs\nX01MPXAc+PGLm+J9MngUtypo/g==\n",
|
"encrypted_data": "jDIOjlBzTkBUzpj243T6KnBuH0qwyW7BUFMcqllljFSzxs7K8wYJOUreNbOP\ny8OpDWAuO0H4O4LuFMJXeM8=\n",
|
||||||
"iv": "WRhBJGiuScYYsUsoT5j/UA==\n",
|
"iv": "PzvZr37EkJqz6JtM\n",
|
||||||
"version": 1,
|
"auth_tag": "e3XW8oHVgmYibv/IBzj0yA==\n",
|
||||||
"cipher": "aes-256-cbc"
|
"version": 3,
|
||||||
|
"cipher": "aes-256-gcm"
|
||||||
|
},
|
||||||
|
"s3_endpoint": {
|
||||||
|
"encrypted_data": "ErJIEChxrreW7WKEwRtuP2MyYlsZRtqLdGa/x5QY58qgO036FgR3Hs2Z3yce\n",
|
||||||
|
"iv": "HOSAOgUjO7XGwk50\n",
|
||||||
|
"auth_tag": "XE1bwMIXHHE72V9K2KOLnw==\n",
|
||||||
|
"version": 3,
|
||||||
|
"cipher": "aes-256-gcm"
|
||||||
},
|
},
|
||||||
"s3_region": {
|
"s3_region": {
|
||||||
"encrypted_data": "2ZGxu0tVzKNfx3K1Wleg0SAwGaPkHCi/XfKpJ+J7q40=\n",
|
"encrypted_data": "8cNSaYu7HH95ftG66lFdUIPZD7soz907CPA=\n",
|
||||||
"iv": "CNTZW2SEIgfw+IyzGI3TzQ==\n",
|
"iv": "pU21ulF75y/SIs3x\n",
|
||||||
"version": 1,
|
"auth_tag": "7WQQCbSbB2GybjY+C+5IvQ==\n",
|
||||||
"cipher": "aes-256-cbc"
|
"version": 3,
|
||||||
|
"cipher": "aes-256-gcm"
|
||||||
},
|
},
|
||||||
"encryption_password": {
|
"encryption_password": {
|
||||||
"encrypted_data": "tsBWKBwhQFfEAM0EWMPtljSbqU1c5mOJXPjYJjNT5RUFhPlqa7gsE8aJbs+D\nSPKjAQ62j+iHeqCk9mE9CCkgBA==\n",
|
"encrypted_data": "l23CiIO2s1fIRn0NdoWZ+wK+Zhx3hCYDHf4ypjqMRekZ7xqafvXHHuogD5aj\npxYUKloH\n",
|
||||||
"iv": "uq5YAXuq2ynRLv9EIWoCFA==\n",
|
"iv": "Dzx83eP9L7Jqqidh\n",
|
||||||
"version": 1,
|
"auth_tag": "UVn5XA5Tgsikc1GdOt1MUQ==\n",
|
||||||
"cipher": "aes-256-cbc"
|
"version": 3,
|
||||||
|
"cipher": "aes-256-gcm"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,30 @@
|
|||||||
{
|
{
|
||||||
"id": "dirsrv",
|
"id": "dirsrv",
|
||||||
|
"admin_dn": {
|
||||||
|
"encrypted_data": "zRtz6Scb9WtUXGyjc0xyvsre0YvqupuaFz+RPApj7DEQTmYyZPVb\n",
|
||||||
|
"iv": "xfIXMhEBHBWqa4Dz\n",
|
||||||
|
"auth_tag": "BcA32u1njcnCZ+yrBGSceQ==\n",
|
||||||
|
"version": 3,
|
||||||
|
"cipher": "aes-256-gcm"
|
||||||
|
},
|
||||||
"admin_password": {
|
"admin_password": {
|
||||||
"encrypted_data": "i71l5E129mXCcDAyME8sNMUkYUlQMgt7Eh6noyFcLNgbaMo=\n",
|
"encrypted_data": "7JpXl3JZDqKWDfYt/wuNbkbob+oRuONhkuAlpqUCCEIn+tY=\n",
|
||||||
"iv": "KNW2B8tpX7ywZwbg\n",
|
"iv": "Lcwc4NDzrfcBaIKQ\n",
|
||||||
"auth_tag": "GawQ+FSlA5v5YVyryeUxng==\n",
|
"auth_tag": "rrePS3Bhdnwbr2d/o8vMhg==\n",
|
||||||
|
"version": 3,
|
||||||
|
"cipher": "aes-256-gcm"
|
||||||
|
},
|
||||||
|
"service_dn": {
|
||||||
|
"encrypted_data": "sqRFiZreLeTPQljSfhAuV3DmsPxSC8tzWjCdu+WSSbO67sBQA+xhmGtzBhBD\nDZPGJw+jtAxzuVvPdAjxgAVgxXO6C6WEo87L1tdJewE=\n",
|
||||||
|
"iv": "GUEGtyRJXrPhWcUs\n",
|
||||||
|
"auth_tag": "2USsrx//3V7RCyumGCbMkg==\n",
|
||||||
|
"version": 3,
|
||||||
|
"cipher": "aes-256-gcm"
|
||||||
|
},
|
||||||
|
"service_password": {
|
||||||
|
"encrypted_data": "f2wi8B8SEt6p5G0TF3dZ72j0vMFlvwcP1suxYnshBA==\n",
|
||||||
|
"iv": "rOnUoxbnkaJtodM+\n",
|
||||||
|
"auth_tag": "dVLCtBVMjxLfW2D8XjJBdQ==\n",
|
||||||
"version": 3,
|
"version": 3,
|
||||||
"cipher": "aes-256-gcm"
|
"cipher": "aes-256-gcm"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,8 @@
|
|||||||
"public_key": "024cd3be18617f39cf645851e3ba63f51fc13f0bb09e3bb25e6fd4de556486d946"
|
"public_key": "024cd3be18617f39cf645851e3ba63f51fc13f0bb09e3bb25e6fd4de556486d946"
|
||||||
},
|
},
|
||||||
"nostr": {
|
"nostr": {
|
||||||
"public_key": "b3e1b7c1660b7db0ecb93ec55c09e67961171a5c4e9e2602f1b47477ea61c50a"
|
"public_key": "b3e1b7c1660b7db0ecb93ec55c09e67961171a5c4e9e2602f1b47477ea61c50a",
|
||||||
|
"relay_url": "wss://nostr.kosmos.org"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discourse": {
|
"discourse": {
|
||||||
@@ -101,6 +102,20 @@
|
|||||||
},
|
},
|
||||||
"sentry": {
|
"sentry": {
|
||||||
"allowed_ips": "10.1.1.0/24"
|
"allowed_ips": "10.1.1.0/24"
|
||||||
|
},
|
||||||
|
"strfry": {
|
||||||
|
"domain": "nostr.kosmos.org",
|
||||||
|
"real_ip_header": "x-real-ip",
|
||||||
|
"policy_path": "/opt/strfry/strfry-policy.ts",
|
||||||
|
"whitelist_pubkeys": [
|
||||||
|
"b3e1b7c1660b7db0ecb93ec55c09e67961171a5c4e9e2602f1b47477ea61c50a"
|
||||||
|
],
|
||||||
|
"info": {
|
||||||
|
"name": "Kosmos Relay",
|
||||||
|
"description": "Members-only nostr relay for kosmos.org users",
|
||||||
|
"pubkey": "1f79058c77a224e5be226c8f024cacdad4d741855d75ed9f11473ba8eb86e1cb",
|
||||||
|
"contact": "ops@kosmos.org"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
"kvm_guest",
|
"kvm_guest",
|
||||||
"sentry_client",
|
"sentry_client",
|
||||||
"bitcoind",
|
"bitcoind",
|
||||||
"cln",
|
|
||||||
"lnd",
|
"lnd",
|
||||||
"lndhub",
|
"lndhub",
|
||||||
"postgresql_client",
|
"postgresql_client",
|
||||||
@@ -30,10 +29,8 @@
|
|||||||
"tor-full",
|
"tor-full",
|
||||||
"tor-full::default",
|
"tor-full::default",
|
||||||
"kosmos-bitcoin::bitcoind",
|
"kosmos-bitcoin::bitcoind",
|
||||||
"kosmos-bitcoin::c-lightning",
|
|
||||||
"kosmos-bitcoin::lnd",
|
"kosmos-bitcoin::lnd",
|
||||||
"kosmos-bitcoin::lnd-scb-s3",
|
"kosmos-bitcoin::lnd-scb-s3",
|
||||||
"kosmos-bitcoin::boltz",
|
|
||||||
"kosmos-bitcoin::rtl",
|
"kosmos-bitcoin::rtl",
|
||||||
"kosmos-bitcoin::peerswap-lnd",
|
"kosmos-bitcoin::peerswap-lnd",
|
||||||
"kosmos_postgresql::hostsfile",
|
"kosmos_postgresql::hostsfile",
|
||||||
@@ -103,7 +100,6 @@
|
|||||||
"role[sentry_client]",
|
"role[sentry_client]",
|
||||||
"recipe[tor-full]",
|
"recipe[tor-full]",
|
||||||
"role[bitcoind]",
|
"role[bitcoind]",
|
||||||
"role[cln]",
|
|
||||||
"role[lnd]",
|
"role[lnd]",
|
||||||
"role[lndhub]",
|
"role[lndhub]",
|
||||||
"role[btcpay]"
|
"role[btcpay]"
|
||||||
|
|||||||
@@ -54,8 +54,10 @@
|
|||||||
"kosmos_liquor-cabinet::nginx",
|
"kosmos_liquor-cabinet::nginx",
|
||||||
"kosmos_rsk::nginx_testnet",
|
"kosmos_rsk::nginx_testnet",
|
||||||
"kosmos_rsk::nginx_mainnet",
|
"kosmos_rsk::nginx_mainnet",
|
||||||
|
"kosmos_strfry::nginx",
|
||||||
"kosmos_website",
|
"kosmos_website",
|
||||||
"kosmos_website::default",
|
"kosmos_website::default",
|
||||||
|
"kosmos_website::redirects",
|
||||||
"kosmos-akkounts::nginx",
|
"kosmos-akkounts::nginx",
|
||||||
"kosmos-akkounts::nginx_api",
|
"kosmos-akkounts::nginx_api",
|
||||||
"kosmos-bitcoin::nginx_lndhub",
|
"kosmos-bitcoin::nginx_lndhub",
|
||||||
|
|||||||
@@ -48,8 +48,10 @@
|
|||||||
"kosmos_liquor-cabinet::nginx",
|
"kosmos_liquor-cabinet::nginx",
|
||||||
"kosmos_rsk::nginx_testnet",
|
"kosmos_rsk::nginx_testnet",
|
||||||
"kosmos_rsk::nginx_mainnet",
|
"kosmos_rsk::nginx_mainnet",
|
||||||
|
"kosmos_strfry::nginx",
|
||||||
"kosmos_website",
|
"kosmos_website",
|
||||||
"kosmos_website::default",
|
"kosmos_website::default",
|
||||||
|
"kosmos_website::redirects",
|
||||||
"kosmos-akkounts::nginx",
|
"kosmos-akkounts::nginx",
|
||||||
"kosmos-akkounts::nginx_api",
|
"kosmos-akkounts::nginx_api",
|
||||||
"kosmos-bitcoin::nginx_lndhub",
|
"kosmos-bitcoin::nginx_lndhub",
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
"kosmos_postgresql::hostsfile",
|
"kosmos_postgresql::hostsfile",
|
||||||
"kosmos_gitea",
|
"kosmos_gitea",
|
||||||
"kosmos_gitea::default",
|
"kosmos_gitea::default",
|
||||||
|
"kosmos_gitea::backup",
|
||||||
"kosmos_gitea::act_runner",
|
"kosmos_gitea::act_runner",
|
||||||
"apt::default",
|
"apt::default",
|
||||||
"timezone_iii::default",
|
"timezone_iii::default",
|
||||||
@@ -47,7 +48,9 @@
|
|||||||
"postfix::_attributes",
|
"postfix::_attributes",
|
||||||
"postfix::sasl_auth",
|
"postfix::sasl_auth",
|
||||||
"hostname::default",
|
"hostname::default",
|
||||||
"firewall::default"
|
"firewall::default",
|
||||||
|
"backup::default",
|
||||||
|
"logrotate::default"
|
||||||
],
|
],
|
||||||
"platform": "ubuntu",
|
"platform": "ubuntu",
|
||||||
"platform_version": "20.04",
|
"platform_version": "20.04",
|
||||||
|
|||||||
66
nodes/strfry-1.json
Normal file
66
nodes/strfry-1.json
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
{
|
||||||
|
"name": "strfry-1",
|
||||||
|
"chef_environment": "production",
|
||||||
|
"normal": {
|
||||||
|
"knife_zero": {
|
||||||
|
"host": "10.1.1.164"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"automatic": {
|
||||||
|
"fqdn": "strfry-1",
|
||||||
|
"os": "linux",
|
||||||
|
"os_version": "5.15.0-1060-kvm",
|
||||||
|
"hostname": "strfry-1",
|
||||||
|
"ipaddress": "192.168.122.54",
|
||||||
|
"roles": [
|
||||||
|
"base",
|
||||||
|
"kvm_guest",
|
||||||
|
"strfry",
|
||||||
|
"ldap_client"
|
||||||
|
],
|
||||||
|
"recipes": [
|
||||||
|
"kosmos-base",
|
||||||
|
"kosmos-base::default",
|
||||||
|
"kosmos_kvm::guest",
|
||||||
|
"kosmos-dirsrv::hostsfile",
|
||||||
|
"strfry",
|
||||||
|
"strfry::default",
|
||||||
|
"kosmos_strfry::policies",
|
||||||
|
"kosmos_strfry::firewall",
|
||||||
|
"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",
|
||||||
|
"deno::default"
|
||||||
|
],
|
||||||
|
"platform": "ubuntu",
|
||||||
|
"platform_version": "22.04",
|
||||||
|
"cloud": null,
|
||||||
|
"chef_packages": {
|
||||||
|
"chef": {
|
||||||
|
"version": "18.4.12",
|
||||||
|
"chef_root": "/opt/chef/embedded/lib/ruby/gems/3.1.0/gems/chef-18.4.12/lib",
|
||||||
|
"chef_effortless": null
|
||||||
|
},
|
||||||
|
"ohai": {
|
||||||
|
"version": "18.1.11",
|
||||||
|
"ohai_root": "/opt/chef/embedded/lib/ruby/gems/3.1.0/gems/ohai-18.1.11/lib/ohai"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"run_list": [
|
||||||
|
"role[base]",
|
||||||
|
"role[kvm_guest]",
|
||||||
|
"role[strfry]"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -8,16 +8,19 @@
|
|||||||
"automatic": {
|
"automatic": {
|
||||||
"fqdn": "wiki-1",
|
"fqdn": "wiki-1",
|
||||||
"os": "linux",
|
"os": "linux",
|
||||||
"os_version": "5.4.0-91-generic",
|
"os_version": "5.4.0-167-generic",
|
||||||
"hostname": "wiki-1",
|
"hostname": "wiki-1",
|
||||||
"ipaddress": "192.168.122.26",
|
"ipaddress": "192.168.122.26",
|
||||||
"roles": [
|
"roles": [
|
||||||
"kvm_guest"
|
"base",
|
||||||
|
"kvm_guest",
|
||||||
|
"ldap_client"
|
||||||
],
|
],
|
||||||
"recipes": [
|
"recipes": [
|
||||||
"kosmos-base",
|
"kosmos-base",
|
||||||
"kosmos-base::default",
|
"kosmos-base::default",
|
||||||
"kosmos_kvm::guest",
|
"kosmos_kvm::guest",
|
||||||
|
"kosmos-dirsrv::hostsfile",
|
||||||
"kosmos-mediawiki",
|
"kosmos-mediawiki",
|
||||||
"kosmos-mediawiki::default",
|
"kosmos-mediawiki::default",
|
||||||
"apt::default",
|
"apt::default",
|
||||||
@@ -41,7 +44,6 @@
|
|||||||
"php::package",
|
"php::package",
|
||||||
"php::ini",
|
"php::ini",
|
||||||
"composer::global_configs",
|
"composer::global_configs",
|
||||||
"kosmos-dirsrv::hostsfile",
|
|
||||||
"mediawiki::default",
|
"mediawiki::default",
|
||||||
"mediawiki::database",
|
"mediawiki::database",
|
||||||
"kosmos-nginx::default",
|
"kosmos-nginx::default",
|
||||||
@@ -79,4 +81,4 @@
|
|||||||
"role[ldap_client]",
|
"role[ldap_client]",
|
||||||
"recipe[kosmos-mediawiki]"
|
"recipe[kosmos-mediawiki]"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -3,4 +3,5 @@ name "gitea"
|
|||||||
run_list %w(
|
run_list %w(
|
||||||
role[postgresql_client]
|
role[postgresql_client]
|
||||||
kosmos_gitea::default
|
kosmos_gitea::default
|
||||||
|
kosmos_gitea::backup
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ name "lnd"
|
|||||||
run_list %w(
|
run_list %w(
|
||||||
kosmos-bitcoin::lnd
|
kosmos-bitcoin::lnd
|
||||||
kosmos-bitcoin::lnd-scb-s3
|
kosmos-bitcoin::lnd-scb-s3
|
||||||
kosmos-bitcoin::boltz
|
|
||||||
kosmos-bitcoin::rtl
|
kosmos-bitcoin::rtl
|
||||||
kosmos-bitcoin::peerswap-lnd
|
kosmos-bitcoin::peerswap-lnd
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -28,7 +28,9 @@ production_run_list = %w(
|
|||||||
kosmos_liquor-cabinet::nginx
|
kosmos_liquor-cabinet::nginx
|
||||||
kosmos_rsk::nginx_testnet
|
kosmos_rsk::nginx_testnet
|
||||||
kosmos_rsk::nginx_mainnet
|
kosmos_rsk::nginx_mainnet
|
||||||
|
kosmos_strfry::nginx
|
||||||
kosmos_website::default
|
kosmos_website::default
|
||||||
|
kosmos_website::redirects
|
||||||
kosmos-akkounts::nginx
|
kosmos-akkounts::nginx
|
||||||
kosmos-akkounts::nginx_api
|
kosmos-akkounts::nginx_api
|
||||||
kosmos-bitcoin::nginx_lndhub
|
kosmos-bitcoin::nginx_lndhub
|
||||||
|
|||||||
8
roles/strfry.rb
Normal file
8
roles/strfry.rb
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
name "strfry"
|
||||||
|
|
||||||
|
run_list %w(
|
||||||
|
role[ldap_client]
|
||||||
|
strfry::default
|
||||||
|
kosmos_strfry::policies
|
||||||
|
kosmos_strfry::firewall
|
||||||
|
)
|
||||||
@@ -42,5 +42,5 @@ default['backup']['orbit']['keep'] = 10
|
|||||||
default['backup']['cron']['hour'] = "05"
|
default['backup']['cron']['hour'] = "05"
|
||||||
default['backup']['cron']['minute'] = "7"
|
default['backup']['cron']['minute'] = "7"
|
||||||
|
|
||||||
default['backup']['s3']['keep'] = 15
|
default['backup']['s3']['keep'] = 10
|
||||||
default['backup']['s3']['bucket'] = "kosmos-dev-backups"
|
default['backup']['s3']['bucket'] = "kosmos-backups"
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ template "#{backup_dir}/config.rb" do
|
|||||||
sensitive true
|
sensitive true
|
||||||
variables s3_access_key_id: backup_data["s3_access_key_id"],
|
variables s3_access_key_id: backup_data["s3_access_key_id"],
|
||||||
s3_secret_access_key: backup_data["s3_secret_access_key"],
|
s3_secret_access_key: backup_data["s3_secret_access_key"],
|
||||||
|
s3_endpoint: backup_data["s3_endpoint"],
|
||||||
s3_region: backup_data["s3_region"],
|
s3_region: backup_data["s3_region"],
|
||||||
encryption_password: backup_data["encryption_password"],
|
encryption_password: backup_data["encryption_password"],
|
||||||
mail_from: "backups@kosmos.org",
|
mail_from: "backups@kosmos.org",
|
||||||
|
|||||||
@@ -23,6 +23,10 @@ Storage::S3.defaults do |s3|
|
|||||||
s3.secret_access_key = "<%= @s3_secret_access_key %>"
|
s3.secret_access_key = "<%= @s3_secret_access_key %>"
|
||||||
s3.region = "<%= @s3_region %>"
|
s3.region = "<%= @s3_region %>"
|
||||||
s3.bucket = "<%= node['backup']['s3']['bucket'] %>"
|
s3.bucket = "<%= node['backup']['s3']['bucket'] %>"
|
||||||
|
s3.fog_options = {
|
||||||
|
endpoint: "<%= @s3_endpoint %>",
|
||||||
|
aws_signature_version: 2
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
Encryptor::OpenSSL.defaults do |encryption|
|
Encryptor::OpenSSL.defaults do |encryption|
|
||||||
@@ -88,7 +92,6 @@ end
|
|||||||
|
|
||||||
preconfigure 'KosmosBackup' do
|
preconfigure 'KosmosBackup' do
|
||||||
split_into_chunks_of 250 # megabytes
|
split_into_chunks_of 250 # megabytes
|
||||||
store_with S3
|
|
||||||
compress_with Bzip2
|
compress_with Bzip2
|
||||||
encrypt_with OpenSSL
|
encrypt_with OpenSSL
|
||||||
notify_by Mail do |mail|
|
notify_by Mail do |mail|
|
||||||
|
|||||||
1
site-cookbooks/deno
Submodule
1
site-cookbooks/deno
Submodule
Submodule site-cookbooks/deno added at 617f7959ab
@@ -22,6 +22,7 @@ node.default['akkounts']['lndhub']['public_key'] = nil
|
|||||||
node.default['akkounts']['lndhub']['postgres_db'] = 'lndhub'
|
node.default['akkounts']['lndhub']['postgres_db'] = 'lndhub'
|
||||||
|
|
||||||
node.default['akkounts']['nostr']['public_key'] = nil
|
node.default['akkounts']['nostr']['public_key'] = nil
|
||||||
|
node.default['akkounts']['nostr']['relay_url'] = nil
|
||||||
|
|
||||||
node.default['akkounts']['s3_enabled'] = true
|
node.default['akkounts']['s3_enabled'] = true
|
||||||
node.default['akkounts']['s3_endpoint'] = "https://s3.kosmos.org"
|
node.default['akkounts']['s3_endpoint'] = "https://s3.kosmos.org"
|
||||||
|
|||||||
@@ -163,6 +163,7 @@ env[:mediawiki_public_url] = node['mediawiki']['url']
|
|||||||
|
|
||||||
env[:nostr_private_key] = credentials['nostr_private_key']
|
env[:nostr_private_key] = credentials['nostr_private_key']
|
||||||
env[:nostr_public_key] = node['akkounts']['nostr']['public_key']
|
env[:nostr_public_key] = node['akkounts']['nostr']['public_key']
|
||||||
|
env[:nostr_relay_url] = node['akkounts']['nostr']['relay_url']
|
||||||
|
|
||||||
#
|
#
|
||||||
# remoteStorage / Liquor Cabinet
|
# remoteStorage / Liquor Cabinet
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
node.default['bitcoin']['version'] = '26.0'
|
node.default['bitcoin']['version'] = '28.0'
|
||||||
node.default['bitcoin']['checksum'] = 'ab1d99276e28db62d1d9f3901e85ac358d7f1ebcb942d348a9c4e46f0fcdc0a1'
|
node.default['bitcoin']['checksum'] = '700ae2d1e204602eb07f2779a6e6669893bc96c0dca290593f80ff8e102ff37f'
|
||||||
node.default['bitcoin']['username'] = 'satoshi'
|
node.default['bitcoin']['username'] = 'satoshi'
|
||||||
node.default['bitcoin']['usergroup'] = 'bitcoin'
|
node.default['bitcoin']['usergroup'] = 'bitcoin'
|
||||||
node.default['bitcoin']['network'] = 'mainnet'
|
node.default['bitcoin']['network'] = 'mainnet'
|
||||||
@@ -24,7 +24,8 @@ node.default['bitcoin']['conf'] = {
|
|||||||
rpcbind: "127.0.0.1:8332",
|
rpcbind: "127.0.0.1:8332",
|
||||||
gen: 0,
|
gen: 0,
|
||||||
zmqpubrawblock: 'tcp://127.0.0.1:8337',
|
zmqpubrawblock: 'tcp://127.0.0.1:8337',
|
||||||
zmqpubrawtx: 'tcp://127.0.0.1:8338'
|
zmqpubrawtx: 'tcp://127.0.0.1:8338',
|
||||||
|
deprecatedrpc: 'warnings' # TODO remove when upgrading to LND 0.18.4
|
||||||
}
|
}
|
||||||
|
|
||||||
# Also enables Tor for LND
|
# Also enables Tor for LND
|
||||||
@@ -40,7 +41,7 @@ node.default['c-lightning']['log_level'] = 'info'
|
|||||||
node.default['c-lightning']['public_ip'] = '148.251.237.73'
|
node.default['c-lightning']['public_ip'] = '148.251.237.73'
|
||||||
|
|
||||||
node.default['lnd']['repo'] = 'https://github.com/lightningnetwork/lnd'
|
node.default['lnd']['repo'] = 'https://github.com/lightningnetwork/lnd'
|
||||||
node.default['lnd']['revision'] = 'v0.17.3-beta'
|
node.default['lnd']['revision'] = 'v0.18.3-beta'
|
||||||
node.default['lnd']['source_dir'] = '/opt/lnd'
|
node.default['lnd']['source_dir'] = '/opt/lnd'
|
||||||
node.default['lnd']['lnd_dir'] = "/home/#{node['bitcoin']['username']}/.lnd"
|
node.default['lnd']['lnd_dir'] = "/home/#{node['bitcoin']['username']}/.lnd"
|
||||||
node.default['lnd']['alias'] = 'ln2.kosmos.org'
|
node.default['lnd']['alias'] = 'ln2.kosmos.org'
|
||||||
@@ -58,19 +59,8 @@ node.default['lnd']['tor'] = {
|
|||||||
'skip-proxy-for-clearnet-targets' => 'true'
|
'skip-proxy-for-clearnet-targets' => 'true'
|
||||||
}
|
}
|
||||||
|
|
||||||
node.default['boltz']['repo'] = 'https://github.com/BoltzExchange/boltz-lnd.git'
|
|
||||||
node.default['boltz']['revision'] = 'v1.2.7'
|
|
||||||
node.default['boltz']['source_dir'] = '/opt/boltz'
|
|
||||||
node.default['boltz']['boltz_dir'] = "/home/#{node['bitcoin']['username']}/.boltz-lnd"
|
|
||||||
node.default['boltz']['grpc_host'] = '127.0.0.1'
|
|
||||||
node.default['boltz']['grpc_port'] = '9002'
|
|
||||||
node.default['boltz']['rest_disabled'] = 'false'
|
|
||||||
node.default['boltz']['rest_host'] = '127.0.0.1'
|
|
||||||
node.default['boltz']['rest_port'] = '9003'
|
|
||||||
node.default['boltz']['no_macaroons'] = 'false'
|
|
||||||
|
|
||||||
node.default['rtl']['repo'] = 'https://github.com/Ride-The-Lightning/RTL.git'
|
node.default['rtl']['repo'] = 'https://github.com/Ride-The-Lightning/RTL.git'
|
||||||
node.default['rtl']['revision'] = 'v0.15.0'
|
node.default['rtl']['revision'] = 'v0.15.2'
|
||||||
node.default['rtl']['host'] = '10.1.1.163'
|
node.default['rtl']['host'] = '10.1.1.163'
|
||||||
node.default['rtl']['port'] = '3000'
|
node.default['rtl']['port'] = '3000'
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ credentials = Chef::EncryptedDataBagItem.load('credentials', 'backup')
|
|||||||
|
|
||||||
file "/root/.aws/config" do
|
file "/root/.aws/config" do
|
||||||
mode "600"
|
mode "600"
|
||||||
|
sensitive true
|
||||||
content lazy { <<-EOF
|
content lazy { <<-EOF
|
||||||
[default]
|
[default]
|
||||||
region = #{credentials["s3_region"]}
|
region = #{credentials["s3_region"]}
|
||||||
|
|||||||
@@ -12,8 +12,15 @@ if node["bitcoin"]["blocksdir_mount_type"]
|
|||||||
include_recipe "kosmos-bitcoin::blocksdir-mount"
|
include_recipe "kosmos-bitcoin::blocksdir-mount"
|
||||||
end
|
end
|
||||||
|
|
||||||
%w{ libtool autotools-dev make automake cmake curl g++-multilib libtool
|
apt_repository "ubuntu-toolchain-r" do
|
||||||
binutils-gold bsdmainutils pkg-config python3 patch }.each do |pkg|
|
# provides g++-13, needed for better c++-20 support
|
||||||
|
uri "ppa:ubuntu-toolchain-r/test"
|
||||||
|
end
|
||||||
|
|
||||||
|
%w{
|
||||||
|
gcc-13 g++-13 libtool autotools-dev make automake cmake curl bison
|
||||||
|
binutils-gold pkg-config python3 patch
|
||||||
|
}.each do |pkg|
|
||||||
apt_package pkg
|
apt_package pkg
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -26,20 +33,21 @@ end
|
|||||||
|
|
||||||
execute "compile_bitcoin-core_dependencies" do
|
execute "compile_bitcoin-core_dependencies" do
|
||||||
cwd "/usr/local/bitcoind/depends"
|
cwd "/usr/local/bitcoind/depends"
|
||||||
command "make NO_QT=1"
|
environment ({'CC' => 'gcc-13', 'CXX' => 'g++-13', 'NO_QT' => '1'})
|
||||||
|
command "make -j 2"
|
||||||
action :nothing
|
action :nothing
|
||||||
notifies :run, 'bash[compile_bitcoin-core]', :immediately
|
notifies :run, 'bash[compile_bitcoin-core]', :immediately
|
||||||
end
|
end
|
||||||
|
|
||||||
bash "compile_bitcoin-core" do
|
bash "compile_bitcoin-core" do
|
||||||
cwd "/usr/local/bitcoind"
|
cwd "/usr/local/bitcoind"
|
||||||
|
environment ({'CC' => 'gcc-13', 'CXX' => 'g++-13', 'NO_QT' => '1'})
|
||||||
code <<-EOH
|
code <<-EOH
|
||||||
./autogen.sh
|
./autogen.sh
|
||||||
./configure --prefix=$PWD/depends/x86_64-pc-linux-gnu
|
./configure --prefix=$PWD/depends/x86_64-pc-linux-gnu
|
||||||
make
|
make
|
||||||
EOH
|
EOH
|
||||||
action :nothing
|
action :nothing
|
||||||
notifies :restart, "systemd_unit[bitcoind.service]", :delayed
|
|
||||||
end
|
end
|
||||||
|
|
||||||
link "/usr/local/bin/bitcoind" do
|
link "/usr/local/bin/bitcoind" do
|
||||||
|
|||||||
@@ -1,87 +0,0 @@
|
|||||||
#
|
|
||||||
# Cookbook:: kosmos-bitcoin
|
|
||||||
# Recipe:: boltz
|
|
||||||
#
|
|
||||||
|
|
||||||
include_recipe "git"
|
|
||||||
include_recipe "kosmos-bitcoin::golang"
|
|
||||||
|
|
||||||
git node['boltz']['source_dir'] do
|
|
||||||
repository node['boltz']['repo']
|
|
||||||
revision node['boltz']['revision']
|
|
||||||
action :sync
|
|
||||||
notifies :run, 'bash[compile_and_install_boltz]', :immediately
|
|
||||||
end
|
|
||||||
|
|
||||||
bash "compile_and_install_boltz" do
|
|
||||||
cwd node['boltz']['source_dir']
|
|
||||||
code <<-EOH
|
|
||||||
go mod vendor && \
|
|
||||||
make build && \
|
|
||||||
make install
|
|
||||||
EOH
|
|
||||||
action :nothing
|
|
||||||
notifies :restart, "systemd_unit[boltzd.service]", :delayed
|
|
||||||
end
|
|
||||||
|
|
||||||
bitcoin_user = node['bitcoin']['username']
|
|
||||||
bitcoin_group = node['bitcoin']['usergroup']
|
|
||||||
boltz_dir = node['boltz']['boltz_dir']
|
|
||||||
lnd_dir = node['lnd']['lnd_dir']
|
|
||||||
|
|
||||||
directory boltz_dir do
|
|
||||||
owner bitcoin_user
|
|
||||||
group bitcoin_group
|
|
||||||
mode '0750'
|
|
||||||
action :create
|
|
||||||
end
|
|
||||||
|
|
||||||
template "#{boltz_dir}/boltz.toml" do
|
|
||||||
source "boltz.toml.erb"
|
|
||||||
owner bitcoin_user
|
|
||||||
group bitcoin_group
|
|
||||||
mode '0640'
|
|
||||||
variables lnd_grpc_host: '127.0.0.1',
|
|
||||||
lnd_grpc_port: '10009',
|
|
||||||
lnd_macaroon_path: "#{lnd_dir}/data/chain/bitcoin/mainnet/admin.macaroon",
|
|
||||||
lnd_tlscert_path: "#{lnd_dir}/tls.cert",
|
|
||||||
boltz_config: node['boltz']
|
|
||||||
notifies :restart, "systemd_unit[boltzd.service]", :delayed
|
|
||||||
end
|
|
||||||
|
|
||||||
systemd_unit 'boltzd.service' do
|
|
||||||
content({
|
|
||||||
Unit: {
|
|
||||||
Description: 'Boltz Daemon',
|
|
||||||
Documentation: ['https://lnd.docs.boltz.exchange'],
|
|
||||||
Requires: 'lnd.service',
|
|
||||||
After: 'lnd.service'
|
|
||||||
},
|
|
||||||
Service: {
|
|
||||||
User: bitcoin_user,
|
|
||||||
Group: bitcoin_group,
|
|
||||||
Type: 'simple',
|
|
||||||
ExecStart: "/opt/boltz/boltzd",
|
|
||||||
Restart: 'always',
|
|
||||||
RestartSec: '30',
|
|
||||||
TimeoutSec: '240',
|
|
||||||
LimitNOFILE: '128000',
|
|
||||||
PrivateTmp: true,
|
|
||||||
ProtectSystem: 'full',
|
|
||||||
NoNewPrivileges: true,
|
|
||||||
PrivateDevices: true,
|
|
||||||
MemoryDenyWriteExecute: true
|
|
||||||
},
|
|
||||||
Install: {
|
|
||||||
WantedBy: 'multi-user.target'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
verify false
|
|
||||||
triggers_reload true
|
|
||||||
action [:create, :enable, :start]
|
|
||||||
end
|
|
||||||
|
|
||||||
unless node.chef_environment == 'development'
|
|
||||||
node.override['backup']['archives']['boltz'] = [node['boltz']['boltz_dir']]
|
|
||||||
include_recipe 'backup'
|
|
||||||
end
|
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
# Internal recipe for managing the Go installation in one place
|
# Internal recipe for managing the Go installation in one place
|
||||||
#
|
#
|
||||||
|
|
||||||
node.override['golang']['version'] = "1.20.3"
|
node.override['golang']['version'] = "1.23.1"
|
||||||
include_recipe "golang"
|
include_recipe "golang"
|
||||||
|
|
||||||
link '/usr/local/bin/go' do
|
link '/usr/local/bin/go' do
|
||||||
|
|||||||
@@ -10,12 +10,14 @@ include_recipe "kosmos-bitcoin::aws-client"
|
|||||||
package "inotify-tools"
|
package "inotify-tools"
|
||||||
|
|
||||||
backup_script_path = "/opt/lnd-channel-backup-s3.sh"
|
backup_script_path = "/opt/lnd-channel-backup-s3.sh"
|
||||||
|
backup_credentials = Chef::EncryptedDataBagItem.load('credentials', 'backup')
|
||||||
|
|
||||||
template backup_script_path do
|
template backup_script_path do
|
||||||
source "lnd-channel-backup-s3.sh.erb"
|
source "lnd-channel-backup-s3.sh.erb"
|
||||||
mode '0740'
|
mode '0740'
|
||||||
variables lnd_dir: node['lnd']['lnd_dir'],
|
variables lnd_dir: node['lnd']['lnd_dir'],
|
||||||
bitcoin_network: node['bitcoin']['network'],
|
bitcoin_network: node['bitcoin']['network'],
|
||||||
|
s3_endpoint: backup_credentials['s3_endpoint'],
|
||||||
s3_bucket: node['backup']['s3']['bucket'],
|
s3_bucket: node['backup']['s3']['bucket'],
|
||||||
s3_scb_dir: "#{node['name']}/lnd/#{node['bitcoin']['network']}"
|
s3_scb_dir: "#{node['name']}/lnd/#{node['bitcoin']['network']}"
|
||||||
notifies :restart, "systemd_unit[lnd-channel-backup.service]", :delayed
|
notifies :restart, "systemd_unit[lnd-channel-backup.service]", :delayed
|
||||||
|
|||||||
@@ -46,24 +46,22 @@ rtl_config = {
|
|||||||
multiPassHashed: credentials["multiPassHashed"]
|
multiPassHashed: credentials["multiPassHashed"]
|
||||||
}
|
}
|
||||||
|
|
||||||
if node['boltz']
|
|
||||||
# TODO adapt for multi-node usage
|
|
||||||
rtl_config[:nodes][0][:Authentication][:boltzMacaroonPath] = "#{node['boltz']['boltz_dir']}/macaroons"
|
|
||||||
rtl_config[:nodes][0][:Settings][:boltzServerUrl] = "https://#{node['boltz']['rest_host']}:#{node['boltz']['rest_port']}"
|
|
||||||
end
|
|
||||||
|
|
||||||
git rtl_dir do
|
git rtl_dir do
|
||||||
user bitcoin_user
|
user bitcoin_user
|
||||||
group bitcoin_group
|
group bitcoin_group
|
||||||
repository node['rtl']['repo']
|
repository node['rtl']['repo']
|
||||||
revision node['rtl']['revision']
|
revision node['rtl']['revision']
|
||||||
|
notifies :run, "execute[npm_install]", :immediately
|
||||||
notifies :restart, "systemd_unit[#{app_name}.service]", :delayed
|
notifies :restart, "systemd_unit[#{app_name}.service]", :delayed
|
||||||
end
|
end
|
||||||
|
|
||||||
execute "npm install" do
|
execute "npm_install" do
|
||||||
cwd rtl_dir
|
cwd rtl_dir
|
||||||
environment "HOME" => rtl_dir
|
environment "HOME" => rtl_dir
|
||||||
user bitcoin_user
|
user bitcoin_user
|
||||||
|
# TODO remove --force when upstream dependency issues have been resolved
|
||||||
|
command "npm install --force"
|
||||||
|
action :nothing
|
||||||
end
|
end
|
||||||
|
|
||||||
file "#{rtl_dir}/RTL-Config.json" do
|
file "#{rtl_dir}/RTL-Config.json" do
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
[LND]
|
|
||||||
# Host of the gRPC interface of LND
|
|
||||||
host = "<%= @lnd_grpc_host %>"
|
|
||||||
|
|
||||||
# Port of the gRPC interface of LND
|
|
||||||
port = <%= @lnd_grpc_port %>
|
|
||||||
|
|
||||||
# Path to a macaroon file of LND
|
|
||||||
# The daemon needs to have permission to read various endpoints, generate addresses and pay invoices
|
|
||||||
macaroon = "<%= @lnd_macaroon_path %>"
|
|
||||||
|
|
||||||
# Path to the TLS certificate of LND
|
|
||||||
certificate = "<%= @lnd_tlscert_path %>"
|
|
||||||
|
|
||||||
[RPC]
|
|
||||||
# Host of the gRPC interface
|
|
||||||
host = "<%= @boltz_config['grpc_host'] %>"
|
|
||||||
|
|
||||||
# Port of the gRPC interface
|
|
||||||
port = <%= @boltz_config['grpc_port'] %>
|
|
||||||
|
|
||||||
# Whether the REST proxy for the gRPC interface should be disabled
|
|
||||||
restDisabled = <%= @boltz_config['rest_disabled'] %>
|
|
||||||
|
|
||||||
# Host of the REST proxy
|
|
||||||
restHost = "<%= @boltz_config['rest_host'] %>"
|
|
||||||
|
|
||||||
# Port of the REST proxy
|
|
||||||
restPort = <%= @boltz_config['rest_port'] %>
|
|
||||||
|
|
||||||
# Whether the macaroon authentication for the gRPC and REST interface should be disabled
|
|
||||||
noMacaroons = <%= @boltz_config['no_macaroons'] %>
|
|
||||||
@@ -3,5 +3,5 @@ set -xe -o pipefail
|
|||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
inotifywait <%= @lnd_dir %>/data/chain/bitcoin/<%= @bitcoin_network %>/channel.backup
|
inotifywait <%= @lnd_dir %>/data/chain/bitcoin/<%= @bitcoin_network %>/channel.backup
|
||||||
aws s3 cp <%= @lnd_dir %>/data/chain/bitcoin/<%= @bitcoin_network %>/channel.backup "s3://<%= @s3_bucket %>/<%= @s3_scb_dir %>/channel.backup"
|
aws --endpoint <%= @s3_endpoint %> s3 cp <%= @lnd_dir %>/data/chain/bitcoin/<%= @bitcoin_network %>/channel.backup "s3://<%= @s3_bucket %>/<%= @s3_scb_dir %>/channel.backup"
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ minchansize=<%= @lnd_minchansize %>
|
|||||||
autopilot.active=0
|
autopilot.active=0
|
||||||
|
|
||||||
[Bitcoin]
|
[Bitcoin]
|
||||||
bitcoin.active=1
|
|
||||||
bitcoin.mainnet=1
|
bitcoin.mainnet=1
|
||||||
bitcoin.node=bitcoind
|
bitcoin.node=bitcoind
|
||||||
bitcoin.basefee=<%= @lnd_basefee %>
|
bitcoin.basefee=<%= @lnd_basefee %>
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ admin_users = ejabberd_credentials['admins']
|
|||||||
hosts.each do |host|
|
hosts.each do |host|
|
||||||
ldap_rootdn = "uid=service,ou=#{host[:name]},cn=applications,dc=kosmos,dc=org"
|
ldap_rootdn = "uid=service,ou=#{host[:name]},cn=applications,dc=kosmos,dc=org"
|
||||||
if host[:name] == "kosmos.org"
|
if host[:name] == "kosmos.org"
|
||||||
ldap_filter = "(&(objectClass=person)(serviceEnabled=xmpp))"
|
ldap_filter = "(&(objectClass=person)(serviceEnabled=ejabberd))"
|
||||||
else
|
else
|
||||||
ldap_filter = "(objectClass=person)"
|
ldap_filter = "(objectClass=person)"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ modules:
|
|||||||
access_createnode: pubsub_createnode
|
access_createnode: pubsub_createnode
|
||||||
ignore_pep_from_offline: false
|
ignore_pep_from_offline: false
|
||||||
last_item_cache: false
|
last_item_cache: false
|
||||||
max_items_node: 10
|
max_items_node: 10000
|
||||||
plugins:
|
plugins:
|
||||||
- "flat"
|
- "flat"
|
||||||
- "pep" # pep requires mod_caps
|
- "pep" # pep requires mod_caps
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ node.default["kosmos-mastodon"]["redis_url"] = "redis://localhost:6379/0
|
|||||||
node.default["kosmos-mastodon"]["sidekiq_threads"] = 25
|
node.default["kosmos-mastodon"]["sidekiq_threads"] = 25
|
||||||
node.default["kosmos-mastodon"]["allowed_private_addresses"] = "127.0.0.1"
|
node.default["kosmos-mastodon"]["allowed_private_addresses"] = "127.0.0.1"
|
||||||
|
|
||||||
node.default["kosmos-mastodon"]["onion_address"] = nil
|
node.default["kosmos-mastodon"]["onion_address"] = nil
|
||||||
|
|
||||||
# Allocate this amount of RAM to the Java heap for Elasticsearch
|
# Allocate this amount of RAM to the Java heap for Elasticsearch
|
||||||
node.default["kosmos-mastodon"]["elasticsearch"]["allocated_memory"] = "1536m"
|
node.default["kosmos-mastodon"]["elasticsearch"]["allocated_memory"] = "1536m"
|
||||||
@@ -20,6 +20,10 @@ node.default["kosmos-mastodon"]["s3_region"] = nil
|
|||||||
node.default["kosmos-mastodon"]["s3_bucket"] = nil
|
node.default["kosmos-mastodon"]["s3_bucket"] = nil
|
||||||
node.default["kosmos-mastodon"]["s3_alias_host"] = nil
|
node.default["kosmos-mastodon"]["s3_alias_host"] = nil
|
||||||
|
|
||||||
|
node.default["kosmos-mastodon"]["sso_account_sign_up_url"] = "https://kosmos.org"
|
||||||
|
node.default["kosmos-mastodon"]["sso_account_reset_password_url"] = "https://accounts.kosmos.org/users/password/new"
|
||||||
|
node.default["kosmos-mastodon"]["sso_account_resend_confirmation_url"] = "https://accounts.kosmos.org/users/confirmation/new"
|
||||||
|
|
||||||
node.default["kosmos-mastodon"]["default_locale"] = "en"
|
node.default["kosmos-mastodon"]["default_locale"] = "en"
|
||||||
node.default["kosmos-mastodon"]["libre_translate_endpoint"] = nil
|
node.default["kosmos-mastodon"]["libre_translate_endpoint"] = nil
|
||||||
|
|
||||||
|
|||||||
@@ -6,13 +6,12 @@
|
|||||||
postgresql_data_bag_item = data_bag_item('credentials', 'postgresql')
|
postgresql_data_bag_item = data_bag_item('credentials', 'postgresql')
|
||||||
|
|
||||||
unless node.chef_environment == "development"
|
unless node.chef_environment == "development"
|
||||||
unless node["backup"]["postgresql"]["databases"].keys.include? 'mastodon'
|
node.override['backup']['s3']['keep'] = 1
|
||||||
node.override["backup"]["postgresql"]["host"] = "pg.kosmos.local"
|
node.override["backup"]["postgresql"]["host"] = "pg.kosmos.local"
|
||||||
node.override["backup"]["postgresql"]["databases"]["mastodon"] = {
|
node.override["backup"]["postgresql"]["databases"]["mastodon"] = {
|
||||||
username: "mastodon",
|
username: "mastodon",
|
||||||
password: postgresql_data_bag_item['mastodon_user_password']
|
password: postgresql_data_bag_item['mastodon_user_password']
|
||||||
}
|
}
|
||||||
end
|
|
||||||
|
|
||||||
include_recipe "backup"
|
include_recipe "backup"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -190,6 +190,7 @@ template "#{mastodon_path}/.env.#{rails_env}" do
|
|||||||
mode "0640"
|
mode "0640"
|
||||||
owner mastodon_user
|
owner mastodon_user
|
||||||
group mastodon_user
|
group mastodon_user
|
||||||
|
sensitive true
|
||||||
variables redis_url: node["kosmos-mastodon"]["redis_url"],
|
variables redis_url: node["kosmos-mastodon"]["redis_url"],
|
||||||
domain: node["kosmos-mastodon"]["domain"],
|
domain: node["kosmos-mastodon"]["domain"],
|
||||||
alternate_domains: node["kosmos-mastodon"]["alternate_domains"],
|
alternate_domains: node["kosmos-mastodon"]["alternate_domains"],
|
||||||
@@ -210,6 +211,9 @@ template "#{mastodon_path}/.env.#{rails_env}" do
|
|||||||
vapid_public_key: credentials['vapid_public_key'],
|
vapid_public_key: credentials['vapid_public_key'],
|
||||||
db_pass: postgresql_credentials['mastodon_user_password'],
|
db_pass: postgresql_credentials['mastodon_user_password'],
|
||||||
db_host: "pg.kosmos.local",
|
db_host: "pg.kosmos.local",
|
||||||
|
sso_account_sign_up_url: node["kosmos-mastodon"]["sso_account_sign_up_url"],
|
||||||
|
sso_account_reset_password_url: node["kosmos-mastodon"]["sso_account_reset_password_url"],
|
||||||
|
sso_account_resend_confirmation_url: node["kosmos-mastodon"]["sso_account_resend_confirmation_url"],
|
||||||
default_locale: node["kosmos-mastodon"]["default_locale"],
|
default_locale: node["kosmos-mastodon"]["default_locale"],
|
||||||
allowed_private_addresses: node["kosmos-mastodon"]["allowed_private_addresses"],
|
allowed_private_addresses: node["kosmos-mastodon"]["allowed_private_addresses"],
|
||||||
libre_translate_endpoint: node["kosmos-mastodon"]["libre_translate_endpoint"]
|
libre_translate_endpoint: node["kosmos-mastodon"]["libre_translate_endpoint"]
|
||||||
|
|||||||
@@ -28,7 +28,9 @@ template "#{node['openresty']['dir']}/snippets/mastodon.conf" do
|
|||||||
owner 'www-data'
|
owner 'www-data'
|
||||||
mode 0640
|
mode 0640
|
||||||
variables web_root_dir: web_root_dir,
|
variables web_root_dir: web_root_dir,
|
||||||
server_name: server_name
|
server_name: server_name,
|
||||||
|
s3_private_url: "#{node["kosmos-mastodon"]["s3_endpoint"]}/#{node["kosmos-mastodon"]["s3_bucket"]}/",
|
||||||
|
s3_public_url: "https://#{node["kosmos-mastodon"]["s3_alias_host"]}/"
|
||||||
notifies :reload, 'service[openresty]', :delayed
|
notifies :reload, 'service[openresty]', :delayed
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,9 @@ LDAP_SEARCH_FILTER='<%= @ldap[:search_filter] %>'
|
|||||||
LDAP_UID_CONVERSION_ENABLED=<%= @ldap[:uid_conversion_enabled] %>
|
LDAP_UID_CONVERSION_ENABLED=<%= @ldap[:uid_conversion_enabled] %>
|
||||||
LDAP_UID_CONVERSION_SEARCH=<%= @ldap[:uid_conversion_search] %>
|
LDAP_UID_CONVERSION_SEARCH=<%= @ldap[:uid_conversion_search] %>
|
||||||
LDAP_UID_CONVERSION_REPLACE=<%= @ldap[:uid_conversion_replace] %>
|
LDAP_UID_CONVERSION_REPLACE=<%= @ldap[:uid_conversion_replace] %>
|
||||||
|
SSO_ACCOUNT_SIGN_UP=<%= @sso_account_sign_up_url %>
|
||||||
|
SSO_ACCOUNT_RESET_PASSWORD=<%= @sso_account_reset_password_url %>
|
||||||
|
SSO_ACCOUNT_RESEND_CONFIRMATION=<%= @sso_account_resend_confirmation_url %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
# Optional asset host for multi-server setups
|
# Optional asset host for multi-server setups
|
||||||
|
|||||||
@@ -108,11 +108,13 @@ location @proxy {
|
|||||||
|
|
||||||
proxy_pass http://mastodon_app;
|
proxy_pass http://mastodon_app;
|
||||||
proxy_buffering on;
|
proxy_buffering on;
|
||||||
proxy_redirect off;
|
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
proxy_set_header Connection $connection_upgrade;
|
proxy_set_header Connection $connection_upgrade;
|
||||||
|
|
||||||
|
# https://github.com/mastodon/mastodon/issues/24380
|
||||||
|
proxy_redirect <%= @s3_private_url %> <%= @s3_public_url %>;
|
||||||
|
|
||||||
tcp_nodelay on;
|
tcp_nodelay on;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
node.default["gitea"]["version"] = "1.22.0"
|
node.default["gitea"]["version"] = "1.22.1"
|
||||||
node.default["gitea"]["checksum"] = "a31086f073cb9592d28611394b2de3655db515d961e4fdcf5b549cb40753ef3d"
|
node.default["gitea"]["checksum"] = "b8043324545eec269fc8f18c22b49fc365ed367e0dd41e081b79832de2570f9c"
|
||||||
node.default["gitea"]["working_directory"] = "/var/lib/gitea"
|
node.default["gitea"]["working_directory"] = "/var/lib/gitea"
|
||||||
node.default["gitea"]["port"] = 3000
|
node.default["gitea"]["port"] = 3000
|
||||||
node.default["gitea"]["postgresql_host"] = "localhost:5432"
|
node.default["gitea"]["postgresql_host"] = "localhost:5432"
|
||||||
|
|||||||
@@ -8,5 +8,6 @@
|
|||||||
unless node.chef_environment == "development"
|
unless node.chef_environment == "development"
|
||||||
# backup the data dir and the config files
|
# backup the data dir and the config files
|
||||||
node.override["backup"]["archives"]["gitea"] = [node["gitea"]["working_directory"]]
|
node.override["backup"]["archives"]["gitea"] = [node["gitea"]["working_directory"]]
|
||||||
|
node.override['backup']['s3']['keep'] = 2
|
||||||
include_recipe "backup"
|
include_recipe "backup"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -21,8 +21,13 @@ server {
|
|||||||
location ~ ^/(avatars|repo-avatars)/.*$ {
|
location ~ ^/(avatars|repo-avatars)/.*$ {
|
||||||
proxy_buffers 1024 8k;
|
proxy_buffers 1024 8k;
|
||||||
proxy_pass http://_gitea_web;
|
proxy_pass http://_gitea_web;
|
||||||
proxy_http_version 1.1;
|
|
||||||
expires 30d;
|
expires 30d;
|
||||||
|
proxy_set_header Connection $http_connection;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Docker registry
|
# Docker registry
|
||||||
@@ -30,12 +35,22 @@ server {
|
|||||||
client_max_body_size 0;
|
client_max_body_size 0;
|
||||||
proxy_buffers 1024 8k;
|
proxy_buffers 1024 8k;
|
||||||
proxy_pass http://_gitea_web;
|
proxy_pass http://_gitea_web;
|
||||||
proxy_http_version 1.1;
|
proxy_set_header Connection $http_connection;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
proxy_buffers 1024 8k;
|
proxy_buffers 1024 8k;
|
||||||
proxy_pass http://_gitea_web;
|
proxy_pass http://_gitea_web;
|
||||||
proxy_http_version 1.1;
|
proxy_set_header Connection $http_connection;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
ubuntu_server_cloud_image_release = "20230506"
|
release = "20240514"
|
||||||
|
img_filename = "ubuntu-22.04-server-cloudimg-amd64-disk-kvm"
|
||||||
|
|
||||||
node.default["kosmos_kvm"]["host"]["qemu_base_image"] = {
|
node.default["kosmos_kvm"]["host"]["qemu_base_image"] = {
|
||||||
"url" => "https://cloud-images.ubuntu.com/releases/focal/release-#{ubuntu_server_cloud_image_release}/ubuntu-20.04-server-cloudimg-amd64-disk-kvm.img",
|
"url" => "https://cloud-images.ubuntu.com/releases/jammy/release-#{release}/#{img_filename}.img",
|
||||||
"checksum" => "27d2b91fd2b715729d739e2a3155dce70d1aaae4f05c177f338b9d4b60be638c",
|
"checksum" => "2e7698b3ebd7caead06b08bd3ece241e6ce294a6db01f92ea12bcb56d6972c3f",
|
||||||
"path" => "/var/lib/libvirt/images/base/ubuntu-20.04-server-cloudimg-amd64-disk-kvm-#{ubuntu_server_cloud_image_release}.qcow2"
|
"path" => "/var/lib/libvirt/images/base/#{img_filename}-#{release}.qcow2"
|
||||||
}
|
}
|
||||||
|
|
||||||
# A systemd.timer OnCalendar config value
|
# A systemd.timer OnCalendar config value
|
||||||
|
|||||||
20
site-cookbooks/kosmos_strfry/LICENSE
Normal file
20
site-cookbooks/kosmos_strfry/LICENSE
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
Copyright (c) 2024 Kosmos Developers
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
4
site-cookbooks/kosmos_strfry/README.md
Normal file
4
site-cookbooks/kosmos_strfry/README.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
kosmos_strfry
|
||||||
|
=============
|
||||||
|
|
||||||
|
Installs/configures a strfry relay and its reverse proxy config
|
||||||
2
site-cookbooks/kosmos_strfry/attributes/default.rb
Normal file
2
site-cookbooks/kosmos_strfry/attributes/default.rb
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
node.default["strfry"]["ldap_search_dn"] = "ou=kosmos.org,cn=users,dc=kosmos,dc=org"
|
||||||
|
node.default["strfry"]["extras_dir"] = "/opt/strfry"
|
||||||
10
site-cookbooks/kosmos_strfry/metadata.rb
Normal file
10
site-cookbooks/kosmos_strfry/metadata.rb
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
name 'kosmos_strfry'
|
||||||
|
maintainer 'Kosmos'
|
||||||
|
maintainer_email 'mail@kosmos.org'
|
||||||
|
license 'MIT'
|
||||||
|
description 'strfry wrapper cookbook'
|
||||||
|
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
|
||||||
|
version '0.1.0'
|
||||||
|
|
||||||
|
depends 'kosmos_openresty'
|
||||||
|
depends 'deno'
|
||||||
13
site-cookbooks/kosmos_strfry/recipes/firewall.rb
Normal file
13
site-cookbooks/kosmos_strfry/recipes/firewall.rb
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#
|
||||||
|
# Cookbook Name:: kosmos_strfry
|
||||||
|
# Recipe:: firewall
|
||||||
|
#
|
||||||
|
|
||||||
|
include_recipe "kosmos-base::firewall"
|
||||||
|
|
||||||
|
firewall_rule "strfry" do
|
||||||
|
port node["strfry"]["port"]
|
||||||
|
source "10.1.1.0/24"
|
||||||
|
protocol :tcp
|
||||||
|
command :allow
|
||||||
|
end
|
||||||
29
site-cookbooks/kosmos_strfry/recipes/nginx.rb
Normal file
29
site-cookbooks/kosmos_strfry/recipes/nginx.rb
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#
|
||||||
|
# Cookbook Name:: kosmos_strfry
|
||||||
|
# Recipe:: nginx
|
||||||
|
#
|
||||||
|
|
||||||
|
domain = node["strfry"]["domain"]
|
||||||
|
|
||||||
|
upstream_hosts = []
|
||||||
|
search(:node, 'role:strfry').each do |node|
|
||||||
|
upstream_hosts << node['knife_zero']['host']
|
||||||
|
end
|
||||||
|
if upstream_hosts.empty?
|
||||||
|
Chef::Log.warn("No node found with 'strfry' role. Not configuring nginx site.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
tls_cert_for domain do
|
||||||
|
auth "gandi_dns"
|
||||||
|
action :create
|
||||||
|
end
|
||||||
|
|
||||||
|
openresty_site domain do
|
||||||
|
template "nginx_conf_strfry.erb"
|
||||||
|
variables domain: domain,
|
||||||
|
upstream_port: node['strfry']['port'],
|
||||||
|
upstream_hosts: upstream_hosts,
|
||||||
|
ssl_cert: "/etc/letsencrypt/live/#{domain}/fullchain.pem",
|
||||||
|
ssl_key: "/etc/letsencrypt/live/#{domain}/privkey.pem"
|
||||||
|
end
|
||||||
83
site-cookbooks/kosmos_strfry/recipes/policies.rb
Normal file
83
site-cookbooks/kosmos_strfry/recipes/policies.rb
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
#
|
||||||
|
# Cookbook Name:: kosmos_strfry
|
||||||
|
# Recipe:: policies
|
||||||
|
#
|
||||||
|
|
||||||
|
include_recipe "deno"
|
||||||
|
|
||||||
|
#
|
||||||
|
# config
|
||||||
|
#
|
||||||
|
|
||||||
|
ldap_credentials = Chef::EncryptedDataBagItem.load('credentials', 'dirsrv')
|
||||||
|
|
||||||
|
extras_dir = node["strfry"]["extras_dir"]
|
||||||
|
|
||||||
|
directory extras_dir do
|
||||||
|
owner node["strfry"]["user"]
|
||||||
|
group node["strfry"]["group"]
|
||||||
|
mode "0755"
|
||||||
|
end
|
||||||
|
|
||||||
|
env = {
|
||||||
|
ldap_url: 'ldap://ldap.kosmos.local:389', # requires "ldap_client" role
|
||||||
|
ldap_bind_dn: ldap_credentials["service_dn"],
|
||||||
|
ldap_password: ldap_credentials["service_password"],
|
||||||
|
ldap_search_dn: node["strfry"]["ldap_search_dn"],
|
||||||
|
whitelist_pubkeys: node["strfry"]["whitelist_pubkeys"].join(",")
|
||||||
|
}
|
||||||
|
|
||||||
|
template "#{extras_dir}/.env" do
|
||||||
|
source 'env.erb'
|
||||||
|
owner node["strfry"]["user"]
|
||||||
|
group node["strfry"]["group"]
|
||||||
|
mode 0600
|
||||||
|
sensitive true
|
||||||
|
variables config: env
|
||||||
|
notifies :restart, "service[strfry]", :delayed
|
||||||
|
end
|
||||||
|
|
||||||
|
#
|
||||||
|
# strfry deno scripts
|
||||||
|
#
|
||||||
|
|
||||||
|
base_url = "https://gitea.kosmos.org/kosmos/akkounts/raw/branch/live/extras/strfry"
|
||||||
|
|
||||||
|
remote_file "#{extras_dir}/deno.json" do
|
||||||
|
source "#{base_url}/deno.json"
|
||||||
|
owner node["strfry"]["user"]
|
||||||
|
group node["strfry"]["group"]
|
||||||
|
mode "0644"
|
||||||
|
notifies :restart, "service[strfry]", :delayed
|
||||||
|
end
|
||||||
|
|
||||||
|
remote_file "#{extras_dir}/deno.lock" do
|
||||||
|
source "#{base_url}/deno.lock"
|
||||||
|
owner node["strfry"]["user"]
|
||||||
|
group node["strfry"]["group"]
|
||||||
|
mode "0644"
|
||||||
|
notifies :restart, "service[strfry]", :delayed
|
||||||
|
end
|
||||||
|
|
||||||
|
remote_file "#{extras_dir}/strfry-policy.ts" do
|
||||||
|
source "#{base_url}/strfry-policy.ts"
|
||||||
|
owner node["strfry"]["user"]
|
||||||
|
group node["strfry"]["group"]
|
||||||
|
mode "0755"
|
||||||
|
notifies :restart, "service[strfry]", :delayed
|
||||||
|
end
|
||||||
|
|
||||||
|
remote_file "#{extras_dir}/ldap-policy.ts" do
|
||||||
|
source "#{base_url}/ldap-policy.ts"
|
||||||
|
owner node["strfry"]["user"]
|
||||||
|
group node["strfry"]["group"]
|
||||||
|
mode "0644"
|
||||||
|
notifies :restart, "service[strfry]", :delayed
|
||||||
|
end
|
||||||
|
|
||||||
|
remote_file "#{extras_dir}/strfry-sync.ts" do
|
||||||
|
source "#{base_url}/strfry-sync.ts"
|
||||||
|
owner node["strfry"]["user"]
|
||||||
|
group node["strfry"]["group"]
|
||||||
|
mode "0644"
|
||||||
|
end
|
||||||
11
site-cookbooks/kosmos_strfry/templates/env.erb
Normal file
11
site-cookbooks/kosmos_strfry/templates/env.erb
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<% @config.each do |key, value| %>
|
||||||
|
<% if value.is_a?(Hash) %>
|
||||||
|
<% value.each do |k, v| %>
|
||||||
|
<%= "#{key.upcase}_#{k.upcase}" %>=<%= v.to_s %>
|
||||||
|
<% end %>
|
||||||
|
<% else %>
|
||||||
|
<% if value %>
|
||||||
|
<%= key.upcase %>=<%= value.to_s %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
26
site-cookbooks/kosmos_strfry/templates/nginx_conf_strfry.erb
Normal file
26
site-cookbooks/kosmos_strfry/templates/nginx_conf_strfry.erb
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
upstream _strfry {
|
||||||
|
<% @upstream_hosts.each do |host| %>
|
||||||
|
server <%= host %>:<%= @upstream_port || "7777" %>;
|
||||||
|
<% end %>
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
server_name <%= @domain %>;
|
||||||
|
listen <%= "#{node['openresty']['listen_ip']}:" if node['openresty']['listen_ip'] %>443 ssl http2;
|
||||||
|
listen [::]:443 ssl http2;
|
||||||
|
|
||||||
|
access_log "/var/log/nginx/<%= @domain %>.access.log";
|
||||||
|
error_log "/var/log/nginx/<%= @domain %>.error.log";
|
||||||
|
|
||||||
|
ssl_certificate <%= @ssl_cert %>;
|
||||||
|
ssl_certificate_key <%= @ssl_key %>;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_pass http://_strfry;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
node.default["kosmos_website"]["domain"] = "kosmos.org"
|
node.default["kosmos_website"]["domain"] = "kosmos.org"
|
||||||
node.default["kosmos_website"]["repo"] = "https://gitea.kosmos.org/kosmos/website.git"
|
node.default["kosmos_website"]["repo"] = "https://gitea.kosmos.org/kosmos/website.git"
|
||||||
node.default["kosmos_website"]["revision"] = "chore/content"
|
node.default["kosmos_website"]["revision"] = "chore/content"
|
||||||
|
node.default["kosmos_website"]["accounts_url"] = "https://accounts.kosmos.org"
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ end
|
|||||||
openresty_site domain do
|
openresty_site domain do
|
||||||
template "nginx_conf_website.erb"
|
template "nginx_conf_website.erb"
|
||||||
variables domain: domain,
|
variables domain: domain,
|
||||||
|
accounts_url: node.default["kosmos_website"]["accounts_url"],
|
||||||
ssl_cert: "/etc/letsencrypt/live/#{domain}/fullchain.pem",
|
ssl_cert: "/etc/letsencrypt/live/#{domain}/fullchain.pem",
|
||||||
ssl_key: "/etc/letsencrypt/live/#{domain}/privkey.pem"
|
ssl_key: "/etc/letsencrypt/live/#{domain}/privkey.pem"
|
||||||
end
|
end
|
||||||
|
|||||||
35
site-cookbooks/kosmos_website/recipes/redirects.rb
Normal file
35
site-cookbooks/kosmos_website/recipes/redirects.rb
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#
|
||||||
|
# Cookbook:: kosmos_website
|
||||||
|
# Recipe:: redirects
|
||||||
|
#
|
||||||
|
|
||||||
|
redirects = [
|
||||||
|
{
|
||||||
|
domain: "kosmos.chat",
|
||||||
|
target: "https://kosmos.org",
|
||||||
|
http_status: 307
|
||||||
|
},
|
||||||
|
{
|
||||||
|
domain: "kosmos.cash",
|
||||||
|
acme_domain: "letsencrypt.kosmos.org",
|
||||||
|
target: "https://kosmos.org",
|
||||||
|
http_status: 307
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
redirects.each do |redirect|
|
||||||
|
tls_cert_for redirect[:domain] do
|
||||||
|
auth "gandi_dns"
|
||||||
|
acme_domain redirect[:acme_domain] unless redirect[:acme_domain].nil?
|
||||||
|
action :create
|
||||||
|
end
|
||||||
|
|
||||||
|
openresty_site redirect[:domain] do
|
||||||
|
template "nginx_conf_redirect.erb"
|
||||||
|
variables domain: redirect[:domain],
|
||||||
|
target: redirect[:target],
|
||||||
|
http_status: redirect[:http_status],
|
||||||
|
ssl_cert: "/etc/letsencrypt/live/#{redirect[:domain]}/fullchain.pem",
|
||||||
|
ssl_key: "/etc/letsencrypt/live/#{redirect[:domain]}/privkey.pem"
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# Generated by Chef
|
||||||
|
|
||||||
|
server {
|
||||||
|
server_name <%= @domain %>;
|
||||||
|
listen <%= "#{node['openresty']['listen_ip']}:" if node['openresty']['listen_ip'] %>443 ssl http2;
|
||||||
|
listen [::]:443 ssl http2;
|
||||||
|
|
||||||
|
access_log <%= node[:openresty][:log_dir] %>/<%= @domain %>.access.log;
|
||||||
|
error_log <%= node[:openresty][:log_dir] %>/<%= @domain %>.error.log warn;
|
||||||
|
|
||||||
|
gzip_static on;
|
||||||
|
gzip_comp_level 5;
|
||||||
|
|
||||||
|
ssl_certificate <%= @ssl_cert %>;
|
||||||
|
ssl_certificate_key <%= @ssl_key %>;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
return <%= @http_status || 301 %> <%= @target %>;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Chef
|
||||||
|
|
||||||
|
server {
|
||||||
|
server_name <%= @domain %>;
|
||||||
|
listen <%= "#{node['openresty']['listen_ip']}:" if node['openresty']['listen_ip'] %>443 ssl http2;
|
||||||
|
listen [::]:443 ssl http2;
|
||||||
|
|
||||||
|
root /var/www/<%= @domain %>/public;
|
||||||
|
|
||||||
|
access_log <%= node[:openresty][:log_dir] %>/<%= @domain %>.access.log;
|
||||||
|
error_log <%= node[:openresty][:log_dir] %>/<%= @domain %>.error.log warn;
|
||||||
|
|
||||||
|
gzip_static on;
|
||||||
|
gzip_comp_level 5;
|
||||||
|
|
||||||
|
ssl_certificate <%= @ssl_cert %>;
|
||||||
|
ssl_certificate_key <%= @ssl_key %>;
|
||||||
|
}
|
||||||
@@ -1,9 +1,18 @@
|
|||||||
# Generated by Chef
|
# Generated by Chef
|
||||||
|
|
||||||
|
server {
|
||||||
|
server_name _;
|
||||||
|
listen 80 default_server;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
return 301 https://<%= @domain %>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
server_name <%= @domain %>;
|
server_name <%= @domain %>;
|
||||||
listen <%= "#{node['openresty']['listen_ip']}:" if node['openresty']['listen_ip'] %>443 ssl http2;
|
listen <%= "#{node['openresty']['listen_ip']}:" if node['openresty']['listen_ip'] %>443 ssl http2 default_server;
|
||||||
listen [::]:443 ssl http2;
|
listen [::]:443 ssl http2 default_server;
|
||||||
|
|
||||||
root /var/www/<%= @domain %>/public;
|
root /var/www/<%= @domain %>/public;
|
||||||
|
|
||||||
@@ -18,8 +27,10 @@ server {
|
|||||||
ssl_certificate <%= @ssl_cert %>;
|
ssl_certificate <%= @ssl_cert %>;
|
||||||
ssl_certificate_key <%= @ssl_key %>;
|
ssl_certificate_key <%= @ssl_key %>;
|
||||||
|
|
||||||
|
<% if @accounts_url %>
|
||||||
location ~ ^/.well-known/(webfinger|nostr|lnurlp|keysend) {
|
location ~ ^/.well-known/(webfinger|nostr|lnurlp|keysend) {
|
||||||
proxy_ssl_server_name on;
|
proxy_ssl_server_name on;
|
||||||
proxy_pass https://accounts.kosmos.org;
|
proxy_pass https://accounts.kosmos.org;
|
||||||
}
|
}
|
||||||
|
<% end %>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ end
|
|||||||
|
|
||||||
tls_cert_for domain do
|
tls_cert_for domain do
|
||||||
auth "gandi_dns"
|
auth "gandi_dns"
|
||||||
|
acme_domain "letsencrypt.kosmos.org"
|
||||||
action :create
|
action :create
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
1
site-cookbooks/strfry
Submodule
1
site-cookbooks/strfry
Submodule
Submodule site-cookbooks/strfry added at a4756377b4
Reference in New Issue
Block a user