You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04下systemd运行Node服务时NPM config配置未被检测到

Node/Express应用通过systemd启动时无法读取config配置的问题

我在Ubuntu 22.04.1 LTS虚拟机上部署了基于Node/Express的简单Web应用,使用NPM的config包读取存储数据库连接参数的环境变量。从项目根目录通过终端启动时,应用运行完全正常,能成功连接MySQL、执行存储过程并在浏览器显示数据表。

该应用在Windows 10上开发,推送至Ubuntu虚拟机私有仓库后拉取到专用虚拟机运行。仅当以systemd服务运行时出现问题:服务守护进程能正常启动,但会弹出警告WARNING: No configurations found in configuration folder /home/my_profile/Documents/project_folder/config;客户端发送请求后,路由处理器触发错误Error: Configuration property "database.host" is not defined。

我推测这可能是权限或相对路径问题,但对systemd不熟悉,config文件夹内是JSON格式文件,求解决思路?

相关文件

project_webservice.service

[Unit]
Description=Node Webserver
Wants=Network.target
After=syslog.target network-online.target

[Service]
Type=simple
WorkingDirectory=/home/my_profile/Documents/project_folder
ExecStart=/bin/bash ./startWebApp.sh
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target

index.js

const express = require('express');
const config = require('config');
const mysql = require('mysql');

const router = express.Router();

router.get('/', (req, res) => {
    const connection = mysql.createConnection({
        host: config.get('database.host'),
        user: config.get('database.user'),
        port: 3306,
        password: config.get('database.password'),
        database: config.get('database.name')
    });
    let viewData = {};

    connection.connect();
    connection.query("CALL get_summary_since_date('1990-01-01')",  (error, results, fields) => {
        if (error) throw error;
        viewData = {
            columns: fields[0],
            rows: results[0]
        };
        res.render('index.ejs', viewData);
    });
    connection.end();
});

module.exports = router;

custom-environment-variables.json

{
    "database": {
        "host": "DB_HOST",
        "user": "DB_USER",
        "password": "DB_PASSWORD",
        "name": "DB_DATABASE"
    }
}

default.json

{}

已尝试的解决方法

  • 切换.service文件ExecStart属性的绝对/相对路径
  • 将项目移至根目录,问题现象不变
  • 在index.js或service文件中设置NODE_CONFIG_DIR环境变量,无效
  • 给config文件夹设置全权限
  • 确认环境变量已配置
  • 在service中指定用户/组,无效
  • 用硬编码替代config.get()可临时解决,但不符合需求
  • 重新安装Ubuntu虚拟机测试,问题依旧
  • 改用JS模块格式配置文件,无效

内容的提问来源于stack exchange,提问作者cawln

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:46:04