1、申请aws免费服务器
- 登录:https://aws.amazon.com/cn/console/ 点击右上角登录按钮
- 使用“根用户电子邮件登录”:
- 创建“新AWS账户”:
- 使用邮箱注册新账号:
- 从邮箱中获取验证码后填写到输入框中:
- 接下来的必填项请一路填写即可,一共有五页。
- 注册完毕后请进入:https://aws.amazon.com/cn/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc%2F%3Fp&c=wa&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all
选择:
- 进入以下界面后,点击”启动实例“按钮:
- 填写服务器参数后,点击“启动实例”:
- 这时你可以在“实例”页面的列表中看见你的服务器实例:
- 点击“实例ID”即可进入对应实例中,点击连接:
- 点击“连接”即可进入命令行界面对服务器进行管理了:
2、部署nextjs项目
nextjs的部署非常的简单,仅仅需要nodejs和pm2即可
- 安装n来管理nodejs的版本
- curl -L https://git.io/n-install | bash
- 安装完成后,关闭当前终端窗口并重新打开一个新的终端窗口,或者运行以下命令使”n”生效
source ~/.bashrc - 使用”n”来安装Node.js版本。例如,要安装最新版本的Node.js,运行以下命令:
n lts - 安装完成后,您可以使用以下命令查看已安装的Node.js版本
node -v - 使用”n”来切换Node.js版本。例如,如果您想切换到特定版本,可以运行以下命令:
n <version_number>
- 安装pm2来管理我的nextjs项目:
- npm install pm2 -g
pm2 –version - 项目package.json的scripts中加入:
“start”: “next start -p 3000”,
“build”: “next build && PORT=3000 npm start”, - pm2 start npm –name “nextjs-pyrhon-runner” — run build
- pm2 save
PS:”pm2 save”命令的作用是将当前正在运行的PM2进程列表保存到文件中,以便在系统重启后能够自动恢复这些进程。当您运行”pm2 save”命令时,PM2会将当前的进程列表保存到一个JSON文件中,通常是~/.pm2/dump.pm2文件。通过运行”pm2 save”命令,您可以确保在系统重启后,之前已经由PM2启动的应用程序将会自动重新启动,而不需要手动干预。这可以帮助您保持应用程序的持续运行和监控,提高系统的稳定性和可靠性。 - pm2 startup
PS:”pm2 startup”命令的作用是生成一个启动脚本,以便在系统启动时自动启动PM2进程管理工具,并恢复之前已经启动的应用程序。通过运行”pm2 startup”命令,PM2将生成一个启动脚本(通常是Systemd或Init脚本),并将其添加到系统启动项中,以确保在系统重新启动后,PM2及其管理的应用程序也会自动启动。这样,您无需手动启动PM2或重新启动已经运行的应用程序,系统启动时会自动执行这些操作,使您的Node.js应用程序持续运行并受到监控 - 您还可以使用PM2来监视应用程序、重新启动应用程序、停止应用程序等。以下是一些常用的PM2命令:
- 监视应用程序:pm2 monit
- 列出正在运行的应用程序:pm2 list
- 停止应用程序:pm2 stop
- 重新启动应用程序:pm2 restart
- npm install pm2 -g
3、nodejs调用python脚本
import { execFile } from 'child_process';
import { NextResponse } from 'next/server';
import path from 'path';
export async function GET(request: Request) {
try {
// const scriptPath = path.join(__dirname, '/opt/pys/script.py');
const result = await new Promise((resolve, reject) => {
execFile('python3', ["/opt/pys/script.py"], (error, stdout, stderr) => {
if (error) {
console.error('Error executing script:', error);
reject(error);
return;
}
try {
const result = JSON.parse(stdout);
console.log('Script output:', result);
resolve(result);
} catch (parseError) {
console.error('Error parsing script output:', parseError);
reject(parseError);
}
});
});
return NextResponse.json(result);
} catch (error) {
return NextResponse.error();
}
}