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