vue项目前端服务器,【前端技术】vue自动部署项目到服务器

想要的功能

前端打包之后自动上传文件夹到服务器

在不提交代码的前提下,也可以完成上述功能

经过各种百度谷歌,最后有两种方案可以选择

第一种是写一个shell,通过lftp上传文件夹,但是会有个权限的问题,需要更改nginx配置才可以解决

第二种就是使用node来实现,个人推荐使用这个

第三种就是jenkins, 但是我又不想提交代码,不满足,放弃

使用shell自动传输文件夹到服务器

思路

1. 安装lftp

2. 编写shell脚本自动传输文件夹到服务器

3. lftp 传输文件成功之后会访问目录会报一个ngxin 403的权限错误,(如果说测试大佬不同意改ngxin配置的话, 那就放弃把)

ftp安装和常用命令介绍

linux安装vftp

rpm -qa | grep initscripts

查看ftp安装是否成功

which vsftpd

查看ftp 服务器状态

service vsftpd status

启动ftp服务器

service vsftpd start

重启ftp服务器

service vsftpd restart

查看服务有没有启动

netstat -an | grep 21 //默认端口为21

tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN

如果看到以上信息,证明ftp服务已经开启。

如果需要开启root用户的ftp权限要修改以下两个文件

vi /etc/vsftpd/ftpusers 中注释掉root

vi /etc/vsftpd/user_list 中也注释掉root

然后重新启动ftp服务 service vsftpd restart

ftpusers和user_list文件详解

1460000022743856

安装lftp

为啥要安装lftp

ftp不可以传文件夹,lftp可以,lftp可以使用帐号密码登录

安装步骤

window

choco 安装

choco install lftp

1460000022743855

没有安装choco 请点下方链接,自己食用

1460000022743857

linux

linux下安装FTP的过程和使用的整体过程

第一步

1460000022743858

第二步

1460000022743859

第三步

1460000022743860

【Linux】缺少service命令的解决办法

lftp 常用命令介绍

Shell 教程

为啥要 ./qq.sh 这样执行, 好像有坑

bVbHBzW

shell使用ftp传输文件

请确保ftp服务已经开启,再做下面的操作

新建一个qq.sh文件,大致就是是用ftp链接远程服务器,并传输一个zip文件

bVbHBz9

shell源码:

#!/bin/sh

# 出现异常不往直接报错

set -e

# 打包

tar -czvf social.zip social

# 远端服务器ip

ip="192.168.1.99"

# 部署到远程服务器的目录 自行更换

remote="/usr/abcd/"

# 帐号 自行更换

userName="admin"

# 密码 自行更换

password="123456"

# 传输方式

ftpFransferType="binary"

# 传输的文件名

ftpPutFileName="social.zip"

#lcd 应该使用相对路径

#格式:lcd [directory]

#说明:directory 指定要更改的本地计算机上的目录。如果没有指定directory,将显示本地计算机中当前的工作目录

#从本地向FTP批量上传文档

echo "-------------------------------------- 开始上传 ${ftpPutFileName} 文件--------------------------------------"

ftp -v -n<

open $ip

user $userName $password

$ftpFransferType

cd $remote

pwd

prompt

put $ftpPutFileName

bye

EOF

echo "-------------------------------------- 上传 ${ftpPutFileName} 文件成功 --------------------------------------"

shell使用lftp传输文件夹

直接把文件夹丢到服务器

1460000022743865

shell源码:

#!/bin/bash

#--------------------------------------------

# 自动传输文件到不同环境

# author:qinyuanqi

#--------------------------------------------

#出现异常不往下面走

set -e

# SFTP配置信息

# IP

IP="192.168.1.199"

# 端口

PORT=22

# 用户名

USER="user"

# 密码

PASSWORD="password"

# 需要上传的文件所在目录

CLIENTDIR='./social'

# 上传到目标服务器的目录

remote="/usr/local/nginx/html/h5/"

#echo "$IP---$USER--$PASSWORD"

if [ -d $CLIENTDIR ]

then

echo "$CLIENTDIR 是一个文件夹"

elif [ -f $CLIENTDIR ]

then

echo "$CLIENTDIR 是一个文件"

else

echo "$CLIENTDIR 不存在"

fi

if [ "$1"x == "test"x ]

then

echo "---- 准备传输 $CLIENTDIR 文件到 ----测试环境"

# 这样传输到服务器,访问项目,nginx会报403,测试大佬说不能改nginx 配置,难搞哦,不知道怎么解决了

IP="192.168.1.166"

USER="测试环境的用户"

PASSWORD="测试环境的密码"

else

echo "---- 准备传输 $CLIENTDIR 文件到 ----开发环境"

fi

echo "---- 开始上传 ${CLIENTDIR} 文件 ----"

lftp -u $USER,$PASSWORD $IP <

cd ${remote}

mirror -R $CLIENTDIR

by

EOF

echo "---- 上传 ${CLIENTDIR} 文件成功 ----"

lftp 传输文件成功之后,访问web程序会报一个ngxin 403的权限错误,(如果说测试大佬不同意改ngxin配置的话, 那就放弃把)

解决ngxin 403:

使用node

思路:

使用node-ssh 来帮助我们实现自动部署

安装依赖

package.json文件

{

"devDependencies": {

"chalk": "^4.0.0",

"compressing": "^1.5.1",

"node-ssh": "^10.0.2"

}

}

npm install node-ssh –save-dev 传输文件夹

npm install compressing –save-dev 压缩文件

npm install chalk -save-dev 美化log

实例分析

实现功能

开发环境和测试环境自动打包并传输文件

生产环境自动生成压缩包

定义调用方式

调用方式 ,vue打包完成之后,删除soucemap文件,然后使用node 自动发布

1460000022743869

定义配置

1460000022743867

配置不同环境不同操作

1460000022743868

使用nodessh上传文件夹

1460000022743870

js源码:

// 开发和测试自动打包到对一个环境,生产自动打zip包,直接丢给领导上线

//命令行颜色

const chalk = require('chalk')

const log = console.log

const path = require('path')

// 连接传输到服务器插件

const NodeSSH = require('node-ssh')

const ssh = new NodeSSH()

// 取到node执行文件的参数,进行打包区分

const argv = process.argv.slice(2)

// 引入压缩文件插件

const compressing = require('compressing')

// 打包后的目录名称

const buildDirName = 'social'

// 打包后文件的路径

const distDir = './' + buildDirName

// 打包后的压缩名称

const distZipPath = './' + buildDirName + '.zip'

// 服务器配置

let remoteConfig = {}

// node deploy.js qq 取到qq来做判断,判断是那个环境,然后做不同的处理

switch (argv[0]) {

// 开发环境的一些配置

case 'dev':

log(chalk.blue('----开始打包到开发环境----'))

remoteConfig = {

host: '开发服务器ip',

// 远程端口,默认是21

// port:21

username: '开发服务器用户名',

password: '开发服务器密码',

remotePath: '服务器部署的地址',

}

upload()

break

// 测试环境的一些配置

case 'test':

log(chalk.blue('----开始打包到测试环境----'))

remoteConfig = {

host: '测试服务器ip',

// 远程端口,默认是21

// port:21

username: '测试服务器用户名',

password: '测试服务器密码',

remotePath: '测试服务器部署地址',

}

upload()

break

// 生产环境就自动压缩文件,不做别的处理

case 'production':

log(chalk.blue('----生产环境----开始压缩文件----'))

compressing.zip

.compressDir(distDir, distZipPath)

.then(() => {

log(chalk.green(`压缩 ${distZipPath} 成功`))

})

.catch(() => {

log(chalk.red(`压缩 ${distZipPath} 失败`))

})

break

default:

log(chalk.keyword('orange')('deploy走了没有处理的方式'))

break

}

/**

* 上传文件到服务器

* node 7.6 以上都支持 async 语法

*/

async function upload() {

const failed = []

const successful = []

try {

// 连接服务器

await ssh.connect({

host: remoteConfig.host,

username: remoteConfig.username,

password: remoteConfig.password,

})

// 刪除目录再上传

await ssh.execCommand('rm -rf ../' + buildDirName, { cwd: remoteConfig.remotePath })

// 开始上传文件到远程指定目录下

await ssh.putDirectory(distDir, remoteConfig.remotePath, {

recursive: true,

concurrency: 10,

validate: function(itemPath) {

const baseName = path.basename(itemPath)

console.log(baseName)

return (

baseName.substr(0, 1) !== '.' && baseName !== 'node_modules' // do not allow dot files

) // do not allow node_modules

},

tick: function(localPath, remotePath, error) {

if (error) {

failed.push(localPath)

} else {

successful.push(localPath)

}

},

})

} catch (error) {

log(chalk.red('upload 上传失败,错误信息如下==>', error))

return false

}

log(chalk.green('传输完成'))

log(chalk.green('传输成功文件数==>', successful.length))

log(chalk.green('传输失败文件数==>', failed.length))

// 退出

process.exit()

}

node 自动打包遗留问题

多个项目,每个项目都要引入deploy.js文件,感觉有点难受,暂时没想到啥好方法。各位观众老爷,有啥好方案,带带我呗~

结束语

本文如有错误,欢迎指正,非常感谢

觉得有用的老铁,点个双击,小红心走一波

欢迎灌水,来呀,互相伤害哈 o(∩_∩)o 哈哈

参考资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

官狼服务器临时维护,官狼三分钟新模式,跑跑狼人杀如何边跑边杀

作为风靡全球的桌游&#xff0c;狼人杀一度成为了国内白领、学生党的国民游戏。随着网络的普及&#xff0c;很多玩家开始转求线上网杀&#xff0c;网易《狼人杀官方》因为玩法最多画风好看&#xff0c;一直是大多数人的选择。而就在最近&#xff0c;《狼人杀官方》重磅推出了年…

三星s6 信号无服务器,手机没信号的原因以及解决方法

现在手机是一件很普遍的通讯工具&#xff0c;因为现在手机功能的强大&#xff0c;所以基本上人人一部手机。目前在社会上比较流行的牌子就是苹果或者三星手机。不过想必大家在用手机的时候都会出现手机没有信号这个问题。这个问题是一件比较麻烦的问题&#xff0c;有的时候急需…

不同型号服务器如何做双击热备,服务器做双机热备教程

服务器做双机热备教程 内容精选换一换将GaussDB(DWS)提供的ODBC DRIVER(psqlodbcw.so)配置到数据源中便可使用。配置数据源需要配置“odbc.ini”和“odbcinst.ini”两个文件(在编译安装unixODBC过程中生成且默认放在“/usr/local/etc”目录下)&#xff0c;并在服务器端进行配置…

文档上传到服务器上,将文件上传到服务器上

将文件上传到服务器上 内容精选换一换为了实现NAT Server、SAP HANA主备节点和SAP S/4HANA主备节点互相通过SSH协议跳转的功能&#xff0c;需要配置云服务器之间的互信。在本地PC上&#xff0c;生成登录NAT Server的密钥文件。在创建NAT Server时&#xff0c;指定了NAT Server的…

win10配置JAVA和tomacat环境变量

一、配置JAVA_HOME 二、配置CATALINA_HOME &#xff08;tomacat的环境变量&#xff09; 三、配置PATH 四、命令行检验配置结果&#xff1a; 1、命令行输入java 2、命令行输入javac 3、命令行输入startup.bat 注&#xff1a;如果以上三个命令无报错表示配置成功 转载于:https://…

设计模式 策略模式2 c++11

根据需求的不同 选择不同的策略算法 之前是保存的各种策略类的指针 这里直接使用 function bind 选择对应的算法 代码 // 005.cpp: 定义控制台应用程序的入口点。 //#include "stdafx.h" #include <functional> #include <iostream>using namespace std…

python学习(八)定制类和枚举

python定制类主要是实现特定功能&#xff0c;通过在类中定义特定的函数完成特定的功能。 class Student(object):def __init__(self, name):self.name namestudent Student("lilei") print(student) 实现定制类 class Student(object):def __init__(self, name):sel…

架构实战:(一)Redis采用主从架构的原因

架构实战 &#xff08;一&#xff09;Redis采用主从架构的原因 &#xff08;二&#xff09; 如果系统的QPS超过10W&#xff0c;甚至是百万以上的访问&#xff0c;则光是Redis是不够的&#xff0c;但是Redis是整个大型缓存架构中&#xff0c;支撑高并发的架构非常重要的环节。 首…

《JavaWeb从入门到改行》注册时向指定邮箱发送邮件激活

javaMail API javaMail是SUN公司提供的针对邮件的API 。 两个jar包 mail.jar 和 activation.jar java mail中主要类&#xff1a;javax.mail.Session、javax.mail.internet.MimeMessage、javax.mail.Transport。 Session 表示会话&#xff0c;即客户端与邮件服务器之…

HTTP之报文

HTTP 报文 用于 HTTP 协议交互的信息被称为 HTTP 报文。请求端&#xff08;客户端&#xff09;的 HTTP 报文叫做请求报文&#xff0c;响应端&#xff08;服务器端&#xff09;的叫做响应报文。HTTP 报文本身是由多行&#xff08;用 CRLF 作换行符&#xff09;数据构成的字符串文…

python 内置函数

一 print( ) flush的应用——模拟进度条 import time for i in range(1,101):time.sleep(0.1)print(\r{}%:{}.format(i,**i),end,flushTrue) #\r &#xff08;return&#xff09; 表示回车 \n &#xff08;new line&#xff09;表示换行&#xff0c;实际上是回车换…

Discuz!论坛实现帖子回复可见内容功能

自从Discuz&#xff01;升级到3.0以上的时候很多功能都被改版了&#xff0c;已不是2年前的设计&#xff0c;如果不是Discuz&#xff01;老用户还真不知道怎么玩它了。 博主以前经常逛论坛&#xff0c;但从来没有自己去做过一个论坛&#xff0c;相关的开源程序代码也不是怎么精通…

dropify,不错的图片上传预览插件

引言 传统的图片上传&#xff0c;很丑。点击选择之后&#xff0c;还无法预览。 有一种方案是传到服务器&#xff0c;然后返回地址&#xff0c;然后显示&#xff0c;比较麻烦。 用这个dropify&#xff0c;就可以解决之歌问题。 看效果 用法 1.引入文件,需要jquery支持。 <lin…

【知了堂学习笔记】MySQL数据库常用的SQL语句整理

一&#xff0c;常用、简单的SQL操作语句 1.数据库操作&#xff1a; 1&#xff09;创建数据库&#xff1a; create database database_name&#xff1b; 创建并设置字符编码 create database database_name character set utf8&#xff1b; 2&#xff09;删除数据库&#xff1a…

tomcat原理解析(一):一个简单的实现

一 概述 前段时间去面试&#xff0c;被人问到了tomcat实现原理。由于平时没怎么关注容器的实现细节&#xff0c;这个问题基本没回答上来。所以最近花了很多时间一直在网上找资料和看tomcat的源码来研究里面处理一个HTTP请求的流程。网上讲tomcat的帖子比较多&#xff0c;大多都…

手风琴案例jquery写法

今天我用jquary来写一下手风琴案例&#xff0c;这个案例在平时的项目中很经常会见到&#xff0c;要想实现效果用jquary来写其实很简单&#xff0c;其实一句话就是jquary的方法的调用。 首先我们先来分析一下手风琴案例实际实现的效果&#xff0c;就是点击当前的标题&#xff0c…

元组tuple

另一种有序列表叫元组&#xff1a;tuple。tuple和list非常类似&#xff0c;但是tuple一旦初始化就不能修改&#xff0c;比如同样是列出同学的名字&#xff1a; >>> classmates (Michael, Bob, Tracy)现在&#xff0c;classmates这个tuple不能变了&#xff0c;它也没有…

win7下的nginx小demo

一直大概知道nginx怎么玩,但是不看文档又蒙蔽.在这记录一下,以后好查看 下载tomcat,改index.jsp http://tomcat.apache.org/download-80.cgi tomcat9已经出来了,但是自己用了一次,闪退,换tomcat8,开启成功.(tomcat9这个原因有时间在琢磨) 修改tomcat的index.jsp 然后在index.js…

understand的安装

1.win7 64位下安装 1&#xff09;下载Understand.4.0.908.x64.rar。 2&#xff09;解压之&#xff0c;直接运行里面的Understand-4.0.908-Windows-64bit.exe。 3&#xff09;选择如下 之后&#xff0c;点击“Add Eval or SDL (RegCode)”&#xff0c;如下图&#xff1a; 4&…

条件、循环、函数定义 练习

a.五角星 import turtleturtle.color(yellow)turtle.begin_fill()for i in range(5): turtle.forward(100) turtle.right(144)turtle.end_fill() b.同心圆 import turtlefor i in range(5): turtle.up() turtle.goto(0,-20*(i1)) turtle.down() turtle.circle(20*(i1)) c.太阳花…