diff --git a/roles/evm/blockscout/defaults/main.yml b/roles/evm/blockscout/defaults/main.yml index 8a0718b..3108355 100644 --- a/roles/evm/blockscout/defaults/main.yml +++ b/roles/evm/blockscout/defaults/main.yml @@ -9,6 +9,7 @@ blockscout_auto_restart: true # Configuration directories blockscout_conf_dir: /etc/blockscout/conf blockscout_custom_dir: "{{ blockscout_conf_dir }}/custom" +blockscout_assets_dir: "{{ blockscout_custom_dir }}/shared" # Log directory blockscout_log_dir: /var/log/blockscout @@ -22,7 +23,23 @@ blockscout_user: root # Blockscout variables blockscout_rpc: http://10.238.106.22:9650/ext/bc/RfX8YRUHePxFENBZFwaNt1tP6CR6RQ4hJJ5AqYv49LRoSKniK/rpc blockscout_header_logo_file: ash-logo-circle-30.svg -blockscout_frontend_ip: 10.238.106.149 + +# Frontend +blockscout_frontend_ip: "10.238.106.149" +blockscout_frontend_protocol: http +blockscout_frontend_websocket_protocol: ws +blockscout_frontend_host_name: "{{ blockscout_frontend_ip }}" +blockscout_frontend_url: "{{ blockscout_frontend_protocol }}://{{ blockscout_frontend_host_name }}" +blockscout_assets_url: "{{ blockscout_frontend_url }}/shared" +blockscout_extra_assets_dir: '' ## eg. A folder containing logo, icon, etc. + +# Services +# Stats +blockscout_stats_enabled: "false" + +# Marketplace (https://github.com/blockscout/docs/blob/master/setup/env-variables/frontend-common-envs/envs.md#marketplace-app-configuration-properties) +# Required fields: blockscout_marketplace_app_list: [{id: 'app', title: 'The App', logo: 'app-logo.png', shortDescription: 'Awesome app', categories: ['Security', 'Tools'], author: 'Bob', url: 'http://app.com', description: 'This is an awesome app']}] +blockscout_marketplace_app_list: [] # Blockscout env variables # --> https://docs.blockscout.com/for-developers/information-and-settings/env-variables @@ -43,11 +60,15 @@ blockscout_backend_env_vars: # Port PORT: 4000 + # Indexer + INDEXER_DISABLE_PENDING_TRANSACTIONS_FETCHER: "false" # It uses txpool_content which is some times disabled on nodes + INDEXER_DISABLE_INTERNAL_TRANSACTIONS_FETCHER: "false" # It uses debug_traceTransaction which is some times disabled on nodes + # Logo - LOGO: /app/apps/block_scout_web/assets/static/images/ash-logo-circle-30.svg + LOGO: /app/apps/block_scout_web/assets/static/images/{{ blockscout_header_logo_file | basename }} # Footer - FOOTER_LOGO: /app/apps/block_scout_web/assets/static/images/ash-logo-circle-30.svg + FOOTER_LOGO: /app/apps/block_scout_web/assets/static/images/{{ blockscout_header_logo_file | basename }} # Enable SSL encryption for ecto queries ECTO_USE_SSL: "false" @@ -62,19 +83,29 @@ blockscout_backend_env_vars: TXS_STATS_DAYS_TO_COMPILE_AT_INIT: 10 # Enable Smart-contract verification microservice - MICROSERVICE_SC_VERIFIER_ENABLED: "true" + MICROSERVICE_SC_VERIFIER_ENABLED: "false" + MICROSERVICE_SC_VERIFIER_URL: http://sc-verifier:8050 + MICROSERVICE_SC_VERIFIER_TYPE: sc_verifier + + # Enable Visualizer services such as SOL2UML + MICROSERVICE_VISUALIZE_SOL2UML_ENABLED: "false" + MICROSERVICE_VISUALIZE_SOL2UML_URL: http://visualizer:8050 + + # Enable Sig-provider which is used to display decoded transaction data on transaction pages and to determine transaction actions. + MICROSERVICE_SIG_PROVIDER_ENABLED: "false" + MICROSERVICE_SIG_PROVIDER_URL: http://sig-provider:8050 blockscout_frontend_env_variables: # API conf - NEXT_PUBLIC_API_HOST: "{{ blockscout_frontend_ip }}" - NEXT_PUBLIC_API_PROTOCOL: http + NEXT_PUBLIC_API_HOST: "{{ blockscout_frontend_host_name }}" + NEXT_PUBLIC_API_PROTOCOL: "{{ blockscout_frontend_protocol }}" NEXT_PUBLIC_API_BASE_PATH: / - # NEXT_PUBLIC_STATS_API_HOST: http://10.238.106.212:8080 # Network NEXT_PUBLIC_NETWORK_NAME: Ash Subnet NEXT_PUBLIC_NETWORK_SHORT_NAME: Ash NEXT_PUBLIC_NETWORK_ID: 66666 + NEXT_PUBLIC_NETWORK_RPC_URL: "{{ blockscout_rpc }}" # Coin NEXT_PUBLIC_NETWORK_CURRENCY_NAME: AshCoin @@ -82,15 +113,49 @@ blockscout_frontend_env_variables: NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS: 18 # App conf - NEXT_PUBLIC_APP_HOST: "{{ blockscout_frontend_ip }}" - NEXT_PUBLIC_APP_PROTOCOL: http + NEXT_PUBLIC_APP_HOST: "{{ blockscout_frontend_host_name }}" + NEXT_PUBLIC_APP_PROTOCOL: "{{ blockscout_frontend_protocol }}" # Miscellaneous NEXT_PUBLIC_HOMEPAGE_CHARTS: ['daily_txs'] - NEXT_PUBLIC_VISUALIZE_API_HOST: "http://{{ blockscout_frontend_ip }}:8081" NEXT_PUBLIC_IS_TESTNET: "true" - NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL: ws + NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL: "{{ blockscout_frontend_websocket_protocol }}" NEXT_PUBLIC_API_SPEC_URL: https://raw.githubusercontent.com/blockscout/blockscout-api-v2-swagger/main/swagger.yaml + # Visualizer + NEXT_PUBLIC_VISUALIZE_API_HOST: "{{ blockscout_frontend_url }}" + NEXT_PUBLIC_VISUALIZE_API_BASE_PATH: /visualizer-service + + # Stats + NEXT_PUBLIC_STATS_API_HOST: "{{ blockscout_frontend_url if blockscout_stats_enabled in ['true', true] else None }}" + NEXT_PUBLIC_STATS_API_BASE_PATH: /stats-service + + # Other explorers + NEXT_PUBLIC_FEATURED_NETWORKS: "{{ [{'title': 'ASH Layer', 'url': blockscout_frontend_url, 'group': 'Testnets', 'icon': 'https://ash.center/img/ash-logo.svg', 'isActive': true}] | to_json }}" + + # Other links + # NEXT_PUBLIC_OTHER_LINKS: [{'url':'http://10.200.14.212/','text':'Mainnet'}] + + blockscout_visualizer_env_variables: VISUALIZER__SERVER__GRPC__ENABLED: "false" + +blockscout_sig_provider_env_variables: + SIG_PROVIDER__SERVER__GRPC__ENABLED: "false" + +blockscout_sc_verifier_env_variables: + SMART_CONTRACT_VERIFIER__SERVER__GRPC__ENABLED: "false" + +blockscout_stats_env_variables: + STATS__DB_URL: "{{ blockscout_backend_env_vars.DATABASE_URL | regex_replace('/\\w+?$', '/stats') }}" + STATS__BLOCKSCOUT_DB_URL: "{{ blockscout_backend_env_vars.DATABASE_URL }}" + STATS__CREATE_DATABASE: "true" + STATS__RUN_MIGRATIONS: "true" + STATS__BLOCKSCOUT_API_URL: "http://backend:4000" + RUST_BACKTRACE: 1 + STATS__CHARTS_CONFIG: "config/charts.json" + STATS__LAYOUT_CONFIG: "config/layout.json" + STATS__UPDATE_GROUPS_CONFIG: "config/update_groups.json" + STATS__DISABLE_INTERNAL_TRANSACTIONS: "{{ blockscout_backend_env_vars.INDEXER_DISABLE_INTERNAL_TRANSACTIONS_FETCHER }}" + # Only once, after the first start, the stats service will update the stats for all stats + # STATS__FORCE_UPDATE_ON_START: "true" diff --git a/roles/evm/blockscout/files/proxy/microservices.conf.template b/roles/evm/blockscout/files/proxy/microservices.conf.template deleted file mode 100644 index 7e76238..0000000 --- a/roles/evm/blockscout/files/proxy/microservices.conf.template +++ /dev/null @@ -1,42 +0,0 @@ -map $http_upgrade $connection_upgrade { - - default upgrade; - '' close; -} -server { - listen 8081; - server_name localhost; - proxy_http_version 1.1; - proxy_hide_header Access-Control-Allow-Origin; - proxy_hide_header Access-Control-Allow-Methods; - add_header 'Access-Control-Allow-Origin' 'http://localhost:3000' always; - add_header 'Access-Control-Allow-Credentials' 'true' always; - add_header 'Access-Control-Allow-Methods' 'PUT, GET, POST, OPTIONS, DELETE, PATCH' always; - add_header 'Access-Control-Allow-Headers' 'DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,x-csrf-token' always; - - location / { - proxy_pass http://visualizer:8050/; - proxy_http_version 1.1; - proxy_buffering off; - proxy_set_header Host "$host"; - proxy_set_header X-Real-IP "$remote_addr"; - proxy_connect_timeout 30m; - proxy_read_timeout 30m; - proxy_send_timeout 30m; - proxy_set_header X-Forwarded-For "$proxy_add_x_forwarded_for"; - proxy_set_header X-Forwarded-Proto "$scheme"; - proxy_set_header Upgrade "$http_upgrade"; - proxy_set_header Connection $connection_upgrade; - proxy_cache_bypass $http_upgrade; - if ($request_method = 'OPTIONS') { - add_header 'Access-Control-Allow-Origin' 'http://localhost:3000' always; - add_header 'Access-Control-Allow-Credentials' 'true' always; - add_header 'Access-Control-Allow-Methods' 'PUT, GET, POST, OPTIONS, DELETE, PATCH' always; - add_header 'Access-Control-Allow-Headers' 'DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,x-csrf-token' always; - add_header 'Access-Control-Max-Age' 1728000; - add_header 'Content-Type' 'text/plain charset=UTF-8'; - add_header 'Content-Length' 0; - return 204; - } - } -} diff --git a/roles/evm/blockscout/files/services/backend.yml b/roles/evm/blockscout/files/services/backend.yml index 13d1097..6e65a29 100644 --- a/roles/evm/blockscout/files/services/backend.yml +++ b/roles/evm/blockscout/files/services/backend.yml @@ -2,7 +2,7 @@ version: '3.9' services: backend: - image: blockscout/blockscout:6.1.0 + image: blockscout/blockscout:6.10.1 pull_policy: always restart: always stop_grace_period: 5m diff --git a/roles/evm/blockscout/files/services/frontend.yml b/roles/evm/blockscout/files/services/frontend.yml index ac85354..3eb01e9 100644 --- a/roles/evm/blockscout/files/services/frontend.yml +++ b/roles/evm/blockscout/files/services/frontend.yml @@ -2,7 +2,7 @@ version: '3.9' services: frontend: - image: ghcr.io/blockscout/frontend:v1.23.3 + image: ghcr.io/blockscout/frontend:v1.37.4 pull_policy: always platform: linux/amd64 restart: always diff --git a/roles/evm/blockscout/files/services/nginx.yml b/roles/evm/blockscout/files/services/nginx.yml index fa26244..f7e0df8 100644 --- a/roles/evm/blockscout/files/services/nginx.yml +++ b/roles/evm/blockscout/files/services/nginx.yml @@ -16,5 +16,3 @@ services: published: 80 - target: 8080 published: 8080 - - target: 8081 - published: 8081 diff --git a/roles/evm/blockscout/files/services/sig-provider.yml b/roles/evm/blockscout/files/services/sig-provider.yml index a8155cb..9f65699 100644 --- a/roles/evm/blockscout/files/services/sig-provider.yml +++ b/roles/evm/blockscout/files/services/sig-provider.yml @@ -2,8 +2,10 @@ version: '3.9' services: sig-provider: - image: ghcr.io/blockscout/sig-provider:v1.0.0 + image: ghcr.io/blockscout/sig-provider:v1.1.1 pull_policy: always platform: linux/amd64 restart: always container_name: 'sig-provider' + env_file: + - /etc/blockscout/conf/vars-sig-provider.env diff --git a/roles/evm/blockscout/files/services/smart-contract-verifier.yml b/roles/evm/blockscout/files/services/smart-contract-verifier.yml index d2fd8a8..6553d43 100644 --- a/roles/evm/blockscout/files/services/smart-contract-verifier.yml +++ b/roles/evm/blockscout/files/services/smart-contract-verifier.yml @@ -2,7 +2,7 @@ version: '3.9' services: smart-contract-verifier: - image: ghcr.io/blockscout/smart-contract-verifier:v1.6.1 + image: ghcr.io/blockscout/smart-contract-verifier:v1.9.2 pull_policy: always platform: linux/amd64 restart: always diff --git a/roles/evm/blockscout/files/services/stats.yml b/roles/evm/blockscout/files/services/stats.yml new file mode 100644 index 0000000..0377fa6 --- /dev/null +++ b/roles/evm/blockscout/files/services/stats.yml @@ -0,0 +1,12 @@ +version: '3.9' + +services: + stats: + image: ghcr.io/blockscout/stats:v2.3.0 + build: . + pull_policy: always + platform: linux/amd64 + restart: always + container_name: 'stats' + env_file: + - /etc/blockscout/conf/vars-stats.env diff --git a/roles/evm/blockscout/files/services/visualizer.yml b/roles/evm/blockscout/files/services/visualizer.yml index 2638ca4..91d73c8 100644 --- a/roles/evm/blockscout/files/services/visualizer.yml +++ b/roles/evm/blockscout/files/services/visualizer.yml @@ -2,7 +2,7 @@ version: '3.9' services: visualizer: - image: ghcr.io/blockscout/visualizer:v0.2.0 + image: ghcr.io/blockscout/visualizer:v0.2.1 pull_policy: always platform: linux/amd64 restart: always diff --git a/roles/evm/blockscout/tasks/config-blockscout.yml b/roles/evm/blockscout/tasks/config-blockscout.yml index ab2076f..d0b5395 100644 --- a/roles/evm/blockscout/tasks/config-blockscout.yml +++ b/roles/evm/blockscout/tasks/config-blockscout.yml @@ -1,6 +1,14 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright (c) 2022-2024, E36 Knots --- +- name: Create Marketplace config + set_fact: + blockscout_frontend_env_variables: + NEXT_PUBLIC_MARKETPLACE_ENABLED: 'true' + NEXT_PUBLIC_MARKETPLACE_CONFIG_URL: "{{ blockscout_assets_url }}/marketplace-config.json" + NEXT_PUBLIC_MARKETPLACE_SUBMIT_FORM: https://forms.gle/S7LK7M6QiNeFnGUN8 + when: blockscout_marketplace_app_list | length > 0 + - name: Create Blockscout directories file: path: "{{ item }}" @@ -12,6 +20,8 @@ - "{{ blockscout_custom_dir }}" - "{{ blockscout_log_dir }}" - "{{ blockscout_data_dir }}" + - "{{ blockscout_assets_dir }}" + tags: assets-sync - name: Template docker-compose.yml template: @@ -29,10 +39,18 @@ group: "{{ blockscout_user }}" notify: Restart blockscout -- name: Upload proxy - copy: - src: "proxy" - dest: "{{ blockscout_custom_dir }}" +- name: Ensure proxy directory exists + file: + path: "{{ blockscout_custom_dir }}/proxy" + state: directory + owner: "{{ blockscout_user }}" + group: "{{ blockscout_user }}" + mode: '0755' + +- name: Template proxy default.conf.template + template: + src: default.conf.template.j2 + dest: "{{ blockscout_custom_dir }}/proxy/default.conf.template" owner: "{{ blockscout_user }}" group: "{{ blockscout_user }}" notify: Restart blockscout @@ -59,6 +77,7 @@ dest: "{{ blockscout_conf_dir }}/vars-visualizer.env" owner: "{{ blockscout_user }}" group: "{{ blockscout_user }}" + when: blockscout_backend_env_vars.MICROSERVICE_VISUALIZE_SOL2UML_ENABLED in ['true', true] notify: Restart blockscout - name: Template vars-smart-contract-verifier.env @@ -67,6 +86,25 @@ dest: "{{ blockscout_conf_dir }}/vars-smart-contract-verifier.env" owner: "{{ blockscout_user }}" group: "{{ blockscout_user }}" + when: blockscout_backend_env_vars.MICROSERVICE_SC_VERIFIER_ENABLED in ['true', true] + notify: Restart blockscout + +- name: Template vars-sig-provider.env + template: + src: vars-sig-provider.env.j2 + dest: "{{ blockscout_conf_dir }}/vars-sig-provider.env" + owner: "{{ blockscout_user }}" + group: "{{ blockscout_user }}" + when: blockscout_backend_env_vars.MICROSERVICE_SIG_PROVIDER_ENABLED in ['true', true] + notify: Restart blockscout + +- name: Template vars-stats.env + template: + src: vars-stats.env.j2 + dest: "{{ blockscout_conf_dir }}/vars-stats.env" + owner: "{{ blockscout_user }}" + group: "{{ blockscout_user }}" + when: blockscout_stats_enabled in ['true', true] notify: Restart blockscout - name: Ensure images directory exists @@ -80,7 +118,7 @@ - name: Upload logo image copy: src: "{{ blockscout_header_logo_file }}" - dest: "{{ blockscout_custom_dir }}/images/{{ blockscout_header_logo_file }}" + dest: "{{ blockscout_custom_dir }}/images/{{ blockscout_header_logo_file | basename }}" owner: "{{ blockscout_user }}" group: "{{ blockscout_user }}" notify: Restart blockscout @@ -91,6 +129,41 @@ dest: /etc/systemd/system/blockscout.service notify: Restart blockscout +- name: Create marketplace-config.json asset + copy: + content: "{{ blockscout_marketplace_app_list }}" + dest: "{{ blockscout_assets_dir }}/marketplace-config.json" + owner: "{{ blockscout_user }}" + group: "{{ blockscout_user }}" + mode: '0755' + when: blockscout_marketplace_app_list | length > 0 + notify: Restart blockscout + tags: marketplace-sync + +- name: Convert NEXT_PUBLIC_FEATURED_NETWORKS to json formatting + set_fact: + blockscout_frontend_env_variables: + NEXT_PUBLIC_FEATURED_NETWORKS: "{{ blockscout_frontend_env_variables.NEXT_PUBLIC_FEATURED_NETWORKS | to_json }}" + when: "'NEXT_PUBLIC_FEATURED_NETWORKS' in blockscout_frontend_env_variables" + +- name: Convert NEXT_PUBLIC_FOOTER_LINKS to json formatting + set_fact: + blockscout_frontend_env_variables: + NEXT_PUBLIC_FOOTER_LINKS: "{{ blockscout_frontend_env_variables.NEXT_PUBLIC_FOOTER_LINKS | to_json }}" + when: "'NEXT_PUBLIC_FOOTER_LINKS' in blockscout_frontend_env_variables" + +- name: Copy assets to expose it through NGINX '/shared' api path + copy: + src: "{{ blockscout_extra_assets_dir if blockscout_extra_assets_dir.endswith('/') else blockscout_extra_assets_dir + '/' }}" + dest: "{{ blockscout_assets_dir }}" + owner: "{{ blockscout_user }}" + group: "{{ blockscout_user }}" + when: blockscout_extra_assets_dir | length > 0 + notify: Restart blockscout + tags: assets-sync + - name: Reload systemctl daemons systemd: daemon_reload: true + + diff --git a/roles/evm/blockscout/files/proxy/default.conf.template b/roles/evm/blockscout/templates/default.conf.template.j2 similarity index 52% rename from roles/evm/blockscout/files/proxy/default.conf.template rename to roles/evm/blockscout/templates/default.conf.template.j2 index 0db0dc3..ef69394 100644 --- a/roles/evm/blockscout/files/proxy/default.conf.template +++ b/roles/evm/blockscout/templates/default.conf.template.j2 @@ -8,8 +8,9 @@ server { server_name localhost; proxy_http_version 1.1; - location ~ ^/(api|socket|sitemap.xml|auth/auth0|auth/auth0/callback|auth/logout) { - proxy_pass ${BACK_PROXY_PASS}; + location /shared/ { + root /var; + autoindex on; proxy_http_version 1.1; proxy_set_header Host "$host"; proxy_set_header X-Real-IP "$remote_addr"; @@ -19,30 +20,37 @@ server { proxy_set_header Connection $connection_upgrade; proxy_cache_bypass $http_upgrade; } - location / { - proxy_pass ${FRONT_PROXY_PASS}; +{% if blockscout_stats_enabled in ['true', true] %} + location /stats-service/ { + proxy_pass http://stats:8050/; proxy_http_version 1.1; + proxy_buffering off; proxy_set_header Host "$host"; proxy_set_header X-Real-IP "$remote_addr"; + proxy_connect_timeout 30m; + proxy_read_timeout 30m; + proxy_send_timeout 30m; proxy_set_header X-Forwarded-For "$proxy_add_x_forwarded_for"; proxy_set_header X-Forwarded-Proto "$scheme"; proxy_set_header Upgrade "$http_upgrade"; proxy_set_header Connection $connection_upgrade; - proxy_cache_bypass $http_upgrade; + add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0"; + proxy_no_cache 1; + proxy_cache_bypass 1; + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Credentials' 'true' always; + add_header 'Access-Control-Allow-Methods' 'PUT, GET, POST, OPTIONS, DELETE, PATCH' always; + add_header 'Access-Control-Allow-Headers' 'DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,x-csrf-token' always; + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain charset=UTF-8'; + add_header 'Content-Length' 0; + return 204; + } } -} -server { - listen 8081; - server_name localhost; - proxy_http_version 1.1; - proxy_hide_header Access-Control-Allow-Origin; - proxy_hide_header Access-Control-Allow-Methods; - add_header 'Access-Control-Allow-Origin' 'http://localhost' always; - add_header 'Access-Control-Allow-Credentials' 'true' always; - add_header 'Access-Control-Allow-Methods' 'PUT, GET, POST, OPTIONS, DELETE, PATCH' always; - add_header 'Access-Control-Allow-Headers' 'DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,x-csrf-token' always; - - location / { +{% endif %} +{% if blockscout_backend_env_vars.MICROSERVICE_VISUALIZE_SOL2UML_ENABLED in ['true', true] %} + location /visualizer-service { proxy_pass http://visualizer:8050/; proxy_http_version 1.1; proxy_buffering off; @@ -57,7 +65,7 @@ server { proxy_set_header Connection $connection_upgrade; proxy_cache_bypass $http_upgrade; if ($request_method = 'OPTIONS') { - add_header 'Access-Control-Allow-Origin' 'http://localhost' always; + add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Credentials' 'true' always; add_header 'Access-Control-Allow-Methods' 'PUT, GET, POST, OPTIONS, DELETE, PATCH' always; add_header 'Access-Control-Allow-Headers' 'DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,x-csrf-token' always; @@ -67,4 +75,27 @@ server { return 204; } } +{% endif %} + location ~ ^/(api|socket|sitemap.xml|auth/auth0|auth/auth0/callback|auth/logout) { + proxy_pass ${BACK_PROXY_PASS}; + proxy_http_version 1.1; + proxy_set_header Host "$host"; + proxy_set_header X-Real-IP "$remote_addr"; + proxy_set_header X-Forwarded-For "$proxy_add_x_forwarded_for"; + proxy_set_header X-Forwarded-Proto "$scheme"; + proxy_set_header Upgrade "$http_upgrade"; + proxy_set_header Connection $connection_upgrade; + proxy_cache_bypass $http_upgrade; + } + location / { + proxy_pass ${FRONT_PROXY_PASS}; + proxy_http_version 1.1; + proxy_set_header Host "$host"; + proxy_set_header X-Real-IP "$remote_addr"; + proxy_set_header X-Forwarded-For "$proxy_add_x_forwarded_for"; + proxy_set_header X-Forwarded-Proto "$scheme"; + proxy_set_header Upgrade "$http_upgrade"; + proxy_set_header Connection $connection_upgrade; + proxy_cache_bypass $http_upgrade; + } } diff --git a/roles/evm/blockscout/templates/docker-compose.yml.j2 b/roles/evm/blockscout/templates/docker-compose.yml.j2 index 2e36b4f..26a5602 100644 --- a/roles/evm/blockscout/templates/docker-compose.yml.j2 +++ b/roles/evm/blockscout/templates/docker-compose.yml.j2 @@ -1,5 +1,5 @@ version: '3.9' - +{% set EMBEDDED_DATABASE = '@db:' in blockscout_backend_env_vars.DATABASE_URL %} services: redis-db: extends: @@ -7,62 +7,72 @@ services: service: redis-db volumes: - {{ blockscout_log_dir }}:/app/logs/ - +{% if EMBEDDED_DATABASE %} db-init: extends: file: ./custom/services/db.yml service: db-init volumes: - {{ blockscout_data_dir }}:/var/lib/postgresql/data - db: extends: file: ./custom/services/db.yml service: db volumes: - {{ blockscout_data_dir }}:/var/lib/postgresql/data - +{% endif %} backend: depends_on: +{% if EMBEDDED_DATABASE %} - db +{% endif %} - redis-db extends: file: ./custom/services/backend.yml service: backend +{% if EMBEDDED_DATABASE %} links: - db:database +{% endif %} volumes: - {{ blockscout_log_dir }}:/app/logs/ - {{ blockscout_custom_dir }}/images:/app/apps/block_scout_web/assets/static/images - +{% if blockscout_backend_env_vars.MICROSERVICE_VISUALIZE_SOL2UML_ENABLED in ['true', true] %} visualizer: extends: file: ./custom/services/visualizer.yml service: visualizer - +{% endif %} +{% if blockscout_backend_env_vars.MICROSERVICE_SIG_PROVIDER_ENABLED in ['true', true] %} sig-provider: extends: file: ./custom/services/sig-provider.yml service: sig-provider - +{% endif %} +{% if blockscout_backend_env_vars.MICROSERVICE_SC_VERIFIER_ENABLED in ['true', true] %} sc-verifier: extends: file: ./custom/services/smart-contract-verifier.yml service: smart-contract-verifier - ports: - - 8082:8050 - +{% endif %} +{% if blockscout_stats_enabled in ['true', true] %} + stats: + extends: + file: ./custom/services/stats.yml + service: stats +{% endif %} frontend: depends_on: - backend + - proxy extends: file: ./custom/services/frontend.yml service: frontend - proxy: depends_on: - backend - - frontend extends: file: ./custom/services/nginx.yml service: proxy + volumes: + - {{ blockscout_assets_dir }}:/var/shared diff --git a/roles/evm/blockscout/templates/vars-sig-provider.env.j2 b/roles/evm/blockscout/templates/vars-sig-provider.env.j2 new file mode 100644 index 0000000..2faeff7 --- /dev/null +++ b/roles/evm/blockscout/templates/vars-sig-provider.env.j2 @@ -0,0 +1,3 @@ +{% for name, value in blockscout_sig_provider_env_variables.items() %} +{{ name }}={{ value }} +{% endfor %} diff --git a/roles/evm/blockscout/templates/vars-smart-contract-verifier.env.j2 b/roles/evm/blockscout/templates/vars-smart-contract-verifier.env.j2 index 5fdf805..c6b4656 100644 --- a/roles/evm/blockscout/templates/vars-smart-contract-verifier.env.j2 +++ b/roles/evm/blockscout/templates/vars-smart-contract-verifier.env.j2 @@ -1,39 +1,3 @@ -# Those are examples of existing configuration variables and their default values. -# When uncommented, they would overwrite corresponding values from `base.toml` -# configuration file. - -SMART_CONTRACT_VERIFIER__SERVER__HTTP__ENABLED=true -SMART_CONTRACT_VERIFIER__SERVER__HTTP__ADDR=0.0.0.0:8050 -SMART_CONTRACT_VERIFIER__SERVER__HTTP__MAX_BODY_SIZE=2097152 - -SMART_CONTRACT_VERIFIER__SERVER__GRPC__ENABLED=false -SMART_CONTRACT_VERIFIER__SERVER__GRPC__ADDR=0.0.0.0:8051 - -SMART_CONTRACT_VERIFIER__SOLIDITY__ENABLED=true -SMART_CONTRACT_VERIFIER__SOLIDITY__COMPILERS_DIR=/tmp/solidity-compilers -SMART_CONTRACT_VERIFIER__SOLIDITY__REFRESH_VERSIONS_SCHEDULE=0 0 * * * * * - -# It depends on the OS you are running the service on -SMART_CONTRACT_VERIFIER__SOLIDITY__FETCHER__LIST__LIST_URL=https://solc-bin.ethereum.org/linux-amd64/list.json -#SMART_CONTRACT_VERIFIER__SOLIDITY__FETCHER__LIST__LIST_URL=https://solc-bin.ethereum.org/macosx-amd64/list.json -#SMART_CONTRACT_VERIFIER__SOLIDITY__FETCHER__LIST__LIST_URL=https://solc-bin.ethereum.org/windows-amd64/list.json - -SMART_CONTRACT_VERIFIER__VYPER__ENABLED=true -SMART_CONTRACT_VERIFIER__VYPER__COMPILERS_DIR=/tmp/vyper-compilers -SMART_CONTRACT_VERIFIER__VYPER__REFRESH_VERSIONS_SCHEDULE=0 0 * * * * * - -# It depends on the OS you are running the service on -SMART_CONTRACT_VERIFIER__VYPER__FETCHER__LIST__LIST_URL=https://raw.githubusercontent.com/blockscout/solc-bin/main/vyper.list.json -#SMART_CONTRACT_VERIFIER__VYPER__FETCHER__LIST__LIST_URL=https://raw.githubusercontent.com/blockscout/solc-bin/main/vyper.macos.list.json - -SMART_CONTRACT_VERIFIER__SOURCIFY__ENABLED=true -SMART_CONTRACT_VERIFIER__SOURCIFY__API_URL=https://sourcify.dev/server/ -SMART_CONTRACT_VERIFIER__SOURCIFY__VERIFICATION_ATTEMPTS=3 -SMART_CONTRACT_VERIFIER__SOURCIFY__REQUEST_TIMEOUT=10 - -SMART_CONTRACT_VERIFIER__METRICS__ENABLED=false -SMART_CONTRACT_VERIFIER__METRICS__ADDR=0.0.0.0:6060 -SMART_CONTRACT_VERIFIER__METRICS__ROUTE=/metrics - -SMART_CONTRACT_VERIFIER__JAEGER__ENABLED=false -SMART_CONTRACT_VERIFIER__JAEGER__AGENT_ENDPOINT=localhost:6831 +{% for name, value in blockscout_sc_verifier_env_variables.items() %} +{{ name }}={{ value }} +{% endfor %} diff --git a/roles/evm/blockscout/templates/vars-stats.env.j2 b/roles/evm/blockscout/templates/vars-stats.env.j2 new file mode 100644 index 0000000..e31a18c --- /dev/null +++ b/roles/evm/blockscout/templates/vars-stats.env.j2 @@ -0,0 +1,3 @@ +{% for name, value in blockscout_stats_env_variables.items() %} +{{ name }}={{ value }} +{% endfor %}