├── download.sh ├── Caddyfile ├── setup.sh ├── docker-compose.yml ├── docker-compose.penpot.env ├── README.md └── manage.sh /download.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DESTINATION=$1 4 | 5 | # clone Flectra directory 6 | git clone --depth=1 https://github.com/6Ministers/penpot-docker-compose-for-prototypes-apps $DESTINATION 7 | rm -rf $DESTINATION/.git 8 | 9 | 10 | -------------------------------------------------------------------------------- /Caddyfile: -------------------------------------------------------------------------------- 1 | https://subdomain.your-domain.com:443 { 2 | reverse_proxy 127.0.0.1:9001 3 | # tls admin@example.org 4 | encode zstd gzip 5 | # file_server 6 | 7 | # Secure headers, all from .htaccess except Permissions-Policy, STS and X-Powered-By 8 | header { 9 | Strict-Transport-Security max-age=31536000 10 | Permissions-Policy interest-cohort=() 11 | X-Content-Type-Options nosniff 12 | X-Frame-Options SAMEORIGIN 13 | Referrer-Policy no-referrer 14 | X-XSS-Protection "1; mode=block" 15 | X-Permitted-Cross-Domain-Policies none 16 | X-Robots-Tag "noindex, nofollow" 17 | -X-Powered-By 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script setups dockerized Ubuntu 22.04. 4 | 5 | set -eu 6 | 7 | install_docker() { 8 | # Install Docker 9 | export DEBIAN_FRONTEND=noninteractive 10 | sudo apt-get -qqy update 11 | DEBIAN_FRONTEND=noninteractive sudo -E apt-get -qqy -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade 12 | sudo apt-get -yy install apt-transport-https ca-certificates curl software-properties-common pwgen gnupg 13 | sudo install -m 0755 -d /etc/apt/keyrings 14 | curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg 15 | sudo chmod a+r /etc/apt/keyrings/docker.gpg 16 | echo \ 17 | "deb [arch=""$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ 18 | ""$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | 19 | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null 20 | sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 21 | 22 | # Install Docker Compose 23 | sudo ln -sfv /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose 24 | 25 | # Allow current user to run Docker commands 26 | sudo usermod -aG docker "$USER" 27 | } 28 | 29 | install_docker 30 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.5" 2 | 3 | services: 4 | caddy: 5 | image: caddy:alpine 6 | restart: unless-stopped 7 | container_name: caddy 8 | volumes: 9 | - ./Caddyfile:/etc/caddy/Caddyfile 10 | - ./certs:/certs 11 | - ./config:/config 12 | - ./data:/data 13 | - ./sites:/srv 14 | network_mode: "host" 15 | 16 | penpot-frontend: 17 | image: "penpotapp/frontend:latest" 18 | restart: always 19 | ports: 20 | - 9001:80 21 | volumes: 22 | - penpot_assets_data:/opt/data 23 | env_file: 24 | - docker-compose.penpot.env 25 | depends_on: 26 | - penpot-backend 27 | - penpot-exporter 28 | 29 | penpot-backend: 30 | image: "penpotapp/backend:latest" 31 | restart: always 32 | volumes: 33 | - penpot_assets_data:/opt/data 34 | depends_on: 35 | - penpot-postgres 36 | - penpot-redis 37 | env_file: 38 | - docker-compose.penpot.env 39 | 40 | penpot-exporter: 41 | image: "penpotapp/exporter:latest" 42 | env_file: 43 | - docker-compose.penpot.env 44 | environment: 45 | # Don't touch it; this uses internal docker network to 46 | # communicate with the frontend. 47 | - PENPOT_PUBLIC_URI=http://penpot-frontend 48 | 49 | penpot-postgres: 50 | image: "postgres:15" 51 | restart: always 52 | stop_signal: SIGINT 53 | environment: 54 | - POSTGRES_INITDB_ARGS=--data-checksums 55 | - POSTGRES_DB=penpot 56 | - POSTGRES_USER=penpot 57 | - POSTGRES_PASSWORD=penpot 58 | volumes: 59 | - penpot_postgres_v15:/var/lib/postgresql/data 60 | 61 | penpot-redis: 62 | image: redis:7 63 | restart: always 64 | 65 | volumes: 66 | penpot_postgres_v15: 67 | penpot_assets_data: 68 | -------------------------------------------------------------------------------- /docker-compose.penpot.env: -------------------------------------------------------------------------------- 1 | # Should be set to the public domain when penpot is going to be 2 | # served. 3 | PENPOT_FLAGS=enable-registration enable-login disable-demo-users enable-email-verification enable-smtp enable-log-emails enable-login-with-password enable-prepl-server 4 | PENPOT_PUBLIC_URI=https://penpot.your-domain.com 5 | 6 | # Standard database connection parametes (only postgresql is 7 | # supported): 8 | PENPOT_DATABASE_URI=postgresql://penpot-postgres/penpot 9 | PENPOT_DATABASE_USERNAME=penpot 10 | PENPOT_DATABASE_PASSWORD=penpot 11 | 12 | # Redis is used for the websockets notifications. 13 | PENPOT_REDIS_URI=redis://penpot-redis/0 14 | 15 | # By default files upload by user are stored in local filesystem. But 16 | # it can be configured to store in AWS S3 or completelly in de the 17 | # database. Storing in the database makes the backups more easy but 18 | # will make access to media less performant. 19 | PENPOT_ASSETS_STORAGE_BACKEND=assets-fs 20 | PENPOT_STORAGE_ASSETS_FS_DIRECTORY=/opt/data/assets 21 | 22 | 23 | # AWS Credentials 24 | # AWS_ACCESS_KEY_ID= 25 | # AWS_SECRET_ACCESS_KEY= 26 | 27 | # Backend configuration 28 | # PENPOT_ASSETS_STORAGE_BACKEND=assets-s3 29 | # PENPOT_STORAGE_ASSETS_S3_REGION= 30 | # PENPOT_STORAGE_ASSETS_S3_BUCKET= 31 | 32 | # Optional if you want to use it with non AWS, S3 compatible service: 33 | # PENPOT_STORAGE_ASSETS_S3_ENDPOINT= 34 | 35 | 36 | # Telemetry. When enabled, a periodical process will send annonymous 37 | # data about this instance. Telemetry data will enable us to learn on 38 | # how the application is used based on real scenarios. If you want to 39 | # help us, please leave it enabled. 40 | PENPOT_TELEMETRY_ENABLED=true 41 | PENPOT_TELEMETRY_REFERER=taiga 42 | PENPOT_REGISTRATION_ENABLED=true 43 | 44 | # Email sending configuration. By default emails are printed in 45 | # console, but for production usage is recommeded to setup a real SMTP 46 | # provider. Emails are used for confirm user registration. 47 | PENPOT_SMTP_DEFAULT_FROM=penpot@your-domain.com 48 | PENPOT_SMTP_DEFAULT_REPLY_TO=penpot@your-domain.com 49 | PENPOT_SMTP_HOST=smtp.your-domain.com 50 | PENPOT_SMTP_PORT=465 51 | PENPOT_SMTP_USERNAME=penpot@your-domain.com 52 | PENPOT_SMTP_PASSWORD= 53 | PENPOT_SMTP_TLS=false 54 | PENPOT_SMTP_SSL=true 55 | PENPOT_SMTP_DEFAULT_REPLY_TO=Penpot 56 | PENPOT_SMTP_DEFAULT_FROM=Penpot 57 | 58 | ## Authentication providers 59 | 60 | # Google 61 | # PENPOT_GOOGLE_CLIENT_ID= 62 | # PENPOT_GOOGLE_CLIENT_SECRET= 63 | 64 | # Github 65 | # PENPOT_GITHUB_CLIENT_ID= 66 | # PENPOT_GITHUB_CLIENT_SECRET= 67 | 68 | # Gitlab 69 | # PENPOT_GITLAB_BASE_URI=https://gitlab.com 70 | # PENPOT_GITLAB_CLIENT_ID= 71 | # PENPOT_GITLAB_CLIENT_SECRET= 72 | 73 | # OpenID Connect (since 1.5.0) 74 | # PENPOT_OIDC_BASE_URI= 75 | # PENPOT_OIDC_CLIENT_ID= 76 | # PENPOT_OIDC_CLIENT_SECRET= 77 | 78 | # LDAP 79 | # PENPOT_LDAP_HOST=ldap 80 | # PENPOT_LDAP_PORT=10389 81 | # PENPOT_LDAP_SSL=false 82 | # PENPOT_LDAP_STARTTLS=false 83 | # PENPOT_LDAP_BASE_DN=ou=people,dc=planetexpress,dc=com 84 | # PENPOT_LDAP_BIND_DN=cn=admin,dc=planetexpress,dc=com 85 | # PENPOT_LDAP_BIND_PASSWORD=GoodNewsEveryone 86 | # PENPOT_LDAP_ATTRS_USERNAME=uid 87 | # PENPOT_LDAP_ATTRS_EMAIL=mail 88 | # PENPOT_LDAP_ATTRS_FULLNAME=cn 89 | # PENPOT_LDAP_ATTRS_PHOTO=jpegPhoto 90 | # PENPOT_LOGIN_WITH_LDAP=true 91 | 92 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Screenshot_84](https://github.com/6Ministers/penpot-docker-compose-for-prototypes-apps/assets/11208423/aea25938-c051-4bc8-b51c-34144f2af663) 2 | # Installing Penpot with docker-compose. 3 | 4 | ## Quick Installation 5 | 6 | **Before starting the instance, direct the domain (subdomain) to the ip of the server where Penpot will be installed!** 7 | 8 | ## 1. Penpot Server Requirements 9 | From and more 10 | - 2 CPUs 11 | - 2 RAM 12 | - 10 Gb 13 | 14 | Run for Ubuntu 22.04 15 | 16 | ``` bash 17 | sudo apt-get purge needrestart 18 | ``` 19 | 20 | ## 2.Install docker and docker-compose: 21 | 22 | ``` bash 23 | curl -s https://raw.githubusercontent.com/6Ministers/penpot-docker-compose-for-prototypes-apps/master/setup.sh | sudo bash -s 24 | ``` 25 | 26 | ## 3.Download Penpot instance: 27 | 28 | 29 | ``` bash 30 | curl -s https://raw.githubusercontent.com/6Ministers/penpot-docker-compose-for-prototypes-apps/master/download.sh | sudo bash -s penpot 31 | ``` 32 | 33 | If `curl` is not found, install it: 34 | 35 | ``` bash 36 | $ sudo apt-get install curl 37 | # or 38 | $ sudo yum install curl 39 | ``` 40 | 41 | Go to the catalog 42 | 43 | ``` bash 44 | cd penpot 45 | ``` 46 | ## 4. In the configuration file `docker-compose.penpot.env`, set the following parameters: 47 | 48 | Install what you need, documentation: 49 | 50 | https://help.penpot.app/technical-guide/configuration/ 51 | 52 | `PENPOT_FLAGS=` 53 | 54 | ``` bash 55 | PENPOT_FLAGS=enable-registration enable-login disable-demo-users enable-email-verification enable-smtp enable-log-emails enable-login-with-password enable-prepl-server 56 | ``` 57 | 58 | - enable-cors: Enables the default cors cofiguration that allows all domains (this configuration is designed only for dev purposes right now). 59 | - enable-backend-api-docs: Enables the /api/_doc endpoint that lists all rpc methods available on backend. 60 | - enable-insecure-register: Enables the insecure process of profile registrion deactivating the - email verification process (only for local or internal setups). 61 | - enable-user-feedback: Enables the feedback form at the dashboard. 62 | - disable-secure-session-cookies: By default, penpot uses the secure flag on cookies, this flag disables it; it is usefull if you have plan to serve penpot under different domain than localhost without HTTPS. 63 | - disable-login: allows disable password based login form. 64 | - disable-registration: disables registration (still enabled for invitations only). 65 | - enable-prepl-server: enables PREPL server, used by manage.py and other additional tools for communicate internally with penpot backend. 66 | 67 | 68 | `PENPOT_PUBLIC_URI=` 69 | 70 | ``` bash 71 | PENPOT_PUBLIC_URI=https://penpot.your-domain.com 72 | ``` 73 | I recommend setting up SMTP so that you can confirm mail during registration, invite the team and send notifications. Note that when SMTP user registration is enabled, then user creation via the console is disabled. [Create users using CLI](https://help.penpot.app/technical-guide/getting-started/#create-users-using-cli) 74 | 75 | 76 | ``` bash 77 | PENPOT_SMTP_DEFAULT_FROM=penpot@your-domain.com 78 | PENPOT_SMTP_DEFAULT_REPLY_TO=penpot@your-domain.com 79 | PENPOT_SMTP_HOST=smtp.your-domain.com 80 | PENPOT_SMTP_PORT=465 81 | PENPOT_SMTP_USERNAME=penpot@your-domain.com 82 | PENPOT_SMTP_PASSWORD= 83 | PENPOT_SMTP_TLS=false 84 | PENPOT_SMTP_SSL=true 85 | PENPOT_SMTP_DEFAULT_REPLY_TO=Penpot 86 | PENPOT_SMTP_DEFAULT_FROM=Penpot 87 | ``` 88 | 89 | 90 | To change the domain in the `Caddyfile` to your own 91 | 92 | ``` bash 93 | https://subdomain.your-domain:443 { 94 | header Strict-Transport-Security max-age=31536000; 95 | reverse_proxy 127.0.0.1:9001 96 | tls admin@example.org 97 | encode zstd gzip 98 | 99 | ... 100 | } 101 | ``` 102 | 103 | ## 5.Run Penpot: 104 | 105 | ``` bash 106 | docker-compose up -d 107 | ``` 108 | 109 | Then open `https://penpot.domain.com:` to access Penpot 110 | ![Screenshot_83](https://github.com/6Ministers/penpot-docker-compose-for-prototypes-apps/assets/11208423/97c172d9-a814-4f90-b27f-3f484a86f923) 111 | 112 | 113 | ## Penpot container management 114 | 115 | **Run Penpot**: 116 | 117 | ``` bash 118 | docker-compose up -d 119 | ``` 120 | 121 | **Restart**: 122 | 123 | ``` bash 124 | docker-compose restart 125 | ``` 126 | 127 | **Restart**: 128 | 129 | ``` bash 130 | sudo docker-compose down && sudo docker-compose up -d 131 | ``` 132 | 133 | **Stop**: 134 | 135 | ``` bash 136 | docker-compose down 137 | ``` 138 | 139 | ## Documentation 140 | https://help.penpot.app/technical-guide/getting-started/docker/ 141 | https://help.penpot.app/technical-guide/getting-started/ 142 | https://help.penpot.app/technical-guide/configuration/ 143 | 144 | 145 | https://help.penpot.app/technical-guide/getting-started/#create-users-using-cli 146 | 147 | **Create users using CLI** 148 | By default (or when disable-email-verification flag is used), email verification process is completly disabled for new registrations but is hightly recommended enabling email verification or disable registration if you are going to expose your penpot instance to the internet. 149 | 150 | If you have registration disabled, you can create additional profiles using the command line interface: 151 | ``` bash 152 | docker exec -ti penpot-penpot-backend-1 python3 ./manage.py create-profile 153 | ``` 154 | NOTE: the exact container name depends on your docker version and platform. For example it could be penpot-penpot-backend-1 or penpot_penpot-backend-1. You can check the correct name executing docker ps. 155 | 156 | NOTE: This script only will works when you properly have the enable-prepl-server flag set on backend (is set by default on the latest docker-compose.yaml file) 157 | 158 | You can find all configuration options in the Configuration section. 159 | 160 | 161 | **Backup Penpot** 162 | 163 | https://help.penpot.app/technical-guide/getting-started/#backup-penpot 164 | 165 | 166 | 167 | **Update Penpot** 168 | 169 | https://help.penpot.app/technical-guide/getting-started/#update-penpot-1 170 | 171 | To get the latest version of Penpot in your local installation, you just need to execute: 172 | ``` bash 173 | docker compose -f docker-compose.yaml pull 174 | ``` 175 | This will fetch the latest images. When you do docker compose up again, the containers will be recreated with the latest version. 176 | -------------------------------------------------------------------------------- /manage.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | export ORGANIZATION="penpotapp"; 4 | export DEVENV_IMGNAME="$ORGANIZATION/devenv"; 5 | export DEVENV_PNAME="penpotdev"; 6 | 7 | export CURRENT_USER_ID=$(id -u); 8 | export CURRENT_VERSION=$(cat ./version.txt); 9 | export CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD); 10 | export CURRENT_HASH=$(git rev-parse --short HEAD); 11 | export CURRENT_COMMITS=$(git rev-list --count HEAD) 12 | 13 | set -ex 14 | 15 | function print-current-version { 16 | echo -n "$CURRENT_VERSION-$CURRENT_COMMITS-g$CURRENT_HASH" 17 | } 18 | 19 | function build-devenv { 20 | set +e; 21 | echo "Building development image $DEVENV_IMGNAME:latest..." 22 | 23 | pushd docker/devenv; 24 | 25 | docker run --privileged --rm tonistiigi/binfmt --install all 26 | docker buildx inspect penpot > /dev/null 2>&1; 27 | 28 | if [ $? -eq 1 ]; then 29 | docker buildx create --name=penpot --use 30 | docker buildx inspect --bootstrap > /dev/null 2>&1; 31 | else 32 | docker buildx use penpot; 33 | docker buildx inspect --bootstrap > /dev/null 2>&1; 34 | fi 35 | 36 | # docker build -t $DEVENV_IMGNAME:latest . 37 | docker buildx build --platform linux/amd64,linux/arm64 --push -t $DEVENV_IMGNAME:latest .; 38 | docker pull $DEVENV_IMGNAME:latest; 39 | 40 | popd; 41 | } 42 | 43 | function build-devenv-local { 44 | echo "Building local only development image $DEVENV_IMGNAME:latest..." 45 | 46 | pushd docker/devenv; 47 | docker build -t $DEVENV_IMGNAME:latest .; 48 | popd; 49 | } 50 | 51 | function pull-devenv { 52 | set -ex 53 | docker pull $DEVENV_IMGNAME:latest 54 | } 55 | 56 | function pull-devenv-if-not-exists { 57 | if [[ ! $(docker images $DEVENV_IMGNAME:latest -q) ]]; then 58 | pull-devenv $@ 59 | fi 60 | } 61 | 62 | function start-devenv { 63 | pull-devenv-if-not-exists $@; 64 | 65 | docker compose -p $DEVENV_PNAME -f docker/devenv/docker-compose.yaml up -d; 66 | } 67 | 68 | function stop-devenv { 69 | docker compose -p $DEVENV_PNAME -f docker/devenv/docker-compose.yaml stop -t 2; 70 | } 71 | 72 | function drop-devenv { 73 | docker compose -p $DEVENV_PNAME -f docker/devenv/docker-compose.yaml down -t 2 -v; 74 | 75 | echo "Clean old development image $DEVENV_IMGNAME..." 76 | docker images $DEVENV_IMGNAME -q | awk '{print $3}' | xargs --no-run-if-empty docker rmi 77 | } 78 | 79 | function log-devenv { 80 | docker compose -p $DEVENV_PNAME -f docker/devenv/docker-compose.yaml logs -f --tail=50 81 | } 82 | 83 | function run-devenv-tmux { 84 | if [[ ! $(docker ps -f "name=penpot-devenv-main" -q) ]]; then 85 | start-devenv 86 | fi 87 | 88 | docker exec -ti penpot-devenv-main sudo -EH -u penpot /home/start-tmux.sh 89 | } 90 | 91 | function run-devenv-shell { 92 | if [[ ! $(docker ps -f "name=penpot-devenv-main" -q) ]]; then 93 | start-devenv 94 | fi 95 | docker exec -ti penpot-devenv-main sudo -EH -u penpot bash 96 | } 97 | 98 | 99 | function build { 100 | echo ">> build start: $1" 101 | local version=$(print-current-version); 102 | 103 | pull-devenv-if-not-exists; 104 | docker volume create ${DEVENV_PNAME}_user_data; 105 | docker run -t --rm \ 106 | --mount source=${DEVENV_PNAME}_user_data,type=volume,target=/home/penpot/ \ 107 | --mount source=`pwd`,type=bind,target=/home/penpot/penpot \ 108 | -e EXTERNAL_UID=$CURRENT_USER_ID \ 109 | -e SHADOWCLJS_EXTRA_PARAMS=$SHADOWCLJS_EXTRA_PARAMS \ 110 | -w /home/penpot/penpot/$1 \ 111 | $DEVENV_IMGNAME:latest sudo -EH -u penpot ./scripts/build $version 112 | 113 | echo ">> build end: $1" 114 | } 115 | 116 | function put-license-file { 117 | local target=$1; 118 | tee -a $target/LICENSE >> /dev/null <> bundle frontend start"; 129 | 130 | mkdir -p ./bundles 131 | local version=$(print-current-version); 132 | local bundle_dir="./bundles/frontend"; 133 | 134 | build "frontend"; 135 | 136 | rm -rf $bundle_dir; 137 | mv ./frontend/target/dist $bundle_dir; 138 | echo $version > $bundle_dir/version.txt; 139 | put-license-file $bundle_dir; 140 | echo ">> bundle frontend end"; 141 | } 142 | 143 | function build-backend-bundle { 144 | echo ">> bundle backend start"; 145 | 146 | mkdir -p ./bundles 147 | local version=$(print-current-version); 148 | local bundle_dir="./bundles/backend"; 149 | 150 | build "backend"; 151 | 152 | rm -rf $bundle_dir; 153 | mv ./backend/target/dist $bundle_dir; 154 | echo $version > $bundle_dir/version.txt; 155 | put-license-file $bundle_dir; 156 | echo ">> bundle backend end"; 157 | } 158 | 159 | function build-exporter-bundle { 160 | echo ">> bundle exporter start"; 161 | 162 | mkdir -p ./bundles 163 | local version=$(print-current-version); 164 | local bundle_dir="./bundles/exporter"; 165 | 166 | build "exporter"; 167 | 168 | rm -rf $bundle_dir; 169 | mv ./exporter/target $bundle_dir; 170 | 171 | echo $version > $bundle_dir/version.txt 172 | put-license-file $bundle_dir; 173 | 174 | echo ">> bundle exporter end"; 175 | } 176 | 177 | function build-docker-images { 178 | rsync -avr --delete ./bundles/frontend/ ./docker/images/bundle-frontend/; 179 | rsync -avr --delete ./bundles/backend/ ./docker/images/bundle-backend/; 180 | rsync -avr --delete ./bundles/exporter/ ./docker/images/bundle-exporter/; 181 | 182 | pushd ./docker/images; 183 | 184 | docker build -t penpotapp/frontend:$CURRENT_BRANCH -t penpotapp/frontend:latest -f Dockerfile.frontend .; 185 | docker build -t penpotapp/backend:$CURRENT_BRANCH -t penpotapp/backend:latest -f Dockerfile.backend .; 186 | docker build -t penpotapp/exporter:$CURRENT_BRANCH -t penpotapp/exporter:latest -f Dockerfile.exporter .; 187 | 188 | popd; 189 | } 190 | 191 | function usage { 192 | echo "PENPOT build & release manager" 193 | echo "USAGE: $0 OPTION" 194 | echo "Options:" 195 | echo "- pull-devenv Pulls docker development oriented image" 196 | echo "- build-devenv Build docker development oriented image" 197 | echo "- start-devenv Start the development oriented docker compose service." 198 | echo "- stop-devenv Stops the development oriented docker compose service." 199 | echo "- drop-devenv Remove the development oriented docker compose containers, volumes and clean images." 200 | echo "- run-devenv Attaches to the running devenv container and starts development environment" 201 | echo "" 202 | } 203 | 204 | case $1 in 205 | version) 206 | print-current-version 207 | ;; 208 | 209 | ## devenv related commands 210 | pull-devenv) 211 | pull-devenv ${@:2}; 212 | ;; 213 | 214 | build-devenv) 215 | build-devenv ${@:2} 216 | ;; 217 | 218 | build-devenv-local) 219 | build-devenv-local ${@:2} 220 | ;; 221 | 222 | push-devenv) 223 | push-devenv ${@:2} 224 | ;; 225 | 226 | start-devenv) 227 | start-devenv ${@:2} 228 | ;; 229 | run-devenv) 230 | run-devenv-tmux ${@:2} 231 | ;; 232 | run-devenv-shell) 233 | run-devenv-shell ${@:2} 234 | ;; 235 | stop-devenv) 236 | stop-devenv ${@:2} 237 | ;; 238 | drop-devenv) 239 | drop-devenv ${@:2} 240 | ;; 241 | log-devenv) 242 | log-devenv ${@:2} 243 | ;; 244 | 245 | # production builds 246 | build-bundle) 247 | build-frontend-bundle; 248 | build-backend-bundle; 249 | build-exporter-bundle; 250 | ;; 251 | 252 | build-frontend-bundle) 253 | build-frontend-bundle; 254 | ;; 255 | 256 | build-backend-bundle) 257 | build-backend-bundle; 258 | ;; 259 | 260 | build-exporter-bundle) 261 | build-exporter-bundle; 262 | ;; 263 | 264 | build-docker-images) 265 | build-docker-images 266 | ;; 267 | 268 | # Docker Image Tasks 269 | *) 270 | usage 271 | ;; 272 | esac 273 | --------------------------------------------------------------------------------