{"id":15394715,"url":"https://github.com/bensuperpc/infrastructure","last_synced_at":"2025-10-09T02:10:13.968Z","repository":{"id":107274272,"uuid":"570139412","full_name":"bensuperpc/infrastructure","owner":"bensuperpc","description":"Open source, self-hosted and decentralized home infrastructure for web services.","archived":false,"fork":false,"pushed_at":"2025-10-06T21:32:52.000Z","size":1959,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-10-09T02:09:59.899Z","etag":null,"topics":["caddy","docker","docker-compose","gitea","homepage","infrastructure","jellyfin","linuxserver","mariadb","reverse-proxy","ssh","ssl","torrent","torrents","website","wordpress"],"latest_commit_sha":null,"homepage":"https://www.bensuperpc.org","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bensuperpc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"bensuperpc"}},"created_at":"2022-11-24T12:29:35.000Z","updated_at":"2025-10-06T21:32:55.000Z","dependencies_parsed_at":"2023-12-13T23:30:11.755Z","dependency_job_id":"fd2109a2-4574-4616-8e86-c4a25f9d17c1","html_url":"https://github.com/bensuperpc/infrastructure","commit_stats":{"total_commits":179,"total_committers":3,"mean_commits":"59.666666666666664","dds":"0.011173184357541888","last_synced_commit":"b8f69ed6e2007814b1c7fa399e0a33b28807b865"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bensuperpc/infrastructure","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bensuperpc%2Finfrastructure","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bensuperpc%2Finfrastructure/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bensuperpc%2Finfrastructure/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bensuperpc%2Finfrastructure/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bensuperpc","download_url":"https://codeload.github.com/bensuperpc/infrastructure/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bensuperpc%2Finfrastructure/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279000773,"owners_count":26082906,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["caddy","docker","docker-compose","gitea","homepage","infrastructure","jellyfin","linuxserver","mariadb","reverse-proxy","ssh","ssl","torrent","torrents","website","wordpress"],"created_at":"2024-10-01T15:24:16.862Z","updated_at":"2025-10-09T02:10:13.955Z","avatar_url":"https://github.com/bensuperpc.png","language":"PHP","funding_links":["https://github.com/sponsors/bensuperpc"],"categories":[],"sub_categories":[],"readme":"# Infrastructure\n\n_Open source, decentralized and self-hosted infrastructure for many services._\n\n## About\n\nIt uses caddy and docker-compose to run my services (And many other things).\nIt's a **work in progress**, and I'm still learning a lot about it.\nIf you have any **questions** or **suggestions**, feel free to open an issue or a pull request.\n\n## Features\n\n- [x] caddy 2 HTTP/S reverse proxy\n- [x] Docker / docker-compose\n- [x] Wordpress (Via FASTCGI/caddy)\n- [x] Jellyfin (Media server)\n- [x] Gitea (Git server)\n- [x] Forgejo (Git server, fork of Gitea)\n- [x] Uptime Kuma (Monitoring)\n- [x] qbittorrent and transmission (Torrent client/server)\n- [x] SyncThing (File synchronization)\n- [x] PsiTransfer, ProjectSend, Picoshare (File sharing)\n- [x] it-tools and omni-tools (Tools for IT)\n- [x] Open-WebUI (Local chatGPT)\n- [x] Privatebin (Pastebin)\n- [X] [Satisfactory](https://github.com/bensuperpc/docker-satisfactory)\n- [x] [7 days to die](https://github.com/bensuperpc/docker-7daystodie)\n- [x] [minecraft](https://github.com/bensuperpc/docker-minecraft-server)\n\n## Architecture\n\n![Architecture](ressources/arch_infra.png)\n\n## Screenshots\n\nThe homepage is a dashboard with many widgets and services.\n\n![Homepage](ressources/homepagev1.jpg)\n\n## Installation and configuration\n\n### Requirements\n\n- [Docker](https://docs.docker.com/install/)\n- [Docker Compose](https://docs.docker.com/compose/install/)\n- [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)\n- [Web domain](https://www.ovh.com/world/domains/) (I use OVH)\n- [Open port 80, 443, 22, 2222 and 5555 on your router](http://192.168.1.1/)\n- For games server, you need to open these ports (7777, 25565, 26900, 26901, 26903)\n\nList of ports used by the services in this infrastructure:\n\n| Port number | Service       | Description       |\n| ----------- | ------------- | ----------------- |\n| 80          | Caddy         | HTTP traffic      |\n| 443         | Caddy         | HTTPS traffic     |\n| 22          | Forgejo       | Git/SSH access    |\n| 2222        | OpenSSH       | Global SSH access |\n| 5555        | Gitea         | Git/SSH access    |\n| 7777        | Satisfactory  | Game server port  |\n| 25565       | Minecraft     | Game server port  |\n| 26900       | 7 Days to Die | Game server port  |\n| 26901       | 7 Days to Die | Game server port  |\n| 26903       | 7 Days to Die | Game server port  |\n\n\n**To avoid get rate limit from letsencrypt (10 certificates per 3 hours), you need to disable some certificates in the caddyfiles and enable them 3h later...**\n\n### Clone\n\nClone this repository to your local machine using:\n\n```sh\ngit clone --recurse-submodules --remote-submodules https://github.com/bensuperpc/infrastructure.git\n```\n\nGo to the folder\n\n```sh\ncd infrastructure\n```\n\nChange services you want to enable in the [Makefile](Makefile) file, by default all services are enabled (games servers included).\n\n### Configure the domain\n\nFor all **bensuperpc.org**, you need to replace it with your domain, example: **mydomain.com**, so the same for **bensuperpc.com** ect...\n\n```sh\nfind . \\( -type d -name .git -prune \\) -o -type f -print0 | xargs -0 sed -i 's/bensuperpc.org/mydomain.com/g'\n```\n\nCheck if all bensuperpc.* are replaced by your domain in [Caddyfile](caddy/services/wordpress/Caddyfile)\n\nAnd then, caddy will generate the certificate for you and renew it automatically :D\n\n| Domain name                                                        | Type | Description                                                  |\n| ------------------------------------------------------------------ | ---- | ------------------------------------------------------------ |\n| [bensuperpc.org](https://bensuperpc.org)                           | Main | Redirect to [www.bensuperpc.org](https://www.bensuperpc.org) |\n| [www.bensuperpc.org](https://www.bensuperpc.org)                   | Main | Homepage                                                     |\n| [open-webui.bensuperpc.org](https://open-webui.bensuperpc.org)     | Sub  | For local chatGPT                                            |\n| [wordpress.bensuperpc.org](https://wordpress.bensuperpc.org)       | Sub  | Wordpress website                                            |\n| [uptimekuma.bensuperpc.org](https://uptimekuma.bensuperpc.org)     | Sub  | Uptime Kuma for monitoring                                   |\n| [qbittorrent.bensuperpc.org](https://qbittorrent.bensuperpc.org)   | Sub  | Torrent client/server                                        |\n| [transmission.bensuperpc.org](https://transmission.bensuperpc.org) | Sub  | Torrent client/server                                        |\n| [gitea.bensuperpc.org](https://gitea.bensuperpc.org)               | Sub  | Gitea for git                                                |\n| [forgejo.bensuperpc.org](https://forgejo.bensuperpc.org/)          | Sub  | Fork of Gitea for git                                        |\n| [git.bensuperpc.org](https://git.bensuperpc.org)                   | Sub  | Fork of Gitea for git                                        |\n| [link.bensuperpc.org](https://link.bensuperpc.org)                 | Sub  | For link shortener                                           |\n| [jellyfin.bensuperpc.org](https://jellyfin.bensuperpc.org)         | Sub  | Jellyfin for media server                                    |\n| [syncthing.bensuperpc.org](https://syncthing.bensuperpc.org)       | Sub  | SyncThing for file synchronization                           |\n| [psitransfer.bensuperpc.org](https://psitransfer.bensuperpc.org)   | Sub  | PsiTransfer for file sharing                                 |\n| [it-tools.bensuperpc.org](https://it-tools.bensuperpc.org)         | Sub  | Tools for IT                                                 |\n| [omni-tools.bensuperpc.org](https://omni-tools.bensuperpc.org)     | Sub  | Tools for IT                                                 |\n| [privatebin.bensuperpc.org](https://privatebin.bensuperpc.org)     | Sub  | Pastebin                                                     |\n| [projectsend.bensuperpc.org](https://projectsend.bensuperpc.org)   | Sub  | ProjectSend for file sharing                                 |\n| [picoshare.bensuperpc.org](https://picoshare.bensuperpc.org)       | Sub  | Picoshare for file sharing                                   |\n| [dufs.bensuperpc.org](https://dufs.bensuperpc.org)                 | Sub  | Dufs for file sharing                                        |\n| [memos.bensuperpc.org](https://memos.bensuperpc.org)               | Sub  | Caddy for file sharing                                       |\n| [stirlingpdf.bensuperpc.org](https://stirlingpdf.bensuperpc.org)   | Sub  | Stirling PDF tools                                           |\n\n### Configure the infrastructure\n\nYou need to configure the infrastructure with your own configuration.\n\nYou can generate a password with 32 characters:\n\n```sh\nopenssl rand -base64 32\n```\n\nOr online: [passwordsgenerator.net](https://passwordsgenerator.net/)\n\n#### Caddy\n\nFor [caddy_backup.env](infrastructure/services/caddy/env/caddy_backup.env) file, you need to change the password(s) for the restic backup.\n\n```sh\nRESTIC_PASSWORD=7L1Ncbquax0B2TCOmrjaQl9n5mnY88bQ\n```\n\n#### Wordpress\n\nFor the [wordpress.env](infrastructure/services/wordpress/env/wordpress.env) file, you need to change the password and user for the database.\n\n```sh\nWORDPRESS_DB_USER=bensuperpc\nWORDPRESS_DB_PASSWORD=lEOEf8cndnDjp84O4Uv5D9zJLJDFatLw\n```\n\nFor [wordpress_db.env](infrastructure/services/wordpress/env/wordpress_db.env) file, you need to change the password(s) and user for the database.\n\n```sh\nMARIADB_ROOT_PASSWORD=7L1Ncbquax0B2TCOmrjaQl9n5mnY88bQ\nMARIADB_USER=bensuperpc\nMARIADB_PASSWORD=lEOEf8cndnDjp84O4Uv5D9zJLJDFatLw\n```\n\nFor [wordpress_backup.env](infrastructure/services/wordpress/env/wordpress_backup.env) file, you need to change the password(s) for the restic backup.\n\n```sh\nRESTIC_PASSWORD=7L1Ncbquax0B2TCOmrjaQl9n5mnY88bQ\n```\n\n#### Gitea\n\nFor [gitea.env](infrastructure/services/gitea/env/gitea.env) file, you need to change the password(s) and user for the database.\n\n```sh\nGITEA__database__USER=bensuperpc\nGITEA__database__PASSWD=K7s5yoHknnEd7vsZoxb8I3dK9mjToF1j\nGITEA__security__SECRET_KEY=ykcZt23an1E4lFHWvrCKdAyt16WAiK9c\n```\n\nFor [gitea_db.env](infrastructure/services/gitea/env/gitea_db.env) file, you need to change the password(s) and user for the database.\n\n```sh\nMARIADB_ROOT_PASSWORD=xpc4zIhHZzWKqVHcjBu4aW6aS7jG8d7X\nMARIADB_USER=bensuperpc\nMARIADB_PASSWORD=K7s5yoHknnEd7vsZoxb8I3dK9mjToF1j\n```\n\n#### PsiTransfer\n\nFor [psitransfer.env](infrastructure/services/psitransfer/env/psitransfer.env) file, you need to change the secret key.\n\n```sh\nPSITRANSFER_ADMIN_PASS=n9jLVNT9QUotTJTT91JqH4GyBTg9pvEn\n```\n\nFor [projectsend_db.env](infrastructure/services/projectsend/env/projectsend_db.env) file, you need to change the password(s) and user for the database.\n\n```sh\nMARIADB_ROOT_PASSWORD=8O34297GrBfT3Ld34Lfg9mpotmZwbJtt\nMARIADB_USER=bensuperpc\nMARIADB_PASSWORD=wdSUa1JEZhXie5AJ5NcX1w73xmpO12EY\n```\n\n#### Picoshare\n\nFor [picoshare.env](infrastructure/services/picoshare/env/picoshare.env) file, you need to change the secret key.\n\n```sh\nPS_SHARED_SECRET=CBuS4DJLqIe93xF1KGYRrnhxUFBqLD2n\n```\n\n#### Dufs\n\nFor [dufs.env](infrastructure/services/dufs/env/dufs.env) file, you need to change the secret key and if you want the user name.\n\n```sh\nDUFS_AUTH=\"admin:heqihlOfBmJDESGFlpbPi7P7Mi6F7RkV@/:rw|@/:ro\"\n```\n\n#### Stirling PDF\n\nFor [stirlingpdf.env](infrastructure/services/stirlingpdf/env/stirlingpdf.env) file, it's **completly optional**, you can change the password(s) and user.\n\n```sh\n# Enable security, optional\nDOCKER_ENABLE_SECURITY=true\nSECURITY_ENABLE_LOGIN=true\n# Can be disabled after initial login, optional,\n# default it admin:stirling\nSECURITY_INITIALLOGIN_USERNAME=admin\nSECURITY_INITIALLOGIN_PASSWORD=Jw9U039f5xc2mFcacvGvPD9RjwIh4DzO\n```\n\n#### OpenSSH\n\nYou can need to add/change the public ssh key [id_ed25519.pub](infrastructure/services/openssh/config/authorized_keys/id_ed25519.pub) (its my public key), also change the config/password in [openssh.env](infrastructure/services/openssh/env/openssh.env):\n\n```sh\nSUDO_ACCESS=true\n#PUBLIC_KEY_URL=https://github.com/bensuperpc.keys\nPUBLIC_KEY_DIR=/authorized_ssh_keys\nUSER_PASSWORD=rdUwf36C11PLmpU9Lvq7tP5pfFBKAuCh\n\n#PUBLIC_KEY=yourpublickey\n#PUBLIC_KEY_FILE=/path/to/file\n#PUBLIC_KEY_DIR=/path/to/directory/containing/_only_/pubkeys\n#USER_PASSWORD_FILE=/path/to/file\n```\n\n#### Open-WebUI\n\nFor [open-webui.env](infrastructure/services/open-webui/env/open-webui.env) file, entirely optional.\n\nTo download the model, you can use:\n\n```sh\ndocker exec -it ollama ollama run deepseek-r1:8b\n```\n\n### Start the infrastructure\n\nStart the website with:\n\n```sh\nmake start-at\n```\n\nStop the website with (or CTRL+C with the previous command):\n\n```sh\nmake stop\n```\n\nRemove countainers with:\n\n```sh\nmake down\n```\n\nYou can disable some services by removing the service name in PROFILES variable in the [Makefile](Makefile) file.\n\nTo enable the gitea CI: [how-to-build-docker-containers-using-gitea-runners](https://medium.com/@lokanx/how-to-build-docker-containers-using-gitea-runners-600729555e07)\n\n### Homepage\n\nYou can change the homepage config in these files:\n\n- [bookmarks.yaml](infrastructure/services/homepage/config/bookmarks.yaml)\n- [services.yaml](infrastructure/services/homepage/config/services.yaml)\n- [settings.yaml](infrastructure/services/homepage/config/settings.yaml)\n- [widgets.yaml](infrastructure/services/homepage/config/widgets.yaml)\n\n### Forgejo\n\nOnce the installation is complete, you need to set the installation lock:\n\n```sh\nFORGEJO__security__INSTALL_LOCK=true\n```\n\n### Forgejo Runner\n\n```sh\ndocker exec -it forgejo_runner /bin/bash\n```\n\n```sh\nforgejo-runner generate-config \u003e /data/config.yml\n```\n\nNow update the config.yml file to support docker-in-docker:\n\n```yml\n  envs:\n    DOCKER_TLS_VERIFY: 1\n    DOCKER_CERT_PATH: /certs/client\n    DOCKER_HOST: tcp://docker:2376\n  labels: [\"ubuntu-latest:docker://node:20-bookworm\", \"ubuntu-22.04:docker://node:20-bookworm\"]\n  network: host\n  options: -v /certs/client:/certs/client\n  valid_volumes:\n     - /certs/client\n```\n\nRegister the runner with your Forgejo instance:\n\n\n```sh\nforgejo-runner register\n```\n\nYou will need to provide the following information:\n\n```sh\nhttps://forgejo.bensuperpc.org/\n\u003cYour Registration Token, in https://forgejo.bensuperpc.org/admin/actions/runners\u003e\nubuntu-22.04:docker://ghcr.io/catthehacker/ubuntu:act-22.04\nmain\n```\n\n### Docker volumes\n\nThis infrastructure uses docker volumes to store data, all configuration/data for each service are not shared between services for security and maintenance reasons, but **public_data** and **private_data** are shared between all services to store your data.\n\n| Volume name  | Description                                                                                                |\n| ------------ | ---------------------------------------------------------------------------------------------------------- |\n| public_data  | Public data reachable on internet via [dufs.bensuperpc.org](https://dufs.bensuperpc.org), can be disabled. |\n| private_data | Private data                                                                                               |\n\n### SSH access\n\nThe default port for ssh/rsync is is 2222.\n\nYou can access to the server with:\n\n```sh\nssh -p 2222 admin@bensuperpc.org\n```\n\n## Sources\n\n- [Wordpress](https://wordpress.org/)\n- [Gnu Make](https://www.gnu.org/software/make/)\n- [Github API](https://docs.github.com/en/rest)\n- [Github Actions](https://docs.github.com/en/actions)\n- [Docker](https://www.docker.com/)\n- [Docker Compose](https://docs.docker.com/compose/)\n- [Docker Hub](https://hub.docker.com/)\n- [How To Start WordPress with Caddy using Docker Compose](https://minhcung.me/how-to-start-wordpress-with-caddy-using-docker-compose-3d31bb9ef88b)\n- [Digital Ocean - How To Install WordPress with Docker Compose (nginx)](https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-docker-compose)\n- [Imagisphe](https://imagisphe.re/)\n- [Letsencrypt](https://letsencrypt.org/)\n- [Caddy](https://caddyserver.com/)\n- [Adminer](https://www.adminer.org/)\n- [Uptime Kuma](https://uptime-kuma.com/)\n- [qbittorrent](https://www.qbittorrent.org/)\n- [Transmission](https://transmissionbt.com/)\n- [Gitea](https://gitea.io/)\n- [Jellyfin](https://jellyfin.org/)\n- [SyncThing](https://syncthing.net/)\n- [PsiTransfer](https://psitransfer.com/)\n- [It-tools](https://github.com/CorentinTh/it-tools)\n- [Omni-tools](https://github.com/iib0011/omni-tools)\n- [Privatebin](https://github.com/PrivateBin/PrivateBin)\n- [ghost](https://ghost.org)\n- [Homepage Tuto](https://belginux.com/installer-homepage-avec-docker/)\n- [ProjectSend](https://www.projectsend.org/)\n- [Picoshare](https://github.com/mtlynch/picoshare)\n- [Dufs](https://github.com/sigoden/dufs)\n- [demos](https://github.com/usememos/memos)\n- [Stirling PDF](https://github.com/Stirling-Tools/Stirling-PDF)\n- [open-webui](https://github.com/open-webui/open-webui)\n- [Fix docker volume](https://pratikpc.medium.com/use-docker-compose-named-volumes-as-non-root-within-your-containers-1911eb30f731)\n- [Forgejo-runner](https://code.forgejo.org/forgejo/runner)\n- [Forgejo-runner](https://huijzer.xyz/posts/55)\n\n## License\n\n[License](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbensuperpc%2Finfrastructure","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbensuperpc%2Finfrastructure","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbensuperpc%2Finfrastructure/lists"}