导航

CentOS 部署 Next.js 项目

部署思路

将 Next.js 的项目配置成系统的一个服务,然后用 systemctl 来控制.

基础配置

安装 node, yarn

yum install node
yum install yarn

获取项目并构建

从git获取项目源码

git clone {your_repo}

安装依赖

yarn install

编译构建

yarn build (等同于 next build, 在package.json中配置)

尝试运行

yarn start (等同于 next start)

访问你的服务器的 3000 端口,check 是否运行正常

配置系统服务

要自定义一个service, 需要在 /etc/systemd/system/ 目录下创建 {your_service_name}.service 的文件

cd /etc/systemd/system/
vim next_app.service

创建好后,编辑这个文件:

cd /etc/systemd/system/
vim next_app.service

内容如下:

Type=Simple
ExecStart=/usr/bin/yarn start
ExecStop=/usr/bin/yarn stop
Restart=always
User=root
Group=root
Environment=PATH=/usr/bin:/usr/local/bin
WorkingDirectory={your_next_project_dir}
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=bird_watching

[Install]
WantedBy=multi-user.target
  • Type: 指定服务的启动类型:

Simple: 适用于主进程一直保持运行的服务,systemd只关注主进程的存在; Forking: 适用于主进程启动后即退出,并在后台运行子进程的服务,systemd关注主进程和所有子进程的存在.
Next.js 应用通常以Node.js进程的形式运行,并且它的主进程会一直监听HTTP请求,处理路由等。这种情况下,主进程不会在启动后立即退出,而是持续运行,等待客户端请求并响应它们,所以这里选择Simple即可,当然如果选择Forking的话,也没有什么问题.

配置完成后,配置开机启动:

systemctl enable next_app

日志配置

在上面的service配置中,我们已经进行了日志的配置,

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=bird_watching

SyslogIdentifier 这里很重要,是用于从syslog中进行过滤日志的一个标识符.

接下来,我们在 /etc/rsyslog.d 文件夹下对我们的日志过滤规则进行配置.

创建配置文件,这个名字可以任意取,一般用你的next应用的名字即可

vim next_app.conf

进行如下配置:

if $programname == 'bird_watching' then /var/log/\{your_next_app\}.log
& stop

/var/log/{your_next_app}.log 就是最终输出的日志路径.
& stop:&符号表示在执行条件语句后,停止处理当前日志消息,这意味着一旦日志消息被路由到指定的文件,rsyslog将不再继续将它传递给任何其他规则或日志文件。

参考文档

How to create and manage services in CentOS 7 with systemd Managing system services with systemctl Basic Configuration of Rsyslog