standardnotes / self-hosted

[Legacy] Self-host your own Standard Notes server for end-to-end encrypted notes and files
https://github.com/standardnotes/server
GNU Affero General Public License v3.0
343 stars 39 forks source link

Unable to start Upload Session #69

Open reapermarv opened 2 years ago

reapermarv commented 2 years ago

Service Versions (please complete the following information): Paste the output of ./server.sh version. For example:

             Container                          Repository                 Tag         Image Id       Size
------------------------------------------------------------------------------------------------------------
api-gateway-standalone                standardnotes/api-gateway         1.37.0              c2570ab8bf6b        836MB
auth-standalone                       standardnotes/auth                1.43.0              c92cd09c8a36        894MB
auth-worker-standalone                standardnotes/auth                1.43.0              c92cd09c8a36        894MB
cache-standalone                      redis                             6.0-alpine          131bc9ee328c        31.4MB
db-standalone                         mysql                             5.6                 dd3b2a5dcb48        303MB
syncing-server-js-standalone          standardnotes/syncing-server-js   1.52.0              5ec2d274a36e        1.01GB
syncing-server-js-worker-standalone   standardnotes/syncing-server-js   1.52.0              5ec2d274a36e        1.01GB

Describe the issue After setting up the instance and being able to create notes and so on, I tried to attach a file to a note but ran into an error. I've given the rights via the sql command so the user is allowed to perform the action (paid plan).

The Errors in the application: "Unable to start upload session" "There was an error while uploading the file"

The server logs give the following errors: auth-standalone | query: SELECT setting.uuid AS setting_uuid, setting.name AS setting_name, setting.value AS setting_value, setting.server_encryption_version AS setting_server_encryption_version, setting.created_at AS setting_created_at, setting.updated_at AS setting_updated_at, setting.sensitive AS setting_sensitive, setting.user_subscription_uuid AS setting_user_subscription_uuid FROM subscription_settings setting WHERE setting.name = ? AND setting.user_subscription_uuid = ? ORDER BY updated_at DESC LIMIT 1 -- PARAMETERS: ["FILE_UPLOAD_BYTES_LIMIT","9204ade1-da9b-11ec-834a-0242ac120002"] auth-standalone | {"message":"Error: secretOrPrivateKey must have a value\n at module.exports (/var/www/node_modules/jsonwebtoken/sign.js:107:20)\n at TokenEncoder.encodeExpirableToken (/var/www/node_modules/@standardnotes/auth/dist/Domain/Encoder/TokenEncoder.js:10:40)\n at CreateValetToken.execute (/var/www/dist/src/Domain/UseCase/CreateValetToken/CreateValetToken.js:82:46)\n at processTicksAndRejections (node:internal/process/task_queues:96:5)\n at async ValetTokenController.create (/var/www/dist/src/Controller/ValetTokenController.js:36:40)","level":"error"} api-gateway-standalone | {"level":"error","message":"Could not pass the request to http://auth:3000/valet-tokens on underlying service: undefined"}

I've followed the wiki and used the server.sh script to set everything up, the only thing I've changed were the secrets and the nginx config for the ssl certificates.

moughxyz commented 2 years ago

Files are not yet supported in the standalone config, but this is something we have on our high priority todo.

BobWs commented 2 years ago

Will this also work/ be available for the self hosting version?

Because I’m also not able to upload files, but the upload button is present in the desktop app and in the mobile apps

Wadera commented 1 year ago

I think this can be closed as resolved.

There is clear section about get this configured in documentation: https://docs.standardnotes.com/self-hosting

I've got it working! :slightly_smiling_face: If anyone will looks for solution - you need to get separate subdomain set in .env and ./docker/.env files:

root@docker:/opt/standalone# grep FILES .env
EXPOSED_FILES_PORT=3125
FILES_SERVER_URL=https://notefile.myserver.tdl/

root@docker:/opt/standalone# grep FILE docker/.env
FILES_SERVER_URL="https://notefile.myserver.tdl/"

Then set standard proxy for your domain and port 3125 port :wink: It looking great. I'm looking ahead to see it working as quick paste images to markdown notes with auto uploads and display into notes!

Of Course - you need to activate subscription for your account and set quota size as explain in docs:

https://docs.standardnotes.com/self-hosting/subscriptions

./server.sh create-subscription EMAIL@ADDR

and: https://docs.standardnotes.com/self-hosting/file-uploads

INSERT INTO subscription_settings(uuid, name, value, created_at, updated_at, user_subscription_uuid) VALUES (UUID(), "FILE_UPLOAD_BYTES_LIMIT", 10737418240, FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), FLOOR(UNIX_TIMESTAMP(NOW(6))*1000000), (SELECT us.uuid FROM user_subscriptions us INNER JOIN users u ON us.user_uuid=u.uuid WHERE u.email="EMAIL@ADDR"));

But please be aware of: https://github.com/standardnotes/self-hosted/issues/83

NODRT commented 1 year ago

One thing I didn't see mentioned here that tripped me up is how to set this up while using a reverse proxy. I finally got it working and wanted to share the magic ingredient.

The Standard Notes Files Server needs its own entry in your reverse proxy conf file. I gave mine its own subdomain, so I have these domains:

Standard Notes domain: https://snotes.MYDOMAIN.com Standard Notes Files domain: https://snotesfiles.MYDOMAIN.com

In case it helps anyone, this is my nginx reverse proxy code. Notice the entry for notes and the entry for files. Also, everything pertaining to HTTPS was written there by Certbot, so if you're copying this code, remove the lines of code (or chunks of code) that say "managed by Certbot".

server{
    if ($host = notes.MYDOMAIN.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

  server_name snotes.MYDOMAIN.com;

  location ~ {
    proxy_pass_header Authorization;
    proxy_pass http://192.168.1.16:3000;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    proxy_http_version 1.1;

    #proxy_set_header Connection "";
    proxy_buffering off;
    client_max_body_size 0;
    proxy_read_timeout 36000s;
    proxy_redirect off;

  }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/snotes.MYDOMAIN.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/snotes.MYDOMAIN.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server{
    if ($host = notes.MYDOMAIN.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

  server_name snotesfiles.MYDOMAIN.com;

  location ~ {
    proxy_pass_header Authorization;
    proxy_pass http://192.168.1.16:3125;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    proxy_http_version 1.1;

    #proxy_set_header Connection "";
    proxy_buffering off;
    client_max_body_size 0;
    proxy_read_timeout 36000s;
    proxy_redirect off;
  }
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/snotesfiles.MYDOMAIN.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/snotesfiles.MYDOMAIN.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

So, that was step one. Then, the .env files needed to reflect this.

Update the self-hosted/.env file and the standalone/.env file (I'm not sure why I have it in two places. Is one from my previous failed installation? Maybe. Maybe not.): FILES_SERVER_URL=https://snotesfiles.MYDOMAIN.com

Do NOT include the port (3125) after the domain name in this config file. Doing so will cause your reverse proxy to send the request to the wrong place and it will fail. Just use the subdomain and let the reverse proxy send it to port 3125.

BobWs commented 1 year ago

Thanks for sharing! Do you have a example how to do this with NPM Nginx-Proxy-Manager?