From b1f897191cda9d0a1863c7605fda3e18d17ef0ef Mon Sep 17 00:00:00 2001 From: orianelou <126462046+orianelou@users.noreply.github.com> Date: Wed, 6 Nov 2024 14:01:20 +0200 Subject: [PATCH] Create docker-compose.yaml --- .../nginx-docker-compose/docker-compose.yaml | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 deployment/nginx-docker-compose/docker-compose.yaml diff --git a/deployment/nginx-docker-compose/docker-compose.yaml b/deployment/nginx-docker-compose/docker-compose.yaml new file mode 100644 index 0000000..e28a600 --- /dev/null +++ b/deployment/nginx-docker-compose/docker-compose.yaml @@ -0,0 +1,117 @@ +version: "2" +services: + appsec-agent: + image: ghcr.io/openappsec/agent:${APPSEC_VERSION} + container_name: appsec-agent + environment: + - SHARED_STORAGE_HOST=appsec-shared-storage + - LEARNING_HOST=appsec-smartsync + - TUNING_HOST=appsec-tuning-svc + - https_proxy=${APPSEC_HTTPS_PROXY} + - user_email=${USER_EMAIL} + - AGENT_TOKEN=${APPSEC_AGENT_TOKEN} + - autoPolicyLoad=${APPSEC_AUTO_POLICY_LOAD} + ipc: shareable + volumes: + - ${APPSEC_CONFIG}:/etc/cp/conf + - ${APPSEC_DATA}:/etc/cp/data + - ${APPSEC_LOGS}:/var/log/nano_agent + - ${APPSEC_LOCALCONFIG}:/ext/appsec + command: /cp-nano-agent + appsec-nginx: + image: ghcr.io/openappsec/nginx-attachment:${APPSEC_VERSION} + container_name: appsec-nginx + ipc: service:appsec-agent +## when mounting own external nginx config uncomment the two lines below, place the config in {NGINX_CONF_DIR} +# volumes: +# - ${NGINX_CONF_DIR}:/etc/nginx/conf.d + +## advanced configuration - volume mount for nginx.conf file: +## to change global instructions it's possible to also mount your own nginx.conf file by uncommenting the two lines below +## make sure to include the line starting with "load_module" which loads the appsec attachment +## and is included in /etc/nginx/conf.d/nginx.conf file as part of the nginx-attachment container +## make sure to only have one "volumes:" key +# volumes: +# - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf + ports: + - "80:80" + - "443:443" + appsec-smartsync: + profiles: + - standalone + image: ghcr.io/openappsec/smartsync:${APPSEC_VERSION} + container_name: appsec-smartsync + environment: + - SHARED_STORAGE_HOST=appsec-shared-storage + depends_on: + - appsec-shared-storage + appsec-shared-storage: + profiles: + - standalone + image: ghcr.io/openappsec/smartsync-shared-files:${APPSEC_VERSION} + container_name: appsec-shared-storage + ipc: service:appsec-agent + ## if you do not want to run this container as "root" user you can comment it out and instead run the below command after the deployment + ## docker exec -u root appsec-shared-storage chown -R appuser:appuser /db + user: root + volumes: + - ${SMART_SYNC_STORAGE}:/db:z +## instead of using local storage for local learning (see line above) +## you can also configure central nfs storage by configuring nfs volume (uncomment the relevant section at end of this file) +## use a shared nfs storage which is recommended in redundant deployments (uncomment line below, comment out the line above) +# - learning_nfs:/db:z + appsec-tuning-svc: + profiles: + - standalone + image: ghcr.io/openappsec/smartsync-tuning:${APPSEC_VERSION} + container_name: appsec-tuning-svc + environment: + - SHARED_STORAGE_HOST=appsec-shared-storage + - QUERY_DB_PASSWORD=${DB_PASSWORD} + - QUERY_DB_HOST=${DB_HOST} + - QUERY_DB_USER=${DB_USER} +## only relevant when deploying own DB +# - SSLMODE: + volumes: + - ${APPSEC_CONFIG}:/etc/cp/conf + depends_on: + - appsec-shared-storage + - appsec-db + appsec-db: + profiles: + - standalone + image: postgres + container_name: appsec-db + restart: always + environment: + - POSTGRES_PASSWORD=${DB_PASSWORD} + - POSTGRES_USER=${DB_USER} + volumes: + - ${POSTGRES_STORAGE}:/var/lib/postgresql/data + +## example juice-shop backend container (vulnerable webserver, USE ONLY FOR TESTING AND IN LAB ENV) +## +## uncomment this block for testing purposes only, make sure to also adjust the nginx.conf file +## to include a proxy_pass directive forwarding external traffic on e.g. port 80 to the juiceshop-backend container +## you can use the example file available here: +## https://github.com/openappsec/openappsec/blob/main/examples/juiceshop/default.conf +## place the file above in {NGINX_CONF_DIR} and uncomment the two lines for creating a volume mount +## in the appsec-nginx service definition +## note that juiceshop container listens on HTTP port 3000 by default +# +# juiceshop-backend: +# image: bkimminich/juice-shop:latest +# container_name: juiceshop-backend + + +## advanced configuration: learning_nfs volume for nfs storage in shared_storage container +## +## when configuring nfs storage in shared_storage container configuration above, make sure to also specify learning_nfs volume (see example below for using AWS EFS storage) +# +# volumes: +# learning_nfs: +# driver: local +# driver_opts: +# type: nfs +# o: addr=fs-abcdef.efs.eu-west-1.amazonaws.com,rw,nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport +# device: ":/"