首先我假设题主的应用已经在本地正常运行,功能测试完毕。现在遇到的问题是,怎么让这个应用在「网上」运行起来。
其实题主的问题在于对一些概念还不熟悉,只要熟悉之后就不会有疑问了。
-
网络应用需要运行在真正的服务器上,也就是你说的「放在哪」。
-
服务器基本就是一台电脑,你在本地怎么运行应用,在服务器上同样怎么运行。
-
通过命令行工具(Mac 的终端或 Windows 的 CMD)登录你的服务器,然后就和在本地电脑上基本一样了。
不过要想完全自己独立运行一个应用,除了应用本身之外,你还得了解一些其他的东西
服务器
服务器你可以选择阿里云或美团云的云服务器(ECS),最便宜的配置是一个月100块左右。对云服务器你几乎可以像对待自己电脑一样折腾(装系统,装软件,配置)。美团比阿里便宜一点。
你也可以选择虚拟主机,价格便宜,但权限有限,相当于用别人电脑。虚拟主机我没用过,就不多说了。
选服务器就像买电脑,你得先把电脑「买回来」。
买服务器的时候你需要选一下系统,一般都是 Linux。但是你会看到 CentOS、Ubuntu、Debian 等,这些是 Linux 的不同「版本」,彼此之间大同小异。不要选 Windows。
你可以选自己熟悉的,或者先去了解一下各自的优缺点后决定。我一直用 CentOS,最新版是 CentOS7 64位。
最后你会拥有一台装好 Linux 系统的服务器。通常你会有一个服务器 IP,和一组管理员用户名和密码,用来登录服务器。你在服务器上的所有操作都需要先登录后进行。
通过终端登录服务器的命令是 ssh root@xxx.xxx.xxx.xxx
。这个命令让你以 root 用户身份登陆服务器。
装软件
要运行一个完整的可以访问的应用,你大概需要以下几个软件:
Nginx:反向代理服务器,用来处理用户的访问请求。
Node.js:嗯。
npm:管理各种需要的库包,这个你应该已经很熟悉了。
数据库:安装你使用的数据库,也许是 MongoDB 或 MySQL。
上传
现在你需要把本地的应用上传到服务器。前面我没有说在服务器上的硬盘,如果你选的是阿里云或美团云的服务器的话,一般会有两块硬盘,一块系统盘,25G左右,另一块数据盘,容量是你自己选的。
美团的服务器给你的时候已经把数据盘加载好了,就是
/data
目录,阿里云的可能需要自己手动加载硬盘的,建议也加载到/data
目录,便于管理。
上传最原始的办法是 FTP,把你的应用文件夹上传到服务器的 /data
目录,除了 node_modules
文件夹不要上传,那里面是一大坨各种库。待会儿我们直接在服务器上安装它们。
不过现在通常会使用 Git 来上传。比如我一般是本地推到 Github,服务器再从 Github 取回。如何使用 Git 需要你单独学习。
运行应用
现在假设你已经把应用上传好了,也通过 npm install
命令装好了所有需要的库,那么现在应用就可以运行了。操作方法和你本地的一样,在「终端」里登录服务器,进入应用文件夹,运行 npm start
。
用这种方法启动应用,当你关闭「终端」时应用就停掉了。所以你需要一个工具——pm2。
npm install -g pm2
安装好之后,通过 pm2 start yourApp.js
来启动应用。关于 pm2 的使用请阅读文档,非常简单。
这里有一个需要你注意的问题就是「环境」。通常在本地开发时应用是运行在「development」环境的,但在服务器上要运行在「production」环境。运行环境是你在启动时指定的,比如 NODE_ENV=production pm2 start yourApp.js
就是告诉 pm2 以 production 环境启动应用。
这两种环境的区别是你自己写代码区分的,比如开发环境连接数据库使用一套用户名和密码,生产环境使用另一套,或者有些库只在开发环境加载,在生产环境不需要加载等等。
现在,你可以通过 <your server ip>:<your app port> 来访问应用了。比如假设你在本地访问应用是通过 localhost:3000
,那现在把 localhost
换成你的服务器 IP 就行。
域名和Nginx
上面那个访问地址太丑了,自己用用还行,不可能给用户公开使用。这是你需要有一个「域名」,并把它解析到你的服务器上。
关于注册域名,设置 DNS 解析,你需要单独学习。
有了域名之后,你可以通过<域名>:<端口>来访问应用了,这样还不行。通常用户只会通过「域名」访问服务,这其实就是访问的80端口(你的应用可能在3000端口上),所以我们需要 Nginx,把用户访问80端口的请求,转发到3000端口上。
你需要做的是修改 Nginx 的配置文件,实现这个功能。如何设置 Nginx 端口转发,你也需要单独学习。
总结
-
购买服务器(或虚拟主机);
-
安装必要的软件(Nginx、Node.js、npm、数据库等);
-
上传应用;
-
安装应用需要的依赖;
-
安装 pm2,使用 pm2 启动应用;
-
设置域名解析和 Nginx,使用户可以通过域名访问应用。
需要单独学习的东西:
-
选购服务器和系统
-
基本的 Linux 命令和操作
-
服务器上传
-
pm2 的使用
-
域名的购买和解析
-
Nginx 的使用和设置
扩展学习的东西:
-
SSH Key(免密码登录服务器)
-
Git 上传和版本管理
到此为止,你就可以运行起一个基本款的应用了。