27 Commits

Author SHA1 Message Date
10e8ba5569 Add missing CORS headers to host-meta.json
Otherwise XMPP Web clients cannot fetch the Bosh and WS endpoint info
2025-04-08 00:10:29 +04:00
6c35a20b89 Merge pull request 'Upgrade rskj to 7.0.0' (#587) from chore/upgrade_rskj into master
Reviewed-on: #587
2025-04-05 09:14:25 +00:00
e3d9a50f09 Upgrade Gitea to 1.23.6 2025-04-04 18:53:46 +04:00
c4652ca2eb Upgrade rskj to 7.0.0 2025-04-04 16:59:11 +04:00
56440bfd89 Merge pull request 'Upgrade nbxplorer, BTCPay Server' (#586) from chore/upgrade_btcpay into master
Reviewed-on: #586
2025-03-25 10:08:06 +00:00
abee2407bf Upgrade nbxplorer, BTCPay Server 2025-03-25 14:03:34 +04:00
0cef08fb7b Merge pull request 'Update Gandi API token' (#585) from chore/update_gandi_token into master
Reviewed-on: #585
2025-03-19 14:02:49 +00:00
f246f63594 Update Gandi API token
For certbot renewals. Also set resource to sensitive in ejabberd recipe.

Co-authored-by: Greg Karékinian <greg@karekinian.com>
2025-03-19 18:01:50 +04:00
2dee25bf23 Update node info 2025-03-19 18:00:07 +04:00
a28d31b415 Upgrade Gitea to 1.23.5 2025-03-05 14:09:03 +04:00
0bf50bce2e Merge pull request 'Fix postgres running out of available connection slots' (#584) from bugfix/gitea_db_connections into master
Reviewed-on: #584
2025-03-05 10:03:51 +00:00
6be99aa3de Cap maximum open database connections
Fixes Gitea opening too many connections, which can impact other apps
trying to connect as well.
2025-03-05 13:53:33 +04:00
90bf66ada9 Upgrade Gitea to 1.23.4 2025-02-21 10:12:27 +04:00
32cfd6401f Upgrade LND to 0.18.5
Urgent security upgrade
2025-02-19 14:19:10 +04:00
1124f25069 Upgrade Gitea to 1.23.3 2025-02-12 11:51:14 +04:00
f34c7ecd9b Merge pull request 'Publish daily BTC price in public remoteStorage' (#581) from feature/btc-rate-tracker into master
Reviewed-on: #581
Reviewed-by: Greg <greg@noreply.kosmos.org>
2025-01-23 13:28:33 +00:00
8d149a475d Merge pull request 'Upgrade Gitea to 1.23.1' (#582) from chore/upgrade_gitea into master
Reviewed-on: #582
2025-01-22 14:41:19 +00:00
905a67475b Upgrade Gitea to 1.23.1 2025-01-22 09:36:33 -05:00
8251fa83ce Merge pull request 'Deploy substr' (#579) from feature/substr into master
Reviewed-on: #579
2025-01-22 14:27:02 +00:00
0fa61a585e DRY up code, add GBP rates 2025-01-17 14:52:28 -05:00
89f1790afc Publish daily BTC price in public remoteStorage 2025-01-17 10:42:09 -05:00
72ac8c6a84 Update akkounts credentials 2025-01-17 09:17:43 -05:00
b1bb5d0625 Use default value for STUN credentials lifetime 2025-01-14 15:30:42 -05:00
b470110fd4 Upgrade Gitea to 1.22.6 2024-12-16 12:10:08 +04:00
4ce39738fd Allow larger bodies for Gitea file uploads
Needed for uploading larger packages to the registry
2024-12-09 21:19:39 +04:00
d35e57b90e Deploy substr 2024-12-09 21:19:13 +04:00
c8160e38c8 Turn known pubkeys into object with usernames 2024-12-09 18:21:55 +04:00
27 changed files with 332 additions and 72 deletions

View File

@@ -1,72 +1,72 @@
{ {
"id": "akkounts", "id": "akkounts",
"postgresql_username": { "postgresql_username": {
"encrypted_data": "bDlOkEmhvMgyVzPeTNUzYnzRLf3T9cc0cDxt\n", "encrypted_data": "v2QoNkkxXGflxEdspIpfJdBjQVraMyF9yHq7\n",
"iv": "GCCUoqU5pxQ7fGkv\n", "iv": "du8wubB9xQjOVeOS\n",
"auth_tag": "Q7mrSHIBluMe3CGVmoR86Q==\n", "auth_tag": "gDZLYz5/XBCQDlDaFoP6mQ==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
}, },
"postgresql_password": { "postgresql_password": {
"encrypted_data": "wD0HtdsNe/hl4ZaOy8hyr2k4z8TXQrrSja3KNVE47w==\n", "encrypted_data": "Naz4R5oOCUS/S/CZmW5eoil8BpJ3K1WLUIc3mAihhA==\n",
"iv": "tb5yz8WDer0CsGvJ\n", "iv": "0S9Sb1MUoBVWbW9t\n",
"auth_tag": "/+K2anuCff/6M7Pu70Smqw==\n", "auth_tag": "L2yGzVMKiKAzfpA+HADRqA==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
}, },
"sentry_dsn": { "sentry_dsn": {
"encrypted_data": "jCz681x0WVixHYZUb62TO+1cgyJMiJ2UMqWcaztx57yDBOIiKW3oSZjuXdhP\n9WCesfXQF/lgzITZno3IKDqzlKjWgbGLC75y8FLguxidCHI=\n", "encrypted_data": "OXiAeg6lIqEnbplAnKlkwb3o3DTfMJbLC0wnxmguQ8GZiP0RcpPOwUAa9Q3U\naA44f36BCKgHtCxdlVB59TTFA9W24ecU5KWb/jIc7mueSoc=\n",
"iv": "IRNOzN/hLwg1iqax\n", "iv": "86cAncfc1K4d43ql\n",
"auth_tag": "eg9dWnEK04JDb94e4CFa9Q==\n", "auth_tag": "0i04Y/eFIN+b+5F605d7Dg==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
}, },
"rails_master_key": { "rails_master_key": {
"encrypted_data": "nUB77VLRp41rluH7hLBwQqPtnh/HsmfLr2VbcIZHWawL3o2TGuY+mj648f9L\n7XsEpgqY\n", "encrypted_data": "Ypv4g33evnuutOWmGl49kq3Ca3SmfWIswyxGIZA0J/o1ZMGpMOfySim/e7r8\nzdAM/PFo\n",
"iv": "fpdbDitqTRHxEKiv\n", "iv": "w2bflz2KIbu/vRT1\n",
"auth_tag": "I44fn8Ott3L/Y5LYr56U/Q==\n", "auth_tag": "tpemUQJly8Ft9lN6rP+W4w==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
}, },
"discourse_connect_secret": { "discourse_connect_secret": {
"encrypted_data": "ENtMn+1XTVFmdEZw7LU6WGoMbSZY654ggm3vPACGfFgqo6r0LhG60c5OTdqv\nZvT5/Q==\n", "encrypted_data": "DUK6G5SyRiehJh3iHtCKQj8Ki5+suk9Ds5/ZMp6OP1EshdbpziQ4XNey2x+R\nHCTSVg==\n",
"iv": "bL1BmvRhgxFqSM1P\n", "iv": "kfhA3apCUAHcNlwH\n",
"auth_tag": "sEBZzGWwwYFHn+4B4SsyCA==\n", "auth_tag": "BqRV+CiF9rFrqEToJeisoQ==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
}, },
"lndhub_admin_token": { "lndhub_admin_token": {
"encrypted_data": "4LPGFoARzI8UYnsJPIk8sax/rAA16pUULEZWn86e2C7L\n", "encrypted_data": "C3aKQIEwcQNCrr+uyLiOY2KAHZh5dUvTZ9IdANPqkGlr\n",
"iv": "nvjXrOwgfgutwEVw\n", "iv": "qrhJJzmmced9lNF1\n",
"auth_tag": "A89RUf1sdcS3FVscNPWYLg==\n", "auth_tag": "CH1fOwMWsidmWBwX2+4nJg==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
}, },
"btcpay_auth_token": { "btcpay_auth_token": {
"encrypted_data": "ky5iWYF06os0Ek6vIRzWqMTekqJhCOh/Q9DTDIeKhSyk8TnT3O71lCNEt1F5\nXCNq6ux3V6oyHVLWj0o=\n", "encrypted_data": "0vRq3ZeYPtNcdlCUQI0ip6YOaQZKBeK/dODL7IxdrAK9pHz+u53aL8LW92nJ\nmHW2DYcv+eX3ltnwu88=\n",
"iv": "zk6WnxsY89oNW1F9\n", "iv": "5HenMAvE1Uu5l7jJ\n",
"auth_tag": "FAIMXKvQ1T7QKezVSNJbwQ==\n", "auth_tag": "rJzkZPRYar1qw4dauSNV2w==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
}, },
"s3_access_key": { "s3_access_key": {
"encrypted_data": "KfhfEGwPjOonlz6rpnNTinXFPqX/sIbqQn/aby0UDi/G/7cvEcOiNcCkfuSz\n", "encrypted_data": "QB7XpwhzCvLczUojhcjXy+KX26rEDQHSSw983KP8W7Nud1SNbheU1PrDEQv/\n",
"iv": "Q3rg06v6K9pUDLDY\n", "iv": "DTtUXHNQ2g04E+oE\n",
"auth_tag": "G5ugdlJ896KtYtObKLclJA==\n", "auth_tag": "0XSkHE+MG4AnVT4XJR9tzw==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
}, },
"s3_secret_key": { "s3_secret_key": {
"encrypted_data": "N8s1OoDrYXHjqSydQA0kY7dd68Aelq4+/cgmJlYfP92u4YA17V4TR7fsvQZL\nkqjuUSClNYPc0XiCwf/5gxVirE9AO6OmmvSV7lUyu4hcEY6unrU=\n", "encrypted_data": "IEUzFfOBuOwjzD1DbRyk07+jFlZhQVY+a7riDJ3QU1cNYZ3OTJUgJkowA/u5\nrZ6jqehGIzvPlDuzIezxQwN+Dy0ZJueB/ZEdRqhfkXUxgzkqb2s=\n",
"iv": "bXzIVWnX6V0P6PRb\n", "iv": "gs9Igisu2EH+dAC/\n",
"auth_tag": "1EOjCfsX9P6ETjUsgBvBsA==\n", "auth_tag": "gDFuQCwlCL5mvys83CGv+w==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
}, },
"nostr_private_key": { "nostr_private_key": {
"encrypted_data": "Sf8PEyQ0sqcgxddSlIDxLOVzPjOkTFObsYuTgcxkbEV7igrati4e8QVVUEBD\n1yoLJXelp8jlCr28Ectci29jc53gYSMTLSQsw97uYas2R0dGCqQ=\n", "encrypted_data": "sFnQlwyZF0tfMzbaG/bdwqQLPVdHPpbyDT66FY1+ubssmWUpxsuNtbI71KyY\nI1784c7SSl4qKRgHZRrR658bYMKU4whe836qBgSf7Icczp1VSQY=\n",
"iv": "+1CIUyvIUOveLrY4\n", "iv": "x8RJT4dcNdtm59Zz\n",
"auth_tag": "GDqS+IuAIfMBmHIeFXaV7A==\n", "auth_tag": "6yxBq1W4jCNDYwP6+cTE6g==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
} }

View File

@@ -1,23 +1,23 @@
{ {
"id": "gandi_api", "id": "gandi_api",
"key": { "key": {
"encrypted_data": "Ky1/PdywtEIl5vVXhzu3n2JetqOxnNjpjQ7yCao6qwIAn8oYxnv1c1hFAQ==\n", "encrypted_data": "lU7/xYTmP5Sb6SsK5TNNIyegWozzBtUzpg7oDdl6gcz9FEMmG2ft0Ljh5Q==\n",
"iv": "stAc2FxDvUqrh0kt\n", "iv": "EZPQD3C+wsP/mBhF\n",
"auth_tag": "rcK4Qt+f2O4Zo5IMmG0fkw==\n", "auth_tag": "vF9E8Pj4Z8quJJdOMg/QTw==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
}, },
"access_token": { "access_token": {
"encrypted_data": "J7zoLhEbPfPjnVWBmFmDdPKRer5GGw2o6Ad0uinznANugfaDiqjyYinOdEDF\nHlAqLmXv4J40rr3F+o4=\n", "encrypted_data": "1Uw69JkNrmb8LU/qssuod1SlqxxrWR7TJQZeeivRrNzrMIVTEW/1uwJIYL6b\nM4GeeYl9lIRlMMmLBkc=\n",
"iv": "fAxFqVh9QqrfBsPW\n", "iv": "cc1GJKu6Cf4DkIgX\n",
"auth_tag": "9ugi4frDLv8f7X0X1+k4DA==\n", "auth_tag": "ERem4S7ozG695kjvWIMghw==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
}, },
"domains": { "domains": {
"encrypted_data": "X0KOKlJp5GYbKcq/jzmlaMmTXV1U7exWSqi3UxX9Sw==\n", "encrypted_data": "scZ5blsSjs54DlitR7KZ3enLbyceOR5q0wjHw1golQ==\n",
"iv": "9JucnYLlYdQ9N6pd\n", "iv": "oDcHm7shAzW97b4t\n",
"auth_tag": "sERYPDnVUJwVfSS8/xrPpQ==\n", "auth_tag": "62Zais9yf68SwmZRsmZ3hw==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
} }

View File

@@ -0,0 +1,10 @@
{
"id": "kosmos-rs",
"auth_tokens": {
"encrypted_data": "fiznpRw7VKlm232+U6XV1rqkAf2Z8CpoD8KyvuvOH2JniaymlcTHgazGWQ8s\nGeqK4RU9l4d29e9i+Mh0k4vnhO4q\n",
"iv": "SvurcL2oNSNWjlxp\n",
"auth_tag": "JLQ7vGXAuYYJpLEpL6C+Rw==\n",
"version": 3,
"cipher": "aes-256-gcm"
}
}

View File

@@ -1,30 +1,30 @@
{ {
"id": "lndhub-go", "id": "lndhub-go",
"jwt_secret": { "jwt_secret": {
"encrypted_data": "3T4JYnoISKXCnatCBeLCXyE8wVjzphw5/JU5A0vHfQ2xSDZreIRQ\n", "encrypted_data": "lJsKBTCRzI83xmRHXzpnuRH/4cuMOR+Rd+SBU50G9HdibadIEDhS\n",
"iv": "bGQZjCk6FtD/hqVj\n", "iv": "f/SvsWtZIYOVc54X\n",
"auth_tag": "CS87+UK1ZIFMiNcNaoyO6w==\n", "auth_tag": "YlJ78EuJbcPfjCPc2eH+ug==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
}, },
"postgresql_password": { "postgresql_password": {
"encrypted_data": "u8kf/6WdSTzyIz2kF+24JgOPLndWH2WmTFZ3CToJsnay\n", "encrypted_data": "aT0yNlWjvk/0S4z2kZB4Ye1u/ngk5J6fGPbwZSfdq6cy\n",
"iv": "KqLtV2UuaAzJx7C8\n", "iv": "OgUttF4LlSrL/7gH\n",
"auth_tag": "3aqx45+epb2NFkNfOfG89A==\n", "auth_tag": "pcbbGqbQ2RjU+i9dt8c3OQ==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
}, },
"admin_token": { "admin_token": {
"encrypted_data": "Z737fXqRE9JHfunRhc2GG281dFFN1bvBvTzTDzl/Vb8O\n", "encrypted_data": "I9EsqCCxMIw+fX6sfu6KX8B5fJj9DX5Y4tbX30jdnmxr\n",
"iv": "oKLQJbD67tiz2235\n", "iv": "vnERvIWYInO6+Y8q\n",
"auth_tag": "SlVIqC9d9SRoO78M7cBjTw==\n", "auth_tag": "gO+MprZUQgPEWJQUmSF1sA==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
}, },
"sentry_dsn": { "sentry_dsn": {
"encrypted_data": "gmDHGDWkTIvaXjcWMs1dnKnbqtsADPJ2mLmWw8Idj6RVevU5CabjvviAxEo1\n3hs2LWuObumRSCQt2QKap191uMq3CL2+da53hbsv+JUkxl4=\n", "encrypted_data": "+sUXWgl6dXpA1/0FqjKC3Jnl54aor6gtM+19EM/NsHwg4qu672YnSgxV+c9x\nHM3JZBYxBYvJ+HYGAvMmhlGvaOOEIvLmFUpCCJeVUXR32S8=\n",
"iv": "Yt0fSsxL4SNicwUY\n", "iv": "82+DzAnHiptaX7sO\n",
"auth_tag": "j7BWbcNnymHHMNTADWmCNw==\n", "auth_tag": "CDx44iRBVhSIF8DOxb2c+w==\n",
"version": 3, "version": 3,
"cipher": "aes-256-gcm" "cipher": "aes-256-gcm"
} }

View File

@@ -107,10 +107,12 @@
"domain": "nostr.kosmos.org", "domain": "nostr.kosmos.org",
"real_ip_header": "x-real-ip", "real_ip_header": "x-real-ip",
"policy_path": "/opt/strfry/strfry-policy.ts", "policy_path": "/opt/strfry/strfry-policy.ts",
"whitelist_pubkeys": [ "known_pubkeys": {
"b3e1b7c1660b7db0ecb93ec55c09e67961171a5c4e9e2602f1b47477ea61c50a", "_": "b3e1b7c0ef48294bd856203bfd460625de95d3afb894e5f09b14cd1f0e7097cf",
"b3e1b7c0ef48294bd856203bfd460625de95d3afb894e5f09b14cd1f0e7097cf" "accounts": "b3e1b7c1660b7db0ecb93ec55c09e67961171a5c4e9e2602f1b47477ea61c50a",
], "bitcoincore": "47750177bb6bb113784e4973f6b2e3dd27ef1eff227d6e38d0046d618969e41a",
"fiatjaf": "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d"
},
"info": { "info": {
"name": "Kosmos Relay", "name": "Kosmos Relay",
"description": "Members-only nostr relay for kosmos.org users", "description": "Members-only nostr relay for kosmos.org users",
@@ -118,6 +120,11 @@
"contact": "ops@kosmos.org", "contact": "ops@kosmos.org",
"icon": "https://assets.kosmos.org/img/app-icon-256px.png" "icon": "https://assets.kosmos.org/img/app-icon-256px.png"
} }
},
"substr": {
"relay_urls": [
"ws://localhost:7777"
]
} }
} }
} }

View File

@@ -38,6 +38,7 @@
"kosmos-bitcoin::dotnet", "kosmos-bitcoin::dotnet",
"kosmos-bitcoin::nbxplorer", "kosmos-bitcoin::nbxplorer",
"kosmos-bitcoin::btcpay", "kosmos-bitcoin::btcpay",
"kosmos-bitcoin::price_tracking",
"apt::default", "apt::default",
"timezone_iii::default", "timezone_iii::default",
"timezone_iii::debian", "timezone_iii::debian",
@@ -102,6 +103,7 @@
"role[bitcoind]", "role[bitcoind]",
"role[lnd]", "role[lnd]",
"role[lndhub]", "role[lndhub]",
"role[btcpay]" "role[btcpay]",
"recipe[kosmos-bitcoin::price_tracking]"
] ]
} }

View File

@@ -20,7 +20,7 @@
"automatic": { "automatic": {
"fqdn": "draco.kosmos.org", "fqdn": "draco.kosmos.org",
"os": "linux", "os": "linux",
"os_version": "5.4.0-54-generic", "os_version": "5.4.0-187-generic",
"hostname": "draco", "hostname": "draco",
"ipaddress": "148.251.237.73", "ipaddress": "148.251.237.73",
"roles": [ "roles": [

View File

@@ -9,7 +9,7 @@
"automatic": { "automatic": {
"fqdn": "gitea-2", "fqdn": "gitea-2",
"os": "linux", "os": "linux",
"os_version": "5.4.0-1096-kvm", "os_version": "5.4.0-1123-kvm",
"hostname": "gitea-2", "hostname": "gitea-2",
"ipaddress": "192.168.122.189", "ipaddress": "192.168.122.189",
"roles": [ "roles": [

View File

@@ -27,6 +27,7 @@
"strfry::default", "strfry::default",
"kosmos_strfry::policies", "kosmos_strfry::policies",
"kosmos_strfry::firewall", "kosmos_strfry::firewall",
"kosmos_strfry::substr",
"apt::default", "apt::default",
"timezone_iii::default", "timezone_iii::default",
"timezone_iii::debian", "timezone_iii::debian",

View File

@@ -5,4 +5,5 @@ run_list %w(
strfry::default strfry::default
kosmos_strfry::policies kosmos_strfry::policies
kosmos_strfry::firewall kosmos_strfry::firewall
kosmos_strfry::substr
) )

View File

@@ -41,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.18.3-beta' node.default['lnd']['revision'] = 'v0.18.5-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'
@@ -90,7 +90,7 @@ node.default['dotnet']['ms_packages_src_url'] = "https://packages.microsoft.com/
node.default['dotnet']['ms_packages_src_checksum'] = "4df5811c41fdded83eb9e2da9336a8dfa5594a79dc8a80133bd815f4f85b9991" node.default['dotnet']['ms_packages_src_checksum'] = "4df5811c41fdded83eb9e2da9336a8dfa5594a79dc8a80133bd815f4f85b9991"
node.default['nbxplorer']['repo'] = 'https://github.com/dgarage/NBXplorer' node.default['nbxplorer']['repo'] = 'https://github.com/dgarage/NBXplorer'
node.default['nbxplorer']['revision'] = 'v2.5.0' node.default['nbxplorer']['revision'] = 'v2.5.23'
node.default['nbxplorer']['source_dir'] = '/opt/nbxplorer' node.default['nbxplorer']['source_dir'] = '/opt/nbxplorer'
node.default['nbxplorer']['config_path'] = "/home/#{node['bitcoin']['username']}/.nbxplorer/Main/settings.config" node.default['nbxplorer']['config_path'] = "/home/#{node['bitcoin']['username']}/.nbxplorer/Main/settings.config"
node.default['nbxplorer']['port'] = '24445' node.default['nbxplorer']['port'] = '24445'
@@ -98,7 +98,7 @@ node.default['nbxplorer']['postgres']['database'] = 'nbxplorer'
node.default['nbxplorer']['postgres']['user'] = 'nbxplorer' node.default['nbxplorer']['postgres']['user'] = 'nbxplorer'
node.default['btcpay']['repo'] = 'https://github.com/btcpayserver/btcpayserver' node.default['btcpay']['repo'] = 'https://github.com/btcpayserver/btcpayserver'
node.default['btcpay']['revision'] = 'v1.12.5' node.default['btcpay']['revision'] = 'v2.0.7'
node.default['btcpay']['source_dir'] = '/opt/btcpay' node.default['btcpay']['source_dir'] = '/opt/btcpay'
node.default['btcpay']['config_path'] = "/home/#{node['bitcoin']['username']}/.btcpayserver/Main/settings.config" node.default['btcpay']['config_path'] = "/home/#{node['bitcoin']['username']}/.btcpayserver/Main/settings.config"
node.default['btcpay']['log_path'] = "/home/#{node['bitcoin']['username']}/.btcpayserver/debug.log" node.default['btcpay']['log_path'] = "/home/#{node['bitcoin']['username']}/.btcpayserver/debug.log"
@@ -111,3 +111,5 @@ node.default['btcpay']['postgres']['user'] = 'satoshi'
node.default['peerswap']['repo'] = 'https://github.com/ElementsProject/peerswap.git' node.default['peerswap']['repo'] = 'https://github.com/ElementsProject/peerswap.git'
node.default['peerswap']['revision'] = 'master' node.default['peerswap']['revision'] = 'master'
node.default['peerswap-lnd']['source_dir'] = '/opt/peerswap' node.default['peerswap-lnd']['source_dir'] = '/opt/peerswap'
node.default['price_tracking']['rs_base_url'] = "https://storage.kosmos.org/kosmos/public/btc-price"

View File

@@ -58,9 +58,7 @@ directory '/run/nbxplorer' do
end end
env = { env = {
NBXPLORER_POSTGRES: "User ID=#{postgres_user};Password=#{credentials['postgresql_password']};Database=#{postgres_database};Host=pg.kosmos.local;Port=5432;Application Name=nbxplorer;MaxPoolSize=20", NBXPLORER_POSTGRES: "User ID=#{postgres_user};Password=#{credentials['postgresql_password']};Database=#{postgres_database};Host=pg.kosmos.local;Port=5432;Application Name=nbxplorer;MaxPoolSize=20"
NBXPLORER_AUTOMIGRATE: "1",
NBXPLORER_NOMIGRATEEVTS: "1"
} }
systemd_unit 'nbxplorer.service' do systemd_unit 'nbxplorer.service' do

View File

@@ -0,0 +1,59 @@
#
# Cookbook:: kosmos-bitcoin
# Recipe:: price_tracking
#
# Track BTC rates and publish them via remoteStorage
#
%w[curl jq].each do |pkg|
apt_package pkg
end
daily_tracker_path = "/usr/local/bin/btc-price-tracker-daily"
credentials = Chef::EncryptedDataBagItem.load('credentials', 'kosmos-rs')
template daily_tracker_path do
source "btc-price-tracker-daily.sh.erb"
mode '0740'
variables rs_base_url: node['price_tracking']['rs_base_url']
notifies :restart, "systemd_unit[lnd-channel-backup.service]", :delayed
end
systemd_unit 'btc-price-tracker-daily.service' do
content({
Unit: {
Description: 'BTC price tracker (daily rates)',
After: 'network-online.target',
Wants: 'network-online.target'
},
Service: {
Type: 'oneshot',
ExecStart: daily_tracker_path,
Environment: "RS_AUTH=#{credentials["auth_tokens"]["/btc-price"]}"
},
Install: {
WantedBy: 'multi-user.target'
}
})
sensitive true
triggers_reload true
action [:create]
end
systemd_unit 'btc-price-tracker-daily.timer' do
content({
Unit: {
Description: 'Run BTC price tracker daily'
},
Timer: {
OnCalendar: '*-*-* 00:00:00',
Persistent: 'true'
},
Install: {
WantedBy: 'timers.target'
}
})
triggers_reload true
action [:create, :enable, :start]
end

View File

@@ -0,0 +1,49 @@
#!/bin/bash
# Calculate yesterday's date in YYYY-MM-DD format
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
echo "Starting price tracking for $YESTERDAY" >&2
# Fetch and process rates for a fiat currency
get_price_data() {
local currency=$1
local data avg open24 last
data=$(curl -s "https://www.bitstamp.net/api/v2/ticker/btc${currency,,}/")
if [ $? -eq 0 ] && [ ! -z "$data" ]; then
echo "Successfully retrieved ${currency} price data" >&2
open24=$(echo "$data" | jq -r '.open_24')
last=$(echo "$data" | jq -r '.last')
avg=$(( (${open24%.*} + ${last%.*}) / 2 ))
echo $avg
else
echo "ERROR: Failed to retrieve ${currency} price data" >&2
exit 1
fi
}
# Get price data for each currency
usd_avg=$(get_price_data "USD")
eur_avg=$(get_price_data "EUR")
gbp_avg=$(get_price_data "GBP")
# Create JSON
json="{\"EUR\":$eur_avg,\"USD\":$usd_avg,\"GBP\":$gbp_avg}"
echo "Rates: $json" >&2
# PUT in remote storage
response=$(curl -X PUT \
-H "Authorization: Bearer $RS_AUTH" \
-H "Content-Type: application/json" \
-d "$json" \
-w "%{http_code}" \
-s \
-o /dev/null \
"<%= @rs_base_url %>/$YESTERDAY")
if [ "$response" -eq 200 ] || [ "$response" -eq 201 ]; then
echo "Successfully uploaded price data" >&2
else
echo "ERROR: Failed to upload price data. HTTP status: $response" >&2
exit 1
fi

View File

@@ -38,6 +38,7 @@ gandi_api_credentials = data_bag_item('credentials', 'gandi_api')
template "/root/gandi_dns_certbot_hook.sh" do template "/root/gandi_dns_certbot_hook.sh" do
variables access_token: gandi_api_credentials["access_token"] variables access_token: gandi_api_credentials["access_token"]
mode 0700 mode 0700
sensitive true
end end
# Generate a Let's Encrypt cert (only if no cert has been generated before). # Generate a Let's Encrypt cert (only if no cert has been generated before).

View File

@@ -231,7 +231,6 @@ modules:
mod_shared_roster: {} mod_shared_roster: {}
mod_stun_disco: mod_stun_disco:
offer_local_services: false offer_local_services: false
credentials_lifetime: 300
secret: <%= @stun_secret %> secret: <%= @stun_secret %>
services: services:
- -

View File

@@ -1,5 +1,5 @@
node.default["gitea"]["version"] = "1.22.5" node.default["gitea"]["version"] = "1.23.6"
node.default["gitea"]["checksum"] = "ce2c7e4fff3c1e3ed59f5b5e00e3f2d301f012c34e329fccd564bc5129075460" node.default["gitea"]["checksum"] = "fcb76127fec7ba9fba10bfe11d81cdc01888aacb588fc4f29b124bf2ffba883e"
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"

View File

@@ -24,6 +24,7 @@ NAME = gitea
USER = gitea USER = gitea
PASSWD = <%= @postgresql_password %> PASSWD = <%= @postgresql_password %>
SSL_MODE = disable SSL_MODE = disable
MAX_OPEN_CONNS = 20
[repository] [repository]
ROOT = <%= @repository_root_directory %> ROOT = <%= @repository_root_directory %>

View File

@@ -16,7 +16,7 @@ server {
add_header Strict-Transport-Security "max-age=31536000"; add_header Strict-Transport-Security "max-age=31536000";
client_max_body_size 20M; client_max_body_size 121M;
location ~ ^/(avatars|repo-avatars)/.*$ { location ~ ^/(avatars|repo-avatars)/.*$ {
proxy_buffers 1024 8k; proxy_buffers 1024 8k;

View File

@@ -1,4 +1,4 @@
node.default['rskj']['version'] = '5.3.0~jammy' node.default['rskj']['version'] = '7.0.0~jammy'
node.default['rskj']['network'] = 'testnet' node.default['rskj']['network'] = 'testnet'
node.default['rskj']['nginx']['domain'] = nil node.default['rskj']['nginx']['domain'] = nil

View File

@@ -19,6 +19,8 @@ apt_repository 'rskj' do
key '5EED9995C84A49BC02D4F507DF10691F518C7BEA' key '5EED9995C84A49BC02D4F507DF10691F518C7BEA'
end end
apt_package 'openjdk-17-jdk'
apt_package 'rskj' do apt_package 'rskj' do
response_file 'rskj-preseed.cfg.erb' response_file 'rskj-preseed.cfg.erb'
response_file_variables network: node['rskj']['network'] response_file_variables network: node['rskj']['network']

View File

@@ -9,7 +9,7 @@ end
describe package('rskj') do describe package('rskj') do
it { should be_installed } it { should be_installed }
its('version') { should eq '5.3.0~jammy' } its('version') { should eq '7.0.0~jammy' }
end end
describe service('rsk') do describe service('rsk') do

View File

@@ -1,2 +1,10 @@
node.default["strfry"]["ldap_search_dn"] = "ou=kosmos.org,cn=users,dc=kosmos,dc=org" node.default["strfry"]["ldap_search_dn"] = "ou=kosmos.org,cn=users,dc=kosmos,dc=org"
node.default["strfry"]["extras_dir"] = "/opt/strfry" node.default["strfry"]["extras_dir"] = "/opt/strfry"
# node.default["substr"]["repo"] = "https://gitea.kosmos.org/kosmos/substr.git"
# node.default["substr"]["revision"] = "master"
node.default["substr"]["version"] = "nightly"
node.default["substr"]["download_url"] = "https://gitea.kosmos.org/api/packages/kosmos/generic/substr/#{node["substr"]["version"]}/substr_x86_64-unknown-linux-gnu"
node.default["substr"]["workdir"] = "/opt/substr"
node.default["substr"]["port"] = 30023
node.default["substr"]["relay_urls"] = ["ws://localhost:7777"]

View File

@@ -24,7 +24,7 @@ env = {
ldap_bind_dn: ldap_credentials["service_dn"], ldap_bind_dn: ldap_credentials["service_dn"],
ldap_password: ldap_credentials["service_password"], ldap_password: ldap_credentials["service_password"],
ldap_search_dn: node["strfry"]["ldap_search_dn"], ldap_search_dn: node["strfry"]["ldap_search_dn"],
whitelist_pubkeys: node["strfry"]["whitelist_pubkeys"].join(",") whitelist_pubkeys: node["strfry"]["known_pubkeys"].values.join(",")
} }
template "#{extras_dir}/.env" do template "#{extras_dir}/.env" do

View File

@@ -0,0 +1,100 @@
#
# Cookbook:: kosmos_strfry
# Recipe:: substr
#
unless platform?("ubuntu")
raise "This recipe only supports Ubuntu installs at the moment"
end
apt_package "imagemagick"
directory node["substr"]["workdir"] do
owner node["strfry"]["user"]
group node["strfry"]["group"]
mode "0755"
end
if node["substr"]["download_url"]
remote_file '/usr/local/bin/substr' do
source node["substr"]["download_url"]
checksum node["substr"]["checksum"]
mode '0755'
show_progress true
notifies :restart, "service[substr]", :delayed
end
exec_start = "/usr/local/bin/substr"
else
# TODO Install Deno 2
git node["substr"]["workdir"] do
user node["strfry"]["user"]
group node["strfry"]["group"]
repository node['substr']['repo']
revision node['substr']['revision']
action :sync
notifies :restart, "service[substr]", :delayed
end
exec_start = "deno task server"
end
file "#{node["substr"]["workdir"]}/users.yaml" do
mode "0644"
owner node["strfry"]["user"]
group node["strfry"]["group"]
content node["strfry"]["known_pubkeys"].to_yaml
notifies :restart, "service[substr]", :delayed
end
ldap_credentials = Chef::EncryptedDataBagItem.load('credentials', 'dirsrv')
env = {
port: node['substr']['port'],
base_url: "https://#{node["strfry"]["domain"]}",
relay_urls: node['substr']['relay_urls'].join(","),
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"],
}
template "#{node["substr"]["workdir"]}/.env" do
source 'env.erb'
owner node["strfry"]["user"]
group node["strfry"]["group"]
mode 0600
sensitive true
variables config: env
notifies :restart, "service[substr]", :delayed
end
systemd_unit "substr.service" do
content({
Unit: {
Description: "substr for nostr",
Documentation: ["https://gitea.kosmos.org/kosmos/substr"],
},
Service: {
Type: "simple",
User: node["strfry"]["user"],
WorkingDirectory: node["substr"]["workdir"],
ExecStart: exec_start,
Restart: "on-failure",
RestartSec: "5",
ProtectHome: "no",
NoNewPrivileges: "yes",
ProtectSystem: "full"
},
Install: {
WantedBy: "multi-user.target"
}
})
triggers_reload true
action :create
end
service "substr" do
action [:enable, :start]
end

View File

@@ -4,6 +4,12 @@ upstream _strfry {
<% end %> <% end %>
} }
upstream _substr {
<% @upstream_hosts.each do |host| %>
server <%= host %>:30023;
<% end %>
}
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;
@@ -15,6 +21,16 @@ server {
ssl_certificate <%= @ssl_cert %>; ssl_certificate <%= @ssl_cert %>;
ssl_certificate_key <%= @ssl_key %>; ssl_certificate_key <%= @ssl_key %>;
location = /favicon.ico {
alias /var/www/assets.kosmos.org/site/img/favicon.ico;
}
location ~* ^/[@~n]|^/assets {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://_substr;
}
location / { location / {
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;

View File

@@ -29,11 +29,15 @@ server {
ssl_certificate <%= @ssl_cert %>; ssl_certificate <%= @ssl_cert %>;
ssl_certificate_key <%= @ssl_key %>; ssl_certificate_key <%= @ssl_key %>;
location /.well-known/host-meta.json {
add_header 'Access-Control-Allow-Origin' '*';
}
<% if @accounts_url %> <% if @accounts_url %>
location ~ ^/.well-known/(keysend|lnurlp|nostr|openpgpkey|webfinger) { location ~ ^/.well-known/(keysend|lnurlp|nostr|openpgpkey|webfinger) {
proxy_ssl_server_name on; proxy_ssl_server_name on;
proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Host $host;
proxy_pass https://accounts.kosmos.org; proxy_pass <%= @accounts_url %>;
} }
<% end %> <% end %>
} }