独立弄了一个项目,也是锻炼自己的工程能力,使用了比较常用的框架,后端Flask,前端Angular2,采用前后端完全分离的方式,通过接口传输json,但是在具体部署过程中,查找资料较为零散,故整理如下,希望能在自己提高的同时帮助别人。

一、部署环境

服务器架设在阿里云,linux环境为
* CentOS7.3
* mysql 5.6
* python2

二、Flask项目部署

flask项目具体就不详细介绍了,这里只把启动脚本列出,此处用nohup启动,当然还可以用supervisor启动。此例子中flask启动文件,名为 main.py

from flask_bootstrap import Bootstrap
from flask import Flask
from flask_cors import CORS app = Flask(__name__)
# 解决跨域问题
send_wildcard=True)
CORS(app, supports_credentials=True) if __name__ == '__main__':
app.run(host='0.0.0.0', port=8090,debug=True)

然后使用nohup在后台启动(尽量使用全路径)

nohup python main_test.py > main_test.log 2>&1 &

三、Angular2发布

1、安装nodejs

yum install -y nodejs
# 查看安装是否成功
node -v

2、安装angular cli

npm install -g @angular/cli

如果出现长时间加载,可切换淘宝镜像后再安装
安装淘宝镜像

npm install -g cnpm --registry=https://registry.npm.taobao.org

3、安装依赖包

在有package.json的目录下

npm install

IDE中运行

ng serve 或 npm install, 在localhost:4200中查看

4、打包

项目文件夹下生成dist文件,里面是打包后的文件。
在项目主目录下输入以下命令:

ng build
# 或者
ng build --prod

成功则输入类似于下面的信息:

Date: 2017-10-14T08:19:18.595Z
Hash: aa580b91f10a49a65d87
Time: 28823ms
chunk {inline} inline.bundle.js, inline.bundle.js.map (inline) 5.83 kB [entry] [rendered]
chunk {main} main.bundle.js, main.bundle.js.map (main) 55.9 kB {vendor} [initial] [rendered]
chunk {polyfills} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 217 kB {inline} [initial] [rendered]
chunk {styles} styles.bundle.js, styles.bundle.js.map (styles) 163 kB {inline} [initial] [rendered]
chunk {vendor} vendor.bundle.js, vendor.bundle.js.map (vendor) 5.74 MB [initial] [rendered]

并生成了新的目录dist及其下的子文件/目录,此时则成功将应用编译成静态资源。

5、如果提示版本不兼容 则需要安装指定版本的Angular CLI 或者升级nodejs

5.1 升级nodejs

如果nodejs版本较低,可以用一种非常简单的方法来管理你的Node版本,即使用Node Binary管理模块“n”。

1)首先:查看当前node版本:node –v

2)安装n模块:

npm install -g n

3)升级到指定版本/最新版本(该步骤可能需要花费一些时间)升级之前,可以执行n ls (查看可升级的版本)

n 6.9.1

或者你也可以告诉管理器,安装最新的稳定版本

n stable

4)安装完成后,查看Node的版本,检查升级是否成功 node -v

注:如果得到的版本信息不正确,你可能需要重启机器

扩展说明:
有很多同学会发现,安装完成之后,用node –v查看,还是老版本,安装未生效。

原因:
n 切换之后的 node 默认装在 /usr/local/bin/node,先用 which node 检查一下当前使用的 node 是否是这个路径下的。如上缘由,一般都是因为当前版本指定到了其他路径,更新下/etc/profile文件指定即可。轻松解决。

5.2 安装的特定版本的 Angular CLI

此处以安装的Angular CLI 5.2.0的版本为例

卸载之前的版本

npm uninstall -g @angular/cli

清除缓存,确保卸载干净

npm cache verify ,在低版本的nodejs里面清除缓存使用的命令是npm cache clean

检查是否卸载干净,输入命令

ng -v # 若显示command not found则卸载干净

安装指定版本

npm install -g @angular/cli@1.5.2

检查版本号 看是否安装成功

ng -v

6、Error: Local workspace file ('angular.json') could not be found 报错处理

如果执行 ng build --prod 时报错

Error: Local workspace file ('angular.json') could not be found

可尝试如下方法(取自于stackoverflow)

$ ng update @angular/cli --migrate-only --from=1.7.4

# This removed .angular-cli.json and created angular.json.
# If this leads to your project using 1.7.4, install v6 locally: $ npm install --save-dev @angular/cli@v6.0.0-rc.4 # And try once again to update your project with: $ ng update @angular/cli --migrate-only --from=1.7.4

四、Nginx配置

1、前提

服务器已经安装nginx,并假设nginx安装目录为/usr/local/nginx
nginx 的部分相关命令:

- nginx : 启动服务
- nginx -s stop : 先查出 nginx 进程 id,然后使用 kill 命令强制杀掉进程
- nginx -s quit : 等待 nginx 进程处理任务完毕,然后再进行停止
- nginx -s reload : 重启服务
- ps aux|grep nginx : 查看 nginx 进程

2、准备源文件

拷贝项目编译后的dist目录下的所有文件到服务器上,比如拷贝至/usr/local/web/home

3、配置nginx

这里可以选择编辑原始配置文件,也可以在nginx/conf.d/下新建一个conf文件,因为如果该文件夹下有配置文件,会默认先用这个文件
新建一个配置文件

sudo vi /usr/local/nginx/conf/conf.d/flask_nginx.conf

flask_nginx.conf
修改http->server节点下 localhost和error_page 404的值如下:


# 监听80端口,用于前端访问
server {
listen 80;
server_name 39.105.61.38; location / {
root /var/www/dist;
index index.html index.html;
}
#error_page 404 /404.html;
error_page 404 /;
} # 将8098端口,定向到本机8090端口,用于访问flask
server {
listen 8098;
server_name 39.105.61.38; location / {
proxy_pass http://127.0.0.1:8090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

4、部署

在nginx官网中下载nginx
把dist文件夹下的打包文件拷贝到nginx/html下并重命名为myProj
修改conf/nginx.conf文件

location / {
root html/myProj;
index index.html index.htm;
}

启动nginx
在浏览器中输入localhost:80即可看到项目

五、注意事项

所有以上配置结束,可能依然访问不了(这就是让我折腾到半夜的问题)
经过排查,都没问题啊,始终是80端口可以访问,任何一个服务换到80都能访问,其他不行,听着酷玩乐队的歌,突然灵光一闪,看一下阿里云,果然,这里有个安全组,默认是关闭其他端口的,需要配置安全组。

1、阿里云服务器

怎么开放阿里云端口

开放了服务器的端口,访问端口不是 timeout 了,出现了 拒绝访问
果然还有centos的防火墙

2、防火墙配置

CentOS 7默认使用的是firewall作为防火墙,也可改为iptables防火墙。
firewall操作:

# service firewalld status; #查看防火墙状态

disabled 表明 已经禁止开启启动 enable 表示开机自启,inactive 表示防火墙关闭状态 activated(running)表示为开启状态

$ service firewalld start;  或者 #systemctl start firewalld.service;#开启防火墙

$ service firewalld stop;  或者 #systemctl stop firewalld.service;#关闭防火墙

$ service firewalld restart;  或者 #systemctl restart firewalld.service;  #重启防火墙

$ systemctl disable firewalld.service#禁止防火墙开启自启

$ systemctl enable firewalld#设置防火墙开机启动
$ yum remove firewalld #卸载firewall

安装iptables防火墙及操作:

#yum install iptables-services#安装iptables防火墙

#vi /etc/sysconfig/iptables#编辑防火墙配置文件,开放3306端口

添加配置:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

#systemctl restart iptables.service #最后重启防火墙使配置生效

#systemctl enable iptables.service #设置防火墙开机启动

Web项目部署(Flask Angular2 Nginx)的更多相关文章

  1. Web项目部署指南

    Web项目部署指南 本文记录了部署Vue项目到阿里云服务器上的过程,其中云服务器的操作系统是CentOS 7,Web服务器用的是nginx.因为项目涉及发送异步请求,而由Flask编写的后端应用监听的 ...

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

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

  3. Linux06 /Python web项目部署

    Linux06 /Python web项目部署 目录 Linux06 /Python web项目部署 1. 部署方式 2. 纯后端代码部署/CRM为例 1. 部署方式 2. crm项目详细部署步骤 3 ...

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Spring MVC-环境设置(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_environment_setup.htm 说明:示例基于Spring MVC 4 ...

  2. Tarjan算法各种&RMQ& POJ 3694

    关于tarjan 的思想可以在网上搜到,具体我也不太清楚,应该说自己理解也不深,下面是做题经验得到的一些模板. 其中有很多转载,包括BYVoid等,感谢让我转...望各路大神愿谅 有向图求连通分量的一 ...

  3. uva 704

    自己之前的不见了.. 这题是双向广搜即可过.. // Colour Hash (色彩缤纷游戏) // PC/UVa IDs: 110807/704, Popularity: B, Success ra ...

  4. PostgreSQL sum typecasting as a bigint

    https://stackoverflow.com/questions/20203081/postgresql-sum-typecasting-as-a-bigint Question: I am d ...

  5. android中常见的内存泄漏和解决的方法

    android中的内存溢出预计大多数人在写代码的时候都出现过,事实上突然认为工作一年和工作三年的差别是什么呢.事实上干的工作或许都一样,产品汪看到的结果也都一样,那差别就是速度和质量了. 写在前面的一 ...

  6. 一见钟情Sublime

    打开 preferences -> Setting-User,加入下面代码 { "font_size": 14, "ignored_packages": ...

  7. C++设计模式之状态模式(二)

    2.智能空调的设计与实现 某软件公司将开发一套智能空调系统: 系统检測到温度处于20---30度之间,则切换到常温状态:温度处于30---45度,则切换到制冷状态: 温度小于20度,则切换到制热状态. ...

  8. Webx框架:Spring Schema 和 Spring Ext

    webx诞生的原因是当时市面上没有好用的web框架.如今的Web框架有非常多.然后它们背后的思想都是相似的,并且越来越趋同. Spring Schema 在传统的spring中,配置bean时须要手动 ...

  9. 0x59 单调队列优化DP

    倍增DP太难啦心情好再回去做 poj1821 先让工匠按s排序,f[i][j]表示枚举到第i个工匠涂了j个木板(注意第j个木板不一定要涂) 那么f[i][j]可以直接继承f[i-1][j]和f[i][ ...

  10. 样条函数(spline function)—— 分段多项式函数(piecewise polynomial function)

    1. 分段多项式函数 样条函数是某种意义上的分段函数. Spline (mathematics) - Wikipedia 最简单的样条函数是一种分段多项式函数(piecewise polynomial ...