{"id":15136322,"url":"https://github.com/sethforprivacy/self-hosted-services","last_synced_at":"2025-09-29T05:30:28.029Z","repository":{"id":37899594,"uuid":"352345754","full_name":"sethforprivacy/self-hosted-services","owner":"sethforprivacy","description":"A core set of privacy-preserving services that can be easily self-hosted via Docker Compose.","archived":true,"fork":false,"pushed_at":"2023-03-22T14:58:42.000Z","size":180,"stargazers_count":193,"open_issues_count":4,"forks_count":18,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-01-15T05:24:29.981Z","etag":null,"topics":["docker","docker-compose","letsencrypt","monero","nextcloud","nitter","privacy","privatebin","self-hosted","teddit","traefik","wallabag"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sethforprivacy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"custom":["https://sethforprivacy.com/about/#donations"]}},"created_at":"2021-03-28T14:05:54.000Z","updated_at":"2024-12-14T14:56:55.000Z","dependencies_parsed_at":"2023-01-17T17:31:20.458Z","dependency_job_id":null,"html_url":"https://github.com/sethforprivacy/self-hosted-services","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sethforprivacy%2Fself-hosted-services","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sethforprivacy%2Fself-hosted-services/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sethforprivacy%2Fself-hosted-services/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sethforprivacy%2Fself-hosted-services/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sethforprivacy","download_url":"https://codeload.github.com/sethforprivacy/self-hosted-services/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234594021,"owners_count":18857416,"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","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":["docker","docker-compose","letsencrypt","monero","nextcloud","nitter","privacy","privatebin","self-hosted","teddit","traefik","wallabag"],"created_at":"2024-09-26T06:20:43.916Z","updated_at":"2025-09-29T05:30:27.656Z","avatar_url":"https://github.com/sethforprivacy.png","language":null,"funding_links":["https://sethforprivacy.com/about/#donations","https://liberapay.com/wallabag/donate","https://opencollective.com/uptime-kuma","https://opencollective.com/jellyfin"],"categories":[],"sub_categories":[],"readme":"# self-hosted-services\n\nThis repository contains everything you need to start self-hosting a core set of privacy-preserving services that I have found helpful, all run via a common [Docker Compose](https://docs.docker.com/compose/) configuration using [Let's Encrypt](https://letsencrypt.org/) for SSL certificates.\n\n***NOTE: I am in the process of migrating all apps here to [meienberger/runtipi](https://github.com/meienberger/runtipi), as that is a much better overall solution for this type of project. Once done I will archive this repo and direct all users to that. You can follow the porting process here: https://github.com/meienberger/runtipi-appstore/pulls/sethforprivacy***\n\n## Requirements\n\n* [Git](https://git-scm.com/downloads)\n* [Docker Engine](https://docs.docker.com/engine/install/)\n* [Docker Compose](https://docs.docker.com/compose/install/)\n* Ports `80/tcp`, `443/tcp`, `18080/tcp`, `18083/tcp`, `3333/tcp`, `37889/tcp`, and `18089/tcp` exposed/forwarded to the host\n* DNS entries for your top-level domain and each desired sub-domain\n\n## Included Services\n\n* [Nextcloud](https://github.com/nextcloud/server)\n  * A self-hosted server for hosting files, photos, backups, contacts, calendars, and much more\n* [Uptime-kuma](https://github.com/louislam/uptime-kuma)\n  * It is a self-hosted monitoring tool like \"Uptime Robot\"\n* [Libretranslate](https://github.com/LibreTranslate/LibreTranslate)\n  * Free and Open Source Machine Translation API, entirely self-hosted\n* [SearXNG](https://github.com/searxng/searxng)\n  * a privacy-respecting, hackable metasearch engine\n* [Send](https://github.com/timvisee/send)\n  * a fork of Mozillas's Firefox Send, which was an encrypted file sharing tool\n* [Wordpress](https://github.com/WordPress/WordPress)\n  * WordPress is a free and open-source content management system (Website Builder)\n* [Cryptpad](https://github.com/xwiki-labs/cryptpad)\n  * CryptPad is a collaboration suite that is end-to-end-encrypted and open-source\n* [P2Pool](https://github.com/SChernykh/p2pool)\n  * Decentralized pool for Monero mining\n* [Invidious](https://github.com/iv-org/invidious)\n  * Invidious is an alternative front-end to YouTube \n* [Monero](https://github.com/sethforprivacy/simple-monerod-docker)\n  * A self-sovereign, private-by-default, digital cash\n  * This service runs a pruned Monero node, allowing you to connect your own Monero wallet(s) directly to your own node\n* [Nitter](https://github.com/zedeus/nitter)\n  * A privacy-preserving Twitter front-end\n* [PrivateBin](https://privatebin.info/)\n  * A privacy-preserving and encrypted-by-default pastebin\n* [Teddit](https://codeberg.org/teddit/teddit)\n  * A privacy-preserving Reddit front-end\n* [Wallabag](https://github.com/wallabag/wallabag)\n  * A privacy-preserving article reader in the vein of Pocket\n* [Monero blockchain explorer](https://github.com/moneroexamples/onion-monero-blockchain-explorer)\n  * A self-hosted Monero blockchain explorer\n* [Conduit](https://conduit.rs)\n  * A self-hosted Matrix homeserver written in Rust\n* [Jellyfin](https://github.com/jellyfin/jellyfin)\n  * A software media system with no strings attached, no premium licenses or features, and no hidden agendas\n\n*NOTE: If you do not want to run one of the services above simply comment out or delete the relevant service section from `docker-compose.yml`.*\n\n## How does it work?\n\nThis repo relies on Docker Compose to configure and run all of the above services, leveraging Traefik to automatically expose each service, [request and maintain](https://doc.traefik.io/traefik/user-guides/docker-compose/acme-tls/) Let's Encrypt certificates for SSL, and handle all proxying.\n\n## Starting the Services\n\nYou will need to clone this repository to the host you want running these services first:\n\n```bash\ngit clone https://github.com/sethforprivacy/self-hosted-services.git\ncd self-hosted-services\n```\n\nOnce cloned, set the necessary passwords and desired sub-domains in the `.env` file (*PLEASE DO NOT COPY THE FOLLOWING CONFIG, CHANGE THE PASSWORDS AND HOSTNAMES APPROPRIATELY IN YOUR LOCAL `.env` FILE*):\n\n```ini\n# Nextcloud Variables\nNEXTCLOUD_HOSTNAME=nextcloud.mydomain.com\nNEXTCLOUD_ADMIN_USER=\nNEXTCLOUD_ADMIN_PASSWORD=\nPOSTGRES_PASSWORD=\n\n# Wallabag Variables\nWALLABAG_HOSTNAME=wallabag.mydomain.com\nWALLABAG_DB_ROOT_PASS=\nWALLABAG_DB_PASS=\nWALLABAG_URL=https://wallabag.mydomain.com\n\n# Teddit Variables\nTEDDIT_HOSTNAME=teddit.mydomain.com\n\n# Nitter Variables\nNITTER_HOSTNAME=nitter.mydomain.com\n\n# Traefik Variables\nTRAEFIK_HOSTNAME=traefik.mydomain.com\n\n# Heimdall Variables\nDASHBOARD_HOSTNAME=dashboard.mydomain.com\nDASHBOARD_TZ=America/New York\n\n# Privatebin Variables\nPRIVATEBIN_HOSTNAME=paste.mydomain.com\n\n# Monero explorer variables\nEXPLORER_HOSTNAME=explorer.mydomain.com\n\n# Let's Encrypt Variables\nLE_EMAIL_ADDRESS=myemail@pm.me\n```\n\nNote that all hostnames used must already have DNS entries configured with your domain provider in order for certificate generation to function properly.\n\nEdit the Nitter configuration file:\n\n* Nitter\n  * Replace the `hostname`, `replaceTwitter`, and `replaceYouTube` values with the relevant hostnames\n\n* SearXNG\n  * Generate MORTY_KEY `sed -i \"s|ReplaceWithARealKey\\!|$(openssl rand -base64 33)|g\" settings.yml .env`\n  * go into the settings.yml file and replace the searx.mydomain.com at the bottom of the file with your domain.\n\n* P2Pool\n  * Hugepages are very important for optimal mining performance. You need to enable them first using the following commands:\n``` bash\nsudo sysctl vm.nr_hugepages=3072\nsudo bash -c \"echo vm.nr_hugepages=3072 \u003e\u003e /etc/sysctl.conf\"\n```\nNote: If your VPS or Server does not have enough RAM you can reduce it by using 1168 instead of 3072\n\n* Conduit\n  * Start by planning out your setup. If you are willing to dedicate the domain you want to use as the handle:\n  * @user:domain.tld, then just set that in Conduit_Hostname in .env and in conduit/wellknown.conf as the whole \u003csubdomain\u003e.\u003cdomain\u003e part\n  * If you wish to have a website, or other stuff on that domain instead, then you will need to dive-in some way or another.\n  * Let's say you're okay with having the handle look like @user:subdomain.domain.tld, then just set that in the files mentioned above.\n  * If you wish, to have the domain in the handle, and in use at the same time, you will need to dive into the docker-compose.yml itself\n  * and set the line with comment: `#Change to root domain if desired` to the root domain, otherwise keep the subdomain everywhere else\n  * Set up redirect on the route `https://domain.tld/.well-known/matrix/*` to `https://subdomain.domain.tld/.well-known/matrix/:splat`\n  * At least this setup was tested. Feel free to come up with easier ways to this setup.\n  * Otherwise if you get stuck, leave an issue, someone will surely help out.\n\nStart-up the services with Docker Compose:\n\n* `docker-compose up -d`\n\n## Tor Support\n\nCurrently Monero, P2Pool, Nitter, SearXNG, Invidious, Libretranslate, and Teddit get default Tor support, but I will likely expand that in the future. To list Onion services, simply run:\n\n* `docker exec -ti tor onions`\n\n## Updates\n\nAutomatic updates are provided by the [Watchtower](https://containrrr.dev/watchtower/) container that watches and updates base images of services when available. It will automatically search for, download, and migrate your services to updated images whenever available.\n\n## Logging\n\nIf you find yourself in need of viewing logs for a given service, simply run the following to tail all logs:\n\n```bash\ndocker-compose logs --follow\n```\n\nTo view the logs of a single service, run:\n\n```bash\ndocker-compose logs --follow \u003cservice_name\u003e\n```\n\ni.e.:\n\n```bash\ndocker-compose logs --follow monerod\n```\n\n## Getting Started\n\nAs this simply helps you get these services running, using each service is outside of the scope of this project. However, below are some links for getting started with each:\n\n* [Nextcloud](https://docs.nextcloud.com/server/21/user_manual/en/)\n* [Monero](https://sethforprivacy.com/guides/run-a-monero-node/#sending-commands-to-your-node)\n* [Nitter](https://nitter.net/about)\n* [PrivateBin](https://privatebin.info/)\n* [Teddit](https://codeberg.org/teddit/teddit)\n* [Wallabag](https://www.wallabag.it/en/features)\n* [Invidious](https://docs.invidious.io/)\n* [P2Pool](https://github.com/SChernykh/p2pool)\n* [CryptPad](https://docs.cryptpad.fr/en/index.html)\n* [WordPress](https://wordpress.org/support/)\n* [Send](https://github.com/timvisee/send/tree/master/docs)\n* [Uptime-kuma](https://github.com/louislam/uptime-kuma/wiki/)\n* [SearXNG](https://searxng.github.io/searxng/)\n* [Libretranslate](https://github.com/LibreTranslate/LibreTranslate)\n* [Conduit](https://gitlab.com/famedly/conduit#how-can-i-deploy-my-own)\n* [Jellyfin](https://jellyfin.org/docs)\n\n## Donations\n\nIf you decide to run this and use these services, please don't forget to donate to those people making these services a reality!\n\n* [Monero](https://ccs.getmonero.org/funding-required/)\n* [Nitter](https://github.com/zedeus/nitter#nitter)\n* [Teddit](https://codeberg.org/teddit/teddit#teddit)\n* [Wallabag](https://liberapay.com/wallabag/donate)\n* [Invidious](https://github.com/iv-org/invidious#donate)\n* [P2Pool](https://github.com/SChernykh/p2pool#donations)\n* [CryptPad](https://github.com/xwiki-labs/cryptpad)\n* [WordPress](https://wordpressfoundation.org/donate/)\n* [Uptime-kuma](https://opencollective.com/uptime-kuma)\n* [SearXNG](https://www.searx.me/static/donate.html)\n* [Conduit](https://conduit.rs/#donate)\n* [Jellyfin](https://opencollective.com/jellyfin)\n\n## Additional Resources\n\n* [Docker Compose documentation](https://docs.docker.com/compose/)\n\n## Additional Credits\n\n* https://github.com/cmehay/docker-tor-hidden-service\n  * This Docker container makes it incredibly easy to expose Tor Hidden Services of other running containers\n* https://github.com/containrrr/watchtower\n  * Watchtower automates updating base images for other running containers\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsethforprivacy%2Fself-hosted-services","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsethforprivacy%2Fself-hosted-services","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsethforprivacy%2Fself-hosted-services/lists"}