服务器部署web项目
买了一台2核4G的服务云服务器,装完Nginx,器部把Vue打包出来的项目dist文件夹往/var/www/html一扔,浏览器打开IP——白屏。服务F12一看,器部JS文件404。项目这种事我遇到过不下五次,服务每次都是器部路径配错了。 服务器部署Web项目,项目本质就三件事:文件放对位置、服务Web服务器指对目录、器部运行环境别缺东西。项目听起来简单,服务但每一步都有坑。器部 Linux的项目目录结构有约定俗成的规矩。静态文件放 有人喜欢把项目扔在 网上教程给的配置模板大概长这样: 关键在 后端API要反向代理的话,加个location: 注意 后端如果是Node项目, 最后那条 还有,别用root跑Node服务。建个专用用户, MySQL默认只监听 Node应用连数据库用 现在浏览器对HTTP站点直接标“不安全”,微信小程序之类的平台强制要求HTTPS。Let's Encrypt证书免费,certbot工具一条命令搞定: certbot会自动改Nginx配置,加上SSL相关指令,还会设置定时任务自动续期。证书90天过期,但自动续期跑着的话,你根本不用管。 部署这件事,第一次做处处是坑,做多了就是肌肉记忆。核心原则就一条:每一步都搞清楚为什么这么做,别只是复制粘贴命令。出了问题,知道去哪看日志——Nginx的文件到底放哪
/var/www/下面,这是Debian系发行版的传统。CentOS可能用/usr/share/nginx/html。但说实话,放哪都行,只要Nginx配置里的root指向对。我个人的习惯是在/var/www/下按项目名建目录,比如/var/www/myapp,前端后端分开放。/home下自己的用户目录里。能跑,但SELinux开着的话权限会卡你半天。我吃过这个亏,后来老老实实回到/var/www。Nginx配置不是复制粘贴就完事
server { listen 80; server_name example.com; root /var/www/myapp; index index.html; location / { try_files $uri $uri/ /index.html; } }try_files那行。Vue Router用history模式的话,不加这行,刷新页面直接404。因为/about这个路径在服务器上根本不存在对应的文件,Nginx找不到就报错。try_files的意思是:先找$uri,找不到找目录,再找不到就返回index.html,让前端路由自己处理。location /api/ { proxy_pass http://127.0.0.1:3000/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }proxy_pass末尾那个斜杠。带斜杠和不带斜杠,转发路径完全不一样。这地方我第一次配的时候调了半小时才反应过来。Node服务别用root跑
node app.js直接跑在终端里,SSH一断服务就没了。用nohup或screen能凑合,但正经做法是上pm2。npm install -g pm2 pm2 start app.js --name myapp pm2 save pm2 startuppm2 startup会生成一段命令,复制粘贴执行一遍,服务器重启后pm2会自动拉起你的应用。别忘了pm2 save,不然重启后进程列表是空的。chown把项目目录权限给它。万一应用被攻破,攻击者拿到的只是个低权限账户,不是整台机器。数据库和端口那些事
127.0.0.1,这是对的。别图省事改成0.0.0.0,然后3306端口裸奔在公网上。我扫过一些IP段,暴露的MySQL端口不要太多,弱密码一撞一个准。127.0.0.1就行,走本地回环,不经过外网网卡,速度快也安全。防火墙规则里,只放行80和443,SSH端口改个非22的,能挡掉大量自动化扫描。HTTPS不是可选项
certbot --nginx -d example.com -d www.example.com/var/log/nginx/error.log,pm2的pm2 logs,系统层面的journalctl -u nginx。日志比任何教程都管用。
-
上一篇
-
下一篇
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-