Deploy etesync-server (Django ) on ApisCP possible?

Hey ApisCP team, i am in the process of migrating several etesync instances onto new vms and since i am running already a few apiscp instances now for 4 years with really low maintenance (thank you so much!!!) the idea came into my mind that it might be possible to run the etesync app on these apiscp instances.
My background in App deployment compared to my networking/virtualization skills is not the best though and still try to figure out how this would be done or if this is possible at all and hope for some advice.

  1. Is it even possible to run the etesync-server on apiscp since it depends on uvicorn or another ASGI server?
  2. I assume if i want to deploy etesync as 1-click app i need to make a compatible layout explained like here?

For etesync i need postgres and define only two important vars:

static_root = /path/to/static
media_root = /path/to/media 

The media_root is the path where user data is stored and the static_root will be my public folder later in the apiscp passenger is my guess but where would i put best the media_root folder?

Best practice is probably to create a separate etesync user and create a postgres DB with permissions for that user?
Would i point to the DB just with 127.0.0.1:5432 ?

I did also not understand the complete passenger structure yet and was also confused about the Django Quickstart knowledge base article and if its of importance for my goal.

Could you point me into the right directions so i can learn and understand this better? I am thankfull for every help and nudge into the right direction!

If all else falls or your unwilling to help (since its obviously not in the support scope) i would also like to know what the estimated effort for this is.

In general i think etesync would be a nice fit to apiscp since it works seamless everywhere (mailclient, android, ios, win, linux etc.) with no fuss, low resources has e2e encryption by default and is FOSS.
I am sure that the dev would welcome an official integration in ApisCP and dedicate probably a blog entry about it as well. In return a fresh userbase with common interests will be drawn to ApisCP.

Sounds like a WinWin to me! :wink:

A big thanks to the team and the great support you delivered constantly when needed!

Proxy the requests to the dedicated uvicorn instance. Passenger operates in WSGI mode only; for ASGI we’d use Apache to operate as a reverse-proxy then let uvicorn handle asynchronous processing. Run uvicorn listening on localhost (127.0.0.1). uvicorn can be set to load on boot by enabling crontab service for the account, then scheduling it to start on “@reboot” under Dev > Task Scheduler.

If it must be accessible, locate the path within the document root for the domain or subdomain. With a Passenger-recommended layout, it would be under public/.

Yes, or use unix domain socket; this should be automatically picked up (within /run/postgresql).

pyenv install 3.12.1
cd /var/www/
# public/ will be document root, etesync/ app root
mkdir -p etesync/public
# Install etesync
# Run etesync
# Add .htaccess rules in document root to forward requests to uvicorn