Commit bef8a89b authored by EC2 Default User's avatar EC2 Default User

add configure for blockscout

parents
Pipeline #860 canceled with stages
start:
@echo "all services started"
@docker compose up -d
.PHONY: start
stop:
@docker compose down
@echo "all services stopped"
.PHONY: stop
clean: stop
@sudo rm -rf data
.PHONY: clean
# blockscout explorer for cmp20
## how to use
```shell
# start
make start
# stop
make stop
# clean data
make clean && make start
```
CHAIN_ID: "100"
COIN: "CMP"
COIN_NAME: "CMP"
ETHEREUM_JSONRPC_HTTP_URL: http://172.17.0.1:28545
ETHEREUM_JSONRPC_TRACE_URL: http://172.17.0.1:28545
ADMIN_PANEL_ENABLED: "false"
API_NO_RATE_LIMIT_API_KEY: ""
API_RATE_LIMIT: "50"
API_RATE_LIMIT_BY_IP: "3000"
API_RATE_LIMIT_BY_IP_TIME_INTERVAL: 5m
API_RATE_LIMIT_BY_KEY: "50"
API_RATE_LIMIT_BY_WHITELISTED_IP: "50"
API_RATE_LIMIT_STATIC_API_KEY: ""
API_RATE_LIMIT_TIME_INTERVAL: 1s
API_RATE_LIMIT_UI_V2_TOKEN_TTL_IN_SECONDS: "18000"
API_RATE_LIMIT_UI_V2_WITH_TOKEN: "5"
API_RATE_LIMIT_WHITELISTED_IPS: ""
API_V1_READ_METHODS_DISABLED: "false"
API_V1_WRITE_METHODS_DISABLED: "false"
API_V2_ENABLED: "true"
APPS_MENU: "true"
#BLOCK_TRANSFORMER: base
BLOCKSCOUT_HOST: ""
BLOCKSCOUT_PROTOCOL: ""
CACHE_ADDRESS_SUM_PERIOD: "3600"
CACHE_ADDRESS_TOKEN_TRANSFERS_COUNTER_PERIOD: "1800"
CACHE_ADDRESS_TOKENS_USD_SUM_PERIOD: "3600"
CACHE_ADDRESS_TRANSACTIONS_COUNTER_PERIOD: "1800"
CACHE_ADDRESS_TRANSACTIONS_GAS_USAGE_COUNTER_PERIOD: "1800"
CACHE_ADDRESS_WITH_BALANCES_UPDATE_INTERVAL: "1800"
CACHE_AVERAGE_BLOCK_PERIOD: "1800"
CACHE_BLOCK_COUNT_PERIOD: "7200"
CACHE_MARKET_HISTORY_PERIOD: "21600"
CACHE_TOKEN_HOLDERS_COUNTER_PERIOD: "3600"
CACHE_TOKEN_TRANSFERS_COUNTER_PERIOD: "3600"
CACHE_TOTAL_GAS_USAGE_PERIOD: "3600"
CACHE_TXS_COUNT_PERIOD: "7200"
CHECKSUM_ADDRESS_HASHES: "true"
COIN_BALANCE_HISTORY_DAYS: "90"
CONTRACT_MAX_STRING_LENGTH_WITHOUT_TRIMMING: "2040"
CONTRACT_VERIFICATION_ALLOWED_SOLIDITY_EVM_VERSIONS: homestead,tangerineWhistle,spuriousDragon,byzantium,constantinople,petersburg,istanbul,berlin,london,paris,shanghai,cancun,default
CONTRACT_VERIFICATION_ALLOWED_VYPER_EVM_VERSIONS: byzantium,constantinople,petersburg,istanbul,berlin,paris,shanghai,cancun,default
DATABASE_URL: postgresql://blockscout:ceWb1MeLBEeOIfk65gU8EjF8@db:5432/blockscout
DECODE_NOT_A_CONTRACT_CALLS: "true"
DISABLE_CATCHUP_INDEXER: "false"
DISABLE_EXCHANGE_RATES: "true"
DISABLE_INDEXER: "false"
DISABLE_REALTIME_INDEXER: "false"
DISABLE_WEBAPP: "true"
DISPLAY_TOKEN_ICONS: "false"
ECTO_USE_SSL: "false"
EIP_1559_ELASTICITY_MULTIPLIER: "2"
EMISSION_FORMAT: DEFAULT
ETHEREUM_JSONRPC_DISABLE_ARCHIVE_BALANCES: "false"
ETHEREUM_JSONRPC_TRANSPORT: http
ETHEREUM_JSONRPC_VARIANT: geth
EXCHANGE_RATES_COIN: ""
EXTERNAL_APPS: '[]'
#FETCH_REWARDS_WAY: trace_block
FETCH_REWARDS_WAY: manual
FOOTER_LINK_TO_OTHER_EXPLORERS: "false"
FOOTER_LOGO: /images/blockscout_logo.svg
FOOTER_OTHER_EXPLORERS: '{}'
HEART_BEAT_TIMEOUT: "30"
HIDE_BLOCK_MINER: "false"
INDEXER_CATCHUP_BLOCK_INTERVAL: "1s"
INDEXER_DISABLE_ADDRESS_COIN_BALANCE_FETCHER: "false"
INDEXER_DISABLE_INTERNAL_TRANSACTIONS_FETCHER: "false"
INDEXER_DISABLE_PENDING_TRANSACTIONS_FETCHER: "true"
INDEXER_DISABLE_TOKEN_INSTANCE_REALTIME_FETCHER: "false"
INDEXER_DISABLE_TOKEN_INSTANCE_REFETCH_FETCHER: "false"
INDEXER_DISABLE_TOKEN_INSTANCE_RETRY_FETCHER: "false"
INDEXER_DISABLE_TOKEN_INSTANCE_SANITIZE_FETCHER: "false"
INDEXER_DISABLE_BLOCK_REWARD_FETCHER: "true"
IPC_PATH: ""
JSON_RPC: ""
LOGO: /images/blockscout_logo.svg
MAINTENANCE_ALERT_MESSAGE: ""
MAX_SIZE_UNLESS_HIDE_ARRAY: "50"
MICROSERVICE_ACCOUNT_ABSTRACTION_ENABLED: "false"
MICROSERVICE_ACCOUNT_ABSTRACTION_URL: http://user-ops-indexer:8050/
MICROSERVICE_ETH_BYTECODE_DB_INTERVAL_BETWEEN_LOOKUPS: 10m
MICROSERVICE_ETH_BYTECODE_DB_MAX_LOOKUPS_CONCURRENCY: "10"
MICROSERVICE_SC_VERIFIER_ENABLED: "true"
MICROSERVICE_SC_VERIFIER_TYPE: eth_bytecode_db
MICROSERVICE_SC_VERIFIER_URL: https://eth-bytecode-db.services.blockscout.com/
MICROSERVICE_SIG_PROVIDER_ENABLED: "true"
MICROSERVICE_SIG_PROVIDER_URL: http://sig-provider:8050/
MICROSERVICE_VISUALIZE_SOL2UML_ENABLED: "true"
MICROSERVICE_VISUALIZE_SOL2UML_URL: http://visualizer:8050/
NETWORK: "CMP20"
NETWORK_PATH: /
NFT_MEDIA_HANDLER_ENABLED: "false"
NFT_MEDIA_HANDLER_REMOTE_DISPATCHER_NODE_MODE_ENABLED: "true"
POOL_SIZE: "80"
POOL_SIZE_API: "10"
PORT: "4000"
RE_CAPTCHA_CLIENT_KEY: "6LeXskQrAAAAAMCn13UTIptZa1zPRAgj97gVpdhv"
RE_CAPTCHA_DISABLED: "false"
RE_CAPTCHA_SECRET_KEY: "6LeXskQrAAAAACi-xE_eD6maSk5BgFZ1LG6ztCkM"
RE_CAPTCHA_V3_CLIENT_KEY: "6Lc8wUQrAAAAANLnr2lwoAYx1aQ9mmxY1j2lf8lH"
RE_CAPTCHA_V3_SECRET_KEY: "6Lc8wUQrAAAAAPg9ZkIoJUNVzlpMBz-EOnGnmFV4"
RELEASE_COOKIE: secret_cookie
RELEASE_DISTRIBUTION: name
RELEASE_LINK: ""
RELEASE_NODE: producer@172.18.0.4
SECRET_KEY_BASE: 56NtB48ear7+wMSf0IQuWDAAazhpb31qyc7GiyspBP2vh7t5zlCsF5QDv76chXeN
SHOW_ADDRESS_MARKETCAP_PERCENTAGE: "true"
SHOW_MAINTENANCE_ALERT: "false"
SHOW_PRICE_CHART: "false"
SHOW_PRICE_CHART_LEGEND: "false"
SHOW_TENDERLY_LINK: "false"
SHOW_TXS_CHART: "true"
SOURCIFY_INTEGRATION_ENABLED: "false"
SOURCIFY_REPO_URL: ""
SOURCIFY_SERVER_URL: ""
SUBNETWORK: CMP20
SUPPORTED_CHAINS: '{}'
TENDERLY_CHAIN_PATH: ""
TOKEN_METADATA_UPDATE_INTERVAL: "172800"
TXS_HISTORIAN_INIT_LAG: "0"
TXS_STATS_DAYS_TO_COMPILE_AT_INIT: "10"
TXS_STATS_ENABLED: "true"
UNCLES_IN_AVERAGE_BLOCK_TIME: "false"
#ACCOUNT_ENABLED: "false"
ACCOUNT_ENABLED: "true"
ACCOUNT_AUTH0_DOMAIN: dev-qs4jog0uuuy2fbxj.us.auth0.com
ACCOUNT_AUTH0_CLIENT_ID: SvItQWFSu0irfsFzuFsCmngkLcZjBoDe
ACCOUNT_AUTH0_CLIENT_SECRET: qqfCT4x3DTL1lhDpNK5uTSqIMszFCMdVdGxotxhf7O-q11cHYCLvUZEOAXKaBS_P
ACCOUNT_SENDGRID_API_KEY: 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
ACCOUNT_SENDGRID_SENDER: noreply@scan.cmp20.bitheart.org
ACCOUNT_SENDGRID_TEMPLATE: d-479075952fd04e9495ed2951a499fe5d
ACCOUNT_PUBLIC_TAGS_AIRTABLE_URL: ""
ACCOUNT_PUBLIC_TAGS_AIRTABLE_API_KEY: patETcvw9y6Hwm6N9.35606c353a80d44fe7aa7622ccff69a82c2e17ace2e765a58212f2590a4359d8
ACCOUNT_CLOAK_KEY: "j7UuXiqcspbLaszv7LyhzPHlVH+8j6Glf11jlJJMzO8="
ACCOUNT_REDIS_URL: redis://redis_db:6379
ACCOUNT_DATABASE_URL: postgresql://blockscout:ceWb1MeLBEeOIfk65gU8EjF8@db:5432/blockscout
NEXT_PUBLIC_API_HOST: scan.cmp20.bitheart.org
NEXT_PUBLIC_APP_HOST: scan.cmp20.bitheart.org
NEXT_PUBLIC_STATS_API_HOST: https://statapi.scan.cmp20.bitheart.org
NEXT_PUBLIC_VISUALIZE_API_HOST: https://viaapi.scan.cmp20.bitheart.org
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS: "18"
NEXT_PUBLIC_NETWORK_CURRENCY_NAME: CMP
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL: CMP
NEXT_PUBLIC_NETWORK_ID: "100"
NEXT_PUBLIC_NETWORK_NAME: cmp20 chain
NEXT_PUBLIC_NETWORK_SHORT_NAME: cmp20 chain
NEXT_PUBLIC_API_BASE_PATH: /
NEXT_PUBLIC_API_PROTOCOL: https
NEXT_PUBLIC_API_SPEC_URL: https://raw.githubusercontent.com/blockscout/blockscout-api-v2-swagger/main/swagger.yaml
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL: wss
NEXT_PUBLIC_APP_PROTOCOL: https
NEXT_PUBLIC_HOMEPAGE_CHARTS: ["daily_txs"]
NEXT_PUBLIC_IS_TESTNET: "true"
# for my account.
NEXT_PUBLIC_IS_ACCOUNT_SUPPORTED: "true"
NEXT_PUBLIC_RE_CAPTCHA_APP_SITE_KEY: "6Lc8wUQrAAAAANLnr2lwoAYx1aQ9mmxY1j2lf8lH"
# NEXT_PUBLIC_RE_CAPTCHA_APP_SITE_KEY: "6LeXskQrAAAAAMCn13UTIptZa1zPRAgj97gVpdhv"
# for wallet connect.
NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID: "e2975047b27374a8f2f0f54549a16df7"
NEXT_PUBLIC_NETWORK_RPC_URL: https://
STATS__BLOCKSCOUT_API_URL: http://host.docker.internal
STATS__BLOCKSCOUT_DB_URL: postgresql://blockscout:ceWb1MeLBEeOIfk65gU8EjF8@db:5432/blockscout
STATS__CREATE_DATABASE: "true"
STATS__DB_URL: postgres://stats:n0uejXPl61ci6ldCuE2gQU5Y@stats-db:5432/stats
STATS__DEFAULT_SCHEDULE: 0 0 1 * * * *
STATS__FORCE_UPDATE_ON_START: "false"
STATS__JAEGER__AGENT_ENDPOINT: localhost:6831
STATS__JAEGER__ENABLED: "false"
STATS__METRICS__ADDR: 0.0.0.0:6060
STATS__METRICS__ENABLED: "false"
STATS__METRICS__ROUTE: /metrics
STATS__RUN_MIGRATIONS: "true"
STATS__SERVER__GRPC__ADDR: 0.0.0.0:8051
STATS__SERVER__GRPC__ENABLED: "false"
STATS__SERVER__HTTP__ADDR: 0.0.0.0:8050
STATS__SERVER__HTTP__ENABLED: "true"
STATS__SERVER__HTTP__MAX_BODY_SIZE: "2097152"
STATS__TRACING__ENABLED: "true"
STATS__TRACING__FORMAT: default
USER_OPS_INDEXER__API__MAX_PAGE_SIZE: "100"
USER_OPS_INDEXER__DATABASE__CONNECT__URL: postgresql://blockscout:ceWb1MeLBEeOIfk65gU8EjF8@db:5432/blockscout
USER_OPS_INDEXER__DATABASE__CREATE_DATABASE: "false"
USER_OPS_INDEXER__DATABASE__RUN_MIGRATIONS: "true"
USER_OPS_INDEXER__INDEXER__CONCURRENCY: "20"
USER_OPS_INDEXER__INDEXER__ENTRYPOINTS__V06: "true"
USER_OPS_INDEXER__INDEXER__ENTRYPOINTS__V07: "true"
USER_OPS_INDEXER__INDEXER__PAST_DB_LOGS_INDEXER__ENABLED: "true"
USER_OPS_INDEXER__INDEXER__PAST_DB_LOGS_INDEXER__END_BLOCK: "0"
USER_OPS_INDEXER__INDEXER__PAST_DB_LOGS_INDEXER__START_BLOCK: "-100000"
USER_OPS_INDEXER__INDEXER__PAST_RPC_LOGS_INDEXER__BLOCK_RANGE: "1000"
USER_OPS_INDEXER__INDEXER__PAST_RPC_LOGS_INDEXER__ENABLED: "true"
USER_OPS_INDEXER__INDEXER__REALTIME__ENABLED: "true"
USER_OPS_INDEXER__INDEXER__RPC_URL: ws://host.docker.internal:8545/
USER_OPS_INDEXER__JAEGER__AGENT_ENDPOINT: localhost:6831
USER_OPS_INDEXER__JAEGER__ENABLED: "false"
USER_OPS_INDEXER__METRICS__ADDR: 0.0.0.0:6060
USER_OPS_INDEXER__METRICS__ENABLED: "true"
USER_OPS_INDEXER__METRICS__ROUTE: /metrics
USER_OPS_INDEXER__SERVER__GRPC__ADDR: 0.0.0.0:8051
USER_OPS_INDEXER__SERVER__GRPC__ENABLED: "false"
USER_OPS_INDEXER__SERVER__HTTP__ADDR: 0.0.0.0:8050
USER_OPS_INDEXER__SERVER__HTTP__ENABLED: "true"
USER_OPS_INDEXER__SERVER__HTTP__MAX_BODY_SIZE: "2097152"
USER_OPS_INDEXER__TRACING__ENABLED: "false"
USER_OPS_INDEXER__TRACING__FORMAT: default
(LOG) {
log {
format json {
time_format "iso8601"
}
output file "{args[0]}" {
roll_size 100mb
roll_keep 3
roll_keep_for 7d
}
}
}
(TLS) {
# TLS 配置采用 https://mozilla.github.io/server-side-tls/ssl-config-generator/ 生成,SSL Labs 评分 A+
protocols tls1.2 tls1.3
ciphers TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
}
(HSTS) {
# HSTS (63072000 seconds)
header / Strict-Transport-Security "max-age=63072000"
}
# 聚合上面的配置片段为新的片段
(COMMON_CONFIG) {
encode zstd gzip
tls {
import TLS
}
import HSTS
}
import /srv/*.caddy
https://scan.cmp20.bitheart.org {
header {
# CORS设置
Access-Control-Allow-Origin "*"
Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Access-Control-Allow-Headers "*"
Access-Control-Allow-Credentials "true"
Access-Control-Max-Age "3600"
Vary "Origin"
# 安全headers
Strict-Transport-Security "max-age=31536000; includeSubDomains"
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
X-XSS-Protection "1; mode=block"
}
@options {
method OPTIONS
}
respond @options 204
reverse_proxy http://172.17.0.1:39080 {
header_down -Access-Control-Allow-Origin
header_down -Access-Control-Allow-Methods
header_down -Access-Control-Allow-Headers
header_down -Access-Control-Allow-Credentials
header_down -Access-Control-Max-Age
}
}
https://statapi.scan.cmp20.bitheart.org {
header {
# CORS设置
Access-Control-Allow-Origin "*"
Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Access-Control-Allow-Headers "*"
Access-Control-Allow-Credentials "true"
Access-Control-Max-Age "3600"
Vary "Origin"
# 安全headers
Strict-Transport-Security "max-age=31536000; includeSubDomains"
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
X-XSS-Protection "1; mode=block"
}
@options {
method OPTIONS
}
respond @options 204
reverse_proxy 172.17.0.1:38080 {
header_down -Access-Control-Allow-Origin
header_down -Access-Control-Allow-Methods
header_down -Access-Control-Allow-Headers
header_down -Access-Control-Allow-Credentials
header_down -Access-Control-Max-Age
}
}
https://viaapi.scan.cmp20.bitheart.org {
header {
# CORS设置
Access-Control-Allow-Origin "*"
Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Access-Control-Allow-Headers "*"
Access-Control-Allow-Credentials "true"
Access-Control-Max-Age "3600"
Vary "Origin"
# 安全headers
Strict-Transport-Security "max-age=31536000; includeSubDomains"
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
X-XSS-Protection "1; mode=block"
}
@options {
method OPTIONS
}
respond @options 204
reverse_proxy 172.17.0.1:38081 {
header_down -Access-Control-Allow-Origin
header_down -Access-Control-Allow-Methods
header_down -Access-Control-Allow-Headers
header_down -Access-Control-Allow-Credentials
header_down -Access-Control-Max-Age
}
}
version: '3'
networks:
exchain:
ipam:
driver: default
config:
- subnet: 172.80.0.0/16
services:
caddy:
image: caddy:latest
restart: unless-stopped
environment:
- XDG_CONFIG_HOME=/config
- XDG_DATA_HOME=/data
- CADDY_ADMIN=0.0.0.0:2019
ports:
- "80:80"
- "443:443"
- "2019:2019"
volumes:
- ./caddy/Caddyfile:/etc/caddy/Caddyfile
- ./caddy/data:/data
- ./caddy/certs:/certs
- ./caddy/config:/config
- ./caddy/root:/srv
- ./caddy/logs:/var/log/caddy
# bellow is services for blockscout.
backend:
command:
- sh
- -c
- bin/blockscout eval "Elixir.Explorer.ReleaseTasks.create_and_migrate()" && bin/blockscout start
container_name: backend
depends_on:
- db
- redis-db
env_file:
- "blockscout_backend.env"
extra_hosts:
- host.docker.internal=host-gateway
image: blockscout/blockscout:latest
links:
- db:database
networks:
- exchain
restart: always
volumes:
- "./data/blockscout/logs:/app/logs"
- "./data/blockscout/dets:/app/dets"
db:
command:
- postgres
- -c
- max_connections=200
- -c
- client_connection_check_interval=60000
container_name: db
depends_on:
db-init:
condition: service_completed_successfully
required: true
environment:
POSTGRES_DB: blockscout
POSTGRES_PASSWORD: ceWb1MeLBEeOIfk65gU8EjF8
POSTGRES_USER: blockscout
healthcheck:
test:
- CMD-SHELL
- pg_isready -U blockscout -d blockscout
timeout: 5s
interval: 10s
retries: 5
start_period: 10s
image: postgres:17
networks:
- exchain
ports:
- target: 5432
published: "7432"
restart: always
shm_size: "268435456"
user: 2000:2000
volumes:
- "./data/blockscout/db-data:/var/lib/postgresql/data"
db-init:
entrypoint:
- sh
- -c
- |
chown -R 2000:2000 /var/lib/postgresql/data
image: postgres:17
networks:
- exchain
volumes:
- "./data/blockscout/db-data:/var/lib/postgresql/data"
frontend:
container_name: frontend
depends_on:
- backend
env_file:
- "blockscout_frontend.env"
image: ghcr.io/blockscout/frontend:v2.0.0
#image: ghcr.io/blockscout/frontend:latest
networks:
- exchain
restart: always
blockscout-proxy:
container_name: proxy
depends_on:
- backend
- frontend
- stats
environment:
BACK_PROXY_PASS: http://backend:4000
FRONT_PROXY_PASS: http://frontend:3000
extra_hosts:
- host.docker.internal=host-gateway
image: nginx
networks:
- exchain
ports:
- "39080:80"
- "38080:8080"
- "38081:8081"
volumes:
- "./proxy:/etc/nginx/templates"
redis-db:
command:
- redis-server
container_name: redis-db
image: redis:alpine
networks:
- exchain
volumes:
- "./data/blockscout/redis-data:/data"
sig-provider:
container_name: sig-provider
image: ghcr.io/blockscout/sig-provider:latest
networks:
- exchain
restart: always
stats:
container_name: stats
depends_on:
- backend
- stats-db
env_file:
- "blockscout_stats.env"
extra_hosts:
- host.docker.internal=host-gateway
image: ghcr.io/blockscout/stats:latest
networks:
- exchain
restart: always
stats-db:
command:
- postgres
- -c
- max_connections=200
container_name: stats-db
depends_on:
stats-db-init:
condition: service_completed_successfully
required: true
environment:
POSTGRES_DB: stats
POSTGRES_PASSWORD: n0uejXPl61ci6ldCuE2gQU5Y
POSTGRES_USER: stats
healthcheck:
test:
- CMD-SHELL
- pg_isready -U stats -d stats
timeout: 5s
interval: 10s
retries: 5
start_period: 10s
image: postgres:17
networks:
- exchain
ports:
- target: 5432
published: "7433"
restart: always
shm_size: "268435456"
user: 2000:2000
volumes:
- "./data/blockscout/stats-db-data:/var/lib/postgresql/data"
stats-db-init:
entrypoint:
- sh
- -c
- |
chown -R 2000:2000 /var/lib/postgresql/data
image: postgres:17
networks:
- exchain
volumes:
- "./data/blockscout/stats-db-data:/var/lib/postgresql/data"
user-ops-indexer:
container_name: user-ops-indexer
depends_on:
- backend
- db
env_file:
- "blockscout_user_ops_indexer.env"
extra_hosts:
- host.docker.internal=host-gateway
image: ghcr.io/blockscout/user-ops-indexer:latest
networks:
- exchain
restart: always
visualizer:
container_name: visualizer
environment:
VISUALIZER__SERVER__GRPC__ENABLED: "false"
image: ghcr.io/blockscout/visualizer:latest
networks:
- exchain
restart: always
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name localhost;
proxy_http_version 1.1;
location ~ ^/(api(?!-docs$)|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;
}
}
server {
listen 8080;
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' '*' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'PUT, GET, POST, OPTIONS, DELETE, PATCH' always;
location / {
proxy_pass http://stats:8050/;
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;
}
}
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' '*' 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' '*' 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;
}
}
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name localhost;
proxy_http_version 1.1;
location ~ ^/(api(?!-docs$)|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;
}
}
\ No newline at end of file
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 8080;
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;
location / {
proxy_pass http://stats:8050/;
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;
}
}
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;
}
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment