【发布时间】:2022-07-13 17:34:13
【问题描述】:
我是 AWS 的新手,我已经使用 linux 启动并配置了一个 EC2 实例。 我让服务人员自动启动程序并告诉它 .env 文件在哪里。 以下是我制作 service worker 文件的方法
sudo vim /etc/systemd/system/NodeServer.service
然后我将其粘贴到新创建的文件中
[Unit]
Description=My Node Server
After=multi-user.target
[Service]
ExecStart=/usr/bin/node /home/ec2-user/earmark-backend/dist/api/server.js
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=earmark-backend-server
User=ec2-user
EnvironmentFile=/home/ec2-user/earmark-backend/.env
[Install]
WantedBy=multi-user.target
为了创建 .env 文件,我运行了这个命令
sudo vim /home/ec2-user/earmark-backend/.env
在 .env 文件中我粘贴了这段代码
PLAID_CLIENT_ID=<env_var>
PLAID_SECRET=<env_var>
PLAID_ENV=sandbox
PLAID_PRODUCTS=auth,transactions
PLAID_COUNTRY_CODES=US,CA
PLAID_REDIRECT_URI=<env_var>
PORT=8080
URL=<env_var>
然后当我通过sudo systemctl start NodeServer.service 启动服务工作者并发出请求时,我收到错误"TypeError [ERR_HTTP_INVALID_HEADER_VALUE]: Invalid value \"undefined\" for header \"PLAID-CLIENT-ID\"\n
但是,如果我使用命令 PLAID_CLIENT_ID=<env_var> PLAID_SECRET=<env_var> PLAID_ENV=sandbox ...(rest of env vars) node ./dist/api/server.js 启动我的服务器,它可以工作并且可以读取环境变量。
有人知道为什么它无法读取我的 .env 文件吗?
另外,附带问题:我更希望让我的服务工作者 ExecStart 命令运行一个 bash 脚本,但我不确定如何设置该脚本。我有一个文件start.sh,里面有
#!/usr/bin/env bash
cd /home/ec2-user/earmark-backend
npm i
npm run clean
npm run build
npm run start
但它不起作用,我将如何正确格式化我的 .sh 文件以在启动时运行这些命令?
【问题讨论】:
-
看起来您以 root 身份创建了 .env 文件,但正在以 ec2 用户(无法读取 root 拥有的文件)身份运行 Node.js 服务。
-
@jarmod 谢谢!我删除了 .env 文件并使用命令
vim /home/ec2-user/earmark-backend/.env重新制作了它(删除了 sudo),它成功了!
标签: node.js linux amazon-web-services amazon-ec2