SharedInboxController
Request
GET Parameters
None
POST Parameters
None
Uploaded Files
None
Request Attributes
Key | Value |
---|---|
_controller | "App\Controller\ActivityPub\SharedInboxController" |
_firewall_context | "security.firewall.map.context.main" |
_route | "ap_shared_inbox" |
_route_params | [] |
_security_firewall_run | "_security_main" |
_stopwatch_token | "8db94f" |
Request Headers
Header | Value |
---|---|
accept | "*/*" |
accept-encoding | "gzip" |
content-length | "22835" |
content-type | "application/activity+json" |
date | "Sat, 19 Apr 2025 08:21:51 GMT" |
digest | "SHA-256=ofHG9b4f49kCNJ78RPUYo0X+wxe+vJ9PqFHlyMcfKRI=" |
host | "kbin.spritesserver.nl" |
signature | "keyId="https://lemmy.world/c/asklemmy#main-key",algorithm="hs2019",headers="(request-target) content-type date digest host",signature="KDkI2UokpRNtDvMo3/0hYhwwyyW+m0FVLnNkLiOz4KUad1Y/E/lKE5WoXn71EJeYTE9LwGpWa7SpimN90vYmMX7ACaKlAePdFL8m4ESR/IvF8GjsKMI4aI3zG07DRUgYLiugvC+03gZ6W1odLAzH+A0Gv772uhEa7Jw6Rfom5cF+06zU8jejmfvOs1XkJwxH+5dJ54Ojt2NoEp0KknAPmZCvo4IRgiaeodEF/IB/UPixgqAZfxHmcsdAtR3ZV7A5wy52CvHIfJ6YIvcEgEJG++xB2i8tiWjkPmS1rrCuSdmaK+ZCYBqQrR0mNfgdxd9o8TzBi3uco0LJvW+1IN/1Ww=="" |
user-agent | "Lemmy/0.19.10; +https://lemmy.world" |
x-php-ob-level | "1" |
Request Content
Pretty
{ "@context": [ "https:\/\/join-lemmy.org\/context.json", "https:\/\/www.w3.org\/ns\/activitystreams" ], "actor": "https:\/\/lemmy.world\/c\/asklemmy", "to": [ "https:\/\/www.w3.org\/ns\/activitystreams#Public" ], "object": { "id": "https:\/\/discuss.tchncs.de\/activities\/update\/e5d063d6-abc1-44f5-ae4b-21757cd71567", "actor": "https:\/\/discuss.tchncs.de\/u\/dependencyinjection", "@context": [ "https:\/\/join-lemmy.org\/context.json", "https:\/\/www.w3.org\/ns\/activitystreams" ], "to": [ "https:\/\/www.w3.org\/ns\/activitystreams#Public" ], "object": { "type": "Note", "id": "https:\/\/discuss.tchncs.de\/comment\/17864637", "attributedTo": "https:\/\/discuss.tchncs.de\/u\/dependencyinjection", "to": [ "https:\/\/www.w3.org\/ns\/activitystreams#Public" ], "cc": [ "https:\/\/lemmy.world\/c\/asklemmy", "https:\/\/lemmy.world\/u\/P1nkman" ], "content": "<p>I am going to be pasting a set of commands to get docker and docker compose set up, but please be wary of people giving commands to run in the terminal. You could use the information I\u2019ve provided to help you find guides to confirm that no weird commands, but I copied this from my guide I use whenever I set up a new VM to use docker.<\/p>\n<p>So the commands below add any dependencies for docker, adds the GPG key to verify and then installs docker and docker compose. I also set up a docker user add them to the docker group so I don\u2019t need to use sudo to run.<\/p>\n<p>I then use docker to create a portainer instance. Portainer allows you to use a webUi to see what you have running and stop start any of your services from there.<\/p>\n<p>After this I have provided a docker compose file which would be named docker-compose.yml. Yaml sucks as it constantly moans about spacing, but essentially you want to use spaces and not tabs and each new line would be indented two spaces unless it\u2019s a sub part of the section above then it would be two more spaces etc.<\/p>\n<p>This docker compose might or might not be what you need, this one first sets up gluetun, which is a VPN layer which I can route other services through as you don\u2019t want to torrent from your IP.<\/p>\n<p>So gluetun is set up using ProtonVPN and you pass the username and password. Username has +pmp for port forwarding.<\/p>\n<p>Then each service under here can choose to use the services\/gluetun or bridge network. The former is for the VPN the latter is routed through regular network. Notice how anything routed through the VPN has the ports defined in the VPN service.<\/p>\n<p>The others things you would need to be conscious of is the paths I have used for \/mnt\/vault\/* as these are network attached storage from TrueNAS. Depending on how you want to store things you\u2019ll need to just add the paths to these. The paths look weird but the part before the colon is where it is on your machine and the part after is what it is called inside that container.<\/p>\n<p>You\u2019ll notice that Plex requires a claim key but you can google how to find that.<\/p>\n<p>This isn\u2019t going to get you up and running and you will likely run in to permission errors and other errors along the way. I would suggest coming back here with your errors or giving them to ChatGPT, just don\u2019t blindly copy commands if you don\u2019t know what they do.<\/p>\n<p>Once your docker compose is complete you can run docker compose up -d to spin it up. Then in portainer you can see all the containers and then login to each and do the setup. Docker compose down to stop them all.<\/p>\n<p>When I set this up I did the gluetun and then Radarr. Get that working and then add your next thing and then the next and so on until you have what you want.<\/p>\n<p>As I said this isn\u2019t a complete solution and you will run into roadblocks, but that\u2019s the fun for me and I am happy to help when you get stuck along the way.<\/p>\n<p>Edit: A few more things you should know. The volumes section. The ones starting with .\/ means they\u2019re in the directory where the docker compose file is. And as I have perms to 1001 you would need to ensure that is the PUID of the docker user and then for each folder, plex for instance you can run \u201csudo chown -R 1001:1001 .\/plex\u201d and \u201csudo chmod-R 755 .\/plex\u201d which is change ownership and changes permissions for that directory.<\/p>\n<p>### Docker<\/p>\n<p>Install dependencies \u00a0<\/p>\n<p>`sudo apt install apt-transport-https ca-certificates curl software-properties-common -y`<\/p>\n<p>Add the Docker GPG key to the server\u2019s keyring \u00a0<\/p>\n<p>`sudo curl -fsSL <a href=\"https:\/\/download.docker.com\/linux\/ubuntu\/gpg\" rel=\"nofollow\">https:\/\/download.docker.com\/%E2%80%8Blinux\/ubuntu\/gpg<\/a> -o \/etc\/apt\/keyrings\/docker.asc`<\/p>\n<p>Add the latest Docker repository to the APT sources \u00a0<\/p>\n<p>`echo \u201cdeb [arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/\u200bdocker.asc] <a href=\"https:\/\/download.docker.com\/linux\/ubuntu\" rel=\"nofollow\">https:\/\/download.docker.com\/%E2%80%8Blinux\/ubuntu<\/a> $(. \/etc\/os-release && echo \u201c$VERSION_CODENAME\u201d) stable\u201d | sudo tee \/etc\/apt\/sources.list.d\/\u200bdocker.list > \/dev\/null`<\/p>\n<p>Update the server package index. \u00a0<\/p>\n<p>`sudo apt update`<\/p>\n<p>Install Docker \u00a0<\/p>\n<p>`sudo apt-get install docker-ce docker-ce-cli <a href=\"http:\/\/containerd.io\/\" rel=\"nofollow\">containerd.io<\/a> docker-buildx-plugin docker-compose-plugin`<\/p>\n<p>Verify \u00a0<\/p>\n<p>`sudo docker --version`<\/p>\n<p>Enable the Docker system service to start automatically at boot time. \u00a0<\/p>\n<p>`sudo systemctl enable docker`<\/p>\n<p>View the Docker service status and verify that it\u2019s running \u00a0<\/p>\n<p>`sudo systemctl status docker`<\/p>\n<p>#### Install docker compose<\/p>\n<p>`sudo apt install docker-compose-plugin -y`<\/p>\n<p>Verifiy the installation \u00a0<\/p>\n<p>`docker compose version`<\/p>\n<p>#### Portainer<\/p>\n<p>Create a Volume for Portainer Data \u00a0<\/p>\n<p>`docker volume create portainer_data`<\/p>\n<p>Deploy Portainer as a Container<\/p>\n<p>```<\/p>\n<p>docker run -d \\<\/p>\n<p>\u00a0 --name=portainer \\<\/p>\n<p>\u00a0 --restart=always \\<\/p>\n<p>\u00a0 -p 8000:8000 \\<\/p>\n<p>\u00a0 -p 9443:9443 \\<\/p>\n<p>\u00a0 -v \/var\/run\/docker.sock:\/var\/run\/\u200bdocker.sock \\<\/p>\n<p>\u00a0 -v portainer_data:\/data \\<\/p>\n<p>\u00a0 portainer\/portainer-ce:latest<\/p>\n<p>```<\/p>\n<p>Acess Portainer \u00a0<\/p>\n<p>`https:\/\/your-server-ip:9443`<\/p>\n<p>#### Running Docker without Sudo<\/p>\n<p>Add your user to the docker group:<\/p>\n<p>`sudo usermod -aG docker $USER`<\/p>\n<p>Log out and log back in, or restart your system.<\/p>\n<p>Verify by running:<\/p>\n<p>`docker ps`<\/p>\n<p>Below is the docker-compose.yml file.<\/p>\n<p>services:<br \/>\n\u00a0 gluetun:<br \/>\n\u00a0 \u00a0 image: qmcgaw\/gluetun<br \/>\n\u00a0 \u00a0 container_name: protonvpn<br \/>\n\u00a0 \u00a0 cap_add:<br \/>\n\u00a0 \u00a0 \u00a0 - NET_ADMIN<br \/>\n\u00a0 \u00a0 devices:<br \/>\n\u00a0 \u00a0 \u00a0 - \/dev\/net\/tun:\/dev\/net\/tun<br \/>\n\u00a0 \u00a0 ports: # These are the qBittorrent ports, I like to use random ports and not the default ports 49152<br \/>\n\u00a0 \u00a0 \u00a0 - 49893:49893 # This is for the qBittorrent WebUI Port<br \/>\n\u00a0 \u00a0 \u00a0 - 6881:6881 # Listening port for TCP<br \/>\n\u00a0 \u00a0 \u00a0 - 6881:6881\/udp # Listening port for UDP<br \/>\n\u00a0 \u00a0 \u00a0 - 7878:7878 # Listening port for Radarr<br \/>\n\u00a0 \u00a0 \u00a0 - 8989:8989 # Listening port for Sonarr<br \/>\n\u00a0 \u00a0 \u00a0 - 9696:9696 # Listening port for Proxlarr<br \/>\n\u00a0 \u00a0 environment:<br \/>\n\u00a0 \u00a0 \u00a0 - VPN_SERVICE_PROVIDER=protonvpn<br \/>\n\u00a0 \u00a0 \u00a0 - OPENVPN_USER=USERNAME+pmp # REPLACE with your OpenVPN username (+pmp for port forwarding)<br \/>\n\u00a0 \u00a0 \u00a0 - OPENVPN_PASSWORD=PASSWORD # REPLACE with your OpenVPN password<br \/>\n\u00a0 \u00a0 \u00a0 - VPN_PORT_FORWARDING=on<br \/>\n\u00a0 \u00a0 \u00a0 - SERVER_COUNTRIES=France # These countries must support P2P<br \/>\n\u00a0 \u00a0 volumes:<br \/>\n\u00a0 \u00a0 \u00a0 - .\/gluetun:\/gluetun<br \/>\n\u00a0 \u00a0 restart: unless-stopped<br \/>\n<br \/>\n\u00a0 qbittorrent:<br \/>\n\u00a0 \u00a0 image:\u00a0<a href=\"http:\/\/lscr.io\/linuxserver\/qbittorrent:latest\" rel=\"nofollow\">lscr.io\/linuxserver\/\u200bqbittorrent:latest<\/a><br \/>\n\u00a0 \u00a0 container_name: qbittorrent<br \/>\n\u00a0 \u00a0 environment:<br \/>\n\u00a0 \u00a0 \u00a0 - PUID=1001 # to find your current ID just type \u201cid\u201d in the terminal<br \/>\n\u00a0 \u00a0 \u00a0 - PGID=1001 # to find your current group ID just type \u201cid\u201d in the terminal<br \/>\n\u00a0 \u00a0 \u00a0 - TZ=Europe\/London<br \/>\n\u00a0 \u00a0 \u00a0 - WEBUI_PORT=49893 # Must match the port used on gluetun for the WebUI<br \/>\n\u00a0 \u00a0 \u00a0 - TORRENTING_PORT=6881<br \/>\n\u00a0 \u00a0 volumes:<br \/>\n\u00a0 \u00a0 \u00a0 - .\/qbittorent\/config:\/config # this will create the config folder in the same folder as the yml file<br \/>\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/Downloads:\/\u200bdownloads # adjust to your desired download directory<br \/>\n\u00a0 \u00a0 network_mode: \u201cservice:gluetun\u201d # must match the container name of gluetun<br \/>\n\u00a0 \u00a0 restart: unless-stopped<br \/>\n<br \/>\n\u00a0 prowlarr:<br \/>\n\u00a0 \u00a0 image:\u00a0<a href=\"http:\/\/lscr.io\/linuxserver\/prowlarr:latest\" rel=\"nofollow\">lscr.io\/linuxserver\/prowlarr:\u200blatest<\/a><br \/>\n\u00a0 \u00a0 container_name: prowlarr<br \/>\n\u00a0 \u00a0 depends_on:<br \/>\n\u00a0 \u00a0 \u00a0 - gluetun<br \/>\n\u00a0 \u00a0 environment:<br \/>\n\u00a0 \u00a0 \u00a0 - PUID=1001<br \/>\n\u00a0 \u00a0 \u00a0 - PGID=1001<br \/>\n\u00a0 \u00a0 \u00a0 - TZ=Europe\/London<br \/>\n\u00a0 \u00a0 user: \u201c1001:1001\u201d<br \/>\n\u00a0 \u00a0 volumes:<br \/>\n\u00a0 \u00a0 \u00a0 - .\/prowlarr\/config:\/config<br \/>\n\u00a0 \u00a0 network_mode: \u201cservice:gluetun\u201d<br \/>\n\u00a0 \u00a0 restart: unless-stopped<br \/>\n<br \/>\n\u00a0 radarr:<br \/>\n\u00a0 \u00a0 image:\u00a0<a href=\"http:\/\/lscr.io\/linuxserver\/radarr\" rel=\"nofollow\">lscr.io\/linuxserver\/radarr<\/a><br \/>\n\u00a0 \u00a0 container_name: radarr<br \/>\n\u00a0 \u00a0 depends_on:<br \/>\n\u00a0 \u00a0 \u00a0 - gluetun<br \/>\n\u00a0 \u00a0 environment:<br \/>\n\u00a0 \u00a0 \u00a0 - PUID=1001<br \/>\n\u00a0 \u00a0 \u00a0 - PGID=1001<br \/>\n\u00a0 \u00a0 \u00a0 - TZ=Europe\/London<br \/>\n\u00a0 \u00a0 user: \u201c1001:1001\u201d<br \/>\n\u00a0 \u00a0 volumes:<br \/>\n\u00a0 \u00a0 \u00a0 - .\/radarr\/config:\/config<br \/>\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/Downloads:\/\u200bdownloads<br \/>\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/Movies:\/movies<br \/>\n\u00a0 \u00a0 network_mode: \u201cservice:gluetun\u201d<br \/>\n\u00a0 \u00a0 restart: unless-stopped<br \/>\n<br \/>\n\u00a0 sonarr:<br \/>\n\u00a0 \u00a0 image:\u00a0<a href=\"http:\/\/lscr.io\/linuxserver\/sonarr\" rel=\"nofollow\">lscr.io\/linuxserver\/sonarr<\/a><br \/>\n\u00a0 \u00a0 container_name: sonarr<br \/>\n\u00a0 \u00a0 depends_on:<br \/>\n\u00a0 \u00a0 \u00a0 - gluetun<br \/>\n\u00a0 \u00a0 environment:<br \/>\n\u00a0 \u00a0 \u00a0 - PUID=1001<br \/>\n\u00a0 \u00a0 \u00a0 - PGID=1001<br \/>\n\u00a0 \u00a0 \u00a0 - TZ=Europe\/London<br \/>\n\u00a0 \u00a0 user: \u201c1001:1001\u201d<br \/>\n\u00a0 \u00a0 volumes:<br \/>\n\u00a0 \u00a0 \u00a0 - .\/sonarr\/config:\/config<br \/>\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/Downloads:\/\u200bdownloads<br \/>\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/TV:\/tv<br \/>\n\u00a0 \u00a0 network_mode: \u201cservice:gluetun\u201d<br \/>\n\u00a0 \u00a0 restart: unless-stopped<br \/>\n<br \/>\n\u00a0 jellyfin:<br \/>\n\u00a0 \u00a0 image: jellyfin\/jellyfin<br \/>\n\u00a0 \u00a0 container_name: jellyfin<br \/>\n\u00a0 \u00a0 environment:<br \/>\n\u00a0 \u00a0 \u00a0 - PUID=1001<br \/>\n\u00a0 \u00a0 \u00a0 - PGID=1001<br \/>\n\u00a0 \u00a0 \u00a0 - TZ=Europe\/London<br \/>\n\u00a0 \u00a0 volumes:<br \/>\n\u00a0 \u00a0 \u00a0 - .\/jellyfin\/config:\/config<br \/>\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/Movies:\/movies<br \/>\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/TV:\/tv<br \/>\n\u00a0 \u00a0 restart: unless-stopped<br \/>\n\u00a0 \u00a0 ports:<br \/>\n\u00a0 \u00a0 \u00a0 - 8096:8096<br \/>\n\u00a0 \u00a0 network_mode: \u201cbridge\u201d<br \/>\n<br \/>\n\u00a0 plex:<br \/>\n\u00a0 \u00a0 image:\u00a0<a href=\"http:\/\/lscr.io\/linuxserver\/plex:latest\" rel=\"nofollow\">lscr.io\/linuxserver\/plex:\u200blatest<\/a><br \/>\n\u00a0 \u00a0 container_name: plex<br \/>\n\u00a0 \u00a0 network_mode: host<br \/>\n\u00a0 \u00a0 environment:<br \/>\n\u00a0 \u00a0 \u00a0 - PUID=1001<br \/>\n\u00a0 \u00a0 \u00a0 - PGID=1001<br \/>\n\u00a0 \u00a0 \u00a0 - TZ=Europe\/London<br \/>\n\u00a0 \u00a0 \u00a0 - VERSION=docker<br \/>\n\u00a0 \u00a0 \u00a0 - PLEX_CLAIM=CLAIMKEY<br \/>\n\u00a0 \u00a0 \u00a0 - NVIDIA_VISIBLE_DEVICES=all<br \/>\n\u00a0 \u00a0 volumes:<br \/>\n\u00a0 \u00a0 \u00a0 - .\/plex:\/config<br \/>\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/Movies:\/movies<br \/>\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/TV:\/tv<br \/>\n\u00a0 \u00a0 deploy:<br \/>\n\u00a0 \u00a0 \u00a0 resources:<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 reservations:<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 devices:<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 - driver: nvidia<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 count: all<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 capabilities: [gpu]<br \/>\n\u00a0 \u00a0 runtime: nvidia<br \/>\n\u00a0 \u00a0 restart: unless-stopped<\/p>\n", "inReplyTo": "https:\/\/lemmy.world\/comment\/16542240", "mediaType": "text\/html", "source": { "content": "I am going to be pasting a set of commands to get docker and docker compose set up, but please be wary of people giving commands to run in the terminal. You could use the information I\u2019ve provided to help you find guides to confirm that no weird commands, but I copied this from my guide I use whenever I set up a new VM to use docker. \n\nSo the commands below add any dependencies for docker, adds the GPG key to verify and then installs docker and docker compose. I also set up a docker user add them to the docker group so I don\u2019t need to use sudo to run. \n\nI then use docker to create a portainer instance. Portainer allows you to use a webUi to see what you have running and stop start any of your services from there. \n\nAfter this I have provided a docker compose file which would be named docker-compose.yml. Yaml sucks as it constantly moans about spacing, but essentially you want to use spaces and not tabs and each new line would be indented two spaces unless it\u2019s a sub part of the section above then it would be two more spaces etc. \n\nThis docker compose might or might not be what you need, this one first sets up gluetun, which is a VPN layer which I can route other services through as you don\u2019t want to torrent from your IP. \n\nSo gluetun is set up using ProtonVPN and you pass the username and password. Username has +pmp for port forwarding. \n\nThen each service under here can choose to use the services\/gluetun or bridge network. The former is for the VPN the latter is routed through regular network. Notice how anything routed through the VPN has the ports defined in the VPN service. \n\nThe others things you would need to be conscious of is the paths I have used for \/mnt\/vault\/* as these are network attached storage from TrueNAS. Depending on how you want to store things you\u2019ll need to just add the paths to these. The paths look weird but the part before the colon is where it is on your machine and the part after is what it is called inside that container. \n\nYou\u2019ll notice that Plex requires a claim key but you can google how to find that. \n\nThis isn\u2019t going to get you up and running and you will likely run in to permission errors and other errors along the way. I would suggest coming back here with your errors or giving them to ChatGPT, just don\u2019t blindly copy commands if you don\u2019t know what they do. \n\nOnce your docker compose is complete you can run docker compose up -d to spin it up. Then in portainer you can see all the containers and then login to each and do the setup. Docker compose down to stop them all. \n\nWhen I set this up I did the gluetun and then Radarr. Get that working and then add your next thing and then the next and so on until you have what you want. \n\nAs I said this isn\u2019t a complete solution and you will run into roadblocks, but that\u2019s the fun for me and I am happy to help when you get stuck along the way. \n\nEdit: A few more things you should know. The volumes section. The ones starting with .\/ means they\u2019re in the directory where the docker compose file is. And as I have perms to 1001 you would need to ensure that is the PUID of the docker user and then for each folder, plex for instance you can run \u201csudo chown -R 1001:1001 .\/plex\u201d and \u201csudo chmod-R 755 .\/plex\u201d which is change ownership and changes permissions for that directory. \n\n\n\\### Docker\n\nInstall dependencies \u00a0\n\n\\`sudo apt install apt-transport-https ca-certificates curl software-properties-common -y\\`\n\n\n\nAdd the Docker GPG key to the server's keyring \u00a0\n\n\\`sudo curl -fsSL [https:\/\/download.docker.com\/%E2%80%8Blinux\/ubuntu\/gpg](https:\/\/download.docker.com\/linux\/ubuntu\/gpg) -o \/etc\/apt\/keyrings\/docker.asc\\`\n\n\n\nAdd the latest Docker repository to the APT sources \u00a0\n\n\\`echo \"deb \\[arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/\u200bdocker.asc] [https:\/\/download.docker.com\/%E2%80%8Blinux\/ubuntu](https:\/\/download.docker.com\/linux\/ubuntu) $(. \/etc\/os-release && echo \"$VERSION\\_CODENAME\") stable\" | sudo tee \/etc\/apt\/sources.list.d\/\u200bdocker.list > \/dev\/null\\`\n\n\n\nUpdate the server package index. \u00a0\n\n\\`sudo apt update\\`\n\n\n\nInstall Docker \u00a0\n\n\\`sudo apt-get install docker-ce docker-ce-cli [containerd.io](http:\/\/containerd.io\/) docker-buildx-plugin docker-compose-plugin\\`\n\n\n\nVerify \u00a0\n\n\\`sudo docker --version\\`\n\n\n\nEnable the Docker system service to start automatically at boot time. \u00a0\n\n\\`sudo systemctl enable docker\\`\n\n\n\nView the Docker service status and verify that it's running \u00a0\n\n\\`sudo systemctl status docker\\`\n\n\n\n\\#### Install docker compose\n\n\n\n\\`sudo apt install docker-compose-plugin -y\\`\n\n\n\nVerifiy the installation \u00a0\n\n\\`docker compose version\\`\n\n\n\n\\#### Portainer\n\n\n\nCreate a Volume for Portainer Data \u00a0\n\n\\`docker volume create portainer\\_data\\`\n\n\n\nDeploy Portainer as a Container\n\n\n\n\\`\\`\\`\n\ndocker run -d \\\\\n\n\u00a0 --name=portainer \\\\\n\n\u00a0 --restart=always \\\\\n\n\u00a0 -p 8000:8000 \\\\\n\n\u00a0 -p 9443:9443 \\\\\n\n\u00a0 -v \/var\/run\/docker.sock:\/var\/run\/\u200bdocker.sock \\\\\n\n\u00a0 -v portainer\\_data:\/data \\\\\n\n\u00a0 portainer\/portainer-ce:latest\n\n\\`\\`\\`\n\n\n\nAcess Portainer \u00a0\n\n\\`https\\:\/\/your-server-ip:9443\\`\n\n\n\n\\#### Running Docker without Sudo\n\n\n\nAdd your user to the docker group:\n\n\n\n\\`sudo usermod -aG docker $USER\\`\n\n\n\nLog out and log back in, or restart your system.\n\n\n\nVerify by running:\n\n\n\n\\`docker ps\\`\n\nBelow is the docker-compose.yml file. \n\nservices:\\\n\u00a0 gluetun:\\\n\u00a0 \u00a0 image: qmcgaw\/gluetun\\\n\u00a0 \u00a0 container\\_name: protonvpn\\\n\u00a0 \u00a0 cap\\_add:\\\n\u00a0 \u00a0 \u00a0 - NET\\_ADMIN\\\n\u00a0 \u00a0 devices:\\\n\u00a0 \u00a0 \u00a0 - \/dev\/net\/tun:\/dev\/net\/tun\\\n\u00a0 \u00a0 ports: # These are the qBittorrent ports, I like to use random ports and not the default ports 49152\\\n\u00a0 \u00a0 \u00a0 - 49893:49893 # This is for the qBittorrent WebUI Port\\\n\u00a0 \u00a0 \u00a0 - 6881:6881 # Listening port for TCP\\\n\u00a0 \u00a0 \u00a0 - 6881:6881\/udp # Listening port for UDP\\\n\u00a0 \u00a0 \u00a0 - 7878:7878 # Listening port for Radarr\\\n\u00a0 \u00a0 \u00a0 - 8989:8989 # Listening port for Sonarr\\\n\u00a0 \u00a0 \u00a0 - 9696:9696 # Listening port for Proxlarr\\\n\u00a0 \u00a0 environment:\\\n\u00a0 \u00a0 \u00a0 - VPN\\_SERVICE\\_PROVIDER=protonvpn\\\n\u00a0 \u00a0 \u00a0 - OPENVPN\\_USER=USERNAME+pmp # REPLACE with your OpenVPN username (+pmp for port forwarding)\\\n\u00a0 \u00a0 \u00a0 - OPENVPN\\_PASSWORD=PASSWORD # REPLACE with your OpenVPN password\\\n\u00a0 \u00a0 \u00a0 - VPN\\_PORT\\_FORWARDING=on\\\n\u00a0 \u00a0 \u00a0 - SERVER\\_COUNTRIES=France # These countries must support P2P\\\n\u00a0 \u00a0 volumes:\\\n\u00a0 \u00a0 \u00a0 - .\/gluetun:\/gluetun\\\n\u00a0 \u00a0 restart: unless-stopped\\\n\\\n\u00a0 qbittorrent:\\\n\u00a0 \u00a0 image:\u00a0[lscr.io\/linuxserver\/\u200bqbittorrent:latest](http:\/\/lscr.io\/linuxserver\/qbittorrent:latest)\\\n\u00a0 \u00a0 container\\_name: qbittorrent\\\n\u00a0 \u00a0 environment:\\\n\u00a0 \u00a0 \u00a0 - PUID=1001 # to find your current ID just type \"id\" in the terminal\\\n\u00a0 \u00a0 \u00a0 - PGID=1001 # to find your current group ID just type \"id\" in the terminal\\\n\u00a0 \u00a0 \u00a0 - TZ=Europe\/London\\\n\u00a0 \u00a0 \u00a0 - WEBUI\\_PORT=49893 # Must match the port used on gluetun for the WebUI\\\n\u00a0 \u00a0 \u00a0 - TORRENTING\\_PORT=6881\\\n\u00a0 \u00a0 volumes:\\\n\u00a0 \u00a0 \u00a0 - .\/qbittorent\/config:\/config # this will create the config folder in the same folder as the yml file\\\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/Downloads\\:\/\u200bdownloads # adjust to your desired download directory\\\n\u00a0 \u00a0 network\\_mode: \"service:gluetun\" # must match the container name of gluetun\\\n\u00a0 \u00a0 restart: unless-stopped\\\n\\\n\u00a0 prowlarr:\\\n\u00a0 \u00a0 image:\u00a0[lscr.io\/linuxserver\/prowlarr:\u200blatest](http:\/\/lscr.io\/linuxserver\/prowlarr:latest)\\\n\u00a0 \u00a0 container\\_name: prowlarr\\\n\u00a0 \u00a0 depends\\_on:\\\n\u00a0 \u00a0 \u00a0 - gluetun\\\n\u00a0 \u00a0 environment:\\\n\u00a0 \u00a0 \u00a0 - PUID=1001\\\n\u00a0 \u00a0 \u00a0 - PGID=1001\\\n\u00a0 \u00a0 \u00a0 - TZ=Europe\/London\\\n\u00a0 \u00a0 user: \"1001:1001\"\\\n\u00a0 \u00a0 volumes:\\\n\u00a0 \u00a0 \u00a0 - .\/prowlarr\/config:\/config\\\n\u00a0 \u00a0 network\\_mode: \"service:gluetun\"\\\n\u00a0 \u00a0 restart: unless-stopped\\\n\\\n\u00a0 radarr:\\\n\u00a0 \u00a0 image:\u00a0[lscr.io\/linuxserver\/radarr](http:\/\/lscr.io\/linuxserver\/radarr)\\\n\u00a0 \u00a0 container\\_name: radarr\\\n\u00a0 \u00a0 depends\\_on:\\\n\u00a0 \u00a0 \u00a0 - gluetun\\\n\u00a0 \u00a0 environment:\\\n\u00a0 \u00a0 \u00a0 - PUID=1001\\\n\u00a0 \u00a0 \u00a0 - PGID=1001\\\n\u00a0 \u00a0 \u00a0 - TZ=Europe\/London\\\n\u00a0 \u00a0 user: \"1001:1001\"\\\n\u00a0 \u00a0 volumes:\\\n\u00a0 \u00a0 \u00a0 - .\/radarr\/config:\/config\\\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/Downloads\\:\/\u200bdownloads\\\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/Movies\\:\/movies\\\n\u00a0 \u00a0 network\\_mode: \"service:gluetun\"\\\n\u00a0 \u00a0 restart: unless-stopped\\\n\\\n\u00a0 sonarr:\\\n\u00a0 \u00a0 image:\u00a0[lscr.io\/linuxserver\/sonarr](http:\/\/lscr.io\/linuxserver\/sonarr)\\\n\u00a0 \u00a0 container\\_name: sonarr\\\n\u00a0 \u00a0 depends\\_on:\\\n\u00a0 \u00a0 \u00a0 - gluetun\\\n\u00a0 \u00a0 environment:\\\n\u00a0 \u00a0 \u00a0 - PUID=1001\\\n\u00a0 \u00a0 \u00a0 - PGID=1001\\\n\u00a0 \u00a0 \u00a0 - TZ=Europe\/London\\\n\u00a0 \u00a0 user: \"1001:1001\"\\\n\u00a0 \u00a0 volumes:\\\n\u00a0 \u00a0 \u00a0 - .\/sonarr\/config:\/config\\\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/Downloads\\:\/\u200bdownloads\\\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/TV:\/tv\\\n\u00a0 \u00a0 network\\_mode: \"service:gluetun\"\\\n\u00a0 \u00a0 restart: unless-stopped\\\n\\\n\u00a0 jellyfin:\\\n\u00a0 \u00a0 image: jellyfin\/jellyfin\\\n\u00a0 \u00a0 container\\_name: jellyfin\\\n\u00a0 \u00a0 environment:\\\n\u00a0 \u00a0 \u00a0 - PUID=1001\\\n\u00a0 \u00a0 \u00a0 - PGID=1001\\\n\u00a0 \u00a0 \u00a0 - TZ=Europe\/London\\\n\u00a0 \u00a0 volumes:\\\n\u00a0 \u00a0 \u00a0 - .\/jellyfin\/config:\/config\\\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/Movies\\:\/movies\\\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/TV:\/tv\\\n\u00a0 \u00a0 restart: unless-stopped\\\n\u00a0 \u00a0 ports:\\\n\u00a0 \u00a0 \u00a0 - 8096:8096\\\n\u00a0 \u00a0 network\\_mode: \"bridge\"\\\n\\\n\u00a0 plex:\\\n\u00a0 \u00a0 image:\u00a0[lscr.io\/linuxserver\/plex:\u200blatest](http:\/\/lscr.io\/linuxserver\/plex:latest)\\\n\u00a0 \u00a0 container\\_name: plex\\\n\u00a0 \u00a0 network\\_mode: host\\\n\u00a0 \u00a0 environment:\\\n\u00a0 \u00a0 \u00a0 - PUID=1001\\\n\u00a0 \u00a0 \u00a0 - PGID=1001\\\n\u00a0 \u00a0 \u00a0 - TZ=Europe\/London\\\n\u00a0 \u00a0 \u00a0 - VERSION=docker\\\n\u00a0 \u00a0 \u00a0 - PLEX\\_CLAIM=CLAIMKEY\\\n\u00a0 \u00a0 \u00a0 - NVIDIA\\_VISIBLE\\_DEVICES=all\\\n\u00a0 \u00a0 volumes:\\\n\u00a0 \u00a0 \u00a0 - .\/plex:\/config\\\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/Movies\\:\/movies\\\n\u00a0 \u00a0 \u00a0 - \/mnt\/vault\/TV:\/tv\\\n\u00a0 \u00a0 deploy:\\\n\u00a0 \u00a0 \u00a0 resources:\\\n\u00a0 \u00a0 \u00a0 \u00a0 reservations:\\\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 devices:\\\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 - driver: nvidia\\\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 count: all\\\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 capabilities: \\[gpu]\\\n\u00a0 \u00a0 runtime: nvidia\\\n\u00a0 \u00a0 restart: unless-stopped", "mediaType": "text\/markdown" }, "published": "2025-04-19T07:46:14.070623Z", "updated": "2025-04-19T08:21:08.840299Z", "tag": [ { "href": "https:\/\/lemmy.world\/u\/P1nkman", "name": "@P1nkman@lemmy.world", "type": "Mention" } ], "distinguished": false, "audience": "https:\/\/lemmy.world\/c\/asklemmy", "attachment": [] }, "cc": [ "https:\/\/lemmy.world\/c\/asklemmy", "https:\/\/lemmy.world\/u\/P1nkman" ], "tag": [ { "href": "https:\/\/lemmy.world\/u\/P1nkman", "name": "@P1nkman@lemmy.world", "type": "Mention" } ], "type": "Update", "audience": "https:\/\/lemmy.world\/c\/asklemmy" }, "cc": [ "https:\/\/lemmy.world\/c\/asklemmy\/followers" ], "type": "Announce", "id": "https:\/\/lemmy.world\/activities\/announce\/update\/9153ed9c-6646-43dd-9c37-648bb3c1c0ab" }
Raw
{"@context":["https://join-lemmy.org/context.json","https://www.w3.org/ns/activitystreams"],"actor":"https://lemmy.world/c/asklemmy","to":["https://www.w3.org/ns/activitystreams#Public"],"object":{"id":"https://discuss.tchncs.de/activities/update/e5d063d6-abc1-44f5-ae4b-21757cd71567","actor":"https://discuss.tchncs.de/u/dependencyinjection","@context":["https://join-lemmy.org/context.json","https://www.w3.org/ns/activitystreams"],"to":["https://www.w3.org/ns/activitystreams#Public"],"object":{"type":"Note","id":"https://discuss.tchncs.de/comment/17864637","attributedTo":"https://discuss.tchncs.de/u/dependencyinjection","to":["https://www.w3.org/ns/activitystreams#Public"],"cc":["https://lemmy.world/c/asklemmy","https://lemmy.world/u/P1nkman"],"content":"<p>I am going to be pasting a set of commands to get docker and docker compose set up, but please be wary of people giving commands to run in the terminal. You could use the information I’ve provided to help you find guides to confirm that no weird commands, but I copied this from my guide I use whenever I set up a new VM to use docker.</p>\n<p>So the commands below add any dependencies for docker, adds the GPG key to verify and then installs docker and docker compose. I also set up a docker user add them to the docker group so I don’t need to use sudo to run.</p>\n<p>I then use docker to create a portainer instance. Portainer allows you to use a webUi to see what you have running and stop start any of your services from there.</p>\n<p>After this I have provided a docker compose file which would be named docker-compose.yml. Yaml sucks as it constantly moans about spacing, but essentially you want to use spaces and not tabs and each new line would be indented two spaces unless it’s a sub part of the section above then it would be two more spaces etc.</p>\n<p>This docker compose might or might not be what you need, this one first sets up gluetun, which is a VPN layer which I can route other services through as you don’t want to torrent from your IP.</p>\n<p>So gluetun is set up using ProtonVPN and you pass the username and password. Username has +pmp for port forwarding.</p>\n<p>Then each service under here can choose to use the services/gluetun or bridge network. The former is for the VPN the latter is routed through regular network. Notice how anything routed through the VPN has the ports defined in the VPN service.</p>\n<p>The others things you would need to be conscious of is the paths I have used for /mnt/vault/* as these are network attached storage from TrueNAS. Depending on how you want to store things you’ll need to just add the paths to these. The paths look weird but the part before the colon is where it is on your machine and the part after is what it is called inside that container.</p>\n<p>You’ll notice that Plex requires a claim key but you can google how to find that.</p>\n<p>This isn’t going to get you up and running and you will likely run in to permission errors and other errors along the way. I would suggest coming back here with your errors or giving them to ChatGPT, just don’t blindly copy commands if you don’t know what they do.</p>\n<p>Once your docker compose is complete you can run docker compose up -d to spin it up. Then in portainer you can see all the containers and then login to each and do the setup. Docker compose down to stop them all.</p>\n<p>When I set this up I did the gluetun and then Radarr. Get that working and then add your next thing and then the next and so on until you have what you want.</p>\n<p>As I said this isn’t a complete solution and you will run into roadblocks, but that’s the fun for me and I am happy to help when you get stuck along the way.</p>\n<p>Edit: A few more things you should know. The volumes section. The ones starting with ./ means they’re in the directory where the docker compose file is. And as I have perms to 1001 you would need to ensure that is the PUID of the docker user and then for each folder, plex for instance you can run “sudo chown -R 1001:1001 ./plex” and “sudo chmod-R 755 ./plex” which is change ownership and changes permissions for that directory.</p>\n<p>### Docker</p>\n<p>Install dependencies </p>\n<p>`sudo apt install apt-transport-https ca-certificates curl software-properties-common -y`</p>\n<p>Add the Docker GPG key to the server’s keyring </p>\n<p>`sudo curl -fsSL <a href=\"https://download.docker.com/linux/ubuntu/gpg\" rel=\"nofollow\">https://download.docker.com/%E2%80%8Blinux/ubuntu/gpg</a> -o /etc/apt/keyrings/docker.asc`</p>\n<p>Add the latest Docker repository to the APT sources </p>\n<p>`echo “deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] <a href=\"https://download.docker.com/linux/ubuntu\" rel=\"nofollow\">https://download.docker.com/%E2%80%8Blinux/ubuntu</a> $(. /etc/os-release && echo “$VERSION_CODENAME”) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null`</p>\n<p>Update the server package index. </p>\n<p>`sudo apt update`</p>\n<p>Install Docker </p>\n<p>`sudo apt-get install docker-ce docker-ce-cli <a href=\"http://containerd.io/\" rel=\"nofollow\">containerd.io</a> docker-buildx-plugin docker-compose-plugin`</p>\n<p>Verify </p>\n<p>`sudo docker --version`</p>\n<p>Enable the Docker system service to start automatically at boot time. </p>\n<p>`sudo systemctl enable docker`</p>\n<p>View the Docker service status and verify that it’s running </p>\n<p>`sudo systemctl status docker`</p>\n<p>#### Install docker compose</p>\n<p>`sudo apt install docker-compose-plugin -y`</p>\n<p>Verifiy the installation </p>\n<p>`docker compose version`</p>\n<p>#### Portainer</p>\n<p>Create a Volume for Portainer Data </p>\n<p>`docker volume create portainer_data`</p>\n<p>Deploy Portainer as a Container</p>\n<p>```</p>\n<p>docker run -d \\</p>\n<p> --name=portainer \\</p>\n<p> --restart=always \\</p>\n<p> -p 8000:8000 \\</p>\n<p> -p 9443:9443 \\</p>\n<p> -v /var/run/docker.sock:/var/run/docker.sock \\</p>\n<p> -v portainer_data:/data \\</p>\n<p> portainer/portainer-ce:latest</p>\n<p>```</p>\n<p>Acess Portainer </p>\n<p>`https://your-server-ip:9443`</p>\n<p>#### Running Docker without Sudo</p>\n<p>Add your user to the docker group:</p>\n<p>`sudo usermod -aG docker $USER`</p>\n<p>Log out and log back in, or restart your system.</p>\n<p>Verify by running:</p>\n<p>`docker ps`</p>\n<p>Below is the docker-compose.yml file.</p>\n<p>services:<br />\n gluetun:<br />\n image: qmcgaw/gluetun<br />\n container_name: protonvpn<br />\n cap_add:<br />\n - NET_ADMIN<br />\n devices:<br />\n - /dev/net/tun:/dev/net/tun<br />\n ports: # These are the qBittorrent ports, I like to use random ports and not the default ports 49152<br />\n - 49893:49893 # This is for the qBittorrent WebUI Port<br />\n - 6881:6881 # Listening port for TCP<br />\n - 6881:6881/udp # Listening port for UDP<br />\n - 7878:7878 # Listening port for Radarr<br />\n - 8989:8989 # Listening port for Sonarr<br />\n - 9696:9696 # Listening port for Proxlarr<br />\n environment:<br />\n - VPN_SERVICE_PROVIDER=protonvpn<br />\n - OPENVPN_USER=USERNAME+pmp # REPLACE with your OpenVPN username (+pmp for port forwarding)<br />\n - OPENVPN_PASSWORD=PASSWORD # REPLACE with your OpenVPN password<br />\n - VPN_PORT_FORWARDING=on<br />\n - SERVER_COUNTRIES=France # These countries must support P2P<br />\n volumes:<br />\n - ./gluetun:/gluetun<br />\n restart: unless-stopped<br />\n<br />\n qbittorrent:<br />\n image: <a href=\"http://lscr.io/linuxserver/qbittorrent:latest\" rel=\"nofollow\">lscr.io/linuxserver/qbittorrent:latest</a><br />\n container_name: qbittorrent<br />\n environment:<br />\n - PUID=1001 # to find your current ID just type “id” in the terminal<br />\n - PGID=1001 # to find your current group ID just type “id” in the terminal<br />\n - TZ=Europe/London<br />\n - WEBUI_PORT=49893 # Must match the port used on gluetun for the WebUI<br />\n - TORRENTING_PORT=6881<br />\n volumes:<br />\n - ./qbittorent/config:/config # this will create the config folder in the same folder as the yml file<br />\n - /mnt/vault/Downloads:/downloads # adjust to your desired download directory<br />\n network_mode: “service:gluetun” # must match the container name of gluetun<br />\n restart: unless-stopped<br />\n<br />\n prowlarr:<br />\n image: <a href=\"http://lscr.io/linuxserver/prowlarr:latest\" rel=\"nofollow\">lscr.io/linuxserver/prowlarr:latest</a><br />\n container_name: prowlarr<br />\n depends_on:<br />\n - gluetun<br />\n environment:<br />\n - PUID=1001<br />\n - PGID=1001<br />\n - TZ=Europe/London<br />\n user: “1001:1001”<br />\n volumes:<br />\n - ./prowlarr/config:/config<br />\n network_mode: “service:gluetun”<br />\n restart: unless-stopped<br />\n<br />\n radarr:<br />\n image: <a href=\"http://lscr.io/linuxserver/radarr\" rel=\"nofollow\">lscr.io/linuxserver/radarr</a><br />\n container_name: radarr<br />\n depends_on:<br />\n - gluetun<br />\n environment:<br />\n - PUID=1001<br />\n - PGID=1001<br />\n - TZ=Europe/London<br />\n user: “1001:1001”<br />\n volumes:<br />\n - ./radarr/config:/config<br />\n - /mnt/vault/Downloads:/downloads<br />\n - /mnt/vault/Movies:/movies<br />\n network_mode: “service:gluetun”<br />\n restart: unless-stopped<br />\n<br />\n sonarr:<br />\n image: <a href=\"http://lscr.io/linuxserver/sonarr\" rel=\"nofollow\">lscr.io/linuxserver/sonarr</a><br />\n container_name: sonarr<br />\n depends_on:<br />\n - gluetun<br />\n environment:<br />\n - PUID=1001<br />\n - PGID=1001<br />\n - TZ=Europe/London<br />\n user: “1001:1001”<br />\n volumes:<br />\n - ./sonarr/config:/config<br />\n - /mnt/vault/Downloads:/downloads<br />\n - /mnt/vault/TV:/tv<br />\n network_mode: “service:gluetun”<br />\n restart: unless-stopped<br />\n<br />\n jellyfin:<br />\n image: jellyfin/jellyfin<br />\n container_name: jellyfin<br />\n environment:<br />\n - PUID=1001<br />\n - PGID=1001<br />\n - TZ=Europe/London<br />\n volumes:<br />\n - ./jellyfin/config:/config<br />\n - /mnt/vault/Movies:/movies<br />\n - /mnt/vault/TV:/tv<br />\n restart: unless-stopped<br />\n ports:<br />\n - 8096:8096<br />\n network_mode: “bridge”<br />\n<br />\n plex:<br />\n image: <a href=\"http://lscr.io/linuxserver/plex:latest\" rel=\"nofollow\">lscr.io/linuxserver/plex:latest</a><br />\n container_name: plex<br />\n network_mode: host<br />\n environment:<br />\n - PUID=1001<br />\n - PGID=1001<br />\n - TZ=Europe/London<br />\n - VERSION=docker<br />\n - PLEX_CLAIM=CLAIMKEY<br />\n - NVIDIA_VISIBLE_DEVICES=all<br />\n volumes:<br />\n - ./plex:/config<br />\n - /mnt/vault/Movies:/movies<br />\n - /mnt/vault/TV:/tv<br />\n deploy:<br />\n resources:<br />\n reservations:<br />\n devices:<br />\n - driver: nvidia<br />\n count: all<br />\n capabilities: [gpu]<br />\n runtime: nvidia<br />\n restart: unless-stopped</p>\n","inReplyTo":"https://lemmy.world/comment/16542240","mediaType":"text/html","source":{"content":"I am going to be pasting a set of commands to get docker and docker compose set up, but please be wary of people giving commands to run in the terminal. You could use the information I’ve provided to help you find guides to confirm that no weird commands, but I copied this from my guide I use whenever I set up a new VM to use docker. \n\nSo the commands below add any dependencies for docker, adds the GPG key to verify and then installs docker and docker compose. I also set up a docker user add them to the docker group so I don’t need to use sudo to run. \n\nI then use docker to create a portainer instance. Portainer allows you to use a webUi to see what you have running and stop start any of your services from there. \n\nAfter this I have provided a docker compose file which would be named docker-compose.yml. Yaml sucks as it constantly moans about spacing, but essentially you want to use spaces and not tabs and each new line would be indented two spaces unless it’s a sub part of the section above then it would be two more spaces etc. \n\nThis docker compose might or might not be what you need, this one first sets up gluetun, which is a VPN layer which I can route other services through as you don’t want to torrent from your IP. \n\nSo gluetun is set up using ProtonVPN and you pass the username and password. Username has +pmp for port forwarding. \n\nThen each service under here can choose to use the services/gluetun or bridge network. The former is for the VPN the latter is routed through regular network. Notice how anything routed through the VPN has the ports defined in the VPN service. \n\nThe others things you would need to be conscious of is the paths I have used for /mnt/vault/* as these are network attached storage from TrueNAS. Depending on how you want to store things you’ll need to just add the paths to these. The paths look weird but the part before the colon is where it is on your machine and the part after is what it is called inside that container. \n\nYou’ll notice that Plex requires a claim key but you can google how to find that. \n\nThis isn’t going to get you up and running and you will likely run in to permission errors and other errors along the way. I would suggest coming back here with your errors or giving them to ChatGPT, just don’t blindly copy commands if you don’t know what they do. \n\nOnce your docker compose is complete you can run docker compose up -d to spin it up. Then in portainer you can see all the containers and then login to each and do the setup. Docker compose down to stop them all. \n\nWhen I set this up I did the gluetun and then Radarr. Get that working and then add your next thing and then the next and so on until you have what you want. \n\nAs I said this isn’t a complete solution and you will run into roadblocks, but that’s the fun for me and I am happy to help when you get stuck along the way. \n\nEdit: A few more things you should know. The volumes section. The ones starting with ./ means they’re in the directory where the docker compose file is. And as I have perms to 1001 you would need to ensure that is the PUID of the docker user and then for each folder, plex for instance you can run “sudo chown -R 1001:1001 ./plex” and “sudo chmod-R 755 ./plex” which is change ownership and changes permissions for that directory. \n\n\n\\### Docker\n\nInstall dependencies \n\n\\`sudo apt install apt-transport-https ca-certificates curl software-properties-common -y\\`\n\n\n\nAdd the Docker GPG key to the server's keyring \n\n\\`sudo curl -fsSL [https://download.docker.com/%E2%80%8Blinux/ubuntu/gpg](https://download.docker.com/linux/ubuntu/gpg) -o /etc/apt/keyrings/docker.asc\\`\n\n\n\nAdd the latest Docker repository to the APT sources \n\n\\`echo \"deb \\[arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] [https://download.docker.com/%E2%80%8Blinux/ubuntu](https://download.docker.com/linux/ubuntu) $(. /etc/os-release && echo \"$VERSION\\_CODENAME\") stable\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\\`\n\n\n\nUpdate the server package index. \n\n\\`sudo apt update\\`\n\n\n\nInstall Docker \n\n\\`sudo apt-get install docker-ce docker-ce-cli [containerd.io](http://containerd.io/) docker-buildx-plugin docker-compose-plugin\\`\n\n\n\nVerify \n\n\\`sudo docker --version\\`\n\n\n\nEnable the Docker system service to start automatically at boot time. \n\n\\`sudo systemctl enable docker\\`\n\n\n\nView the Docker service status and verify that it's running \n\n\\`sudo systemctl status docker\\`\n\n\n\n\\#### Install docker compose\n\n\n\n\\`sudo apt install docker-compose-plugin -y\\`\n\n\n\nVerifiy the installation \n\n\\`docker compose version\\`\n\n\n\n\\#### Portainer\n\n\n\nCreate a Volume for Portainer Data \n\n\\`docker volume create portainer\\_data\\`\n\n\n\nDeploy Portainer as a Container\n\n\n\n\\`\\`\\`\n\ndocker run -d \\\\\n\n --name=portainer \\\\\n\n --restart=always \\\\\n\n -p 8000:8000 \\\\\n\n -p 9443:9443 \\\\\n\n -v /var/run/docker.sock:/var/run/docker.sock \\\\\n\n -v portainer\\_data:/data \\\\\n\n portainer/portainer-ce:latest\n\n\\`\\`\\`\n\n\n\nAcess Portainer \n\n\\`https\\://your-server-ip:9443\\`\n\n\n\n\\#### Running Docker without Sudo\n\n\n\nAdd your user to the docker group:\n\n\n\n\\`sudo usermod -aG docker $USER\\`\n\n\n\nLog out and log back in, or restart your system.\n\n\n\nVerify by running:\n\n\n\n\\`docker ps\\`\n\nBelow is the docker-compose.yml file. \n\nservices:\\\n gluetun:\\\n image: qmcgaw/gluetun\\\n container\\_name: protonvpn\\\n cap\\_add:\\\n - NET\\_ADMIN\\\n devices:\\\n - /dev/net/tun:/dev/net/tun\\\n ports: # These are the qBittorrent ports, I like to use random ports and not the default ports 49152\\\n - 49893:49893 # This is for the qBittorrent WebUI Port\\\n - 6881:6881 # Listening port for TCP\\\n - 6881:6881/udp # Listening port for UDP\\\n - 7878:7878 # Listening port for Radarr\\\n - 8989:8989 # Listening port for Sonarr\\\n - 9696:9696 # Listening port for Proxlarr\\\n environment:\\\n - VPN\\_SERVICE\\_PROVIDER=protonvpn\\\n - OPENVPN\\_USER=USERNAME+pmp # REPLACE with your OpenVPN username (+pmp for port forwarding)\\\n - OPENVPN\\_PASSWORD=PASSWORD # REPLACE with your OpenVPN password\\\n - VPN\\_PORT\\_FORWARDING=on\\\n - SERVER\\_COUNTRIES=France # These countries must support P2P\\\n volumes:\\\n - ./gluetun:/gluetun\\\n restart: unless-stopped\\\n\\\n qbittorrent:\\\n image: [lscr.io/linuxserver/qbittorrent:latest](http://lscr.io/linuxserver/qbittorrent:latest)\\\n container\\_name: qbittorrent\\\n environment:\\\n - PUID=1001 # to find your current ID just type \"id\" in the terminal\\\n - PGID=1001 # to find your current group ID just type \"id\" in the terminal\\\n - TZ=Europe/London\\\n - WEBUI\\_PORT=49893 # Must match the port used on gluetun for the WebUI\\\n - TORRENTING\\_PORT=6881\\\n volumes:\\\n - ./qbittorent/config:/config # this will create the config folder in the same folder as the yml file\\\n - /mnt/vault/Downloads\\:/downloads # adjust to your desired download directory\\\n network\\_mode: \"service:gluetun\" # must match the container name of gluetun\\\n restart: unless-stopped\\\n\\\n prowlarr:\\\n image: [lscr.io/linuxserver/prowlarr:latest](http://lscr.io/linuxserver/prowlarr:latest)\\\n container\\_name: prowlarr\\\n depends\\_on:\\\n - gluetun\\\n environment:\\\n - PUID=1001\\\n - PGID=1001\\\n - TZ=Europe/London\\\n user: \"1001:1001\"\\\n volumes:\\\n - ./prowlarr/config:/config\\\n network\\_mode: \"service:gluetun\"\\\n restart: unless-stopped\\\n\\\n radarr:\\\n image: [lscr.io/linuxserver/radarr](http://lscr.io/linuxserver/radarr)\\\n container\\_name: radarr\\\n depends\\_on:\\\n - gluetun\\\n environment:\\\n - PUID=1001\\\n - PGID=1001\\\n - TZ=Europe/London\\\n user: \"1001:1001\"\\\n volumes:\\\n - ./radarr/config:/config\\\n - /mnt/vault/Downloads\\:/downloads\\\n - /mnt/vault/Movies\\:/movies\\\n network\\_mode: \"service:gluetun\"\\\n restart: unless-stopped\\\n\\\n sonarr:\\\n image: [lscr.io/linuxserver/sonarr](http://lscr.io/linuxserver/sonarr)\\\n container\\_name: sonarr\\\n depends\\_on:\\\n - gluetun\\\n environment:\\\n - PUID=1001\\\n - PGID=1001\\\n - TZ=Europe/London\\\n user: \"1001:1001\"\\\n volumes:\\\n - ./sonarr/config:/config\\\n - /mnt/vault/Downloads\\:/downloads\\\n - /mnt/vault/TV:/tv\\\n network\\_mode: \"service:gluetun\"\\\n restart: unless-stopped\\\n\\\n jellyfin:\\\n image: jellyfin/jellyfin\\\n container\\_name: jellyfin\\\n environment:\\\n - PUID=1001\\\n - PGID=1001\\\n - TZ=Europe/London\\\n volumes:\\\n - ./jellyfin/config:/config\\\n - /mnt/vault/Movies\\:/movies\\\n - /mnt/vault/TV:/tv\\\n restart: unless-stopped\\\n ports:\\\n - 8096:8096\\\n network\\_mode: \"bridge\"\\\n\\\n plex:\\\n image: [lscr.io/linuxserver/plex:latest](http://lscr.io/linuxserver/plex:latest)\\\n container\\_name: plex\\\n network\\_mode: host\\\n environment:\\\n - PUID=1001\\\n - PGID=1001\\\n - TZ=Europe/London\\\n - VERSION=docker\\\n - PLEX\\_CLAIM=CLAIMKEY\\\n - NVIDIA\\_VISIBLE\\_DEVICES=all\\\n volumes:\\\n - ./plex:/config\\\n - /mnt/vault/Movies\\:/movies\\\n - /mnt/vault/TV:/tv\\\n deploy:\\\n resources:\\\n reservations:\\\n devices:\\\n - driver: nvidia\\\n count: all\\\n capabilities: \\[gpu]\\\n runtime: nvidia\\\n restart: unless-stopped","mediaType":"text/markdown"},"published":"2025-04-19T07:46:14.070623Z","updated":"2025-04-19T08:21:08.840299Z","tag":[{"href":"https://lemmy.world/u/P1nkman","name":"@P1nkman@lemmy.world","type":"Mention"}],"distinguished":false,"audience":"https://lemmy.world/c/asklemmy","attachment":[]},"cc":["https://lemmy.world/c/asklemmy","https://lemmy.world/u/P1nkman"],"tag":[{"href":"https://lemmy.world/u/P1nkman","name":"@P1nkman@lemmy.world","type":"Mention"}],"type":"Update","audience":"https://lemmy.world/c/asklemmy"},"cc":["https://lemmy.world/c/asklemmy/followers"],"type":"Announce","id":"https://lemmy.world/activities/announce/update/9153ed9c-6646-43dd-9c37-648bb3c1c0ab"}
Response
Response Headers
Header | Value |
---|---|
cache-control | "no-cache, private" |
content-type | "application/activity+json" |
date | "Sat, 19 Apr 2025 08:21:52 GMT" |
x-debug-token | "9b6277" |
Cookies
Request Cookies
No request cookies
Response Cookies
No response cookies
Session 1
Session Metadata
No session metadata
Session Attributes
No session attributes
Session Usage
1
Usages
Stateless check enabled
Usage |
---|
Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage:41
[ [ "file" => "/var/www/kbin/kbin/vendor/symfony/security-core/Authentication/Token/Storage/UsageTrackingTokenStorage.php" "line" => 41 "function" => "getMetadataBag" "class" => "Symfony\Component\HttpFoundation\Session\Session" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/security-http/Authenticator/RememberMeAuthenticator.php" "line" => 69 "function" => "getToken" "class" => "Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/security-http/Authentication/AuthenticatorManager.php" "line" => 111 "function" => "supports" "class" => "Symfony\Component\Security\Http\Authenticator\RememberMeAuthenticator" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/security-http/Firewall/AuthenticatorManagerListener.php" "line" => 34 "function" => "supports" "class" => "Symfony\Component\Security\Http\Authentication\AuthenticatorManager" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/security-http/Authenticator/Debug/TraceableAuthenticatorManagerListener.php" "line" => 40 "function" => "supports" "class" => "Symfony\Component\Security\Http\Firewall\AuthenticatorManagerListener" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/security-bundle/Debug/WrappedLazyListener.php" "line" => 38 "function" => "supports" "class" => "Symfony\Component\Security\Http\Authenticator\Debug\TraceableAuthenticatorManagerListener" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/security-http/Firewall/AbstractListener.php" "line" => 25 "function" => "supports" "class" => "Symfony\Bundle\SecurityBundle\Debug\WrappedLazyListener" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/security-bundle/Security/LazyFirewallContext.php" "line" => 60 "function" => "__invoke" "class" => "Symfony\Component\Security\Http\Firewall\AbstractListener" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/security-bundle/Debug/TraceableFirewallListener.php" "line" => 80 "function" => "__invoke" "class" => "Symfony\Bundle\SecurityBundle\Security\LazyFirewallContext" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/security-http/Firewall.php" "line" => 95 "function" => "callListeners" "class" => "Symfony\Bundle\SecurityBundle\Debug\TraceableFirewallListener" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/event-dispatcher/Debug/WrappedListener.php" "line" => 116 "function" => "onKernelRequest" "class" => "Symfony\Component\Security\Http\Firewall" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/event-dispatcher/EventDispatcher.php" "line" => 220 "function" => "__invoke" "class" => "Symfony\Component\EventDispatcher\Debug\WrappedListener" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/event-dispatcher/EventDispatcher.php" "line" => 56 "function" => "callListeners" "class" => "Symfony\Component\EventDispatcher\EventDispatcher" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php" "line" => 139 "function" => "dispatch" "class" => "Symfony\Component\EventDispatcher\EventDispatcher" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/http-kernel/HttpKernel.php" "line" => 157 "function" => "dispatch" "class" => "Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/http-kernel/HttpKernel.php" "line" => 76 "function" => "handleRaw" "class" => "Symfony\Component\HttpKernel\HttpKernel" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/http-kernel/Kernel.php" "line" => 197 "function" => "handle" "class" => "Symfony\Component\HttpKernel\HttpKernel" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php" "line" => 35 "function" => "handle" "class" => "Symfony\Component\HttpKernel\Kernel" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/vendor/autoload_runtime.php" "line" => 29 "function" => "run" "class" => "Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner" "type" => "->" ] [ "file" => "/var/www/kbin/kbin/public/index.php" "line" => 7 "args" => [ "/var/www/kbin/kbin/vendor/autoload_runtime.php" ] "function" => "require_once" ] ] |
Flashes
Flashes
No flash messages were created.
Server Parameters
Server Parameters
Defined in .env
Key | Value |
---|---|
APP_ENV | "dev" |
APP_SECRET | "82ce1339a6c267e28d1f1dcb37a7454c" |
CORS_ALLOW_ORIGIN | "^https?://(kbin.localhost|127\.0\.0\.1)(:[0-9]+)?$" |
DATABASE_URL | "postgresql://kbin:917eaa3d703f19d123@127.0.0.1:5433/kbin?serverVersion=15&charset=utf8" |
HCAPTCHA_SECRET | "" |
HCAPTCHA_SITE_KEY | "" |
JWT_PASSPHRASE | "" |
JWT_PUBLIC_KEY | "%kernel.project_dir%/config/jwt/public.pem" |
JWT_SECRET_KEY | "%kernel.project_dir%/config/jwt/private.pem" |
KBIN_ADMIN_ONLY_OAUTH_CLIENTS | "false" |
KBIN_API_ITEMS_PER_PAGE | "25" |
KBIN_CAPTCHA_ENABLED | "false" |
KBIN_CONTACT_EMAIL | "kbin@j0h.nl" |
KBIN_DEFAULT_LANG | "en" |
KBIN_DOMAIN | "kbin.spritesserver.nl" |
KBIN_FEDERATION_ENABLED | "true" |
KBIN_FEDERATION_PAGE_ENABLED | "true" |
KBIN_HEADER_LOGO | "false" |
KBIN_JS_ENABLED | "true" |
KBIN_META_DESCRIPTION | "a private kbin install" |
KBIN_META_KEYWORDS | "kbin, content agregator, open source, fediverse" |
KBIN_META_TITLE | "Sprites kbin instance" |
KBIN_REGISTRATIONS_ENABLED | "true" |
KBIN_SENDER_EMAIL | "kbin@j0h.nl" |
KBIN_STORAGE_URL | "https://kbin.spritesserver.nl/media/" |
KBIN_TITLE | "/kbin" |
LOCK_DSN | "flock" |
MAILER_DSN | "smtp://spritesmods.com" |
MERCURE_JWT_SECRET | "231e9a1277f5585d52aa0b1e34c0f984xxxx" |
MERCURE_PUBLIC_URL | "https://kbin.spritesserver.nl/.well-known/mercure" |
MERCURE_URL | "http://localhost:3000/.well-known/mercure" |
MESSENGER_TRANSPORT_DSN | "doctrine://default" |
OAUTH_FACEBOOK_ID | "" |
OAUTH_FACEBOOK_SECRET | "" |
OAUTH_GITHUB_ID | "" |
OAUTH_GITHUB_SECRET | "" |
OAUTH_GOOGLE_ID | "" |
OAUTH_GOOGLE_SECRET | "" |
POSTGRES_DB | "kbin" |
POSTGRES_PASSWORD | "917eaa3d703f19d123" |
POSTGRES_USER | "kbin" |
POSTGRES_VERSION | "15" |
REDIS_DNS | "redis://uSJBDOQfuOMgt8kyGhpUzViTnQSEdEJTsOIsYSsg3v40v@localhost" |
REDIS_PASSWORD | "uSJBDOQfuOMgt8kyGhpUzViTnQSEdEJTsOIsYSsg3v40v" |
S3_BUCKET | "media.karab.in" |
S3_KEY | "" |
S3_REGION | "eu-central-1" |
S3_SECRET | "" |
S3_VERSION | "latest" |
Defined as regular env variables
Key | Value |
---|---|
APP_DEBUG | "1" |
CONTENT_LENGTH | "22835" |
CONTENT_TYPE | "application/activity+json" |
CONTEXT_DOCUMENT_ROOT | "/var/www/kbin/kbin/public" |
CONTEXT_PREFIX | "" |
DOCUMENT_ROOT | "/var/www/kbin/kbin/public" |
GATEWAY_INTERFACE | "CGI/1.1" |
HTTPS | "on" |
HTTP_ACCEPT | "*/*" |
HTTP_ACCEPT_ENCODING | "gzip" |
HTTP_DATE | "Sat, 19 Apr 2025 08:21:51 GMT" |
HTTP_DIGEST | "SHA-256=ofHG9b4f49kCNJ78RPUYo0X+wxe+vJ9PqFHlyMcfKRI=" |
HTTP_HOST | "kbin.spritesserver.nl" |
HTTP_SIGNATURE | "keyId="https://lemmy.world/c/asklemmy#main-key",algorithm="hs2019",headers="(request-target) content-type date digest host",signature="KDkI2UokpRNtDvMo3/0hYhwwyyW+m0FVLnNkLiOz4KUad1Y/E/lKE5WoXn71EJeYTE9LwGpWa7SpimN90vYmMX7ACaKlAePdFL8m4ESR/IvF8GjsKMI4aI3zG07DRUgYLiugvC+03gZ6W1odLAzH+A0Gv772uhEa7Jw6Rfom5cF+06zU8jejmfvOs1XkJwxH+5dJ54Ojt2NoEp0KknAPmZCvo4IRgiaeodEF/IB/UPixgqAZfxHmcsdAtR3ZV7A5wy52CvHIfJ6YIvcEgEJG++xB2i8tiWjkPmS1rrCuSdmaK+ZCYBqQrR0mNfgdxd9o8TzBi3uco0LJvW+1IN/1Ww=="" |
HTTP_USER_AGENT | "Lemmy/0.19.10; +https://lemmy.world" |
PATH | "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" |
PHP_SELF | "/index.php" |
QUERY_STRING | "" |
REDIRECT_HTTPS | "on" |
REDIRECT_SSL_CIPHER | "TLS_AES_256_GCM_SHA384" |
REDIRECT_SSL_CIPHER_ALGKEYSIZE | "256" |
REDIRECT_SSL_CIPHER_EXPORT | "false" |
REDIRECT_SSL_CIPHER_USEKEYSIZE | "256" |
REDIRECT_SSL_CLIENT_VERIFY | "NONE" |
REDIRECT_SSL_COMPRESS_METHOD | "NULL" |
REDIRECT_SSL_PROTOCOL | "TLSv1.3" |
REDIRECT_SSL_SECURE_RENEG | "true" |
REDIRECT_SSL_SERVER_A_KEY | "rsaEncryption" |
REDIRECT_SSL_SERVER_A_SIG | "sha256WithRSAEncryption" |
REDIRECT_SSL_SERVER_I_DN | "CN=R10,O=Let's Encrypt,C=US" |
REDIRECT_SSL_SERVER_I_DN_C | "US" |
REDIRECT_SSL_SERVER_I_DN_CN | "R10" |
REDIRECT_SSL_SERVER_I_DN_O | "Let's Encrypt" |
REDIRECT_SSL_SERVER_M_SERIAL | "06E2DDD4A973DA92D92F46873A8653408A8E" |
REDIRECT_SSL_SERVER_M_VERSION | "3" |
REDIRECT_SSL_SERVER_SAN_DNS_0 | "kbin.spritesserver.nl" |
REDIRECT_SSL_SERVER_S_DN | "CN=kbin.spritesserver.nl" |
REDIRECT_SSL_SERVER_S_DN_CN | "kbin.spritesserver.nl" |
REDIRECT_SSL_SERVER_V_END | "Jun 28 21:01:47 2025 GMT" |
REDIRECT_SSL_SERVER_V_START | "Mar 30 21:01:48 2025 GMT" |
REDIRECT_SSL_SESSION_ID | "f72aac6d01c848b85a0c2675b2f909082f07255cc168daf92f65dd2b2211f723" |
REDIRECT_SSL_SESSION_RESUMED | "Initial" |
REDIRECT_SSL_TLS_SNI | "kbin.spritesserver.nl" |
REDIRECT_SSL_VERSION_INTERFACE | "mod_ssl/2.4.62" |
REDIRECT_SSL_VERSION_LIBRARY | "OpenSSL/3.0.15" |
REDIRECT_STATUS | "200" |
REDIRECT_URL | "/f/inbox" |
REMOTE_ADDR | "135.181.143.221" |
REMOTE_PORT | "60124" |
REQUEST_METHOD | "POST" |
REQUEST_SCHEME | "https" |
REQUEST_TIME | 1745050911 |
REQUEST_TIME_FLOAT | 1745050911.9713 |
REQUEST_URI | "/f/inbox" |
SCRIPT_FILENAME | "/var/www/kbin/kbin/public/index.php" |
SCRIPT_NAME | "/index.php" |
SERVER_ADDR | "5.9.62.165" |
SERVER_ADMIN | "webmaster@spritesmods.com" |
SERVER_NAME | "kbin.spritesserver.nl" |
SERVER_PORT | "443" |
SERVER_PROTOCOL | "HTTP/1.1" |
SERVER_SIGNATURE | "" |
SERVER_SOFTWARE | "Apache" |
SSL_CIPHER | "TLS_AES_256_GCM_SHA384" |
SSL_CIPHER_ALGKEYSIZE | "256" |
SSL_CIPHER_EXPORT | "false" |
SSL_CIPHER_USEKEYSIZE | "256" |
SSL_CLIENT_VERIFY | "NONE" |
SSL_COMPRESS_METHOD | "NULL" |
SSL_PROTOCOL | "TLSv1.3" |
SSL_SECURE_RENEG | "true" |
SSL_SERVER_A_KEY | "rsaEncryption" |
SSL_SERVER_A_SIG | "sha256WithRSAEncryption" |
SSL_SERVER_I_DN | "CN=R10,O=Let's Encrypt,C=US" |
SSL_SERVER_I_DN_C | "US" |
SSL_SERVER_I_DN_CN | "R10" |
SSL_SERVER_I_DN_O | "Let's Encrypt" |
SSL_SERVER_M_SERIAL | "06E2DDD4A973DA92D92F46873A8653408A8E" |
SSL_SERVER_M_VERSION | "3" |
SSL_SERVER_SAN_DNS_0 | "kbin.spritesserver.nl" |
SSL_SERVER_S_DN | "CN=kbin.spritesserver.nl" |
SSL_SERVER_S_DN_CN | "kbin.spritesserver.nl" |
SSL_SERVER_V_END | "Jun 28 21:01:47 2025 GMT" |
SSL_SERVER_V_START | "Mar 30 21:01:48 2025 GMT" |
SSL_SESSION_ID | "f72aac6d01c848b85a0c2675b2f909082f07255cc168daf92f65dd2b2211f723" |
SSL_SESSION_RESUMED | "Initial" |
SSL_TLS_SNI | "kbin.spritesserver.nl" |
SSL_VERSION_INTERFACE | "mod_ssl/2.4.62" |
SSL_VERSION_LIBRARY | "OpenSSL/3.0.15" |
SYMFONY_DOTENV_VARS | "KBIN_DOMAIN,KBIN_TITLE,KBIN_DEFAULT_LANG,KBIN_FEDERATION_ENABLED,KBIN_CONTACT_EMAIL,KBIN_SENDER_EMAIL,KBIN_JS_ENABLED,KBIN_REGISTRATIONS_ENABLED,KBIN_API_ITEMS_PER_PAGE,KBIN_STORAGE_URL,KBIN_META_TITLE,KBIN_META_DESCRIPTION,KBIN_META_KEYWORDS,KBIN_HEADER_LOGO,KBIN_CAPTCHA_ENABLED,KBIN_FEDERATION_PAGE_ENABLED,REDIS_PASSWORD,REDIS_DNS,S3_KEY,S3_SECRET,S3_BUCKET,S3_REGION,S3_VERSION,OAUTH_FACEBOOK_ID,OAUTH_FACEBOOK_SECRET,OAUTH_GOOGLE_ID,OAUTH_GOOGLE_SECRET,OAUTH_GITHUB_ID,OAUTH_GITHUB_SECRET,KBIN_ADMIN_ONLY_OAUTH_CLIENTS,APP_ENV,APP_SECRET,POSTGRES_DB,POSTGRES_USER,POSTGRES_PASSWORD,POSTGRES_VERSION,DATABASE_URL,MESSENGER_TRANSPORT_DSN,MAILER_DSN,MERCURE_URL,MERCURE_PUBLIC_URL,MERCURE_JWT_SECRET,CORS_ALLOW_ORIGIN,LOCK_DSN,JWT_SECRET_KEY,JWT_PUBLIC_KEY,JWT_PASSPHRASE,HCAPTCHA_SITE_KEY,HCAPTCHA_SECRET" |