├── .gitignore ├── db-backup.sh ├── db-restore.sh ├── docker-compose-ee.yml ├── docker-compose-letsencrypt-dns01.yml ├── docker-compose-letsencrypt.yml ├── docker-compose-multiple.yml ├── docker-compose-offline-cache.yml ├── docker-compose-offline.yml ├── docker-compose.yml ├── docker-registry-config.yml ├── ee-down.bat ├── ee-down.sh ├── ee-pull.bat ├── ee-pull.sh ├── ee-up.bat ├── ee-up.sh ├── favicon.ico ├── letsencrypt-down.bat ├── letsencrypt-down.sh ├── letsencrypt-pull.bat ├── letsencrypt-pull.sh ├── letsencrypt-up.bat ├── letsencrypt-up.sh ├── mosquitto.conf ├── multiple-down.bat ├── multiple-down.sh ├── multiple-pull.bat ├── multiple-pull.sh ├── multiple-up.bat ├── multiple-up.sh ├── normal-down.bat ├── normal-down.sh ├── normal-logs.bat ├── normal-logs.sh ├── normal-pull.bat ├── normal-pull.sh ├── normal-up.bat ├── normal-up.sh ├── offline-down.bat ├── offline-down.sh ├── offline-pull.bat ├── offline-pull.sh ├── offline-up.bat ├── offline-up.sh ├── otel-collector-config.yaml ├── readme.md ├── remove-data.bat ├── remove-data.sh └── services.flows.json /.gitignore: -------------------------------------------------------------------------------- 1 | config 2 | letsencrypt 3 | offline 4 | -------------------------------------------------------------------------------- /db-backup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose exec mongodb rm /tmp/openflow.bak 3 | docker compose exec mongodb /usr/bin/mongodump --db openflow --gzip --archive=/tmp/openflow.bak 4 | docker compose cp mongodb:/tmp/openflow.bak . 5 | current_time=$(date "+%Y.%m.%d-%H.%M.%S") 6 | echo "Current Time : $current_time" 7 | cp openflow.bak openflow.$current_time.bak 8 | -------------------------------------------------------------------------------- /db-restore.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose cp openflow.bak mongodb:/tmp/ 3 | docker compose exec mongodb /usr/bin/mongorestore --gzip --archive=/tmp/openflow.bak 4 | -------------------------------------------------------------------------------- /docker-compose-ee.yml: -------------------------------------------------------------------------------- 1 | services: 2 | traefik: 3 | image: traefik:v2.10.6 4 | command: 5 | - "--api.insecure=true" 6 | - "--providers.docker=true" 7 | - "--providers.docker.exposedbydefault=false" 8 | - "--entrypoints.web.address=:80" 9 | # **Timeout settings for gRPC** 10 | # - "--entrypoints.web.transport.respondingTimeouts.readTimeout=90000s" 11 | # - "--entrypoints.web.transport.respondingTimeouts.writeTimeout=90000s" 12 | # - "--entrypoints.web.transport.lifeCycle.requestAcceptGraceTimeout=90000s" 13 | ports: 14 | - "80:80" 15 | restart: always 16 | networks: 17 | - traefik 18 | volumes: 19 | - "//var/run/docker.sock:/var/run/docker.sock:ro" 20 | mongodb: 21 | image: mongo 22 | restart: always 23 | networks: 24 | - traefik 25 | command: "--bind_ip_all --replSet rs0" 26 | environment: 27 | - MONGO_REPLICA_SET_NAME=rs0 28 | volumes: 29 | - mongodb_data:/data/db 30 | mongosetup: 31 | image: mongo 32 | depends_on: 33 | - mongodb 34 | restart: "no" 35 | networks: 36 | - traefik 37 | command: > 38 | mongosh --host mongodb:27017 --eval 39 | ' 40 | db = (new Mongo("mongodb:27017")).getDB("openflow"); 41 | config = { 42 | "_id" : "rs0", 43 | "members" : [ 44 | { 45 | "_id" : 0, 46 | "host" : "mongodb:27017" 47 | } 48 | ] 49 | }; 50 | rs.initiate(config); 51 | ' 52 | rabbitmq: 53 | labels: 54 | - "traefik.enable=true" 55 | - "traefik.http.routers.rabbitmq.rule=Host(`mq.localhost.openiap.io`)" 56 | - "traefik.http.routers.rabbitmq.entrypoints=web" 57 | - "traefik.http.services.rabbitmq.loadbalancer.server.port=15672" 58 | image: rabbitmq:3-management 59 | restart: always 60 | networks: 61 | - traefik 62 | redis: 63 | image: redis 64 | restart: always 65 | networks: 66 | - traefik 67 | command: > 68 | --requirepass pass!word2 69 | otel-collector: 70 | image: otel/opentelemetry-collector 71 | command: > 72 | - "--config=/conf/otel-collector-config.yaml" 73 | restart: always 74 | networks: 75 | - traefik 76 | volumes: 77 | - ./otel-collector-config.yaml:/conf/otel-collector-config.yaml 78 | victoriametrics: 79 | image: victoriametrics/victoria-metrics 80 | depends_on: 81 | - otel-collector 82 | command: 83 | - "--selfScrapeInterval=10s" 84 | restart: always 85 | networks: 86 | - traefik 87 | volumes: 88 | - victoriametrics_data:/victoria-metrics-data 89 | grafana: 90 | labels: 91 | - "traefik.enable=true" 92 | - "traefik.http.routers.grafana.rule=Host(`grafana.localhost.openiap.io`)" 93 | - "traefik.http.routers.grafana.entrypoints=web" 94 | - "traefik.http.services.grafana.loadbalancer.server.port=3000" 95 | image: openiap/grafana 96 | restart: always 97 | networks: 98 | - traefik 99 | depends_on: 100 | - api 101 | environment: 102 | - GF_AUTH_GENERIC_OAUTH_ENABLED=true 103 | - GF_AUTH_GENERIC_OAUTH_ALLOW_SIGN_UP=true 104 | - GF_AUTH_GENERIC_OAUTH_NAME=OpenFlow 105 | - GF_AUTH_GENERIC_OAUTH_CLIENT_ID=openapi 106 | - GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET=openapi 107 | - GF_AUTH_GENERIC_OAUTH_SCOPES=openid offline_access 108 | - GF_AUTH_GENERIC_OAUTH_EMAIL_ATTRIBUTE_PATH=email 109 | - GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH=role 110 | - GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_STRICT=true 111 | - GF_AUTH_GENERIC_OAUTH_AUTH_URL=http://localhost.openiap.io/oidc/auth 112 | - GF_AUTH_GENERIC_OAUTH_TOKEN_URL=http://api:3000/oidc/token 113 | - GF_AUTH_GENERIC_OAUTH_API_URL=http://api:3000/oidc/me 114 | - GF_AUTH_DISABLE_LOGIN_FORM=false 115 | - GF_AUTH_OAUTH_AUTO_LOGIN=true 116 | - GF_AUTH_ANONYMOUS_ENABLED=false 117 | - GF_AUTH_SIGNOUT_REDIRECT_URL=http://localhost.openiap.io/oidc/session/end 118 | - GF_USERS_ALLOW_SIGN_UP=false 119 | - GF_SERVER_DOMAIN=grafana.localhost.openiap.io 120 | - GF_SERVER_ROOT_URL=http://grafana.localhost.openiap.io 121 | - GF_SEND_USER_HEADER=false 122 | - GF_REPORTING_ENABLED=false 123 | volumes: 124 | - grafana_data:/var/lib/grafana 125 | api: 126 | labels: 127 | - traefik.enable=true 128 | - traefik.frontend.passHostHeader=true 129 | - traefik.http.routers.http-router.rule=Host(`localhost.openiap.io`) 130 | - traefik.http.routers.http-router.service=http-service 131 | - traefik.http.services.http-service.loadbalancer.server.port=3000 132 | - traefik.http.routers.grpc-router.rule=Host(`grpc.localhost.openiap.io`) 133 | - traefik.http.routers.grpc-router.service=grpc-service 134 | - traefik.http.services.grpc-service.loadbalancer.server.port=50051 135 | - traefik.http.services.grpc-service.loadbalancer.server.scheme=h2c 136 | image: openiap/openflow 137 | deploy: 138 | replicas: 1 139 | restart: always 140 | networks: 141 | - traefik 142 | volumes: 143 | - "//var/run/docker.sock:/var/run/docker.sock" 144 | depends_on: 145 | - rabbitmq 146 | - mongodb 147 | - redis 148 | environment: 149 | - otel_metric_url=http://otel-collector:4317 150 | - domain=localhost.openiap.io 151 | 152 | # uncomment below 2 lines, if you have set replicas above 1 153 | # - enable_openflow_amqp=true 154 | # - amqp_prefetch=25 155 | # uncomment to add agents to the same docker compose project ( will breake running docker compose up -d if any agents running ) 156 | # - agent_docker_use_project=true 157 | 158 | - amqp_url=amqp://guest:guest@rabbitmq?frameMax=0x2000 159 | - mongodb_url=mongodb://mongodb:27017 160 | - mongodb_db=openflow 161 | 162 | - agent_oidc_userinfo_endpoint=http://api:3000/oidc/me 163 | - agent_oidc_issuer=http://localhost.openiap.io/oidc 164 | - agent_oidc_authorization_endpoint=http://localhost.openiap.io/oidc/auth 165 | - agent_oidc_token_endpoint=http://api:3000/oidc/token 166 | 167 | - aes_secret=O1itlrmA47WzxPj95YHD2sZs7IchYaQI25mQ 168 | # License for localhost.openiap.io, this will not work if you change the domain name 169 | - license_key=PT09PUJFR0lOIExJQ0VOU0U9PT09CjIKCjIwMjMtMDUtMjdUMTA6NDQ6NDMuMTI4Wgpsb2NhbGhvc3Qub3BlbmlhcC5pbwpNYk1RQlM2QUxUUndjYzVzU1hCRlZmMHBvMnhJN0xwdFlDNGhTUEpOR0RGSUxxRDlMUXQ4SGRyUC9DMkNvUW1yN2ozTUJmV2ZuMlNqWFNENXgwa3pGWHJVcUlIZWtHK2xFZHhjeGxLZE5MbG5mWU10RlpQUElZbEl5VWJVMENTQW5tWnJSdkhSTk9uejcyMkxlbXV2MU9seFZWclRuT3llYXdNeHFsNndMTlFpTXEvaUszbCtoMHVZUm1jK1pCMm4xYU5oTlZ1ZDlYS0VDa3FtM2g5MUwzdFZ0d05HVDdKbzJqb1FQTTc0bGZkMW52VXZ5RU1VbTFxbXBVeUpieko0UjFtZFF2TTIyT1U3ellVWXM0ZFdCQ2UwMFN5R3dXU1JJR1hjSlBwMG5nUDU3SFFIS2kzT3JjTzg3UUV0SmxnMFhuMTRLUXovOVBRbHFtd0VNd1Bnenc9PQo9PT09PUVORCBMSUNFTlNFPT09PT0= 170 | 171 | - cache_store_type=redis 172 | - cache_store_redis_host=redis 173 | - cache_store_redis_password=pass!word2 174 | volumes: 175 | mongodb_data: 176 | driver: local 177 | victoriametrics_data: 178 | driver: local 179 | grafana_data: 180 | driver: local 181 | networks: 182 | traefik: 183 | name: traefik 184 | -------------------------------------------------------------------------------- /docker-compose-letsencrypt-dns01.yml: -------------------------------------------------------------------------------- 1 | services: 2 | traefik: 3 | image: traefik:v2.10.6 4 | command: 5 | - "--providers.docker=true" 6 | - "--providers.docker.exposedbydefault=false" 7 | - "--entrypoints.websecure.address=:443" 8 | - "--entrypoints.web.address=:80" 9 | # - "--log.level=DEBUG" 10 | 11 | # - --certificatesresolvers.myresolver.acme.dnschallenge.provider=gcloud 12 | # - --certificatesresolvers.myresolver.acme.email=my@domain.com 13 | - --certificatesresolvers.myresolver.acme.dnschallenge.provider=cloudflare 14 | - --certificatesresolvers.myresolver.acme.email=my@domain.com 15 | - --certificatesresolvers.myresolver.acme.dnschallenge.resolvers=1.1.1.1 16 | - --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json 17 | # # middleware redirect 18 | # - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" 19 | # # global redirect to https 20 | # - "traefik.http.routers.redirs.rule=hostregexp(`{host:.+}`)" 21 | # - "traefik.http.routers.redirs.entrypoints=web" 22 | # - "traefik.http.routers.redirs.middlewares=redirect-to-https" 23 | # **Timeout settings for gRPC** 24 | # - "--entrypoints.websecure.transport.respondingTimeouts.readTimeout=90000s" 25 | # - "--entrypoints.websecure.transport.respondingTimeouts.writeTimeout=90000s" 26 | # - "--entrypoints.websecure.transport.lifeCycle.requestAcceptGraceTimeout=90000s" 27 | environment: 28 | - CLOUDFLARE_EMAIL_FILE=/letsencrypt/CF_EMAIL.txt 29 | - CLOUDFLARE_API_KEY_FILE=/letsencrypt/CF_KEY.txt 30 | # - GCE_PROJECT=apiproject-237214 31 | # - GCE_SERVICE_ACCOUNT_FILE=/letsencrypt/account.json 32 | - DO_POLLING_INTERVAL=5 33 | - DO_PROPAGATION_TIMEOUT=120 34 | - DO_TTL=30 35 | ports: 36 | - "80:80" 37 | - "443:443" 38 | restart: always 39 | networks: 40 | - traefik 41 | volumes: 42 | - "./letsencrypt:/letsencrypt" 43 | - "//var/run/docker.sock:/var/run/docker.sock:ro" 44 | mongodb: 45 | image: mongo 46 | restart: always 47 | networks: 48 | - traefik 49 | command: "--bind_ip_all --replSet rs0" 50 | environment: 51 | - MONGO_REPLICA_SET_NAME=rs0 52 | volumes: 53 | - mongodb_data:/data/db 54 | mongosetup: 55 | image: mongo 56 | depends_on: 57 | - mongodb 58 | restart: "no" 59 | networks: 60 | - traefik 61 | command: > 62 | mongosh --host mongodb:27017 --eval 63 | ' 64 | db = (new Mongo("mongodb:27017")).getDB("openflow"); 65 | config = { 66 | "_id" : "rs0", 67 | "members" : [ 68 | { 69 | "_id" : 0, 70 | "host" : "mongodb:27017" 71 | } 72 | ] 73 | }; 74 | rs.initiate(config); 75 | ' 76 | rabbitmq: 77 | labels: 78 | - "traefik.enable=true" 79 | - "traefik.http.routers.rabbitmq.rule=Host(`mq.localhost.openiap.io`)" 80 | - "traefik.http.routers.rabbitmq.entrypoints=websecure" 81 | - "traefik.http.routers.rabbitmq.tls.certresolver=myresolver" 82 | - "traefik.http.services.rabbitmq.loadbalancer.server.port=15672" 83 | image: rabbitmq:3-management 84 | restart: always 85 | networks: 86 | - traefik 87 | api: 88 | labels: 89 | - "traefik.enable=true" 90 | - "traefik.http.routers.api.rule=Host(`localhost.openiap.io`)" 91 | - "traefik.http.routers.api.entrypoints=websecure" 92 | - "traefik.http.routers.api.tls.certresolver=myresolver" 93 | - "traefik.http.services.api.loadbalancer.server.port=3000" 94 | - "traefik.frontend.passHostHeader=true" 95 | # - "traefik.http.routers.api.tls.domains[0].main=localhost.openiap.io" 96 | # - "traefik.http.routers.api.tls.domains[0].sans=*.localhost.openiap.io" 97 | image: openiap/openflow 98 | deploy: 99 | replicas: 1 100 | restart: always 101 | networks: 102 | - traefik 103 | depends_on: 104 | - rabbitmq 105 | - mongodb 106 | volumes: 107 | - "//var/run/docker.sock:/var/run/docker.sock" 108 | environment: 109 | - domain=localhost.openiap.io 110 | - protocol=https 111 | 112 | - agent_oidc_userinfo_endpoint=http://api:3000/oidc/me 113 | - agent_oidc_issuer=https://localhost.openiap.io/oidc 114 | - agent_oidc_authorization_endpoint=https://localhost.openiap.io/oidc/auth 115 | - agent_oidc_token_endpoint=http://api:3000/oidc/token 116 | - agent_docker_entrypoints=web,websecure 117 | - agent_docker_certresolver=myresolver 118 | 119 | # uncomment below 2 lines, if you have set replicas above 1 120 | # - enable_openflow_amqp=true 121 | # - amqp_prefetch=25 122 | # uncomment to add agents to the same docker compose project ( will breake running docker compose up -d if any agents running ) 123 | # - agent_docker_use_project=true 124 | 125 | - amqp_url=amqp://guest:guest@rabbitmq?frameMax=0x2000 126 | - mongodb_url=mongodb://mongodb:27017 127 | - mongodb_db=openrpa 128 | 129 | - aes_secret=O1itlrmA47WzxPj95YHD2sZs7IchYaQI25mQ 130 | volumes: 131 | mongodb_data: 132 | driver: local 133 | networks: 134 | traefik: 135 | name: traefik 136 | -------------------------------------------------------------------------------- /docker-compose-letsencrypt.yml: -------------------------------------------------------------------------------- 1 | services: 2 | traefik: 3 | image: traefik:v2.10.6 4 | command: 5 | - "--providers.docker=true" 6 | - "--providers.docker.exposedbydefault=false" 7 | - "--entrypoints.websecure.address=:443" 8 | - "--entrypoints.web.address=:80" 9 | 10 | - "--certificatesresolvers.myresolver.acme.tlschallenge=true" 11 | - "--certificatesresolvers.myresolver.acme.email=my@domain.com" 12 | - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" 13 | # middleware redirect 14 | - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" 15 | # global redirect to https 16 | - "traefik.http.routers.redirs.rule=hostregexp(`{host:.+}`)" 17 | - "traefik.http.routers.redirs.entrypoints=web" 18 | - "traefik.http.routers.redirs.middlewares=redirect-to-https" 19 | # **Timeout settings for gRPC** 20 | # - "--entrypoints.websecure.transport.respondingTimeouts.readTimeout=90000s" 21 | # - "--entrypoints.websecure.transport.respondingTimeouts.writeTimeout=90000s" 22 | # - "--entrypoints.websecure.transport.lifeCycle.requestAcceptGraceTimeout=90000s" 23 | ports: 24 | - "80:80" 25 | - "443:443" 26 | restart: always 27 | networks: 28 | - traefik 29 | volumes: 30 | - "./letsencrypt:/letsencrypt" 31 | - "//var/run/docker.sock:/var/run/docker.sock:ro" 32 | mongodb: 33 | image: mongo 34 | restart: always 35 | networks: 36 | - traefik 37 | command: "--bind_ip_all --replSet rs0" 38 | environment: 39 | - MONGO_REPLICA_SET_NAME=rs0 40 | volumes: 41 | - mongodb_data:/data/db 42 | mongosetup: 43 | image: mongo 44 | depends_on: 45 | - mongodb 46 | restart: "no" 47 | networks: 48 | - traefik 49 | command: > 50 | mongosh --host mongodb:27017 --eval 51 | ' 52 | db = (new Mongo("mongodb:27017")).getDB("openflow"); 53 | config = { 54 | "_id" : "rs0", 55 | "members" : [ 56 | { 57 | "_id" : 0, 58 | "host" : "mongodb:27017" 59 | } 60 | ] 61 | }; 62 | rs.initiate(config); 63 | ' 64 | rabbitmq: 65 | image: rabbitmq:3-management 66 | restart: always 67 | networks: 68 | - traefik 69 | api: 70 | labels: 71 | - traefik.enable=true 72 | - traefik.frontend.passHostHeader=true 73 | - traefik.http.routers.http-router.entrypoints=websecure 74 | - traefik.http.routers.http-router.tls.certresolver=myresolver 75 | - traefik.http.routers.http-router.rule=Host(`localhost.openiap.io`) 76 | - traefik.http.routers.http-router.service=http-service 77 | - traefik.http.services.http-service.loadbalancer.server.port=3000 78 | - traefik.http.routers.grpc-router.rule=Host(`grpc.localhost.openiap.io`) 79 | - traefik.http.routers.grpc-router.service=grpc-service 80 | - traefik.http.routers.grpc-router.entrypoints=websecure 81 | - traefik.http.routers.grpc-router.tls.certresolver=myresolver 82 | - traefik.http.services.grpc-service.loadbalancer.server.port=50051 83 | - traefik.http.services.grpc-service.loadbalancer.server.scheme=h2c 84 | image: openiap/openflow 85 | deploy: 86 | replicas: 1 87 | restart: always 88 | networks: 89 | - traefik 90 | volumes: 91 | - "//var/run/docker.sock:/var/run/docker.sock" 92 | depends_on: 93 | - rabbitmq 94 | - mongodb 95 | environment: 96 | - protocol=https 97 | - domain=localhost.openiap.io 98 | 99 | # uncomment below 2 lines, if you have set replicas above 1 100 | # - enable_openflow_amqp=true 101 | # - amqp_prefetch=25 102 | # uncomment to add agents to the same docker compose project ( will breake running docker compose up -d if any agents running ) 103 | # - agent_docker_use_project=true 104 | 105 | - agent_oidc_userinfo_endpoint=http://api:3000/oidc/me 106 | - agent_oidc_issuer=https://localhost.openiap.io/oidc 107 | - agent_oidc_authorization_endpoint=https://localhost.openiap.io/oidc/auth 108 | - agent_oidc_token_endpoint=http://api:3000/oidc/token 109 | - agent_docker_entrypoints=web,websecure 110 | - agent_docker_certresolver=myresolver 111 | 112 | - amqp_url=amqp://guest:guest@rabbitmq?frameMax=0x2000 113 | - mongodb_url=mongodb://mongodb:27017/?replicaSet=rs0 114 | - mongodb_db=openflow 115 | 116 | - aes_secret=O1itlrmA47WzxPj95YHD2sZs7IchYaQI25mQ 117 | volumes: 118 | mongodb_data: 119 | driver: local 120 | networks: 121 | traefik: 122 | name: traefik 123 | -------------------------------------------------------------------------------- /docker-compose-multiple.yml: -------------------------------------------------------------------------------- 1 | services: 2 | traefik: 3 | image: traefik 4 | command: 5 | - "--providers.docker=true" 6 | - "--providers.docker.exposedbydefault=false" 7 | - "--entrypoints.web.address=:80" 8 | # **Timeout settings for gRPC** 9 | # - "--entrypoints.web.transport.respondingTimeouts.readTimeout=90000s" 10 | # - "--entrypoints.web.transport.respondingTimeouts.writeTimeout=90000s" 11 | # - "--entrypoints.web.transport.lifeCycle.requestAcceptGraceTimeout=90000s" 12 | ports: 13 | - "80:80" 14 | restart: always 15 | networks: 16 | - traefik 17 | volumes: 18 | - "//var/run/docker.sock:/var/run/docker.sock:ro" 19 | mongodb1: 20 | image: mongo 21 | restart: always 22 | networks: 23 | - traefik 24 | command: "--bind_ip_all --replSet rs0" 25 | environment: 26 | - MONGO_REPLICA_SET_NAME=rs0 27 | volumes: 28 | - mongodb1_data:/data/db 29 | mongosetup1: 30 | image: mongo 31 | depends_on: 32 | - mongodb1 33 | restart: "no" 34 | networks: 35 | - traefik 36 | command: > 37 | mongosh --host mongodb1:27017 --eval 38 | ' 39 | db = (new Mongo("mongodb1:27017")).getDB("openflow"); 40 | config = { 41 | "_id" : "rs0", 42 | "members" : [ 43 | { 44 | "_id" : 0, 45 | "host" : "mongodb1:27017" 46 | } 47 | ] 48 | }; 49 | rs.initiate(config); 50 | ' 51 | rabbitmq1: 52 | image: rabbitmq 53 | restart: always 54 | networks: 55 | - traefik 56 | api1: 57 | labels: 58 | - traefik.enable=true 59 | - traefik.frontend.passHostHeader=true 60 | - traefik.http.routers.http-router1.entrypoints=web 61 | - traefik.http.routers.http-router1.rule=Host(`localhost.openiap.io`) 62 | - traefik.http.routers.http-router1.service=http-service1 63 | - traefik.http.services.http-service1.loadbalancer.server.port=3000 64 | - traefik.http.routers.grpc-router1.rule=Host(`grpc.localhost.openiap.io`) 65 | - traefik.http.routers.grpc-router1.service=grpc-service1 66 | - traefik.http.routers.grpc-router1.entrypoints=web 67 | - traefik.http.services.grpc-service1.loadbalancer.server.port=50051 68 | - traefik.http.services.grpc-service1.loadbalancer.server.scheme=h2c 69 | image: openiap/openflow 70 | deploy: 71 | replicas: 1 72 | restart: always 73 | networks: 74 | - traefik 75 | volumes: 76 | - "//var/run/docker.sock:/var/run/docker.sock" 77 | depends_on: 78 | - rabbitmq1 79 | - mongodb1 80 | environment: 81 | - domain=localhost.openiap.io 82 | - api_ws_url=ws://localhost.openiap.io 83 | - agent_apiurl=grpc://api1:50051 84 | - agent_grpc_apihost=api1 85 | - agent_ws_apihost=api1 86 | 87 | # uncomment below 2 lines, if you have set replicas above 1 88 | # - enable_openflow_amqp=true 89 | # - amqp_prefetch=25 90 | # uncomment to add agents to the same docker compose project ( will breake running docker compose up -d if any agents running ) 91 | # - agent_docker_use_project=true 92 | 93 | - agent_oidc_userinfo_endpoint=http://api1:3000/oidc/me 94 | - agent_oidc_issuer=http://localhost.openiap.io/oidc 95 | - agent_oidc_authorization_endpoint=http://localhost.openiap.io/oidc/auth 96 | - agent_oidc_token_endpoint=http://api1:3000/oidc/token 97 | 98 | - amqp_url=amqp://guest:guest@rabbitmq1?frameMax=0x2000 99 | - mongodb_url=mongodb://mongodb1:27017/?replicaSet=rs0 100 | - mongodb_db=openflow 101 | 102 | - aes_secret=O1itlrmA47WzxPj95YHD2sZs7IchYaQI25mQ 103 | mongodb2: 104 | image: mongo 105 | restart: always 106 | networks: 107 | - traefik 108 | command: "--bind_ip_all --replSet rs0" 109 | environment: 110 | - MONGO_REPLICA_SET_NAME=rs0 111 | volumes: 112 | - mongodb2_data:/data/db 113 | mongosetup2: 114 | image: mongo 115 | depends_on: 116 | - mongodb2 117 | restart: "no" 118 | networks: 119 | - traefik 120 | command: > 121 | mongosh --host mongodb2:27017 --eval 122 | ' 123 | db = (new Mongo("mongodb2:27017")).getDB("openflow"); 124 | config = { 125 | "_id" : "rs0", 126 | "members" : [ 127 | { 128 | "_id" : 0, 129 | "host" : "mongodb2:27017" 130 | } 131 | ] 132 | }; 133 | rs.initiate(config); 134 | ' 135 | rabbitmq2: 136 | image: rabbitmq 137 | restart: always 138 | networks: 139 | - traefik 140 | api2: 141 | labels: 142 | - traefik.enable=true 143 | - traefik.frontend.passHostHeader=true 144 | - traefik.http.routers.http-router2.entrypoints=web 145 | - traefik.http.routers.http-router2.rule=Host(`localhost`) 146 | - traefik.http.routers.http-router2.service=http-service2 147 | - traefik.http.services.http-service2.loadbalancer.server.port=3000 148 | - traefik.http.routers.grpc-router2.rule=Host(`grpc.localhost`) 149 | - traefik.http.routers.grpc-router2.service=grpc-service2 150 | - traefik.http.routers.grpc-router2.entrypoints=web 151 | - traefik.http.services.grpc-service2.loadbalancer.server.port=50051 152 | - traefik.http.services.grpc-service2.loadbalancer.server.scheme=h2c 153 | image: openiap/openflow 154 | deploy: 155 | replicas: 1 156 | restart: always 157 | networks: 158 | - traefik 159 | volumes: 160 | - "//var/run/docker.sock:/var/run/docker.sock" 161 | depends_on: 162 | - rabbitmq2 163 | - mongodb2 164 | environment: 165 | - domain=localhost 166 | - api_ws_url=ws://localhost 167 | - agent_apiurl=grpc://api2:50051 168 | - agent_grpc_apihost=api2 169 | - agent_ws_apihost=api2 170 | 171 | # uncomment below 2 lines, if you have set replicas above 1 172 | # - enable_openflow_amqp=true 173 | # - amqp_prefetch=25 174 | # uncomment to add agents to the same docker compose project ( will breake running docker compose up -d if any agents running ) 175 | # - agent_docker_use_project=true 176 | 177 | - agent_oidc_userinfo_endpoint=http://api2:3000/oidc/me 178 | - agent_oidc_issuer=http://localhost/oidc 179 | - agent_oidc_authorization_endpoint=http://localhost/oidc/auth 180 | - agent_oidc_token_endpoint=http://api2:3000/oidc/token 181 | 182 | - amqp_url=amqp://guest:guest@rabbitmq2?frameMax=0x2000 183 | - mongodb_url=mongodb://mongodb2:27017/?replicaSet=rs0 184 | - mongodb_db=openflow 185 | 186 | - aes_secret=O1itlrmA47WzxPj95YHD2sZs7IchYaQI25mQ 187 | 188 | 189 | volumes: 190 | mongodb1_data: 191 | driver: local 192 | mongodb2_data: 193 | driver: local 194 | networks: 195 | traefik: 196 | name: traefik 197 | -------------------------------------------------------------------------------- /docker-compose-offline-cache.yml: -------------------------------------------------------------------------------- 1 | services: 2 | # if using prox/remoteurl then open /etc/docker/daemon.json and add the following ( not offline mode ! ) 3 | # { 4 | # "registry-mirrors": ["http://localhost:5001"], 5 | # "insecure-registries" : ["localhost:5000"] 6 | # } 7 | # and then restart docker 8 | # sudo systemctl restart docker 9 | registry: 10 | restart: always 11 | networks: 12 | - traefik 13 | ports: 14 | - 5000:5000 15 | image: registry:2 16 | volumes: # see options https://docs.docker.com/registry/configuration/ 17 | - "./docker-registry-config.yml:/etc/docker/registry/config.yml" 18 | - registry_cache:/var/lib/registry 19 | volumes: 20 | registry_cache: 21 | driver: local 22 | networks: 23 | traefik: 24 | name: traefik 25 | -------------------------------------------------------------------------------- /docker-compose-offline.yml: -------------------------------------------------------------------------------- 1 | services: 2 | traefik: 3 | image: localhost:5000/traefik 4 | command: 5 | - "--providers.docker=true" 6 | - "--providers.docker.exposedbydefault=false" 7 | - "--entrypoints.web.address=:80" 8 | # **Timeout settings for gRPC** 9 | # - "--entrypoints.web.transport.respondingTimeouts.readTimeout=90000s" 10 | # - "--entrypoints.web.transport.respondingTimeouts.writeTimeout=90000s" 11 | # - "--entrypoints.web.transport.lifeCycle.requestAcceptGraceTimeout=90000s" 12 | ports: 13 | - "80:80" 14 | restart: always 15 | networks: 16 | - traefik 17 | volumes: 18 | - "//var/run/docker.sock:/var/run/docker.sock:ro" 19 | mongodb: 20 | image: mongo 21 | restart: always 22 | networks: 23 | - traefik 24 | command: "--bind_ip_all --replSet rs0" 25 | environment: 26 | - MONGO_REPLICA_SET_NAME=rs0 27 | volumes: 28 | - mongodb_data:/data/db 29 | mongosetup: 30 | image: mongo 31 | depends_on: 32 | - mongodb 33 | restart: "no" 34 | networks: 35 | - traefik 36 | command: > 37 | mongosh --host mongodb:27017 --eval 38 | ' 39 | db = (new Mongo("mongodb:27017")).getDB("openflow"); 40 | config = { 41 | "_id" : "rs0", 42 | "members" : [ 43 | { 44 | "_id" : 0, 45 | "host" : "mongodb:27017" 46 | } 47 | ] 48 | }; 49 | rs.initiate(config); 50 | ' 51 | rabbitmq: 52 | image: localhost:5000/rabbitmq:3-management 53 | restart: always 54 | networks: 55 | - traefik 56 | mqtt: 57 | image: localhost:5000/iegomez/mosquitto-go-auth 58 | restart: always 59 | networks: 60 | - traefik 61 | volumes: 62 | - "./mosquitto.conf:/etc/mosquitto/mosquitto.conf" 63 | ports: 64 | - "1883:1883" 65 | verdaccio: 66 | labels: 67 | - "traefik.enable=true" 68 | - "traefik.http.routers.verdaccio.rule=Host(`npm.localhost.openiap.io`)" 69 | - "traefik.http.routers.verdaccio.entrypoints=web" 70 | - "traefik.http.services.verdaccio.loadbalancer.server.port=4873" 71 | image: localhost:5000/verdaccio/verdaccio 72 | restart: always 73 | networks: 74 | - traefik 75 | volumes: 76 | - "verdaccio_storage:/verdaccio/storage" 77 | # - "./offline/verdaccio/config:/verdaccio/conf" 78 | # - "./offline/verdaccio/plugins:/verdaccio/plugins" 79 | environment: 80 | - "VERDACCIO_PORT=4873" 81 | - "VERDACCIO_PROTOCOL=http" 82 | ports: 83 | - "4873:4873" 84 | api: 85 | labels: 86 | - "traefik.enable=true" 87 | - "traefik.http.routers.api.rule=Host(`localhost.openiap.io`)" 88 | - "traefik.http.routers.api.entrypoints=web" 89 | - "traefik.http.services.api.loadbalancer.server.port=3000" 90 | - "traefik.frontend.passHostHeader=true" 91 | image: localhost:5000/openiap/openflow 92 | deploy: 93 | replicas: 1 94 | restart: always 95 | networks: 96 | - traefik 97 | volumes: 98 | - "//var/run/docker.sock:/var/run/docker.sock" 99 | depends_on: 100 | - rabbitmq 101 | - mongodb 102 | - verdaccio 103 | environment: 104 | - domain=localhost.openiap.io 105 | 106 | # uncomment below 2 lines, if you have set replicas above 1 107 | # - enable_openflow_amqp=true 108 | # - amqp_prefetch=25 109 | 110 | 111 | - amqp_url=amqp://guest:guest@rabbitmq?frameMax=0x2000 112 | - mongodb_url=mongodb://mongodb:27017 113 | - mongodb_db=openrpa 114 | 115 | # - agent_oidc_userinfo_endpoint=http://api:3000/oidc/me 116 | # - agent_oidc_issuer=http://localhost.openiap.io/oidc 117 | # - agent_oidc_authorization_endpoint=http://localhost.openiap.io/oidc/auth 118 | # - agent_oidc_token_endpoint=http://api:3000/oidc/token 119 | - 'agent_images=[{"name":"Agent", "image":"localhost:5000/openiap/nodeagent", "languages": ["nodejs", "python"]}, {"name":"Agent+Chromium", "image":"localhost:5000/openiap/nodechromiumagent", "chromium": true, "languages": ["nodejs", "python"]}, {"name":"NodeRED", "image":"localhost:5000/openiap/noderedagent", "port": 3000}, {"name":"DotNet 6", "image":"localhost:5000/openiap/dotnetagent", "languages": ["dotnet"]} ]' 120 | 121 | - aes_secret=O1itlrmA47WzxPj95YHD2sZs7IchYaQI25mQ 122 | volumes: 123 | mongodb_data: 124 | driver: local 125 | verdaccio_storage: 126 | driver: local 127 | networks: 128 | traefik: 129 | name: traefik 130 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | traefik: 3 | image: traefik:v2.10.6 4 | command: 5 | - "--providers.docker=true" 6 | - "--providers.docker.exposedbydefault=false" 7 | - "--entrypoints.web.address=:80" 8 | # **Timeout settings for gRPC** 9 | # - "--entrypoints.web.transport.respondingTimeouts.readTimeout=90000s" 10 | # - "--entrypoints.web.transport.respondingTimeouts.writeTimeout=90000s" 11 | # - "--entrypoints.web.transport.lifeCycle.requestAcceptGraceTimeout=90000s" 12 | ports: 13 | - "80:80" 14 | restart: always 15 | networks: 16 | - traefik 17 | volumes: 18 | - "//var/run/docker.sock:/var/run/docker.sock:ro" 19 | mongodb: 20 | image: mongo 21 | restart: always 22 | command: "--bind_ip_all --replSet rs0" 23 | environment: 24 | - MONGO_REPLICA_SET_NAME=rs0 25 | volumes: 26 | - mongodb_data:/data/db 27 | networks: 28 | - traefik 29 | mongosetup: 30 | image: mongo 31 | depends_on: 32 | - mongodb 33 | restart: "no" 34 | command: > 35 | mongosh --host mongodb:27017 --eval 36 | ' 37 | db = (new Mongo("mongodb:27017")).getDB("openflow"); 38 | config = { 39 | "_id" : "rs0", 40 | "members" : [ 41 | { 42 | "_id" : 0, 43 | "host" : "mongodb:27017" 44 | } 45 | ] 46 | }; 47 | rs.initiate(config); 48 | ' 49 | networks: 50 | - traefik 51 | rabbitmq: 52 | image: rabbitmq 53 | restart: always 54 | networks: 55 | - traefik 56 | api: 57 | labels: 58 | - traefik.enable=true 59 | - traefik.frontend.passHostHeader=true 60 | - traefik.http.routers.http-router.entrypoints=web 61 | - traefik.http.routers.http-router.rule=Host(`localhost.openiap.io`) 62 | - traefik.http.routers.http-router.service=http-service 63 | - traefik.http.services.http-service.loadbalancer.server.port=3000 64 | - traefik.http.routers.grpc-router.rule=Host(`grpc.localhost.openiap.io`) 65 | - traefik.http.routers.grpc-router.service=grpc-service 66 | - traefik.http.routers.grpc-router.entrypoints=web 67 | - traefik.http.services.grpc-service.loadbalancer.server.port=50051 68 | - traefik.http.services.grpc-service.loadbalancer.server.scheme=h2c 69 | image: openiap/openflow 70 | networks: 71 | - traefik 72 | ports: 73 | - "5858:5858" 74 | deploy: 75 | replicas: 1 76 | restart: always 77 | volumes: 78 | - "//var/run/docker.sock:/var/run/docker.sock" 79 | depends_on: 80 | - rabbitmq 81 | - mongodb 82 | environment: 83 | - domain=localhost.openiap.io 84 | 85 | # uncomment below 2 lines, if you have set replicas above 1 86 | # - enable_openflow_amqp=true 87 | # - amqp_prefetch=25 88 | # uncomment to add agents to the same docker compose project ( will breake running docker compose up -d if any agents running ) 89 | # - agent_docker_use_project=true 90 | 91 | - agent_oidc_userinfo_endpoint=http://api:3000/oidc/me 92 | - agent_oidc_issuer=http://localhost.openiap.io/oidc 93 | - agent_oidc_authorization_endpoint=http://localhost.openiap.io/oidc/auth 94 | - agent_oidc_token_endpoint=http://api:3000/oidc/token 95 | 96 | - amqp_url=amqp://guest:guest@rabbitmq?frameMax=0x2000 97 | - mongodb_url=mongodb://mongodb:27017/?replicaSet=rs0 98 | - mongodb_db=openflow 99 | 100 | - aes_secret=O1itlrmA47WzxPj95YHD2sZs7IchYaQI25mQ 101 | volumes: 102 | mongodb_data: 103 | driver: local 104 | networks: 105 | traefik: 106 | name: traefik 107 | -------------------------------------------------------------------------------- /docker-registry-config.yml: -------------------------------------------------------------------------------- 1 | version: 0.1 2 | log: 3 | fields: 4 | service: registry 5 | storage: 6 | cache: 7 | blobdescriptor: inmemory 8 | filesystem: 9 | rootdirectory: /var/lib/registry 10 | http: 11 | addr: :5000 12 | headers: 13 | X-Content-Type-Options: [nosniff] 14 | health: 15 | storagedriver: 16 | enabled: true 17 | interval: 10s 18 | threshold: 3 19 | # proxy: 20 | # remoteurl: https://registry-1.docker.io 21 | delete: 22 | enabled: false 23 | -------------------------------------------------------------------------------- /ee-down.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | docker compose -f docker-compose-ee.yml -p demo down --remove-orphans -------------------------------------------------------------------------------- /ee-down.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose-ee.yml -p demo down --remove-orphans -------------------------------------------------------------------------------- /ee-pull.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | docker compose -f docker-compose-ee.yml -p demo pull -------------------------------------------------------------------------------- /ee-pull.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose-ee.yml -p demo pull -------------------------------------------------------------------------------- /ee-up.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | docker compose -f docker-compose-ee.yml -p demo up -d -------------------------------------------------------------------------------- /ee-up.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose-ee.yml -p demo up -d -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/open-rpa/docker/54f8ef9ef940e6956a8f50f27a7fe50842e022a9/favicon.ico -------------------------------------------------------------------------------- /letsencrypt-down.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | docker compose -f docker-compose-letsencrypt.yml -p demo down --remove-orphans -------------------------------------------------------------------------------- /letsencrypt-down.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose-letsencrypt.yml -p demo down --remove-orphans -------------------------------------------------------------------------------- /letsencrypt-pull.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | docker compose -f docker-compose-letsencrypt.yml -p demo pull -------------------------------------------------------------------------------- /letsencrypt-pull.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose-letsencrypt.yml -p demo pull -------------------------------------------------------------------------------- /letsencrypt-up.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | docker compose -f docker-compose-letsencrypt.yml -p demo up -d 3 | docker pull openiap/noderedagent:latest 4 | docker pull openiap/nodeagent:latest -------------------------------------------------------------------------------- /letsencrypt-up.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose-letsencrypt.yml -p demo up -d 3 | docker pull openiap/noderedagent:latest 4 | docker pull openiap/nodeagent:latest -------------------------------------------------------------------------------- /mosquitto.conf: -------------------------------------------------------------------------------- 1 | per_listener_settings false 2 | allow_anonymous false 3 | 4 | listener 1883 0.0.0.0 5 | 6 | auth_plugin /mosquitto/go-auth.so 7 | auth_opt_backends http 8 | auth_opt_hasher bcrypt 9 | auth_opt_cache true 10 | auth_opt_auth_cache_seconds 30 11 | auth_opt_acl_cache_seconds 90 12 | auth_opt_auth_jitter_second 3 13 | auth_opt_acl_jitter_seconds 5 14 | 15 | auth_opt_http_host services 16 | auth_opt_http_port 3000 17 | auth_opt_http_getuser_uri /auth/client 18 | auth_opt_http_aclcheck_uri /auth/acl -------------------------------------------------------------------------------- /multiple-down.bat: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose.yml -p demo down --remove-orphans -------------------------------------------------------------------------------- /multiple-down.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose-multiple.yml -p demo down --remove-orphans -------------------------------------------------------------------------------- /multiple-pull.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | docker compose -f docker-compose-multiple.yml -p demo pull -------------------------------------------------------------------------------- /multiple-pull.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose-multiple.yml -p demo pull -------------------------------------------------------------------------------- /multiple-up.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | docker compose -f docker-compose-multiple.yml -p demo up -d 3 | docker pull openiap/noderedagent:latest 4 | docker pull openiap/nodeagent:latest -------------------------------------------------------------------------------- /multiple-up.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose-multiple.yml -p demo up -d 3 | docker pull openiap/noderedagent:latest 4 | docker pull openiap/nodeagent:latest -------------------------------------------------------------------------------- /normal-down.bat: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose.yml -p demo down --remove-orphans -------------------------------------------------------------------------------- /normal-down.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose.yml -p demo down --remove-orphans -------------------------------------------------------------------------------- /normal-logs.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | docker compose -f docker-compose.yml -p demo logs -f 3 | -------------------------------------------------------------------------------- /normal-logs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose.yml -p demo logs -f -------------------------------------------------------------------------------- /normal-pull.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | docker compose -f docker-compose.yml -p demo pull -------------------------------------------------------------------------------- /normal-pull.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose.yml -p demo pull -------------------------------------------------------------------------------- /normal-up.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | docker compose -f docker-compose.yml -p demo up -d 3 | docker pull openiap/noderedagent:latest 4 | docker pull openiap/nodeagent:latest -------------------------------------------------------------------------------- /normal-up.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose.yml -p demo up -d 3 | docker pull openiap/noderedagent:latest 4 | docker pull openiap/nodeagent:latest -------------------------------------------------------------------------------- /offline-down.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | docker compose -f docker-compose-offline.yml -p demo down --remove-orphans 3 | rem echo "press enter to also delete cache" 4 | rem echo "If you do this, you will need to run offline-pull.bat to reseed the image cache" 5 | rem docker compose -f docker-compose-offline-cache.yml -p cache down --remove-orphans 6 | rem pause -------------------------------------------------------------------------------- /offline-down.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose-offline.yml -p demo down --remove-orphans 3 | # echo "press enter to also delete cache" 4 | # echo "If you do this, you will need to run offline-pull.bat to reseed the image cache" 5 | # docker compose -f docker-compose-offline-cache.yml -p cache down --remove-orphans 6 | -------------------------------------------------------------------------------- /offline-pull.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | if not exist "offline" mkdir offline 3 | docker compose -f docker-compose-offline-cache.yml -p cache up -d 4 | pause 5 | docker pull mongo 6 | docker image tag mongo:latest localhost:5000/mongo:latest 7 | docker image push localhost:5000/mongo:latest 8 | 9 | docker pull traefik 10 | docker image tag traefik:latest localhost:5000/traefik:latest 11 | docker image push localhost:5000/traefik:latest 12 | 13 | docker pull rabbitmq:3-management 14 | docker image tag rabbitmq:3-management localhost:5000/rabbitmq:3-management 15 | docker image push localhost:5000/rabbitmq:3-management 16 | 17 | docker pull verdaccio/verdaccio 18 | docker image tag verdaccio/verdaccio:latest localhost:5000/verdaccio/verdaccio 19 | docker image push localhost:5000/verdaccio/verdaccio 20 | 21 | docker pull iegomez/mosquitto-go-auth 22 | docker image tag iegomez/mosquitto-go-auth:latest localhost:5000/iegomez/mosquitto-go-auth 23 | docker image push localhost:5000/iegomez/mosquitto-go-auth 24 | 25 | docker pull otel/opentelemetry-collector 26 | docker image tag otel/opentelemetry-collector:latest localhost:5000/otel/opentelemetry-collector:latest 27 | docker image push localhost:5000/otel/opentelemetry-collector:latest 28 | 29 | docker pull victoriametrics/victoria-metrics 30 | docker image tag victoriametrics/victoria-metrics:latest localhost:5000/victoriametrics/victoria-metrics:latest 31 | docker image push localhost:5000/victoriametrics/victoria-metrics:latest 32 | 33 | docker pull openiap/grafana 34 | docker image tag openiap/grafana:latest localhost:5000/openiap/grafana:latest 35 | docker image push localhost:5000/openiap/grafana:latest 36 | 37 | docker pull openiap/openflow:latest 38 | docker image tag openiap/openflow:latest localhost:5000/openiap/openflow:latest 39 | docker image push localhost:5000/openiap/openflow:latest 40 | 41 | docker pull openiap/nodeagent:latest 42 | docker image tag openiap/nodeagent:latest localhost:5000/openiap/nodeagent:latest 43 | docker image push localhost:5000/openiap/nodeagent:latest 44 | 45 | docker pull openiap/nodechromiumagent:latest 46 | docker image tag openiap/nodechromiumagent:latest localhost:5000/openiap/nodechromiumagent:latest 47 | docker image push localhost:5000/openiap/nodechromiumagent:latest 48 | 49 | docker pull openiap/noderedagent:latest 50 | docker image tag openiap/noderedagent:latest localhost:5000/openiap/noderedagent:latest 51 | docker image push localhost:5000/openiap/noderedagent:latest 52 | 53 | docker pull openiap/dotnetagent:latest 54 | docker image tag openiap/dotnetagent:latest localhost:5000/openiap/dotnetagent:latest 55 | docker image push localhost:5000/openiap/dotnetagent:latest 56 | -------------------------------------------------------------------------------- /offline-pull.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | mkdir -p offline 3 | docker compose -f docker-compose-offline-cache.yml -p cache up -d 4 | pause 5 | docker pull mongo 6 | docker image tag mongo:latest localhost:5000/mongo:latest 7 | docker image push localhost:5000/mongo:latest 8 | 9 | docker pull traefik 10 | docker image tag traefik:latest localhost:5000/traefik:latest 11 | docker image push localhost:5000/traefik:latest 12 | 13 | docker pull rabbitmq:3-management 14 | docker image tag rabbitmq:3-management localhost:5000/rabbitmq:3-management 15 | docker image push localhost:5000/rabbitmq:3-management 16 | 17 | docker pull verdaccio/verdaccio 18 | docker image tag verdaccio/verdaccio:latest localhost:5000/verdaccio/verdaccio 19 | docker image push localhost:5000/verdaccio/verdaccio 20 | 21 | docker pull iegomez/mosquitto-go-auth 22 | docker image tag iegomez/mosquitto-go-auth:latest localhost:5000/iegomez/mosquitto-go-auth 23 | docker image push localhost:5000/iegomez/mosquitto-go-auth 24 | 25 | docker pull otel/opentelemetry-collector 26 | docker image tag otel/opentelemetry-collector:latest localhost:5000/otel/opentelemetry-collector:latest 27 | docker image push localhost:5000/otel/opentelemetry-collector:latest 28 | 29 | docker pull victoriametrics/victoria-metrics 30 | docker image tag victoriametrics/victoria-metrics:latest localhost:5000/victoriametrics/victoria-metrics:latest 31 | docker image push localhost:5000/victoriametrics/victoria-metrics:latest 32 | 33 | docker pull openiap/grafana 34 | docker image tag openiap/grafana:latest localhost:5000/openiap/grafana:latest 35 | docker image push localhost:5000/openiap/grafana:latest 36 | 37 | docker pull openiap/openflow:latest 38 | docker image tag openiap/openflow:latest localhost:5000/openiap/openflow:latest 39 | docker image push localhost:5000/openiap/openflow:latest 40 | 41 | docker pull openiap/nodeagent:latest 42 | docker image tag openiap/nodeagent:latest localhost:5000/openiap/nodeagent:latest 43 | docker image push localhost:5000/openiap/nodeagent:latest 44 | 45 | docker pull openiap/nodechromiumagent:latest 46 | docker image tag openiap/nodechromiumagent:latest localhost:5000/openiap/nodechromiumagent:latest 47 | docker image push localhost:5000/openiap/nodechromiumagent:latest 48 | 49 | docker pull openiap/noderedagent:latest 50 | docker image tag openiap/noderedagent:latest localhost:5000/openiap/noderedagent:latest 51 | docker image push localhost:5000/openiap/noderedagent:latest 52 | 53 | docker pull openiap/dotnetagent:latest 54 | docker image tag openiap/dotnetagent:latest localhost:5000/openiap/dotnetagent:latest 55 | docker image push localhost:5000/openiap/dotnetagent:latest 56 | -------------------------------------------------------------------------------- /offline-up.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | docker compose -f docker-compose-offline.yml -p demo up -d 3 | docker pull openiap/noderedagent:latest 4 | docker pull openiap/nodeagent:latest -------------------------------------------------------------------------------- /offline-up.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker compose -f docker-compose-offline.yml -p demo up -d 3 | docker pull openiap/noderedagent:latest 4 | docker pull openiap/nodeagent:latest -------------------------------------------------------------------------------- /otel-collector-config.yaml: -------------------------------------------------------------------------------- 1 | receivers: 2 | otlp: 3 | protocols: 4 | grpc: 5 | endpoint: "0.0.0.0:4317" 6 | http: 7 | endpoint: "0.0.0.0:4318" 8 | processors: 9 | batch: 10 | extensions: 11 | health_check: {} 12 | zpages: {} 13 | exporters: 14 | prometheusremotewrite: 15 | endpoint: "http://victoriametrics:8428/api/v1/write" 16 | service: 17 | extensions: [health_check, zpages] 18 | pipelines: 19 | metrics: 20 | receivers: 21 | - otlp 22 | exporters: 23 | - prometheusremotewrite 24 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Docker Compose 2 | 3 | ### Getting started 4 | 5 | To quickly get started with your own installation you can use one of these docker compose files. 6 | 7 | open a shell and cd to that folder you want save the files to, and type 8 | 9 | ``` 10 | git clone https://github.com/open-rpa/docker.git 11 | cd docker 12 | ``` 13 | 14 | For almost everyone, you will want to start with docker-compose.yml, you do that by call normal-up. 15 | on windows 16 | ``` 17 | normal-up.bat 18 | ``` 19 | or linux/macos 20 | ``` 21 | ./normal-up.sh 22 | ``` 23 | 24 | for more information read more at [docker dokumentation](https://docs.openiap.io/docs/flow/DockerCompose.html). 25 | 26 | -------------------------------------------------------------------------------- /remove-data.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | docker volume rm demo_grafana_data 3 | docker volume rm demo_mongodb_data 4 | docker volume rm demo_mongodb1_data 5 | docker volume rm demo_mongodb2_data 6 | docker volume rm demo_victoriametrics_data 7 | rem from offline example 8 | docker volume rm demo_verdaccio_storage 9 | docker volume rm cache_registry_cache 10 | -------------------------------------------------------------------------------- /remove-data.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker volume rm demo_grafana_data 3 | docker volume rm demo_mongodb_data 4 | docker volume rm demo_mongodb1_data 5 | docker volume rm demo_mongodb2_data 6 | docker volume rm demo_victoriametrics_data 7 | # from offline example 8 | docker volume rm demo_verdaccio_storage 9 | docker volume rm cache_registry_cache 10 | -------------------------------------------------------------------------------- /services.flows.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "ee0eca6c355d65e1", 4 | "type": "tab", 5 | "label": "Flow 1", 6 | "disabled": false, 7 | "info": "", 8 | "env": [] 9 | }, 10 | { 11 | "id": "98cbcdab.ea01e", 12 | "type": "http in", 13 | "z": "ee0eca6c355d65e1", 14 | "name": "", 15 | "url": "/catalogue.json", 16 | "method": "get", 17 | "upload": false, 18 | "swaggerDoc": "", 19 | "x": 250, 20 | "y": 320, 21 | "wires": [ 22 | [ 23 | "04b439086a1443f3" 24 | ] 25 | ] 26 | }, 27 | { 28 | "id": "71ce9e13.e83c1", 29 | "type": "http response", 30 | "z": "ee0eca6c355d65e1", 31 | "name": "", 32 | "statusCode": "", 33 | "headers": {}, 34 | "x": 570, 35 | "y": 320, 36 | "wires": [] 37 | }, 38 | { 39 | "id": "9cb99eeb.dcb9f", 40 | "type": "debug", 41 | "z": "ee0eca6c355d65e1", 42 | "name": "", 43 | "active": true, 44 | "tosidebar": true, 45 | "console": false, 46 | "tostatus": false, 47 | "complete": "payload", 48 | "targetType": "msg", 49 | "statusVal": "", 50 | "statusType": "auto", 51 | "x": 590, 52 | "y": 280, 53 | "wires": [] 54 | }, 55 | { 56 | "id": "edfc6001.28306", 57 | "type": "function", 58 | "z": "ee0eca6c355d65e1", 59 | "name": "", 60 | "func": "var dt = new Date();\nmsg.payload = {\n \"name\":\"OpenFlow catalogue\",\n \"updated_at\": dt.toISOString(),\n \"modules\": [\n {\n \"id\": \"node-red-contrib-catalogue\",\n \"version\": \"0.0.2\",\n \"description\": \"Generate nodered catalogue\",\n \"keywords\": [\n \"node-red\"\n ],\n \"updated_at\": dt.toISOString(),\n \"url\": \"https://www.npmjs.com/package/node-red-contrib-http-request-statusmessage\"\n },\n {\n \"id\": \"node-red-contrib-image-output\",\n \"version\": \"0.6.3\",\n \"description\": \"Add statusMessage to http request node\",\n \"keywords\": [\n \"node-red\"\n ],\n \"updated_at\": dt.toISOString(),\n \"url\": \"https://www.npmjs.com/package/node-red-contrib-image-output\"\n }\n ]\n}\n\nreturn msg;", 61 | "outputs": 1, 62 | "noerr": 0, 63 | "initialize": "", 64 | "finalize": "", 65 | "libs": [], 66 | "x": 420, 67 | "y": 280, 68 | "wires": [ 69 | [] 70 | ] 71 | }, 72 | { 73 | "id": "e2b23928.0d4c68", 74 | "type": "comment", 75 | "z": "ee0eca6c355d65e1", 76 | "name": "Static Nodered Catalogue", 77 | "info": "", 78 | "x": 270, 79 | "y": 240, 80 | "wires": [] 81 | }, 82 | { 83 | "id": "e759dee6820ccd53", 84 | "type": "http in", 85 | "z": "ee0eca6c355d65e1", 86 | "name": "", 87 | "url": "/auth/acl", 88 | "method": "post", 89 | "upload": false, 90 | "swaggerDoc": "", 91 | "x": 240, 92 | "y": 180, 93 | "wires": [ 94 | [ 95 | "97cecac8f9c5b903", 96 | "7be08dd9bb7888f4" 97 | ] 98 | ] 99 | }, 100 | { 101 | "id": "16b964691656c1ac", 102 | "type": "http in", 103 | "z": "ee0eca6c355d65e1", 104 | "name": "", 105 | "url": "/auth/client", 106 | "method": "post", 107 | "upload": false, 108 | "swaggerDoc": "", 109 | "x": 240, 110 | "y": 140, 111 | "wires": [ 112 | [ 113 | "97cecac8f9c5b903", 114 | "7be08dd9bb7888f4" 115 | ] 116 | ] 117 | }, 118 | { 119 | "id": "97cecac8f9c5b903", 120 | "type": "debug", 121 | "z": "ee0eca6c355d65e1", 122 | "name": "", 123 | "active": true, 124 | "tosidebar": true, 125 | "console": false, 126 | "tostatus": false, 127 | "complete": "payload", 128 | "targetType": "msg", 129 | "statusVal": "", 130 | "statusType": "auto", 131 | "x": 490, 132 | "y": 180, 133 | "wires": [] 134 | }, 135 | { 136 | "id": "7be08dd9bb7888f4", 137 | "type": "http response", 138 | "z": "ee0eca6c355d65e1", 139 | "name": "", 140 | "statusCode": "", 141 | "headers": {}, 142 | "x": 470, 143 | "y": 140, 144 | "wires": [] 145 | }, 146 | { 147 | "id": "2565fda0a0cfd898", 148 | "type": "mqtt in", 149 | "z": "ee0eca6c355d65e1", 150 | "name": "", 151 | "topic": "#", 152 | "qos": "2", 153 | "datatype": "auto-detect", 154 | "broker": "84532dabfc025b3e", 155 | "nl": false, 156 | "rap": true, 157 | "rh": 0, 158 | "inputs": 0, 159 | "x": 230, 160 | "y": 440, 161 | "wires": [ 162 | [ 163 | "4f72e72982631350" 164 | ] 165 | ] 166 | }, 167 | { 168 | "id": "b05f53e92c32737d", 169 | "type": "mqtt out", 170 | "z": "ee0eca6c355d65e1", 171 | "name": "", 172 | "topic": "blahblah", 173 | "qos": "", 174 | "retain": "", 175 | "respTopic": "", 176 | "contentType": "", 177 | "userProps": "", 178 | "correl": "", 179 | "expiry": "", 180 | "broker": "84532dabfc025b3e", 181 | "x": 440, 182 | "y": 500, 183 | "wires": [] 184 | }, 185 | { 186 | "id": "b3a79c8a793ce5d0", 187 | "type": "inject", 188 | "z": "ee0eca6c355d65e1", 189 | "name": "", 190 | "props": [ 191 | { 192 | "p": "payload" 193 | }, 194 | { 195 | "p": "topic", 196 | "vt": "str" 197 | } 198 | ], 199 | "repeat": "", 200 | "crontab": "", 201 | "once": false, 202 | "onceDelay": 0.1, 203 | "topic": "", 204 | "payload": "", 205 | "payloadType": "date", 206 | "x": 240, 207 | "y": 500, 208 | "wires": [ 209 | [ 210 | "b05f53e92c32737d" 211 | ] 212 | ] 213 | }, 214 | { 215 | "id": "4f72e72982631350", 216 | "type": "debug", 217 | "z": "ee0eca6c355d65e1", 218 | "name": "", 219 | "active": true, 220 | "tosidebar": true, 221 | "console": false, 222 | "tostatus": true, 223 | "complete": "payload", 224 | "targetType": "msg", 225 | "statusVal": "topic", 226 | "statusType": "msg", 227 | "x": 450, 228 | "y": 440, 229 | "wires": [] 230 | }, 231 | { 232 | "id": "7e1673ade07de933", 233 | "type": "comment", 234 | "z": "ee0eca6c355d65e1", 235 | "name": "MQTT broker auth", 236 | "info": "", 237 | "x": 250, 238 | "y": 100, 239 | "wires": [] 240 | }, 241 | { 242 | "id": "86a5bafc762b91d7", 243 | "type": "comment", 244 | "z": "ee0eca6c355d65e1", 245 | "name": "Test MQTT broker", 246 | "info": "", 247 | "x": 250, 248 | "y": 380, 249 | "wires": [] 250 | }, 251 | { 252 | "id": "dfdfce02364823bf", 253 | "type": "inject", 254 | "z": "ee0eca6c355d65e1", 255 | "name": "", 256 | "props": [ 257 | { 258 | "p": "payload" 259 | }, 260 | { 261 | "p": "topic", 262 | "vt": "str" 263 | } 264 | ], 265 | "repeat": "", 266 | "crontab": "", 267 | "once": false, 268 | "onceDelay": 0.1, 269 | "topic": "", 270 | "payload": "", 271 | "payloadType": "date", 272 | "x": 240, 273 | "y": 620, 274 | "wires": [ 275 | [ 276 | "de51c56a896d3638" 277 | ] 278 | ] 279 | }, 280 | { 281 | "id": "b5eeb31a812f3fa8", 282 | "type": "comment", 283 | "z": "ee0eca6c355d65e1", 284 | "name": "Configure NodeRED", 285 | "info": "", 286 | "x": 250, 287 | "y": 580, 288 | "wires": [] 289 | }, 290 | { 291 | "id": "de51c56a896d3638", 292 | "type": "function", 293 | "z": "ee0eca6c355d65e1", 294 | "name": "", 295 | "func": "var dt = new Date();\nmsg.payload = {\n \"_id\": \"6368b921ba81c6e80a0907f5\",\n \"_type\": \"npmrc\",\n \"_acl\": [\n {\n \"rights\": 65535,\n \"_id\": \"5a1702fa245d9013697656fb\",\n \"name\": \"admins\"\n },\n {\n \"rights\": 65506,\n \"_id\": \"5a17f157c4815318c8536c21\",\n \"name\": \"users\"\n }\n ],\n \"catalogues\": [\n ],\n \"content\": \"registry=http://verdaccio:4873\",\n \"name\": \"npmrc for all\"\n}\nmsg.payload.catalogues.push(\"http://services.localhost.openiap.io/catalogue.json\");\n// msg.payload.catalogues.push(\"https://catalogue.nodered.org/catalogue.json\");\nreturn msg;", 296 | "outputs": 1, 297 | "noerr": 0, 298 | "initialize": "", 299 | "finalize": "", 300 | "libs": [], 301 | "x": 380, 302 | "y": 620, 303 | "wires": [ 304 | [ 305 | "a8adbf5ede48208a" 306 | ] 307 | ] 308 | }, 309 | { 310 | "id": "a8adbf5ede48208a", 311 | "type": "api addorupdate", 312 | "z": "ee0eca6c355d65e1", 313 | "name": "", 314 | "writeconcern": "0", 315 | "journal": "false", 316 | "entitytype": "", 317 | "entitytypetype": "str", 318 | "collection": "nodered", 319 | "collectiontype": "str", 320 | "entities": "payload", 321 | "entitiestype": "msg", 322 | "uniqeness": "", 323 | "uniqenesstype": "str", 324 | "resultfield": "", 325 | "inputfield": "", 326 | "x": 560, 327 | "y": 620, 328 | "wires": [ 329 | [] 330 | ] 331 | }, 332 | { 333 | "id": "04b439086a1443f3", 334 | "type": "catalogue catalogue", 335 | "z": "ee0eca6c355d65e1", 336 | "registry": "http://verdaccio:4873", 337 | "registrytype": "str", 338 | "update": "update", 339 | "updatetype": "msg", 340 | "name": "", 341 | "x": 420, 342 | "y": 320, 343 | "wires": [ 344 | [ 345 | "71ce9e13.e83c1", 346 | "9cb99eeb.dcb9f" 347 | ] 348 | ] 349 | }, 350 | { 351 | "id": "02554ba493c719e6", 352 | "type": "inject", 353 | "z": "ee0eca6c355d65e1", 354 | "name": "update", 355 | "props": [ 356 | { 357 | "p": "payload" 358 | }, 359 | { 360 | "p": "update", 361 | "v": "true", 362 | "vt": "bool" 363 | } 364 | ], 365 | "repeat": "", 366 | "crontab": "", 367 | "once": false, 368 | "onceDelay": 0.1, 369 | "topic": "", 370 | "payload": "", 371 | "payloadType": "date", 372 | "x": 230, 373 | "y": 280, 374 | "wires": [ 375 | [ 376 | "04b439086a1443f3" 377 | ] 378 | ] 379 | }, 380 | { 381 | "id": "84532dabfc025b3e", 382 | "type": "mqtt-broker", 383 | "name": "", 384 | "broker": "mqtt", 385 | "port": "1883", 386 | "clientid": "", 387 | "autoConnect": true, 388 | "usetls": false, 389 | "protocolVersion": "4", 390 | "keepalive": "60", 391 | "cleansession": true, 392 | "birthTopic": "", 393 | "birthQos": "0", 394 | "birthPayload": "", 395 | "birthMsg": {}, 396 | "closeTopic": "", 397 | "closeQos": "0", 398 | "closePayload": "", 399 | "closeMsg": {}, 400 | "willTopic": "", 401 | "willQos": "0", 402 | "willPayload": "", 403 | "willMsg": {}, 404 | "userProps": "", 405 | "sessionExpiry": "" 406 | } 407 | ] --------------------------------------------------------------------------------