部署nuxt3项目前后端

27 阅读1分钟

背景: 前端是nuxt3开发, 后端是由golang开发, 在 RockyLinux 中进行部署使用 nginx 代理

1. 配置前端和后端的 systemctl 服务

在 /etc/systemd/system 目录下, 创建前端的 xxx-frontend.service 文件

[Unit]
Description=zhzxxj frontend
After=network.target
Wants=network.target

[Service]
User=appuser
Group=appuser

WorkingDirectory=/opt/zhzxxj-frontend
ExecStart=/usr/bin/node /opt/zhzxxj-frontend/server/index.mjs
# Environment="NUXT_PUBLIC_API_BASE_URL=https://api.your-domain.com"

Restart=always
RestartSec=60
TimeoutStartSec=30
TimeoutStopSec=10

[Install]
WantedBy=multi-user.target

创建后端的 xxx-backend.service 文件

[Unit]
Description=zhzxxj backend
After=network.target mysql.service
Wants=network.target mysql.service

[Service]
User=appuser
Group=appuser
WorkingDirectory=/opt/zhzxxj-backend
ExecStart=/opt/zhzxxj-backend/zhzxxj
Environment="ZHZXXJ_ENV=prod"
Restart=always
RestartSec=60
TimeoutStartSec=30
TimeoutStopSec=10

[Install]
WantedBy=multi-user.target

然后刷新 systemctl

systemctl daemon-reload

然后就可以启动前端和后端

systemctl start xxx-frontend
systemctl start xxx-backend

2. 配置 nginx 

server {
	listen 80;

	location /api/ {
		proxy_pass http://localhost:8088/;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
	}

	location / {
		proxy_pass http://localhost:3000/;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
	}
}

3. 如果访问报 502 错误, 看 nginx 的 error.log 日志中有权限问题日志

*12 connect() to 127.0.0.1:3000 failed (13: Permission denied) while connecting to upstream

应该是 SELinux 的 httpd_can_network_connect 问题 

getsebool httpd_can_network_connect
返回
httpd_can_network_connect --> off

# 那么执行下面命令 -P 表示永久生效
setsebool -P httpd_can_network_connect on

4. 如果查看服务启动日志, 发现莫名的权限问题, 可以尝试以下方式解决

# 查看服务启动日志
journalctl -u zhzxxj-backend -f


#临时关闭SELinux
setenforce 0

#恢复SELinux
setenforce 1

#查看SELinux状态
getenforce

重新恢复SELinux上下文
restorecon -Rv /opt/zhzxxj-backend