victor-rds / docker-etebase Goto Github PK
View Code? Open in Web Editor NEWDocker image files for Etebase server
License: GNU Affero General Public License v3.0
Docker image files for Etebase server
License: GNU Affero General Public License v3.0
How to use etesync notes with this container?
Hi,
I think STATIC_PATH
in https://github.com/victor-rds/docker-etebase/blob/master/examples/production/.env should say /static
instead of "/srv/etebase/static", because the latter crashes with:
Traceback (most recent call last):
File "/usr/local/bin/uvicorn", line 8, in <module>
sys.exit(main())
File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1128, in __call__
return self.main(*args, **kwargs)
File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1053, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1395, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.10/site-packages/click/core.py", line 754, in invoke
return __callback(*args, **kwargs)
File "/usr/local/lib/python3.10/site-packages/uvicorn/main.py", line 437, in main
run(app, **kwargs)
File "/usr/local/lib/python3.10/site-packages/uvicorn/main.py", line 463, in run
server.run()
File "/usr/local/lib/python3.10/site-packages/uvicorn/server.py", line 60, in run
return asyncio.run(self.serve(sockets=sockets))
File "/usr/local/lib/python3.10/asyncio/runners.py", line 44, in run
return loop.run_until_complete(main)
File "uvloop/loop.pyx", line 1501, in uvloop.loop.Loop.run_until_complete
File "/usr/local/lib/python3.10/site-packages/uvicorn/server.py", line 67, in serve
config.load()
File "/usr/local/lib/python3.10/site-packages/uvicorn/config.py", line 458, in load
self.loaded_app = import_from_string(self.app)
File "/usr/local/lib/python3.10/site-packages/uvicorn/importer.py", line 21, in import_from_string
module = importlib.import_module(module_str)
File "/usr/local/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/etebase/./etebase_server/asgi.py", line 19, in <module>
application = create_application()
File "/etebase/./etebase_server/asgi.py", line 12, in create_application
app = create_application()
File "/etebase/./etebase_server/fastapi/main.py", line 78, in create_application
app.mount(settings.STATIC_URL, StaticFiles(directory=settings.STATIC_ROOT), name="static")
File "/usr/local/lib/python3.10/site-packages/starlette/staticfiles.py", line 53, in __init__
raise RuntimeError(f"Directory '{directory}' does not exist")
RuntimeError: Directory '/srv/etebase/static' does not exist
while the former works and prints 0 static files copied to '/srv/etebase/static', 128 unmodified.
Hi, I was trying today to update to the newest version, however the new tags are not available on dockerhub, I see some tags that we're pushed in the last couple of hours, however the ones mentioned on readme.md are not yet available.
Should we wait more time or were they supposed to be there already?
Container variable documentation shows that certificate path in container is /cert/.
In reality container uses /certs/ directory by default for certificates.
Hey, is there any chance that you will update your? Dockerhub repo with the release builds later than 0.7.0?
Thanks for this great repo!
Just wanted to check and see if there was efforts towards making images that are compatible on a raspberry pi?
I wanted to migrate to etebase 2.0 but Im confused by the README.md for the compuse setup. It says: "As an example, this should not be used in real production without changes, this script will initialize a PostgreSQL DB with unsafe options, all the data is saved on docker volumes created by the compose file, be aware this is may not work in your particular setup."
However this is inside the production folder and also linked on the main README.md which I find very confusing. When looking at the docker-compose.yml
The configuration looks quite resonably to me. Passwords are set for postgresql and the databse isnt exposed to the host.
Could you clearify if this is suitable for production or what exactly needs to be changed?
Brand new to Etesync/Etebase. Just tried creating a new alpine container but the logs contain errors when creating a Superuser.
Docker Compose:
version: "3"
services:
etebase:
image: victorrds/etesync:alpine
container_name: "etebase"
volumes:
- ./data:/data:rw
environment:
SERVER: http
SUPER_USER: admin
SUPER_PASS: password
restart: unless-stopped
ports:
- 3735:3735
user: 1000:1000
Error log:
2022-06-18T23:31:38+00:00 [Info] [Entrypoint]: Creating Super User
2022-06-18T23:31:38+00:00 [Info] [Entrypoint]: Starting Etebase
Traceback (most recent call last):
File "/etebase/manage.py", line 21, in <module>
main()
File "/etebase/manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 413, in execute
File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 354, in run_from_argv
self.fetch_command(subcommand).run_from_argv(self.argv)
self.execute(*args, **cmd_options)
File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 398, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python3.10/site-packages/django/core/management/commands/shell.py", line 93, in handle
exec(sys.stdin.read(), globals())
File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'myauth'
INFO: Started server process [1]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:3735 (Press CTRL+C to quit)
Applying sessions.0001_initial... OK
Applying token_auth.0001_initial... OK
I also cannot login to http://0.0.0.0:373/admin
with the Django Superuser details listed in the docker-compose file. Switching to an older version (victorrds/etesync:0.8.3-alpine) appears to work however without any errors.
I'm trying to use the docker image via podman on fedora and encounter this issue
[xcy@pc ~]$ mkdir /tmp/etebase-data
[xcy@pc ~]$ podman run -d -e SUPER_USER=admin -p 3735:3735 -v /tmp/etebase-data:/data victorrds/etesync
Trying to pull registry.fedoraproject.org/victorrds/etesync...
manifest unknown: manifest unknown
Trying to pull registry.access.redhat.com/victorrds/etesync...
name unknown: Repo not found
Trying to pull registry.centos.org/victorrds/etesync...
manifest unknown: manifest unknown
Trying to pull docker.io/victorrds/etesync...
Getting image source signatures
Copying blob 0a5e725150a2 done
Copying blob e4c3d3e4f7b0 done
Copying blob 8275efcd805f done
Copying blob 397dba5694db done
Copying blob 751620502a7a done
Copying blob 101c41d0463b done
Copying blob b1d09d0eabcb done
Copying blob 475299e7c7f3 done
Copying blob ede3eeefc571 done
Copying blob 857376888101 done
Copying blob 4b1e108c39b3 done
Copying blob 5d67812923ed done
Copying blob ed6051ff3b25 done
Copying config 4013e98465 done
Writing manifest to image destination
Storing signatures
f18072de547a5cd62f25fc6addd592fa5676aa6be653bbf9514b7bbf7a07af83
[xcy@pc ~]$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[xcy@pc ~]$ podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f18072de547a docker.io/victorrds/etesync:latest 28 seconds ago Exited (1) 28 seconds ago 0.0.0.0:3735->3735/tcp nifty_germain
[xcy@pc ~]$ podman logs nifty_germain
2020-11-13T04:02:00+00:00 [ERROR] [Entrypoint]:
-----------------------------------------------------------------
Wrong permissions on /data, can't create settings file, without
the correct permissions the container won't start.
Please change the permissions or the user runnning the container.
By default the image runs with 373 as UID and GID.
More details about changing container user:
https://docs.docker.com/engine/reference/run/#user
-----------------------------------------------------------------
[xcy@pc ~]$
I followed https://docs.docker.com/engine/reference/run/#user and tried -u root
and -u root:root
but it didn't fix the issue.
[xcy@pc ~]$ podman logs vigorous_lewin
2020-11-13T04:08:20+00:00 [ERROR] [Entrypoint]: PUID or GUID values not supported!
I get the differences between python:<version>
, python:<version>-alpine
and python:<version>-slim
, but I'm not sure in the case of etebase.
Is there any downside of using slim
or alpine
over latest
? If not, why not using slim
or alpine
by default ?
Which variant are you using ?
2020-11-13T09:12:33+00:00 [Note] [Entrypoint]: Settings file permissions: Ok
2020-11-13T09:12:33+00:00 [Note] [Entrypoint]: Database file permissions: Ok
2020-11-13T09:12:41+00:00 [ERROR] [Entrypoint]:
---------------------------------------------------------------------
This database schema is not compatible with Etebase (EteSync 2.0)
To avoid any data damage the container will now fail to start
Please save your data follow this instructions instructions:
https://github.com/etesync/server#updating-from-version-050-or-before
---------------------------------------------------------------------
There's a few things here: first of all the image doesn't support passing in a UID or GID. I needed to chmod 777
just to get etebase to write to my data path. Have a look at the linuxserver images for how they implement passing these variables into the container.
Second is, given an empty postgres database or internal sqlite database, Etebase/-sync will simply fail to start giving the above error.
etebase:
container_name: etebase
image: victorrds/etebase
restart: always
networks:
- t2_proxy
volumes:
- ./etebase/data:/data
environment:
SERVER: http-socket
SUPER_USER: ${ETEBASE_ADMIN_USER}
SUPER_PASS: /run/secrets/db-password
DB_ENGINE: postgres
DATABASE_NAME: ${DB}
DATABASE_USER: ${DB_USER}
DATABASE_PASSWORD: ${DB_PASSWORD}
DATABASE_HOST: postgres
labels:
- "traefik.enable=true"
## HTTP Routers
- "traefik.http.routers.etebase-rtr.entrypoints=https"
- "traefik.http.routers.etebase-rtr.rule=Host(`etebase.$DOMAINNAME`)"
- "traefik.http.routers.etebase-rtr.tls=true"
- "traefik.http.routers.etebase-rtr.tls.certresolver=default"
## HTTP Services
- "traefik.http.routers.etebase-rtr.service=etebase-svc"
- "traefik.http.services.etebase-svc.loadbalancer.server.port=3735"
etebase-db:
image: postgres:13
container_name: etebase-db
restart: always
volumes:
- ./etebase/db:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USER}
POSTGRES_DB: ${DB}
POSTGRES_HOST_AUTH_METHOD: trust
healthcheck:
interval: 5s
timeout: 3s
retries: 5
labels:
- "traefik.enable=false"
2020-12-20T12:10:30+00:00 [Warn] [Entrypoint]: Running container as Root is not recommended, please avoid if possible.
2020-12-20T12:10:30+00:00 [Note] [Entrypoint]: [ /data/etebase-server.ini | 373:373 -rwxr-x--- ] permissions: Ok
2020-12-20T12:10:30+00:00 [Note] [Entrypoint]: [ /data/secret.txt | 373:373 -rwxr-x--- ] permissions: Ok
stat: cannot stat '/srv/etebase/media': No such file or directory
2020-12-20T12:10:30+00:00 [Note] [Entrypoint]: [ ] permissions: Ok
admin
auth
contenttypes
django_etebase
[ ] 0033_collection_uid
[ ] 0034_auto_20201214_1124
[ ] 0035_auto_20201214_1126
[ ] 0036_auto_20201214_1128
myauth
[ ] 0003_auto_20201119_0810
sessions
token_auth
2020-12-20T12:10:45+00:00 [Warn] [Entrypoint]: If necessary please run: docker exec -it 76da320d6d3b python manage.py migrate
0 static files copied to '/srv/etebase/static', 165 unmodified.
2020-12-20T12:10:46+00:00 [Note] [Entrypoint]: Starting Etebase
[uWSGI] getting INI configuration from /uwsgi-etebase.ini
[uwsgi-static] added mapping for /static => /srv/etebase/static
[uwsgi-static] added mapping for /user-media => /data/media
*** Starting uWSGI 2.0.19.1 (64bit) on [Sun Dec 20 12:10:46 2020] ***
compiled with version: 8.3.0 on 19 December 2020 19:49:12
os: Linux-4.4.59+ #25426 SMP PREEMPT Wed Jul 8 03:21:29 CST 2020
nodename: 76da320d6d3b
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 2
current working directory: /etebase
detected binary path: /usr/local/bin/uwsgi
uWSGI running as root, you can use --uid/--gid/--chroot options
setgid() to 373
setuid() to 373
chdir() to /etebase
your processes number limit is 63224
your memory page size is 4096 bytes
detected max file descriptor number: 524288
building mime-types dictionary from file /etc/mime.types...565 entry found
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address 0.0.0.0:3735 fd 3
Python version: 3.9.0 (default, Nov 18 2020, 13:28:38) [GCC 8.3.0]
Python main interpreter initialized at 0x55b3451dfb40
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 485080 bytes (473 KB) for 4 cores
*** Operational MODE: preforking ***
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x55b3451dfb40 pid: 1 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (pid: 46, cores: 1)
spawned uWSGI worker 2 (pid: 47, cores: 1)
spawned uWSGI worker 3 (pid: 48, cores: 1)
spawned uWSGI worker 4 (pid: 49, cores: 1)
[pid: 47|app: 0|req: 1/1] 172.22.0.19 () {46 vars in 846 bytes} [Sun Dec 20 12:11:27 2020] POST /api/v1/collection/list_multi/?stoken=jAU7slKcIkvL8TbTS0pHZZ-T609PSUwT => generated 145 bytes in 1257 msecs (HTTP/1.1 500) 6 headers in 184 bytes (1 switches on core 0)
[pid: 49|app: 0|req: 1/2] 172.22.0.19 () {46 vars in 846 bytes} [Sun Dec 20 12:11:28 2020] POST /api/v1/collection/list_multi/?stoken=jAU7slKcIkvL8TbTS0pHZZ-T609PSUwT => generated 145 bytes in 258 msecs (HTTP/1.1 500) 6 headers in 184 bytes (1 switches on core 0)
[pid: 48|app: 0|req: 1/3] 172.22.0.19 () {46 vars in 846 bytes} [Sun Dec 20 12:11:29 2020] POST /api/v1/collection/list_multi/?stoken=jAU7slKcIkvL8TbTS0pHZZ-T609PSUwT => generated 145 bytes in 268 msecs (HTTP/1.1 500) 6 headers in 184 bytes (1 switches on core 0)
Android client manual sync errors (you can see it attempting in the last 3 lines of the log). I don't know if this is on the client or server?
Reason being, the radicale plugin has been archived, and the etesync dav bridge is the official platform agnostic way for etesync to caldav conversion. It could be easily included with docker's multi image capabilities
The Alpine image is missing mime types file thus leading to no css displayed.
It is caused by the missing /etc/mime.types
file.
https://uwsgi-docs.readthedocs.io/en/latest/StaticFiles.html#mime-types
PR coming
Title says all, drop support of Daphne ASGI server in favor of Uvicorn ASGI, also drop support of uWSGI since will no longer supported in future versions (See: etesync/server@0fa2f2d)
Hello,
Thank you for maintaining an image and keeping it up to date.
etebase 2.0 allows different database types (such as mariadb, mysql), but the README.md currently only seems to provide two options:
I was wondering if there was a reason or maybe I could help if there was any needed.
Specifically:
docker-etebase/context/entrypoint.sh
Line 115 in e1ef105
We edit this line to have more freedom, we should be good (and all the other relevant options with it).
Link:
docker-etebase/context/entrypoint.sh
Line 178 in e1ef105
engine = django.db.backends.mysql
name = etebase
user = etebase
password = your-password
host = 127.0.0.1
port = 3306
Source^: https://www.linuxbabe.com/ubuntu/install-etesync-server-ubuntu
Another question was, the docker would potentially give an error if it's above 1024 (or maybe I read it incorrectly)? MySQL typically runs on 3306, is there a good way to handle this?
Current I placed the etebase-server.ini
in /data
and pre fill the configuration if anyone is in the same boat as I.
Edit: added links to make the issue more specific, added current workaround.
Hi,
I'm creating a local image with:
git clone --single-branch https://github.com/victor-rds/docker-etebase.git
cd docker-etebase
docker build -f tags/alpine/Dockerfile --tag etesync:alpine .
The I test running the container (without sharing a folder):
docker run -e SUPER_USER=admin -p 8080:3735 etesync:alpine
The execution stops with the same error reported in etesync/server#132
If I run into the Docker image and run uvicorn etebase_server.asgi:application --host 0.0.0.0 --port 8000
the uwsgi server starts.
Downloading the image from DockerHub and running that works just fine.
I am still investigating, am I missing anything?
thanks
I just started exploring the possibilities of running own instance of etebase and found out there are at least two well maintained docker repositories:
My question - from the position of a newcomer - is simple. Namely what are the differences (technically, release-management, options/choices, etc.) and a reasoning why this non-upstream repository actually exists 😉.
Any insights?
Thanks a lot!
Add web client to the image, using multi-image build
There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.
Location: .github/renovate.json
Error type: The renovate configuration file contains some invalid settings
Message: packageRules[1]: packageRules cannot combine both matchUpdateTypes and versioning. Rule: {"matchDatasources":["docker"],"matchPackageNames":["python"],"matchUpdateTypes":["major","minor"],"versioning":"pep440","enabled":false}
On the docker page: https://hub.docker.com/r/victorrds/etesync under "Usage" the link to the docker-compose examples is broken:
You can find more examples, using docker-compose here
Clicking on the "Here" link returns a 404 page.
Request to add etesync-dav
Dependencies :
https://github.com/etesync/radicale_storage_etesync
https://github.com/Kozea/Radicale
I trying to setup etebase over SSL using Let's Encrypt certificates, I have the folder mounted in the container with the privkey.pem, fullchain.pem and cert.pem certificates.
I have the X509_CRT and X509_KEY env variables set, and it workx as expected. I can connect to etebase from the android client, although I need to manually approve the certificate as the chain is missing. I can navigate to the etebase "It Work's" website, and the browser recognizes the correct SSL certificates. All good, super easy to setup, thanks a bunch!
When trying to connect to etebase from the etesync-dav client I get the following error:
unable to get local issuer certificate
Based on my research on SSL chains, (prompted by my initial post over on etesync-dav). I think I need to add the fullchain.pem certificate to the etebase configuration so that it can server the intermediate LetsEncrypt certificate to the etesync-dav client. However I don't see any envriomental variables in the docs that supports this.
Is this not supported, not documented, or am I fundamentally misunderstanding the issue?
Thanks for your time.
This SO comment fixed it for me: apk add cargo
Even with the use of volumes and after reading and trying the suggestions in #41 and #39, I'm still getting an error:
etebase | 2021-01-03T18:01:55+00:00 [ERROR] [Entrypoint]: "
etebase | 2021-01-03T18:01:55+00:00 [Note] [Entrypoint]: [ /data/etebase-server.ini | 373:373 -rw-r--r-- ] permissions: Ok
etebase | 2021-01-03T18:01:55+00:00 [Note] [Entrypoint]: [ /data/secret.txt | 373:373 -rw-r--r-- ] permissions: Ok
etebase | 2021-01-03T18:01:55+00:00 [Note] [Entrypoint]: [ /data/media | 373:373 drwxr-x--- ] permissions: Ok
etebase | 2021-01-03T18:01:56+00:00 [ERROR] [Entrypoint]: "
etebase exited with code 1
What am I doing wrong? Any help appreciated, thanks 😊
Hey there, I'm running one of the early builds (from when you offered alpine 3.6 and 3.7 as options). I've tried spinning up the latest version, both by building the Alpine version myself, and by pulling your docker image - both of these don't seem to work.
When using my existing DB, I'm getting error 500's when logging in to /admin. When trying to run it with creating a new DB, it never seems to write anything to disk. Directory owned as 1000:1000 which I believe you're running as - tried http + django as servers (same results on both). Any suggestions?
Edit: From what I can tell, it's chucking the SQLite file in the /etesync folder instead of /data, and having it owned as root
instead of ID 1000.
Hello.
I'm using EteBase docker-container with Postgres, just like in your example.
I found an instruction of how to backup EteSync data without using a container.
Only I did not understand how best to backup EteSync data when using Postgres container?
As I understand I should backup secret.txt
file. I can copy this file to my host machine by command: docker cp <name-of-my-etebase-app-container>:/data/secret.txt ~/
And as I understand I should make dump of Postgres to backup data with my calendars, tasks and contacts and copy this dump to my host machine. But I don't know how to do this.
Could you give me an example on how to do this?
Am I going to use a good backup method? Maybe there is an easier and more convenient method?
I set up Etebase v2 using your image (migrating from my private image for v1). However, not all of what I would like to have learned from the README was in there, so here are a couple of points that I think could make it more helpful.
Apology: This is kinda a quick dump of all of my thoughts into a single issue. If you want, we can split this up into multiple ones.
Another one that can be usefull is the /etebase/static, ...
Looking at the Dockerfile, isn't it /srv/etebase/static
?
Maybe media-root/url deserves a mention here as well, that it can be persistent?
At least, since the example ini file mentions it and your entrypoint.sh
configures it as well.
On this sidenote: Does Etebase store anything in MEDIA_ROOT @tasn?
Defines file that contains the value for django's SECRET_KEY, if not found a new one is generated. default: /etesync/secret.txt
True, this is Django's default. But doesn't the Dockerfile effectively change the default to /data/secret.txt
?
A mention in the README that the container runs Etebase as 373:373 and a reminder to chown
any mapped volumes accordingly would be nice as well.
Your folder structure into /etebase
(code), /data
(db, secret, config) and /srv/etebase/
(anything shared with the webserver) does make sense.
Maybe this could be mentioned in the README as well.
This informations helps me as the user of the image understand more quickly what the volume mapping from the host to the container should be.
Currently you seem to have a local copy of the Etebase server repo that you pull - which is how the code gets into the container during build time.
This works fine for people using your image from Docker Hub (given that they trust you).
Still, maybe it would be cleaner to get the Etebase code within the Dockerfile itself, either by cloning the repo or curl
ing a release.
On one hand, the Dockerfile would get more complicated (extra steps to download and cleanup afterwards), on the other it would be much clearer where the Etebase code is coming from, and which version is included in an image.
Also, anybody cloning this repo can immediately run docker build
without having to also explicitly clone the etebase repo.
This took me a while but I figured out that I have to mount /srv/etebase/static instead of /srv/etebase. I think it should be changed in the readme.
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
These branches will be created by Renovate only once you click their checkbox below.
These updates have all been created already. Click a checkbox below to force a retry/rebase of any.
docker/setup-buildx-action
, docker/setup-qemu-action
)Dockerfile.template
tags/alpine/Dockerfile
python 3.12.4-alpine
tags/base/Dockerfile
python 3.12.4
tags/slim/Dockerfile
python 3.12.4-slim
.github/workflows/call_build_push.yml
actions/checkout v4
docker/metadata-action v5.5.1
docker/setup-qemu-action v3.0.0
docker/setup-buildx-action v3.3.0
docker/login-action v3.2.0
docker/build-push-action v5.4.0
.github/workflows/call_pr_build.yml
actions/checkout v4
docker/setup-buildx-action v3.3.0
docker/build-push-action v5.4.0
.github/workflows/call_release.yml
actions/checkout v4
ncipollo/release-action v1
.github/workflows/manual-build.yml
actions/checkout v4
.github/workflows/pr-context.yml
actions/checkout v4
redhat-plumbers-in-action/differential-shellcheck v5
.github/workflows/trigger-new-version.yml
actions/checkout v4
.github/workflows/ztest_call_metadata.yml
actions/checkout v4
actions/checkout v4
docker/metadata-action v5.5.1
server_version
etesync/server v0.14.2
When I first start the container, I get this error:
stat: cannot statx '/data/etebase-server.ini': No such file or directory
I have to restart the container for it to be generated. After I start the container again, I get this:
stat: cannot statx '/data/db.sqlite3': No such file or directory
Docker Compose file:
services:
backend:
image: victorrds/etesync
container_name: etebase
environment:
- SERVER=uvicorn
- DB_ENGINE=sqlite
- TIME_ZONE=UTC-8
volumes:
- data:/data
volumes:
data:
networks:
default:
name: reverse_proxy
external: true
If I remove the TIME_ZONE
variable, the container starts just fine and creates the configuration file and database.
AFAIK there is no easy way to get notification when new images is published on Docker Hub, so… can you please start making GitHub releases when you push docker image updates?
Today wanted to spin new etesync container based on alpine. Container fails to start with Wrong permission in: /data
error. The /data is mounted dir from host, and has correct (373) user and group set.
Inside of the container (the entrypoint changed to /bin/bash) the etesync user has no problems entering and writing to /data directory.
Starting the etesync:slim with same dir and parameters works just fine.
The etesync:alpine image used: 2ac3f63fedfd
Logs from container start with DEBUG flag set to true below:
docker run -d -e DEBUG=true -e SUPER_USER=tkrn -e SERVER=https -p 1444:3735 -v /home/data/etebase/:/data --name etesync victorrds/etesync:alpine
e350d2557b5f24e87f3c559c89d9aea976c0d004ded838860ce8386392da61a6
root@prehyba /home/data # docker logs etesync
+ '[' '!' -z ']'
+ declare -r MANAGE=/etebase/manage.py
++ id -u
+ declare -r C_UID=373
++ id -g
+ declare -r C_GID=373
+ declare -r 'ERROR_PERM_TEMPLATE=
-----------------------------------------------------------------
Wrong permissions in: %s
%s
Please check the permissions or the user runnning the container.
Current user id: 373 | Current group id: 373
More details about changing container user:
https://docs.docker.com/engine/reference/run/#user
-----------------------------------------------------------------'
+ declare -r 'ERROR_DB_TEMPLATE=
---------------------------------------------------------------------
%bThis database schema is not compatible with Etebase (EteSync 2.0)
To avoid any data damage the container will now fail to start
Please save your data follow this instructions instructions:
https://github.com/etesync/server#updating-from-version-050-or-before
---------------------------------------------------------------------'
+ init_env
+ '[' '!' -z '' ']'
+ '[' '!' -z '' ']'
+ '[' 373 -eq 0 ']'
+ '[' 373 -eq 0 ']'
+ : false
+ : en-us
+ : UTC
+ : ChangeLog.md LICENSE README.md django_etebase etebase_server icon.svg manage.py myauth pyproject.toml requirements.in requirements.txt templates
+ declare -g -x X509_CRT=/data/certs/crt.pem
+ declare -g -x X509_KEY=/data/certs/key.pem
+ file_env DB_ENGINE sqlite
+ local var=DB_ENGINE
+ local fileVar=DB_ENGINE_FILE
+ local def=sqlite
+ '[' '' ']'
+ local val=sqlite
+ '[' '' ']'
+ '[' '' ']'
+ export DB_ENGINE=sqlite
+ DB_ENGINE=sqlite
+ unset DB_ENGINE_FILE
+ file_env DATABASE_NAME
+ local var=DATABASE_NAME
+ local fileVar=DATABASE_NAME_FILE
+ local def=
+ '[' '' ']'
+ local val=
+ '[' '' ']'
+ '[' '' ']'
+ export DATABASE_NAME=
+ DATABASE_NAME=
+ unset DATABASE_NAME_FILE
+ '[' sqlite = sqlite ']'
++ basename ''
+ local _DB_FILENAME=
+ '[' -z '' ']'
+ DATABASE_NAME=/data/db.sqlite3
+ '[' 3735 -lt 1024 ']'
+ check_perms /data/etebase-server.ini
+ local FILE_PATH=/data/etebase-server.ini
++ dirname /data/etebase-server.ini
+ local DIR_PATH=/data
+ local PERM_TYPE=
+ '[' 373 -ne 0 ']'
+ '[' '!' -e /data/etebase-server.ini ']'
+ '[' '!' -w /data ']'
+++ get_file_info /data
+++ stat -c '%n | %u:%g %A' /data
++ printf '
-----------------------------------------------------------------
Wrong permissions in: %s
%s
Please check the permissions or the user runnning the container.
Current user id: 373 | Current group id: 373
More details about changing container user:
https://docs.docker.com/engine/reference/run/#user
-----------------------------------------------------------------' /data 'Cannot write on /data | 373:373 drwxr-xr-x'
+ dckr_error '
-----------------------------------------------------------------
Wrong permissions in: /data
Cannot write on /data | 373:373 drwxr-xr-x
Please check the permissions or the user runnning the container.
Current user id: 373 | Current group id: 373
More details about changing container user:
https://docs.docker.com/engine/reference/run/#user
-----------------------------------------------------------------'
+ dckr_log ERROR '
-----------------------------------------------------------------
Wrong permissions in: /data
Cannot write on /data | 373:373 drwxr-xr-x
Please check the permissions or the user runnning the container.
Current user id: 373 | Current group id: 373
More details about changing container user:
https://docs.docker.com/engine/reference/run/#user
-----------------------------------------------------------------'
+ local type=ERROR
+ shift
++ date -Iseconds
+ printf '%s [%s] [Entrypoint]: %s\n' 2021-11-24T14:40:00+00:00 ERROR '
-----------------------------------------------------------------
Wrong permissions in: /data
Cannot write on /data | 373:373 drwxr-xr-x
Please check the permissions or the user runnning the container.
Current user id: 373 | Current group id: 373
More details about changing container user:
https://docs.docker.com/engine/reference/run/#user
-----------------------------------------------------------------'
2021-11-24T14:40:00+00:00 [ERROR] [Entrypoint]:
-----------------------------------------------------------------
Wrong permissions in: /data
Cannot write on /data | 373:373 drwxr-xr-x
Please check the permissions or the user runnning the container.
Current user id: 373 | Current group id: 373
More details about changing container user:
https://docs.docker.com/engine/reference/run/#user
-----------------------------------------------------------------
+ exit 1
2020-11-13T09:12:33+00:00 [Note] [Entrypoint]: Settings file permissions: Ok
2020-11-13T09:12:33+00:00 [Note] [Entrypoint]: Database file permissions: Ok
2020-11-13T09:12:41+00:00 [ERROR] [Entrypoint]:
---------------------------------------------------------------------
This database schema is not compatible with Etebase (EteSync 2.0)
To avoid any data damage the container will now fail to start
Please save your data follow this instructions instructions:
https://github.com/etesync/server#updating-from-version-050-or-before
---------------------------------------------------------------------
There's a few things here: first of all the image doesn't support passing in a UID or GID. I needed to chmod 777
just to get etebase to write to my data path. Have a look at the linuxserver images for how they implement passing these variables into the container.
Second is, given an empty postgres database or internal sqlite database, Etebase/-sync will simply fail to start giving the above error.
etebase:
container_name: etebase
image: victorrds/etebase
restart: always
networks:
- t2_proxy
volumes:
- ./etebase/data:/data
environment:
SERVER: http-socket
SUPER_USER: ${ETEBASE_ADMIN_USER}
SUPER_PASS: /run/secrets/db-password
DB_ENGINE: postgres
DATABASE_NAME: ${DB}
DATABASE_USER: ${DB_USER}
DATABASE_PASSWORD: ${DB_PASSWORD}
DATABASE_HOST: postgres
labels:
- "traefik.enable=true"
## HTTP Routers
- "traefik.http.routers.etebase-rtr.entrypoints=https"
- "traefik.http.routers.etebase-rtr.rule=Host(`etebase.$DOMAINNAME`)"
- "traefik.http.routers.etebase-rtr.tls=true"
- "traefik.http.routers.etebase-rtr.tls.certresolver=default"
## HTTP Services
- "traefik.http.routers.etebase-rtr.service=etebase-svc"
- "traefik.http.services.etebase-svc.loadbalancer.server.port=8080"
etebase-db:
image: postgres:13
container_name: etebase-db
restart: always
volumes:
- ./etebase/db:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USER}
POSTGRES_DB: ${DB}
POSTGRES_HOST_AUTH_METHOD: trust
healthcheck:
interval: 5s
timeout: 3s
retries: 5
labels:
- "traefik.enable=false"
LDAP support was added to Etebase a couple of weeks ago. It supports easy config, so integrating it into this Docker image should be straightforward:
https://github.com/etesync/server/blob/master/etebase-server.ini.example#L25-L35
;[ldap]
;server = <The URL to your LDAP server>
;search_base = <Your search base>
;filter = <Your LDAP filter query. '%%s' will be substituted for the username>
; In case a cache TTL of 1 hour is too short for you, set `cache_ttl` to the preferred
; amount of hours a cache entry should be viewed as valid:
;cache_ttl = 5
;bind_dn = <Your LDAP "user" to bind as. Must be a bind user>
; Either specify the password directly, or provide a password file
;bind_pw = <The password to authenticate as your bind user>
;bind_pw_file = /path/to/the/file.txt
Hey when using a slightly modified docker-compose file like the one you used
version: "3"
services:
etebase:
image: victorrds/etesync:alpine
container_name: "etebase"
volumes:
- /path/to/etebase-docker/data:/data:rw
environment:
SERVER: http
restart: always
ports:
- "16735:3735"
with etebase-server.ini content:
[global]
secret_file = /data/secret.txt
debug = false
static_root = /srv/etebase/static
static_url = /static/
media_root = /data/media
media_url = /user-media/
language_code = en-us
time_zone = UTC
[allowed_hosts]
allowed_host1 = *
[database]
engine = django.db.backends.sqlite3
name = /data/db.sqlite3
basically all static files are not found.
How do I figure out the root cause of this problem?
Any help is appreciated, thanks in advance!
Does anyone have an example of how to setup docker-etebase with using Apache as a reverse proxy?
From today I started receiving this error when syncing contacts with a new device:
[pid: 49|app: 0|req: 1/2] 172.27.0.1 () {42 vars in 729 bytes} [Thu Mar 4 08:06:04 2021] GET /api/v1/collection/NDd8633B6aW-dFNAM6fuwxUt5Z9S76_8/item/? => generated 145 bytes in 1046 msecs (HTTP/1.1 500) 6 headers in 184 bytes (1 switches on core 0)
All migrations are done and permissions are fine.
Is this a known issue or has someone else experienced the same?
The latest tag doesn't anymore. When I try docker pull victorrds/etesync
I get this error message:
Using default tag: latest
Error response from daemon: manifest for victorrds/etesync:latest not found: manifest unknown: manifest unknown
I looked up the tags on Docker Hub and saw that there is indeed no latest tag anymore. Is base the new default tag? I don't want to pull the wrong image in case it messes with my configuration.
Can you just run build on docker hub?
Thanks! :D
i run the image (latest or alpine the result is the same)
docker run --rm -v `pwd`/data:/data victorrds/etesync:alpine
i give this stack trace
2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: ------------------------------------------------ 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: Check permission of /data/etebase-server.ini 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: Permissions: Ok 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: ------------------------------------------------ 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: ------------------------------------------------ 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: Check permission of /data/secret.txt 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: Permissions: Ok 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: ------------------------------------------------ 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: ------------------------------------------------ 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: Check permission of /data/media 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: /data/media does not exist 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: Testing parent directory permissions 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: Permissions: Ok 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: ------------------------------------------------ 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: ------------------------------------------------ 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: Check permission of /data/db.sqlite3 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: Permissions: Ok 2022-11-04T15:59:27+00:00 [Info] [Entrypoint]: ------------------------------------------------ admin auth � contenttypes django_etebase myauth sessions token_auth 2022-11-04T15:59:32+00:00 [Warn] [Entrypoint]: If necessary please run: docker exec -it 0513e8fdac0b python manage.py migrate 0 static files copied to '/srv/etebase/static', 128 unmodified. 2022-11-04T15:59:33+00:00 [Info] [Entrypoint]: Starting Etebase INFO: Started server process [1] INFO: Waiting for application startup. ERROR: Traceback (most recent call last): File "/usr/local/lib/python3.10/site-packages/starlette/routing.py", line 621, in lifespan async with self.lifespan_context(app): File "/usr/local/lib/python3.10/site-packages/starlette/routing.py", line 518, in __aenter__ await self._router.startup() File "/usr/local/lib/python3.10/site-packages/starlette/routing.py", line 598, in startup await handler() File "/etebase/./etebase_server/fastapi/main.py", line 66, in on_startup await redisw.setup() File "/etebase/./etebase_server/fastapi/redis.py", line 15, in setup self.redis = await aioredis.from_url(self.redis_uri) File "/usr/local/lib/python3.10/site-packages/redis/asyncio/utils.py", line 16, in from_url return Redis.from_url(url, **kwargs) File "/usr/local/lib/python3.10/site-packages/redis/asyncio/client.py", line 141, in from_url connection_pool = ConnectionPool.from_url(url, **kwargs) File "/usr/local/lib/python3.10/site-packages/redis/asyncio/connection.py", line 1400, in from_url url_options = parse_url(url) File "/usr/local/lib/python3.10/site-packages/redis/asyncio/connection.py", line 1336, in parse_url raise ValueError( ValueError: Redis URL must specify one of the following schemes (redis://, rediss://, unix://) ERROR: Application startup failed. Exiting.
Good evening!
After successfully running the container, I am getting a persistent error when using authentication commands described in the official documentation of Etebase (https://docs.etebase.com/guides/basic_authentication)
For example, on signup, while using this code snippet (NodeJS):
const etebase = await Etebase.Account.signup({ username: username, email: email, }, password, serverURL);
I receive the error described below:
{ Error: 400 Signup is disabled for this server. Please refer to the README for more information. at new ExtendableError (/home/andrei/Apps/etebase-demo/node_modules/etebase/dist/lib-cjs/Exceptions.js:9:23) at new HttpError (/home/andrei/Apps/etebase-demo/node_modules/etebase/dist/lib-cjs/Exceptions.js:14:9) at Authenticator.newCall (/home/andrei/Apps/etebase-demo/node_modules/etebase/dist/lib-cjs/OnlineManagers.js:95:31) at process._tickCallback (internal/process/next_tick.js:68:7) name: 'HTTPError', status: 400, content: { code: 'generic', detail: 'Signup is disabled for this server. Please refer to the README for more information.' } }
Worth mentioning:
Any hints on how the server needs to be configured?
Best Regards,
Andrei
P.S. Thank you for your time & effort into dockerizing etebase :)
I am following your example here: could not translate host name "postgres" to address: Temporary failure in name resolution
My database starts successfully:
022-10-22 01:06:00.329 UTC [1] LOG: starting PostgreSQL 13.8 (Debian 13.8-1.pgdg110+1) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
2022-10-22 01:06:00.330 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
2022-10-22 01:06:00.330 UTC [1] LOG: listening on IPv6 address "::", port 5432
2022-10-22 01:06:00.345 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2022-10-22 01:06:00.384 UTC [25] LOG: database system was shut down at 2022-10-22 01:05:58 UTC
2022-10-22 01:06:00.412 UTC [1] LOG: database system is ready to accept connections
however etesync can't connect to it:
2022-10-22T01:12:00+00:00 [Info] [Entrypoint]: ------------------------------------------------
2022-10-22T01:12:00+00:00 [Info] [Entrypoint]: Check permission of /data/etebase-server.ini
2022-10-22T01:12:00+00:00 [Info] [Entrypoint]: Permissions: Ok
2022-10-22T01:12:00+00:00 [Info] [Entrypoint]: ------------------------------------------------
2022-10-22T01:12:01+00:00 [Info] [Entrypoint]: ------------------------------------------------
2022-10-22T01:12:01+00:00 [Info] [Entrypoint]: Check permission of /data/secret.txt
2022-10-22T01:12:01+00:00 [Info] [Entrypoint]: Permissions: Ok
2022-10-22T01:12:01+00:00 [Info] [Entrypoint]: ------------------------------------------------
2022-10-22T01:12:01+00:00 [Info] [Entrypoint]: ------------------------------------------------
2022-10-22T01:12:01+00:00 [Info] [Entrypoint]: Check permission of /data/media
2022-10-22T01:12:01+00:00 [Info] [Entrypoint]: /data/media does not exist
2022-10-22T01:12:01+00:00 [Info] [Entrypoint]: Testing parent directory permissions
2022-10-22T01:12:01+00:00 [Info] [Entrypoint]: Permissions: Ok
2022-10-22T01:12:01+00:00 [Info] [Entrypoint]: ------------------------------------------------
2022-10-22T01:12:02+00:00 [Error] [Entrypoint]: Failed do access postgres database. Please check the database connection or file permission.
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
self.connect()
File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 33, in inner
return func(*args, **kwargs)
File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 200, in connect
self.connection = self.get_new_connection(conn_params)
File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 33, in inner
return func(*args, **kwargs)
File "/usr/local/lib/python3.10/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection
connection = Database.connect(**conn_params)
File "/usr/local/lib/python3.10/site-packages/psycopg2/__init__.py", line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not translate host name "postgres" to address: Temporary failure in name resolution
The last line appears to be the error:
psycopg2.OperationalError: could not translate host name "postgres" to address: Temporary failure in name resolution
In the docker-compose.yml file, under environment you have DATABASE_HOST: postres
]:
environment:
SERVER: asgi
SUPER_USER: ${ADMIN_USER}
SUPER_PASS: ${ADMIN_PASS}
DB_ENGINE: postgres
DATABASE_NAME: ${DB_NAME}
DATABASE_USER: ${DB_USER}
DATABASE_PASSWORD: ${DB_PASS}
DATABASE_HOST: postgres
Is this meant to be a variable for the IP address of the host? I tried different values such as "localhost" "127.0.0.1" "host.docker.internal: etc but I always get the same error when I restart the etebase container:
psycopg2.OperationalError: could not translate host name "postgres" to address: Temporary failure in name resolution
Am I misunderstanding what this DATABASE_HOST value should be? Even if I change it from 'postgres' to 'localhost' I still get the error about "postgress" so perhaps this isn't even the issue.
When I run the the container again after I remove it. Creating Super user fails with an execption.
When I remove the volume (the data folder). It works again. But this means I cant store data when the container isnt running.
Also the data folder is completly empty.
etesync_1 | Create Database
etesync_1 | Operations to perform:
etesync_1 | Apply all migrations: admin, auth, authtoken, contenttypes, journal, sessions
etesync_1 | Running migrations:
etesync_1 | No migrations to apply.
etesync_1 | Create Super User
etesync_1 | Traceback (most recent call last):
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 85, in _execute
etesync_1 | return self.cursor.execute(sql, params)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py", line 298, in execute
etesync_1 | return Database.Cursor.execute(self, query, params)
etesync_1 | sqlite3.IntegrityError: UNIQUE constraint failed: auth_user.username
etesync_1 |
etesync_1 | The above exception was the direct cause of the following exception:
etesync_1 |
etesync_1 | Traceback (most recent call last):
etesync_1 | File "manage.py", line 22, in <module>
etesync_1 | execute_from_command_line(sys.argv)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
etesync_1 | utility.execute()
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute
etesync_1 | self.fetch_command(subcommand).run_from_argv(self.argv)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 316, in run_from_argv
etesync_1 | self.execute(*args, **cmd_options)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 353, in execute
etesync_1 | output = self.handle(*args, **options)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/core/management/commands/shell.py", line 92, in handle
etesync_1 | exec(sys.stdin.read())
etesync_1 | File "<string>", line 1, in <module>
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/contrib/auth/models.py", line 161, in create_superuser
etesync_1 | return self._create_user(username, email, password, **extra_fields)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/contrib/auth/models.py", line 144, in _create_user
etesync_1 | user.save(using=self._db)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/contrib/auth/base_user.py", line 73, in save
etesync_1 | super().save(*args, **kwargs)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/models/base.py", line 718, in save
etesync_1 | force_update=force_update, update_fields=update_fields)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/models/base.py", line 748, in save_base
etesync_1 | updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/models/base.py", line 831, in _save_table
etesync_1 | result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/models/base.py", line 869, in _do_insert
etesync_1 | using=using, raw=raw)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/models/manager.py", line 82, in manager_method
etesync_1 | return getattr(self.get_queryset(), name)(*args, **kwargs)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/models/query.py", line 1136, in _insert
etesync_1 | return query.get_compiler(using=using).execute_sql(return_id)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/models/sql/compiler.py", line 1289, in execute_sql
etesync_1 | cursor.execute(sql, params)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 68, in execute
etesync_1 | return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
etesync_1 | return executor(sql, params, many, context)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 85, in _execute
etesync_1 | return self.cursor.execute(sql, params)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/utils.py", line 89, in __exit__
etesync_1 | raise dj_exc_value.with_traceback(traceback) from exc_value
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 85, in _execute
etesync_1 | return self.cursor.execute(sql, params)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py", line 298, in execute
etesync_1 | return Database.Cursor.execute(self, query, params)
etesync_1 | django.db.utils.IntegrityError: UNIQUE constraint failed: auth_user.username
etesync_1 | Create Database
etesync_1 | Operations to perform:
etesync_1 | Apply all migrations: admin, auth, authtoken, contenttypes, journal, sessions
etesync_1 | Running migrations:
etesync_1 | No migrations to apply.
etesync_1 | Create Super User
etesync_1 | Traceback (most recent call last):
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 85, in _execute
etesync_1 | return self.cursor.execute(sql, params)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py", line 298, in execute
etesync_1 | return Database.Cursor.execute(self, query, params)
etesync_1 | sqlite3.IntegrityError: UNIQUE constraint failed: auth_user.username
etesync_1 |
etesync_1 | The above exception was the direct cause of the following exception:
etesync_1 |
etesync_1 | Traceback (most recent call last):
etesync_1 | File "manage.py", line 22, in <module>
etesync_1 | execute_from_command_line(sys.argv)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
etesync_1 | utility.execute()
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute
etesync_1 | self.fetch_command(subcommand).run_from_argv(self.argv)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 316, in run_from_argv
etesync_1 | self.execute(*args, **cmd_options)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 353, in execute
etesync_1 | output = self.handle(*args, **options)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/core/management/commands/shell.py", line 92, in handle
etesync_1 | exec(sys.stdin.read())
etesync_1 | File "<string>", line 1, in <module>
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/contrib/auth/models.py", line 161, in create_superuser
etesync_1 | return self._create_user(username, email, password, **extra_fields)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/contrib/auth/models.py", line 144, in _create_user
etesync_1 | user.save(using=self._db)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/contrib/auth/base_user.py", line 73, in save
etesync_1 | super().save(*args, **kwargs)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/models/base.py", line 718, in save
etesync_1 | force_update=force_update, update_fields=update_fields)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/models/base.py", line 748, in save_base
etesync_1 | updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/models/base.py", line 831, in _save_table
etesync_1 | result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/models/base.py", line 869, in _do_insert
etesync_1 | using=using, raw=raw)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/models/manager.py", line 82, in manager_method
etesync_1 | return getattr(self.get_queryset(), name)(*args, **kwargs)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/models/query.py", line 1136, in _insert
etesync_1 | return query.get_compiler(using=using).execute_sql(return_id)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/models/sql/compiler.py", line 1289, in execute_sql
etesync_1 | cursor.execute(sql, params)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 68, in execute
etesync_1 | return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
etesync_1 | return executor(sql, params, many, context)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 85, in _execute
etesync_1 | return self.cursor.execute(sql, params)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/utils.py", line 89, in __exit__
etesync_1 | raise dj_exc_value.with_traceback(traceback) from exc_value
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 85, in _execute
etesync_1 | return self.cursor.execute(sql, params)
etesync_1 | File "/usr/local/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py", line 298, in execute
etesync_1 | return Database.Cursor.execute(self, query, params)
etesync_1 | django.db.utils.IntegrityError: UNIQUE constraint failed: auth_user.username
Just a minor typo:
https://github.com/victor-rds/docker-etebase/blob/master/examples/Standalone
does not exist, instead it should point to:
https://github.com/victor-rds/docker-etebase/blob/master/examples/standalone
Running the docker image (v0.5.3, latest-alpine), I get the following error in the log and the container refuses to start.
Creating etebase ... done
Attaching to etebase
etebase | 2020-11-29T16:48:10+0100 [Note] [Entrypoint]: [ /data/etebase-server.ini ] permissions: Ok
etebase | 2020-11-29T16:48:10+0100 [Note] [Entrypoint]: [ /data/secret.txt ] permissions: Ok
etebase | 2020-11-29T16:48:10+0100 [ERROR] [Entrypoint]:
etebase | -----------------------------------------------------------------
etebase | Wrong permissions in: /srv/etebase
etebase | Cannot create /srv/etebase/media file
etebase | Please check the permissions or the user runnning the container.
etebase | Current user id: 373 | Current group id: 373
etebase | More details about changing container user:
etebase | https://docs.docker.com/engine/reference/run/#user
etebase | -----------------------------------------------------------------
Previously was using 0.5.1 without any issues but after upgrading, this started. Tried with 0.5.2 and 0.5.1, both start fine but I get a "Server 500 sync error" on the web client.
Docker-compose file
version: "3.3"
services:
etebase:
image: victorrds/etebase:alpine
container_name: etebase
volumes:
- '/etc/localtime:/etc/localtime:ro'
- ./data:/data:rw
env_file: .env
restart: unless-stopped
networks:
default:
external:
name: $EXTERNAL
/data
is owned by 373:373.
OS:
Linux hostname 4.19.0-12-amd64 # 1 SMP Debian 4.19.152-1 (2020-10-18) x86_64 GNU/Linux
Adding user: 1000:1000 or 373:373
to docker compose doesn't help.
Error on startup today the alpine tag:
2022-03-29T16:45:09+00:00 [Error] [Entrypoint]: Failed do access postgres database. Please check the database connection or file permission.
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/django/db/backends/postgresql/base.py", line 25, in <module>
import psycopg2 as Database
ModuleNotFoundError: No module named 'psycopg2'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/etebase/manage.py", line 21, in <module>
main()
File "/etebase/manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 395, in execute
django.setup()
File "/usr/local/lib/python3.10/site-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/usr/local/lib/python3.10/site-packages/django/apps/registry.py", line 114, in populate
app_config.import_models()
File "/usr/local/lib/python3.10/site-packages/django/apps/config.py", line 301, in import_models
self.models_module = import_module(models_module_name)
File "/usr/local/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/usr/local/lib/python3.10/site-packages/django/contrib/auth/models.py", line 3, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "/usr/local/lib/python3.10/site-packages/django/contrib/auth/base_user.py", line 48, in <module>
class AbstractBaseUser(models.Model):
File "/usr/local/lib/python3.10/site-packages/django/db/models/base.py", line 122, in __new__
new_class.add_to_class('_meta', Options(meta, app_label))
File "/usr/local/lib/python3.10/site-packages/django/db/models/base.py", line 326, in add_to_class
value.contribute_to_class(cls, name)
File "/usr/local/lib/python3.10/site-packages/django/db/models/options.py", line 207, in contribute_to_class
self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
File "/usr/local/lib/python3.10/site-packages/django/utils/connection.py", line 15, in __getattr__
return getattr(self._connections[self._alias], item)
File "/usr/local/lib/python3.10/site-packages/django/utils/connection.py", line 62, in __getitem__
conn = self.create_connection(alias)
File "/usr/local/lib/python3.10/site-packages/django/db/utils.py", line 204, in create_connection
backend = load_backend(db['ENGINE'])
File "/usr/local/lib/python3.10/site-packages/django/db/utils.py", line 111, in load_backend
return import_module('%s.base' % backend_name)
File "/usr/local/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "/usr/local/lib/python3.10/site-packages/django/db/backends/postgresql/base.py", line 29, in <module>
raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named 'psycopg2'
Images based on Debian (python
and python:slim
) fails when building cryptography
because of missing Rust compiler
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.