Code Monkey home page Code Monkey logo

docker-etebase's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

docker-etebase's Issues

Static path

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.

Latest readme images are not available on docker hub

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?

Update releases on Dockerhub

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!

Compose Production Setup

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?

ModuleNotFoundError: No module named 'myauth'

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.

Can't launch the container via podman: Wrong permissions on /data

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!

latest, alpine or slim variant

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 ?

Etebase fails to start standalone or with postgres

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"

Sync task errors since yesterday

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?

Screenshots of log from client:
etebase-debug-1
etebase-debug-2

Could Issue #3 be reopened (including etesync-dav)

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

Database types

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:

  1. sqlite
  2. postgres

I was wondering if there was a reason or maybe I could help if there was any needed.

Specifically:

elif [ "${DB_ENGINE}" = "postgres" ]; then

We edit this line to have more freedom, we should be good (and all the other relevant options with it).

Link:

engine = django.db.backends.postgresql

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.

Cannot build a working docker image

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

Difference to the upstream docker images (and the reason for existence ;))

I just started exploring the possibilities of running own instance of etebase and found out there are at least two well maintained docker repositories:

  1. upstream-maintained: https://github.com/etesync/etesync-dav/blob/master/README.md#docker
  2. yours

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!

Web Client

Add web client to the image, using multi-image build

Action Required: Fix Renovate Configuration

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}

Chain Certificate

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.

Error in Entrypoint

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 😊

Migration from earlier version

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.

How to backup EteSync data when using Postgres?

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?

Some feedback

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.

1) Data persistence section

Another one that can be usefull is the /etebase/static, ...

Looking at the Dockerfile, isn't it /srv/etebase/static?

2) Data persistence section

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?

3) SECRET_FILE

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?

4) Permissions

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.

5) Folder structure

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.

6) How the etesync code gets into the image

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 curling 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.

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Pending Approval

These branches will be created by Renovate only once you click their checkbox below.

  • chore(deps): update docker/build-push-action action to v6

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

dockerfile
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-actions
.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
regex
server_version
  • etesync/server v0.14.2

  • Check this box to trigger a request for Renovate to run again on this repository

Configuration file, and then SQLite database aren't created if `TIME_ZONE` is set

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.

Make GitHub releases

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?

Curent etesync:alpine fails to start with /data permission error

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

Etebase 2.0 doesn't work with postgres or standalone (Duplicate)

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"

Add LDAP support

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

404 Not Found for static files in standalone docker-compose example

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!

500 Error Syncing Contacts

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?

latest tag doesn't exist anymore

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.

Failed to start , Redis URL must specify one of the following schemes (redis://, rediss://, unix://)

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.

400 - Signup is disabled for this server.

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:

  • serverURL is set to the address of the local server running inside the container. I can connect to /admin via browser, all fine from this point of view.
  • No custom configuration has been done. All config files are out-of-the-box.
  • I took a close look at the README and Documentation. I was not able to find any info on how I can make server allow signups via HTTP requests.
  • Module used in NodeJS: https://www.npmjs.com/package/etebase

Any hints on how the server needs to be configured?

Best Regards,
Andrei

P.S. Thank you for your time & effort into dockerizing etebase :)

etesync can't connect to database " could not translate host name "postgres" to address: Temporary failure in name resolution"

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.

Database error when running a second time

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

Wrong permissions in: /srv/etebase

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 loading psycopg2 module: No module named 'psycopg2'

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'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.