nginx+supervisor 前后端分离项目的发布流程
[第一部分] 前端发布(vue项目),假设项目名为demo_vue
Step1:编译打包前端项目
cd到demo_vue目录下,
执行cnpm run build:prod命令,生成disc文件夹
Step2:在服务端新建前端项目文件夹
登录ubuntu,
cd进/home/ubuntu/love目录下
执行mkdir demo_vue新建存放前端编译文件的文件夹
Step3:将编译文件上传到服务端
cd到disc目录下,执行如下命令
scp -r ./* root@love.aizhuhotel.com:/home/ubuntu/love/demo_vue
Step4:配置nginx
cd进/usr/local/nginx/conf目录下,
vim nginx.conf打开nginx配置文件,
配置服务端访问地址
upstream demovue {
server localhost:7788;
}
配置前端访问地址
location /demovue/ {
proxy_pass http://demo/;
}
配置监听端口/项目文件位置/默认启动文件
sever {
listen 端口号;
Location / {
root /home/ubuntu/love/demo_vue/;
index indec.html index.htm;
}
}
Step5:检查配置是否成功并重启nginx
cd进/usr/local/nginx/sbin目录下,
sudo nginx -t 检查配置,
sudo nginx -s reload 重启
[第二部分] 后端发布(.net core项目),假设项目名为demo_api
Step1:编译打包后端项目
cd到项目API目录下,
执行dotnet publish -c disc命令,生成disc文件夹
Step2:在服务端新建前端项目文件夹
登录ubuntu,
cd进/home/ubuntu/love目录下
执行mkdir demo_api新建存放后端编译文件的文件夹
Step3:将编译文件上传到服务端
cd到disc文件夹下publish目录下,执行如下命令
scp -r ./* root@love.aizhuhotel.com:/home/ubuntu/love/demo_api
Step4:配置nginx
cd进/usr/local/nginx/conf目录下,
vim nginx.conf打开nginx配置文件,
配置服务端访问地址
upstream demoapi {
server localhost:8441;
}
配置前端访问地址
location /demoapi/ {
proxy_pass http://demoapi/;
}
Step5:检查配置是否成功并重启nginx
cd进/usr/local/nginx/sbin目录下,
sudo nginx -t 检查配置,
sudo nginx -s reload 重启
Step6:配置supervisor
cd到/etc/supervisor/conf.d目录下,
新建一个后端项目对应的supervisor配置文件touch demoapi.conf
修改配置
{
[program:demoapi程序名称]........................
command=dotnet xxxx.dll启动命令
directory=/home/ubuntu/love/demoapi启动目录
stdout_logfile = /var/log/demoapi.log 日志目录
}
sudo supervisorctl status查看状态
sudo supervisorctl start 启动配置
sudo supervisorctl reload 重新加载
cd进/etc/supervisor目录
supervisorctl restart demoapi重启项目
附(supervisor下项目配置文件)
[program:dldocapi] ; 程序名称,在 supervisorctl 中通过这个值来对程序进行一系列的操作
autorestart=True ; 程序异常退出后自动重启
autostart=True ; 在 supervisord 启动的时候也自动启动
redirect_stderr=True ; 把 stderr 重定向到 stdout,默认 false
environment=PATH="/usr/bin" ; 可以通过 environment 来添加需要的环境变量,一种常见的用法是使用指定的 virtualenv 环境
command=dotnet DlDoc.API.dll ; 启动命令,与手动在命令行启动的命令是一样的
user=ubuntu ; 用哪个用户启动
directory=/home/ubuntu/love/DlDoc_API/ ; 程序的启动目录
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /var/log/dldocapi.log
nginx+supervisor 前后端分离项目的发布流程的更多相关文章
- 使用 Nginx 部署前后端分离项目,解决跨域问题
前后端分离这个问题其实松哥和大家聊过很多了,上周松哥把自己的两个开源项目部署在服务器上以帮助大家可以快速在线预览(喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了 ...
- vue+uwsgi+nginx部署前后端分离项目
前后端分离,vue前端提供静态页面,且可以向后台发起get,post等restful请求. django后台提供数据支撑,返回json数据,返回给vue,进行数据页面渲染 后端 创建虚拟环境 解决dj ...
- linux --- 部署前后端分离项目
vue + uwsgi +nginx 部署前后端分离项目 准备项目 1.将前端vue项目包和后端django项目包上传服务器,通过lrzsz,直接从windows拖进linux中 2.解压缩操作 前端 ...
- List多个字段标识过滤 IIS发布.net core mvc web站点 ASP.NET Core 实战:构建带有版本控制的 API 接口 ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目 Using AutoFac
List多个字段标识过滤 class Program{ public static void Main(string[] args) { List<T> list = new List& ...
- nginx+vue+uwsgi+django的前后端分离项目部署
Vue+Django前后端分离项目部署,nginx默认端口80,数据提交监听端口9000,反向代理(uwsgi配置)端口9999 1.下载项目文件(统一在/opt/luffyproject目录) (1 ...
- Docker环境下的前后端分离项目部署与运维
本教程将从零开始部署一个前后端分离的开源项目,利用docker虚拟机的容器技术,采用分布式集群部署,将项目转换成为高性能.高负载.高可用的部署方案.包括了MySQL集群.Redis集群.负载均衡.双机 ...
- Yii框架和Vue的完美结合完成前后端分离项目
背景说明 本文假设你对Yii和Vue都比较熟悉,至少都在项目里用过,另外笔者新人,以后不定时放一些干货,欢迎程序媛关注 Yii是一个PHP全端框架,典型的mvc的项目结构,后端接口都是一个控制器里放了 ...
- 喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了
折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了, ...
- 超简单!asp.net core前后端分离项目使用gitlab-ci持续集成到IIS
现在好多使用gitlab-ci的持续集成的教程,大部分都是发布到linux系统上的,但是目前还是有很大一部分企业使用的都是windows系统使用IIS在部署.NET应用程序.这里写一下如何使用gitl ...
随机推荐
- SQL SERVER 2008R2 执行大脚本文件时,提示“内存不足”的解决办法
我把一个数据库的架构及数据都已脚本的方式拷贝下来,再去新建一个数据库想把脚本执行一下,但提示如下错误: 问题描述: 当客户服务器不允许直接备份时,往往通过导出数据库脚本的方式来部署-还原数据库, 但是 ...
- Linux 常用命令:开发调试篇
前言 Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题.本文将简单介绍一下这些命令. 示例程序 我们用一个小程序,来 ...
- Dom关于位置和尺寸的api
parentNode 直接父级//和offsetParent不同 inner2.parentNode <!DOCTYPE html> <html id="html&q ...
- java String,StringBuilder和StringBuffer类的区别
对String而言: String是只读字符串,所引用的字符串不能被改变,一经定义,无法再增删改. String 定义的字符串保存在常量池里面,进行+操作时不能直接在原有基础上拼接. 每次+操作 : ...
- 【转载】GPU深度发掘(一)::GPGPU数学基础教程
作者:Dominik Göddeke 译者:华文广 Contents 介绍 准备条件 硬件设备要求 软件设备要求 两者选择 初始化OpenGL GLUT OpenGL ...
- 阿里云发布新版SaaS上云工具包,全面助力SaaS上云
9月26日,在云栖大会SaaS加速器专场上,阿里云发布了新版的SaaS上云工具包(SaaS Launch Kit),发布了API网关的新功能,以及推出了全新升级的能力中心. SaaS上云工具包,顾名思 ...
- python多线程,event,互斥锁,死锁,递归锁,信号量
Python多线程/event 多线程-threading python的thread模块是⽐较底层的模块, python的threading模块是对thread做了⼀些包装的, 可以更加⽅便的被使⽤ ...
- 0918CSP-S模拟测试赛后总结
14名.110分.可以算是几次大落之后的一次小小的崛起?? 然而sdfz的开挂选手AK了啊…… T2重测前rank7我就高兴地像个傻子??也不看看这次T1是个什么题. 实力还是不行.一眼秒掉了简单题, ...
- myeclipse CTRL+1功能
有时候,在myeclipse或者eclipse中自动编译代码有错误,我们把鼠标放在错误一行能够自动显示出问题原因,但是有时显示问题让人有些匪夷所思,不知所云何物. 此时可以使用<ctrl> ...
- 关于Unity中的物理
碰撞器Colliders Unity有两种类型的碰撞体:网格碰撞体(Mesh Colliders)和原始碰撞体(Primitive Colliders). 网格碰撞体组件使用导入的网格数据,可用于环境 ...