remove default env values. correct package json with env vars . #6

Merged
APervov merged 3 commits from edge5modbus into main 2026-06-19 08:18:08 +00:00
7 changed files with 8 additions and 13 deletions
Showing only changes of commit cbe33500cf - Show all commits

View File

@@ -10,4 +10,4 @@ COPY public ./public
# Runtime mappers read JSON files from src/mappings, so they must be copied into the image.
NBizyaev marked this conversation as resolved
Review

в проекте нет папки public

(обычно, такую или подобную папку (assets) создают в проекте тогда,
когда нужно использовать какие-то файлы, которые лежат прямо в проекте,
например, файлы маппингов можно было бы вынести в общую папку mappings
и копировать её в контейнер, чтобы быть уверенным, что когда приложению понадобится читать файл маппинга,
то он будет найдет в общей папке mappings. Рекомендую. )

в проекте нет папки public (обычно, такую или подобную папку (assets) создают в проекте тогда, когда нужно использовать какие-то файлы, которые лежат прямо в проекте, например, файлы маппингов можно было бы вынести в общую папку mappings и копировать её в контейнер, чтобы быть уверенным, что когда приложению понадобится читать файл маппинга, то он будет найдет в общей папке mappings. Рекомендую. )
COPY src ./src
CMD ["npm", "run", "dev"]
CMD ["npm", "run", "start"]
NBizyaev marked this conversation as resolved Outdated

CMD ["npm", "run", "start"] - это антипаттерн для prod.
npm запускает node как дочерний процесс (например, SIGTERM от Docker при docker stop до node не доходит — контейнер висит 10 секунд до SIGKILL)

prod надо запускать так:

CMD ["node", "dist/index.js"] 

Скрипт

npm start  

используется во время разработки, чтоб проверить билд после npm build

CMD ["npm", "run", "start"] - это антипаттерн для prod. npm запускает node как дочерний процесс (например, SIGTERM от Docker при docker stop до node не доходит — контейнер висит 10 секунд до SIGKILL) prod надо запускать так: ``` CMD ["node", "dist/index.js"] ``` Скрипт ``` npm start ``` используется во время разработки, чтоб проверить билд после `npm build`

View File

@@ -3,9 +3,9 @@
"private": true,
"type": "module",
"scripts": {
"dev": "tsx watch --env-file=.env src/index.ts",
"dev": "tsx watch src/index.ts",
NBizyaev marked this conversation as resolved Outdated

мы зациклились
"dev": "tsx watch --env-file=.env src/index.ts", - это корректная строчка
потому что это запуск проекта разработчиком
на его, разработчика, компьютере
и переменные окружения он, разработчик, положил в файл .env или .env.* и разумеется хочет чтобы при запуске проекта у него локально, эти переменные окружения из этого файла использовались в его, разработчика, коде.

мы зациклились "dev": "tsx watch --env-file=.env src/index.ts", - это корректная строчка потому что это запуск проекта разработчиком на его, разработчика, компьютере и переменные окружения он, разработчик, положил в файл .env или .env.* и разумеется хочет чтобы при запуске проекта у него локально, эти переменные окружения из этого файла использовались в его, разработчика, коде.
"build": "tsc",
"start": "node --env-file=.env dist/index.js"
"start": "tsx src/index.ts"
NBizyaev marked this conversation as resolved Outdated

мы зациклились
"node --env-file=.env dist/index.js" - это корректная строчка
потому что это запуск билда разработчиком
на его, разработчика, компьютере
и переменные окружения он, разработчик, положил в файл .env или .env.* и разумеется хочет чтобы при запуске билда у него локально, эти переменные окружения из этого файла использовались в его, разработчика, коде.

Для запуска билда в продакшне мы будем использовать
CMD ["node", "dist/index.js"]
без указания конкретного .env
так как там в продакшн окружении будут указаны свои собственные значения переменных продакшн окружения.

мы зациклились "node --env-file=.env dist/index.js" - это корректная строчка потому что это запуск билда разработчиком на его, разработчика, компьютере и переменные окружения он, разработчик, положил в файл .env или .env.* и разумеется хочет чтобы при запуске билда у него локально, эти переменные окружения из этого файла использовались в его, разработчика, коде. Для запуска билда в продакшне мы будем использовать CMD ["node", "dist/index.js"] без указания конкретного .env так как там в продакшн окружении будут указаны свои собственные значения переменных продакшн окружения.
},
"dependencies": {
"@types/node": "^25.9.1",

View File

@@ -1,7 +1,4 @@
const DEFAULT_CLOUD_INGEST_URL = 'http://localhost:3101/ingest'
export const cloudIngestUrl =
process.env.CLOUD_INGEST_URL ?? DEFAULT_CLOUD_INGEST_URL
export const cloudIngestUrl = process.env.CLOUD_INGEST_URL as string
export function postCloudIngest(body: unknown): Promise<Response> {
return fetch(cloudIngestUrl, {

View File

@@ -5,9 +5,7 @@ import type { TopicHandler } from '../types.js'
export const TOPIC = 'data/edge5/modbus/v2'
const mapper = createMetricMapper({
filePath:
process.env.EDGE5_MODBUS_V2_MAPPING_FILE ??
new URL('../mappings/edge5-modbus.json', import.meta.url),
filePath: process.env.EDGE5_MODBUS_V2_MAPPING_FILE as string,
})
const REGISTER_COUNT = mapper.tagCount

View File

@@ -3,7 +3,7 @@ import { createServer } from 'node:http'
import { dirname, join } from 'node:path'
import { fileURLToPath } from 'node:url'
const httpPort = Number(process.env.HTTP_PORT ?? 80)
const httpPort = Number(process.env.HTTP_PORT)
const publicDir = join(dirname(fileURLToPath(import.meta.url)), '../../public')
const indexPath = join(publicDir, 'index.html')

View File

@@ -3,7 +3,7 @@ import mqtt from 'mqtt'
import { getRegisteredTopics } from './registry.js'
import { routeMessage } from './router.js'
const mqttUrl = process.env.MQTT_URL ?? 'mqtt://localhost:1883'
const mqttUrl = process.env.MQTT_URL as string
export const mqttClient = mqtt.connect(mqttUrl)

View File

@@ -1,7 +1,7 @@
import type { IncomingMessage } from 'http'
import { WebSocket, WebSocketServer } from 'ws'
const wsPort = Number(process.env.WS_PORT ?? 9090)
const wsPort = Number(process.env.WS_PORT)
const wss = new WebSocketServer({ port: wsPort, perMessageDeflate: false })
const clients = new Set<WebSocket>()