From cb068a42d8ae91c76b8c54f6e109fc730489b950 Mon Sep 17 00:00:00 2001 From: ArmchairAncap Date: Mon, 4 Nov 2024 12:03:49 +0800 Subject: [PATCH] Add schematic for v2 in Docker --- README.md | 24 ++++++++++++++---------- haven-tribler.png | Bin 0 -> 29208 bytes 2 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 haven-tribler.png diff --git a/README.md b/README.md index 1858d120b..58bfb194a 100644 --- a/README.md +++ b/README.md @@ -20,18 +20,18 @@ ## xx Network Haven - Tribler Proof-of-Concept -This repository contains several "proof-of-concept" ideas for xx Network Haven and Tribler integrations. +This repository contains several "proof-of-concept" ideas for [xx Network]((https://xx.network)) [Haven](https://haven.xx.network) and [Tribler](https://github.com/Tribler/tribler) integrations. - [v2](https://github.com/armchairancap/xx-tribler-haven/releases) - Haven chat with a Tribler iFrame - [v1](https://github.com/armchairancap/xx-tribler-haven/releases/tag/v1.0) - Tribler with a Haven chat iFrame (source code in [Release v1.0](https://github.com/armchairancap/xx-tribler-haven/releases/tag/v1.0)) v2 is probably more interesting to general users. [This post](https://armchairancap.github.io/blog/2024/10/29/xx-haven-with-tribler#what-integrations-and-why) talks about some advantages and disadvantages of each approach as I see them. -A better way may be to integrate Tribler in Haven by using xxDK directly from Tribler. +A seamless be to natively integrate Haven in Tribler by using xxDK directly from Tribler, but that's beyond my abilities and would require more extensive patching that would also be harder to maintain. ### Haven with Tribler iFrame (v2) -(Right-click and open in new tab for a clearer view.) +(Right-click and open screenshot in new tab for a clearer view.) ![Haven with Tribler iFrame](./xx_screenshot_tribler_child_iframe.png) @@ -41,9 +41,9 @@ A better way may be to integrate Tribler in Haven by using xxDK directly from Tr What does this entail? Just two patches from this repo: -- Add Tribler iframe to Haven (`build/haven/haven-DefaultLayout.tsx.patch`) -- Allow unauthenticated access to localhost and `haven` in Tribler's REST manager (`build/tribler/tribler.patch`) -- Build & run Haven and Tribler on LAN +- Add Tribler iFrame to Haven (`build/haven/haven-DefaultLayout.tsx.patch`) +- Allow unauthenticated access to `localhost` and `haven` in Tribler's REST manager (`build/tribler/tribler.patch`) +- Build & run Haven and Tribler on the same host on LAN #### Run in Docker @@ -68,17 +68,21 @@ tribler-haven latest 8693940f6d6f 9 minutes ago 1.39GB haven-for-tribler latest d637b742a675 14 minutes ago 2.67GB ``` -Run with `cd build/tribler && docker compose up` and access Haven at http://localhost:3100. +Run with `cd build/tribler && docker compose up` and access Haven at http://localhost:3000. Create a strong password when creating Haven identity and remember to [back it up](https://armchairancap.github.io/docs/haven-user-guide/identity#backup-an-identity). There's a sample Docker compose file in the build/tribler directory. -By default - and the patch for Haven has that hardcoded - Tribler API port should be 3100 and the password 'changeme'. In this PoC that's hard-coded into the Haven patch, so if you want to change these you may edit the patches and Docker compose to match whatever password you set and port you want to use. +By default - and the patch for Haven has that hardcoded - Tribler API port is 3100 and the password is 'changeme' (as per upstream). In this PoC that's hard-coded into the Haven patch, so if you want to change these you may edit the patches and Docker compose to match whatever password you set and port you want to use. If you decide to change the Tribler API key, for example, you can do it in Tribler UI, then quit Tribler, change the key in compose.yaml, rebuild Tribler container and start Tribler. That should be enough. -For more advanced Docker compose scenarios (TLS, reverse proxy, etc.) you can consider Docker compose recipes I have published (see the Resources section). +Tribler can be accessed directly from localhost for convenience, but in this approach default approach is to access it from Haven's iFrame. Haven itself could bind localhost (if you're running on your box) or external IP (if you're running the stack on a small ARM64 computer, for example). + +![Haven-Tribler in containers](./haven-tribler.png) + +HTTPS isn't required here, but you could access everything through a reverse HTTPS proxy (Caddy, NGINX, etc.). For these more advanced Docker compose scenarios (TLS, reverse proxy, etc.) you can consider Docker compose recipes I have published (see the Resources section). #### Run outside of Docker @@ -234,7 +238,7 @@ Other ways: ### License -Tribler uses the strict GPL 3.0 license so Tribler patch files such as `tribler.*.patch` that modify files from the Tribler repo are released under the same license. +Tribler uses the GPL 3.0 license, so Tribler patch files such as `tribler.*.patch` that modify files from the Tribler repo are released under the same license, well as the modified Tribler Dockerfile. The rest is released under the permissive MIT License. diff --git a/haven-tribler.png b/haven-tribler.png new file mode 100644 index 0000000000000000000000000000000000000000..2e9f2acb79fcfc8f11f099aabf9599442a616835 GIT binary patch literal 29208 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 literal 0 HcmV?d00001