zoukankan      html  css  js  c++  java
  • 做一个有产品思维的研发:部署(Tomcat配置,Nginx配置,JDK配置)

    每天10分钟,解决一个研发问题。

    如果你想了解我在做什么,请看《做一个有产品思维的研发:课程大纲》传送门:https://www.cnblogs.com/hunttown/p/10490965.html

    今天我们说一下项目发布问题:

    网上查的大多比较复杂,配置起来比较麻烦,这里我写一个比较简单的教程。

    现在的服务器基本上都是Docker,一个容器发布一个项目,这样项目之间相互影响比较小,也可以独立分配资源。

    这里我讲的部署可以在一个容器中部署一个或多个。

    一、先来说一下目录结构

    export
    |-- apps
    |   |-- www.maoluxia.local
    |   |   |-- maoluxia-cms-www.war
    |-- domains
    |   |-- www.maoluxia.local
    |   |   |-- server
    |   |       |-- bin
    |   |       |   |-- start.sh
    |   |       |   |-- stop.sh
    |   |       |-- conf
    |   |       |   |-- Catalina
    |   |       |   |   |-- localhost
    |   |       |   |       |-- ROOT.xml
    |   |       |   |-- catalina.policy
    |   |       |   |-- catalina.properties
    |   |       |   |-- context.xml
    |   |       |   |-- logging.properties
    |   |       |   |-- server.xml
    |   |       |   |-- tomcat-users.xml.default
    |   |       |   |-- web.xml
    |   |       |-- logs
    |   |       |   |-- catalina.out
    |   |       |-- temp
    |   |       |-- webapps
    |   |       |-- work
    |   |           |-- Catalina
    |   |               |-- localhost
    |   |                   |-- ROOT
    |-- servers
    |   |-- apache-tomcat-8.0.32
    |   |   |-- 把tomcat文件拷贝过来即可
    |   |-- nginx-1.15.6
    |   |   |-- conf
    |   |       |   |-- domains
    |   |       |   |   |-- www.maoluxia.local
    |   |       |   |-- nginx.conf
    |   |   |-- 将nginx安装到此目录,其它目录也可以。
    |   |-- jdk1.8.0_191
    |   |   |-- 将jdk安装到此目录,其它目录也可以。

    目录结构非常简单,需要配置的文件也很少,只有红色的部分

    二、上传war包

    将打包好的war包上传到 /export/apps 目录下。

    直接发布war包有一个缺点,就是你发现你的一些上传资源没有办法保存。有两个办法,一个是保存到Linux的某个目录下,但是这样非常不安全;另一个办法是专门写一个上传程序,通过rpc来实现上传。(推荐第二种,后面的课程我会讲)

    三、下载软件

    下载tomcat、nginx、jdk并解压到 /export/servers 目录下。

    四、配置Tomcat

    配置文件我就挨着写,不按顺序了。

    1、启动文件

    目录:/export/domains/www.maoluxia.local/server/bin/start.sh

    #!/bin/bash
    export LANG=zh_CN.utf-8
    export LOCAL_TOMCAT_HOME=/root/export/servers/apache-tomcat-8.0.32
    export CATALINA_BASE=/root/export/domains/www.maoluxia.local/server
    
    export JAVA_HOME=/root/export/servers/jdk1.8.0_191
    export JAVA_BIN=/root/export/servers/jdk1.8.0_191/bin
    export PATH=$JAVA_BIN::/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/bin
    export CLASSPATH=.:/lib/dt.jar:/lib/tools.jar
    export JAVA_OPTS="-Djava.library.path=/usr/local/lib -server -Xms512m -Xmx1024m -XX:MaxPermSize=256m -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=60000 -Dsun.net.client.defaultReadTimeout=60000 -Djmagick.systemclassloader=no -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.ttl=300 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_BASE/logs -XX:ErrorFile=$CATALINA_BASE/logs/java_error_%p.log"
    export JAVA_HOME JAVA_BIN PATH CLASSPATH JAVA_OPTS
    $LOCAL_TOMCAT_HOME/bin/startup.sh -config $CATALINA_BASE/conf/server.xml

    2、停止文件

    目录:/export/domains/www.maoluxia.local/server/bin/stop.sh

    #!/bin/bash
    export LANG=zh_CN.utf-8
    export LOCAL_TOMCAT_HOME=/root/export/servers/apache-tomcat-8.0.32
    export CATALINA_BASE=/root/export/domains/www.maoluxia.local/server
    
    $LOCAL_TOMCAT_HOME/bin/shutdown.sh -config $CATALINA_BASE/conf/server.xml
    sleep 3s
    ps -aef | grep java|grep "/www.maoluxia.local/server" | grep -v grep | sed 's/ [ ]*/:/g' |cut -d: -f2|kill -9 `cat`

     3、ROOT文件

    目录:/export/domains/www.maoluxia.local/server/conf/Catalina/localhost/ROOT.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <Context path="/" docBase="/root/export/apps/www.maoluxia.local/maoluxia-cms-www.war" reloadable="true">
    </Context>

    目的是为了指定war包的路径。

    4、server.xml文件

    目录:/export/domains/www.maoluxia.local/server/conf/server.xml

    <?xml version='1.0' encoding='utf-8'?>
     <Server port="9001" shutdown="SHUTDOWN">
    
      <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
      <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
      <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
      <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
      <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
    
      <Service name="Catalina">
        <Connector port="8001" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"  URIEncoding="UTF-8" useBodyEncodingForURI="true"/>
        <Engine name="Catalina" defaultHost="localhost" jvmRoute="s1">
          <Host name="localhost"  appBase="webapps"
                unpackWARs="false" autoDeploy="false"
                xmlValidation="false" xmlNamespaceAware="false">
          </Host>
        </Engine>
      </Service>
    </Server>

    目的配置监听端口,注意多个项目时:8001、9001端口不能重复。

    5、其它文件

    其它文件不需要配置,直接下载下来解压使用。下载地址 

    6、其它目录

    其它目录虽然没文件,但是必须有,因为在启动的时候会去读这些目录,找不到会报错。

    五、Nginx配置

    1、首先在conf目录下建立domains文件夹,里面存放nginx配置文件片断。

    如:www.maoluxia.local 

    upstream www_maoluxia {
            server 127.0.0.1:8001 weight=10 max_fails=2 fail_timeout=30s;
    }
    server {
            listen                          80;
            server_name                     www.maoluxia.com;
            access_log                      /root/export/servers/nginx-1.15.6/logs/www.maoluxia.local/www.maoluxia.local_access.log main;
            error_log                       /root/export/servers/nginx-1.15.6/logs/www.maoluxia.local/www.maoluxia.local_error.log warn;
    
            location / {
                proxy_next_upstream     http_500 http_502 http_503 http_504 error timeout invalid_header;
                proxy_set_header        Host  $host;
                proxy_pass              http://www_maoluxia;
            }
            location /logs/ {
                    autoindex       off;
                    deny all;
            }
    }

    注意:这里的8001端口要和tomcat中配置的一致。

    如果不配置代码片断,在nginx.conf中直接配置也可以,只是会显得不太整洁。

    2、nginx.conf文件

    user                                nobody;
    worker_processes                    2;
    error_log                           /root/export/servers/nginx-1.15.6/logs/nginx_error.log  warn;
    pid                                 /root/export/servers/nginx-1.15.6/run/nginx.pid;
    worker_rlimit_nofile                65535;
    events {
        use epoll;
        worker_connections 65535;
    }
    http {
        include                         mime.types;
        default_type                    application/octet-stream;
        server_tokens                   on;
        log_format main                 '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $bytes_sent '
                        '"$http_referer" "$http_user_agent" '
                        '"$gzip_ratio"';
    
        server_names_hash_bucket_size   128;
        client_header_buffer_size       32k;
        large_client_header_buffers     4 32k;
        client_max_body_size            300m;
        sendfile                        on;
        tcp_nopush                      on;
        keepalive_timeout               0;
        tcp_nodelay                     on;
        client_body_buffer_size         512k;
        fastcgi_intercept_errors        on;
        proxy_connect_timeout           90;
        proxy_read_timeout              180;
        proxy_send_timeout              180;
        proxy_buffer_size               256k;
        proxy_buffers                   4 256k;
        proxy_busy_buffers_size         256k;
        proxy_temp_file_write_size      256k;
        proxy_intercept_errors          on;
        server_name_in_redirect         off;
        proxy_hide_header               X-Powered-By;
        gzip                            on;
        gzip_min_length                 100;
        gzip_buffers                    4 16k;
        gzip_http_version               1.0;
        gzip_comp_level                 9;
        gzip_types                      text/plain application/x-javascript text/css application/xml;
        gzip_vary                       on;
        error_page 400 401 402 403 404 405 408 410 412 413 414 415 500 501 502 503 506 = http://www.maoluxia.com/nopage;
    
        include domains/*;
    
        server {
            listen                        80 default_server;
            server_name                    localhost; 
            location / {
                rewrite ^/(.*) http://www.maoluxia.com permanent;
            }
        }
    }

    主要看文件中两行红色的部分:

    第一行红色的代码是 权限,根据自己的需要配置;

    第二行红色的代码是 读取上面配置的代码片断;

    六、启动顺序

    到此,文件都已经配置完成。

    首先启动:/bin/start.sh

    然后启动:/sbin/nginx

    今日总结:

    如果没有足够的资源,那么这种配置方法比较合适,在一台机器上部署多套Java工程,通过nginx代理进行访问。

  • 相关阅读:
    JavaScript学习总结(八)——JavaScript数组
    oracle数据库优化学习笔记
    把连续日期组织起来的算法
    转:andriod的盈利模式分析
    ASP.NET 页生命周期
    .NET垃圾回收机制[引用]
    IIS 7.0 的 ASP.NET 应用程序生命周期
    table滑动选择行及从表记录对应js代码
    hdu 3594 Cactus
    Java 计算器
  • 原文地址:https://www.cnblogs.com/hunttown/p/10760359.html
Copyright © 2011-2022 走看看