Web项目部署指南

本文记录了部署Vue项目到阿里云服务器上的过程,其中云服务器的操作系统是CentOS 7,Web服务器用的是nginx。因为项目涉及发送异步请求,而由Flask编写的后端应用监听的并非80端口,存在跨域的问题,在部署Vue项目的过程中给我带来了困扰,因此将部署Flask应用的过程一并记录。

安装和配置nginx

  • 安装并启动nginx

    yum install -y nginx
    systemctl start nginx
    systemctl status nginx
  • 上传打包后的项目到/var/www/目录

    mkdir -p /var/www
    cd /var/www && unzip dist.zip
    chown -R nginx:nginx /var/www/

    这里需要注意的是需要使用chown命令修改目录/var/www/的所有者是nginx,否则通过浏览器访问应用时会提示Internal Server Error,而通过查看nginx日志文件发现这一异常状况是由权限问题引起的:“stat() "xxx" failed (13: Permission denied)”

  • 配置nginx

  1. 首先要通过配置安全组规则,确保云服务器允许公网通过HTTP、HTTPS等服务访问实例

  2. 修改nginx配置文件

    vi /etc/nginx/nginx.conf
    http {
    // 省略部分内容
    server {
    listen 80;
    server_name xxx.xxx.xxx.xxx;
    location / {
    root /var/www/dist/;
    try_files $uri $uri/ @router;
    index index.html index.htm;
    }
    location @router {
    rewrite ^.*$ /index.html last;
    }
    }
    }
  • 重启nginx

    nginx -s reload

部署Flask项目

项目采用Gunicorn作为WSGI容器,用Supervisor管理进程,另外还用到了部分Flask插件,比如flask-cors。

  • 准备Python环境

    conda create --name flask Python
    conda activate flask conda install flask
    pip install flask-cors
    pip install gunicorn
    pip install supervisor
  • 配置supervisor

    # 创建目录,初始化配置文件
    mkdir -p /usr/supervisor/supervisord.d
    echo_supervisord_conf > /usr/supervisor/supervisord.conf # 修改supervisor配置文件
    vi /usr/supervisor/supervisord.conf
    [include]
    files = /usr/supervisor/supervisord.d/*.conf
  • 配置项目

    vi /usr/supervisor/supervisord.d/appname.conf
    [program:appname]   ; 每个program就是一个或一组进程
    directory = /root/Programs/app-folder/ ; 指定项目所在目录
    command = /opt/miniconda/envs/flask/bin/gunicorn -w 4 -b 0.0.0.0:5000 main:app ; 启动命令
    autorestart = true ; 设置在Supervisord启动的时候也自动启动
    startsecs = 5 ; 启动5秒后没有异常退出,就当作已经正常启动了
    startretries = 3 ; 启动失败自动重试次数,默认是3次
    user = root
    redirect_stderr = true

    这里注意不要配置nodaemon=True,否则会引发异常:“FATAL Exited too quickly (process log may have details)”

  • 启动supervisor

    # 启动supervisor
    supervisord -c /usr/supervisor/supervisord.conf
    # 查看supervisor
    supervisorctl -c /usr/supervisor/supervisord.conf
  • 解决跨源问题

    # 修改nginx配置文件
    vi /etc/nginx/nginx.conf
    http {
    // 省略部分内容
    server {
    listen 80;
    server_name xxx.xxx.xxx.xxx;
    // 省略部分内容
    location @router {
    rewrite ^.*$ /index.html last;
    }
    // 当请求跨域时配置端口转发
    location /api {
    proxy_pass http://xxx.xxx.xxx.xxx:5000/api;
    }
    }
    }

参考资料

Web项目部署指南的更多相关文章

  1. 如何将Java Web项目部署到服务器上

    转自:(此处更详细)http://blog.csdn.net/gulu_gulu_jp/article/details/50994003 一.前言 前面我们已经尝过了在云服务器上部署代码的甜头了,现在 ...

  2. 怎样将本地web项目部署到腾讯云服务器上?

    怎样将本地web项目部署到腾讯云服务器上? 1.本地计算机的工作: (1).用eclipse新建一个web项目,然后在webcontent下新建一个index.html,然后在本地部署到Tomcat服 ...

  3. Maven Web项目部署到Tomcat下问题

    但是也遇到了很多问题,下面记录一下Web项目部署到Tomcat下的问题 1.普通的WEB项目,就是虽然是用maven搭建的,但是没有使用profiles.xml文件来配置参数.这样的项目可以通过以下的 ...

  4. Spring整合Redis&JSON序列化&Spring/Web项目部署相关

    几种JSON框架用法和效率对比: https://blog.csdn.net/sisyphus_z/article/details/53333925 https://blog.csdn.net/wei ...

  5. web项目部署在不同环境中需要修改配置文件的解决方法

    web项目部署中存在的配置文件问题: web项目以war包的形式,部署在tomcat中,同时项目需要访问一些其他的东东,例如访问数据库,调用别的项目的API.在开发中,这些需要访问的外部地址通常以配置 ...

  6. Eclipse导入git上的maven web项目 部署 - lpshou

    http://www.tuicool.com/articles/fqm2Qf   推酷 文章 微博 主题 站点 活动 应用 周刊 登录   Eclipse导入git上的maven web项目 部署 - ...

  7. eclipse修改web项目部署路径 wtpwebapps webapps 的设置

    eclipse修改web项目部署路径 wtpwebapps   webapps  的设置,在添加完server------>tomcat后,到server控制台进行设置 eclipse默认的部署 ...

  8. eclipse中将web项目部署到tomcat

    eclipse中将web项目部署到tomcat. myeclipse部署WEB项目到tomcat比较方便,但eclipse貌似默认是不会替你将web自动部署到tomcat下的.你Run as该web项 ...

  9. 配置JDK、tomcat及Java Web项目部署

    一.JDK的安装 (1)下载安装JDK: 这个就不用说了,直接官网下载jdk安装即可.http://www.oracle.com/technetwork/java/javaee/downloads/i ...

随机推荐

  1. 内网渗透----使用mimikatz获取windows登陆口令

    使用mimikatz提取windows密码 以管理员运行后,可以随机打一些字符,进入如下界面 输入aaa::aaa,可展示所有模块: 可采用log命令,保存日志 获取hash与明文用户口令 privi ...

  2. MYSQL5.7详细安装步骤

    0.更换yum源 1.打开 mirrors.aliyun.com,选择centos的系统,点击帮助 2.执行命令:yum install wget -y 3.改变某些文件的名称 mv /etc/yum ...

  3. SINAMICS S120的核心控制单元CU320使用教程,电机模块接线

    SINAMICS是西门子公司新一代的驱动产品,它正在逐步取代现有的MASTERDRIVES及SIMODRIVE系列的驱动系统.SINAMICS S120是集V/f控制.矢量控制和伺服控制于一体的多轴驱 ...

  4. 序列化与反序列化、def的介绍与快速使用、cbv源码分析、APIView与request对象分析

    今日内容概要 序列化与反序列化 def介绍和快速使用 cbv源码流程分析 drf之APIView和Request对象分析 内容详细 1.序列化和反序列化 # api接口开发 最核心最常见的一个过程就是 ...

  5. 你能用Java覆盖静态方法吗?如果我在子类中创建相同的方法是编译时错误?

    不,你不能在Java中覆盖静态方法,但在子类中声明一个完全相同的方法不是编译时错误,这称为隐藏在Java中的方法.你不能覆盖Java中的静态方法,因为方法覆盖基于运行时的动态绑定,静态方法在编译时使用 ...

  6. 为什么 String 在 Java 中是不可变的?

    我最喜欢的 Java 面试问题,很棘手,但同时也非常有用.一些面试者也常问这个问题,为什么 String 在 Java 中是 final 的.字符串在 Java 中是不可变的,因为 String 对象 ...

  7. 什么是 NetflixFeign?它的优点是什么?

    Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 启发的 java 客户端联编程序.Feign 的第一个目标是将约束分母的复杂性统一到 http apis,而不考虑其稳定 ...

  8. JVM内存模型小结

    JVM运行时的数据区域划分图如下,该图是JVM内存模型最主要的内容. 从图中可以看出来,JVM将内存主要划分为五个部分:程序计数器.Java虚拟机栈.本地方法栈.Java堆和方法区.这些被划分为用途不 ...

  9. 两个对象值相同(x.equals(y) == true),但却可以有不同的hashcode?

    这个得看情况,如果该对象重写了equals方法,那么可能会出现equals相同,但hashcode不同的情况,但假如没有重写equals方法,那么它默认继承是Object的equals方法,根据源码可 ...

  10. MyBatis 实现一对一有几种方式?具体怎么操作的?

    有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次, 通过在 resultMap 里面配置 association 节点配置一对一的类就可以完成: 嵌套查询是先查一个表,根据这个表里面的结果的 ...