本篇主要记录项目部署上线过程,window环境下开发完成项目后同步代码到服务器,服务器端环境配置,项目运行
内容列表
- 服务器
- IP地址
- 域名
- SSL
- 网站备案
- 服务器配置
- window上同步代码环境配置
- 服务器运行项目
- 浏览器查看
服务器
线下实体服务器
有钱可置办,当然也可以自己把电脑做服务器,需要花些时间配置
线上云服务器
便宜,省事
IP地址
线下实体服务器
申请购买,配置
线上云服务器
已经帮我们配置好了
域名
有了服务器和IP之后就可以访问到服务器了,但是只能通过IP地址访问,不方便记忆,使用名字访问需要去申请域名
SSL
用于https
网站备案
玩网站的服务器
服务器配置 (centOS 7)
刚买的服务器,一般需要跟新些软件包
yum update
看项目架构安装一些其他包,node,MongoDB,Mysql ,nginx等
- 安装node
yum install nodejs
安装完成后,查看下node版本
node -v
yum install安装的版本取决于yum源
如果版本比较低或不是自己想要的
可直接跟新源,也可先确认下目前有那些版本
yum --showduplicates list nodejs | expand
如果未发现有新版本,可以更新yum源再安装
curl --silent --location rpm.nodesource.com/setup_10.x | bash -
yum install nodejs
-
安装MongoDB
1、建yum源[根据版本设置源]
vim /etc/yum.repos.d/mongodb-org-4.0.repo
写入如下配置
```
[mongodb-org-4.0]
name = MongoDB Repository
baseurl = https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/
gpgcheck = 1
enabled = 1
gpgkey = https://www.mongodb.org/static/pgp/server-4.0.asc
```
再执行以下命令
yum install -y mongodb-org
建议钉下包,以免跟新版本时,yum帮着升级了软件包
/etc/yum.conf
写入如下配置
```
exclude = mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools
```
如果想要本地代码连接远程MongoDB,需要使用 用户授权和auth登录,MongoDB初始时是没有账号和密码的,需要添加一个,在授权
- 安装nginx
yum install nginx (或者使用其他工具安装)
1、将申请好的Nginx SSL 文件:
- 1_www.domain.com_bundle.crt 证书文件
- 2_www.domain.com.key 私钥文件
同步到 Nginx 服务器的 /usr/local/nginx/conf 目录下(这里随便放哪里都可以,配置时使用对应路径就行)
2、编辑 Nginx 根目录下的 nginx.conf 文件。修改内容如下:
```
server {
listen 443; #SSL 访问端口号为 443
server_name www.domain.com; #填写绑定证书的域名
ssl on; #启用 SSL 功能
ssl_certificate 1_www.domain.com_bundle.crt; #证书文件名称,放置文件的路径
ssl_certificate_key 2_www.domain.com.key; #私钥文件名称,放置文件的路径
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #请按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #请按照这个套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_prefer_server_ciphers on;
#可做代理,代理到不同后台服务器,node ,java 等,
location / {
root /var/www/www.domain.com; #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
index index.html index.htm;
}
}
```
3、重启Nginx
nginx -s reload :修改配置后重新加载生效
4、浏览器访问报403 Forbidden
1.将nginx.config的user改为和启动用户一致
2.缺少index.html或者index.php文件,就是配置文件中index index.html index.htm这行中的指定的文件。
3.权限问题,如果nginx没有web目录的操作权限,也会出现403错误。
4.SELinux设置为开启状态(enabled)的原因。
这里是前两者原因,改好配置 重启Nginx,就能使用https访问了


5、HTTP 自动跳转 HTTPS 的安全配置(可选)
· 在页面中添加 JS 脚本。
· 在后端程序中添加重定向。
· 通过 Web 服务器实现跳转。
· Nginx 支持 rewrite 功能。若在编译时没有去掉 pcre,可在 HTTP 的 server 中增加 rewrite ^(.*) https://$host$1 permanent;,即可将默认80端口的请求重定向为 HTTPS。修改如下内容:
```
server {
listen 80;
server_name www.domain.com; #填写绑定证书的域名
rewrite ^(.*)$ https://$host$1 permanent; #把http的域名请求转成https
}
```
window上同步代码环境配置
我们一般在window,或者mac上写代码,然后再把代码同步到服务器上
mac开发环境比较好,省心
传代码 有些图形工具如xftp,这个太麻烦。使用脚本最好
用到make, rsync(替换了scp,功能更强大)
make => gnuwin32(老),新的是MSYS2 MINGW or Cygwin(首选)
这些工具不仅包含了make,还包含了其他一些类似unix,linux命令,比window自带的好用,一句话,美滋滋
安装的话,搜索对应名称下载安装就好
gnuwin32(不错),需要下载资源包(download.bat),跟新等,慢的很。搭建起来了就好了
可惜没有rsync包,需要自己配置,下载使用cwRsync
编写Makefile或者你喜欢的shell
``` Makefile
time:
rsync -avC --progress --exclude=node_modules/ ./* root@ip:/DEST
echo "upload xxxxxx over"
```
这个地方需要注意下需要同步代码的路径及隐藏文件。下文会提到
服务器运行项目
首先进入项目中,执行npm i 安装依赖,结果报图下错误

g++ Command not found,这个就是gcc没有安装,编译C的,用于node项目跨平台使用
yum -y update gcc 或者 yum -y install gcc+ gcc-c++
然后先把node_modules干掉,再npm i 安装依赖
提示:window上也需要配置相关环境,什么vs c++
启动项目看看能不能跑,报如下错误

babel转require语法报错
1、重新npm i 几次不行首先以为是依赖安装过程出错
2、怀疑是环境问题了,同步了python版本,使用nvm切换版本,与window上一致,重新npm i ,报错依旧
3、清理npm缓存,删除项目,重新上传代码,安装依赖,任然不行
4、看看是不是上传代码时丢文件了,最开始的时候想过这个问题,粗略看了下,没问题,加之理论上一般是不会出问题的,但是,仔细一看发现 文件首字符为.(英文句号)的隐藏文件没有( .babelrc)等。不出所料可以跑了。
问题出在rsync同步文件脚本本地文件目录选取问题,直接使用./* 当前目录下所有文件会同步,但不包含隐藏文件,子目录下的隐藏文件可以被同步,故替换下目录,使用上级文件目录即可
总结:也是醉了,最开始就想过这个问题,没有细致去比对文件,也是经验不足导致的。浪费了大量时间,总的来说知道了就好,然后就是代码最开始引入了babel-register 没有报错也是没有想过这个配置问题
浏览器查看
直接http,https访问网址,测试下能否跑通
基本上是没有问题,除了自己源代码写的问题
提示:
如果刷新浏览器白屏了
```
We're sorry but schedules doesn't work properly without JavaScript enabled. Please enable it to continue.
```
1、极大可能是前台路由配置的是history模式,后台需要相应配置。(改成hash,或者配置nginx,匹配不到直接转到首页)
2、也有可能是自己前端代码路由权限控制问题,router钩子函数中的处理逻辑
跑流程,增删改查:
发现添加的数据页面上没有保存,添加接口是请求成功的,然后再拉取数据,返回空结果,状态码304。发现get接口都是304
1、nginx配置问题
- 本地调试,通过代理直接正向代理到线上的node server,还是会出现上述问题,猜测应该不是nginx问题,因为并没有通过nginx做反向代理(没有走nginx监听的端口),get接口304
- 直接关闭nginx服务(这里可以不用关闭,毕竟直接访问node server,没有走nginx监听,做绝对测试条件),直接访问线上node server 地址及端口,还是出现上述问题。get接口304
- 这里不管是正向还是反向代理,后者直接访问都会去处理返回结果状态码,进行网络优化(相关服务器软件,框架自动做了优化)
2、数据库没有存入数据(但是之前都是可以成功)
- 数据库入库了,但是时间不对,2019-08-2创建的确都是2019-07-30计划,但是时间戳又没问题
3、代码问题
- 紧接第二步排查问题 time-formater格式化问题,所有换成本地开发环境,发现是没有任何问题。但不排除time-formater在window和在linux 上格式化问题(极小概率)
- 觉得可能是是MongoDB版本问题,本地3.4,线上4.0版本,但是版本不同一般体现在api使用问题上,当前还是可以存入数据的,故为小概率
- mongoose (感觉是主要问题)创建Schema 时 时间字段默认值导致。虽然在本地上没有问题,有可能是系统平台原因,下载的包不同,改后确实生效
