From 05431cc7575e960647ea6814a7e22a13e4210428 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Wed, 4 Jan 2023 12:26:24 +0100 Subject: [PATCH 1/9] :bug: Fix enter events --- frontend/src/app/main/ui/delete_shared.cljs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/main/ui/delete_shared.cljs b/frontend/src/app/main/ui/delete_shared.cljs index c1bfb139b..5bf16aee0 100644 --- a/frontend/src/app/main/ui/delete_shared.cljs +++ b/frontend/src/app/main/ui/delete_shared.cljs @@ -76,9 +76,10 @@ (dom/stop-propagation event) (st/emit! (modal/hide)) (on-accept props)))] - (->> (events/listen js/document EventType.KEYDOWN on-keydown) - (partial events/unlistenByKey))) - #(st/emit! (dd/clean-temp-shared))) + (let [key (events/listen js/document EventType.KEYDOWN on-keydown)] + (fn [] + (events/unlistenByKey key) + (st/emit! (dd/clean-temp-shared)))))) [:div.modal-overlay [:div.modal-container.confirm-dialog From 0863a96f93cc45da911e7c8c9d43404088010457 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Moya?= Date: Wed, 4 Jan 2023 16:32:52 +0100 Subject: [PATCH 2/9] :bug: Fix text content sync and touched detection in shape displacement --- common/src/app/common/pages/common.cljc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/common/src/app/common/pages/common.cljc b/common/src/app/common/pages/common.cljc index 1b73deac2..f5c243924 100644 --- a/common/src/app/common/pages/common.cljc +++ b/common/src/app/common/pages/common.cljc @@ -13,6 +13,11 @@ (def default-color clr/gray-20) (def root uuid/zero) +;; Attributes that may be synced in components, and the group they belong to. +;; When one attribute is modified in a shape inside a component, the corresponding +;; group is marked as :touched. Then, if the shape is synced with the remote shape +;; in the main component, none of the attributes of the same group is changed. + (def component-sync-attrs {:name :name-group :fills :fill-group @@ -23,6 +28,7 @@ :fill-color-ref-id :fill-group :hide-fill-on-export :fill-group :content :content-group + :position-data :content-group :hidden :visibility-group :blocked :modifiable-group :grow-type :text-font-group @@ -62,7 +68,6 @@ :rotation :geometry-group :transform :geometry-group :transform-inverse :geometry-group - :position-data :geometry-group :opacity :layer-effects-group :blend-mode :layer-effects-group :shadow :shadow-group From 77cd645e25b0d28082dc4314c51f50e1e81d1554 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Moya?= Date: Mon, 23 Jan 2023 10:27:24 +0100 Subject: [PATCH 3/9] :wrench: Update docker-compose without needing config file --- docker/images/config.env | 96 ------------- docker/images/docker-compose.yaml | 231 +++++++++++++++++++++++++++--- 2 files changed, 210 insertions(+), 117 deletions(-) delete mode 100644 docker/images/config.env diff --git a/docker/images/config.env b/docker/images/config.env deleted file mode 100644 index 7744ded6e..000000000 --- a/docker/images/config.env +++ /dev/null @@ -1,96 +0,0 @@ -## Should be set to the public domain where penpot is going to be served. -## -## NOTE: If you are going to serve it under different domain than -## 'localhost' without HTTPS, consider setting the -## `disable-secure-session-cookies' flag on the 'PENPOT_FLAGS' -## setting. - -PENPOT_PUBLIC_URI=http://localhost:9001 - -## Feature flags. -PENPOT_FLAGS=enable-registration enable-login disable-email-verification - -## Temporal workaround because of bad builtin default - -PENPOT_HTTP_SERVER_HOST=0.0.0.0 - -## Standard database connection parameters (only postgresql is supported): - -PENPOT_DATABASE_URI=postgresql://penpot-postgres/penpot -PENPOT_DATABASE_USERNAME=penpot -PENPOT_DATABASE_PASSWORD=penpot - -## Redis is used for the websockets notifications. - -PENPOT_REDIS_URI=redis://penpot-redis/0 - -## By default, files uploaded by users are stored in local -## filesystem. But it can be configured to store in AWS S3. - -PENPOT_ASSETS_STORAGE_BACKEND=assets-fs -PENPOT_STORAGE_ASSETS_FS_DIRECTORY=/opt/data/assets - -## Telemetry. When enabled, a periodical process will send anonymous -## data about this instance. Telemetry data will enable us to learn on -## how the application is used, based on real scenarios. If you want -## to help us, please leave it enabled. - -PENPOT_TELEMETRY_ENABLED=true - -## Email sending configuration. By default, emails are printed in the -## console, but for production usage is recommended to setup a real -## SMTP provider. Emails are used to confirm user registrations. - -PENPOT_SMTP_DEFAULT_FROM=no-reply@example.com -PENPOT_SMTP_DEFAULT_REPLY_TO=no-reply@example.com -# PENPOT_SMTP_HOST= -# PENPOT_SMTP_PORT= -# PENPOT_SMTP_USERNAME= -# PENPOT_SMTP_PASSWORD= -# PENPOT_SMTP_TLS=true -# PENPOT_SMTP_SSL=false - -## Comma separated list of allowed domains to register. Empty to allow -## all. - -# PENPOT_REGISTRATION_DOMAIN_WHITELIST="" - -## Authentication providers - -## Google - -# PENPOT_GOOGLE_CLIENT_ID= -# PENPOT_GOOGLE_CLIENT_SECRET= - -## GitHub - -# PENPOT_GITHUB_CLIENT_ID= -# PENPOT_GITHUB_CLIENT_SECRET= - -## GitLab - -# PENPOT_GITLAB_BASE_URI=https://gitlab.com -# PENPOT_GITLAB_CLIENT_ID= -# PENPOT_GITLAB_CLIENT_SECRET= - -## OpenID Connect (since 1.5.0) - -# PENPOT_OIDC_BASE_URI= -# PENPOT_OIDC_CLIENT_ID= -# PENPOT_OIDC_CLIENT_SECRET= - -## LDAP -## -## NOTE: to enable ldap, you will need to put 'enable-login-with-ldap' -## on the 'PENPOT_FLAGS' environment variable. - -# PENPOT_LDAP_HOST=ldap -# PENPOT_LDAP_PORT=10389 -# PENPOT_LDAP_SSL=false -# PENPOT_LDAP_STARTTLS=false -# PENPOT_LDAP_BASE_DN=ou=people,dc=planetexpress,dc=com -# PENPOT_LDAP_BIND_DN=cn=admin,dc=planetexpress,dc=com -# PENPOT_LDAP_BIND_PASSWORD=GoodNewsEveryone -# PENPOT_LDAP_ATTRS_USERNAME=uid -# PENPOT_LDAP_ATTRS_EMAIL=mail -# PENPOT_LDAP_ATTRS_FULLNAME=cn diff --git a/docker/images/docker-compose.yaml b/docker/images/docker-compose.yaml index 5b3ad2a65..15882f60c 100644 --- a/docker/images/docker-compose.yaml +++ b/docker/images/docker-compose.yaml @@ -5,20 +5,43 @@ networks: penpot: volumes: - penpot_postgres_data: - penpot_assets_data: + penpot_postgres_v15: + penpot_assets: + # penpot_traefik: + # penpot_minio: services: + ## Traefik service declaration example. Consider using it if you are + ## going to expose penpot to the internet or different host than + ## `localhost`. + + # traefik: + # image: traefik:v2.9 + # networks: + # - penpot + # command: + # - "--api.insecure=true" + # - "--entryPoints.web.address=:80" + # - "--providers.docker=true" + # - "--providers.docker.exposedbydefault=false" + # - "--entryPoints.websecure.address=:443" + # - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true" + # - "--certificatesresolvers.letsencrypt.acme.email=" + # - "--certificatesresolvers.letsencrypt.acme.storage=/traefik/acme.json" + # volumes: + # - "penpot_traefik:/traefik" + # - "/var/run/docker.sock:/var/run/docker.sock" + # ports: + # - "80:80" + # - "443:443" + penpot-frontend: image: "penpotapp/frontend:latest" ports: - 9001:80 volumes: - - penpot_assets_data:/opt/data - - env_file: - - config.env + - penpot_assets:/opt/data depends_on: - penpot-backend @@ -27,51 +50,217 @@ services: networks: - penpot + labels: + - "traefik.enable=true" + + ## HTTP: example of labels for the case if you are going to + ## expose penpot to the internet using only HTTP (without HTTPS) + ## with traefik + + # - "traefik.http.routers.penpot-http.entrypoints=web" + # - "traefik.http.routers.penpot-http.rule=Host(``)" + # - "traefik.http.services.penpot-http.loadbalancer.server.port=80" + + ## HTTPS: example of labels for the case if you are going to + ## expose penpot to the internet using with HTTPS using traefik + + # - "traefik.http.middlewares.http-redirect.redirectscheme.scheme=https" + # - "traefik.http.middlewares.http-redirect.redirectscheme.permanent=true" + # - "traefik.http.routers.penpot-http.entrypoints=web" + # - "traefik.http.routers.penpot-http.rule=Host(``)" + # - "traefik.http.routers.penpot-http.middlewares=http-redirect" + # - "traefik.http.routers.penpot-https.entrypoints=websecure" + # - "traefik.http.routers.penpot-https.rule=Host(``)" + # - "traefik.http.services.penpot-https.loadbalancer.server.port=80" + # - "traefik.http.routers.penpot-https.tls=true" + # - "traefik.http.routers.penpot-https.tls.certresolver=letsencrypt" + + ## Configuration envronment variables for frontend the + ## container. In this case this container only needs the + ## `PENPOT_FLAGS`. This environment variable is shared with other + ## services but not all flags are relevant to all services. + ## + ## Relevant flags for frontend: + ## - demo-users + ## - login-with-github + ## - login-with-gitlab + ## - login-with-google + ## - login-with-ldap + ## - login-with-oidc + ## - login-with-password + ## - registration + ## - webhooks + ## + ## You can read more about all available flags on: + ## https://help.penpot.app/technical-guide/configuration/#advanced-configuration + + environment: + - PENPOT_FLAGS=enable-registration enable-login-with-password + penpot-backend: image: "penpotapp/backend:latest" volumes: - - penpot_assets_data:/opt/data + - penpot_assets:/opt/data depends_on: - penpot-postgres - penpot-redis - env_file: - - config.env - networks: - penpot + ## Configuration envronment variables for backend the + ## container. + ## + ## Relevant flags for backend: + ## - demo-users + ## - email-verification + ## - log-emails + ## - log-invitation-tokens + ## - login-with-github + ## - login-with-gitlab + ## - login-with-google + ## - login-with-ldap + ## - login-with-oidc + ## - login-with-password + ## - registration + ## - secure-session-cookies + ## - smtp + ## - smtp-debug + ## - telemetry + ## - webhooks + ## + ## You can read more about all available flags and other + ## environment variables for the backend here: + ## https://help.penpot.app/technical-guide/configuration/#advanced-configuration + + environment: + - PENPOT_FLAGS=enable-registration enable-login disable-email-verification enable-smtp + + ## Public URI. If you are going to expose this instance to the + ## internet, or use it under different domain than 'localhost' + ## consider using traefik and set the + ## `disable-secure-session-cookies` if you are not going to + ## serve penpot under HTTPS. + + - PENPOT_PUBLIC_URI=http://localhost:9001 + + ## Database connection parameters. Don't touch them unless you + ## are using custom postgresql connection parameters + + - PENPOT_DATABASE_URI=postgresql://penpot-postgres/penpot + - PENPOT_DATABASE_USERNAME=penpot + - PENPOT_DATABASE_PASSWORD=penpot + + ## Redis is used for the websockets notifications. Don't touch + ## unless the redis container has different parameters or + ## different name. + + - PENPOT_REDIS_URI=redis://penpot-redis/0 + + ## Default configuration for assets storage: using filesystem + ## based with all files stored in a docker volume. + + - PENPOT_ASSETS_STORAGE_BACKEND=assets-fs + - PENPOT_STORAGE_ASSETS_FS_DIRECTORY=/opt/data/assets + + ## Also can be configured to to use a S3 compatible storage + ## service like MiniIO. Look below for minio service setup. + + # - AWS_ACCESS_KEY_ID= + # - AWS_SECRET_ACCESS_KEY= + # - PENPOT_ASSETS_STORAGE_BACKEND=assets-s3 + # - PENPOT_STORAGE_ASSETS_S3_ENDPOINT=http://penpot-minio:9000 + # - PENPOT_STORAGE_ASSETS_S3_BUCKET= + + ## Telemetry. When enabled, a periodical process will send + ## anonymous data about this instance. Telemetry data will + ## enable us to learn on how the application is used, based on + ## real scenarios. If you want to help us, please leave it + ## enabled. You can audit what data we send with the code + ## available on github + - PENPOT_TELEMETRY_ENABLED=true + + ## Example SMTP/Email configuration. By default, emails are sent + ## to the mailcatch service, but for production usage is + ## recommended to setup a real SMTP provider. Emails are used to + ## confirm user registrations & invitations. Look below how + ## mailcatch service is configured. + - PENPOT_SMTP_DEFAULT_FROM=no-reply@example.com + - PENPOT_SMTP_DEFAULT_REPLY_TO=no-reply@example.com + - PENPOT_SMTP_HOST=penpot-mailcatch + - PENPOT_SMTP_PORT=1025 + - PENPOT_SMTP_USERNAME= + - PENPOT_SMTP_PASSWORD= + - PENPOT_SMTP_TLS=false + - PENPOT_SMTP_SSL=false + penpot-exporter: image: "penpotapp/exporter:latest" - env_file: - - config.env + networks: + - penpot + environment: # Don't touch it; this uses internal docker network to # communicate with the frontend. - PENPOT_PUBLIC_URI=http://penpot-frontend - networks: - - penpot + + ## Redis is used for the websockets notifications. + - PENPOT_REDIS_URI=redis://penpot-redis/0 penpot-postgres: - image: "postgres:14" + image: "postgres:15" restart: always stop_signal: SIGINT + volumes: + - penpot_postgres_v15:/var/lib/postgresql/data + + networks: + - penpot + environment: - POSTGRES_INITDB_ARGS=--data-checksums - POSTGRES_DB=penpot - POSTGRES_USER=penpot - POSTGRES_PASSWORD=penpot - volumes: - - penpot_postgres_data:/var/lib/postgresql/data - - networks: - - penpot - penpot-redis: image: redis:7 restart: always networks: - penpot + + ## A mailcatch service, used as temporal SMTP server. You can access + ## via HTTP to the port 1080 for read all emails the penpot platform + ## has sent. Should be only used as a temporal solution meanwhile + ## you don't have a real SMTP provider configured. + + penpot-mailcatch: + image: sj26/mailcatcher:latest + restart: always + expose: + - '1025' + ports: + - "1080:1080" + + ## Example configuration of MiniIO (S3 compatible object storage + ## service); If you don't have preference, then just use filesystem, + ## this is here just for the completeness. + + # minio: + # image: "minio/minio:latest" + # command: minio server /mnt/data --console-address ":9001" + # + # volumes: + # - "penpot_minio:/mnt/data" + # + # environment: + # - MINIO_ROOT_USER=minioadmin + # - MINIO_ROOT_PASSWORD=minioadmin + # + # ports: + # - 9000:9000 + # - 9001:9001 + + From 29c0190b7a725dbf242e0e762b1bb4d16e8cd699 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20Ba=C5=A1i=C4=87?= Date: Sat, 4 Feb 2023 17:37:13 +0100 Subject: [PATCH 4/9] :bug: Add mailcatch to penpot network on docker compose Without this the backend complains that it cannot connect to the smtp host (when using mailcatcher). The reason is because the mailcatcher is not on the same network as the backend application. --- docker/images/docker-compose.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker/images/docker-compose.yaml b/docker/images/docker-compose.yaml index 90deed915..6302178cd 100644 --- a/docker/images/docker-compose.yaml +++ b/docker/images/docker-compose.yaml @@ -259,6 +259,8 @@ services: - '1025' ports: - "1080:1080" + networks: + - penpot ## Example configuration of MiniIO (S3 compatible object storage service); If you don't ## have preference, then just use filesystem, this is here just for the completeness. From b05ca4bb82aaa31345c28f8f33bd2e44baef882f Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sat, 4 Feb 2023 11:33:27 +0100 Subject: [PATCH 5/9] :bug: Fix undefined name RuntimeException on manage.py script Python defines [`RuntimeError`](https://docs.python.org/3.7/library/exceptions.html#RuntimeError) but it does not define `RuntimeException` so a `NameError` will be raised when any of these lines are executed. % `python3 -c "RuntimeException('This is a test...')"` ``` Traceback (most recent call last): File "", line 1, in NameError: name 'RuntimeException' is not defined ``` % `flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics` ``` ./backend/scripts/manage.py:22:15: F821 undefined name 'RuntimeException' raise RuntimeException(f"invalid PREPL_URI: {PREPL_URI}") ^ ./backend/scripts/manage.py:25:15: F821 undefined name 'RuntimeException' raise RuntimeException(f"invalid PREPL_URI: {PREPL_URI}") ^ ./backend/scripts/manage.py:49:23: F821 undefined name 'RuntimeException' raise RuntimeException("unexpected response from PREPL") ^ 3 F821 undefined name 'RuntimeException' 3 ``` --- backend/scripts/manage.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/scripts/manage.py b/backend/scripts/manage.py index fd78d1a91..ea90d3e86 100755 --- a/backend/scripts/manage.py +++ b/backend/scripts/manage.py @@ -19,10 +19,10 @@ PREPL_URI = "tcp://localhost:6063" def get_prepl_conninfo(): uri_data = urlparse(PREPL_URI) if uri_data.scheme != "tcp": - raise RuntimeException(f"invalid PREPL_URI: {PREPL_URI}") + raise RuntimeError(f"invalid PREPL_URI: {PREPL_URI}") if not isinstance(uri_data.netloc, str): - raise RuntimeException(f"invalid PREPL_URI: {PREPL_URI}") + raise RuntimeError(f"invalid PREPL_URI: {PREPL_URI}") host, port = uri_data.netloc.split(":", 2) @@ -46,7 +46,7 @@ def send_eval(expr): result = json.load(f) tag = result.get("tag", None) if tag != "ret": - raise RuntimeException("unexpected response from PREPL") + raise RuntimeError("unexpected response from PREPL") return result.get("val", None), result.get("exception", None) def encode(val): From f1085aadd1df566e3bc8654fbce62390909d04c8 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 6 Feb 2023 19:21:55 +0100 Subject: [PATCH 6/9] :bug: Fix compatibility issues on docker upgrade path --- docker/images/Dockerfile.backend | 4 +++- docker/images/docker-compose.yaml | 4 ++-- docker/images/files/nginx.conf | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/docker/images/Dockerfile.backend b/docker/images/Dockerfile.backend index be6cdaa75..7b6a4ee5b 100644 --- a/docker/images/Dockerfile.backend +++ b/docker/images/Dockerfile.backend @@ -28,8 +28,10 @@ RUN set -ex; \ ; \ echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen; \ locale-gen; \ - mkdir -p /opt/penpot/assets; \ + mkdir -p /opt/data; \ + mkdir -p /opt/penpot; \ chown -R penpot:penpot /opt/penpot; \ + chown -R penpot:penpot /opt/data; \ rm -rf /var/lib/apt/lists/*; RUN set -eux; \ diff --git a/docker/images/docker-compose.yaml b/docker/images/docker-compose.yaml index 6302178cd..975b08dd7 100644 --- a/docker/images/docker-compose.yaml +++ b/docker/images/docker-compose.yaml @@ -40,7 +40,7 @@ services: - 9001:80 volumes: - - penpot_assets:/opt/penpot/assets + - penpot_assets:/opt/data/assets depends_on: - penpot-backend @@ -180,7 +180,7 @@ services: ## stored in a docker volume. - PENPOT_ASSETS_STORAGE_BACKEND=assets-fs - - PENPOT_STORAGE_ASSETS_FS_DIRECTORY=/opt/penpot/assets + - PENPOT_STORAGE_ASSETS_FS_DIRECTORY=/opt/data/assets ## Also can be configured to to use a S3 compatible storage ## service like MiniIO. Look below for minio service setup. diff --git a/docker/images/files/nginx.conf b/docker/images/files/nginx.conf index f628aacfe..a43f3bf66 100644 --- a/docker/images/files/nginx.conf +++ b/docker/images/files/nginx.conf @@ -90,7 +90,7 @@ http { location /internal/assets { internal; - alias /opt/penpot/assets; + alias /opt/data/assets; add_header x-internal-redirect "$upstream_http_x_accel_redirect"; } From 8d19c067e8ad10bb704d91659ec8406afaf7b61e Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 10 Feb 2023 13:23:22 +0100 Subject: [PATCH 7/9] :bug: Fix incorrect mountpoint on docker compose --- docker/images/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/images/docker-compose.yaml b/docker/images/docker-compose.yaml index 975b08dd7..fd283ad33 100644 --- a/docker/images/docker-compose.yaml +++ b/docker/images/docker-compose.yaml @@ -97,7 +97,7 @@ services: penpot-backend: image: "penpotapp/backend:latest" volumes: - - penpot_assets:/opt/penpot/assets + - penpot_assets:/opt/data/assets depends_on: - penpot-postgres From c467d04d50845178a9fa800273d5efda5406ff71 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 10 Feb 2023 13:37:33 +0100 Subject: [PATCH 8/9] :bug: Fix permission issue on docker images --- docker/images/Dockerfile.backend | 2 +- docker/images/Dockerfile.frontend | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/docker/images/Dockerfile.backend b/docker/images/Dockerfile.backend index 63693b275..21c7aba40 100644 --- a/docker/images/Dockerfile.backend +++ b/docker/images/Dockerfile.backend @@ -29,7 +29,7 @@ RUN set -ex; \ ; \ echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen; \ locale-gen; \ - mkdir -p /opt/data; \ + mkdir -p /opt/data/assets; \ mkdir -p /opt/penpot; \ chown -R penpot:penpot /opt/penpot; \ chown -R penpot:penpot /opt/data; \ diff --git a/docker/images/Dockerfile.frontend b/docker/images/Dockerfile.frontend index f2708974e..84b2493dc 100644 --- a/docker/images/Dockerfile.frontend +++ b/docker/images/Dockerfile.frontend @@ -1,6 +1,11 @@ FROM nginx:1.23 LABEL maintainer="Andrey Antukh " +RUN set -ex; \ + useradd -U -M -u 1001 -s /bin/false -d /opt/penpot penpot; \ + mkdir -p /opt/data/assets; \ + chown -R penpot:penpot /opt/data; + ADD ./bundle-frontend/ /var/www/app/ ADD ./files/config.js /var/www/app/js/config.js ADD ./files/nginx.conf /etc/nginx/nginx.conf From 1ed3b3cf75450e11730bf80fa48fffdf058d39a6 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 10 Feb 2023 14:07:12 +0100 Subject: [PATCH 9/9] :paperclip: Add missing restart policy to some containers on default compose file --- docker/images/docker-compose.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docker/images/docker-compose.yaml b/docker/images/docker-compose.yaml index fd283ad33..8b0f671c9 100644 --- a/docker/images/docker-compose.yaml +++ b/docker/images/docker-compose.yaml @@ -36,6 +36,7 @@ services: penpot-frontend: image: "penpotapp/frontend:latest" + restart: always ports: - 9001:80 @@ -96,6 +97,8 @@ services: penpot-backend: image: "penpotapp/backend:latest" + restart: always + volumes: - penpot_assets:/opt/data/assets @@ -214,6 +217,7 @@ services: penpot-exporter: image: "penpotapp/exporter:latest" + restart: always networks: - penpot @@ -268,6 +272,7 @@ services: # minio: # image: "minio/minio:latest" # command: minio server /mnt/data --console-address ":9001" + # restart: always # # volumes: # - "penpot_minio:/mnt/data"