मेरे आवेदन को टॉमकैट में रूट पर तैनात करना


132

मेरे पास मेरे आवेदन की युद्ध फाइल है। मुझे इसे मूल स्तर पर तैनात करने की आवश्यकता है। वर्तमान URL यह है http://localhost:8080/war_name/application_name


1
क्या आप बता सकते हैं कि आपकी समस्या क्या है? जब आप टॉमकैट में एक युद्ध फ़ाइल को तैनात करते हैं, तो एप्लिकेशन को URL: लोकलहोस्ट: 8080 / war_name का उपयोग किए बिना .war एक्सटेंशन का उपयोग किए एक्सेस किया जाता है ।
आशीषजम्श्रम

1
हाँ, आप सही हैं, मुझे अपने ऐप को एक्सेस करने की आवश्यकता है। " localhost / application_name ", जब मैं अपनी युद्ध फ़ाइल का नाम बदलकर "ROOT.war" कर सकता हूं, लेकिन इसकी मेमोरी अपवाद से बाहर हो रही है क्योंकि मेरे युद्ध का आकार
120MB के

1
@ user661660 - ऐसा लगता है कि आपको एक अलग समस्या है - नाम बदलने के लिए ROOT.warकाम करना चाहिए। मैं आपके बारे में एक और सवाल पूछने का सुझाव दूंगा OutOfMemoryException, स्टैक ट्रेस और विवरण प्रदान करना। आप संभवतः -XmxJVM के लिए कॉन्फ़िगर करके इसके चारों ओर प्राप्त कर सकते हैं ।
रोब ह्रस्का

.lang.OutOfMemoryError: PermGen space Mar 16, 2011 9:52:52 AM com.ebay.kernel.logger.Logger log SEVERE: परफ्यूमन थ्रेड में त्रुटि java.lang.OutOfMemoryError: PermGen space Exception in thread "CalClient: NotifyThreadstreadDrive" "java.lang.OutOfMemor yError: PermGen space Exception in thread" MetricsSnapshotScheduler "java.lang.OutOfMemoryError: PermG स्पेस 16 मार्च, 2011 9:53:36 AM com.ebay.kernel.logger.ogger लॉग सीवर में त्रुटि हुई: धागा java.lang.OutOfMemoryError: PermGen space Exception थ्रेड में "CalClient: NotifyThreadDestroyThread-0" java.lang.OutOfMemory yError: PermGen space
iamjustcoder

1
@ user661660 - शायद इस सवाल के कुछ जवाब आपकी मदद कर सकते हैं।
रोब ह्रस्का

जवाबों:


220

आपके पास विकल्पों की एक जोड़ी है:

  1. टॉमकैट से आउट-ऑफ-द-बॉक्स ROOT/निर्देशिका निकालें और ROOT.warइसे लागू करने से पहले अपनी युद्ध फ़ाइल का नाम बदलें ।

  2. अपना युद्ध (अपने उदाहरण से) के रूप में तैनात करें war_name.warऔर अपनी युद्ध फ़ाइल का उपयोग करने के लिए संदर्भ रूट को कॉन्फ़िगर करें conf/server.xml:

    <Context path="" docBase="war_name" debug="0" reloadable="true"></Context>

पहला एक आसान है, लेकिन थोड़ा और अधिक गुदगुदी है। दूसरा शायद यह करने के लिए अधिक सुरुचिपूर्ण तरीका है।


3
बिलाव autodeploy के लिए सेट है, तो आप विकल्प 2 के बारे में चिंता की जरूरत नहीं है
Buhake सिंडी

4
@ डेजेल - तकनीकी रूप से कुछ भी नहीं। मैंने इसे स्वयं थोड़ा सा किया है; इससे काम हो जाता है। बस कंटेनर के कार्यान्वयन विवरण की तरह है कि कुछ करने के लिए अपनी खुद की युद्ध फ़ाइल का नाम बदलने के लिए एक बिट winky लगता है।
रोब ह्रस्का

4
आपके द्वारा दिए गए लिंक के अनुसार इसे जगह देने की अनुशंसा नहीं की गई है। संदर्भ> तत्व सीधे server.xml फ़ाइल में
नीलेश

6
यह उत्तर एक ऐसी तकनीक की सिफारिश करता है जिसे दस्तावेज में स्पष्ट रूप से खराब रूप में वर्णित किया गया है। उचित तकनीक यहां विस्तृत है: stackoverflow.com/questions/41263245/…
क्रिस्टोफर शुल्त्स

5
इसे ROOT.war कहने के लिए +1। टॉमकैट डॉक्स के अनुसार, डबल तैनाती से बचने के लिए "पथ" निर्दिष्ट करते समय आपको बहुत सावधान रहने की आवश्यकता है: "यहां तक ​​कि जब सर्वर में एक संदर्भ को सांख्यिकीय रूप से परिभाषित किया जाता है। तो, यह विशेषता तब तक सेट नहीं होनी चाहिए जब तक कि डॉकबेस होस्ट के तहत स्थित न हो। ऐपबेस या तैनातीऑनस्टार्टअप और ऑटोडेप्लॉय दोनों ही गलत हैं। यदि इस नियम का पालन नहीं किया जाता है, तो दोहरी तैनाती का परिणाम हो सकता है। " - tomcat.apache.org/tomcat-8.0-doc/config/context.html से
एंथनी हेवर्ड

31

tomcat v.7 (वेनिला इंस्टॉलेशन) पर

अपने conf / server.xml में </Host>बंद टैग से ठीक पहले, फ़ाइल के अंत की ओर निम्न बिट जोड़ें :

<Context path="" docBase="app_name">
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

ध्यान दें कि docBase विशेषता। यह महत्वपूर्ण बिट है। अपने रूट वेब ऐप को बदलने से पहले या तो आपने यह सुनिश्चित कर लिया है कि आपने app_name तैनात कर दिया है, या बस अपने अनपैक किए गए webapp (app_name) को अपने tomcat के वेबैप फ़ोल्डर में कॉपी कर लें। स्टार्टअप, रूट पर जाएं, वहां अपना app_name देखें!


13

इन बदलावों के साथ टॉमकट 7 में, मैं myAPP पर / / ROOT पर / ROOT पर पहुँच सकता हूँ

<Context path="" docBase="myAPP">
     <!-- Default set of monitored resources -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="ROOT" docBase="ROOT">
     <!-- Default set of monitored resources -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

<Host>सर्वर.xml में अनुभाग में ऊपर जोड़ें


3
एक संदर्भ पथ या तो एक खाली स्ट्रिंग होना चाहिए या '/' से शुरू होना चाहिए। पथ [ROOT] इन मानदंडों को पूरा नहीं करता है और इसे [/ ROOT] में बदल दिया गया है
निकिता बोसिक

11

मुझे पता है कि मेरा उत्तर कुछ अन्य उत्तर के साथ ओवरलैपिंग है, लेकिन यह एक पूर्ण समाधान है जिसमें कुछ फायदे हैं। यह टॉमकैट 8 पर काम करता है:

  1. मुख्य आवेदन रूट से परोसा जाता है
  2. वेब इंटरफ़ेस के माध्यम से युद्ध फ़ाइलों की तैनाती बनाए रखी जाती है।
  3. मुख्य एप्लिकेशन पोर्ट 80 पर चलेगा, जबकि केवल व्यवस्थापक के पास प्रबंध फ़ोल्डर तक पहुंच है (मुझे पता है कि * निक्स सिस्टम को 80 के लिए बाध्य करने के लिए सुपरयुसर की आवश्यकता होती है, लेकिन खिड़कियों पर यह एक मुद्दा नहीं है)।

इसका मतलब यह है कि आपको केवल एक बार ही टॉमकैट को पुनरारंभ करना होगा, और अपडेट किए गए युद्ध के बाद फ़ाइलों को एक समस्या के बिना तैनात किया जा सकता है।

चरण 1: server.xml फ़ाइल में, कनेक्टर प्रविष्टि ढूंढें और इसे इसके साथ बदलें:

<Connector 
    port="8080"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

<Connector
    port="80"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

चरण 2: <Host ...>टैग के संदर्भों को परिभाषित करें :

<Context path="/" docBase="CAS">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/ROOT" docBase="ROOT">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/manager" docBase="manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/host-manager" docBase="host-manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

ध्यान दें कि मैंने वेबैप फ़ोल्डर में सभी एप्लिकेशन को संबोधित किया है। पहले प्रभावी रूप से रूट और मुख्य ऐप को स्थिति से स्विच करें। ROOT अब चालू है http://example.com/ROOTऔर मुख्य अनुप्रयोग चालू है http://example.com/। पासवर्ड संरक्षित वेबपों को privileged="true"विशेषता की आवश्यकता होती है ।

जब आप CAS.war फ़ाइल को रूट के साथ मेल खाते हैं ( <Context path="/" docBase="CAS">आप को उस व्यवस्थापक पैनल में एक को पुनः लोड करना होगा क्योंकि यह परिनियोजन के साथ ताज़ा नहीं होता है।

<Context path="/CAS" docBase="CAS">अपने संदर्भों में शामिल न करें क्योंकि यह युद्ध फ़ाइलों को तैनात करने के लिए प्रबंधक विकल्प को निष्क्रिय करता है। इसका मतलब है कि आप ऐप को दो तरीकों से एक्सेस कर सकते हैं: http://example.com/औरhttp://example.com/APP/

चरण 3: रूट और प्रबंधक फ़ोल्डर में अवांछित पहुंच को रोकने के लिए valve, इस तरह उन संदर्भ टैग में जोड़ें :

<Context path="/manager" docBase="manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
        addConnectorPort="true"
        allow="143\.21\.2\.\d+;8080|127\.0\.0\.1;8080|::1;8080|0:0:0:0:0:0:0:1;8080"/>
</Context>

यह अनिवार्य रूप से मेरे स्वयं के डोमेन (नकली आईपी पते) और लोकलहोस्ट से व्यवस्थापक वेब ऐप फ़ोल्डर तक पहुंच को सीमित करता है जब वे डिफ़ॉल्ट पोर्ट 8080 का उपयोग करते हैं और वेब फ़ाइलों के माध्यम से युद्ध फ़ाइलों को गतिशील रूप से तैनात करने की क्षमता बनाए रखते हैं।

यदि आप कई एप्लिकेशन के लिए इसका उपयोग करना चाहते हैं जो अलग-अलग आईपी पते का उपयोग कर रहे हैं, तो आप कनेक्टर में आईपी पते जोड़ सकते हैं ( address="143.21.2.1")।

यदि आप कई वेब ऐप्स को रूट से चलाना चाहते हैं, तो आप सेवा टैग (दूसरे के लिए एक अलग नाम का उपयोग) को डुप्लिकेट कर सकते हैं और <Context path="/" docBase="CAS">उदाहरण के लिए डॉकबेस को बदल सकते हैं <Context path="/" docBase="ICR">


6

सबसे तेज़ तरीका।

  1. सुनिश्चित करें कि अगर आपके पास एक नहीं है तो आपके पास ROOT ऐप तैनात नहीं है, इसे खाली करें

  2. ROOT.war के लिए अपने युद्ध का नाम बदलें, परिनियोजन, सभी, कोई कॉन्फ़िगरेशन परिवर्तन की आवश्यकता है


6

हटा दें $CATALINA_HOME/webapps/ROOT। अद्यतन करें $CATALINA_HOME/conf/server.xml, सुनिश्चित करें कि होस्ट तत्व निम्न पाठ की तरह दिखता है:

<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="false" deployOnStartup="false">
  <Context path="" docBase="myApp"></Context>

यह टॉमकैट 8. के ​​साथ काम करता है। ऑटोडेप्लॉय और तैनातीऑनस्टार्टअप को टॉमकैट को myAppदो बार तैनात करने से रोकने के लिए गलत सेट करने की आवश्यकता है ।


मैंने डब्ल्यूएआर अपलोड करने की कोशिश की और यह काम करने में विफल रहा। क्या यह केवल विस्फोट के लिए है?
लॉजिकप्लेयर

मैंने डब्ल्यूएआर अपलोड करने की कोशिश की और यह @ जिंगुगो के उदाहरण के आधार पर काम करने में विफल रहा। क्या यह केवल विस्फोट के लिए है? संपादित करें: यह वास्तव में केवल विस्फोट हुए युद्धों के लिए है। ऐसा क्यों है? क्या मैं सिर्फ डब्ल्यूएआर अपलोड नहीं कर सकता और इस दोहरे कदम से बच सकता हूं? मैं इसे कैसे कारगर बना सकता हूं?
लॉगिक्सप्लेयर

@logixplayer। मेरा समाधान WAR के साथ काम करता है। मैंने इसे विस्फोट नहीं किया। मैं यह बताना भूल गया कि $CATALINA_HOME/webapps/ROOTहटाने की जरूरत है। कृपया इसे हटा दें और पुनः प्रयास करें।
जिंगुगो याओ जूल

आपने जैसा कहा मैंने ROOT हटा दिया। मैंने अपना डब्ल्यूएआर (विस्फोट नहीं निर्देशिका) तैनात किया। मैंने देखा कि एक नया ROOT डायरेक्टरी इसमें मेरे सामान जैसे WEB-INF के साथ बनाया गया था। साइट चल रही है। क्या इस तरह से काम करना है?
logixplayer

मैंने यह तरीका भी आजमाया और जब मैंने ब्राउज़र में पेज खोलने की कोशिश की तो यह सिर्फ सर्वर का इंतजार करता रहा। Catalina.out केवल कहता है कि सर्वर शुरू किया गया था।
आसू

1

@Rob Hruska के सोल से जुड़कर, अनुभाग कार्यों के अंदर server.xml में यह सेटिंग:

<Context path="" docBase="gateway" reloadable="true" override="true"> </Context>

नोट: कुछ मामलों में ओवरराइड = "सही" की आवश्यकता हो सकती है।


आपने यह उल्लेख नहीं किया है कि यह कहां रखा गया है। @ सुधीर पाल्यम का उत्तर सहायक था।
कन्नन राममूर्ति

1

को जोड़ना @Dima के जवाब, यदि आप उपयोग कर रहे हैं mavenअपने पैकेज का निर्माण करने के लिए, आप इसे बताने के लिए अपने युद्ध फ़ाइल नाम सेट करने के लिए कर सकते हैं ROOTमें pom.xml:

<build>
    <finalName>ROOT</finalName>
</build>

डिफ़ॉल्ट रूप से, रूट संदर्भ ( ) में webapp को tomcatतैनात करेगा ।ROOT.war/


0

open tomact manager url: - http: // localhost: 8080 / manager / html /
उसके बाद अनुप्रयोगों में आपको एक एप्लिकेशन दिखाई देता है जिसका पथ "/" है,
बस इसे अनडिप्लॉय करें। नाम बदलें के रूप में अपने आवेदन के युद्ध फ़ाइल ROOT.war पथ पर और सिर्फ जगह: - शुरू अपने बिलाव कोई अतिरिक्त विन्यास की जरूरत है। अब हम अपना आवेदन मुख पृष्ठ या कॉन्फ़िगर यूआरएल http: // localhost: 8080 पर देख सकते हैं
यहाँ छवि विवरण दर्ज करें
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps


-1

अपने सर्वर में मैं इसका उपयोग कर रहा हूं और रूट ऑटोडेप्लायज ठीक काम करता है:

   <Host name="mysite" autoDeploy="true" appBase="webapps" unpackWARs="true" deployOnStartup="true">
        <Alias>www.mysite.com</Alias>
        <Valve className="org.apache.catalina.valves.RemoteIpValve" protocolHeader="X-Forwarded-Proto"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="mysite_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b"/>
        <Context path="/mysite" docBase="mysite" reloadable="true"/>
    </Host>

यह
tine2k
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.