做一個有產品思維的研發:部署(Tomcat配置,Nginx配置,JDK配置)

獵手家園發表於2019-04-24

每天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代理進行訪問。

 

相關文章