diff --git a/.env.example b/.env.example index b111bba..ac8c748 100644 --- a/.env.example +++ b/.env.example @@ -21,3 +21,4 @@ RATE_LIMIT_DELAY_MULTIPLIER_MS= # Redis connection REDIS_URL= +REDIS_USE_TLS= diff --git a/Caddyfile b/Caddyfile new file mode 100644 index 0000000..d40ed5e --- /dev/null +++ b/Caddyfile @@ -0,0 +1,4 @@ +interchange-api.bchen.dev { + reverse_proxy app:4000 +} + diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..8dc8e9a --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,52 @@ +# self hosted server setup using Caddy + +x-common-environment: &common-server-environment + APNS_IS_PRODUCTION: ${APNS_IS_PRODUCTION} + APNS_BUNDLE_ID: ${APNS_BUNDLE_ID} + APNS_TEAM_ID: ${APNS_TEAM_ID} + APNS_KEY_ID: ${APNS_KEY_ID} + APNS_PRIVATE_KEY: ${APNS_PRIVATE_KEY} + PARKING_LOGGING_INTERVAL_MS: ${PARKING_LOGGING_INTERVAL_MS} + REDIS_URL: redis://redis:6379 + REDIS_USE_TLS: 0 + RATE_LIMITS_DISABLED: ${RATE_LIMITS_DISABLED} + RATE_LIMIT_WINDOW_MS: ${RATE_LIMIT_WINDOW_MS} + RATE_LIMIT_DELAY_AFTER_REQUESTS: ${RATE_LIMIT_DELAY_AFTER_REQUESTS} + RATE_LIMIT_DELAY_MULTIPLIER_MS: ${RATE_LIMIT_DELAY_MULTIPLIER_MS} + +services: + app: + build: . + command: npm run start + restart: unless-stopped + depends_on: + - redis + environment: + <<: *common-server-environment + NODE_ENV: production + + redis: + image: redis/redis-stack:7.2.0-v17 + container_name: redis-timeseries + restart: unless-stopped + volumes: + - redis_data:/data + - ./redis-stack.conf:/redis-stack.conf + command: redis-stack-server /redis-stack.conf + + caddy: + image: caddy:2-alpine + restart: unless-stopped + ports: + - "80:80" + - "443:443" + - "443:443/udp" + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile + - caddy_data:/data + - caddy_config:/config + +volumes: + redis_data: + caddy_data: + caddy_config: diff --git a/docker-compose.yml b/docker-compose.yml index 4748e8b..8a540ab 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,6 +12,7 @@ x-common-environment: &common-server-environment APNS_PRIVATE_KEY: ${APNS_PRIVATE_KEY} PARKING_LOGGING_INTERVAL_MS: ${PARKING_LOGGING_INTERVAL_MS} REDIS_URL: redis://redis:6379 + REDIS_USE_TLS: 0 RATE_LIMITS_DISABLED: ${RATE_LIMITS_DISABLED} RATE_LIMIT_WINDOW_MS: ${RATE_LIMIT_WINDOW_MS} RATE_LIMIT_DELAY_AFTER_REQUESTS: ${RATE_LIMIT_DELAY_AFTER_REQUESTS} diff --git a/src/helpers/createRedisClientForRepository.ts b/src/helpers/createRedisClientForRepository.ts index 55312fd..73ad76e 100644 --- a/src/helpers/createRedisClientForRepository.ts +++ b/src/helpers/createRedisClientForRepository.ts @@ -5,10 +5,11 @@ export default function createRedisClientForRepository() { const client = createClient({ url: process.env.REDIS_URL, socket: { - tls: process.env.NODE_ENV === 'production', + tls: process.env.REDIS_USE_TLS === "1", rejectUnauthorized: false, reconnectStrategy: REDIS_RECONNECT_INTERVAL, - }, + } as object, }); return client as RedisClientType; } +