diff --git a/quadlets/notesnook/notesnook-autoheal.container b/quadlets/notesnook/notesnook-autoheal.container deleted file mode 100644 index 5eff2cb..0000000 --- a/quadlets/notesnook/notesnook-autoheal.container +++ /dev/null @@ -1,36 +0,0 @@ -[Unit] -Description= -Wants= -After= - -[Service] -Restart=on-failure -TimeoutStartSec=900 - -[Install] -WantedBy=default.target - -[Container] -Image= -ContainerName= -AutoUpdate=registry - -AddCapability= -AddDevice= -SecurityLabelDisable= -User= -Label= -UIDMap= -GIDMap= - -Network= -HostName= -PublishPort= - -Volume= - -EnvironmentFile= -Environment= - -PodmanArgs= -Exec= diff --git a/quadlets/notesnook/notesnook-db.container b/quadlets/notesnook/notesnook-db.container index 5eff2cb..ef44554 100644 --- a/quadlets/notesnook/notesnook-db.container +++ b/quadlets/notesnook/notesnook-db.container @@ -1,7 +1,5 @@ [Unit] -Description= -Wants= -After= +Description=Notesnook mongodb [Service] Restart=on-failure @@ -11,26 +9,14 @@ TimeoutStartSec=900 WantedBy=default.target [Container] -Image= -ContainerName= +Image=docker.io/mongo/mongo:7.0.12 +ContainerName=notesnook-db AutoUpdate=registry -AddCapability= -AddDevice= -SecurityLabelDisable= -User= -Label= -UIDMap= -GIDMap= +Network=notesnook.network +HostName=notesnook-db -Network= -HostName= -PublishPort= +Volume=notesnook-dbdata:/data/db +Volume=notesnook-dbdata:/data/configdb -Volume= - -EnvironmentFile= -Environment= - -PodmanArgs= -Exec= +ExecStartPre=sh -c 'printf %s\\n "rs.initiate();" "rs.status();" | mongosh mongodb://notesnook-db:27017' diff --git a/quadlets/notesnook/notesnook-dbdata.volume b/quadlets/notesnook/notesnook-dbdata.volume deleted file mode 100644 index 322de2d..0000000 --- a/quadlets/notesnook/notesnook-dbdata.volume +++ /dev/null @@ -1,3 +0,0 @@ -[Volume] -VolumeName= - diff --git a/quadlets/notesnook/notesnook-identity-server.container b/quadlets/notesnook/notesnook-identity-server.container deleted file mode 100644 index 5eff2cb..0000000 --- a/quadlets/notesnook/notesnook-identity-server.container +++ /dev/null @@ -1,36 +0,0 @@ -[Unit] -Description= -Wants= -After= - -[Service] -Restart=on-failure -TimeoutStartSec=900 - -[Install] -WantedBy=default.target - -[Container] -Image= -ContainerName= -AutoUpdate=registry - -AddCapability= -AddDevice= -SecurityLabelDisable= -User= -Label= -UIDMap= -GIDMap= - -Network= -HostName= -PublishPort= - -Volume= - -EnvironmentFile= -Environment= - -PodmanArgs= -Exec= diff --git a/quadlets/notesnook/notesnook-identity.container b/quadlets/notesnook/notesnook-identity.container new file mode 100644 index 0000000..0a356f2 --- /dev/null +++ b/quadlets/notesnook/notesnook-identity.container @@ -0,0 +1,23 @@ +[Unit] +Description=Notesnook identity server + +[Service] +Restart=on-failure +TimeoutStartSec=900 + +[Install] +WantedBy=default.target + +[Container] +Image=docker.io/streetwriters/identity:latest +ContainerName=notesnook-identity +AutoUpdate=registry + +Network=notesnook.network +HostName=notesnook-identity +PublishPort=8264:8264 + +EnvironmentFile=notesnook-server-discovery.env +EnvironmentFile=notesnook.env +Environment=MONGODB_CONNECTION_STRING=mongodb://notesnook-db/identity?replSet=rs0 +Environment=MONGODB_DATABASE_NAME=identity diff --git a/quadlets/notesnook/notesnook-initiate-rs0.container b/quadlets/notesnook/notesnook-initiate-rs0.container deleted file mode 100644 index 5eff2cb..0000000 --- a/quadlets/notesnook/notesnook-initiate-rs0.container +++ /dev/null @@ -1,36 +0,0 @@ -[Unit] -Description= -Wants= -After= - -[Service] -Restart=on-failure -TimeoutStartSec=900 - -[Install] -WantedBy=default.target - -[Container] -Image= -ContainerName= -AutoUpdate=registry - -AddCapability= -AddDevice= -SecurityLabelDisable= -User= -Label= -UIDMap= -GIDMap= - -Network= -HostName= -PublishPort= - -Volume= - -EnvironmentFile= -Environment= - -PodmanArgs= -Exec= diff --git a/quadlets/notesnook/notesnook-monograph-server.container b/quadlets/notesnook/notesnook-monograph-server.container deleted file mode 100644 index 5eff2cb..0000000 --- a/quadlets/notesnook/notesnook-monograph-server.container +++ /dev/null @@ -1,36 +0,0 @@ -[Unit] -Description= -Wants= -After= - -[Service] -Restart=on-failure -TimeoutStartSec=900 - -[Install] -WantedBy=default.target - -[Container] -Image= -ContainerName= -AutoUpdate=registry - -AddCapability= -AddDevice= -SecurityLabelDisable= -User= -Label= -UIDMap= -GIDMap= - -Network= -HostName= -PublishPort= - -Volume= - -EnvironmentFile= -Environment= - -PodmanArgs= -Exec= diff --git a/quadlets/notesnook/notesnook-monograph.container b/quadlets/notesnook/notesnook-monograph.container new file mode 100644 index 0000000..a2da8a7 --- /dev/null +++ b/quadlets/notesnook/notesnook-monograph.container @@ -0,0 +1,25 @@ +[Unit] +Description=Notesnook monograph server +Requires=notesnook.service +After=notesnook.service + +[Service] +Restart=on-failure +TimeoutStartSec=900 + +[Install] +WantedBy=default.target + +[Container] +Image=docker.io/streetwriters/monograph:latest +ContainerName=notesnook-monograph +AutoUpdate=registry + +Network=notesnook.network +HostName=notesnook-monograph +PublishPort=6264:3000 + +EnvironmentFile=notesnook-server-discovery.env +EnvironmentFile=notesnook.env +Environment=API_HOST=http://notesnook:5264 +Environment=PUBLIC_URL=https://monograph.notesnook.mcgee.red diff --git a/quadlets/notesnook/notesnook-s3.container b/quadlets/notesnook/notesnook-s3.container index 5eff2cb..ae27b5a 100644 --- a/quadlets/notesnook/notesnook-s3.container +++ b/quadlets/notesnook/notesnook-s3.container @@ -1,7 +1,5 @@ [Unit] -Description= -Wants= -After= +Description=Notesnook S3 [Service] Restart=on-failure @@ -11,26 +9,18 @@ TimeoutStartSec=900 WantedBy=default.target [Container] -Image= -ContainerName= +Image=docker.io/minio/minio:RELEASE.2024-07-29T22-14-52Z +ContainerName=notesnook-s3 AutoUpdate=registry -AddCapability= -AddDevice= -SecurityLabelDisable= -User= -Label= -UIDMap= -GIDMap= +Network=notesnook.network +HostName=notesnook-s3 +PublishPort=9000:9000 -Network= -HostName= -PublishPort= +Volume=notesnook-s3data:/data/s3 -Volume= +EnvironmentFile=notesnook.env -EnvironmentFile= -Environment= - -PodmanArgs= -Exec= +## TODO: Can this go here instead of a container? +#ExecStartPre=bash -c 'until mc alias set minio http://notesnook-s3:9000 $${MINIO_ROOT_USER:-minioadmin} $${MINIO_ROOT_PASSWORD:-minioadmin}; do sleep 1; done; mc mb minio/attachments -p' +Exec=server /data/s3 --console-address :9090 diff --git a/quadlets/notesnook/notesnook-s3data.volume b/quadlets/notesnook/notesnook-s3data.volume deleted file mode 100644 index 322de2d..0000000 --- a/quadlets/notesnook/notesnook-s3data.volume +++ /dev/null @@ -1,3 +0,0 @@ -[Volume] -VolumeName= - diff --git a/quadlets/notesnook/notesnook-server-discovery.env b/quadlets/notesnook/notesnook-server-discovery.env new file mode 100644 index 0000000..496683f --- /dev/null +++ b/quadlets/notesnook/notesnook-server-discovery.env @@ -0,0 +1,9 @@ +NOTESNOOK_SERVER_PORT=5264 +NOTESNOOK_SERVER_HOST=notesnook +IDENTITY_SERVER_PORT=8264 +IDENTITY_SERVER_HOST=notesnook-identity +SSE_SERVER_PORT=7264 +SSE_SERVER_HOST=notesnook-sse +SELF_HOSTED=1 +IDENTITY_SERVER_URL=${AUTH_SERVER_PUBLIC_URL} +NOTESNOOK_APP_HOST=${NOTESNOOK_APP_PUBLIC_URL} diff --git a/quadlets/notesnook/notesnook-server.container b/quadlets/notesnook/notesnook-server.container deleted file mode 100644 index 5eff2cb..0000000 --- a/quadlets/notesnook/notesnook-server.container +++ /dev/null @@ -1,36 +0,0 @@ -[Unit] -Description= -Wants= -After= - -[Service] -Restart=on-failure -TimeoutStartSec=900 - -[Install] -WantedBy=default.target - -[Container] -Image= -ContainerName= -AutoUpdate=registry - -AddCapability= -AddDevice= -SecurityLabelDisable= -User= -Label= -UIDMap= -GIDMap= - -Network= -HostName= -PublishPort= - -Volume= - -EnvironmentFile= -Environment= - -PodmanArgs= -Exec= diff --git a/quadlets/notesnook/notesnook-setup-s3.container b/quadlets/notesnook/notesnook-setup-s3.container index 5eff2cb..6d27e09 100644 --- a/quadlets/notesnook/notesnook-setup-s3.container +++ b/quadlets/notesnook/notesnook-setup-s3.container @@ -1,36 +1,23 @@ [Unit] -Description= -Wants= -After= +Description=Notesnook S3 setup +Requires=notesnook-s3.service +After=notesnook-s3.service [Service] -Restart=on-failure +Restart=no TimeoutStartSec=900 [Install] WantedBy=default.target [Container] -Image= -ContainerName= +Image=docker.io/minio/mc:RELEASE.2024-07-26T13-08-44Z +ContainerName=notesnook-setup-s3 AutoUpdate=registry -AddCapability= -AddDevice= -SecurityLabelDisable= -User= -Label= -UIDMap= -GIDMap= +Network=notesnook.network +HostName=notesnook-setup-s3 -Network= -HostName= -PublishPort= +EnvironmentFile=notesnook.env -Volume= - -EnvironmentFile= -Environment= - -PodmanArgs= -Exec= +Exec=bash -c 'until mc alias set minio http://notesnook-s3:9000 ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD}; do sleep 1; done; mc mb minio/attachments -p' diff --git a/quadlets/notesnook/notesnook-sse-server.container b/quadlets/notesnook/notesnook-sse-server.container deleted file mode 100644 index 5eff2cb..0000000 --- a/quadlets/notesnook/notesnook-sse-server.container +++ /dev/null @@ -1,36 +0,0 @@ -[Unit] -Description= -Wants= -After= - -[Service] -Restart=on-failure -TimeoutStartSec=900 - -[Install] -WantedBy=default.target - -[Container] -Image= -ContainerName= -AutoUpdate=registry - -AddCapability= -AddDevice= -SecurityLabelDisable= -User= -Label= -UIDMap= -GIDMap= - -Network= -HostName= -PublishPort= - -Volume= - -EnvironmentFile= -Environment= - -PodmanArgs= -Exec= diff --git a/quadlets/notesnook/notesnook-sse.container b/quadlets/notesnook/notesnook-sse.container new file mode 100644 index 0000000..eb6428d --- /dev/null +++ b/quadlets/notesnook/notesnook-sse.container @@ -0,0 +1,25 @@ +[Unit] +Description=Notesnook SSE server +Requires=notesnook-identity.service +Requires=notesnook.service +After=notesnook.service +After=notesnook-identity.service + +[Service] +Restart=on-failure +TimeoutStartSec=900 + +[Install] +WantedBy=default.target + +[Container] +Image=docker.io/streetwriters/sse:latest +ContainerName=notesnook-sse +AutoUpdate=registry + +Network=notesnook.network +HostName=notesnook-sse +PublishPort=7264:7264 + +EnvironmentFile=notesnook.env +EnvironmentFile=notesnook-server-discovery.env diff --git a/quadlets/notesnook/notesnook-validate.container b/quadlets/notesnook/notesnook-validate.container deleted file mode 100644 index 5eff2cb..0000000 --- a/quadlets/notesnook/notesnook-validate.container +++ /dev/null @@ -1,36 +0,0 @@ -[Unit] -Description= -Wants= -After= - -[Service] -Restart=on-failure -TimeoutStartSec=900 - -[Install] -WantedBy=default.target - -[Container] -Image= -ContainerName= -AutoUpdate=registry - -AddCapability= -AddDevice= -SecurityLabelDisable= -User= -Label= -UIDMap= -GIDMap= - -Network= -HostName= -PublishPort= - -Volume= - -EnvironmentFile= -Environment= - -PodmanArgs= -Exec= diff --git a/quadlets/notesnook/notesnook.container b/quadlets/notesnook/notesnook.container index 5eff2cb..d23b14a 100644 --- a/quadlets/notesnook/notesnook.container +++ b/quadlets/notesnook/notesnook.container @@ -1,7 +1,8 @@ [Unit] -Description= -Wants= -After= +Description=Notesnook +Requires=notesnook-s3.service +Requires=notesnook-setup-s3.service +Requires=notesnook-identity.service [Service] Restart=on-failure @@ -11,26 +12,22 @@ TimeoutStartSec=900 WantedBy=default.target [Container] -Image= -ContainerName= +Image=docker.io/streetwriters/notesnook-sync:latest +ContainerName=notesnook AutoUpdate=registry -AddCapability= -AddDevice= -SecurityLabelDisable= -User= -Label= -UIDMap= -GIDMap= +Network=notesnook.network +HostName=notesnook +PublishPort=5264:5264 -Network= -HostName= -PublishPort= - -Volume= - -EnvironmentFile= -Environment= - -PodmanArgs= -Exec= +EnvironmentFile=notesnook-server-discovery.env +EnvironmentFile=notesnook.env +Environment=MONGODB_CONNECTION_STRING=mongodb://notesnook-db:27017/?replSet=rs0 +Environment=MONGODB_DATABASE_NAME=notesnook +Environment=S3_INTERNAL_SERVICE_URL=http://notesnook-s3:9000 +Environment=S3_INTERNAL_BUCKET_NAME=attachments +Environment=S3_ACCESS_KEY_ID=${MINIO_ROOT_USER} +Environment=S3_ACCESS_KEY=${MINIO_ROOT_PASSWORD} +Environment=S3_SERVICE_URL=${ATTACHMENTS_SERVER_PUBLIC_URL} +Environment=S3_REGION=us-east-1 +Environment=S3_BUCKET_NAME=attachments diff --git a/quadlets/notesnook/notesnook.env b/quadlets/notesnook/notesnook.env index 01c1ad9..9bac3de 100644 --- a/quadlets/notesnook/notesnook.env +++ b/quadlets/notesnook/notesnook.env @@ -1 +1,73 @@ -EXAMPLE=value +# Description: Name of your self hosted instance. Used in the client apps for identification purposes +# Required: yes +# Example: notesnook-instance-sg +INSTANCE_NAME=self-hosted-notesnook-instance + +# Description: This secret is used for generating, validating, and introspecting auth tokens. It must be a randomly generated token (preferably >32 characters). +# Required: yes +NOTESNOOK_API_SECRET= + +# Description: Use this flag to disable creation of new accounts on your instance (i.e. in case it is exposed to the Internet). +# Required: yes +# Possible values: true/false +DISABLE_SIGNUPS=false + +### SMTP Configuration ### +# SMTP Configuration is required for sending emails for password reset, 2FA emails etc. You can get SMTP settings from your email provider. + +# Description: Username for the SMTP connection (most time it is the email address of your account). Check your email provider's documentation to get the appropriate value. +# Required: yes +SMTP_USERNAME= +# Description: Password for the SMTP connection. Check your email provider's documentation to get the appropriate value. +# Required: yes +SMTP_PASSWORD= +# Description: Host on which the the SMTP connection is running. Check your email provider's documentation to get the appropriate value. +# Required: yes +# Example: smtp.gmail.com +SMTP_HOST= +# Description: Port on which the the SMTP connection is running. Check your email provider's documentation to get the appropriate value. +# Required: yes +# Example: 465 +SMTP_PORT= + +# Description: Twilio account SID is required for sending SMS with 2FA codes. Learn more here: https://help.twilio.com/articles/14726256820123-What-is-a-Twilio-Account-SID-and-where-can-I-find-it- +# Required: no +TWILIO_ACCOUNT_SID= +# Description: Twilio account auth is required for sending SMS with 2FA codes. Learn more here: https://help.twilio.com/articles/223136027-Auth-Tokens-and-How-to-Change-Them +# Required: no +TWILIO_AUTH_TOKEN= +# Description: The unique string that we created to identify the Service resource. +# Required: no +# Example: VAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +TWILIO_SERVICE_SID= + +# Description: Add the origins for which you want to allow CORS. Leave it empty to allow all origins to access your server. If you want to allow multiple origins, seperate each origin with a comma. +# Required: no +# Example: https://app.notesnook.com,http://localhost:3000 +NOTESNOOK_CORS_ORIGINS= + +# Description: This is the public URL for the web app, and is used by the backend for creating redirect URLs (e.g. after email confirmation etc). +# Note: the URL has no slashes at the end +# Required: yes +# Example: https://app.notesnook.com +NOTESNOOK_APP_PUBLIC_URL=https://notesnook.example.com +# Description: This is the public URL for the monograph frontend. +# Required: yes +# Example: https://monogr.ph +MONOGRAPH_PUBLIC_URL=https://monograph.notesnook.example.com:6264 +# Description: This is the public URL for the Authentication server. Used for generating email confirmation & password reset URLs. +# Required: yes +# Example: https://auth.streetwriters.co +AUTH_SERVER_PUBLIC_URL=https://identity.notesnook.example.com:8264 +# Description: This is the public URL for the S3 attachments server (minio). It'll be used by the Notesnook clients for uploading/downloading attachments. +# Required: yes +# Example: https://attachments.notesnook.com +ATTACHMENTS_SERVER_PUBLIC_URL=https://attachments.notesnook.example.com:9000 + +# Description: Custom username for the root Minio account. Minio is used for storing your attachments. This must be greater than 3 characters in length. +# Required: no +MINIO_ROOT_USER=minioadmin +# Description: Custom password for the root Minio account. Minio is used for storing your attachments. This must be greater than 8 characters in length. +# Required: no +MINIO_ROOT_PASSWORD=minioadmin + diff --git a/quadlets/notesnook/notesnook.network b/quadlets/notesnook/notesnook.network index 013b7c0..aab0645 100644 --- a/quadlets/notesnook/notesnook.network +++ b/quadlets/notesnook/notesnook.network @@ -1,8 +1,6 @@ [Unit] -Description= +Description=Notesnook network [Network] -NetworkName= -Subnet= -Gateway= +NetworkName=notesnook diff --git a/quadlets/notesnook/notesnook.volume b/quadlets/notesnook/notesnook.volume new file mode 100644 index 0000000..1ae2f26 --- /dev/null +++ b/quadlets/notesnook/notesnook.volume @@ -0,0 +1,4 @@ +[Volume] +VolumeName=notesnook-dbdata +VolumeName=notesnook-s3data +