部署思路
将 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