{"id":13441283,"url":"https://github.com/etesync/server","last_synced_at":"2025-05-14T23:07:22.911Z","repository":{"id":27606251,"uuid":"111317770","full_name":"etesync/server","owner":"etesync","description":"The Etebase server (so you can run your own)","archived":false,"fork":false,"pushed_at":"2024-07-12T12:44:26.000Z","size":518,"stargazers_count":1647,"open_issues_count":61,"forks_count":82,"subscribers_count":28,"default_branch":"master","last_synced_at":"2025-05-08T13:02:21.302Z","etag":null,"topics":["django","encryption","end-to-end-encryption","etesync","synchronization"],"latest_commit_sha":null,"homepage":"https://www.etesync.com","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/etesync.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","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},"funding":{"github":"etesync","custom":"https://www.etesync.com/contribute/#donate"}},"created_at":"2017-11-19T17:42:38.000Z","updated_at":"2025-05-07T22:24:21.000Z","dependencies_parsed_at":"2024-06-03T03:31:18.696Z","dependency_job_id":"0af52a8a-60a9-4695-ae13-2adaf84f1c4c","html_url":"https://github.com/etesync/server","commit_stats":null,"previous_names":["etesync/server-skeleton"],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etesync%2Fserver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etesync%2Fserver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etesync%2Fserver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etesync%2Fserver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/etesync","download_url":"https://codeload.github.com/etesync/server/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254243362,"owners_count":22038046,"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":["django","encryption","end-to-end-encryption","etesync","synchronization"],"created_at":"2024-07-31T03:01:32.032Z","updated_at":"2025-05-14T23:07:17.902Z","avatar_url":"https://github.com/etesync.png","language":"Python","funding_links":["https://github.com/sponsors/etesync","https://www.etesync.com/contribute/#donate"],"categories":["HarmonyOS","Python","django","Apps"],"sub_categories":["Windows Manager","Crypting"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg width=\"120\" src=\"icon.svg\" /\u003e\n  \u003ch1 align=\"center\"\u003eEtebase - Encrypt Everything\u003c/h1\u003e\n\u003c/p\u003e\n\nAn [Etebase](https://www.etebase.com) (EteSync 2.0) server so you can run your own.\n\n[![Chat with us](https://img.shields.io/badge/chat-IRC%20|%20Matrix%20|%20Web-blue.svg)](https://www.etebase.com/community-chat/)\n\n# Installation\n\n## Requirements\n\nEtebase requires Python 3.7 or newer and has a few Python dependencies (listed in `requirements.in/base.txt`).\n\n## From source\n\nBefore installing the Etebase server make sure you install `virtualenv` (for **Python 3**):\n\n* Arch Linux: `pacman -S python-virtualenv`\n* Debian/Ubuntu: `apt-get install python3-virtualenv`\n* Mac/Windows (WSL)/Other Linux: install virtualenv or just skip the instructions mentioning virtualenv.\n\nThen just clone the git repo and set up this app:\n\n```\ngit clone https://github.com/etesync/server.git etebase\n\ncd etebase\n\n# Set up the environment and deps\nvirtualenv -p python3 .venv  # If doesn't work, try: virtualenv3 .venv\nsource .venv/bin/activate\n\npip install -r requirements.txt\n```\n\n# Configuration\n\nIf you are familiar with Django you can just edit the [settings file](etebase_server/settings.py)\naccording to the [Django deployment checklist](https://docs.djangoproject.com/en/dev/howto/deployment/checklist/).\nIf you are not, we also provide a simple [configuration file](etebase-server.ini.example) for easy deployment which you can use.\nTo use the easy configuration file rename it to `etebase-server.ini` and place it either at the root of this repository or in `/etc/etebase-server`.\n\nThere is also a [wikipage](https://github.com/etesync/server/wiki/Basic-Setup-Etebase-(EteSync-v2)) detailing this basic setup.\n\nSome particular settings that should be edited are:\n  * [`ALLOWED_HOSTS`](https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-ALLOWED_HOSTS)\n    -- this is the list of host/domain names or addresses on which the app\nwill be served. For example: `etebase.example.com`\n  * [`DEBUG`](https://docs.djangoproject.com/en/dev/ref/settings/#debug)\n    -- handy for debugging, set to `False` for production\n  * [`MEDIA_ROOT`](https://docs.djangoproject.com/en/dev/ref/settings/#media-root)\n    -- the path to the directory that will hold user data.\n  * [`SECRET_KEY`](https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-SECRET_KEY)\n    -- an ephemeral secret used for various cryptographic signing and token\ngeneration purposes. See below for how default configuration of\n`SECRET_KEY` works for this project.\n\nNow you can initialise our django app.\n\n```\n./manage.py migrate\n```\n\nCreate static files:\n\n```\n./manage.py collectstatic\n```\n\nAnd you are done! You can now run the debug server just to see everything works as expected by running:\n\n```\nuvicorn etebase_server.asgi:application --host 0.0.0.0 --port 8000\n```\n\nUsing the debug server in production is not recommended, so please read the following section for a proper deployment.\n\n# Production deployment\n\nThere are more details about a proper production setup using uvicorn and Nginx in the [wiki](https://github.com/etesync/server/wiki/Production-setup-using-Nginx).\n\nThe webserver should also be configured to serve Etebase using TLS.\nA guide for doing so can be found in the [wiki](https://github.com/etesync/server/wiki/Setup-HTTPS-for-Etebase) as well.\n\nThe Etebase server needs to be aware of the URL it's been served as, so make sure to forward the `Host` header to the server if using a reverse proxy. For example, you would need to use the following directive in nginx: `proxy_set_header Host $host;`.\n\n# Data locations and backups\n\nThe server stores user data in two different locations that need to be backed up:\n1. The database - how to backup depends on which database you use.\n2. The `MEDIA_ROOT` - the path where user data is stored.\n\n# Usage\n\nCreate yourself an admin user:\n\n```\n./manage.py createsuperuser\n```\n\nAt this stage you need to create accounts to be used with the EteSync apps. To do that, please go to:\n`www.your-etesync-install.com/admin` and create a new user to be used with the service. No need to set\na password, as Etebase uses a zero-knowledge proof for authentication, so the user will just create\na password when creating the account from the apps.\n\nAfter this user has been created, you can use any of the EteSync apps to signup (or login) with the same username and\nemail in order to set up the account. The password used at that point will be used to setup the account.\nDon't forget to set your custom server address under \"Advanced\".\n\n# `SECRET_KEY` and `secret.txt`\n\nThe default configuration creates a file “`secret.txt`” in the project’s\nbase directory, which is used as the value of the Django `SECRET_KEY`\nsetting. You can revoke this key by deleting the `secret.txt` file and the\nnext time the app is run, a new one will be generated. Make sure you keep\nthe `secret.txt` file secret (e.g. don’t accidentally commit it to version\ncontrol). However, backing it up is okay, and it makes it easier to restore\nthe database to a new EteSync server, but it's not essential. If you want to\nchange to a more secure system for storing secrets, edit `etesync_server/settings.py`\nand implement your own method for setting `SECRET_KEY` (remove the line\nwhere it uses the `get_secret_from_file` function).  Read the Django docs\nfor more information about the `SECRET_KEY` and its uses.\n\n# Updating\n\n## Updating from version 0.5.0 onwards\n\nFirst, run `git pull --rebase` to update this repository.\nThen, inside the virtualenv:\n1. Run `pip install -U -r requirements.txt` to update the dependencies.\n2. Run `python manage.py migrate` to perform database migrations.\n\nYou can now restart the server.\n\n## Updating from version 0.5.0 or before\n\nThe 0.5.0 release marks the change to the EteSync 2.0 protocol. EteSync 2.0 accounts are substantially different to 1.0 accounts, and require additional upgrade steps. In addition, the servers are incompatible, so 0.5.0 requires a fresh installation.\n\nHere are the update steps:\n1. Chose any of the [the migration tools](https://www.etesync.com/user-guide/migrate-v2/) and make sure the underlying apps are up to date with all of your data. So for example, if you are using the Android client, make sure to sync before commencing.\n2. Install the 0.5.0 version to a new path (you can't reuse the same database).\n3. Run the 0.5.0 account and create the appropriate users as described in the installation/upgrade steps above.\n4. Run the migration tool to migrate all of your data.\n5. Add your new EteSync 2.0 accounts to all of your devices.\n\n# Testing\n\nDocker images named `etesync/test-server:\u003cversion\u003e` and `:latest` are available for testing etesync clients.\nThis docker image starts a server on port 3735 that supports user signup (without email confirmation), is in debug mode (thus supporting the reset endpoint), and stores its data locally.\nIt is in no way suitable for production usage, but is able to start up quickly and makes a good component of CI for etesync clients and users of those clients.\n\n# User signup\n\nInstead of having to create Django users manually when signup up Etebase users, it is also possible to allow automatic signup.\nFor example, this makes sense when putting an Etebase server in production.\nHowever, this does come with the added risk that everybody with access to your server will be able to sign up.\n\nIn order to set it up, comment out the line `ETEBASE_CREATE_USER_FUNC = \"etebase_server.django.utils.create_user_blocked\"` in `server/settings.py` and restart your Etebase server.\n\n# License\n\nEtebase is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3 as published by the Free Software Foundation. See the [LICENSE](./LICENSE) for more information.\n\nA quick summary can be found [on tldrlegal](https://tldrlegal.com/license/gnu-affero-general-public-license-v3-(agpl-3.0)). Though in even simpler terms (not part of the license, and not legal advice): you can use it in however way you want, including self-hosting and commercial offerings as long as you release the code to any modifications you have made to the server software (clients are not affected).\n\n## Commercial licensing\n\nFor commercial licensing options, contact license@etebase.com \n\n# Financially Supporting Etebase\n\nPlease consider registering an account even if you self-host in order to support the development of Etebase, or visit the [contribution](https://www.etesync.com/contribute/) for more information on how to support the service.\n\nBecome a financial contributor and help us sustain our community!\n\n## Supporters ($20 / month)\n\n[![jzacsh](https://github.com/jzacsh.png?size=80)](https://github.com/jzacsh)\n\n## Contributors ($10 / month)\n\n[![ilovept](https://github.com/ilovept.png?size=40)](https://github.com/ilovept)\n[![ryanleesipes](https://github.com/ryanleesipes.png?size=40)](https://github.com/ryanleesipes)\n[![DanielG](https://github.com/DanielG.png?size=40)](https://github.com/DanielG)\n[![Kanaye](https://github.com/Kanaye.png?size=40)](https://github.com/Kanaye)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fetesync%2Fserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fetesync%2Fserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fetesync%2Fserver/lists"}