发表于: 2018-01-12 22:24:06

1 723


编辑日报内容...

今天完成的事情:

执行mvn install命令,打包为war包。

本地、服务器都执行一遍,都成功。

 

部署

1步,上传文件到服务器

2步,在服务器打包为war

3步,把war包放到webapps(备份原来的war)

4步,重新加载war包(重启tomcat,或者配置reloadable="true"

 

1步的几种方法:scp/sftp命令上传、git/svn服务器上传、idea上传

2步的方法:maven默认插件、其他插件

3步:mv 命令

 

全过程自动部署的几种方法:shell脚本、python脚本、idea远程部署、maven-tomcat插件自动部署

 

用脚本的话:可以掌控每个步骤,比较好排错,比较灵活。上传文件这一步就有很多实现方法。推荐使用脚本。

python脚本更简单些,会python的推荐。

下面是写的python部署脚本

代码:

 

from fabric.api import env, run, local, warn_only
from fabric.operations import sudo
from fabric.colors import *
import shutil

GIT_REPO = "https://github.com/bpzj/linux.conf"
repo = "git@120.79.47.191:/home/git/repo.git"
repo_folder = '/home/git/repo.git'
data_folder = '/home/bpzj/data/repo/'
local_repo = r'E:\repo'
local_proj_folder = r'E:\OneDrive\GitHubCode\Study\Java'
project = r'ssmcrud'
env.user = 'root'
# 使用 本机私钥登录
env.key_filename = '~/.ssh/id_rsa'
env.hosts = ['120.79.47.191']
env.port = '22'
# 跳过错误
env.warn_only = True

# env.hosts = ['www.lqtblog.com']
# env.port = '29183'
# env.password = '****'     # 使用密码


def deploy():
    # 复制项目文件到 git仓库文件夹
    copyfile(local_proj_folder, local_repo, project)
    local('''cd %s && git add . && git commit -m "new" && git push''' % local_repo)
    run("""cd {} && git pull """.format(data_folder))
    remote_repo = data_folder + project
   sudo('cd %s && mvn package' % remote_repo)
    war_path = remote_repo + r"/target/" + project + ".war"
    sudo('cp -rf ' + war_path + ' /usr/local/tomcat/webapps/')
    sudo('systemctl restart tomcat')
    sudo('nginx -s reload')


def deploy2():
   pass


def copyfile(parent_src_dir, parent_dst_dir, proj):
   """
   用来复制一个项目到指定文件夹
   :param parent_src_dir: 项目文件夹的父文件夹
   :param parent_dst_dir: 目标文件夹
   :param proj: 项目名称,也就是项目文件夹的名称
   :return:
   """
   # 把上级目录 join 项目名称,获取复制时真正的源地址和目标地址
  src_dir = os.path.join(parent_src_dir, proj)
    dst_dir = os.path.join(parent_dst_dir, proj)

   # 先删除项目的目标文件夹
   for root, dirs, files in os.walk(parent_dst_dir):
       if proj in dirs:
           shutil.rmtree(dst_dir)

     # 先复制src文件夹
   shutil.copytree(os.path.join(src_dir, "src"), os.path.join(dst_dir, "src"))
     # 再复制 pom 文件
   shutil.copy(os.path.join(src_dir, "pom.xml"), os.path.join(dst_dir, "pom.xml"))


 

运行:fab deploy

                                             

中间是打包过程。。。

 

如果配置了自动热加载,可以不用重启tomcat

 

使用ip + 端口访问 REST请求

成功,任务2已经实现了。已经把8080端口从安全组去掉了,就不截图了,很简单。

nginx子域访问

安装nginx

配置.conf文件,新建 /etc/nginx/conf.d/nginx-tomcat.conf

 

# 在nginx初始化加载的文件中有这一句: include /etc/nginx/conf.d/*.conf
# 而且这句在 http域中,所以本文件的内容是http的子域,也就是server域级别的内容

# upstream 存在session的问题。
upstream local_tomcat {
    server localhost:8080 weight=10;  
}

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  localhost;
    root         /usr/share/nginx;

    charset utf-8;

    #access_log  logs/host.access.log  main;

    location / {
        proxy_pass http://local_tomcat;
    }

    #静态资源    
    location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3)$ {
        root /statics;  # 静态资源位置,statics这里指的是 nginx安装目录下 statics文件夹,如果是 /statics,就是绝对路径
        # 不知道上边写了 root ,这里再指定root,是什么效果。
        # 如果请求的是 http://localhost/doc/index.html 符合这个 正则表达式,进入这个location
        # 去掉server_name=localhost, 剩下的uri是 /doc/index.html, 然后就在root目录下找文件,因为root 是statics
        # 所以,真正访问的就是 statics/doc/index.html 如果没有这个文件,就会 404。
        # 如果是jsp中加载静态文件,要写对uri。
    }

    location ~ .*\.(jsp|jspx|do|action)(\/.*)?$ {
        proxy_set_header real_ip $remote_addr;
        proxy_pass http://local_tomcat;
    }
}

直接访问80端口:

 

这里因为设置静态文件使用nginx处理,但是没有在相应文件夹放静态文件,所以访问的话,只有文字,没有图片和样式。

访问task2项目正常

http://120.79.47.191/ssmcrud/

 

 

 

明天计划的事情:

完成任务3、学习aopmybatis动态sql

遇到的问题:

mvn install 执行test单元测试报错

跳过单元测试。

git服务器密钥不管用。

https://www.jianshu.com/p/a8886a5f46d6

这篇文章很详细,涉及到那几个文件权限的地方一定要注意。

按步骤做下来,成功,问题还是在

**修改 .ssh 目录的权限为 700**

**修改 .ssh/authorized_keys 文件的权限为 600**

这两步。

收获:

见上面。



返回列表 返回列表
评论

    分享到