快速完成开发、生产的环境搭建,包含 node、mongodb、nginx 等。

nvm

  1. $ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
  2. $ source ~/.bashrc

nodejs

  1. $ nvm install 7.9.0
  2. # 配置淘宝源
  3. $ npm config set registry https://registry.npm.taobao.org
  4. $ yarn config set registry https://registry.npm.taobao.org

mongodb

详细请参考官网 install-mongodb-on-red-hat

Linux

  1. # 配置 Repo
  2. $ vi /etc/yum.repos.d/mongodb-org-3.6.repo
  3. # repo 内容 -- Start
  4. [mongodb-org-3.6]
  5. name=MongoDB Repository
  6. baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
  7. gpgcheck=1
  8. enabled=1
  9. gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
  10. # repo 内容 -- End
  11. # 安装
  12. $ yum install -y mongodb-org
  13. # 启动|关闭|重启
  14. $ service mongod start|stop|restart
  15. # 开机启动
  16. $ chkconfig mongod on
  17. # 连接
  18. $ mongo --host <host>:27017 -u <user> -p <password> <dbname>

Mac

  1. # 安装
  2. $ brew update
  3. $ brew install mongodb
  4. # 启动
  5. $ mongod
  6. # 连接
  7. $ mongo --host <host>:27017 -u <user> -p <password> <dbname>

常用命令

  1. > use <dbname>
  2. > db.createUser({ user: '<username>', pwd: '<password>', roles: [{ role: 'readWrite', db: '<dbname>' }] })
  3. > db.auth('<username>', '<password>')
  4. > help
  5. > db.help()
  6. > show dbs
  7. > show collections
  8. > db.<collectionname>.find()
  9. > db.<collectionname>.remove({})

备份与恢复

  1. # 备份
  2. $ mongodump -h <host> -d <dbname> -o <dbdirectory>
  3. # 恢复
  4. $ mongorestore -h <host> -d <dbname> --dir <dbdirectory>

nginx

Linux

  1. # 安装
  2. $ yum install nginx
  3. # 启动|关闭|重启
  4. $ service nginx start|stop|restart
  5. $ systemctl start|stop|restart nginx.service

Mac

  1. # 安装
  2. $ brew update
  3. $ brew install nginx
  4. # 启动
  5. $ sudo nginx
  6. # 重新加载配置|重启|停止|退出
  7. $ sudo nginx -s reload|reopen|stop|quit
  8. # 测试配置是否有语法错误
  9. $ sudo nginx -t
  10. # 配置
  11. /usr/local/etc/nginx/nginx.conf
  12. /etc/nginx/nginx.conf

SPA 路由

现在 Web 项目基本上都是单页面应用(SPA),其路由是内部控制,需要在 nginx 做特殊配置支持。

  1. location / {
  2. index index.html index.htm;
  3. try_files $uri $uri/ /index.html;
  4. }

gzip

默认情况下,nginx 的 gzip 压缩是关闭的。

  1. ## Compression
  2. gzip on;
  3. gzip_min_length 1024;
  4. gzip_buffers 4 8k;
  5. gzip_comp_level 3;
  6. gzip_http_version 1.0;
  7. gzip_disable "msie6";
  8. gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/jpeg image/bmp image/png image/gif;
  9. gzip_vary on;

具体说明:

  • gzip_min_length

    最小压缩的页面,如果页面过于小,可能会越压越大,这里规定大于1K的页面才启用压缩。

  • gzip_buffers

    设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。

  • gzip_comp_level

    压缩级别,1压缩比最小处理速度最快,9压缩比最大但处理最慢,同时也最消耗CPU,一般设置为3就可以了。

  • gzip_types

    什么类型的页面或文档启用压缩。

使用 proxy_pass 反向代理时,cookie 丢失的问题

  1. 如果只是host、端口转换,则cookie不会丢失。例如:
  1. location /project {
  2. proxy_pass http://127.0.0.1:8080/project;
  3. }

通过浏览器访问http://127.0.0.1/project时,浏览器的cookie内有jsessionid。再次访问时,浏览器会发送当前的cookie。

  1. 如果路径也变化了,则需要设置cookie的路径转换,nginx.conf的配置如下 location /proxy_path {
    1. proxy_pass http://127.0.0.1:8080/project;
    }

通过浏览器访问http://127.0.0.1/proxy_path时,浏览器的cookie内没有jsessionid。再次访问时,后台当然无法获取到cookie了。 详细看了文档:http://nginx.org/en/docs/http/ngx_http_proxy_module.html?&_ga=1.161910972.1696054694.1422417685#proxy_cookie_path

加上路径转换:proxy_cookie_path /project /proxy_path;

则可以将project的cookie输出到proxy_path上。正确的配置是:

  1. location /proxy_path {
  2. proxy_pass http://127.0.0.1:8080/project;
  3. proxy_cookie_path /project /proxy_path;
  4. }