<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.lingoport.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Masnes</id>
	<title>Lingoport Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.lingoport.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Masnes"/>
	<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/Special:Contributions/Masnes"/>
	<updated>2026-04-30T15:58:59Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=File:Job_lrm_advanced_bit.png&amp;diff=99859</id>
		<title>File:Job lrm advanced bit.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=File:Job_lrm_advanced_bit.png&amp;diff=99859"/>
		<updated>2026-04-03T18:07:57Z</updated>

		<summary type="html">&lt;p&gt;Masnes: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Introduction&amp;diff=99840</id>
		<title>Introduction</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Introduction&amp;diff=99840"/>
		<updated>2026-04-02T23:51:34Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Lingoport - Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lingoport - Overview =&lt;br /&gt;
Lingoport provides products and services which help our clients continuously meet [https://lingoport.com/what-is-i18n/ internationalization] and ongoing localization challenges relating to software development and active globalization. &lt;br /&gt;
&lt;br /&gt;
For more information about internationalization: https://lingoport.com/what-is-i18n/&lt;br /&gt;
&lt;br /&gt;
The Lingoport Products help software engineering teams with the [[Terms_and_Definitions#globalization|globalization]] tasks:&lt;br /&gt;
* Automatically find and manage [[Terms_and_Definitions#internationalization|internationalization]] issues and [[Terms_and_Definitions#localization|localization]] changes in your source code and [[Terms_and_Definitions#repository|repositories]] for a wide variety of programming languages.&lt;br /&gt;
* Integrate with [[Terms_and_Definitions#TMS|translation management systems]] and [[Terms_and_Definitions#localization|localization]] vendors for rapid [[Terms_and_Definitions#globalization|globalization]] development, testing and deployment.&lt;br /&gt;
* Verify translations in an efficient, process-driven manner. &lt;br /&gt;
* Works behind your firewall keeping your source code secure.&lt;br /&gt;
&lt;br /&gt;
===Contact Information:===&lt;br /&gt;
Phone: +1 303-444-8020 &lt;br /&gt;
&lt;br /&gt;
Email: info at Lingoport.com &lt;br /&gt;
&lt;br /&gt;
Lingoport, Inc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
Lingoport has been providing software [http://www.lingoport.com/software-internationalization-services/ internationalization (i18n) consulting services] since the company&#039;s inception in 2001. &lt;br /&gt;
&lt;br /&gt;
These services include:&lt;br /&gt;
* &#039;&#039;&#039;I18n Analysis&#039;&#039;&#039; - plan for new i18n projects, or gap analysis for mitigating i18n issues. A Lingoport architect and supporting team members clarify i18n business, technical and resource requirements based on market requirements, development discussions, programming technologies and Globalyzer scanning results.&lt;br /&gt;
* &#039;&#039;&#039;I18n Implementation&#039;&#039;&#039; - Lingoport provides i18n development teams that can work in a hybrid approach, collaborating with client teams, as well as in turnkey fashion.&lt;br /&gt;
* &#039;&#039;&#039;General i18n Consulting and Custom Projects&#039;&#039;&#039; - Sometimes specific problem solving or i18n bug fixing is needed. Lingoport can fulfill that resource need, working in coordination with your teams.&lt;br /&gt;
* &#039;&#039;&#039;Process Customization&#039;&#039;&#039; - Any Lingoport product purchase includes consulting time to customize and optimize the Lingoport product suite for the customer.&lt;br /&gt;
&lt;br /&gt;
== Lingoport Products ==&lt;br /&gt;
[[File:Lingoport Products Overview.JPG|700px|center]]&lt;br /&gt;
&lt;br /&gt;
The Lingoport products support the continuous globalization process, from the code repository to the translation vendors and back. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[About Globalyzer | Globalyzer]]&#039;&#039;&#039; – Supports individuals and entire development teams in finding, fixing and maintaining internationalization issues in code in a broad list of programming languages. (More information at [http://lingoport.com/globalyzer Lingoport.com/Globalyzer]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[About Localyzer | Localyzer]]&#039;&#039;&#039; – Provides simplified resource file management, verification and translation updating.  Localyzer helps development and localization teams keep up with initial and ongoing application interface resources, their translation and automated re-insertion into product builds. (More information at [https://lingoport.com/software-internationalization-products/localyzer-localization-automation/ Lingoport.com/Localyzer]).&lt;br /&gt;
* &#039;&#039;&#039;Machine Translation&#039;&#039;&#039; - Lingoport Supports several popular machine translation vendors as part of the continuous globalization and localization process.&lt;br /&gt;
** [https://aws.amazon.com/translate/  AWS Translate]&lt;br /&gt;
** [https://www.systransoft.com/systran/translation-technology/neural-machine-translation-nmt/ Systran]&lt;br /&gt;
** [https://cloud.google.com/translate Google Translate] &lt;br /&gt;
** [https://www.microsoft.com/en-us/translator/ Microsoft Translator]&lt;br /&gt;
* &#039;&#039;&#039;Translation Management Systems(TMS)&#039;&#039;&#039;: Lingoport Localyzer is integrated with leading TMS platforms for a fully automated process from code repository to translator and back.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[LocalyzerQA | LocalyzerQA]]&#039;&#039;&#039; - A simplified way to perform linguistic review and verify and correct translation issues as part of the continuous globalization process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Express Suite&#039;&#039;&#039;-  uses the Lingoport software suite and integrates core capabilities with GitHub to bring developers instant access to languages, all integrated with the way they already work. Linguistic review is done in context, for accuracy and application specific terminology.&lt;br /&gt;
* [[Globalyzer i18n Express |Globalyzer i18n Express]]- Globalyzer i18n Express is a GitHub application which scans the added and modified files checked in on a GitHub commit, looking for i18n issues. The committed files are scanned with default rule sets. Files checked in will be scanned and a summary will be added as a comment to the commit in GitHub. &lt;br /&gt;
* [[Localyzer Express |Localyzer Express]] - Localyzer Express is a GitHub application which allows for a near immediate machine translation of standard application resource files. Resource files are used by internationalized applications to display user facing strings (such as user interface labels) in different locales (languages, country, variant). As an example, messages.properties, an English resource file, can be translated in French and Japanese, respectively messages_fr.properties and messages_ja.properties. &lt;br /&gt;
* [[LocalyzerQA | LocalyzerQA]] - A simplified way to perform linguistic review in a running application and verify and correct translation issues as part of the continuous globalization process. When paired with [[Localyzer Express |Localyzer Express]], it allows for an &#039;&#039;always-on&#039;&#039; machine translation followed by linguistic review in the context of the running application.&lt;br /&gt;
&lt;br /&gt;
== Command Center ==&lt;br /&gt;
&lt;br /&gt;
[[File:IntroductionSignIn.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Command Center&#039;&#039;&#039; is the hub of the Lingoport products. See it all, drill down, create notifications and manage the process. Bridge gaps between localization &amp;amp; development. Increase visibility and track globalization metrics.&lt;br /&gt;
&lt;br /&gt;
With Command Center, Globalyzer and Localyzer projects can be created and managed together with their data source repositories and the translation management systems.  It has been designed to make it easy to manage globalization and localization within an organization by administrators, managers, developers and translators.  &lt;br /&gt;
&lt;br /&gt;
[[File:CCProjects.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==== Additional Specialized Applications ====&lt;br /&gt;
In addition to the product suite, Lingoport has several integrated components to create and maintain software&lt;br /&gt;
for any language or cultural format in every release increment :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;IDE (Integrated Development Environment) Integration&#039;&#039;&#039;: Developers can identify and fix globalization and localization issues in real time.  &lt;br /&gt;
* &#039;&#039;&#039;LingoBot&#039;&#039;&#039; : Slack and Microsoft Teams system integration&lt;br /&gt;
Together with the products and assorted specialized applications, Lingoport enables continuous tracking and updates to the [[Terms_and_Definitions#internationalization|internationalization]] and [[Terms_and_Definitions#localization|localization]] status of software products.&lt;br /&gt;
&lt;br /&gt;
=The Continuous Globalization Process =&lt;br /&gt;
&lt;br /&gt;
* The process starts with the code repository. Developers check in code.   &lt;br /&gt;
* Command Center is where both Globalyzer and Localyzer application work side by side&lt;br /&gt;
** Globalyzer reports the globalization issues to be corrected in the code.&lt;br /&gt;
** Localyzer is used to: &lt;br /&gt;
*** set up the locales to translate to &lt;br /&gt;
*** identify the resource file types &lt;br /&gt;
*** set up the translation vendor, the TMS (translation management system), or the machine translation engine.&lt;br /&gt;
* Globalyzer can be used to create the resource files and push them to the code repository.&lt;br /&gt;
* Globalyzer and Localyzer analyses are executed from Command Center.  The resource files are identified and what needs to be sent to be translated.  If a translation vendor is machine translation, then the Localyzer job automatically does the translation, and pushes the translated files back to the code repository.  &lt;br /&gt;
* The Command Center Localyzer page has a button to send identified files to the translation vendor. Localyzer automatically checks for returned files, imports them and push the files back to the repository. &lt;br /&gt;
* During the Linguistic Review process, LingoportQA uses a special locale with identifier keys that can be used to indicate which terms need to be corrected.  LingoportQA submits the change.&lt;br /&gt;
** For machine translation Localyzer projects, the code is fixed and the new strings is pushed to the repo.  &lt;br /&gt;
** For TMS projects, an additional approval step is done, the files are imported and pushed to the repo. &lt;br /&gt;
&lt;br /&gt;
=Lingoport Product Details=&lt;br /&gt;
==Globalyzer==&lt;br /&gt;
Scans code and detects internationalization (i18n) issues&lt;br /&gt;
&lt;br /&gt;
* Connects to the Globalyzer server and logs in.  (This might not happen if local rule sets are used)&lt;br /&gt;
* Downloads rule sets from server, or uses local rulesets. &lt;br /&gt;
* Uses rule set to scan code.  &lt;br /&gt;
* Displays the i18n issues.&lt;br /&gt;
* Can run on developer machines in an Integrated Development Environment&lt;br /&gt;
* Runs on the Continuous Globalization System - these results are displayed on Lingoport Dashboard&lt;br /&gt;
&lt;br /&gt;
Lingoport&#039;s Globalyzer scans source code for [[Terms_and_Definitions#internationalization|internationalization]] issues. It uses sets of regular expression based rules [[Terms_and_Definitions#ruleset|(&#039;rule sets&#039;)]] on tokens found by lexers/parsers to detect these issues and to filter false positives. These rule sets are synced and stored on a single server, and may be downloaded onto numerous client applications which perform the source code scans. Please note that the rule sets are only lists of regular expressions, and do not contain any code. &lt;br /&gt;
&lt;br /&gt;
Client applications include an [[Terms_and_Definitions#IDE|IDE]] tool ([[Terms_and_Definitions#GlobalyzerIDE|&amp;quot;Globalyzer in IDE&amp;quot;]]), a desktop client ([[Terms_and_Definitions#GlobalyzerWorkbench|&amp;quot;Globalyzer Workbench&amp;quot;]]), command line clients ([[Terms_and_Definitions#GlobalyzerCommandLine|&amp;quot;Globalyzer CLI&amp;quot;]] and [[Terms_and_Definitions#GlobalyzerLite|&amp;quot;Globalyzer Lite&amp;quot;]]), and an [[Terms_and_Definitions#GlobalyzerAPI|API]] that may be used to construct custom programs including Globalyzer code scanning functionality. Client applications may produce scan results in XML, CSV, HTML and Excel formats. Results are also consumed by the Lingoport Dashboard to be analyzed and displayed.  The desktop client may also be used to view the results directly. It may be used to scan files that developers are working on, and will display the scan results in the IDEs console output window.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Globalyzer Server&amp;lt;/b&amp;gt; - allows development teams around the world to share and collaborate together using high powered [[Terms_and_Definitions#internationalization|internationalization]] [[Terms_and_Definitions#ruleset|rule sets]] during scanning of code. Development Teams can set up their own server, or use Lingoport&#039;s Globalyzer Server to set up users and rule sets. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Globalyzer Clients&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;b&amp;gt;Globalyzer Lite in IDE&amp;lt;/b&amp;gt; -  It is ideal for [[Terms_and_Definitions#scan|scanning]] code for internationalization issues on the fly and generating corresponding reports. It does not require an external database. Globalyzer Lite parses and executes Globalyzer Lite Project Definition XML files. Globalyzer Lite in IDE can be incorporated into developers&#039; IDE platforms for a true continuous improvement and development system.  &lt;br /&gt;
*&amp;lt;b&amp;gt;Globalyzer Workbench&amp;lt;/b&amp;gt; - provides a fully functional code analysis and editing environment for finding, fixing, testing and reporting on internationalization issues in a wide variety of programming languages. Globalyzer Workbench runs as a stand-alone desktop editor in an Eclipse Environment. &lt;br /&gt;
** Creates the Project Definition XML files.&lt;br /&gt;
** Sets up the Machine Learning environment.&lt;br /&gt;
** Updates Rule Sets on the server and exports them to the local clients.&lt;br /&gt;
** Creates the resource files to be used by Localyzer .&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Globalyzer Command Line&amp;lt;/b&amp;gt; - create automated [[Terms_and_Definitions#scan|Globalyzer scans]] as part of your [[Terms_and_Definitions#ContinuousIntegration|continuous integration]] so that you can report and track internationalization issues over time. There is also a Globalyzer Ant Client, Maven Client and XSL Client.  &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Globalyzer API&amp;lt;/b&amp;gt; - allows you to create [[Terms_and_Definitions#Globalyzerprojects|Globalyzer projects]] and [[Terms_and_Definitions#scan|scans]], execute scans, and generate reports from a Java program.&lt;br /&gt;
&lt;br /&gt;
==Localyzer (formerly LRM) ==&lt;br /&gt;
Localyzer  manages [[Terms_and_Definitions#resourcefiles|resource files]], which contain application text as key-value pairs (the keys are used in the application to retrieve the associated text). Resource files are typically translated across languages as part of the  [[Terms_and_Definitions#localization|localization]] process. Localyzer is used to determine the translation status of these resource files using a MySQL database.  It also automates the process of sending text out to [[Terms_and_Definitions#translationvendor|translation vendors]] when changes are made to be base (usually English) application text. &lt;br /&gt;
&lt;br /&gt;
Localyzer also performs various checks regarding the resource files. These checks include confirmation of file integrity, detection of duplicate or missing keys, and numerous other validations. When a translation vendor returns translated text for these resource files, Localyzer will detect the new content and perform its validations. If the validations pass then Localyzer will merge the new translations into appropriate resource files and check these in to source control. The check-in is typically done on a dedicated localization branch.&lt;br /&gt;
&lt;br /&gt;
==InContext Translation ==&lt;br /&gt;
Used by translators, resource files are instrumented as they are sent to [[Terms_and_Definitions#TMS|translation management systems]] so that they can see the string in the application and its context in order to translate more effectively.&lt;br /&gt;
&lt;br /&gt;
==InContext QA==&lt;br /&gt;
The translation reviewer can easily select instrumented resources in an application, identify poor translations, and give suggestions for making improvements.   InContext QA greatly improves the translation quality assurance process and can be a vital part of the continuous improvement environment.&lt;br /&gt;
&lt;br /&gt;
==Lingoport Dashboard==&lt;br /&gt;
The Lingoport Dashboard displays the [[Terms_and_Definitions#internationalization|internationalization]] and [[Terms_and_Definitions#localization|localization]] status of software projects.  The Lingoport Dashboard scans source code and reads in XML reports generated by Globalyzer and Localyzer. It then sends the information to the web server built on the [[Terms_and_Definitions#SonarQube|SonarQube]] platform and displays the information in an easy to digest fashion. This information includes all detected internationalization issues, which may be viewed in source code - with the affected line(s) highlighted. The translation status, translation history, and current translation efforts for projects are also displayed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Services used by Lingoport products ==&lt;br /&gt;
To check on services used by the Lingoport processes:&lt;br /&gt;
*incontext-server.service    &lt;br /&gt;
*lingoport-lingobot.service&lt;br /&gt;
*localyzerqa-server.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As the sudo user, these can be checked with the command:&lt;br /&gt;
 sudo systemctl status &amp;lt;service name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The services can be started with:&lt;br /&gt;
 sudo systemctl start &amp;lt;service name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The services can be stopped with:&lt;br /&gt;
 sudo systemctl stop &amp;lt;service name&amp;gt;&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Introduction&amp;diff=99839</id>
		<title>Introduction</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Introduction&amp;diff=99839"/>
		<updated>2026-04-02T23:51:25Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Lingoport - Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lingoport - Overview =&lt;br /&gt;
Test edit&lt;br /&gt;
Lingoport provides products and services which help our clients continuously meet [https://lingoport.com/what-is-i18n/ internationalization] and ongoing localization challenges relating to software development and active globalization. &lt;br /&gt;
&lt;br /&gt;
For more information about internationalization: https://lingoport.com/what-is-i18n/&lt;br /&gt;
&lt;br /&gt;
The Lingoport Products help software engineering teams with the [[Terms_and_Definitions#globalization|globalization]] tasks:&lt;br /&gt;
* Automatically find and manage [[Terms_and_Definitions#internationalization|internationalization]] issues and [[Terms_and_Definitions#localization|localization]] changes in your source code and [[Terms_and_Definitions#repository|repositories]] for a wide variety of programming languages.&lt;br /&gt;
* Integrate with [[Terms_and_Definitions#TMS|translation management systems]] and [[Terms_and_Definitions#localization|localization]] vendors for rapid [[Terms_and_Definitions#globalization|globalization]] development, testing and deployment.&lt;br /&gt;
* Verify translations in an efficient, process-driven manner. &lt;br /&gt;
* Works behind your firewall keeping your source code secure.&lt;br /&gt;
&lt;br /&gt;
===Contact Information:===&lt;br /&gt;
Phone: +1 303-444-8020 &lt;br /&gt;
&lt;br /&gt;
Email: info at Lingoport.com &lt;br /&gt;
&lt;br /&gt;
Lingoport, Inc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
Lingoport has been providing software [http://www.lingoport.com/software-internationalization-services/ internationalization (i18n) consulting services] since the company&#039;s inception in 2001. &lt;br /&gt;
&lt;br /&gt;
These services include:&lt;br /&gt;
* &#039;&#039;&#039;I18n Analysis&#039;&#039;&#039; - plan for new i18n projects, or gap analysis for mitigating i18n issues. A Lingoport architect and supporting team members clarify i18n business, technical and resource requirements based on market requirements, development discussions, programming technologies and Globalyzer scanning results.&lt;br /&gt;
* &#039;&#039;&#039;I18n Implementation&#039;&#039;&#039; - Lingoport provides i18n development teams that can work in a hybrid approach, collaborating with client teams, as well as in turnkey fashion.&lt;br /&gt;
* &#039;&#039;&#039;General i18n Consulting and Custom Projects&#039;&#039;&#039; - Sometimes specific problem solving or i18n bug fixing is needed. Lingoport can fulfill that resource need, working in coordination with your teams.&lt;br /&gt;
* &#039;&#039;&#039;Process Customization&#039;&#039;&#039; - Any Lingoport product purchase includes consulting time to customize and optimize the Lingoport product suite for the customer.&lt;br /&gt;
&lt;br /&gt;
== Lingoport Products ==&lt;br /&gt;
[[File:Lingoport Products Overview.JPG|700px|center]]&lt;br /&gt;
&lt;br /&gt;
The Lingoport products support the continuous globalization process, from the code repository to the translation vendors and back. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[About Globalyzer | Globalyzer]]&#039;&#039;&#039; – Supports individuals and entire development teams in finding, fixing and maintaining internationalization issues in code in a broad list of programming languages. (More information at [http://lingoport.com/globalyzer Lingoport.com/Globalyzer]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[About Localyzer | Localyzer]]&#039;&#039;&#039; – Provides simplified resource file management, verification and translation updating.  Localyzer helps development and localization teams keep up with initial and ongoing application interface resources, their translation and automated re-insertion into product builds. (More information at [https://lingoport.com/software-internationalization-products/localyzer-localization-automation/ Lingoport.com/Localyzer]).&lt;br /&gt;
* &#039;&#039;&#039;Machine Translation&#039;&#039;&#039; - Lingoport Supports several popular machine translation vendors as part of the continuous globalization and localization process.&lt;br /&gt;
** [https://aws.amazon.com/translate/  AWS Translate]&lt;br /&gt;
** [https://www.systransoft.com/systran/translation-technology/neural-machine-translation-nmt/ Systran]&lt;br /&gt;
** [https://cloud.google.com/translate Google Translate] &lt;br /&gt;
** [https://www.microsoft.com/en-us/translator/ Microsoft Translator]&lt;br /&gt;
* &#039;&#039;&#039;Translation Management Systems(TMS)&#039;&#039;&#039;: Lingoport Localyzer is integrated with leading TMS platforms for a fully automated process from code repository to translator and back.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[LocalyzerQA | LocalyzerQA]]&#039;&#039;&#039; - A simplified way to perform linguistic review and verify and correct translation issues as part of the continuous globalization process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Express Suite&#039;&#039;&#039;-  uses the Lingoport software suite and integrates core capabilities with GitHub to bring developers instant access to languages, all integrated with the way they already work. Linguistic review is done in context, for accuracy and application specific terminology.&lt;br /&gt;
* [[Globalyzer i18n Express |Globalyzer i18n Express]]- Globalyzer i18n Express is a GitHub application which scans the added and modified files checked in on a GitHub commit, looking for i18n issues. The committed files are scanned with default rule sets. Files checked in will be scanned and a summary will be added as a comment to the commit in GitHub. &lt;br /&gt;
* [[Localyzer Express |Localyzer Express]] - Localyzer Express is a GitHub application which allows for a near immediate machine translation of standard application resource files. Resource files are used by internationalized applications to display user facing strings (such as user interface labels) in different locales (languages, country, variant). As an example, messages.properties, an English resource file, can be translated in French and Japanese, respectively messages_fr.properties and messages_ja.properties. &lt;br /&gt;
* [[LocalyzerQA | LocalyzerQA]] - A simplified way to perform linguistic review in a running application and verify and correct translation issues as part of the continuous globalization process. When paired with [[Localyzer Express |Localyzer Express]], it allows for an &#039;&#039;always-on&#039;&#039; machine translation followed by linguistic review in the context of the running application.&lt;br /&gt;
&lt;br /&gt;
== Command Center ==&lt;br /&gt;
&lt;br /&gt;
[[File:IntroductionSignIn.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Command Center&#039;&#039;&#039; is the hub of the Lingoport products. See it all, drill down, create notifications and manage the process. Bridge gaps between localization &amp;amp; development. Increase visibility and track globalization metrics.&lt;br /&gt;
&lt;br /&gt;
With Command Center, Globalyzer and Localyzer projects can be created and managed together with their data source repositories and the translation management systems.  It has been designed to make it easy to manage globalization and localization within an organization by administrators, managers, developers and translators.  &lt;br /&gt;
&lt;br /&gt;
[[File:CCProjects.jpg|600px|center]]&lt;br /&gt;
&lt;br /&gt;
==== Additional Specialized Applications ====&lt;br /&gt;
In addition to the product suite, Lingoport has several integrated components to create and maintain software&lt;br /&gt;
for any language or cultural format in every release increment :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;IDE (Integrated Development Environment) Integration&#039;&#039;&#039;: Developers can identify and fix globalization and localization issues in real time.  &lt;br /&gt;
* &#039;&#039;&#039;LingoBot&#039;&#039;&#039; : Slack and Microsoft Teams system integration&lt;br /&gt;
Together with the products and assorted specialized applications, Lingoport enables continuous tracking and updates to the [[Terms_and_Definitions#internationalization|internationalization]] and [[Terms_and_Definitions#localization|localization]] status of software products.&lt;br /&gt;
&lt;br /&gt;
=The Continuous Globalization Process =&lt;br /&gt;
&lt;br /&gt;
* The process starts with the code repository. Developers check in code.   &lt;br /&gt;
* Command Center is where both Globalyzer and Localyzer application work side by side&lt;br /&gt;
** Globalyzer reports the globalization issues to be corrected in the code.&lt;br /&gt;
** Localyzer is used to: &lt;br /&gt;
*** set up the locales to translate to &lt;br /&gt;
*** identify the resource file types &lt;br /&gt;
*** set up the translation vendor, the TMS (translation management system), or the machine translation engine.&lt;br /&gt;
* Globalyzer can be used to create the resource files and push them to the code repository.&lt;br /&gt;
* Globalyzer and Localyzer analyses are executed from Command Center.  The resource files are identified and what needs to be sent to be translated.  If a translation vendor is machine translation, then the Localyzer job automatically does the translation, and pushes the translated files back to the code repository.  &lt;br /&gt;
* The Command Center Localyzer page has a button to send identified files to the translation vendor. Localyzer automatically checks for returned files, imports them and push the files back to the repository. &lt;br /&gt;
* During the Linguistic Review process, LingoportQA uses a special locale with identifier keys that can be used to indicate which terms need to be corrected.  LingoportQA submits the change.&lt;br /&gt;
** For machine translation Localyzer projects, the code is fixed and the new strings is pushed to the repo.  &lt;br /&gt;
** For TMS projects, an additional approval step is done, the files are imported and pushed to the repo. &lt;br /&gt;
&lt;br /&gt;
=Lingoport Product Details=&lt;br /&gt;
==Globalyzer==&lt;br /&gt;
Scans code and detects internationalization (i18n) issues&lt;br /&gt;
&lt;br /&gt;
* Connects to the Globalyzer server and logs in.  (This might not happen if local rule sets are used)&lt;br /&gt;
* Downloads rule sets from server, or uses local rulesets. &lt;br /&gt;
* Uses rule set to scan code.  &lt;br /&gt;
* Displays the i18n issues.&lt;br /&gt;
* Can run on developer machines in an Integrated Development Environment&lt;br /&gt;
* Runs on the Continuous Globalization System - these results are displayed on Lingoport Dashboard&lt;br /&gt;
&lt;br /&gt;
Lingoport&#039;s Globalyzer scans source code for [[Terms_and_Definitions#internationalization|internationalization]] issues. It uses sets of regular expression based rules [[Terms_and_Definitions#ruleset|(&#039;rule sets&#039;)]] on tokens found by lexers/parsers to detect these issues and to filter false positives. These rule sets are synced and stored on a single server, and may be downloaded onto numerous client applications which perform the source code scans. Please note that the rule sets are only lists of regular expressions, and do not contain any code. &lt;br /&gt;
&lt;br /&gt;
Client applications include an [[Terms_and_Definitions#IDE|IDE]] tool ([[Terms_and_Definitions#GlobalyzerIDE|&amp;quot;Globalyzer in IDE&amp;quot;]]), a desktop client ([[Terms_and_Definitions#GlobalyzerWorkbench|&amp;quot;Globalyzer Workbench&amp;quot;]]), command line clients ([[Terms_and_Definitions#GlobalyzerCommandLine|&amp;quot;Globalyzer CLI&amp;quot;]] and [[Terms_and_Definitions#GlobalyzerLite|&amp;quot;Globalyzer Lite&amp;quot;]]), and an [[Terms_and_Definitions#GlobalyzerAPI|API]] that may be used to construct custom programs including Globalyzer code scanning functionality. Client applications may produce scan results in XML, CSV, HTML and Excel formats. Results are also consumed by the Lingoport Dashboard to be analyzed and displayed.  The desktop client may also be used to view the results directly. It may be used to scan files that developers are working on, and will display the scan results in the IDEs console output window.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Globalyzer Server&amp;lt;/b&amp;gt; - allows development teams around the world to share and collaborate together using high powered [[Terms_and_Definitions#internationalization|internationalization]] [[Terms_and_Definitions#ruleset|rule sets]] during scanning of code. Development Teams can set up their own server, or use Lingoport&#039;s Globalyzer Server to set up users and rule sets. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Globalyzer Clients&amp;lt;/b&amp;gt;&lt;br /&gt;
*&amp;lt;b&amp;gt;Globalyzer Lite in IDE&amp;lt;/b&amp;gt; -  It is ideal for [[Terms_and_Definitions#scan|scanning]] code for internationalization issues on the fly and generating corresponding reports. It does not require an external database. Globalyzer Lite parses and executes Globalyzer Lite Project Definition XML files. Globalyzer Lite in IDE can be incorporated into developers&#039; IDE platforms for a true continuous improvement and development system.  &lt;br /&gt;
*&amp;lt;b&amp;gt;Globalyzer Workbench&amp;lt;/b&amp;gt; - provides a fully functional code analysis and editing environment for finding, fixing, testing and reporting on internationalization issues in a wide variety of programming languages. Globalyzer Workbench runs as a stand-alone desktop editor in an Eclipse Environment. &lt;br /&gt;
** Creates the Project Definition XML files.&lt;br /&gt;
** Sets up the Machine Learning environment.&lt;br /&gt;
** Updates Rule Sets on the server and exports them to the local clients.&lt;br /&gt;
** Creates the resource files to be used by Localyzer .&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Globalyzer Command Line&amp;lt;/b&amp;gt; - create automated [[Terms_and_Definitions#scan|Globalyzer scans]] as part of your [[Terms_and_Definitions#ContinuousIntegration|continuous integration]] so that you can report and track internationalization issues over time. There is also a Globalyzer Ant Client, Maven Client and XSL Client.  &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Globalyzer API&amp;lt;/b&amp;gt; - allows you to create [[Terms_and_Definitions#Globalyzerprojects|Globalyzer projects]] and [[Terms_and_Definitions#scan|scans]], execute scans, and generate reports from a Java program.&lt;br /&gt;
&lt;br /&gt;
==Localyzer (formerly LRM) ==&lt;br /&gt;
Localyzer  manages [[Terms_and_Definitions#resourcefiles|resource files]], which contain application text as key-value pairs (the keys are used in the application to retrieve the associated text). Resource files are typically translated across languages as part of the  [[Terms_and_Definitions#localization|localization]] process. Localyzer is used to determine the translation status of these resource files using a MySQL database.  It also automates the process of sending text out to [[Terms_and_Definitions#translationvendor|translation vendors]] when changes are made to be base (usually English) application text. &lt;br /&gt;
&lt;br /&gt;
Localyzer also performs various checks regarding the resource files. These checks include confirmation of file integrity, detection of duplicate or missing keys, and numerous other validations. When a translation vendor returns translated text for these resource files, Localyzer will detect the new content and perform its validations. If the validations pass then Localyzer will merge the new translations into appropriate resource files and check these in to source control. The check-in is typically done on a dedicated localization branch.&lt;br /&gt;
&lt;br /&gt;
==InContext Translation ==&lt;br /&gt;
Used by translators, resource files are instrumented as they are sent to [[Terms_and_Definitions#TMS|translation management systems]] so that they can see the string in the application and its context in order to translate more effectively.&lt;br /&gt;
&lt;br /&gt;
==InContext QA==&lt;br /&gt;
The translation reviewer can easily select instrumented resources in an application, identify poor translations, and give suggestions for making improvements.   InContext QA greatly improves the translation quality assurance process and can be a vital part of the continuous improvement environment.&lt;br /&gt;
&lt;br /&gt;
==Lingoport Dashboard==&lt;br /&gt;
The Lingoport Dashboard displays the [[Terms_and_Definitions#internationalization|internationalization]] and [[Terms_and_Definitions#localization|localization]] status of software projects.  The Lingoport Dashboard scans source code and reads in XML reports generated by Globalyzer and Localyzer. It then sends the information to the web server built on the [[Terms_and_Definitions#SonarQube|SonarQube]] platform and displays the information in an easy to digest fashion. This information includes all detected internationalization issues, which may be viewed in source code - with the affected line(s) highlighted. The translation status, translation history, and current translation efforts for projects are also displayed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Services used by Lingoport products ==&lt;br /&gt;
To check on services used by the Lingoport processes:&lt;br /&gt;
*incontext-server.service    &lt;br /&gt;
*lingoport-lingobot.service&lt;br /&gt;
*localyzerqa-server.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As the sudo user, these can be checked with the command:&lt;br /&gt;
 sudo systemctl status &amp;lt;service name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The services can be started with:&lt;br /&gt;
 sudo systemctl start &amp;lt;service name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The services can be stopped with:&lt;br /&gt;
 sudo systemctl stop &amp;lt;service name&amp;gt;&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Globalyzer_Server_Installation&amp;diff=99654</id>
		<title>Globalyzer Server Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Globalyzer_Server_Installation&amp;diff=99654"/>
		<updated>2025-11-21T17:47:52Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Set up install.conf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites =&lt;br /&gt;
Before installing or updating the Globalyzer Server, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server is the central rules and configuration server for the Globalyzer static analysis clients. &lt;br /&gt;
&lt;br /&gt;
* Globalyzer Clients (CLI, IDE plugins, or Globalyzer invoked from Command Center) connect to the Globalyzer Server to:&lt;br /&gt;
** Retrieve rule sets and scanning configurations&lt;br /&gt;
** Optionally upload scan metadata (depending on configuration)&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server can be hosted:&lt;br /&gt;
&lt;br /&gt;
* By Lingoport in the cloud, or&lt;br /&gt;
* On-premises, under the customer’s control&lt;br /&gt;
&lt;br /&gt;
This document describes deploying an **on-premises Globalyzer Server** using Docker and MySQL 8, with host directories mounted as Docker bind volumes.&lt;br /&gt;
&lt;br /&gt;
=== Basic Deployment Diagram ===&lt;br /&gt;
&lt;br /&gt;
At a high level:&lt;br /&gt;
&lt;br /&gt;
* One or more **Globalyzer Clients** (developer workstations, CI servers, Command Center, etc.) connect to&lt;br /&gt;
* A **Globalyzer Server instance** (running in Docker on a Linux VM)&lt;br /&gt;
* The Globalyzer Server uses a dedicated **MySQL 8 database container** for its metadata and configuration&lt;br /&gt;
&lt;br /&gt;
(For Command Center users: Command Center will typically run Globalyzer Client jobs and point them at the Globalyzer Server URL configured here.)&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
&lt;br /&gt;
When &#039;&#039;&#039;Lingoport hosts&#039;&#039;&#039; the Globalyzer Server, access from your environment (CI systems, developer machines, Command Center, etc.) to the hosted server must be arranged. Lingoport manages security, including which IP addresses or networks are allowed to connect.&lt;br /&gt;
&lt;br /&gt;
When installing Globalyzer Server &#039;&#039;&#039;on premises&#039;&#039;&#039;, the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is critical to a successful deployment. In particular, the IT team that sets up the Linux system must understand:&lt;br /&gt;
&lt;br /&gt;
* That Docker will be used to run both MySQL 8 and the Globalyzer Server&lt;br /&gt;
* That Globalyzer Clients will connect to the Globalyzer Server URL&lt;br /&gt;
* Which users need access to the web UI and via which ports / DNS names&lt;br /&gt;
&lt;br /&gt;
Lingoport recommends a brief meeting with the IT team &#039;&#039;&#039;before installation&#039;&#039;&#039; to confirm:&lt;br /&gt;
&lt;br /&gt;
* Hardware and OS are ready&lt;br /&gt;
* Docker is installed and usable&lt;br /&gt;
* Firewall and DNS will allow access to the Globalyzer Server URL&lt;br /&gt;
* Outbound access to Docker Hub is available (alternatively a docker image snapshot may be provided over SFTP)&lt;br /&gt;
&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
Before installing Globalyzer Server, ensure the following:&lt;br /&gt;
&lt;br /&gt;
* Hardware&lt;br /&gt;
* Linux&lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall / Ports&lt;br /&gt;
* (Optional but recommended) HTTPS and HTTP/2&lt;br /&gt;
&lt;br /&gt;
The next sections describe each of these points.&lt;br /&gt;
&lt;br /&gt;
== Hardware &amp;amp; Software Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following sections describe the hardware and software requirements for Globalyzer Server.&lt;br /&gt;
&lt;br /&gt;
Note that this section is specific to Globalyzer Server. Command Center has separate hardware requirements described on the [[Command_Center_Installation]] page.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
Typical minimums for a dedicated Globalyzer Server VM:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Required (minimum)&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 cores (4 preferred)&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 8 GB (16 GB preferred for larger teams)&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 100 GB (data growth depends on usage)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Server may:&lt;br /&gt;
&lt;br /&gt;
* Be hosted by Lingoport&lt;br /&gt;
* Reside on its own VM&lt;br /&gt;
* Share a VM with other Lingoport components (for example, Command Center), provided hardware resources are sufficient&lt;br /&gt;
&lt;br /&gt;
Other Linux and Windows machines may have Globalyzer Clients installed that connect to this server.&lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker-based installation:&lt;br /&gt;
&lt;br /&gt;
* The Globalyzer Server application (Tomcat + Globalyzer) runs in a Docker container&lt;br /&gt;
* The MySQL 8 database runs in a separate Docker container&lt;br /&gt;
* Configuration and export directories are mounted as &#039;&#039;&#039;bind volumes&#039;&#039;&#039; on the Linux VM&lt;br /&gt;
&lt;br /&gt;
This requires:&lt;br /&gt;
&lt;br /&gt;
* A supported Linux distribution (see below)&lt;br /&gt;
* A working Docker installation (Engine + CLI)&lt;br /&gt;
&lt;br /&gt;
=== Supported Browsers and Versions ===&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Server UI is accessed via a browser. The following browsers are supported:&lt;br /&gt;
&lt;br /&gt;
* Chrome: 117+&lt;br /&gt;
* Edge: 117+&lt;br /&gt;
* Firefox: 71+&lt;br /&gt;
&lt;br /&gt;
== Access and Ports / Firewall ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server needs to be accessible by:&lt;br /&gt;
&lt;br /&gt;
* Lingoport and/or customer admins (for configuration, rule management, monitoring)&lt;br /&gt;
* Globalyzer Clients (CLI, IDE, Command Center, CI jobs, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Ports (Internal to company network) ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left; width=50%;&amp;quot;&lt;br /&gt;
! Services !! Ports !! Inbound (session) !! Outbound (session) !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| SSH (for system config/maintenance) || 22 || Y || N || System configuration and maintenance on the Globalyzer Server VM.&lt;br /&gt;
|-&lt;br /&gt;
| Globalyzer Server (HTTP/HTTPS) || 8080 (HTTP) and/or 443 (HTTPS) || Y || N || Default 8080 (configurable via &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;). HTTPS usually provided by a reverse proxy (e.g. Apache, Nginx) and an SSL certificate.&lt;br /&gt;
|-&lt;br /&gt;
| SMTP/SMTPS || 25 or 465 or 587 || N || Y || For email notifications from Globalyzer Server. Depends on corporate mail setup.&lt;br /&gt;
|-&lt;br /&gt;
| Globalyzer Clients → Globalyzer Server || 8080 or 443 || N || Y || Outbound from client machines / CI / Command Center to the Globalyzer Server URL.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: MySQL runs in a Docker container on the same VM and is not typically exposed externally. All access is from the Globalyzer Server container.&lt;br /&gt;
&lt;br /&gt;
==== External Access ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left; width=50%;&amp;quot;&lt;br /&gt;
! Services !! Ports !! Inbound !! Outbound !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Lingoport SSH access || 22 || Y || N || Optional but recommended for ease of upgrades and troubleshooting (if allowed by security policy).&lt;br /&gt;
|-&lt;br /&gt;
| RHEL/Alma/Ubuntu Packages || 80 (Debian) 443 (RHEL/others) || N || Y || Operating system package repositories (may be internal mirrors).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hub.docker.com&amp;lt;/code&amp;gt; || 80 and 443 || N || Y || Location of the &amp;lt;code&amp;gt;lingoport/gzserver&amp;lt;/code&amp;gt; Docker image. Image snapshot may also be provided by Lingoport over SFTP as an alternative.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HTTPS ==&lt;br /&gt;
&lt;br /&gt;
HTTPS is recommended but not strictly necessary for Globalyzer Server. Many customers choose to:&lt;br /&gt;
&lt;br /&gt;
* Expose Globalyzer Server internally over HTTP (port 8080), and/or&lt;br /&gt;
* Place a reverse proxy (such as Apache or Nginx) in front of the container, terminating HTTPS on port 443.&lt;br /&gt;
&lt;br /&gt;
If HTTPS is already standardized by your IT group, follow that process and simply point the HTTPS VirtualHost/ServerName to the Globalyzer Server container / port.&lt;br /&gt;
&lt;br /&gt;
For an example configuration, see:&lt;br /&gt;
* [[ HTTPS configuration | HTTPS Configuration ]]&lt;br /&gt;
&lt;br /&gt;
== Email Sender ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server can send notifications to users (for example, license warnings or other system emails) depending on configuration.&lt;br /&gt;
&lt;br /&gt;
For email delivery, you will need the following information:&lt;br /&gt;
&lt;br /&gt;
* SMTP host URL (such as &amp;lt;code&amp;gt;smtp.yourcompany.com&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Authorization method (SMTP, SMTPS, etc.)&lt;br /&gt;
* Sender email address (for example &amp;lt;code&amp;gt;globalyzer@customerdomain.com&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Sender password (this is the value placed in &amp;lt;code&amp;gt;email_password&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Additional email settings (such as host and port) may be configured in the Globalyzer server configuration. Coordinate with Lingoport support if you are unsure which values to use.&lt;br /&gt;
&lt;br /&gt;
== Docker Install ==&lt;br /&gt;
&lt;br /&gt;
Docker is the underlying platform used to run the Globalyzer Server and MySQL 8 containers. &lt;br /&gt;
&lt;br /&gt;
The supported versions of Linux for Docker installation are:&lt;br /&gt;
&lt;br /&gt;
* [[Installing Docker on RedHat Enterprise Linux 8 |RedHat Enterprise Linux 8]]&lt;br /&gt;
* [[Oracle Linux 8]]&lt;br /&gt;
* [[Installing Docker on Ubuntu 20.04|Ubuntu 20.04]]&lt;br /&gt;
* [[Installing_Docker_on_Amazon_Linux_2|Amazon Linux 2]] (EOL 2025-06)&lt;br /&gt;
&lt;br /&gt;
Other Linux versions may work, but the above are the distributions and processes that have been verified.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server manages its own user database and can also integrate with your directory service (LDAP) or SAML/SSO depending on license and version.&lt;br /&gt;
&lt;br /&gt;
=== Globalyzer Server User Database ===&lt;br /&gt;
&lt;br /&gt;
At installation time:&lt;br /&gt;
&lt;br /&gt;
* A default administrator user is created (details provided by Lingoport support).&lt;br /&gt;
* It is strongly recommended to change the initial administrator password and store it securely.&lt;br /&gt;
&lt;br /&gt;
From that admin account you can create additional Globalyzer Server users and manage roles.&lt;br /&gt;
&lt;br /&gt;
=== LDAP Integration ===&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server can use your company’s LDAP directory for authentication and authorization. In this mode:&lt;br /&gt;
&lt;br /&gt;
* Users log in with their LDAP username and password.&lt;br /&gt;
* If they are authenticated and belong to one of the configured Globalyzer LDAP groups (admin / manager / member), a Globalyzer account is created/updated using LDAP attributes.&lt;br /&gt;
* LDAP remains the source of truth for user lifecycle: when a user is removed from LDAP they can no longer access Globalyzer.&lt;br /&gt;
&lt;br /&gt;
LDAP configuration involves:&lt;br /&gt;
&lt;br /&gt;
* Enabling LDAP mode (environment variable &amp;lt;code&amp;gt;GZSERVER_LDAP_MODE=true&amp;lt;/code&amp;gt; for the server process).&lt;br /&gt;
* Configuring the LDAP section in &amp;lt;code&amp;gt;GzserverConfig.groovy&amp;lt;/code&amp;gt;, including:&lt;br /&gt;
** Mapping user attributes (first name, last name, email, phone, title, country, time zone) via &amp;lt;code&amp;gt;gzserver.ldap.ctx.*&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Mapping LDAP groups to Globalyzer roles via &amp;lt;code&amp;gt;gzserver.ldap.admin.groupName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gzserver.ldap.manager.groupName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gzserver.ldap.member.groupName&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Defining a “no access” message for users who authenticate but are not in any Globalyzer LDAP group.&lt;br /&gt;
** Configuring LDAP server connection properties, including:&lt;br /&gt;
*** LDAP server URL (for example &amp;lt;code&amp;gt;grails.plugin.springsecurity.ldap.context.server = &#039;ldap://ldap.example.com:389&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
*** Manager DN and password used for LDAP binds&lt;br /&gt;
*** Base DNs and filters for user and group searches.&lt;br /&gt;
&lt;br /&gt;
Passwords in &amp;lt;code&amp;gt;GzserverConfig.groovy&amp;lt;/code&amp;gt; may be stored either in plain text or encrypted using the &amp;lt;code&amp;gt;globalyzer-encrypt-password.jar&amp;lt;/code&amp;gt; utility distributed with the Globalyzer Server zip. See [[Globalyzer_Server_LDAP_Installation]] for detailed instructions and examples, including:&lt;br /&gt;
&lt;br /&gt;
* Encrypted manager passwords&lt;br /&gt;
* A dedicated continuous integration (CI) user (for Globalyzer Lite / automated scans) configured via:&lt;br /&gt;
** &amp;lt;code&amp;gt;gzserver.ldap.ci_user&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gzserver.ldap.ci_password&amp;lt;/code&amp;gt; (plain text or &amp;lt;code&amp;gt;ENC(...)&amp;lt;/code&amp;gt;)&lt;br /&gt;
* How login behavior changes on LDAP servers (LDAP User / Password fields, removal of “Forgot password” link, restrictions on editing profiles, etc.)&lt;br /&gt;
* How to enable detailed LDAP debug logging using &amp;lt;code&amp;gt;logback-debug.groovy&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;-Dlogging.config=...&amp;lt;/code&amp;gt; JVM option.&lt;br /&gt;
&lt;br /&gt;
For Docker-based deployments, the LDAP configuration is still applied inside the Globalyzer Server container via &amp;lt;code&amp;gt;GzserverConfig.groovy&amp;lt;/code&amp;gt; and environment variables. The steps in [[Globalyzer_Server_LDAP_Installation]] apply regardless of whether the server is deployed via Docker or on bare Tomcat.&lt;br /&gt;
&lt;br /&gt;
=== SAML / SSO Integration ===&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server can also be integrated with SAML-based SSO so that users authenticate via your corporate Identity Provider (IdP).&lt;br /&gt;
&lt;br /&gt;
At a high level, SSO configuration involves:&lt;br /&gt;
&lt;br /&gt;
* Configuring the Globalyzer Server as a SAML Service Provider (SP).&lt;br /&gt;
* Importing/exchanging metadata (IdP and SP).&lt;br /&gt;
* Adjusting Globalyzer’s security configuration to delegate authentication to the SSO provider.&lt;br /&gt;
* Coordinating user and group mapping so SSO identities map to the appropriate Globalyzer roles.&lt;br /&gt;
&lt;br /&gt;
The SSO configuration is performed after the base Docker installation and does not change the installation steps described on this page.&lt;br /&gt;
&lt;br /&gt;
For detailed SSO configuration steps and examples, see:&lt;br /&gt;
* [[Globalyzer_Server_SSO_Installation]]&lt;br /&gt;
&lt;br /&gt;
= New Globalyzer Server Installation =&lt;br /&gt;
&lt;br /&gt;
== sudo user ==&lt;br /&gt;
&lt;br /&gt;
A Linux user with &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; privileges is required as the user under which to prepare and run the installation scripts. For example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ec2-user&amp;lt;/code&amp;gt; on Amazon Linux systems&lt;br /&gt;
&lt;br /&gt;
The Globalyzer installation script itself must ultimately run with root privileges. It will exit with an error if it is not run as root.&lt;br /&gt;
&lt;br /&gt;
== Create the database conf directory ==&lt;br /&gt;
&lt;br /&gt;
Use the sudo user’s home directory as the base for Docker data directories. For example, on Amazon Linux with user &amp;lt;code&amp;gt;ec2-user&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Home: &amp;lt;code&amp;gt;/home/ec2-user&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The installer will create the MySQL configuration directory automatically:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/home/ec2-user/mysql/conf.d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optionally, you may create a basic MySQL client configuration file as well:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vi /home/&amp;amp;lt;user&amp;amp;gt;/mysql/conf.d/mysql.cnf&lt;br /&gt;
&lt;br /&gt;
[client]&lt;br /&gt;
default-character-set = utf8mb4&lt;br /&gt;
[mysql]&lt;br /&gt;
default-character-set = utf8mb4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The installer also creates additional directories under &amp;lt;code&amp;gt;home_directory&amp;lt;/code&amp;gt; for exports, backups, and internal configuration.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Your Lingoport contact will provide the Globalyzer Server installation scripts and configuration file. You should receive files similar to:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;InstallGzserver.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;UpdateGzserver.sh&amp;lt;/code&amp;gt; (name may vary)&lt;br /&gt;
* &amp;lt;code&amp;gt;UninstallGzserver.sh&amp;lt;/code&amp;gt; (name may vary)&lt;br /&gt;
&lt;br /&gt;
Copy these files to a directory under the sudo user’s home, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/ec2-user/globalyzerServerInstall&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or, in general:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/&amp;amp;lt;user&amp;amp;gt;/globalyzerServerInstall&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; file controls installation settings. The top portion is intended to be edited by the customer; the lower portion is preconfigured for access to the Lingoport Docker Hub account.&lt;br /&gt;
&lt;br /&gt;
A typical &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; will look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Provide your home directory, lingoport/ and gzserver/ folders will be created&lt;br /&gt;
#&lt;br /&gt;
home_directory=/home/ec2-user&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide the Globalyzer Server version&lt;br /&gt;
#&lt;br /&gt;
gzserver_image_version=6.8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide the Globalyzer Server port&lt;br /&gt;
#&lt;br /&gt;
serverPort=8080&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide the MYSQL root password you want to create for the MySQL database container&lt;br /&gt;
#&lt;br /&gt;
database_root_password=_dbrootpass_&lt;br /&gt;
&lt;br /&gt;
# Provide an email username and password you wish to use for automated emails from the system&lt;br /&gt;
email_username=_emailusername_&lt;br /&gt;
email_password=_emailpassword_&lt;br /&gt;
&lt;br /&gt;
# The URL the server will use&lt;br /&gt;
gzserver_url=_gzserverurl_&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# DO NOT CHANGE THE STUFF BELOW&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide your Docker Hub username&lt;br /&gt;
#&lt;br /&gt;
docker_username=lingoport_provided_customer_account&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide your Docker Hub account token&lt;br /&gt;
#&lt;br /&gt;
docker_account_token=lingoport_provided&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide the Docker network name you want to create&lt;br /&gt;
#&lt;br /&gt;
database_network=mysqlnetsgzserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
docker_image=lingoport/gzserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit the following values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;gzserver_image_version&amp;lt;/code&amp;gt; – the Globalyzer Server image version provided by Lingoport (for example &amp;lt;code&amp;gt;6.8&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &amp;lt;code&amp;gt;serverPort&amp;lt;/code&amp;gt; – host port for HTTP access to the Globalyzer Server container (default &amp;lt;code&amp;gt;8080&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &amp;lt;code&amp;gt;database_root_password&amp;lt;/code&amp;gt; – root password to create for the MySQL 8 database container.&lt;br /&gt;
* &amp;lt;code&amp;gt;email_username&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;email_password&amp;lt;/code&amp;gt; – credentials for the SMTP account you wish to use for system email notifications. These are &#039;&#039;&#039;not&#039;&#039;&#039; prompted for by the installer and must be set correctly in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;gzserver_url&amp;lt;/code&amp;gt; – the full URL that clients will use to reach Globalyzer Server, such as:&lt;br /&gt;
** &amp;lt;code&amp;gt;http://myserver.mycompany.com:8080/gzserver&amp;lt;/code&amp;gt; (HTTP)&lt;br /&gt;
** &amp;lt;code&amp;gt;https://globalyzer.mycompany.com/gzserver&amp;lt;/code&amp;gt; (behind a reverse proxy)&lt;br /&gt;
&lt;br /&gt;
The initial &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; provided by Lingoport typically uses placeholder values such as &amp;lt;code&amp;gt;_dbrootpass_&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;_emailusername_&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;_emailpassword_&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;_gzserverurl_&amp;lt;/code&amp;gt;. These are examples only and must be replaced before production use.&lt;br /&gt;
&lt;br /&gt;
Do &#039;&#039;&#039;not&#039;&#039;&#039; change the values below the &amp;lt;code&amp;gt;# DO NOT CHANGE THE STUFF BELOW&amp;lt;/code&amp;gt; line unless instructed by Lingoport support. Those values:&lt;br /&gt;
&lt;br /&gt;
* Provide the Docker Hub username and token used to pull the &amp;lt;code&amp;gt;lingoport/gzserver&amp;lt;/code&amp;gt; image&lt;br /&gt;
* Configure the Docker network name and image name&lt;br /&gt;
&lt;br /&gt;
== Run InstallGzserver.sh ==&lt;br /&gt;
&lt;br /&gt;
From the directory containing the scripts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/&amp;amp;lt;user&amp;amp;gt;/globalyzerServerInstall&lt;br /&gt;
chmod +x *.sh&lt;br /&gt;
sudo ./InstallGzserver.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* The script must run as root (for example via &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt;). It will exit if &amp;lt;code&amp;gt;id -u&amp;lt;/code&amp;gt; is not 0.&lt;br /&gt;
* If any of the following are missing or empty in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;, the script will prompt for them:&lt;br /&gt;
** &amp;lt;code&amp;gt;database_root_password&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gzserver_url&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;docker_username&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;docker_account_token&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;email_username&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;email_password&amp;lt;/code&amp;gt; are not prompted and will be used exactly as written in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== What the installer does ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;InstallGzserver.sh&amp;lt;/code&amp;gt; performs the following high-level steps:&lt;br /&gt;
&lt;br /&gt;
# Reads &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; and prompts for any missing values listed above.&lt;br /&gt;
# Creates directories under &amp;lt;code&amp;gt;home_directory&amp;lt;/code&amp;gt;:&lt;br /&gt;
## &amp;lt;code&amp;gt;lingoport/&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;gzserver/export&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;gzserver/config&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;gzserver/backup&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;mysql/conf.d&amp;lt;/code&amp;gt;&lt;br /&gt;
# Changes directory to &amp;lt;code&amp;gt;$home_directory/gzserver/config&amp;lt;/code&amp;gt; to store container IDs and related files.&lt;br /&gt;
# Ensures a Docker network exists with name &amp;lt;code&amp;gt;database_network&amp;lt;/code&amp;gt; (default: &amp;lt;code&amp;gt;mysqlnetsgzserver&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Starts a MySQL 8 container:&lt;br /&gt;
## Name: &amp;lt;code&amp;gt;gzserverDatabase&amp;lt;/code&amp;gt;&lt;br /&gt;
## Network alias: &amp;lt;code&amp;gt;mysqlservergzserver&amp;lt;/code&amp;gt;&lt;br /&gt;
## Network: &amp;lt;code&amp;gt;$database_network&amp;lt;/code&amp;gt;&lt;br /&gt;
## Environment:&lt;br /&gt;
### &amp;lt;code&amp;gt;MYSQL_ROOT_PASSWORD=$database_root_password&amp;lt;/code&amp;gt;&lt;br /&gt;
### &amp;lt;code&amp;gt;MYSQL_DATABASE=GZSERVER&amp;lt;/code&amp;gt;&lt;br /&gt;
## Volume:&lt;br /&gt;
### &amp;lt;code&amp;gt;$home_directory/mysql/conf.d:/etc/mysql/conf.d&amp;lt;/code&amp;gt;&lt;br /&gt;
## MySQL options:&lt;br /&gt;
### &amp;lt;code&amp;gt;--character-set-server=utf8mb4&amp;lt;/code&amp;gt;&lt;br /&gt;
### &amp;lt;code&amp;gt;--collation-server=utf8mb4_unicode_ci&amp;lt;/code&amp;gt;&lt;br /&gt;
### &amp;lt;code&amp;gt;--default-authentication-plugin=mysql_native_password&amp;lt;/code&amp;gt;&lt;br /&gt;
# Waits until the MySQL container reports ready (using &amp;lt;code&amp;gt;mysqladmin ping&amp;lt;/code&amp;gt; inside the container).&lt;br /&gt;
# Logs in to Docker Hub using:&lt;br /&gt;
## &amp;lt;code&amp;gt;docker_username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;docker_account_token&amp;lt;/code&amp;gt;&lt;br /&gt;
# Starts the Globalyzer Server container:&lt;br /&gt;
## Image: &amp;lt;code&amp;gt;$docker_image:$gzserver_image_version&amp;lt;/code&amp;gt; (for example &amp;lt;code&amp;gt;lingoport/gzserver:6.8&amp;lt;/code&amp;gt;)&lt;br /&gt;
## Network alias: &amp;lt;code&amp;gt;gzservernet&amp;lt;/code&amp;gt;&lt;br /&gt;
## Network: &amp;lt;code&amp;gt;$database_network&amp;lt;/code&amp;gt;&lt;br /&gt;
## Port mapping: &amp;lt;code&amp;gt;$serverPort:8080&amp;lt;/code&amp;gt; (host:container)&lt;br /&gt;
## Volume:&lt;br /&gt;
### &amp;lt;code&amp;gt;$home_directory/gzserver/export:/home/gzserver/.gzserverihost/export&amp;lt;/code&amp;gt;&lt;br /&gt;
## Restart policy: &amp;lt;code&amp;gt;--restart unless-stopped&amp;lt;/code&amp;gt;&lt;br /&gt;
# Waits ~20 seconds, then updates the Globalyzer server configuration inside the container by replacing:&lt;br /&gt;
## &amp;lt;code&amp;gt;_dbrootpass_&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;$database_root_password&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;_emailusername_&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;$email_username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;_emailpassword_&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;$email_password&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;_gzserverurl_&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;$gzserver_url&amp;lt;/code&amp;gt;&lt;br /&gt;
# Restarts the Globalyzer Server container so the new configuration is applied.&lt;br /&gt;
# Prints a summary message and a &amp;lt;code&amp;gt;docker logs -f&amp;lt;/code&amp;gt; command you can use to follow the startup.&lt;br /&gt;
&lt;br /&gt;
The installer saves container IDs in:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;$home_directory/gzserver/config/gz_mysql_id.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;$home_directory/gzserver/config/gz_container_id.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These are used by the update/uninstall scripts.&lt;br /&gt;
&lt;br /&gt;
=== Re-install Globalyzer Server ===&lt;br /&gt;
&lt;br /&gt;
If you need to re-run &amp;lt;code&amp;gt;InstallGzserver.sh&amp;lt;/code&amp;gt; on the same system:&lt;br /&gt;
&lt;br /&gt;
* First run the provided uninstall script (for example &amp;lt;code&amp;gt;UninstallGzserver.sh&amp;lt;/code&amp;gt;) to clean up containers.&lt;br /&gt;
* Optionally remove the existing &amp;lt;code&amp;gt;lingoport/gzserver&amp;lt;/code&amp;gt; image:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker image ls&lt;br /&gt;
sudo docker image rm --force &amp;amp;lt;gzserver-image-id&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Adjust &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; as needed, then run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ./InstallGzserver.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Note: Database backup ==&lt;br /&gt;
&lt;br /&gt;
The installer creates:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;$home_directory/gzserver/backup&amp;lt;/code&amp;gt; – intended as the location for database backup files&lt;br /&gt;
&lt;br /&gt;
If you received a database backup script (for example &amp;lt;code&amp;gt;BackupGzserverDatabase.sh&amp;lt;/code&amp;gt;) from Lingoport, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x *.sh&lt;br /&gt;
sudo ./BackupGzserverDatabase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The database backup SQL file will typically be placed under:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;$home_directory/gzserver/backup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note on MySQL data location:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* By default, the MySQL container stores its data in a Docker-managed volume under &amp;lt;code&amp;gt;/var/lib/docker/volumes&amp;lt;/code&amp;gt; on the host.&lt;br /&gt;
* This data persists across container restarts and image updates.&lt;br /&gt;
* The data can be removed if the container &#039;&#039;&#039;and&#039;&#039;&#039; its associated volume are deleted (for example with &amp;lt;code&amp;gt;docker rm -v&amp;lt;/code&amp;gt; or by an uninstall process that removes volumes).&lt;br /&gt;
&lt;br /&gt;
For this reason, it is recommended to keep regular database backups before performing any destructive maintenance.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation ==&lt;br /&gt;
&lt;br /&gt;
Once &amp;lt;code&amp;gt;InstallGzserver.sh&amp;lt;/code&amp;gt; completes:&lt;br /&gt;
&lt;br /&gt;
# Check that containers are running:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker ps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see at least:&lt;br /&gt;
&lt;br /&gt;
* A MySQL 8 container (for example &amp;lt;code&amp;gt;mysql:8.0&amp;lt;/code&amp;gt;)&lt;br /&gt;
* A Globalyzer Server container (for example &amp;lt;code&amp;gt;lingoport/gzserver:6.8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
# Follow the Globalyzer Server logs:&lt;br /&gt;
The installer prints a &amp;lt;code&amp;gt;docker logs&amp;lt;/code&amp;gt; command at the end, such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker logs -f &amp;amp;lt;gzserver-container-id&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wait until Tomcat and Globalyzer report successful startup. First-time startup can take several minutes (commonly up to ~8 minutes).&lt;br /&gt;
&lt;br /&gt;
# Access the Globalyzer Server URL:&lt;br /&gt;
Open a browser and navigate to the URL configured in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; (the &amp;lt;code&amp;gt;gzserver_url&amp;lt;/code&amp;gt; value), for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://myserver.mycompany.com:8080/gzserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://globalyzer.mycompany.com/gzserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see the Globalyzer Server login page.&lt;br /&gt;
&lt;br /&gt;
# Log in with the administrator account:&lt;br /&gt;
Use the administrator credentials provided by Lingoport support. After logging in, you can:&lt;br /&gt;
&lt;br /&gt;
* Change the administrator password&lt;br /&gt;
* Create additional users&lt;br /&gt;
* Configure rule sets and scanning options&lt;br /&gt;
&lt;br /&gt;
For a fresh install, it is expected that there are no rule sets or projects configured yet. For upgrades, you may need to restore a database backup if you are migrating from an earlier system.&lt;br /&gt;
&lt;br /&gt;
If the installation is unsuccessful, do not repeatedly re-run the install script; instead:&lt;br /&gt;
&lt;br /&gt;
* Run the uninstall script&lt;br /&gt;
* Adjust configuration or correct issues&lt;br /&gt;
* Re-run the install&lt;br /&gt;
&lt;br /&gt;
= Globalyzer Server Update =&lt;br /&gt;
&lt;br /&gt;
== Scripts ==&lt;br /&gt;
&lt;br /&gt;
Your Globalyzer Server distribution may include an update script (for example &amp;lt;code&amp;gt;UpdateGzserver.sh&amp;lt;/code&amp;gt;). This script typically:&lt;br /&gt;
&lt;br /&gt;
* Backs up the existing database (or instructs you to do so)&lt;br /&gt;
* Stops the running Globalyzer Server container&lt;br /&gt;
* Pulls the new &amp;lt;code&amp;gt;lingoport/gzserver&amp;lt;/code&amp;gt; image version&lt;br /&gt;
* Starts the new container version using existing data and configuration&lt;br /&gt;
&lt;br /&gt;
Make sure to keep a copy of your current &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; before updating.&lt;br /&gt;
&lt;br /&gt;
== Backup the database ==&lt;br /&gt;
&lt;br /&gt;
Before updating to a new version, it is strongly recommended to back up the database. If you have a backup script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x *.sh&lt;br /&gt;
sudo ./BackupGzserverDatabase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify that the backup file is present under:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;$home_directory/gzserver/backup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Edit install.conf ==&lt;br /&gt;
&lt;br /&gt;
To update to a new Globalyzer Server image version:&lt;br /&gt;
&lt;br /&gt;
* Change the &amp;lt;code&amp;gt;gzserver_image_version&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gzserver_image_version=6.9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do not modify the fields below the &amp;lt;code&amp;gt;# DO NOT CHANGE THE STUFF BELOW&amp;lt;/code&amp;gt; line unless instructed by Lingoport.&lt;br /&gt;
&lt;br /&gt;
== Run the update script ==&lt;br /&gt;
&lt;br /&gt;
If provided:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x UpdateGzserver.sh&lt;br /&gt;
sudo ./UpdateGzserver.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the update:&lt;br /&gt;
&lt;br /&gt;
* Use &amp;lt;code&amp;gt;sudo docker ps&amp;lt;/code&amp;gt; to verify the Globalyzer Server container is running with the new image version.&lt;br /&gt;
* Navigate to the Globalyzer Server URL and confirm the system is operational.&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
&lt;br /&gt;
You can manage Globalyzer Server via Docker commands on the VM.&lt;br /&gt;
&lt;br /&gt;
* To list running containers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker ps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* To stop Globalyzer Server:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker stop &amp;amp;lt;gzserver-container-id&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* To start Globalyzer Server again:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker start &amp;amp;lt;gzserver-container-id&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also identify the container by name if your installation uses fixed names.&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
To completely uninstall Globalyzer Server, use the uninstall script provided by Lingoport, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ./UninstallGzserver.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The uninstall script:&lt;br /&gt;
&lt;br /&gt;
* Must be run as root (for example via &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Sources &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; (to obtain &amp;lt;code&amp;gt;home_directory&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Changes directory to &amp;lt;code&amp;gt;$home_directory/gzserver/config&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Reads the Globalyzer Server container ID from &amp;lt;code&amp;gt;gz_container_id.txt&amp;lt;/code&amp;gt; and stops/removes that container.&lt;br /&gt;
* Reads the MySQL container ID from &amp;lt;code&amp;gt;gz_mysql_id.txt&amp;lt;/code&amp;gt; and stops/removes that container.&lt;br /&gt;
&lt;br /&gt;
If either of the ID files is missing, the script exits with an error message (for example if the server has not been installed or containers were removed manually).&lt;br /&gt;
&lt;br /&gt;
The uninstall script:&lt;br /&gt;
&lt;br /&gt;
* Does &#039;&#039;&#039;not&#039;&#039;&#039; remove the Docker network created during install.&lt;br /&gt;
* Does &#039;&#039;&#039;not&#039;&#039;&#039; remove host directories under &amp;lt;code&amp;gt;$home_directory&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Does &#039;&#039;&#039;not&#039;&#039;&#039; explicitly remove MySQL data volumes (they remain on the host unless removed separately).&lt;br /&gt;
&lt;br /&gt;
After uninstalling, verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker ps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should not see Globalyzer Server or its MySQL container listed as running.&lt;br /&gt;
&lt;br /&gt;
= FAQ and Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
== Make sure the Server URL is reachable ==&lt;br /&gt;
&lt;br /&gt;
Navigate to the server URL configured in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;gzserver_url&amp;lt;/code&amp;gt;). Is the login screen available?&lt;br /&gt;
&lt;br /&gt;
If not:&lt;br /&gt;
&lt;br /&gt;
* Check that both containers are running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker container ls -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see entries similar to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CONTAINER ID   IMAGE                   COMMAND                  STATUS       PORTS&lt;br /&gt;
...            lingoport/gzserver:6.8  &amp;quot;catalina.sh run&amp;quot;        Up ...       0.0.0.0:8080-&amp;gt;8080/tcp&lt;br /&gt;
...            mysql:8.0               &amp;quot;docker-entrypoint.s…&amp;quot;   Up ...       3306/tcp, 33060/tcp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify DNS points to the correct VM.&lt;br /&gt;
* Verify firewall rules allow access to the configured &amp;lt;code&amp;gt;serverPort&amp;lt;/code&amp;gt;.&lt;br /&gt;
* If behind HTTPS / reverse proxy, verify the proxy configuration and TLS certificate.&lt;br /&gt;
&lt;br /&gt;
== LDAP login issues ==&lt;br /&gt;
&lt;br /&gt;
If you have configured LDAP and logins are failing:&lt;br /&gt;
&lt;br /&gt;
* Review your settings against [[Globalyzer_Server_LDAP_Installation]]:&lt;br /&gt;
** Attribute mappings (&amp;lt;code&amp;gt;gzserver.ldap.ctx.*&amp;lt;/code&amp;gt;)&lt;br /&gt;
** Group names (&amp;lt;code&amp;gt;gzserver.ldap.*.groupName&amp;lt;/code&amp;gt;)&lt;br /&gt;
** Search bases and filters for users and groups&lt;br /&gt;
** Manager DN and password&lt;br /&gt;
* Enable detailed logging by:&lt;br /&gt;
** Placing the &amp;lt;code&amp;gt;logback-debug.groovy&amp;lt;/code&amp;gt; file (from the Globalyzer Server zip) on the server.&lt;br /&gt;
** Adding &amp;lt;code&amp;gt;-Dlogging.config=/path/to/logback-debug.groovy&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;JAVA_OPTS&amp;lt;/code&amp;gt; for the Globalyzer Server process.&lt;br /&gt;
** Restarting the Globalyzer Server container.&lt;br /&gt;
&lt;br /&gt;
This will cause additional LDAP diagnostic information to be written to the Globalyzer server logs, helping to pinpoint configuration issues.&lt;br /&gt;
&lt;br /&gt;
== To check files on disk ==&lt;br /&gt;
&lt;br /&gt;
To inspect files inside the Globalyzer Server container (for logs or configuration):&lt;br /&gt;
&lt;br /&gt;
1. Find the container ID:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker container ls -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Run a shell in the container:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;amp;lt;gzserver-container-id&amp;amp;gt; bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within that shell, you can explore the filesystem (for example, &amp;lt;code&amp;gt;/usr/local/tomcat&amp;lt;/code&amp;gt;, logs directories, or the export path mapped from &amp;lt;code&amp;gt;$home_directory/gzserver/export&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== How to backup and restore a system ==&lt;br /&gt;
&lt;br /&gt;
A typical backup/restore process:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Backup the Globalyzer Server database&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   sudo ./BackupGzserverDatabase.sh &lt;br /&gt;
&lt;br /&gt;
This will create one or more files such as:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;&amp;amp;lt;home_directory&amp;amp;gt;/gzserver/backup/gzserver_backup_YYYY-MM-DD_HHMMSS.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Exact naming may vary depending on the backup script.)&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stop the current Globalyzer Server and MySQL containers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   sudo docker ps&lt;br /&gt;
   sudo docker stop &amp;amp;lt;GlobalyzerServerContainerID&amp;amp;gt; &amp;amp;lt;MySQLContainerID&amp;amp;gt;&lt;br /&gt;
   sudo docker ps&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Install or update Globalyzer Server&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   sudo ./InstallGzserver.sh&lt;br /&gt;
   or&lt;br /&gt;
   sudo ./UpdateGzserver.sh&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Verify that Globalyzer Server comes up in the browser&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Log in with the administrator account; for a fresh install, no rule sets or users beyond the admin account are expected.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Restore from the database (if applicable)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have a restore script (for example &amp;lt;code&amp;gt;RestoreGzserverDatabase.sh&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
   sudo ./RestoreGzserverDatabase.sh YYYY-MM-DD_HHMMSS&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;code&amp;gt;YYYY-MM-DD_HHMMSS&amp;lt;/code&amp;gt; matches the timestamp in your backup file name.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Verify that Globalyzer Server is populated with the correct information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Log in and check rule sets, users, and other configuration.&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server is now ready to be used. Typical next steps include:&lt;br /&gt;
&lt;br /&gt;
* Configure Globalyzer Server users and roles.&lt;br /&gt;
* Set up rule sets and scanning configurations.&lt;br /&gt;
* Update Globalyzer Clients (CLI, IDE, or Command Center) to point to the Globalyzer Server URL you configured.&lt;br /&gt;
* Follow the corresponding Globalyzer Client or Command Center user guides for integrating scans into your development and CI/CD processes.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Globalyzer_Server_Installation&amp;diff=99653</id>
		<title>Globalyzer Server Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Globalyzer_Server_Installation&amp;diff=99653"/>
		<updated>2025-11-21T17:46:08Z</updated>

		<summary type="html">&lt;p&gt;Masnes: HTTP/2 less relevant to gzserver - remove it&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites =&lt;br /&gt;
Before installing or updating the Globalyzer Server, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server is the central rules and configuration server for the Globalyzer static analysis clients. &lt;br /&gt;
&lt;br /&gt;
* Globalyzer Clients (CLI, IDE plugins, or Globalyzer invoked from Command Center) connect to the Globalyzer Server to:&lt;br /&gt;
** Retrieve rule sets and scanning configurations&lt;br /&gt;
** Optionally upload scan metadata (depending on configuration)&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server can be hosted:&lt;br /&gt;
&lt;br /&gt;
* By Lingoport in the cloud, or&lt;br /&gt;
* On-premises, under the customer’s control&lt;br /&gt;
&lt;br /&gt;
This document describes deploying an **on-premises Globalyzer Server** using Docker and MySQL 8, with host directories mounted as Docker bind volumes.&lt;br /&gt;
&lt;br /&gt;
=== Basic Deployment Diagram ===&lt;br /&gt;
&lt;br /&gt;
At a high level:&lt;br /&gt;
&lt;br /&gt;
* One or more **Globalyzer Clients** (developer workstations, CI servers, Command Center, etc.) connect to&lt;br /&gt;
* A **Globalyzer Server instance** (running in Docker on a Linux VM)&lt;br /&gt;
* The Globalyzer Server uses a dedicated **MySQL 8 database container** for its metadata and configuration&lt;br /&gt;
&lt;br /&gt;
(For Command Center users: Command Center will typically run Globalyzer Client jobs and point them at the Globalyzer Server URL configured here.)&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
&lt;br /&gt;
When &#039;&#039;&#039;Lingoport hosts&#039;&#039;&#039; the Globalyzer Server, access from your environment (CI systems, developer machines, Command Center, etc.) to the hosted server must be arranged. Lingoport manages security, including which IP addresses or networks are allowed to connect.&lt;br /&gt;
&lt;br /&gt;
When installing Globalyzer Server &#039;&#039;&#039;on premises&#039;&#039;&#039;, the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is critical to a successful deployment. In particular, the IT team that sets up the Linux system must understand:&lt;br /&gt;
&lt;br /&gt;
* That Docker will be used to run both MySQL 8 and the Globalyzer Server&lt;br /&gt;
* That Globalyzer Clients will connect to the Globalyzer Server URL&lt;br /&gt;
* Which users need access to the web UI and via which ports / DNS names&lt;br /&gt;
&lt;br /&gt;
Lingoport recommends a brief meeting with the IT team &#039;&#039;&#039;before installation&#039;&#039;&#039; to confirm:&lt;br /&gt;
&lt;br /&gt;
* Hardware and OS are ready&lt;br /&gt;
* Docker is installed and usable&lt;br /&gt;
* Firewall and DNS will allow access to the Globalyzer Server URL&lt;br /&gt;
* Outbound access to Docker Hub is available (alternatively a docker image snapshot may be provided over SFTP)&lt;br /&gt;
&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
Before installing Globalyzer Server, ensure the following:&lt;br /&gt;
&lt;br /&gt;
* Hardware&lt;br /&gt;
* Linux&lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall / Ports&lt;br /&gt;
* (Optional but recommended) HTTPS and HTTP/2&lt;br /&gt;
&lt;br /&gt;
The next sections describe each of these points.&lt;br /&gt;
&lt;br /&gt;
== Hardware &amp;amp; Software Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following sections describe the hardware and software requirements for Globalyzer Server.&lt;br /&gt;
&lt;br /&gt;
Note that this section is specific to Globalyzer Server. Command Center has separate hardware requirements described on the [[Command_Center_Installation]] page.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
Typical minimums for a dedicated Globalyzer Server VM:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Required (minimum)&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 cores (4 preferred)&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 8 GB (16 GB preferred for larger teams)&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 100 GB (data growth depends on usage)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Server may:&lt;br /&gt;
&lt;br /&gt;
* Be hosted by Lingoport&lt;br /&gt;
* Reside on its own VM&lt;br /&gt;
* Share a VM with other Lingoport components (for example, Command Center), provided hardware resources are sufficient&lt;br /&gt;
&lt;br /&gt;
Other Linux and Windows machines may have Globalyzer Clients installed that connect to this server.&lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker-based installation:&lt;br /&gt;
&lt;br /&gt;
* The Globalyzer Server application (Tomcat + Globalyzer) runs in a Docker container&lt;br /&gt;
* The MySQL 8 database runs in a separate Docker container&lt;br /&gt;
* Configuration and export directories are mounted as &#039;&#039;&#039;bind volumes&#039;&#039;&#039; on the Linux VM&lt;br /&gt;
&lt;br /&gt;
This requires:&lt;br /&gt;
&lt;br /&gt;
* A supported Linux distribution (see below)&lt;br /&gt;
* A working Docker installation (Engine + CLI)&lt;br /&gt;
&lt;br /&gt;
=== Supported Browsers and Versions ===&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Server UI is accessed via a browser. The following browsers are supported:&lt;br /&gt;
&lt;br /&gt;
* Chrome: 117+&lt;br /&gt;
* Edge: 117+&lt;br /&gt;
* Firefox: 71+&lt;br /&gt;
&lt;br /&gt;
== Access and Ports / Firewall ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server needs to be accessible by:&lt;br /&gt;
&lt;br /&gt;
* Lingoport and/or customer admins (for configuration, rule management, monitoring)&lt;br /&gt;
* Globalyzer Clients (CLI, IDE, Command Center, CI jobs, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Ports (Internal to company network) ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left; width=50%;&amp;quot;&lt;br /&gt;
! Services !! Ports !! Inbound (session) !! Outbound (session) !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| SSH (for system config/maintenance) || 22 || Y || N || System configuration and maintenance on the Globalyzer Server VM.&lt;br /&gt;
|-&lt;br /&gt;
| Globalyzer Server (HTTP/HTTPS) || 8080 (HTTP) and/or 443 (HTTPS) || Y || N || Default 8080 (configurable via &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;). HTTPS usually provided by a reverse proxy (e.g. Apache, Nginx) and an SSL certificate.&lt;br /&gt;
|-&lt;br /&gt;
| SMTP/SMTPS || 25 or 465 or 587 || N || Y || For email notifications from Globalyzer Server. Depends on corporate mail setup.&lt;br /&gt;
|-&lt;br /&gt;
| Globalyzer Clients → Globalyzer Server || 8080 or 443 || N || Y || Outbound from client machines / CI / Command Center to the Globalyzer Server URL.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: MySQL runs in a Docker container on the same VM and is not typically exposed externally. All access is from the Globalyzer Server container.&lt;br /&gt;
&lt;br /&gt;
==== External Access ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left; width=50%;&amp;quot;&lt;br /&gt;
! Services !! Ports !! Inbound !! Outbound !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Lingoport SSH access || 22 || Y || N || Optional but recommended for ease of upgrades and troubleshooting (if allowed by security policy).&lt;br /&gt;
|-&lt;br /&gt;
| RHEL/Alma/Ubuntu Packages || 80 (Debian) 443 (RHEL/others) || N || Y || Operating system package repositories (may be internal mirrors).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hub.docker.com&amp;lt;/code&amp;gt; || 80 and 443 || N || Y || Location of the &amp;lt;code&amp;gt;lingoport/gzserver&amp;lt;/code&amp;gt; Docker image. Image snapshot may also be provided by Lingoport over SFTP as an alternative.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HTTPS ==&lt;br /&gt;
&lt;br /&gt;
HTTPS is recommended but not strictly necessary for Globalyzer Server. Many customers choose to:&lt;br /&gt;
&lt;br /&gt;
* Expose Globalyzer Server internally over HTTP (port 8080), and/or&lt;br /&gt;
* Place a reverse proxy (such as Apache or Nginx) in front of the container, terminating HTTPS on port 443.&lt;br /&gt;
&lt;br /&gt;
If HTTPS is already standardized by your IT group, follow that process and simply point the HTTPS VirtualHost/ServerName to the Globalyzer Server container / port.&lt;br /&gt;
&lt;br /&gt;
For an example configuration, see:&lt;br /&gt;
* [[ HTTPS configuration | HTTPS Configuration ]]&lt;br /&gt;
&lt;br /&gt;
== Email Sender ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server can send notifications to users (for example, license warnings or other system emails) depending on configuration.&lt;br /&gt;
&lt;br /&gt;
For email delivery, you will need the following information:&lt;br /&gt;
&lt;br /&gt;
* SMTP host URL (such as &amp;lt;code&amp;gt;smtp.yourcompany.com&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Authorization method (SMTP, SMTPS, etc.)&lt;br /&gt;
* Sender email address (for example &amp;lt;code&amp;gt;globalyzer@customerdomain.com&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Sender password (this is the value placed in &amp;lt;code&amp;gt;email_password&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Additional email settings (such as host and port) may be configured in the Globalyzer server configuration. Coordinate with Lingoport support if you are unsure which values to use.&lt;br /&gt;
&lt;br /&gt;
== Docker Install ==&lt;br /&gt;
&lt;br /&gt;
Docker is the underlying platform used to run the Globalyzer Server and MySQL 8 containers. &lt;br /&gt;
&lt;br /&gt;
The supported versions of Linux for Docker installation are:&lt;br /&gt;
&lt;br /&gt;
* [[Installing Docker on RedHat Enterprise Linux 8 |RedHat Enterprise Linux 8]]&lt;br /&gt;
* [[Oracle Linux 8]]&lt;br /&gt;
* [[Installing Docker on Ubuntu 20.04|Ubuntu 20.04]]&lt;br /&gt;
* [[Installing_Docker_on_Amazon_Linux_2|Amazon Linux 2]] (EOL 2025-06)&lt;br /&gt;
&lt;br /&gt;
Other Linux versions may work, but the above are the distributions and processes that have been verified.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server manages its own user database and can also integrate with your directory service (LDAP) or SAML/SSO depending on license and version.&lt;br /&gt;
&lt;br /&gt;
=== Globalyzer Server User Database ===&lt;br /&gt;
&lt;br /&gt;
At installation time:&lt;br /&gt;
&lt;br /&gt;
* A default administrator user is created (details provided by Lingoport support).&lt;br /&gt;
* It is strongly recommended to change the initial administrator password and store it securely.&lt;br /&gt;
&lt;br /&gt;
From that admin account you can create additional Globalyzer Server users and manage roles.&lt;br /&gt;
&lt;br /&gt;
=== LDAP Integration ===&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server can use your company’s LDAP directory for authentication and authorization. In this mode:&lt;br /&gt;
&lt;br /&gt;
* Users log in with their LDAP username and password.&lt;br /&gt;
* If they are authenticated and belong to one of the configured Globalyzer LDAP groups (admin / manager / member), a Globalyzer account is created/updated using LDAP attributes.&lt;br /&gt;
* LDAP remains the source of truth for user lifecycle: when a user is removed from LDAP they can no longer access Globalyzer.&lt;br /&gt;
&lt;br /&gt;
LDAP configuration involves:&lt;br /&gt;
&lt;br /&gt;
* Enabling LDAP mode (environment variable &amp;lt;code&amp;gt;GZSERVER_LDAP_MODE=true&amp;lt;/code&amp;gt; for the server process).&lt;br /&gt;
* Configuring the LDAP section in &amp;lt;code&amp;gt;GzserverConfig.groovy&amp;lt;/code&amp;gt;, including:&lt;br /&gt;
** Mapping user attributes (first name, last name, email, phone, title, country, time zone) via &amp;lt;code&amp;gt;gzserver.ldap.ctx.*&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Mapping LDAP groups to Globalyzer roles via &amp;lt;code&amp;gt;gzserver.ldap.admin.groupName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gzserver.ldap.manager.groupName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gzserver.ldap.member.groupName&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Defining a “no access” message for users who authenticate but are not in any Globalyzer LDAP group.&lt;br /&gt;
** Configuring LDAP server connection properties, including:&lt;br /&gt;
*** LDAP server URL (for example &amp;lt;code&amp;gt;grails.plugin.springsecurity.ldap.context.server = &#039;ldap://ldap.example.com:389&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
*** Manager DN and password used for LDAP binds&lt;br /&gt;
*** Base DNs and filters for user and group searches.&lt;br /&gt;
&lt;br /&gt;
Passwords in &amp;lt;code&amp;gt;GzserverConfig.groovy&amp;lt;/code&amp;gt; may be stored either in plain text or encrypted using the &amp;lt;code&amp;gt;globalyzer-encrypt-password.jar&amp;lt;/code&amp;gt; utility distributed with the Globalyzer Server zip. See [[Globalyzer_Server_LDAP_Installation]] for detailed instructions and examples, including:&lt;br /&gt;
&lt;br /&gt;
* Encrypted manager passwords&lt;br /&gt;
* A dedicated continuous integration (CI) user (for Globalyzer Lite / automated scans) configured via:&lt;br /&gt;
** &amp;lt;code&amp;gt;gzserver.ldap.ci_user&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gzserver.ldap.ci_password&amp;lt;/code&amp;gt; (plain text or &amp;lt;code&amp;gt;ENC(...)&amp;lt;/code&amp;gt;)&lt;br /&gt;
* How login behavior changes on LDAP servers (LDAP User / Password fields, removal of “Forgot password” link, restrictions on editing profiles, etc.)&lt;br /&gt;
* How to enable detailed LDAP debug logging using &amp;lt;code&amp;gt;logback-debug.groovy&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;-Dlogging.config=...&amp;lt;/code&amp;gt; JVM option.&lt;br /&gt;
&lt;br /&gt;
For Docker-based deployments, the LDAP configuration is still applied inside the Globalyzer Server container via &amp;lt;code&amp;gt;GzserverConfig.groovy&amp;lt;/code&amp;gt; and environment variables. The steps in [[Globalyzer_Server_LDAP_Installation]] apply regardless of whether the server is deployed via Docker or on bare Tomcat.&lt;br /&gt;
&lt;br /&gt;
=== SAML / SSO Integration ===&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server can also be integrated with SAML-based SSO so that users authenticate via your corporate Identity Provider (IdP).&lt;br /&gt;
&lt;br /&gt;
At a high level, SSO configuration involves:&lt;br /&gt;
&lt;br /&gt;
* Configuring the Globalyzer Server as a SAML Service Provider (SP).&lt;br /&gt;
* Importing/exchanging metadata (IdP and SP).&lt;br /&gt;
* Adjusting Globalyzer’s security configuration to delegate authentication to the SSO provider.&lt;br /&gt;
* Coordinating user and group mapping so SSO identities map to the appropriate Globalyzer roles.&lt;br /&gt;
&lt;br /&gt;
The SSO configuration is performed after the base Docker installation and does not change the installation steps described on this page.&lt;br /&gt;
&lt;br /&gt;
For detailed SSO configuration steps and examples, see:&lt;br /&gt;
* [[Globalyzer_Server_SSO_Installation]]&lt;br /&gt;
&lt;br /&gt;
= New Globalyzer Server Installation =&lt;br /&gt;
&lt;br /&gt;
== sudo user ==&lt;br /&gt;
&lt;br /&gt;
A Linux user with &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; privileges is required as the user under which to prepare and run the installation scripts. For example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ec2-user&amp;lt;/code&amp;gt; on Amazon Linux systems&lt;br /&gt;
&lt;br /&gt;
The Globalyzer installation script itself must ultimately run with root privileges. It will exit with an error if it is not run as root.&lt;br /&gt;
&lt;br /&gt;
== Create the database conf directory ==&lt;br /&gt;
&lt;br /&gt;
Use the sudo user’s home directory as the base for Docker data directories. For example, on Amazon Linux with user &amp;lt;code&amp;gt;ec2-user&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Home: &amp;lt;code&amp;gt;/home/ec2-user&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The installer will create the MySQL configuration directory automatically:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/home/ec2-user/mysql/conf.d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optionally, you may create a basic MySQL client configuration file as well:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vi /home/&amp;amp;lt;user&amp;amp;gt;/mysql/conf.d/mysql.cnf&lt;br /&gt;
&lt;br /&gt;
[client]&lt;br /&gt;
default-character-set = utf8mb4&lt;br /&gt;
[mysql]&lt;br /&gt;
default-character-set = utf8mb4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The installer also creates additional directories under &amp;lt;code&amp;gt;home_directory&amp;lt;/code&amp;gt; for exports, backups, and internal configuration.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Your Lingoport contact will provide the Globalyzer Server installation scripts and configuration file. You should receive files similar to:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;InstallGzserver.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;UpdateGzserver.sh&amp;lt;/code&amp;gt; (name may vary)&lt;br /&gt;
* &amp;lt;code&amp;gt;UninstallGzserver.sh&amp;lt;/code&amp;gt; (name may vary)&lt;br /&gt;
&lt;br /&gt;
Copy these files to a directory under the sudo user’s home, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/ec2-user/globalyzerServerInstall&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or, in general:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/&amp;amp;lt;user&amp;amp;gt;/globalyzerServerInstall&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; file controls installation settings. The top portion is intended to be edited by the customer; the lower portion is preconfigured for access to the Lingoport Docker Hub account.&lt;br /&gt;
&lt;br /&gt;
A typical &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; will look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Provide your home directory, lingoport/ and gzserver/ folders will be created&lt;br /&gt;
#&lt;br /&gt;
home_directory=/home/ec2-user&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide the Globalyzer Server version&lt;br /&gt;
#&lt;br /&gt;
gzserver_image_version=6.8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide the Globalyzer Server port&lt;br /&gt;
#&lt;br /&gt;
serverPort=8080&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide the MYSQL root password you want to create for the MySQL database container&lt;br /&gt;
#&lt;br /&gt;
database_root_password=_dbrootpass_&lt;br /&gt;
&lt;br /&gt;
# Provide an email username and password you wish to use for automated emails from the system&lt;br /&gt;
email_username=_emailusername_&lt;br /&gt;
email_password=_emailpassword_&lt;br /&gt;
&lt;br /&gt;
# The URL the server will use&lt;br /&gt;
gzserver_url=_gzserverurl_&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# DO NOT CHANGE THE STUFF BELOW&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide your Docker Hub username&lt;br /&gt;
#&lt;br /&gt;
docker_username=lingoport_provided_customer_account&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide your Docker Hub account token&lt;br /&gt;
#&lt;br /&gt;
docker_account_token=lingoport_provided&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide the Docker network name you want to create&lt;br /&gt;
#&lt;br /&gt;
database_network=mysqlnetsgzserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
docker_image=lingoport/gzserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit the following values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;home_directory&amp;lt;/code&amp;gt; – base directory where the installer will create:&lt;br /&gt;
** &amp;lt;code&amp;gt;lingoport/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gzserver/export&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gzserver/config&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gzserver/backup&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;mysql/conf.d&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;gzserver_image_version&amp;lt;/code&amp;gt; – the Globalyzer Server image version provided by Lingoport (for example &amp;lt;code&amp;gt;6.8&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &amp;lt;code&amp;gt;serverPort&amp;lt;/code&amp;gt; – host port for HTTP access to the Globalyzer Server container (default &amp;lt;code&amp;gt;8080&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &amp;lt;code&amp;gt;database_root_password&amp;lt;/code&amp;gt; – root password to create for the MySQL 8 database container.&lt;br /&gt;
* &amp;lt;code&amp;gt;email_username&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;email_password&amp;lt;/code&amp;gt; – credentials for the SMTP account you wish to use for system email notifications. These are &#039;&#039;&#039;not&#039;&#039;&#039; prompted for by the installer and must be set correctly in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;gzserver_url&amp;lt;/code&amp;gt; – the full URL that clients will use to reach Globalyzer Server, such as:&lt;br /&gt;
** &amp;lt;code&amp;gt;http://myserver.mycompany.com:8080/gzserver&amp;lt;/code&amp;gt; (HTTP)&lt;br /&gt;
** &amp;lt;code&amp;gt;https://globalyzer.mycompany.com/gzserver&amp;lt;/code&amp;gt; (behind a reverse proxy)&lt;br /&gt;
&lt;br /&gt;
The initial &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; provided by Lingoport typically uses placeholder values such as &amp;lt;code&amp;gt;_dbrootpass_&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;_emailusername_&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;_emailpassword_&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;_gzserverurl_&amp;lt;/code&amp;gt;. These are examples only and must be replaced before production use.&lt;br /&gt;
&lt;br /&gt;
Do &#039;&#039;&#039;not&#039;&#039;&#039; change the values below the &amp;lt;code&amp;gt;# DO NOT CHANGE THE STUFF BELOW&amp;lt;/code&amp;gt; line unless instructed by Lingoport support. Those values:&lt;br /&gt;
&lt;br /&gt;
* Provide the Docker Hub username and token used to pull the &amp;lt;code&amp;gt;lingoport/gzserver&amp;lt;/code&amp;gt; image&lt;br /&gt;
* Configure the Docker network name and image name&lt;br /&gt;
&lt;br /&gt;
== Run InstallGzserver.sh ==&lt;br /&gt;
&lt;br /&gt;
From the directory containing the scripts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/&amp;amp;lt;user&amp;amp;gt;/globalyzerServerInstall&lt;br /&gt;
chmod +x *.sh&lt;br /&gt;
sudo ./InstallGzserver.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* The script must run as root (for example via &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt;). It will exit if &amp;lt;code&amp;gt;id -u&amp;lt;/code&amp;gt; is not 0.&lt;br /&gt;
* If any of the following are missing or empty in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;, the script will prompt for them:&lt;br /&gt;
** &amp;lt;code&amp;gt;database_root_password&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gzserver_url&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;docker_username&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;docker_account_token&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;email_username&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;email_password&amp;lt;/code&amp;gt; are not prompted and will be used exactly as written in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== What the installer does ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;InstallGzserver.sh&amp;lt;/code&amp;gt; performs the following high-level steps:&lt;br /&gt;
&lt;br /&gt;
# Reads &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; and prompts for any missing values listed above.&lt;br /&gt;
# Creates directories under &amp;lt;code&amp;gt;home_directory&amp;lt;/code&amp;gt;:&lt;br /&gt;
## &amp;lt;code&amp;gt;lingoport/&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;gzserver/export&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;gzserver/config&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;gzserver/backup&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;mysql/conf.d&amp;lt;/code&amp;gt;&lt;br /&gt;
# Changes directory to &amp;lt;code&amp;gt;$home_directory/gzserver/config&amp;lt;/code&amp;gt; to store container IDs and related files.&lt;br /&gt;
# Ensures a Docker network exists with name &amp;lt;code&amp;gt;database_network&amp;lt;/code&amp;gt; (default: &amp;lt;code&amp;gt;mysqlnetsgzserver&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Starts a MySQL 8 container:&lt;br /&gt;
## Name: &amp;lt;code&amp;gt;gzserverDatabase&amp;lt;/code&amp;gt;&lt;br /&gt;
## Network alias: &amp;lt;code&amp;gt;mysqlservergzserver&amp;lt;/code&amp;gt;&lt;br /&gt;
## Network: &amp;lt;code&amp;gt;$database_network&amp;lt;/code&amp;gt;&lt;br /&gt;
## Environment:&lt;br /&gt;
### &amp;lt;code&amp;gt;MYSQL_ROOT_PASSWORD=$database_root_password&amp;lt;/code&amp;gt;&lt;br /&gt;
### &amp;lt;code&amp;gt;MYSQL_DATABASE=GZSERVER&amp;lt;/code&amp;gt;&lt;br /&gt;
## Volume:&lt;br /&gt;
### &amp;lt;code&amp;gt;$home_directory/mysql/conf.d:/etc/mysql/conf.d&amp;lt;/code&amp;gt;&lt;br /&gt;
## MySQL options:&lt;br /&gt;
### &amp;lt;code&amp;gt;--character-set-server=utf8mb4&amp;lt;/code&amp;gt;&lt;br /&gt;
### &amp;lt;code&amp;gt;--collation-server=utf8mb4_unicode_ci&amp;lt;/code&amp;gt;&lt;br /&gt;
### &amp;lt;code&amp;gt;--default-authentication-plugin=mysql_native_password&amp;lt;/code&amp;gt;&lt;br /&gt;
# Waits until the MySQL container reports ready (using &amp;lt;code&amp;gt;mysqladmin ping&amp;lt;/code&amp;gt; inside the container).&lt;br /&gt;
# Logs in to Docker Hub using:&lt;br /&gt;
## &amp;lt;code&amp;gt;docker_username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;docker_account_token&amp;lt;/code&amp;gt;&lt;br /&gt;
# Starts the Globalyzer Server container:&lt;br /&gt;
## Image: &amp;lt;code&amp;gt;$docker_image:$gzserver_image_version&amp;lt;/code&amp;gt; (for example &amp;lt;code&amp;gt;lingoport/gzserver:6.8&amp;lt;/code&amp;gt;)&lt;br /&gt;
## Network alias: &amp;lt;code&amp;gt;gzservernet&amp;lt;/code&amp;gt;&lt;br /&gt;
## Network: &amp;lt;code&amp;gt;$database_network&amp;lt;/code&amp;gt;&lt;br /&gt;
## Port mapping: &amp;lt;code&amp;gt;$serverPort:8080&amp;lt;/code&amp;gt; (host:container)&lt;br /&gt;
## Volume:&lt;br /&gt;
### &amp;lt;code&amp;gt;$home_directory/gzserver/export:/home/gzserver/.gzserverihost/export&amp;lt;/code&amp;gt;&lt;br /&gt;
## Restart policy: &amp;lt;code&amp;gt;--restart unless-stopped&amp;lt;/code&amp;gt;&lt;br /&gt;
# Waits ~20 seconds, then updates the Globalyzer server configuration inside the container by replacing:&lt;br /&gt;
## &amp;lt;code&amp;gt;_dbrootpass_&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;$database_root_password&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;_emailusername_&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;$email_username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;_emailpassword_&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;$email_password&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;_gzserverurl_&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;$gzserver_url&amp;lt;/code&amp;gt;&lt;br /&gt;
# Restarts the Globalyzer Server container so the new configuration is applied.&lt;br /&gt;
# Prints a summary message and a &amp;lt;code&amp;gt;docker logs -f&amp;lt;/code&amp;gt; command you can use to follow the startup.&lt;br /&gt;
&lt;br /&gt;
The installer saves container IDs in:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;$home_directory/gzserver/config/gz_mysql_id.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;$home_directory/gzserver/config/gz_container_id.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These are used by the update/uninstall scripts.&lt;br /&gt;
&lt;br /&gt;
=== Re-install Globalyzer Server ===&lt;br /&gt;
&lt;br /&gt;
If you need to re-run &amp;lt;code&amp;gt;InstallGzserver.sh&amp;lt;/code&amp;gt; on the same system:&lt;br /&gt;
&lt;br /&gt;
* First run the provided uninstall script (for example &amp;lt;code&amp;gt;UninstallGzserver.sh&amp;lt;/code&amp;gt;) to clean up containers.&lt;br /&gt;
* Optionally remove the existing &amp;lt;code&amp;gt;lingoport/gzserver&amp;lt;/code&amp;gt; image:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker image ls&lt;br /&gt;
sudo docker image rm --force &amp;amp;lt;gzserver-image-id&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Adjust &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; as needed, then run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ./InstallGzserver.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Note: Database backup ==&lt;br /&gt;
&lt;br /&gt;
The installer creates:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;$home_directory/gzserver/backup&amp;lt;/code&amp;gt; – intended as the location for database backup files&lt;br /&gt;
&lt;br /&gt;
If you received a database backup script (for example &amp;lt;code&amp;gt;BackupGzserverDatabase.sh&amp;lt;/code&amp;gt;) from Lingoport, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x *.sh&lt;br /&gt;
sudo ./BackupGzserverDatabase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The database backup SQL file will typically be placed under:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;$home_directory/gzserver/backup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note on MySQL data location:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* By default, the MySQL container stores its data in a Docker-managed volume under &amp;lt;code&amp;gt;/var/lib/docker/volumes&amp;lt;/code&amp;gt; on the host.&lt;br /&gt;
* This data persists across container restarts and image updates.&lt;br /&gt;
* The data can be removed if the container &#039;&#039;&#039;and&#039;&#039;&#039; its associated volume are deleted (for example with &amp;lt;code&amp;gt;docker rm -v&amp;lt;/code&amp;gt; or by an uninstall process that removes volumes).&lt;br /&gt;
&lt;br /&gt;
For this reason, it is recommended to keep regular database backups before performing any destructive maintenance.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation ==&lt;br /&gt;
&lt;br /&gt;
Once &amp;lt;code&amp;gt;InstallGzserver.sh&amp;lt;/code&amp;gt; completes:&lt;br /&gt;
&lt;br /&gt;
# Check that containers are running:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker ps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see at least:&lt;br /&gt;
&lt;br /&gt;
* A MySQL 8 container (for example &amp;lt;code&amp;gt;mysql:8.0&amp;lt;/code&amp;gt;)&lt;br /&gt;
* A Globalyzer Server container (for example &amp;lt;code&amp;gt;lingoport/gzserver:6.8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
# Follow the Globalyzer Server logs:&lt;br /&gt;
The installer prints a &amp;lt;code&amp;gt;docker logs&amp;lt;/code&amp;gt; command at the end, such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker logs -f &amp;amp;lt;gzserver-container-id&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wait until Tomcat and Globalyzer report successful startup. First-time startup can take several minutes (commonly up to ~8 minutes).&lt;br /&gt;
&lt;br /&gt;
# Access the Globalyzer Server URL:&lt;br /&gt;
Open a browser and navigate to the URL configured in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; (the &amp;lt;code&amp;gt;gzserver_url&amp;lt;/code&amp;gt; value), for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://myserver.mycompany.com:8080/gzserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://globalyzer.mycompany.com/gzserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see the Globalyzer Server login page.&lt;br /&gt;
&lt;br /&gt;
# Log in with the administrator account:&lt;br /&gt;
Use the administrator credentials provided by Lingoport support. After logging in, you can:&lt;br /&gt;
&lt;br /&gt;
* Change the administrator password&lt;br /&gt;
* Create additional users&lt;br /&gt;
* Configure rule sets and scanning options&lt;br /&gt;
&lt;br /&gt;
For a fresh install, it is expected that there are no rule sets or projects configured yet. For upgrades, you may need to restore a database backup if you are migrating from an earlier system.&lt;br /&gt;
&lt;br /&gt;
If the installation is unsuccessful, do not repeatedly re-run the install script; instead:&lt;br /&gt;
&lt;br /&gt;
* Run the uninstall script&lt;br /&gt;
* Adjust configuration or correct issues&lt;br /&gt;
* Re-run the install&lt;br /&gt;
&lt;br /&gt;
= Globalyzer Server Update =&lt;br /&gt;
&lt;br /&gt;
== Scripts ==&lt;br /&gt;
&lt;br /&gt;
Your Globalyzer Server distribution may include an update script (for example &amp;lt;code&amp;gt;UpdateGzserver.sh&amp;lt;/code&amp;gt;). This script typically:&lt;br /&gt;
&lt;br /&gt;
* Backs up the existing database (or instructs you to do so)&lt;br /&gt;
* Stops the running Globalyzer Server container&lt;br /&gt;
* Pulls the new &amp;lt;code&amp;gt;lingoport/gzserver&amp;lt;/code&amp;gt; image version&lt;br /&gt;
* Starts the new container version using existing data and configuration&lt;br /&gt;
&lt;br /&gt;
Make sure to keep a copy of your current &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; before updating.&lt;br /&gt;
&lt;br /&gt;
== Backup the database ==&lt;br /&gt;
&lt;br /&gt;
Before updating to a new version, it is strongly recommended to back up the database. If you have a backup script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x *.sh&lt;br /&gt;
sudo ./BackupGzserverDatabase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify that the backup file is present under:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;$home_directory/gzserver/backup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Edit install.conf ==&lt;br /&gt;
&lt;br /&gt;
To update to a new Globalyzer Server image version:&lt;br /&gt;
&lt;br /&gt;
* Change the &amp;lt;code&amp;gt;gzserver_image_version&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gzserver_image_version=6.9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do not modify the fields below the &amp;lt;code&amp;gt;# DO NOT CHANGE THE STUFF BELOW&amp;lt;/code&amp;gt; line unless instructed by Lingoport.&lt;br /&gt;
&lt;br /&gt;
== Run the update script ==&lt;br /&gt;
&lt;br /&gt;
If provided:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x UpdateGzserver.sh&lt;br /&gt;
sudo ./UpdateGzserver.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the update:&lt;br /&gt;
&lt;br /&gt;
* Use &amp;lt;code&amp;gt;sudo docker ps&amp;lt;/code&amp;gt; to verify the Globalyzer Server container is running with the new image version.&lt;br /&gt;
* Navigate to the Globalyzer Server URL and confirm the system is operational.&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
&lt;br /&gt;
You can manage Globalyzer Server via Docker commands on the VM.&lt;br /&gt;
&lt;br /&gt;
* To list running containers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker ps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* To stop Globalyzer Server:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker stop &amp;amp;lt;gzserver-container-id&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* To start Globalyzer Server again:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker start &amp;amp;lt;gzserver-container-id&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also identify the container by name if your installation uses fixed names.&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
To completely uninstall Globalyzer Server, use the uninstall script provided by Lingoport, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ./UninstallGzserver.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The uninstall script:&lt;br /&gt;
&lt;br /&gt;
* Must be run as root (for example via &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Sources &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; (to obtain &amp;lt;code&amp;gt;home_directory&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Changes directory to &amp;lt;code&amp;gt;$home_directory/gzserver/config&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Reads the Globalyzer Server container ID from &amp;lt;code&amp;gt;gz_container_id.txt&amp;lt;/code&amp;gt; and stops/removes that container.&lt;br /&gt;
* Reads the MySQL container ID from &amp;lt;code&amp;gt;gz_mysql_id.txt&amp;lt;/code&amp;gt; and stops/removes that container.&lt;br /&gt;
&lt;br /&gt;
If either of the ID files is missing, the script exits with an error message (for example if the server has not been installed or containers were removed manually).&lt;br /&gt;
&lt;br /&gt;
The uninstall script:&lt;br /&gt;
&lt;br /&gt;
* Does &#039;&#039;&#039;not&#039;&#039;&#039; remove the Docker network created during install.&lt;br /&gt;
* Does &#039;&#039;&#039;not&#039;&#039;&#039; remove host directories under &amp;lt;code&amp;gt;$home_directory&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Does &#039;&#039;&#039;not&#039;&#039;&#039; explicitly remove MySQL data volumes (they remain on the host unless removed separately).&lt;br /&gt;
&lt;br /&gt;
After uninstalling, verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker ps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should not see Globalyzer Server or its MySQL container listed as running.&lt;br /&gt;
&lt;br /&gt;
= FAQ and Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
== Make sure the Server URL is reachable ==&lt;br /&gt;
&lt;br /&gt;
Navigate to the server URL configured in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;gzserver_url&amp;lt;/code&amp;gt;). Is the login screen available?&lt;br /&gt;
&lt;br /&gt;
If not:&lt;br /&gt;
&lt;br /&gt;
* Check that both containers are running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker container ls -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see entries similar to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CONTAINER ID   IMAGE                   COMMAND                  STATUS       PORTS&lt;br /&gt;
...            lingoport/gzserver:6.8  &amp;quot;catalina.sh run&amp;quot;        Up ...       0.0.0.0:8080-&amp;gt;8080/tcp&lt;br /&gt;
...            mysql:8.0               &amp;quot;docker-entrypoint.s…&amp;quot;   Up ...       3306/tcp, 33060/tcp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify DNS points to the correct VM.&lt;br /&gt;
* Verify firewall rules allow access to the configured &amp;lt;code&amp;gt;serverPort&amp;lt;/code&amp;gt;.&lt;br /&gt;
* If behind HTTPS / reverse proxy, verify the proxy configuration and TLS certificate.&lt;br /&gt;
&lt;br /&gt;
== LDAP login issues ==&lt;br /&gt;
&lt;br /&gt;
If you have configured LDAP and logins are failing:&lt;br /&gt;
&lt;br /&gt;
* Review your settings against [[Globalyzer_Server_LDAP_Installation]]:&lt;br /&gt;
** Attribute mappings (&amp;lt;code&amp;gt;gzserver.ldap.ctx.*&amp;lt;/code&amp;gt;)&lt;br /&gt;
** Group names (&amp;lt;code&amp;gt;gzserver.ldap.*.groupName&amp;lt;/code&amp;gt;)&lt;br /&gt;
** Search bases and filters for users and groups&lt;br /&gt;
** Manager DN and password&lt;br /&gt;
* Enable detailed logging by:&lt;br /&gt;
** Placing the &amp;lt;code&amp;gt;logback-debug.groovy&amp;lt;/code&amp;gt; file (from the Globalyzer Server zip) on the server.&lt;br /&gt;
** Adding &amp;lt;code&amp;gt;-Dlogging.config=/path/to/logback-debug.groovy&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;JAVA_OPTS&amp;lt;/code&amp;gt; for the Globalyzer Server process.&lt;br /&gt;
** Restarting the Globalyzer Server container.&lt;br /&gt;
&lt;br /&gt;
This will cause additional LDAP diagnostic information to be written to the Globalyzer server logs, helping to pinpoint configuration issues.&lt;br /&gt;
&lt;br /&gt;
== To check files on disk ==&lt;br /&gt;
&lt;br /&gt;
To inspect files inside the Globalyzer Server container (for logs or configuration):&lt;br /&gt;
&lt;br /&gt;
1. Find the container ID:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker container ls -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Run a shell in the container:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;amp;lt;gzserver-container-id&amp;amp;gt; bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within that shell, you can explore the filesystem (for example, &amp;lt;code&amp;gt;/usr/local/tomcat&amp;lt;/code&amp;gt;, logs directories, or the export path mapped from &amp;lt;code&amp;gt;$home_directory/gzserver/export&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== How to backup and restore a system ==&lt;br /&gt;
&lt;br /&gt;
A typical backup/restore process:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Backup the Globalyzer Server database&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   sudo ./BackupGzserverDatabase.sh &lt;br /&gt;
&lt;br /&gt;
This will create one or more files such as:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;&amp;amp;lt;home_directory&amp;amp;gt;/gzserver/backup/gzserver_backup_YYYY-MM-DD_HHMMSS.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Exact naming may vary depending on the backup script.)&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stop the current Globalyzer Server and MySQL containers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   sudo docker ps&lt;br /&gt;
   sudo docker stop &amp;amp;lt;GlobalyzerServerContainerID&amp;amp;gt; &amp;amp;lt;MySQLContainerID&amp;amp;gt;&lt;br /&gt;
   sudo docker ps&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Install or update Globalyzer Server&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   sudo ./InstallGzserver.sh&lt;br /&gt;
   or&lt;br /&gt;
   sudo ./UpdateGzserver.sh&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Verify that Globalyzer Server comes up in the browser&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Log in with the administrator account; for a fresh install, no rule sets or users beyond the admin account are expected.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Restore from the database (if applicable)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have a restore script (for example &amp;lt;code&amp;gt;RestoreGzserverDatabase.sh&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
   sudo ./RestoreGzserverDatabase.sh YYYY-MM-DD_HHMMSS&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;code&amp;gt;YYYY-MM-DD_HHMMSS&amp;lt;/code&amp;gt; matches the timestamp in your backup file name.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Verify that Globalyzer Server is populated with the correct information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Log in and check rule sets, users, and other configuration.&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server is now ready to be used. Typical next steps include:&lt;br /&gt;
&lt;br /&gt;
* Configure Globalyzer Server users and roles.&lt;br /&gt;
* Set up rule sets and scanning configurations.&lt;br /&gt;
* Update Globalyzer Clients (CLI, IDE, or Command Center) to point to the Globalyzer Server URL you configured.&lt;br /&gt;
* Follow the corresponding Globalyzer Client or Command Center user guides for integrating scans into your development and CI/CD processes.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Globalyzer_Server_Installation&amp;diff=99652</id>
		<title>Globalyzer Server Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Globalyzer_Server_Installation&amp;diff=99652"/>
		<updated>2025-11-21T17:45:01Z</updated>

		<summary type="html">&lt;p&gt;Masnes: Created page with &amp;quot;= Pre-Requisites = Before installing or updating the Globalyzer Server, please verify this section is complete.   == Introduction ==  Globalyzer Server is the central rules an...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites =&lt;br /&gt;
Before installing or updating the Globalyzer Server, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server is the central rules and configuration server for the Globalyzer static analysis clients. &lt;br /&gt;
&lt;br /&gt;
* Globalyzer Clients (CLI, IDE plugins, or Globalyzer invoked from Command Center) connect to the Globalyzer Server to:&lt;br /&gt;
** Retrieve rule sets and scanning configurations&lt;br /&gt;
** Optionally upload scan metadata (depending on configuration)&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server can be hosted:&lt;br /&gt;
&lt;br /&gt;
* By Lingoport in the cloud, or&lt;br /&gt;
* On-premises, under the customer’s control&lt;br /&gt;
&lt;br /&gt;
This document describes deploying an **on-premises Globalyzer Server** using Docker and MySQL 8, with host directories mounted as Docker bind volumes.&lt;br /&gt;
&lt;br /&gt;
=== Basic Deployment Diagram ===&lt;br /&gt;
&lt;br /&gt;
At a high level:&lt;br /&gt;
&lt;br /&gt;
* One or more **Globalyzer Clients** (developer workstations, CI servers, Command Center, etc.) connect to&lt;br /&gt;
* A **Globalyzer Server instance** (running in Docker on a Linux VM)&lt;br /&gt;
* The Globalyzer Server uses a dedicated **MySQL 8 database container** for its metadata and configuration&lt;br /&gt;
&lt;br /&gt;
(For Command Center users: Command Center will typically run Globalyzer Client jobs and point them at the Globalyzer Server URL configured here.)&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
&lt;br /&gt;
When &#039;&#039;&#039;Lingoport hosts&#039;&#039;&#039; the Globalyzer Server, access from your environment (CI systems, developer machines, Command Center, etc.) to the hosted server must be arranged. Lingoport manages security, including which IP addresses or networks are allowed to connect.&lt;br /&gt;
&lt;br /&gt;
When installing Globalyzer Server &#039;&#039;&#039;on premises&#039;&#039;&#039;, the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is critical to a successful deployment. In particular, the IT team that sets up the Linux system must understand:&lt;br /&gt;
&lt;br /&gt;
* That Docker will be used to run both MySQL 8 and the Globalyzer Server&lt;br /&gt;
* That Globalyzer Clients will connect to the Globalyzer Server URL&lt;br /&gt;
* Which users need access to the web UI and via which ports / DNS names&lt;br /&gt;
&lt;br /&gt;
Lingoport recommends a brief meeting with the IT team &#039;&#039;&#039;before installation&#039;&#039;&#039; to confirm:&lt;br /&gt;
&lt;br /&gt;
* Hardware and OS are ready&lt;br /&gt;
* Docker is installed and usable&lt;br /&gt;
* Firewall and DNS will allow access to the Globalyzer Server URL&lt;br /&gt;
* Outbound access to Docker Hub is available (alternatively a docker image snapshot may be provided over SFTP)&lt;br /&gt;
&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
Before installing Globalyzer Server, ensure the following:&lt;br /&gt;
&lt;br /&gt;
* Hardware&lt;br /&gt;
* Linux&lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall / Ports&lt;br /&gt;
* (Optional but recommended) HTTPS and HTTP/2&lt;br /&gt;
&lt;br /&gt;
The next sections describe each of these points.&lt;br /&gt;
&lt;br /&gt;
== Hardware &amp;amp; Software Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following sections describe the hardware and software requirements for Globalyzer Server.&lt;br /&gt;
&lt;br /&gt;
Note that this section is specific to Globalyzer Server. Command Center has separate hardware requirements described on the [[Command_Center_Installation]] page.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
Typical minimums for a dedicated Globalyzer Server VM:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Required (minimum)&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 cores (4 preferred)&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 8 GB (16 GB preferred for larger teams)&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 100 GB (data growth depends on usage)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Server may:&lt;br /&gt;
&lt;br /&gt;
* Be hosted by Lingoport&lt;br /&gt;
* Reside on its own VM&lt;br /&gt;
* Share a VM with other Lingoport components (for example, Command Center), provided hardware resources are sufficient&lt;br /&gt;
&lt;br /&gt;
Other Linux and Windows machines may have Globalyzer Clients installed that connect to this server.&lt;br /&gt;
&lt;br /&gt;
=== Software Requirements ===&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker-based installation:&lt;br /&gt;
&lt;br /&gt;
* The Globalyzer Server application (Tomcat + Globalyzer) runs in a Docker container&lt;br /&gt;
* The MySQL 8 database runs in a separate Docker container&lt;br /&gt;
* Configuration and export directories are mounted as &#039;&#039;&#039;bind volumes&#039;&#039;&#039; on the Linux VM&lt;br /&gt;
&lt;br /&gt;
This requires:&lt;br /&gt;
&lt;br /&gt;
* A supported Linux distribution (see below)&lt;br /&gt;
* A working Docker installation (Engine + CLI)&lt;br /&gt;
&lt;br /&gt;
=== Supported Browsers and Versions ===&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Server UI is accessed via a browser. The following browsers are supported:&lt;br /&gt;
&lt;br /&gt;
* Chrome: 117+&lt;br /&gt;
* Edge: 117+&lt;br /&gt;
* Firefox: 71+&lt;br /&gt;
&lt;br /&gt;
== Access and Ports / Firewall ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server needs to be accessible by:&lt;br /&gt;
&lt;br /&gt;
* Lingoport and/or customer admins (for configuration, rule management, monitoring)&lt;br /&gt;
* Globalyzer Clients (CLI, IDE, Command Center, CI jobs, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Ports (Internal to company network) ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left; width=50%;&amp;quot;&lt;br /&gt;
! Services !! Ports !! Inbound (session) !! Outbound (session) !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| SSH (for system config/maintenance) || 22 || Y || N || System configuration and maintenance on the Globalyzer Server VM.&lt;br /&gt;
|-&lt;br /&gt;
| Globalyzer Server (HTTP/HTTPS) || 8080 (HTTP) and/or 443 (HTTPS) || Y || N || Default 8080 (configurable via &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;). HTTPS usually provided by a reverse proxy (e.g. Apache, Nginx) and an SSL certificate.&lt;br /&gt;
|-&lt;br /&gt;
| SMTP/SMTPS || 25 or 465 or 587 || N || Y || For email notifications from Globalyzer Server. Depends on corporate mail setup.&lt;br /&gt;
|-&lt;br /&gt;
| Globalyzer Clients → Globalyzer Server || 8080 or 443 || N || Y || Outbound from client machines / CI / Command Center to the Globalyzer Server URL.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: MySQL runs in a Docker container on the same VM and is not typically exposed externally. All access is from the Globalyzer Server container.&lt;br /&gt;
&lt;br /&gt;
==== External Access ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left; width=50%;&amp;quot;&lt;br /&gt;
! Services !! Ports !! Inbound !! Outbound !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Lingoport SSH access || 22 || Y || N || Optional but recommended for ease of upgrades and troubleshooting (if allowed by security policy).&lt;br /&gt;
|-&lt;br /&gt;
| RHEL/Alma/Ubuntu Packages || 80 (Debian) 443 (RHEL/others) || N || Y || Operating system package repositories (may be internal mirrors).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hub.docker.com&amp;lt;/code&amp;gt; || 80 and 443 || N || Y || Location of the &amp;lt;code&amp;gt;lingoport/gzserver&amp;lt;/code&amp;gt; Docker image. Image snapshot may also be provided by Lingoport over SFTP as an alternative.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HTTPS ==&lt;br /&gt;
&lt;br /&gt;
HTTPS is recommended but not strictly necessary for Globalyzer Server. Many customers choose to:&lt;br /&gt;
&lt;br /&gt;
* Expose Globalyzer Server internally over HTTP (port 8080), and/or&lt;br /&gt;
* Place a reverse proxy (such as Apache or Nginx) in front of the container, terminating HTTPS on port 443.&lt;br /&gt;
&lt;br /&gt;
If HTTPS is already standardized by your IT group, follow that process and simply point the HTTPS VirtualHost/ServerName to the Globalyzer Server container / port.&lt;br /&gt;
&lt;br /&gt;
For an example configuration, see:&lt;br /&gt;
* [[ HTTPS configuration | HTTPS Configuration ]]&lt;br /&gt;
&lt;br /&gt;
== HTTP/2 ==&lt;br /&gt;
&lt;br /&gt;
HTTP/2 is recommended but not required. It can offer improved performance, especially when many concurrent users are accessing the UI.&lt;br /&gt;
&lt;br /&gt;
HTTP/2 requires HTTPS, so it can only be used once HTTPS has been configured.&lt;br /&gt;
&lt;br /&gt;
For an example configuration, see:&lt;br /&gt;
* [[ HTTP2 Configuration | HTTP2 Configuration ]]&lt;br /&gt;
&lt;br /&gt;
== Email Sender ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server can send notifications to users (for example, license warnings or other system emails) depending on configuration.&lt;br /&gt;
&lt;br /&gt;
For email delivery, you will need the following information:&lt;br /&gt;
&lt;br /&gt;
* SMTP host URL (such as &amp;lt;code&amp;gt;smtp.yourcompany.com&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Authorization method (SMTP, SMTPS, etc.)&lt;br /&gt;
* Sender email address (for example &amp;lt;code&amp;gt;globalyzer@customerdomain.com&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Sender password (this is the value placed in &amp;lt;code&amp;gt;email_password&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Additional email settings (such as host and port) may be configured in the Globalyzer server configuration. Coordinate with Lingoport support if you are unsure which values to use.&lt;br /&gt;
&lt;br /&gt;
== Docker Install ==&lt;br /&gt;
&lt;br /&gt;
Docker is the underlying platform used to run the Globalyzer Server and MySQL 8 containers. &lt;br /&gt;
&lt;br /&gt;
The supported versions of Linux for Docker installation are:&lt;br /&gt;
&lt;br /&gt;
* [[Installing Docker on RedHat Enterprise Linux 8 |RedHat Enterprise Linux 8]]&lt;br /&gt;
* [[Oracle Linux 8]]&lt;br /&gt;
* [[Installing Docker on Ubuntu 20.04|Ubuntu 20.04]]&lt;br /&gt;
* [[Installing_Docker_on_Amazon_Linux_2|Amazon Linux 2]] (EOL 2025-06)&lt;br /&gt;
&lt;br /&gt;
Other Linux versions may work, but the above are the distributions and processes that have been verified.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server manages its own user database and can also integrate with your directory service (LDAP) or SAML/SSO depending on license and version.&lt;br /&gt;
&lt;br /&gt;
=== Globalyzer Server User Database ===&lt;br /&gt;
&lt;br /&gt;
At installation time:&lt;br /&gt;
&lt;br /&gt;
* A default administrator user is created (details provided by Lingoport support).&lt;br /&gt;
* It is strongly recommended to change the initial administrator password and store it securely.&lt;br /&gt;
&lt;br /&gt;
From that admin account you can create additional Globalyzer Server users and manage roles.&lt;br /&gt;
&lt;br /&gt;
=== LDAP Integration ===&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server can use your company’s LDAP directory for authentication and authorization. In this mode:&lt;br /&gt;
&lt;br /&gt;
* Users log in with their LDAP username and password.&lt;br /&gt;
* If they are authenticated and belong to one of the configured Globalyzer LDAP groups (admin / manager / member), a Globalyzer account is created/updated using LDAP attributes.&lt;br /&gt;
* LDAP remains the source of truth for user lifecycle: when a user is removed from LDAP they can no longer access Globalyzer.&lt;br /&gt;
&lt;br /&gt;
LDAP configuration involves:&lt;br /&gt;
&lt;br /&gt;
* Enabling LDAP mode (environment variable &amp;lt;code&amp;gt;GZSERVER_LDAP_MODE=true&amp;lt;/code&amp;gt; for the server process).&lt;br /&gt;
* Configuring the LDAP section in &amp;lt;code&amp;gt;GzserverConfig.groovy&amp;lt;/code&amp;gt;, including:&lt;br /&gt;
** Mapping user attributes (first name, last name, email, phone, title, country, time zone) via &amp;lt;code&amp;gt;gzserver.ldap.ctx.*&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Mapping LDAP groups to Globalyzer roles via &amp;lt;code&amp;gt;gzserver.ldap.admin.groupName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gzserver.ldap.manager.groupName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gzserver.ldap.member.groupName&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Defining a “no access” message for users who authenticate but are not in any Globalyzer LDAP group.&lt;br /&gt;
** Configuring LDAP server connection properties, including:&lt;br /&gt;
*** LDAP server URL (for example &amp;lt;code&amp;gt;grails.plugin.springsecurity.ldap.context.server = &#039;ldap://ldap.example.com:389&#039;&amp;lt;/code&amp;gt;)&lt;br /&gt;
*** Manager DN and password used for LDAP binds&lt;br /&gt;
*** Base DNs and filters for user and group searches.&lt;br /&gt;
&lt;br /&gt;
Passwords in &amp;lt;code&amp;gt;GzserverConfig.groovy&amp;lt;/code&amp;gt; may be stored either in plain text or encrypted using the &amp;lt;code&amp;gt;globalyzer-encrypt-password.jar&amp;lt;/code&amp;gt; utility distributed with the Globalyzer Server zip. See [[Globalyzer_Server_LDAP_Installation]] for detailed instructions and examples, including:&lt;br /&gt;
&lt;br /&gt;
* Encrypted manager passwords&lt;br /&gt;
* A dedicated continuous integration (CI) user (for Globalyzer Lite / automated scans) configured via:&lt;br /&gt;
** &amp;lt;code&amp;gt;gzserver.ldap.ci_user&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gzserver.ldap.ci_password&amp;lt;/code&amp;gt; (plain text or &amp;lt;code&amp;gt;ENC(...)&amp;lt;/code&amp;gt;)&lt;br /&gt;
* How login behavior changes on LDAP servers (LDAP User / Password fields, removal of “Forgot password” link, restrictions on editing profiles, etc.)&lt;br /&gt;
* How to enable detailed LDAP debug logging using &amp;lt;code&amp;gt;logback-debug.groovy&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;-Dlogging.config=...&amp;lt;/code&amp;gt; JVM option.&lt;br /&gt;
&lt;br /&gt;
For Docker-based deployments, the LDAP configuration is still applied inside the Globalyzer Server container via &amp;lt;code&amp;gt;GzserverConfig.groovy&amp;lt;/code&amp;gt; and environment variables. The steps in [[Globalyzer_Server_LDAP_Installation]] apply regardless of whether the server is deployed via Docker or on bare Tomcat.&lt;br /&gt;
&lt;br /&gt;
=== SAML / SSO Integration ===&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server can also be integrated with SAML-based SSO so that users authenticate via your corporate Identity Provider (IdP).&lt;br /&gt;
&lt;br /&gt;
At a high level, SSO configuration involves:&lt;br /&gt;
&lt;br /&gt;
* Configuring the Globalyzer Server as a SAML Service Provider (SP).&lt;br /&gt;
* Importing/exchanging metadata (IdP and SP).&lt;br /&gt;
* Adjusting Globalyzer’s security configuration to delegate authentication to the SSO provider.&lt;br /&gt;
* Coordinating user and group mapping so SSO identities map to the appropriate Globalyzer roles.&lt;br /&gt;
&lt;br /&gt;
The SSO configuration is performed after the base Docker installation and does not change the installation steps described on this page.&lt;br /&gt;
&lt;br /&gt;
For detailed SSO configuration steps and examples, see:&lt;br /&gt;
* [[Globalyzer_Server_SSO_Installation]]&lt;br /&gt;
&lt;br /&gt;
= New Globalyzer Server Installation =&lt;br /&gt;
&lt;br /&gt;
== sudo user ==&lt;br /&gt;
&lt;br /&gt;
A Linux user with &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; privileges is required as the user under which to prepare and run the installation scripts. For example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ec2-user&amp;lt;/code&amp;gt; on Amazon Linux systems&lt;br /&gt;
&lt;br /&gt;
The Globalyzer installation script itself must ultimately run with root privileges. It will exit with an error if it is not run as root.&lt;br /&gt;
&lt;br /&gt;
== Create the database conf directory ==&lt;br /&gt;
&lt;br /&gt;
Use the sudo user’s home directory as the base for Docker data directories. For example, on Amazon Linux with user &amp;lt;code&amp;gt;ec2-user&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Home: &amp;lt;code&amp;gt;/home/ec2-user&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The installer will create the MySQL configuration directory automatically:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/home/ec2-user/mysql/conf.d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optionally, you may create a basic MySQL client configuration file as well:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vi /home/&amp;amp;lt;user&amp;amp;gt;/mysql/conf.d/mysql.cnf&lt;br /&gt;
&lt;br /&gt;
[client]&lt;br /&gt;
default-character-set = utf8mb4&lt;br /&gt;
[mysql]&lt;br /&gt;
default-character-set = utf8mb4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The installer also creates additional directories under &amp;lt;code&amp;gt;home_directory&amp;lt;/code&amp;gt; for exports, backups, and internal configuration.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Your Lingoport contact will provide the Globalyzer Server installation scripts and configuration file. You should receive files similar to:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;InstallGzserver.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;UpdateGzserver.sh&amp;lt;/code&amp;gt; (name may vary)&lt;br /&gt;
* &amp;lt;code&amp;gt;UninstallGzserver.sh&amp;lt;/code&amp;gt; (name may vary)&lt;br /&gt;
&lt;br /&gt;
Copy these files to a directory under the sudo user’s home, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/ec2-user/globalyzerServerInstall&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or, in general:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/&amp;amp;lt;user&amp;amp;gt;/globalyzerServerInstall&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; file controls installation settings. The top portion is intended to be edited by the customer; the lower portion is preconfigured for access to the Lingoport Docker Hub account.&lt;br /&gt;
&lt;br /&gt;
A typical &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; will look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Provide your home directory, lingoport/ and gzserver/ folders will be created&lt;br /&gt;
#&lt;br /&gt;
home_directory=/home/ec2-user&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide the Globalyzer Server version&lt;br /&gt;
#&lt;br /&gt;
gzserver_image_version=6.8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide the Globalyzer Server port&lt;br /&gt;
#&lt;br /&gt;
serverPort=8080&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide the MYSQL root password you want to create for the MySQL database container&lt;br /&gt;
#&lt;br /&gt;
database_root_password=_dbrootpass_&lt;br /&gt;
&lt;br /&gt;
# Provide an email username and password you wish to use for automated emails from the system&lt;br /&gt;
email_username=_emailusername_&lt;br /&gt;
email_password=_emailpassword_&lt;br /&gt;
&lt;br /&gt;
# The URL the server will use&lt;br /&gt;
gzserver_url=_gzserverurl_&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# DO NOT CHANGE THE STUFF BELOW&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide your Docker Hub username&lt;br /&gt;
#&lt;br /&gt;
docker_username=lingoport_provided_customer_account&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide your Docker Hub account token&lt;br /&gt;
#&lt;br /&gt;
docker_account_token=lingoport_provided&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Provide the Docker network name you want to create&lt;br /&gt;
#&lt;br /&gt;
database_network=mysqlnetsgzserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
docker_image=lingoport/gzserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit the following values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;home_directory&amp;lt;/code&amp;gt; – base directory where the installer will create:&lt;br /&gt;
** &amp;lt;code&amp;gt;lingoport/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gzserver/export&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gzserver/config&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gzserver/backup&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;mysql/conf.d&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;gzserver_image_version&amp;lt;/code&amp;gt; – the Globalyzer Server image version provided by Lingoport (for example &amp;lt;code&amp;gt;6.8&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &amp;lt;code&amp;gt;serverPort&amp;lt;/code&amp;gt; – host port for HTTP access to the Globalyzer Server container (default &amp;lt;code&amp;gt;8080&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &amp;lt;code&amp;gt;database_root_password&amp;lt;/code&amp;gt; – root password to create for the MySQL 8 database container.&lt;br /&gt;
* &amp;lt;code&amp;gt;email_username&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;email_password&amp;lt;/code&amp;gt; – credentials for the SMTP account you wish to use for system email notifications. These are &#039;&#039;&#039;not&#039;&#039;&#039; prompted for by the installer and must be set correctly in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;gzserver_url&amp;lt;/code&amp;gt; – the full URL that clients will use to reach Globalyzer Server, such as:&lt;br /&gt;
** &amp;lt;code&amp;gt;http://myserver.mycompany.com:8080/gzserver&amp;lt;/code&amp;gt; (HTTP)&lt;br /&gt;
** &amp;lt;code&amp;gt;https://globalyzer.mycompany.com/gzserver&amp;lt;/code&amp;gt; (behind a reverse proxy)&lt;br /&gt;
&lt;br /&gt;
The initial &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; provided by Lingoport typically uses placeholder values such as &amp;lt;code&amp;gt;_dbrootpass_&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;_emailusername_&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;_emailpassword_&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;_gzserverurl_&amp;lt;/code&amp;gt;. These are examples only and must be replaced before production use.&lt;br /&gt;
&lt;br /&gt;
Do &#039;&#039;&#039;not&#039;&#039;&#039; change the values below the &amp;lt;code&amp;gt;# DO NOT CHANGE THE STUFF BELOW&amp;lt;/code&amp;gt; line unless instructed by Lingoport support. Those values:&lt;br /&gt;
&lt;br /&gt;
* Provide the Docker Hub username and token used to pull the &amp;lt;code&amp;gt;lingoport/gzserver&amp;lt;/code&amp;gt; image&lt;br /&gt;
* Configure the Docker network name and image name&lt;br /&gt;
&lt;br /&gt;
== Run InstallGzserver.sh ==&lt;br /&gt;
&lt;br /&gt;
From the directory containing the scripts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/&amp;amp;lt;user&amp;amp;gt;/globalyzerServerInstall&lt;br /&gt;
chmod +x *.sh&lt;br /&gt;
sudo ./InstallGzserver.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* The script must run as root (for example via &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt;). It will exit if &amp;lt;code&amp;gt;id -u&amp;lt;/code&amp;gt; is not 0.&lt;br /&gt;
* If any of the following are missing or empty in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;, the script will prompt for them:&lt;br /&gt;
** &amp;lt;code&amp;gt;database_root_password&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gzserver_url&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;docker_username&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;docker_account_token&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;email_username&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;email_password&amp;lt;/code&amp;gt; are not prompted and will be used exactly as written in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== What the installer does ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;InstallGzserver.sh&amp;lt;/code&amp;gt; performs the following high-level steps:&lt;br /&gt;
&lt;br /&gt;
# Reads &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; and prompts for any missing values listed above.&lt;br /&gt;
# Creates directories under &amp;lt;code&amp;gt;home_directory&amp;lt;/code&amp;gt;:&lt;br /&gt;
## &amp;lt;code&amp;gt;lingoport/&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;gzserver/export&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;gzserver/config&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;gzserver/backup&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;mysql/conf.d&amp;lt;/code&amp;gt;&lt;br /&gt;
# Changes directory to &amp;lt;code&amp;gt;$home_directory/gzserver/config&amp;lt;/code&amp;gt; to store container IDs and related files.&lt;br /&gt;
# Ensures a Docker network exists with name &amp;lt;code&amp;gt;database_network&amp;lt;/code&amp;gt; (default: &amp;lt;code&amp;gt;mysqlnetsgzserver&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Starts a MySQL 8 container:&lt;br /&gt;
## Name: &amp;lt;code&amp;gt;gzserverDatabase&amp;lt;/code&amp;gt;&lt;br /&gt;
## Network alias: &amp;lt;code&amp;gt;mysqlservergzserver&amp;lt;/code&amp;gt;&lt;br /&gt;
## Network: &amp;lt;code&amp;gt;$database_network&amp;lt;/code&amp;gt;&lt;br /&gt;
## Environment:&lt;br /&gt;
### &amp;lt;code&amp;gt;MYSQL_ROOT_PASSWORD=$database_root_password&amp;lt;/code&amp;gt;&lt;br /&gt;
### &amp;lt;code&amp;gt;MYSQL_DATABASE=GZSERVER&amp;lt;/code&amp;gt;&lt;br /&gt;
## Volume:&lt;br /&gt;
### &amp;lt;code&amp;gt;$home_directory/mysql/conf.d:/etc/mysql/conf.d&amp;lt;/code&amp;gt;&lt;br /&gt;
## MySQL options:&lt;br /&gt;
### &amp;lt;code&amp;gt;--character-set-server=utf8mb4&amp;lt;/code&amp;gt;&lt;br /&gt;
### &amp;lt;code&amp;gt;--collation-server=utf8mb4_unicode_ci&amp;lt;/code&amp;gt;&lt;br /&gt;
### &amp;lt;code&amp;gt;--default-authentication-plugin=mysql_native_password&amp;lt;/code&amp;gt;&lt;br /&gt;
# Waits until the MySQL container reports ready (using &amp;lt;code&amp;gt;mysqladmin ping&amp;lt;/code&amp;gt; inside the container).&lt;br /&gt;
# Logs in to Docker Hub using:&lt;br /&gt;
## &amp;lt;code&amp;gt;docker_username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;docker_account_token&amp;lt;/code&amp;gt;&lt;br /&gt;
# Starts the Globalyzer Server container:&lt;br /&gt;
## Image: &amp;lt;code&amp;gt;$docker_image:$gzserver_image_version&amp;lt;/code&amp;gt; (for example &amp;lt;code&amp;gt;lingoport/gzserver:6.8&amp;lt;/code&amp;gt;)&lt;br /&gt;
## Network alias: &amp;lt;code&amp;gt;gzservernet&amp;lt;/code&amp;gt;&lt;br /&gt;
## Network: &amp;lt;code&amp;gt;$database_network&amp;lt;/code&amp;gt;&lt;br /&gt;
## Port mapping: &amp;lt;code&amp;gt;$serverPort:8080&amp;lt;/code&amp;gt; (host:container)&lt;br /&gt;
## Volume:&lt;br /&gt;
### &amp;lt;code&amp;gt;$home_directory/gzserver/export:/home/gzserver/.gzserverihost/export&amp;lt;/code&amp;gt;&lt;br /&gt;
## Restart policy: &amp;lt;code&amp;gt;--restart unless-stopped&amp;lt;/code&amp;gt;&lt;br /&gt;
# Waits ~20 seconds, then updates the Globalyzer server configuration inside the container by replacing:&lt;br /&gt;
## &amp;lt;code&amp;gt;_dbrootpass_&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;$database_root_password&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;_emailusername_&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;$email_username&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;_emailpassword_&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;$email_password&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;_gzserverurl_&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;$gzserver_url&amp;lt;/code&amp;gt;&lt;br /&gt;
# Restarts the Globalyzer Server container so the new configuration is applied.&lt;br /&gt;
# Prints a summary message and a &amp;lt;code&amp;gt;docker logs -f&amp;lt;/code&amp;gt; command you can use to follow the startup.&lt;br /&gt;
&lt;br /&gt;
The installer saves container IDs in:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;$home_directory/gzserver/config/gz_mysql_id.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;$home_directory/gzserver/config/gz_container_id.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These are used by the update/uninstall scripts.&lt;br /&gt;
&lt;br /&gt;
=== Re-install Globalyzer Server ===&lt;br /&gt;
&lt;br /&gt;
If you need to re-run &amp;lt;code&amp;gt;InstallGzserver.sh&amp;lt;/code&amp;gt; on the same system:&lt;br /&gt;
&lt;br /&gt;
* First run the provided uninstall script (for example &amp;lt;code&amp;gt;UninstallGzserver.sh&amp;lt;/code&amp;gt;) to clean up containers.&lt;br /&gt;
* Optionally remove the existing &amp;lt;code&amp;gt;lingoport/gzserver&amp;lt;/code&amp;gt; image:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker image ls&lt;br /&gt;
sudo docker image rm --force &amp;amp;lt;gzserver-image-id&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Adjust &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; as needed, then run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ./InstallGzserver.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Note: Database backup ==&lt;br /&gt;
&lt;br /&gt;
The installer creates:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;$home_directory/gzserver/backup&amp;lt;/code&amp;gt; – intended as the location for database backup files&lt;br /&gt;
&lt;br /&gt;
If you received a database backup script (for example &amp;lt;code&amp;gt;BackupGzserverDatabase.sh&amp;lt;/code&amp;gt;) from Lingoport, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x *.sh&lt;br /&gt;
sudo ./BackupGzserverDatabase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The database backup SQL file will typically be placed under:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;$home_directory/gzserver/backup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note on MySQL data location:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* By default, the MySQL container stores its data in a Docker-managed volume under &amp;lt;code&amp;gt;/var/lib/docker/volumes&amp;lt;/code&amp;gt; on the host.&lt;br /&gt;
* This data persists across container restarts and image updates.&lt;br /&gt;
* The data can be removed if the container &#039;&#039;&#039;and&#039;&#039;&#039; its associated volume are deleted (for example with &amp;lt;code&amp;gt;docker rm -v&amp;lt;/code&amp;gt; or by an uninstall process that removes volumes).&lt;br /&gt;
&lt;br /&gt;
For this reason, it is recommended to keep regular database backups before performing any destructive maintenance.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation ==&lt;br /&gt;
&lt;br /&gt;
Once &amp;lt;code&amp;gt;InstallGzserver.sh&amp;lt;/code&amp;gt; completes:&lt;br /&gt;
&lt;br /&gt;
# Check that containers are running:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker ps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see at least:&lt;br /&gt;
&lt;br /&gt;
* A MySQL 8 container (for example &amp;lt;code&amp;gt;mysql:8.0&amp;lt;/code&amp;gt;)&lt;br /&gt;
* A Globalyzer Server container (for example &amp;lt;code&amp;gt;lingoport/gzserver:6.8&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
# Follow the Globalyzer Server logs:&lt;br /&gt;
The installer prints a &amp;lt;code&amp;gt;docker logs&amp;lt;/code&amp;gt; command at the end, such as:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker logs -f &amp;amp;lt;gzserver-container-id&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wait until Tomcat and Globalyzer report successful startup. First-time startup can take several minutes (commonly up to ~8 minutes).&lt;br /&gt;
&lt;br /&gt;
# Access the Globalyzer Server URL:&lt;br /&gt;
Open a browser and navigate to the URL configured in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; (the &amp;lt;code&amp;gt;gzserver_url&amp;lt;/code&amp;gt; value), for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://myserver.mycompany.com:8080/gzserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://globalyzer.mycompany.com/gzserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see the Globalyzer Server login page.&lt;br /&gt;
&lt;br /&gt;
# Log in with the administrator account:&lt;br /&gt;
Use the administrator credentials provided by Lingoport support. After logging in, you can:&lt;br /&gt;
&lt;br /&gt;
* Change the administrator password&lt;br /&gt;
* Create additional users&lt;br /&gt;
* Configure rule sets and scanning options&lt;br /&gt;
&lt;br /&gt;
For a fresh install, it is expected that there are no rule sets or projects configured yet. For upgrades, you may need to restore a database backup if you are migrating from an earlier system.&lt;br /&gt;
&lt;br /&gt;
If the installation is unsuccessful, do not repeatedly re-run the install script; instead:&lt;br /&gt;
&lt;br /&gt;
* Run the uninstall script&lt;br /&gt;
* Adjust configuration or correct issues&lt;br /&gt;
* Re-run the install&lt;br /&gt;
&lt;br /&gt;
= Globalyzer Server Update =&lt;br /&gt;
&lt;br /&gt;
== Scripts ==&lt;br /&gt;
&lt;br /&gt;
Your Globalyzer Server distribution may include an update script (for example &amp;lt;code&amp;gt;UpdateGzserver.sh&amp;lt;/code&amp;gt;). This script typically:&lt;br /&gt;
&lt;br /&gt;
* Backs up the existing database (or instructs you to do so)&lt;br /&gt;
* Stops the running Globalyzer Server container&lt;br /&gt;
* Pulls the new &amp;lt;code&amp;gt;lingoport/gzserver&amp;lt;/code&amp;gt; image version&lt;br /&gt;
* Starts the new container version using existing data and configuration&lt;br /&gt;
&lt;br /&gt;
Make sure to keep a copy of your current &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; before updating.&lt;br /&gt;
&lt;br /&gt;
== Backup the database ==&lt;br /&gt;
&lt;br /&gt;
Before updating to a new version, it is strongly recommended to back up the database. If you have a backup script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x *.sh&lt;br /&gt;
sudo ./BackupGzserverDatabase.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify that the backup file is present under:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;$home_directory/gzserver/backup&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Edit install.conf ==&lt;br /&gt;
&lt;br /&gt;
To update to a new Globalyzer Server image version:&lt;br /&gt;
&lt;br /&gt;
* Change the &amp;lt;code&amp;gt;gzserver_image_version&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gzserver_image_version=6.9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do not modify the fields below the &amp;lt;code&amp;gt;# DO NOT CHANGE THE STUFF BELOW&amp;lt;/code&amp;gt; line unless instructed by Lingoport.&lt;br /&gt;
&lt;br /&gt;
== Run the update script ==&lt;br /&gt;
&lt;br /&gt;
If provided:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x UpdateGzserver.sh&lt;br /&gt;
sudo ./UpdateGzserver.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the update:&lt;br /&gt;
&lt;br /&gt;
* Use &amp;lt;code&amp;gt;sudo docker ps&amp;lt;/code&amp;gt; to verify the Globalyzer Server container is running with the new image version.&lt;br /&gt;
* Navigate to the Globalyzer Server URL and confirm the system is operational.&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
&lt;br /&gt;
You can manage Globalyzer Server via Docker commands on the VM.&lt;br /&gt;
&lt;br /&gt;
* To list running containers:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker ps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* To stop Globalyzer Server:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker stop &amp;amp;lt;gzserver-container-id&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* To start Globalyzer Server again:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker start &amp;amp;lt;gzserver-container-id&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also identify the container by name if your installation uses fixed names.&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
To completely uninstall Globalyzer Server, use the uninstall script provided by Lingoport, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ./UninstallGzserver.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The uninstall script:&lt;br /&gt;
&lt;br /&gt;
* Must be run as root (for example via &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Sources &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; (to obtain &amp;lt;code&amp;gt;home_directory&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Changes directory to &amp;lt;code&amp;gt;$home_directory/gzserver/config&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Reads the Globalyzer Server container ID from &amp;lt;code&amp;gt;gz_container_id.txt&amp;lt;/code&amp;gt; and stops/removes that container.&lt;br /&gt;
* Reads the MySQL container ID from &amp;lt;code&amp;gt;gz_mysql_id.txt&amp;lt;/code&amp;gt; and stops/removes that container.&lt;br /&gt;
&lt;br /&gt;
If either of the ID files is missing, the script exits with an error message (for example if the server has not been installed or containers were removed manually).&lt;br /&gt;
&lt;br /&gt;
The uninstall script:&lt;br /&gt;
&lt;br /&gt;
* Does &#039;&#039;&#039;not&#039;&#039;&#039; remove the Docker network created during install.&lt;br /&gt;
* Does &#039;&#039;&#039;not&#039;&#039;&#039; remove host directories under &amp;lt;code&amp;gt;$home_directory&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Does &#039;&#039;&#039;not&#039;&#039;&#039; explicitly remove MySQL data volumes (they remain on the host unless removed separately).&lt;br /&gt;
&lt;br /&gt;
After uninstalling, verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker ps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should not see Globalyzer Server or its MySQL container listed as running.&lt;br /&gt;
&lt;br /&gt;
= FAQ and Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
== Make sure the Server URL is reachable ==&lt;br /&gt;
&lt;br /&gt;
Navigate to the server URL configured in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;gzserver_url&amp;lt;/code&amp;gt;). Is the login screen available?&lt;br /&gt;
&lt;br /&gt;
If not:&lt;br /&gt;
&lt;br /&gt;
* Check that both containers are running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker container ls -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see entries similar to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CONTAINER ID   IMAGE                   COMMAND                  STATUS       PORTS&lt;br /&gt;
...            lingoport/gzserver:6.8  &amp;quot;catalina.sh run&amp;quot;        Up ...       0.0.0.0:8080-&amp;gt;8080/tcp&lt;br /&gt;
...            mysql:8.0               &amp;quot;docker-entrypoint.s…&amp;quot;   Up ...       3306/tcp, 33060/tcp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify DNS points to the correct VM.&lt;br /&gt;
* Verify firewall rules allow access to the configured &amp;lt;code&amp;gt;serverPort&amp;lt;/code&amp;gt;.&lt;br /&gt;
* If behind HTTPS / reverse proxy, verify the proxy configuration and TLS certificate.&lt;br /&gt;
&lt;br /&gt;
== LDAP login issues ==&lt;br /&gt;
&lt;br /&gt;
If you have configured LDAP and logins are failing:&lt;br /&gt;
&lt;br /&gt;
* Review your settings against [[Globalyzer_Server_LDAP_Installation]]:&lt;br /&gt;
** Attribute mappings (&amp;lt;code&amp;gt;gzserver.ldap.ctx.*&amp;lt;/code&amp;gt;)&lt;br /&gt;
** Group names (&amp;lt;code&amp;gt;gzserver.ldap.*.groupName&amp;lt;/code&amp;gt;)&lt;br /&gt;
** Search bases and filters for users and groups&lt;br /&gt;
** Manager DN and password&lt;br /&gt;
* Enable detailed logging by:&lt;br /&gt;
** Placing the &amp;lt;code&amp;gt;logback-debug.groovy&amp;lt;/code&amp;gt; file (from the Globalyzer Server zip) on the server.&lt;br /&gt;
** Adding &amp;lt;code&amp;gt;-Dlogging.config=/path/to/logback-debug.groovy&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;JAVA_OPTS&amp;lt;/code&amp;gt; for the Globalyzer Server process.&lt;br /&gt;
** Restarting the Globalyzer Server container.&lt;br /&gt;
&lt;br /&gt;
This will cause additional LDAP diagnostic information to be written to the Globalyzer server logs, helping to pinpoint configuration issues.&lt;br /&gt;
&lt;br /&gt;
== To check files on disk ==&lt;br /&gt;
&lt;br /&gt;
To inspect files inside the Globalyzer Server container (for logs or configuration):&lt;br /&gt;
&lt;br /&gt;
1. Find the container ID:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker container ls -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Run a shell in the container:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker exec -it &amp;amp;lt;gzserver-container-id&amp;amp;gt; bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within that shell, you can explore the filesystem (for example, &amp;lt;code&amp;gt;/usr/local/tomcat&amp;lt;/code&amp;gt;, logs directories, or the export path mapped from &amp;lt;code&amp;gt;$home_directory/gzserver/export&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== How to backup and restore a system ==&lt;br /&gt;
&lt;br /&gt;
A typical backup/restore process:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Backup the Globalyzer Server database&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   sudo ./BackupGzserverDatabase.sh &lt;br /&gt;
&lt;br /&gt;
This will create one or more files such as:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;&amp;amp;lt;home_directory&amp;amp;gt;/gzserver/backup/gzserver_backup_YYYY-MM-DD_HHMMSS.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Exact naming may vary depending on the backup script.)&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stop the current Globalyzer Server and MySQL containers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   sudo docker ps&lt;br /&gt;
   sudo docker stop &amp;amp;lt;GlobalyzerServerContainerID&amp;amp;gt; &amp;amp;lt;MySQLContainerID&amp;amp;gt;&lt;br /&gt;
   sudo docker ps&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Install or update Globalyzer Server&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   sudo ./InstallGzserver.sh&lt;br /&gt;
   or&lt;br /&gt;
   sudo ./UpdateGzserver.sh&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Verify that Globalyzer Server comes up in the browser&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Log in with the administrator account; for a fresh install, no rule sets or users beyond the admin account are expected.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Restore from the database (if applicable)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have a restore script (for example &amp;lt;code&amp;gt;RestoreGzserverDatabase.sh&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
   sudo ./RestoreGzserverDatabase.sh YYYY-MM-DD_HHMMSS&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;code&amp;gt;YYYY-MM-DD_HHMMSS&amp;lt;/code&amp;gt; matches the timestamp in your backup file name.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Verify that Globalyzer Server is populated with the correct information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Log in and check rule sets, users, and other configuration.&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
Globalyzer Server is now ready to be used. Typical next steps include:&lt;br /&gt;
&lt;br /&gt;
* Configure Globalyzer Server users and roles.&lt;br /&gt;
* Set up rule sets and scanning configurations.&lt;br /&gt;
* Update Globalyzer Clients (CLI, IDE, or Command Center) to point to the Globalyzer Server URL you configured.&lt;br /&gt;
* Follow the corresponding Globalyzer Client or Command Center user guides for integrating scans into your development and CI/CD processes.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=99651</id>
		<title>Command Center Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=99651"/>
		<updated>2025-11-20T21:41:35Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Docker Install */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites=&lt;br /&gt;
Before installing or updating Command Center, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Deployment Diagram ===&lt;br /&gt;
&lt;br /&gt;
The Lingoport system clones repository either for Globalyzer or Localyzer, or both. Access to the VM with Docker is necessary in order to install the Lingoport products. That may be internal to the customer or on a system hosted and managed by Lingoport. &lt;br /&gt;
&lt;br /&gt;
Furthermore, for Localyzer projects, resource files (files that need translation, not code) is sent to the LSP or the TMS. &lt;br /&gt;
&lt;br /&gt;
[[File:Docker Deployed Command Center.jpg|500px|center]]&lt;br /&gt;
&lt;br /&gt;
* Repositories may be inside or outside a customer&#039;s network&lt;br /&gt;
* &#039;&#039;&#039;Lingoport Command Center System&#039;&#039;&#039; may be inside or outside a customer&#039;s network&lt;br /&gt;
* Translation system, LSP may be inside or outside a customer&#039;s network. &lt;br /&gt;
&lt;br /&gt;
This leads to a number of configurations, all supported by Lingoport, with security enforced either by Lingoport or by the customer in terms of IT, Firewall, access, etc.&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
When &#039;&#039;&#039;Lingoport hosts&#039;&#039;&#039; Command Center access to the repositories and to the LSP/TMS will need to be granted. Lingoport will then be in charge of security which IP addresses have access to what part of the application or the API entry points. &lt;br /&gt;
&lt;br /&gt;
When installing Command Center &#039;&#039;&#039;on premises&#039;&#039;&#039;,  the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is very important to the successful deployment of the Lingoport applications when installing the suite on site. In particular, the IT group that sets up the Linux system must understand the usage model for the system. &lt;br /&gt;
Lingoport requires a meeting with the parties responsible for setting up and maintaining the host system &amp;lt;b&amp;gt;before&amp;lt;/b&amp;gt; installation can properly begin. The hope is that once the system is setup for installation, minimal IT interaction is necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preparations must be made with the &#039;&#039;&#039;IT&#039;&#039;&#039; team to ensure that all &#039;&#039;&#039;prerequisites&#039;&#039;&#039; are met before installation.  For new installations, this is the recommended method to use to verify that all the various actors work together well.&lt;br /&gt;
&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
Before installing Command Center, the following needs to be configured:&lt;br /&gt;
* Hardware &lt;br /&gt;
* Linux &lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall&lt;br /&gt;
* Https&lt;br /&gt;
&lt;br /&gt;
The next sections on this page address each one of these points and more.&lt;br /&gt;
&lt;br /&gt;
==Hardware &amp;amp; Software Requirements==&lt;br /&gt;
The following sections describe the hardware and software requirements for Command Center.&lt;br /&gt;
&lt;br /&gt;
Please note that the Globalyzer Server installation is in a different section. &lt;br /&gt;
&lt;br /&gt;
===Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Required&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 (4 better)&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 32 GB&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 500 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The [[Terms_and_Definitions#GlobalyzerServer|Globalyzer Server]] may be hosted by Lingoport, reside on another server, or be installed on the same system.  Other Linux and Windows machines may have Globalyzer clients installed.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker installation, most of the containers will be managed by Docker. However, volumes will be mounted on the Linux virtual machine and a database configuration file will reside on the VM: This requires Linux and a Docker installation.&lt;br /&gt;
&lt;br /&gt;
=== Support Browsers and Versions ===&lt;br /&gt;
The following browsers are supported:&lt;br /&gt;
* Chrome: 117+&lt;br /&gt;
* Edge: 117+&lt;br /&gt;
* Firefox: 71+&lt;br /&gt;
&lt;br /&gt;
==Access and Ports / Firewall==&lt;br /&gt;
&lt;br /&gt;
Command Center may need to be accessible by Lingoport and customer personnel to configure jobs, check the console if any problem arise, run jobs if necessary. Command Center needs to be accessible by many customer actors, including development teams, management, and QA, Lingoport, Translation Vendors.&lt;br /&gt;
&lt;br /&gt;
=== Ports ===&lt;br /&gt;
&lt;br /&gt;
===== Internal to company network =====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left; width=50%;&amp;quot;&lt;br /&gt;
!Services!!Ports!!Inbound (session)!!Outbound (session)!!Notes&lt;br /&gt;
|-&lt;br /&gt;
|SSH (for system config/maintenance)|| 22 || Y || N || System configuration and maintenance&lt;br /&gt;
|-&lt;br /&gt;
|Command Center || 8083 (HTTP) and/or 443 (HTTPS) || Y || N || Default 8083 (configurable at install time) HTTPS requires reverse proxy Ex: Apache and Installation of SSL certificate.&lt;br /&gt;
|-&lt;br /&gt;
|[[Terms_and_Definitions#translationvendor|Translation Vendor]] interactions: FTP/FTPS/SFTP (MemoQ, etc.) || 21 (FTP) or 443 (FTPS) or 22 (SFTP - recommended) || (FTP/S only) || Y || FTP/FTPS also require data ports (&amp;gt; 1024). Recommend SFTP if possible.&lt;br /&gt;
|-&lt;br /&gt;
|[[Terms_and_Definitions#translationvendor|Translation Vendor]] interactions: Trados Enterprise, XTM and Memsource || 80 (HTTP) optional. 443 (HTTPS) required. || (Some cases) || Y || May need to be external if XTM/Memsource not installed on premise.&lt;br /&gt;
|-&lt;br /&gt;
|SMTP/SMTPS || 25 or 465 or 587 || N || Y || Depends on corporate mail setup.&lt;br /&gt;
|-&lt;br /&gt;
|Globalyzer Server (Optional) || 80 or 443 || N || Y || Only needed when Globalyzer Server is on premises&lt;br /&gt;
|-&lt;br /&gt;
|Repository Access || 22 (SSH) 443 (HTTPS/S3) 3690 (SVN) 7990 (Bitbucket) 7999 (Bitbucket) 8080 (TFS)  || N || Y || VCS systems can vary, check with particular port(s) being used (Could be external/internal/both) &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== External access ====&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left; width=50%;&amp;quot;&lt;br /&gt;
!Services!!Ports!!Inbound!!Outbound!!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Lingoport SSH access || 22 || Y || N || Optional. Recommended for ease of upgrades and maintenance.&lt;br /&gt;
|-&lt;br /&gt;
|RHEL/CentOS/Ubuntu Packages || 80 (Debian)  443 (RHEL) || N || Y || Operating system packages access (Most likely external, but could be managed internally as well)&lt;br /&gt;
|-&lt;br /&gt;
|Globalyzer Server || 80 and 443 || N || Y || Access to Globalyzer Server in Lingoport Cloud for rule sets (Unless using on-premises Globalyzer Server)&lt;br /&gt;
|-&lt;br /&gt;
|hub.docker.com || 80 and 443 || N || Y || Command Center Image location&lt;br /&gt;
|-&lt;br /&gt;
|Repository Access || 22 (SSH) 443 (HTTPS/S3) 3690 (SVN) 7990 (Bitbucket) 7999 (Bitbucket) 8080 (TFS)  || N || Y || VCS systems can vary, check with particular port(s) being used (Could be external/internal/both)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
&lt;br /&gt;
HTTPS is recommended but not necessary for the Command Center installation. HTTPS may already be set up or your IT may have a standard on how to set up HTTPS. If that&#039;s the case, go the next section. &lt;br /&gt;
&lt;br /&gt;
Otherwise, follow this link for a suggested HTTPS configuration:&lt;br /&gt;
* [[ HTTPS configuration | HTTPS Configuration ]]&lt;br /&gt;
&lt;br /&gt;
==HTTP/2==&lt;br /&gt;
&lt;br /&gt;
HTTP/2 is recommended but not necessary for the Command Center installation as it will provide a noticeable performance boost when leveraged. HTTP/2 does require HTTPS be used so this will only be possible if the previous HTTPS configuration has already been performed.  &lt;br /&gt;
&lt;br /&gt;
If HTTP/2 support will be added, follow this link for a suggested HTTP/2 configuration:&lt;br /&gt;
* [[ HTTP2 Configuration | HTTP2 Configuration ]]&lt;br /&gt;
&lt;br /&gt;
== Email Sender ==&lt;br /&gt;
Email notifications are sent to a project configured recipients . See [[ Projects_page#Create_a_new_project | Create a new project  ]] after this installation.&lt;br /&gt;
For those notifications to be sent, the following will be configured in the settings. &lt;br /&gt;
&lt;br /&gt;
The following information will then be needed:&lt;br /&gt;
* Host URL &#039;&#039;(like smpt.gmail.com for instance)&#039;&#039;&lt;br /&gt;
* Authorization method &#039;&#039;(SMTP, SMTPS, etc.)&#039;&#039;&lt;br /&gt;
* Sender email address &#039;&#039;(localyzer@customerdomain.com for instance)&#039;&#039;&lt;br /&gt;
* Sender password&lt;br /&gt;
&lt;br /&gt;
== Docker Install==&lt;br /&gt;
Docker is a platform that allows you to easily develop, test, and deploy applications as containers. This section will walk you through the process of installing Docker on a Linux system.&lt;br /&gt;
&lt;br /&gt;
The supported versions of Linux are:&lt;br /&gt;
&lt;br /&gt;
* [[Installing Docker on RedHat Enterprise Linux 8 |RedHat Enterprise Linux 8]]&lt;br /&gt;
* [[Oracle Linux 8]]&lt;br /&gt;
* [[Installing Docker on Ubuntu 20.04|Ubuntu 20.04]]&lt;br /&gt;
* [[Installing_Docker_on_Amazon_Linux_2|Amazon Linux 2]] (EOL 2025-06)&lt;br /&gt;
&lt;br /&gt;
Other versions of Linux may work correctly, but these are the versions and processes that have been verified.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
When deploying Command Center, the configuration determines if the user management is done by Command Center itself, via an LDAP, or via SSO (using SAML).&lt;br /&gt;
&lt;br /&gt;
=== Command Center User Database ===&lt;br /&gt;
&lt;br /&gt;
One administration user is configured when Command Center is installed. Contact support (at) lingoport (dot) com in order to get an administration user and password. That user can then create Command Center users. It is strongly recommended to change the first administration password and keep it safe.&lt;br /&gt;
&lt;br /&gt;
=== LDAP ===&lt;br /&gt;
&lt;br /&gt;
* LDAP Connection &lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
=== SSO ===&lt;br /&gt;
&lt;br /&gt;
* SSO Connection&lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
See: [[Command Center SSO Installation]]&lt;br /&gt;
&lt;br /&gt;
= New Command Center Installation =&lt;br /&gt;
&lt;br /&gt;
==sudo user==&lt;br /&gt;
A user, such as &amp;lt;code&amp;gt;centos&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ec2-user&amp;lt;/code&amp;gt;, with &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; privileges is required as the user under which to install Command Center. &lt;br /&gt;
* Note: This should not be the legacy &amp;lt;code&amp;gt;jenkins&amp;lt;/code&amp;gt; user.&lt;br /&gt;
&lt;br /&gt;
==Create the database conf file==&lt;br /&gt;
Use the sudo user home for Docker, such as  /home/centos for CentOS systems and /home/ec2-user for RedHat virtual systems. &lt;br /&gt;
&lt;br /&gt;
The mysql and conf.d folders may need to be created as well.&lt;br /&gt;
 &lt;br /&gt;
 vi /home/&amp;lt;user&amp;gt;/mysql/conf.d/mysql.cnf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[client]&lt;br /&gt;
default-character-set = utf8mb4&lt;br /&gt;
[mysql]&lt;br /&gt;
default-character-set = utf8mb4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration == &lt;br /&gt;
Get the installation and update scripts and the install.conf file from the main branch of this public repository:&lt;br /&gt;
&lt;br /&gt;
* https://github.com/Lingoport/CommandCenterConfig &lt;br /&gt;
&lt;br /&gt;
You should have files such as:&lt;br /&gt;
&lt;br /&gt;
    install.conf&lt;br /&gt;
    BackupCommandCenterDatabase.sh&lt;br /&gt;
    InstallCommandCenter.sh&lt;br /&gt;
    UninstallCommandCenter.sh&lt;br /&gt;
    UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
If you need to install SSO version, the relevant files are:&lt;br /&gt;
&lt;br /&gt;
    install.conf&lt;br /&gt;
    BackupCommandCenterDatabase.sh&lt;br /&gt;
    InstallSSOCommandCenter.sh&lt;br /&gt;
    UninstallCommandCenter.sh&lt;br /&gt;
    UpdateSSOCommandCenter.sh&lt;br /&gt;
    saml_configuration.conf&lt;br /&gt;
&lt;br /&gt;
Copy the above files under your home directory, &#039;&#039;for instance&#039;&#039; &amp;lt;code&amp;gt;&amp;lt;user&amp;gt;/commandCenterInstall&amp;lt;/code&amp;gt; where &amp;lt;user&amp;gt; may be &amp;lt;code&amp;gt;/home/centos&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;/home/ec2-user&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
Unless directed otherwise, change the top part of the &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; file. &lt;br /&gt;
&lt;br /&gt;
Set up &amp;lt;code&amp;gt;saml_configuration.conf&amp;lt;/code&amp;gt; if you are going to use SAML&lt;br /&gt;
&lt;br /&gt;
The initial version number will be provided for the first installation. &lt;br /&gt;
&lt;br /&gt;
For updates, &amp;lt;code&amp;gt;command_center_image_version&amp;lt;/code&amp;gt; will be the only parameter to change in the &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt; file. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Provide the Command Center version&lt;br /&gt;
# For *Regular* Updates, this should be the only parameter to change&lt;br /&gt;
command_center_image_version=113&lt;br /&gt;
&lt;br /&gt;
Make sure to keep a copy of that file in case you overwrite it when updating from the https://github.com/Lingoport/CommandCenterConfig Git repository&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# After Install, Updates should not need to change anything below&lt;br /&gt;
# ----------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
# The Server URL: &#039;&amp;quot;https://yourserver/command-center&amp;quot;&#039;&lt;br /&gt;
serverURL=&#039;&amp;quot;https://SERVER_DNS_HERE/command-center&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
# Provide the home directory, lingoport/commandcenter/Lingoport_Data&lt;br /&gt;
# folder will be created&lt;br /&gt;
home_directory=/home/centos&lt;br /&gt;
&lt;br /&gt;
# Provide the Command Center server port&lt;br /&gt;
serverPort=8083&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Run InstallCommandCenter.sh==&lt;br /&gt;
&lt;br /&gt;
     chmod +x *.sh&lt;br /&gt;
     sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
If you are using sso version installer, run &lt;br /&gt;
&lt;br /&gt;
     chmod +x *.sh&lt;br /&gt;
     sudo ./InstallSSOCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
=== Re-install Command Center ===&lt;br /&gt;
&lt;br /&gt;
If you need to re-run the &#039;&#039;&#039;InstallCommandCenter.sh&#039;&#039;&#039;h, make sure to run &#039;&#039;&#039;UninstallCommandCenter.sh&#039;&#039;&#039; first to clean your environment.&lt;br /&gt;
* Uninstall Command Center&lt;br /&gt;
&lt;br /&gt;
   sudo ./UninstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
* Verify that Command Center and the database is no longer in the list&lt;br /&gt;
   sudo docker ps &lt;br /&gt;
&lt;br /&gt;
* Remove the image to download and install again&lt;br /&gt;
&lt;br /&gt;
   sudo docker image ls&lt;br /&gt;
   sudo docker image rm --force &amp;lt;command center image ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Start the install again&lt;br /&gt;
&lt;br /&gt;
   sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: Docker image version is not the Command Center version, check latest docker image version at  https://hub.docker.com/repository/docker/lingoport/command-center_dev/general&lt;br /&gt;
&lt;br /&gt;
You should see at least an MySQL and a Command Center container running.&lt;br /&gt;
&lt;br /&gt;
== Note: Database backup  ==&lt;br /&gt;
To backup the database, run the following script:&lt;br /&gt;
&lt;br /&gt;
     chmod +x *.sh&lt;br /&gt;
     sudo ./BackupCommandCenterDatabase.sh&lt;br /&gt;
&lt;br /&gt;
The database backup sql file will be under &#039;&#039;&#039;$home_directory/commandcenter/backup&#039;&#039;&#039; folder, named &#039;&#039;&#039;commandcenter_backup_$current_date.sql&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Right after installation, the backup is not necessary. However, as you configure and on-board projects, you may want to set up a backup strategy.&lt;br /&gt;
To backup the database periodically, schedule to run BackupCommandCenterDatabase.sh on a regular basis, for instance with a Cron service.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation == &lt;br /&gt;
Log in to the URL based on the command-center-config.sh settings, so something like:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;nowiki&amp;gt;https://commandcenter.mycompany.io/command-center&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should now be able to install the licenses and create projects.&lt;br /&gt;
&lt;br /&gt;
The Command Center will initially have one Administrator user &#039;&#039;&#039;CCAdmin&#039;&#039;&#039; with the password &#039;&#039;&#039;please.reset.me&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
If the installation is unsuccessful for any reason, do not try to re-install. Instead, uninstall, make any needed changes, and re-install to avoid conflicts. &lt;br /&gt;
&lt;br /&gt;
 sudo ./UninstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
= Command Center Update =&lt;br /&gt;
&lt;br /&gt;
== Get latest scripts ==&lt;br /&gt;
Make sure to make a copy of the &#039;&#039;&#039;install.conf&#039;&#039;&#039; file used previously in case it&#039;s overwritten by the git pull / git clone below.&lt;br /&gt;
&lt;br /&gt;
Make sure to update the installation and update scripts and the install.conf file from the main branch of this public repository:&lt;br /&gt;
* https://github.com/Lingoport/CommandCenterConfig&lt;br /&gt;
&lt;br /&gt;
Note: You may need to &amp;lt;code&amp;gt;chmod -x&amp;lt;/code&amp;gt; the scripts under DockerScripts before git pull.&lt;br /&gt;
&lt;br /&gt;
== Backup the database ==&lt;br /&gt;
You don&#039;t have to backup the current version of the database before proceeding to the update to the new version of the system, because the Update script will backup your current database automatically before updating. If you want to do the backup manually, you can use the BackupCommandCenterDatabase.sh script&lt;br /&gt;
&lt;br /&gt;
     chmod +x *.sh&lt;br /&gt;
     sudo ./BackupCommandCenterDatabase.sh&lt;br /&gt;
&lt;br /&gt;
The database backup sql file will be under $home_directory/commandcenter/backup folder, named commandcenter_backup_$current_date.sql&lt;br /&gt;
&lt;br /&gt;
To backup the database periodically, schedule to run &amp;lt;code&amp;gt;BackupCommandCenterDatabase.sh&amp;lt;/code&amp;gt;, for instance with cron services.&lt;br /&gt;
&lt;br /&gt;
=== Note: Restoring the database ===&lt;br /&gt;
&lt;br /&gt;
If later, at some point, the database needs to be restored, the following shows how to do so:&lt;br /&gt;
&lt;br /&gt;
     chmod +x *.sh&lt;br /&gt;
     sudo ./RestoreCommandCenterDatabase.sh YYYY-MM-DD_HHMMSS&lt;br /&gt;
&lt;br /&gt;
Check your database backup sql file under &#039;&#039;&#039;$home_directory/commandcenter/backup&#039;&#039;&#039; folder, they are named &#039;&#039;&#039;commandcenter_backup_$current_date.s&#039;&#039;&#039;ql, for example, if you backup the database on 2023 September 20th, you will see a commandcenter_backup_2023-09-20.sql file, and you can use below command to restore it&lt;br /&gt;
&lt;br /&gt;
     sudo ./RestoreCommandCenterDatabase.sh 2023-09-20_482027&lt;br /&gt;
&lt;br /&gt;
== Return to the previous version ==&lt;br /&gt;
&lt;br /&gt;
1. Stop the current active Command Center container&lt;br /&gt;
&lt;br /&gt;
You can use &amp;quot;docker ps&amp;quot; to see all active containers, and use &amp;quot;docker stop CONTAINER ID&amp;quot; to stop your current Command Center container&lt;br /&gt;
&lt;br /&gt;
2. Restart your previous Command Center server version&lt;br /&gt;
&lt;br /&gt;
You can use &amp;quot;docker ps -a&amp;quot; to see all exited containers, and use &amp;quot;docker start CONTAINER ID&amp;quot; to restart your previous version Command Center container&lt;br /&gt;
&lt;br /&gt;
3. Restore the database to match your previous Command Center server version&lt;br /&gt;
&lt;br /&gt;
     sudo ./RestoreCommandCenterDatabase.sh YYYY-MM-DD_HHMMSS&lt;br /&gt;
&lt;br /&gt;
==Edit install.conf ==&lt;br /&gt;
&lt;br /&gt;
Change the &#039;&#039;version number&#039;&#039; in the install.conf to get the Command Center image update version.&lt;br /&gt;
&lt;br /&gt;
  command_center_image_version=&amp;lt;new version number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See full [[Command_Center_Installation#Configuration | Configuration ]] above.&lt;br /&gt;
&lt;br /&gt;
=== Moving from a non SSO to an SSO configuration ===&lt;br /&gt;
&lt;br /&gt;
If you need to update your Command Center from non SSO version to SSO version, you need to have samlpath set up in install.conf file, and idp.xml, sp.xml, saml_configuration.conf and saml-keystore.jks file must be in this directory&lt;br /&gt;
&lt;br /&gt;
  # Provide your saml directory, idp.xml, sp.xml, saml_configuration.conf and saml-keystore.jks file must be in this directory&lt;br /&gt;
  samlpath=&lt;br /&gt;
&lt;br /&gt;
See: [[Command Center SSO Installation]]&lt;br /&gt;
&lt;br /&gt;
==Run UpdateCommandCenter.sh==&lt;br /&gt;
&lt;br /&gt;
     chmod +x UpdateCommandCenter.sh&lt;br /&gt;
     sudo ./UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
If you are using SSO version installer, run UpdateSSOCommandCenter.sh instead of UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
If you are updating CommandCenter from non SSO version to SSO version, only run SwitchToSSOCommandCenter.sh &lt;br /&gt;
&lt;br /&gt;
If you are updating CommandCenter from SSO version to non-SSO version, only run SwitchToNonSSOCommandCenter.sh &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
The database backup sql file is in $home_directory/commandcenter/ folder, named commandcenter_backup_$current_date.sql&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
* From Command Center, as an administrator, go to settings and click &#039;Restart&#039;&lt;br /&gt;
* From the VM, use docker commands to stop or start Command Center. For example:&lt;br /&gt;
  &lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    sudo docker stop &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    &lt;br /&gt;
    sudo docker container ls -a | grep command&lt;br /&gt;
    sudo docker start &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
  sudo ./UninstallCommandCenter.sh&lt;br /&gt;
  Uninstalling the Command Center Servers ...&lt;br /&gt;
&lt;br /&gt;
  sudo docker ps&lt;br /&gt;
  CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES&lt;br /&gt;
&lt;br /&gt;
= FAQ and Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
== Make sure the Server URL is reachable ==&lt;br /&gt;
Navigate to the server URL set up in &amp;lt;code&amp;gt;install.conf&amp;lt;/code&amp;gt;: is the login screen available?&lt;br /&gt;
&lt;br /&gt;
If it is not, first check that the docker container is up and running. Make sure both &amp;lt;code&amp;gt;lingoport/command-center&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; are running.&lt;br /&gt;
&lt;br /&gt;
  sudo docker container ls -a &lt;br /&gt;
  CONTAINER ID   IMAGE                         COMMAND                  CREATED      STATUS       PORTS                                       NAMES&lt;br /&gt;
  3d9da7a80e0a   &#039;&#039;&#039;lingoport/command-center&#039;&#039;&#039;:80   &amp;quot;catalina.sh run&amp;quot;        3 days ago   Up 6 hours   0.0.0.0:8081-&amp;gt;8080/tcp, :::8081-&amp;gt;8080/tcp   pedantic_aryabhata&lt;br /&gt;
  683c55907c06   &#039;&#039;&#039;mysql&#039;&#039;&#039;:8.0                     &amp;quot;docker-entrypoint.s…&amp;quot;   3 days ago   Up 6 hours   3306/tcp, 33060/tcp                         quizzical_newton&lt;br /&gt;
&lt;br /&gt;
Check with IT that the DNS for that system is correct.&lt;br /&gt;
&lt;br /&gt;
Check with IT that the firewall allows for reaching the URL from your system.&lt;br /&gt;
&lt;br /&gt;
Ask IT to check the https and the server URL / DNS.&lt;br /&gt;
&lt;br /&gt;
== To check files on disk ==&lt;br /&gt;
To troubleshoot, it may be necessary to check files handled by Docker, such as looking for reports under Lingoport_Data. In that case, first use the Docker PS command to get the container ID of the Command Center application.&lt;br /&gt;
&lt;br /&gt;
  sudo docker container ls -a &lt;br /&gt;
  CONTAINER ID   IMAGE                         COMMAND                  CREATED      STATUS       PORTS                                       NAMES&lt;br /&gt;
  &#039;&#039;&#039;3d9da7a80e0a&#039;&#039;&#039;   &#039;&#039;&#039;lingoport/command-center&#039;&#039;&#039;:80   &amp;quot;catalina.sh run&amp;quot;        3 days ago   Up 6 hours   0.0.0.0:8081-&amp;gt;8080/tcp, :::8081-&amp;gt;8080/tcp   pedantic_aryabhata&lt;br /&gt;
  &lt;br /&gt;
With the container ID, execute the following command to run bash with access to those files:&lt;br /&gt;
&lt;br /&gt;
  sudo docker exec -it &#039;&#039;&#039;3d9da7a80e0a&#039;&#039;&#039; bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to backup and restore a system ==&lt;br /&gt;
&lt;br /&gt;
If you have a system that you want to install a new version of Command Center, but keep the current configuration, here are the steps to do that. &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Backup the Command Center databases&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   sudo ./BackupCommandCenterDatabase.sh &lt;br /&gt;
&lt;br /&gt;
This will create two files &amp;lt;code&amp;gt;&amp;lt;home&amp;gt;/commandcenter/backup/commandcenter_backup_YYYY-MM-DD_HHMMSS.sql&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;home&amp;gt;/commandcenter/backup/LRM_backup_YYYY-MM-DD_HHMMSS.sql&amp;lt;/code&amp;gt; Where YYYY-MM-DD is the current date.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Stop the currently running Command Center container and its associated MySQL container&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   sudo docker ps&lt;br /&gt;
   sudo docker stop &amp;lt;Command Center Container ID&amp;gt; &amp;lt;MySQL Container ID&amp;gt;&lt;br /&gt;
   sudo docker ps&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Modify the install.conf file for the correct version of Command Center to install&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Install Command Center&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
If there is an error about the container in use, remove the container that is identified and attempt the install again.  &lt;br /&gt;
&lt;br /&gt;
   sudo docker rm &amp;lt;container&amp;gt;&lt;br /&gt;
   sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Verify that Command Center comes up in the browser.  Login with the CCAdmin user.  There should be no projects or configuration set up&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Restore from the database&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
   sudo ./RestoreCommandCenterDatabase.sh YYYY-MM-DD_HHMMSS&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Verify that Command Center is populated with the correct information&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Command Center is now ready to be used. Proceed to the URL configured in the installation and follow the [[Command_Center_User_Guide | User&#039;s Guide&#039;s]] steps.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Command_Center_Release_Notes&amp;diff=98849</id>
		<title>Command Center Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Command_Center_Release_Notes&amp;diff=98849"/>
		<updated>2024-09-24T17:36:55Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Improvements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For supported versions &#039;&#039;&#039;details&#039;&#039;&#039;, please see:&lt;br /&gt;
[[Lingoport_Suite_Installation#Supported_Versions]]&lt;br /&gt;
&lt;br /&gt;
= Supported Versions =&lt;br /&gt;
&lt;br /&gt;
== Command Center 2.2.z Upcoming (September 2024) ==&lt;br /&gt;
=== TMS Integrations ===&lt;br /&gt;
* [https://www.smartling.com/ Smartling ] Integration using the Smartling API&lt;br /&gt;
&lt;br /&gt;
=== New Features ===&lt;br /&gt;
==== Context in String Manager ====&lt;br /&gt;
To make user of Context in String Manager, an InContext server must be set in a TMS configuration. See how to capture context here: [[About_InContext_Translation |Incontext Server]].&lt;br /&gt;
* Web application context accessible from String Manager &lt;br /&gt;
* Filter strings with or without context in String Manager&lt;br /&gt;
&lt;br /&gt;
==== Schedule Translations ====&lt;br /&gt;
* [[Optional_Localyzer_Settings#Schedule_translations |Schedule]] sending files to be translated in Localyzer project advanced settings&lt;br /&gt;
&lt;br /&gt;
=== Improvements ===&lt;br /&gt;
* Added Globalyzer Issue Density to Project Status API Output &lt;br /&gt;
* Added commit author email and name in Git Data Source configuration&lt;br /&gt;
* Map between unique file names (starting in LID) and repository file names in log files&lt;br /&gt;
* Find Localyzer project based on target locales&lt;br /&gt;
* Improved TFS data source support&lt;br /&gt;
* Better definition of Command Center developer v. translator roles&lt;br /&gt;
* [[Command_Center_API_Reference | Command Center API Reference]]: added list users by role and add users to a team&lt;br /&gt;
* When translated files failed to be pushed to the repo (protected branch, no write privilege), click &#039;Check import&#039; after the repo has been fixed to import files previously translated&lt;br /&gt;
&lt;br /&gt;
== Command Center 2.1.24 Release Notes (July 2024) ==&lt;br /&gt;
=== TMS Integrations ===&lt;br /&gt;
* [https://www.trados.com/product/enterprise/  RWS Trados Enterprise ] Integration Improvements using the Trados Enterprise API&lt;br /&gt;
* [https://translated.com/welcome  Translated ] Integration as a new TMS&lt;br /&gt;
* Update the XTM token for one, many, or all XTM configurations&lt;br /&gt;
* Local Vendor TMS, where prep kits and translated files are pushed on the VM&#039;s File System, adding flexibility to testing or workarounds&lt;br /&gt;
&lt;br /&gt;
=== UI/UX Improvements ===&lt;br /&gt;
* UI Performance Improvement: Project Page,  String Manager, etc.&lt;br /&gt;
* UI Improvements, such as labels for icons, layout, sorting, etc.&lt;br /&gt;
* Improved ChatGPT logs and icons for Globalyzer issues&lt;br /&gt;
* Globalyzer Issues filtering by Rule Set&lt;br /&gt;
* Filtering and chips improvement: better filtering layout and &amp;quot;and&amp;quot; and &amp;quot;or&amp;quot; between chips&lt;br /&gt;
* Easier linking from items on one page to other items on another&lt;br /&gt;
* Ability to add or replace the locales for one project from another project&#039;s locales&lt;br /&gt;
* Deletion of Issues Comments&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
* Post-Import Processing: A new system file type that allows for processing once the translated files are imported&lt;br /&gt;
* Advanced Settings option to keep the prep kit tag in the translated files, for traceability&lt;br /&gt;
&lt;br /&gt;
== Command Center 2.0.13 Release Notes (April 2024) ==&lt;br /&gt;
=== Overall performance improvements ===&lt;br /&gt;
* Localyzer analysis performance improvements&lt;br /&gt;
* Issue search/filtering performance improvements&lt;br /&gt;
* Project page searching, filtering, sorting performance improvements&lt;br /&gt;
&lt;br /&gt;
=== Introducing &#039;&#039;&#039;Localyzer String Manager&#039;&#039;&#039;! ===&lt;br /&gt;
  [[File:String Manager Video.jpg|200px|link=https://www.youtube.com/watch?v=lO1THJAhXSc&amp;amp;ab_channel=Lingoport]]&lt;br /&gt;
  Introduction video&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Show each individual string&#039;&#039;&#039; coming from the source resource files (resx, json, properties, etc.)&lt;br /&gt;
* Easy &#039;&#039;&#039;navigation to the resource&#039;&#039;&#039; in the repository, for those with access privileges, such as developers&lt;br /&gt;
* &#039;&#039;&#039;Filter&#039;&#039;&#039; based on those which are &lt;br /&gt;
** strings &#039;&#039;&#039;to be sent&#039;&#039;&#039;: check the content before it&#039;s sent to translation, verify grammar, spelling as desired&lt;br /&gt;
** strings &#039;&#039;&#039;send to translation&#039;&#039;&#039;, not yet returned&lt;br /&gt;
** &#039;&#039;&#039;fully translated&#039;&#039;&#039; strings&lt;br /&gt;
* Mark strings:&lt;br /&gt;
** Not reviewed&lt;br /&gt;
** To be reviewed&lt;br /&gt;
** Reviewed&lt;br /&gt;
* Filter by the review state (see above)&lt;br /&gt;
* Sort by filename, strings, keys, time created&lt;br /&gt;
* Infinite scrolling: when thousands of strings are identified, keeps loading those strings as the user scrolls down&lt;br /&gt;
* Automatic refresh: as new analysis are carried out, the string manager will update automatically for the changes&lt;br /&gt;
* Clean up and restart from scratch&lt;br /&gt;
[[ Individual_Project_Tasks#String_Manager | String Manager ]]&lt;br /&gt;
&lt;br /&gt;
=== Updated Projects Page ===&lt;br /&gt;
* Faster project page refresh, deep performance improvement&lt;br /&gt;
* Infinite scrolling&lt;br /&gt;
* Improved filtering&lt;br /&gt;
* Improved sorting, now includes sort by &lt;br /&gt;
** Group name&lt;br /&gt;
** Project name&lt;br /&gt;
** Module name&lt;br /&gt;
** Globalyzer issue density&lt;br /&gt;
** Localyzer percent complete&lt;br /&gt;
** Project status&lt;br /&gt;
** Time since last changed&lt;br /&gt;
&lt;br /&gt;
= Historic Versions =&lt;br /&gt;
&lt;br /&gt;
== Command Center 1.2.8 Release Notes (March 2024) ==&lt;br /&gt;
&lt;br /&gt;
* Complete overhaul of the [[Individual_Project_Tasks#Issues | Issues page]], especially around Globalyzer issues, including:&lt;br /&gt;
** Performance&lt;br /&gt;
** Comments&lt;br /&gt;
** Filtering - New Filter selector; issues by scan; by Status; by Priority&lt;br /&gt;
** Search - On issue text, on code line, on file name, on comments&lt;br /&gt;
** Improved navigation from the Globalyzer page to the issues page&lt;br /&gt;
** Issue detail&lt;br /&gt;
** Status and status change&lt;br /&gt;
** Code lines above and below issue line&lt;br /&gt;
** Migration from EOL Jenkins/Dashboard&lt;br /&gt;
** Display either as priority or as severity&lt;br /&gt;
* Simplified &#039;&#039;&#039;debug scripts execution&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Post import processing&#039;&#039;&#039; ability&lt;br /&gt;
* Improved ChatGPT processing on large number of issues&lt;br /&gt;
* &#039;&#039;&#039;Android pluralization&#039;&#039;&#039; support&lt;br /&gt;
* PO pluralization support&lt;br /&gt;
* &#039;&#039;&#039;Edit&#039;&#039;&#039; a Command Center project configuration while a project is running&lt;br /&gt;
* Allow project &#039;&#039;&#039;validation&#039;&#039;&#039; prior to saving the project configuration&lt;br /&gt;
* &#039;&#039;&#039;Sort the locales&#039;&#039;&#039; alphabetically when editing a project&lt;br /&gt;
* &#039;&#039;&#039;Delete all queued jobs&#039;&#039;&#039; ability&lt;br /&gt;
* Improved session management&lt;br /&gt;
&lt;br /&gt;
== Command Center 1.1.38 Release Notes (February 2024) ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Relaxing ICU message format issues&#039;&#039;&#039;: Instead of blocking issues, ICU message format errors are now Warnings; To see them, either go to the issue list or click on the &#039;Informational Issues&#039; from the Localyzer page in Command Center.&lt;br /&gt;
* &#039;&#039;&#039;Check Send&#039;&#039;&#039;: from the Advanced Settings page, clicking the &#039;Check Send&#039; button will check any prep kit in a halted state and try to resend them to the TMS. For instance, if the token for a TMS expired as translations were sent, and the token has been replaced, click &#039;Check send&#039; to re-submit to the TMS. Other case when translation did not make it to the TMS are for example network glitches or changes in the TMS. &lt;br /&gt;
* &#039;&#039;&#039;Reset Project&#039;&#039;&#039;: ability to clean up any unwanted outstanding kits or other items in the on-boarding and restart sending translation using the latest Prep Kit #. Useful when some locales have been dropped from old outstanding kits still in translation for instance.&lt;br /&gt;
* &#039;&#039;&#039;Scheduling WorldServer import&#039;&#039;&#039;: Fixed an issue on the scheduler for WorldServer&lt;br /&gt;
* &#039;&#039;&#039;TMS/MT Connection Renaming&#039;&#039;&#039;: ability to rename a connection and reflect the change automatically in all the projects using that connection&lt;br /&gt;
* &#039;&#039;&#039;Indicate the last SHA for system files&#039;&#039;&#039; so it makes it clear which version of the system files are on Command Center&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Command Center 1.1.35  Release Notes (January 2024)==&lt;br /&gt;
*  &#039;&#039;&#039;[https://www.youtube.com/watch?v=DiuQLUla2bA InContext Translation Support]&#039;&#039;&#039; When creating a TMS connection, configure also a connection to a Lingoport InContext Server. See [[ About InContext Translation ]]. Then when on-boarding a project, if a TMS connection with InContext Translation support is used, configure the Instrumentation locale. That will allow the context capture of the running application in that locale. &lt;br /&gt;
* &#039;&#039;&#039;Analysis Performance Improvements&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Pseudo-localization, trackback, instrumentation Performance Improvements&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Start Tracking&#039;&#039;&#039;: After on-boarding, when all is copacetic, click the &#039;Create project baseline&#039; on the left panel to start tracking any changes to the resource files.&lt;br /&gt;
* &#039;&#039;&#039;Troubleshooting File System&#039;&#039;&#039;: A new file system, independent for projects, can be used to check your system as one wants. See https://github.com/Lingoport/CommandCenterConfig/blob/main/debug/list_kits.sh as a sample to get started&lt;br /&gt;
* &#039;&#039;&#039;System Environment Variables&#039;&#039;&#039;: For any scripts, such as troubleshooting, transforms, etc., use System Environment Variables&lt;br /&gt;
* &#039;&#039;&#039;DITA Sample Transform&#039;&#039;&#039;: see https://github.com/Lingoport/CommandCenterConfig/tree/main/transforms/dita to help with your DITA on-boarding&lt;br /&gt;
* &#039;&#039;&#039;Advanced Localyzer Settings&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Fixed an issue around casing between the repository locales and the TMS or MT locale.&lt;br /&gt;
&lt;br /&gt;
==Command Center 1.1.32  Release Notes (December 2023)==&lt;br /&gt;
* &#039;&#039;&#039;[[ AWS S3 Data Source Credential ]]&#039;&#039;&#039; Support. See also [[ Git to AWS S3 System ]]&lt;br /&gt;
* &#039;&#039;&#039;[[ Gerrit Data Source Credential ]]&#039;&#039;&#039; enhancement for slashes in project URL&lt;br /&gt;
* &#039;&#039;&#039;Trados Enterprise&#039;&#039;&#039; TMS support&lt;br /&gt;
* &#039;&#039;&#039;[[ LocalyzerQA ]]&#039;&#039;&#039; support in Command Center, using tags to link a LocalyzerQA application and Command Center projects&lt;br /&gt;
* &#039;&#039;&#039;Changing TMS&#039;&#039;&#039; for a project keeps the on-boarding as close as possible, to make switching TMSs as simple as possible&lt;br /&gt;
* &#039;&#039;&#039;[[ API_Reference#Pseudo-localize_a_Command_Center_Project | Pseudo-Localization Remote Calling ]]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;New Version Indicator&#039;&#039;&#039;: Command Center indicates when a new version is available. &lt;br /&gt;
* Better logging on project configuration changes&lt;br /&gt;
* Enhancement in TMS management - internal file configuration.&lt;br /&gt;
* Enhancement in Queue management - interaction between queue and maintenance mode.&lt;br /&gt;
* Enhancement to Globalyzer and Localyzer handling of issues&lt;br /&gt;
* Fix issue on Toggle UI elements&lt;br /&gt;
* Fix issue in Saving projects&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Command Center 1.1.11  Release Notes (October 2023)==&lt;br /&gt;
* &#039;&#039;&#039;XTM&#039;&#039;&#039; TMS integration support&lt;br /&gt;
* &#039;&#039;&#039;WorldServer&#039;&#039;&#039; TMS integration support&lt;br /&gt;
* &#039;&#039;&#039;Custom&#039;&#039;&#039; Data Source&lt;br /&gt;
* [[ Gerrit Data Source Credential ]]&lt;br /&gt;
* [[ GitLab_Pull_Requests_and_Commit_Analysis | GitLab Merge Request ]]&lt;br /&gt;
* Alpha &#039;&#039;&#039;ChatGPT Translation Support&#039;&#039;&#039;&lt;br /&gt;
* Alpha &#039;&#039;&#039;ChatGPT Globalyzer Support&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In addition to the Underlying Localyzer engine features:&lt;br /&gt;
* [[ Localyzer_Release_Notes#Localyzer_9.2_.28Korea.29_release_-_Fall_2023 |  Localyzer 9.2 Korea ]]&lt;br /&gt;
* [[ Localyzer_Release_Notes#Localyzer_9.1_.28Joetsu.29_release_-_Feb_2023 |  Localyzer 9.1 Joetsu ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Command Center 1.0.154  Release Notes (September 2023)==&lt;br /&gt;
The Korea/1.0.154 release is the initial release of Command Center. Command Center&#039;s application supersedes the Lingoport Suite&#039;s Jenkins and Dashboard, and simplifies a number of tasks previously done via either, including &lt;br /&gt;
* Administration of the system&lt;br /&gt;
* Configuration and on-boarding of individual projects&lt;br /&gt;
* Search on project, search on issues&lt;br /&gt;
* Filtering on projects, filtering on issues&lt;br /&gt;
* Sort on projects, sort on issues&lt;br /&gt;
* Improved reporting and logging&lt;br /&gt;
* Improved performance&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Below are some of the major features in Command Center:&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Support for SAML/SSO&amp;lt;/b&amp;gt;:&lt;br /&gt;
The Globalyzer Server can now be configured with SAML/SSO, in addition to LDAP.&lt;br /&gt;
This allows seamless integration with third party identity providers.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Support for Globalyzer 6.8.0&amp;lt;/b&amp;gt;:&lt;br /&gt;
Command Center allows for fast and easy Globalyzer project creation. &lt;br /&gt;
For information on Globalyzer, please see: [[About_Globalyzer | Globalyzer]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Support for Localyzer 9.2.0&amp;lt;/b&amp;gt;:&lt;br /&gt;
Command Center allows for fast and easy Localyzer project creation. &lt;br /&gt;
For information on Localyzer, please see: [[About_Localyzer | Localyzer]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Figma Integration&amp;lt;/b&amp;gt;:&lt;br /&gt;
Use Command Center to translate Figma designs.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Project Tagging&amp;lt;/b&amp;gt;:&lt;br /&gt;
Projects can be organized and filtered using tags.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;API calls&amp;lt;/b&amp;gt;:&lt;br /&gt;
Initial API calls to list projects, duplicate a project, or get the status of a project in Command Center.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Execution Queue&amp;lt;/b&amp;gt;:&lt;br /&gt;
See what is in the execution queue, delete from the queue, interrupt a running job.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Improved Issue Management&amp;lt;/b&amp;gt;:&lt;br /&gt;
The user interface for issues has been entirely redesigned.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Space and System Requirements Improvements&amp;lt;/b&amp;gt;:&lt;br /&gt;
In Command Center, no files are pushed to the database as was the case with Dashboard. &amp;lt;/br&amp;gt;&lt;br /&gt;
A repository/branch is cloned only once in a workspace, even if many projects are created off of that workspace.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Access to Code&amp;lt;/b&amp;gt;:&lt;br /&gt;
Source code and resource files are only accessible via the repository, so that only those allowed repository users can see the code. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=CVE-Responses&amp;diff=98612</id>
		<title>CVE-Responses</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=CVE-Responses&amp;diff=98612"/>
		<updated>2024-04-03T18:29:22Z</updated>

		<summary type="html">&lt;p&gt;Masnes: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= XZ Utils - CVE-2024-3094 = &lt;br /&gt;
&lt;br /&gt;
[https://www.cisecurity.org/advisory/a-vulnerability-in-xz-utils-could-allow-for-remote-code-execution_2024-033 Center for Information Security Overview]&lt;br /&gt;
[https://nvd.nist.gov/vuln/detail/CVE-2024-3094 NIST Overview]&lt;br /&gt;
&lt;br /&gt;
Lingoport has reviewed the XZ library version on all Lingoport-hosted servers and all docker containers running in our cloud environment (AWS).&lt;br /&gt;
&lt;br /&gt;
For all of the above, we have confirmed that the xz library version does not match the known vulnerable versions (5.6.0, 5.6.1).&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=CVE-Responses&amp;diff=98611</id>
		<title>CVE-Responses</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=CVE-Responses&amp;diff=98611"/>
		<updated>2024-04-02T23:38:02Z</updated>

		<summary type="html">&lt;p&gt;Masnes: Created page with &amp;quot;= XZ Utils - CVE-2024-3094 =   [https://www.cisecurity.org/advisory/a-vulnerability-in-xz-utils-could-allow-for-remote-code-execution_2024-033 Center for Information Security...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= XZ Utils - CVE-2024-3094 = &lt;br /&gt;
&lt;br /&gt;
[https://www.cisecurity.org/advisory/a-vulnerability-in-xz-utils-could-allow-for-remote-code-execution_2024-033 Center for Information Security Overview]&lt;br /&gt;
[https://nvd.nist.gov/vuln/detail/CVE-2024-3094 NIST Overview]&lt;br /&gt;
&lt;br /&gt;
Lingoport has reviewed the XZ library version on all Lingoport-hosted servers and all docker containers running in our cloud environment (AWS).&lt;br /&gt;
&lt;br /&gt;
For all of the above, we have confirmed that the xz library version, if present, does not match the known vulnerable versions (5.6.0, 5.6.1).&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=InContext_Server_Installation&amp;diff=98445</id>
		<title>InContext Server Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=InContext_Server_Installation&amp;diff=98445"/>
		<updated>2024-03-01T22:03:18Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Installation Process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Checking InContext Server Installation =&lt;br /&gt;
The typical G11n system can be installed using either the &#039;&#039;&#039;Lingoport Stack Installer&#039;&#039;&#039; or a Docker-based method. Depending on the installation method used, the process to check if the InContext Server is installed will differ.&lt;br /&gt;
&lt;br /&gt;
== Checking Installation for Systems Installed with Lingoport Stack Installer ==&lt;br /&gt;
If your system was installed using the Lingoport Stack Installer, check the installation with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$sudo systemctl status incontext-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Output should indicate if the service is active. If the service is not found, it needs to be installed manually.&lt;br /&gt;
&lt;br /&gt;
== Checking Installation for Docker-based Systems ==&lt;br /&gt;
For systems intending to use the Docker-based installation, check if the Docker container for the InContext Server is running with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo docker ps | grep incontext-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If there&#039;s no output, the container is not running, indicating the InContext Server needs to be set up or there is an issue that needs to be addressed.&lt;br /&gt;
Users in the &#039;docker&#039; group may optionally omit use of sudo.&lt;br /&gt;
&lt;br /&gt;
= Docker-based Installation of InContext Server =&lt;br /&gt;
For a new, simplified deployment process, the InContext Server can be installed using Docker. This section outlines the Docker-based installation process.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* Docker installed on your system&lt;br /&gt;
* Configuration details prepared in `install.conf`&lt;br /&gt;
&lt;br /&gt;
== Installation Process ==&lt;br /&gt;
# Modify the `install.conf` file with your specific configurations, including Docker Hub credentials (account with read access to the InContext Image will be shared by Lingoport), MySQL root password (to be created with an associated MySQL 8 container), and desired server port.&lt;br /&gt;
# Execute the `InstallIncontext.sh` script with sudo privileges. This script will:&lt;br /&gt;
#* Create necessary Docker network and volumes&lt;br /&gt;
#* Pull the Lingoport InContext Server image from Docker Hub&lt;br /&gt;
#* Start the InContext Server and MySQL containers with appropriate configurations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Verify the installation by checking the Docker container status and accessing the InContext Server through the web browser.&lt;br /&gt;
&lt;br /&gt;
== Script Execution ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ./InstallIncontext.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may be prompted if there is missing info in the install.conf. Ensure you follow any prompts provided by the script for a successful installation.&lt;br /&gt;
&lt;br /&gt;
= Manual Installation =&lt;br /&gt;
For systems not utilizing Docker or needing a specific setup, manual installation is also available.&lt;br /&gt;
&lt;br /&gt;
== InContext Server Installation Requirements ==&lt;br /&gt;
* Java 11&lt;br /&gt;
* MySQL 8&lt;br /&gt;
* Tomcat 9.0.x&lt;br /&gt;
&lt;br /&gt;
== Installation Steps - Docker ==&lt;br /&gt;
1. Download and unzip the `IncontextServer-&amp;lt;version&amp;gt;.zip` file.&lt;br /&gt;
2. Modify `install.conf` with necessary details.&lt;br /&gt;
3. Execute `./install.sh` with sudo privileges.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation Steps - Non-Docker ==&lt;br /&gt;
&lt;br /&gt;
1.      Download and unzip the &#039;&#039;&#039;IncontextServer-&amp;lt;version&amp;gt;.zip&#039;&#039;&#039; file from our SFTP site. &lt;br /&gt;
&lt;br /&gt;
2.      Change directory:  &amp;lt;code&amp;gt;&#039;&#039;&#039;cd incontext-server&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3.      Modify &amp;lt;b&amp;gt;install.conf&amp;lt;/b&amp;gt; to set the values required by the install. Any information left blank will be prompted by the install script.&lt;br /&gt;
*&amp;lt;code&amp;gt;MYSQL_ROOT_PASS&amp;lt;/code&amp;gt; - this is the password that was used or created by the Stack Installer or Stack Updater. &lt;br /&gt;
*&amp;lt;code&amp;gt;INCONTEXT_MYSQL_USER / INCONTEXT_MYSQL_PASS&amp;lt;/code&amp;gt; - this is a new MySQL username and password.&lt;br /&gt;
*&amp;lt;code&amp;gt;INSTALL_TOMCAT_HERE=&#039;/usr/local/tomcat&#039;&amp;lt;/code&amp;gt; - Unless there is reason to change the location, leave it at the default. &lt;br /&gt;
4.      Run the install script (note you must have sudo privileges):  &amp;lt;code&amp;gt;./&amp;lt;b&amp;gt;install.sh&amp;lt;/b&amp;gt;&amp;lt;/code&amp;gt;. If it is successful, one should see:&lt;br /&gt;
&lt;br /&gt;
 Incontext Server successfully installed.&lt;br /&gt;
&lt;br /&gt;
== InContext Server Files ==&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
There are three files that comprise the InContext Server.  The Lingoport InContext Server automated installation process will put these files in the appropriate location.&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
* incontext-server.war&lt;br /&gt;
* incontext-server.sh	&lt;br /&gt;
* IncontextServerConfig.groovy&lt;br /&gt;
 &lt;br /&gt;
 		 	&lt;br /&gt;
== Installation Steps - Non-Docker ==&lt;br /&gt;
−	&lt;br /&gt;
The &amp;lt;b&amp;gt;incontext-server.war&amp;lt;/b&amp;gt; is the server itself and must be placed under the &amp;lt;b&amp;gt;tomcat&amp;lt;/b&amp;gt;/webapps directory. &amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
−	&lt;br /&gt;
The &amp;lt;b&amp;gt;incontext-server.sh&amp;lt;/b&amp;gt; file is a script for starting/stopping the InContext Server and must be configured and placed in the &amp;lt;b&amp;gt;tomcat&amp;lt;/b&amp;gt; directory. &amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
−	&lt;br /&gt;
The &amp;lt;b&amp;gt;IncontextServerConfig.groovy&amp;lt;/b&amp;gt; file is the configuration file for the InContext Server and must be configured and placed in the &amp;lt;b&amp;gt;tomcat&amp;lt;/b&amp;gt; directory.&lt;br /&gt;
 &lt;br /&gt;
−	&lt;br /&gt;
&lt;br /&gt;
= Running the InContext Server - Non-Docker =&lt;br /&gt;
&lt;br /&gt;
To start the InContext Server:&lt;br /&gt;
 $sudo systemctl start incontext-server&lt;br /&gt;
&lt;br /&gt;
Then browse to: &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://yourserverurl:8081/incontext-server&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:InContextServerLogin.jpg |600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To stop the InContext Server:&lt;br /&gt;
 $sudo systemctl stop incontext-server&lt;br /&gt;
&lt;br /&gt;
To check the status of the InContext Server:&lt;br /&gt;
 $sudo systemctl status incontext-server&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Whether installed via Docker or manually, the next steps involve configuring and using the InContext Server for your localization needs. For more details on post-installation setup and usage, refer to the InContext Server Users Guide.&lt;br /&gt;
&lt;br /&gt;
[[InContext_Capture_Installation | InContext Capture Installation]] provides additional resources for setting up InContext for Translation.&lt;br /&gt;
&lt;br /&gt;
For information on how to proceed after installation, please see the:&lt;br /&gt;
[[InContext Server Users Guide]]&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=InContext_Server_Installation&amp;diff=98444</id>
		<title>InContext Server Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=InContext_Server_Installation&amp;diff=98444"/>
		<updated>2024-03-01T21:59:42Z</updated>

		<summary type="html">&lt;p&gt;Masnes: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Checking InContext Server Installation =&lt;br /&gt;
The typical G11n system can be installed using either the &#039;&#039;&#039;Lingoport Stack Installer&#039;&#039;&#039; or a Docker-based method. Depending on the installation method used, the process to check if the InContext Server is installed will differ.&lt;br /&gt;
&lt;br /&gt;
== Checking Installation for Systems Installed with Lingoport Stack Installer ==&lt;br /&gt;
If your system was installed using the Lingoport Stack Installer, check the installation with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$sudo systemctl status incontext-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Output should indicate if the service is active. If the service is not found, it needs to be installed manually.&lt;br /&gt;
&lt;br /&gt;
== Checking Installation for Docker-based Systems ==&lt;br /&gt;
For systems intending to use the Docker-based installation, check if the Docker container for the InContext Server is running with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo docker ps | grep incontext-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If there&#039;s no output, the container is not running, indicating the InContext Server needs to be set up or there is an issue that needs to be addressed.&lt;br /&gt;
Users in the &#039;docker&#039; group may optionally omit use of sudo.&lt;br /&gt;
&lt;br /&gt;
= Docker-based Installation of InContext Server =&lt;br /&gt;
For a new, simplified deployment process, the InContext Server can be installed using Docker. This section outlines the Docker-based installation process.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* Docker installed on your system&lt;br /&gt;
* Configuration details prepared in `install.conf`&lt;br /&gt;
&lt;br /&gt;
== Installation Process ==&lt;br /&gt;
# Modify the `install.conf` file with your specific configurations, including Docker Hub credentials (account with read access to the InContext Image will be shared by Lingoport), MySQL root password, and desired server port.&lt;br /&gt;
# Execute the `InstallIncontext.sh` script with sudo privileges. This script will:&lt;br /&gt;
#* Create necessary Docker network and volumes&lt;br /&gt;
#* Pull the Lingoport InContext Server image from Docker Hub&lt;br /&gt;
#* Start the InContext Server and MySQL containers with appropriate configurations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Verify the installation by checking the Docker container status and accessing the InContext Server through the web browser.&lt;br /&gt;
&lt;br /&gt;
== Script Execution ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ./InstallIncontext.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may be prompted if there is missing info in the install.conf. Ensure you follow any prompts provided by the script for a successful installation.&lt;br /&gt;
&lt;br /&gt;
= Manual Installation =&lt;br /&gt;
For systems not utilizing Docker or needing a specific setup, manual installation is also available.&lt;br /&gt;
&lt;br /&gt;
== InContext Server Installation Requirements ==&lt;br /&gt;
* Java 11&lt;br /&gt;
* MySQL 8&lt;br /&gt;
* Tomcat 9.0.x&lt;br /&gt;
&lt;br /&gt;
== Installation Steps - Docker ==&lt;br /&gt;
1. Download and unzip the `IncontextServer-&amp;lt;version&amp;gt;.zip` file.&lt;br /&gt;
2. Modify `install.conf` with necessary details.&lt;br /&gt;
3. Execute `./install.sh` with sudo privileges.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation Steps - Non-Docker ==&lt;br /&gt;
&lt;br /&gt;
1.      Download and unzip the &#039;&#039;&#039;IncontextServer-&amp;lt;version&amp;gt;.zip&#039;&#039;&#039; file from our SFTP site. &lt;br /&gt;
&lt;br /&gt;
2.      Change directory:  &amp;lt;code&amp;gt;&#039;&#039;&#039;cd incontext-server&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3.      Modify &amp;lt;b&amp;gt;install.conf&amp;lt;/b&amp;gt; to set the values required by the install. Any information left blank will be prompted by the install script.&lt;br /&gt;
*&amp;lt;code&amp;gt;MYSQL_ROOT_PASS&amp;lt;/code&amp;gt; - this is the password that was used or created by the Stack Installer or Stack Updater. &lt;br /&gt;
*&amp;lt;code&amp;gt;INCONTEXT_MYSQL_USER / INCONTEXT_MYSQL_PASS&amp;lt;/code&amp;gt; - this is a new MySQL username and password.&lt;br /&gt;
*&amp;lt;code&amp;gt;INSTALL_TOMCAT_HERE=&#039;/usr/local/tomcat&#039;&amp;lt;/code&amp;gt; - Unless there is reason to change the location, leave it at the default. &lt;br /&gt;
4.      Run the install script (note you must have sudo privileges):  &amp;lt;code&amp;gt;./&amp;lt;b&amp;gt;install.sh&amp;lt;/b&amp;gt;&amp;lt;/code&amp;gt;. If it is successful, one should see:&lt;br /&gt;
&lt;br /&gt;
 Incontext Server successfully installed.&lt;br /&gt;
&lt;br /&gt;
== InContext Server Files ==&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
There are three files that comprise the InContext Server.  The Lingoport InContext Server automated installation process will put these files in the appropriate location.&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
* incontext-server.war&lt;br /&gt;
* incontext-server.sh	&lt;br /&gt;
* IncontextServerConfig.groovy&lt;br /&gt;
 &lt;br /&gt;
 		 	&lt;br /&gt;
== Installation Steps - Non-Docker ==&lt;br /&gt;
−	&lt;br /&gt;
The &amp;lt;b&amp;gt;incontext-server.war&amp;lt;/b&amp;gt; is the server itself and must be placed under the &amp;lt;b&amp;gt;tomcat&amp;lt;/b&amp;gt;/webapps directory. &amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
−	&lt;br /&gt;
The &amp;lt;b&amp;gt;incontext-server.sh&amp;lt;/b&amp;gt; file is a script for starting/stopping the InContext Server and must be configured and placed in the &amp;lt;b&amp;gt;tomcat&amp;lt;/b&amp;gt; directory. &amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
−	&lt;br /&gt;
The &amp;lt;b&amp;gt;IncontextServerConfig.groovy&amp;lt;/b&amp;gt; file is the configuration file for the InContext Server and must be configured and placed in the &amp;lt;b&amp;gt;tomcat&amp;lt;/b&amp;gt; directory.&lt;br /&gt;
 &lt;br /&gt;
−	&lt;br /&gt;
&lt;br /&gt;
= Running the InContext Server - Non-Docker =&lt;br /&gt;
&lt;br /&gt;
To start the InContext Server:&lt;br /&gt;
 $sudo systemctl start incontext-server&lt;br /&gt;
&lt;br /&gt;
Then browse to: &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://yourserverurl:8081/incontext-server&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:InContextServerLogin.jpg |600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To stop the InContext Server:&lt;br /&gt;
 $sudo systemctl stop incontext-server&lt;br /&gt;
&lt;br /&gt;
To check the status of the InContext Server:&lt;br /&gt;
 $sudo systemctl status incontext-server&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Whether installed via Docker or manually, the next steps involve configuring and using the InContext Server for your localization needs. For more details on post-installation setup and usage, refer to the InContext Server Users Guide.&lt;br /&gt;
&lt;br /&gt;
[[InContext_Capture_Installation | InContext Capture Installation]] provides additional resources for setting up InContext for Translation.&lt;br /&gt;
&lt;br /&gt;
For information on how to proceed after installation, please see the:&lt;br /&gt;
[[InContext Server Users Guide]]&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=InContext_Server_Installation&amp;diff=98443</id>
		<title>InContext Server Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=InContext_Server_Installation&amp;diff=98443"/>
		<updated>2024-03-01T21:58:57Z</updated>

		<summary type="html">&lt;p&gt;Masnes: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Checking InContext Server Installation =&lt;br /&gt;
The typical G11n system can be installed using either the &#039;&#039;&#039;Lingoport Stack Installer&#039;&#039;&#039; or a Docker-based method. Depending on the installation method used, the process to check if the InContext Server is installed will differ.&lt;br /&gt;
&lt;br /&gt;
== Checking Installation for Systems Installed with Lingoport Stack Installer ==&lt;br /&gt;
If your system was installed using the Lingoport Stack Installer, check the installation with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$sudo systemctl status incontext-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Output should indicate if the service is active. If the service is not found, it needs to be installed manually.&lt;br /&gt;
&lt;br /&gt;
== Checking Installation for Docker-based Systems ==&lt;br /&gt;
For systems intending to use the Docker-based installation, check if the Docker container for the InContext Server is running with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo docker ps | grep incontext-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If there&#039;s no output, the container is not running, indicating the InContext Server needs to be set up or there is an issue that needs to be addressed.&lt;br /&gt;
Users in the &#039;docker&#039; group may optionally omit use of sudo.&lt;br /&gt;
&lt;br /&gt;
= Docker-based Installation of InContext Server =&lt;br /&gt;
For a new, simplified deployment process, the InContext Server can be installed using Docker. This section outlines the Docker-based installation process.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* Docker installed on your system&lt;br /&gt;
* Configuration details prepared in `install.conf`&lt;br /&gt;
&lt;br /&gt;
== Installation Process ==&lt;br /&gt;
# Modify the `install.conf` file with your specific configurations, including Docker Hub credentials (account with read access to the InContext Image will be shared by Lingoport), MySQL root password, and desired server port.&lt;br /&gt;
# Execute the `InstallIncontext.sh` script with sudo privileges. This script will:&lt;br /&gt;
#* Create necessary Docker network and volumes&lt;br /&gt;
#* Pull the Lingoport InContext Server image from Docker Hub&lt;br /&gt;
#* Start the InContext Server and MySQL containers with appropriate configurations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Verify the installation by checking the Docker container status and accessing the InContext Server through the web browser.&lt;br /&gt;
&lt;br /&gt;
== Script Execution ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ./InstallIncontext.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may be prompted if there is missing info in the install.conf. Ensure you follow any prompts provided by the script for a successful installation.&lt;br /&gt;
&lt;br /&gt;
= Manual Installation =&lt;br /&gt;
For systems not utilizing Docker or needing a specific setup, manual installation is also available.&lt;br /&gt;
&lt;br /&gt;
== InContext Server Installation Requirements ==&lt;br /&gt;
* Java 11&lt;br /&gt;
* MySQL 8&lt;br /&gt;
* Tomcat 9.0.x&lt;br /&gt;
&lt;br /&gt;
== Installation Steps - Docker ==&lt;br /&gt;
1. Download and unzip the `IncontextServer-&amp;lt;version&amp;gt;.zip` file.&lt;br /&gt;
2. Modify `install.conf` with necessary details.&lt;br /&gt;
3. Execute `./install.sh` with sudo privileges.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation Steps - Non-Docker ==&lt;br /&gt;
&lt;br /&gt;
1.      Download and unzip the &#039;&#039;&#039;IncontextServer-&amp;lt;version&amp;gt;.zip&#039;&#039;&#039; file from our SFTP site. &lt;br /&gt;
&lt;br /&gt;
2.      Change directory:  &amp;lt;code&amp;gt;&#039;&#039;&#039;cd incontext-server&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3.      Modify &amp;lt;b&amp;gt;install.conf&amp;lt;/b&amp;gt; to set the values required by the install. Any information left blank will be prompted by the install script.&lt;br /&gt;
*&amp;lt;code&amp;gt;MYSQL_ROOT_PASS&amp;lt;/code&amp;gt; - this is the password that was used or created by the Stack Installer or Stack Updater. &lt;br /&gt;
*&amp;lt;code&amp;gt;INCONTEXT_MYSQL_USER / INCONTEXT_MYSQL_PASS&amp;lt;/code&amp;gt; - this is a new MySQL username and password.&lt;br /&gt;
*&amp;lt;code&amp;gt;INSTALL_TOMCAT_HERE=&#039;/usr/local/tomcat&#039;&amp;lt;/code&amp;gt; - Unless there is reason to change the location, leave it at the default. &lt;br /&gt;
4.      Run the install script (note you must have sudo privileges):  &amp;lt;code&amp;gt;./&amp;lt;b&amp;gt;install.sh&amp;lt;/b&amp;gt;&amp;lt;/code&amp;gt;. If it is successful, one should see:&lt;br /&gt;
&lt;br /&gt;
 Incontext Server successfully installed.&lt;br /&gt;
&lt;br /&gt;
== InContext Server Files ==&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
There are three files that comprise the InContext Server.  The Lingoport InContext Server automated installation process will put these files in the appropriate location.&lt;br /&gt;
 &lt;br /&gt;
	&lt;br /&gt;
* incontext-server.war&lt;br /&gt;
* incontext-server.sh	&lt;br /&gt;
* IncontextServerConfig.groovy&lt;br /&gt;
 &lt;br /&gt;
 		 	&lt;br /&gt;
== Installation Steps - Non-Docker ==&lt;br /&gt;
−	&lt;br /&gt;
The &amp;lt;b&amp;gt;incontext-server.war&amp;lt;/b&amp;gt; is the server itself and must be placed under the &amp;lt;b&amp;gt;tomcat&amp;lt;/b&amp;gt;/webapps directory. &amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
−	&lt;br /&gt;
The &amp;lt;b&amp;gt;incontext-server.sh&amp;lt;/b&amp;gt; file is a script for starting/stopping the InContext Server and must be configured and placed in the &amp;lt;b&amp;gt;tomcat&amp;lt;/b&amp;gt; directory. &amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
−	&lt;br /&gt;
The &amp;lt;b&amp;gt;IncontextServerConfig.groovy&amp;lt;/b&amp;gt; file is the configuration file for the InContext Server and must be configured and placed in the &amp;lt;b&amp;gt;tomcat&amp;lt;/b&amp;gt; directory.&lt;br /&gt;
 &lt;br /&gt;
−	&lt;br /&gt;
&lt;br /&gt;
= Running the InContext Server - Non-Docker =&lt;br /&gt;
&lt;br /&gt;
To start the InContext Server:&lt;br /&gt;
 $sudo systemctl start incontext-server&lt;br /&gt;
&lt;br /&gt;
Then browse to: &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://yourserverurl:8081/incontext-server&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:InContextServerLogin.jpg |600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To stop the InContext Server:&lt;br /&gt;
 $sudo systemctl stop incontext-server&lt;br /&gt;
&lt;br /&gt;
To check the status of the InContext Server:&lt;br /&gt;
 $sudo systemctl status incontext-server&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Whether installed via Docker or manually, the next steps involve configuring and using the InContext Server for your localization needs. For more details on post-installation setup and usage, refer to the InContext Server Users Guide.&lt;br /&gt;
&lt;br /&gt;
[[InContext_Capture_Installation | InContext Capture Installation]] provides additional resources for setting up InContext for Translation.&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
To continue installing InContext for Translation go to: [[InContext_Capture_Installation | InContext Capture Installation]]&lt;br /&gt;
&lt;br /&gt;
For information on how to proceed after installation, please see the:&lt;br /&gt;
[[InContext Server Users Guide]]&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98111</id>
		<title>Globalyzer in IDE</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98111"/>
		<updated>2023-12-15T00:51:41Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Globalyzer Lite for VSCode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Can I use Globalyzer Lite with my standard IDE?==&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite client can be used with Eclipse, Visual Studio and IntelliJ IDEs.&lt;br /&gt;
&lt;br /&gt;
== Using Globalyzer Lite from an Integrated Development Environment ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Lite may be used within many IDEs that support external tools, including Visual Studio, IntelliJ IDEA, and Eclipse. Configuring Lite as an external tool takes some initial setup, but is relatively easy to accomplish. Once configured, Lite may be used through the IDE&#039;s external tool menu with the click of a button. The recommended, documented tools:&lt;br /&gt;
&lt;br /&gt;
# Scan the currently selected file/directory.&lt;br /&gt;
# Scan everything within the parent directory of the currently selected file/directory.&lt;br /&gt;
# Scan the entire project.&lt;br /&gt;
&lt;br /&gt;
Demonstration videos are available for:&lt;br /&gt;
&lt;br /&gt;
* [https://player.vimeo.com/video/137641243 Visual Studio]&lt;br /&gt;
* [https://player.vimeo.com/video/137641242 IntelliJ IDEA]&lt;br /&gt;
* [https://player.vimeo.com/video/137641241 Eclipse]&lt;br /&gt;
&lt;br /&gt;
To configure Lite in the IDE, please see this page: [https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html Lite IDE Usage].&lt;br /&gt;
&lt;br /&gt;
The developer can then use the power of the IDE to refactor the relevant issues or to mark false positives in the code using Globalyzer ignore comments, such as $NON-NLS-L$. For more information, see the Globalyzer Comment Tags in [[ False Positives | False Positives ]] . &lt;br /&gt;
&lt;br /&gt;
Those refactoring and the comment tags are now part of the code: The Continuous Globalization System using the same Lite project definition file will show the same results in the Dashboard.&lt;br /&gt;
&lt;br /&gt;
==How do I install Globalyzer Lite?==&lt;br /&gt;
&lt;br /&gt;
To install the Globalyzer Lite, you first need a Globalyzer account (see [[Globalyzer_Overview_and_General#How_do_I_obtain_a_Globalyzer_account.3F|this FAQ]]). Once you have an account, you log into the Globalyzer Server and at the bottom of your home page there is a link to download Globalyzer Lite.&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite is a standalone Java application. It uses Rule Sets to scan code at the command line. It is used in Jenkins configured for the Continuous G11n System and can be integrated as an external tool in an IDE.  &lt;br /&gt;
&lt;br /&gt;
Please see [https://www.globalyzer.com/gzserver/home/installclient installation] for complete Globalyzer Lite download/installation instructions.&lt;br /&gt;
&lt;br /&gt;
To install:&lt;br /&gt;
&lt;br /&gt;
# Unzip the Globalyzer Lite zip file at a desired location&lt;br /&gt;
# Run either &amp;lt;code&amp;gt;lite-setup.bat&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;lite-setup.sh&amp;lt;/code&amp;gt; depending on your system.&lt;br /&gt;
&lt;br /&gt;
To verify the installation, from a command line at the location that it was installed:&lt;br /&gt;
 java -jar globalyzer-lite.jar -version&lt;br /&gt;
&lt;br /&gt;
or, show the help info:&lt;br /&gt;
 java -jar globalyzer-lite.jar -help&lt;br /&gt;
&lt;br /&gt;
== Sharing Project Definition Files Between IDEs and Build Systems ==&lt;br /&gt;
&lt;br /&gt;
It is common to check in a single project definition file per code repository. However, the desired IDE configuration may sometimes be incompatible with the desired build system configuration.&lt;br /&gt;
&lt;br /&gt;
These incompatibilities are best solved by modifying the project definition file within the build system. The IDE config can then be used as the default.&lt;br /&gt;
&lt;br /&gt;
Here is an example: The desired report type for Globalyzer Lite may be ScanDetailedCSV for developer usage, but will need to be ScanDetailedXML within the build system. The project definition file would then be written out with the &amp;lt;report-type&amp;gt; set to ScanDetailedCSV:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;gzproject&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  &amp;lt;report-type&amp;gt;ScanDetailedCSV&amp;lt;/report-type&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/gzproject&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The build system can then be set to auto-replace &amp;quot;ScanDetailedCSV&amp;quot; with &amp;quot;ScanDetailedXML&amp;quot;. The following Linux command will do so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ sed --in-place &#039;s|ScanDetailedCSV|ScanDetailedXML|&#039; $WORKSPACE/ProjectDefinition.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If desired, the opposite replacement also may be performed at the end of the build.&lt;br /&gt;
&lt;br /&gt;
Finally, here is a bash function to replace the content of any XML field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;replace_xml_token() {&lt;br /&gt;
  token_name=$1&lt;br /&gt;
  new_content=$2&lt;br /&gt;
  sed -ri &amp;quot;s|(&amp;lt;${token_name}&amp;gt;).*(&amp;lt;/${token_name}&amp;gt;)|\1${new_content}\2|g&amp;quot; $WORKSPACE/ProjectDefinition.xml&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It may be used like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ replace_xml_token &amp;quot;report-type&amp;quot; &amp;quot;ScanDetailedXML&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lite IDE Ignore==&lt;br /&gt;
When using Lite in an IDE (see https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html ), you can use the power of the IDE to mark some issues in the code as to be ignored. Globalyzer uses a set of standard comments, namely &amp;lt;code&amp;gt;$NON-NLS-L$&amp;lt;/code&amp;gt;. There are many ways to do so. We will illustrate one such way with Lite in Eclipse. &lt;br /&gt;
&lt;br /&gt;
== Globalyzer Lite in Eclipse ==&lt;br /&gt;
To use Globalyzer Lite in your Eclipse environment, refer to https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html#Eclipse ; There are two sections, one for Linux, one for Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:LiteConfigured.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Run Lite ===&lt;br /&gt;
* Select the directory or file you want to analyze&lt;br /&gt;
* Click on the external tools button&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; Lite analyzes the relevant files based on the Globalyzer Project Definition file and shows the clickable results in the Console view.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteRun.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Navigate to the Issue ===&lt;br /&gt;
* Click on the issue in the Console&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; It opens the file and highlights the line with the issue.&lt;br /&gt;
&lt;br /&gt;
=== Refactor the Code or Ignore the Issue===&lt;br /&gt;
Depending on what the developer sees, the issue either needs to be refactored or ignored. If the issue needs to be ignored, the //$NON-NLS-L$ comment needs to be added at the end of that line. One can simply add it by typing it. Some short cut exist and some can be created. For instance:&lt;br /&gt;
&lt;br /&gt;
* Go to the end of the line to ignore and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&lt;br /&gt;
* Choose &amp;quot;nls - non externalize string marker&amp;quot; in the list of templates. &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
* Add the string &amp;quot;nls&amp;quot; and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt; &lt;br /&gt;
* Eclipse proposes the standard $NLS notation by default. Select that notation and type L.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteNlsCtrSpace.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The line now reads:&lt;br /&gt;
    	&amp;lt;code&amp;gt;Locale locale = new Locale(&amp;quot;en&amp;quot;, &amp;quot;US&amp;quot;); //$NON-NLS-L$&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Repeat the process for other false positives&lt;br /&gt;
&lt;br /&gt;
Lines tagged with the &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; will be ignored by Globalyzer the next time you run the Lite external tool.&lt;br /&gt;
&lt;br /&gt;
=== Advanced Template ===&lt;br /&gt;
The previous illustration was done using the default template. You can modify the template to have directly &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; on other key combination or the same &amp;lt;code&amp;gt;nls&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The following image shows how to use &amp;lt;code&amp;gt;nll&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt; to insert directory &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:NllTemplate.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is one way of adding &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; at the end of the line. Some developers will decide on other methods.&lt;br /&gt;
&lt;br /&gt;
== Globalyzer Lite for VSCode ==&lt;br /&gt;
&lt;br /&gt;
To Configure the Lite VSCode Task:&lt;br /&gt;
*Install Globalyzer Lite as directed above.&lt;br /&gt;
*Open your project folder in VSCode&lt;br /&gt;
*Select “Terminal-&amp;gt;Configure Tasks” from the top menu bar&lt;br /&gt;
[[File:Vccode1.png|800px]]&lt;br /&gt;
* Select “Create tasks.json file from template” from the popup option list&lt;br /&gt;
[[File:Vccode2.png|700px]]&lt;br /&gt;
*Select “Others” from the Task Template list&lt;br /&gt;
[[File:Vccode3.png|700px]]&lt;br /&gt;
[[File:Vccode4.png|800px]]&lt;br /&gt;
*Change the default template for the generated tasks.json file  to match the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;2.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;tasks&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;GlobalyzerLite&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;shell&amp;quot;,&lt;br /&gt;
            &amp;quot;command&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
            &amp;quot;args&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;/Applications/Lingoport/globalyzer-lite-6.6.0_8.0/globalyzer-lite.jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-f&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/lingoport/LiteProjectDefinition.xml&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--project-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--report-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/Lingoport&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--scan-items&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${file}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--console-output&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;visual-studio&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;presentation&amp;quot;: {&lt;br /&gt;
                &amp;quot;showReuseMessage&amp;quot;: false,&lt;br /&gt;
                &amp;quot;clear&amp;quot;: true,&lt;br /&gt;
                &amp;quot;revealProblems&amp;quot;: &amp;quot;onProblem&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;problemMatcher&amp;quot;: {&lt;br /&gt;
                &amp;quot;fileLocation&amp;quot;: [&amp;quot;absolute&amp;quot;],&lt;br /&gt;
                &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;,&lt;br /&gt;
                &amp;quot;owner&amp;quot;: &amp;quot;globalyzer&amp;quot;,&lt;br /&gt;
                &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
                    &amp;quot;regexp&amp;quot;: &amp;quot;^(.*)\\((\\d*)\\):\\s+(.*),\\s+(P\\d+):\\s+(.*)&amp;quot;,&lt;br /&gt;
                    &amp;quot;file&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;line&amp;quot;: 2,&lt;br /&gt;
                    &amp;quot;message&amp;quot;: 3,&lt;br /&gt;
                    &amp;quot;severity&amp;quot;: 4,&lt;br /&gt;
                    &amp;quot;code&amp;quot;: 5&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*“label” is the name of the task - this can be changed to whatever makes the most sense&lt;br /&gt;
*“type” specifies that the command should be run in a shell - required&lt;br /&gt;
*“command” is the command to execute in the shell - required&lt;br /&gt;
*“problemMatcher” used to auto-format the output, &lt;br /&gt;
*“args” specifies the arguments to be passed to the command at execution&lt;br /&gt;
*“value” contains the actual arguments&lt;br /&gt;
**-jar specifies the jar to execute&lt;br /&gt;
***Replace &#039;path/to/globalyzer-lite.jar&#039; with the absolute path to your globalyzer-lite.jar. &lt;br /&gt;
***‘C:\Lingoport\globalyzer-lite-x.y.z\globalyzer-lite.jar’&lt;br /&gt;
**-f is the name of the Project Definition file&lt;br /&gt;
***Replace the ‘/path/to/LiteProjectDefinition.xml’ with the workspace relative path of your Project Definition file&lt;br /&gt;
***E.g. ${workspaceFolder}/lingoport/LiteProjectDefinition.xml&lt;br /&gt;
**--project-path is the path of this project&lt;br /&gt;
***Leave this as the ${workspaceFolder} VSCode environment variable&lt;br /&gt;
**--scan-items Overrides the default settings for which files and directories to scan&lt;br /&gt;
***Use ${file} to scan only the currently selected file in VSCode&lt;br /&gt;
**--console-output prints scan report output to console with specified format.&lt;br /&gt;
***Leave as &amp;quot;visual-studio&amp;quot; - format report output for visual studio. This allows the user to click on a candidate issue in the output and jump to its location within a file.&lt;br /&gt;
*“quoting” specifies how to handle quoting within the args -  &#039;strong&#039; is used for arguments that may contain spaces.&lt;br /&gt;
*“presentation” configures how the workspace should handle displaying the task as it executes&lt;br /&gt;
*“problemMatcher” uses a regular expression to extract the problems found in the scan and display them in the problems panel&lt;br /&gt;
&lt;br /&gt;
===To Execute a Scan on the Current Opened File:===&lt;br /&gt;
1.Select “Terminal-&amp;gt;Run Task” and choose the GlobalyzerLite task from the list in the modal window&lt;br /&gt;
&lt;br /&gt;
2.Scan will execute in a VSCode terminal panel and display problems in the problems panel if any are found. Terminal output and problem panel screenshots on next page.&lt;br /&gt;
[[File:Vccode5.png|700px]]&lt;br /&gt;
[[File:Vccode6.png|700px]]&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98110</id>
		<title>Globalyzer in IDE</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98110"/>
		<updated>2023-12-15T00:51:00Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Globalyzer Lite Plugin for VSCode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Can I use Globalyzer Lite with my standard IDE?==&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite client can be used with Eclipse, Visual Studio and IntelliJ IDEs.&lt;br /&gt;
&lt;br /&gt;
== Using Globalyzer Lite from an Integrated Development Environment ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Lite may be used within many IDEs that support external tools, including Visual Studio, IntelliJ IDEA, and Eclipse. Configuring Lite as an external tool takes some initial setup, but is relatively easy to accomplish. Once configured, Lite may be used through the IDE&#039;s external tool menu with the click of a button. The recommended, documented tools:&lt;br /&gt;
&lt;br /&gt;
# Scan the currently selected file/directory.&lt;br /&gt;
# Scan everything within the parent directory of the currently selected file/directory.&lt;br /&gt;
# Scan the entire project.&lt;br /&gt;
&lt;br /&gt;
Demonstration videos are available for:&lt;br /&gt;
&lt;br /&gt;
* [https://player.vimeo.com/video/137641243 Visual Studio]&lt;br /&gt;
* [https://player.vimeo.com/video/137641242 IntelliJ IDEA]&lt;br /&gt;
* [https://player.vimeo.com/video/137641241 Eclipse]&lt;br /&gt;
&lt;br /&gt;
To configure Lite in the IDE, please see this page: [https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html Lite IDE Usage].&lt;br /&gt;
&lt;br /&gt;
The developer can then use the power of the IDE to refactor the relevant issues or to mark false positives in the code using Globalyzer ignore comments, such as $NON-NLS-L$. For more information, see the Globalyzer Comment Tags in [[ False Positives | False Positives ]] . &lt;br /&gt;
&lt;br /&gt;
Those refactoring and the comment tags are now part of the code: The Continuous Globalization System using the same Lite project definition file will show the same results in the Dashboard.&lt;br /&gt;
&lt;br /&gt;
==How do I install Globalyzer Lite?==&lt;br /&gt;
&lt;br /&gt;
To install the Globalyzer Lite, you first need a Globalyzer account (see [[Globalyzer_Overview_and_General#How_do_I_obtain_a_Globalyzer_account.3F|this FAQ]]). Once you have an account, you log into the Globalyzer Server and at the bottom of your home page there is a link to download Globalyzer Lite.&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite is a standalone Java application. It uses Rule Sets to scan code at the command line. It is used in Jenkins configured for the Continuous G11n System and can be integrated as an external tool in an IDE.  &lt;br /&gt;
&lt;br /&gt;
Please see [https://www.globalyzer.com/gzserver/home/installclient installation] for complete Globalyzer Lite download/installation instructions.&lt;br /&gt;
&lt;br /&gt;
To install:&lt;br /&gt;
&lt;br /&gt;
# Unzip the Globalyzer Lite zip file at a desired location&lt;br /&gt;
# Run either &amp;lt;code&amp;gt;lite-setup.bat&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;lite-setup.sh&amp;lt;/code&amp;gt; depending on your system.&lt;br /&gt;
&lt;br /&gt;
To verify the installation, from a command line at the location that it was installed:&lt;br /&gt;
 java -jar globalyzer-lite.jar -version&lt;br /&gt;
&lt;br /&gt;
or, show the help info:&lt;br /&gt;
 java -jar globalyzer-lite.jar -help&lt;br /&gt;
&lt;br /&gt;
== Sharing Project Definition Files Between IDEs and Build Systems ==&lt;br /&gt;
&lt;br /&gt;
It is common to check in a single project definition file per code repository. However, the desired IDE configuration may sometimes be incompatible with the desired build system configuration.&lt;br /&gt;
&lt;br /&gt;
These incompatibilities are best solved by modifying the project definition file within the build system. The IDE config can then be used as the default.&lt;br /&gt;
&lt;br /&gt;
Here is an example: The desired report type for Globalyzer Lite may be ScanDetailedCSV for developer usage, but will need to be ScanDetailedXML within the build system. The project definition file would then be written out with the &amp;lt;report-type&amp;gt; set to ScanDetailedCSV:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;gzproject&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  &amp;lt;report-type&amp;gt;ScanDetailedCSV&amp;lt;/report-type&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/gzproject&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The build system can then be set to auto-replace &amp;quot;ScanDetailedCSV&amp;quot; with &amp;quot;ScanDetailedXML&amp;quot;. The following Linux command will do so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ sed --in-place &#039;s|ScanDetailedCSV|ScanDetailedXML|&#039; $WORKSPACE/ProjectDefinition.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If desired, the opposite replacement also may be performed at the end of the build.&lt;br /&gt;
&lt;br /&gt;
Finally, here is a bash function to replace the content of any XML field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;replace_xml_token() {&lt;br /&gt;
  token_name=$1&lt;br /&gt;
  new_content=$2&lt;br /&gt;
  sed -ri &amp;quot;s|(&amp;lt;${token_name}&amp;gt;).*(&amp;lt;/${token_name}&amp;gt;)|\1${new_content}\2|g&amp;quot; $WORKSPACE/ProjectDefinition.xml&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It may be used like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ replace_xml_token &amp;quot;report-type&amp;quot; &amp;quot;ScanDetailedXML&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lite IDE Ignore==&lt;br /&gt;
When using Lite in an IDE (see https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html ), you can use the power of the IDE to mark some issues in the code as to be ignored. Globalyzer uses a set of standard comments, namely &amp;lt;code&amp;gt;$NON-NLS-L$&amp;lt;/code&amp;gt;. There are many ways to do so. We will illustrate one such way with Lite in Eclipse. &lt;br /&gt;
&lt;br /&gt;
== Globalyzer Lite in Eclipse ==&lt;br /&gt;
To use Globalyzer Lite in your Eclipse environment, refer to https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html#Eclipse ; There are two sections, one for Linux, one for Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:LiteConfigured.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Run Lite ===&lt;br /&gt;
* Select the directory or file you want to analyze&lt;br /&gt;
* Click on the external tools button&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; Lite analyzes the relevant files based on the Globalyzer Project Definition file and shows the clickable results in the Console view.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteRun.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Navigate to the Issue ===&lt;br /&gt;
* Click on the issue in the Console&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; It opens the file and highlights the line with the issue.&lt;br /&gt;
&lt;br /&gt;
=== Refactor the Code or Ignore the Issue===&lt;br /&gt;
Depending on what the developer sees, the issue either needs to be refactored or ignored. If the issue needs to be ignored, the //$NON-NLS-L$ comment needs to be added at the end of that line. One can simply add it by typing it. Some short cut exist and some can be created. For instance:&lt;br /&gt;
&lt;br /&gt;
* Go to the end of the line to ignore and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&lt;br /&gt;
* Choose &amp;quot;nls - non externalize string marker&amp;quot; in the list of templates. &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
* Add the string &amp;quot;nls&amp;quot; and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt; &lt;br /&gt;
* Eclipse proposes the standard $NLS notation by default. Select that notation and type L.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteNlsCtrSpace.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The line now reads:&lt;br /&gt;
    	&amp;lt;code&amp;gt;Locale locale = new Locale(&amp;quot;en&amp;quot;, &amp;quot;US&amp;quot;); //$NON-NLS-L$&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Repeat the process for other false positives&lt;br /&gt;
&lt;br /&gt;
Lines tagged with the &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; will be ignored by Globalyzer the next time you run the Lite external tool.&lt;br /&gt;
&lt;br /&gt;
=== Advanced Template ===&lt;br /&gt;
The previous illustration was done using the default template. You can modify the template to have directly &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; on other key combination or the same &amp;lt;code&amp;gt;nls&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The following image shows how to use &amp;lt;code&amp;gt;nll&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt; to insert directory &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:NllTemplate.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is one way of adding &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; at the end of the line. Some developers will decide on other methods.&lt;br /&gt;
&lt;br /&gt;
== Globalyzer Lite for VSCode ==&lt;br /&gt;
&lt;br /&gt;
To Configure the Task:&lt;br /&gt;
*Install Globalyzer Lite as directed&lt;br /&gt;
*Open your project folder in VSCode&lt;br /&gt;
*Select “Terminal-&amp;gt;Configure Tasks” from the top menu bar&lt;br /&gt;
[[File:Vccode1.png|800px]]&lt;br /&gt;
* Select “Create tasks.json file from template” from the popup option list&lt;br /&gt;
[[File:Vccode2.png|700px]]&lt;br /&gt;
*Select “Others” from the Task Template list&lt;br /&gt;
[[File:Vccode3.png|700px]]&lt;br /&gt;
[[File:Vccode4.png|800px]]&lt;br /&gt;
*Change the default template for the generated tasks.json file  to match the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;2.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;tasks&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;GlobalyzerLite&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;shell&amp;quot;,&lt;br /&gt;
            &amp;quot;command&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
            &amp;quot;args&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;/Applications/Lingoport/globalyzer-lite-6.6.0_8.0/globalyzer-lite.jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-f&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/lingoport/LiteProjectDefinition.xml&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--project-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--report-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/Lingoport&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--scan-items&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${file}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--console-output&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;visual-studio&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;presentation&amp;quot;: {&lt;br /&gt;
                &amp;quot;showReuseMessage&amp;quot;: false,&lt;br /&gt;
                &amp;quot;clear&amp;quot;: true,&lt;br /&gt;
                &amp;quot;revealProblems&amp;quot;: &amp;quot;onProblem&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;problemMatcher&amp;quot;: {&lt;br /&gt;
                &amp;quot;fileLocation&amp;quot;: [&amp;quot;absolute&amp;quot;],&lt;br /&gt;
                &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;,&lt;br /&gt;
                &amp;quot;owner&amp;quot;: &amp;quot;globalyzer&amp;quot;,&lt;br /&gt;
                &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
                    &amp;quot;regexp&amp;quot;: &amp;quot;^(.*)\\((\\d*)\\):\\s+(.*),\\s+(P\\d+):\\s+(.*)&amp;quot;,&lt;br /&gt;
                    &amp;quot;file&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;line&amp;quot;: 2,&lt;br /&gt;
                    &amp;quot;message&amp;quot;: 3,&lt;br /&gt;
                    &amp;quot;severity&amp;quot;: 4,&lt;br /&gt;
                    &amp;quot;code&amp;quot;: 5&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*“label” is the name of the task - this can be changed to whatever makes the most sense&lt;br /&gt;
*“type” specifies that the command should be run in a shell - required&lt;br /&gt;
*“command” is the command to execute in the shell - required&lt;br /&gt;
*“problemMatcher” used to auto-format the output, &lt;br /&gt;
*“args” specifies the arguments to be passed to the command at execution&lt;br /&gt;
*“value” contains the actual arguments&lt;br /&gt;
**-jar specifies the jar to execute&lt;br /&gt;
***Replace &#039;path/to/globalyzer-lite.jar&#039; with the absolute path to your globalyzer-lite.jar. &lt;br /&gt;
***‘C:\Lingoport\globalyzer-lite-x.y.z\globalyzer-lite.jar’&lt;br /&gt;
**-f is the name of the Project Definition file&lt;br /&gt;
***Replace the ‘/path/to/LiteProjectDefinition.xml’ with the workspace relative path of your Project Definition file&lt;br /&gt;
***E.g. ${workspaceFolder}/lingoport/LiteProjectDefinition.xml&lt;br /&gt;
**--project-path is the path of this project&lt;br /&gt;
***Leave this as the ${workspaceFolder} VSCode environment variable&lt;br /&gt;
**--scan-items Overrides the default settings for which files and directories to scan&lt;br /&gt;
***Use ${file} to scan only the currently selected file in VSCode&lt;br /&gt;
**--console-output prints scan report output to console with specified format.&lt;br /&gt;
***Leave as &amp;quot;visual-studio&amp;quot; - format report output for visual studio. This allows the user to click on a candidate issue in the output and jump to its location within a file.&lt;br /&gt;
*“quoting” specifies how to handle quoting within the args -  &#039;strong&#039; is used for arguments that may contain spaces.&lt;br /&gt;
*“presentation” configures how the workspace should handle displaying the task as it executes&lt;br /&gt;
*“problemMatcher” uses a regular expression to extract the problems found in the scan and display them in the problems panel&lt;br /&gt;
&lt;br /&gt;
===To Execute a Scan on the Current Opened File:===&lt;br /&gt;
1.Select “Terminal-&amp;gt;Run Task” and choose the GlobalyzerLite task from the list in the modal window&lt;br /&gt;
&lt;br /&gt;
2.Scan will execute in a VSCode terminal panel and display problems in the problems panel if any are found. Terminal output and problem panel screenshots on next page.&lt;br /&gt;
[[File:Vccode5.png|700px]]&lt;br /&gt;
[[File:Vccode6.png|700px]]&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98109</id>
		<title>Globalyzer in IDE</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98109"/>
		<updated>2023-12-15T00:50:36Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Globalyzer Lite in Eclipse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Can I use Globalyzer Lite with my standard IDE?==&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite client can be used with Eclipse, Visual Studio and IntelliJ IDEs.&lt;br /&gt;
&lt;br /&gt;
== Using Globalyzer Lite from an Integrated Development Environment ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Lite may be used within many IDEs that support external tools, including Visual Studio, IntelliJ IDEA, and Eclipse. Configuring Lite as an external tool takes some initial setup, but is relatively easy to accomplish. Once configured, Lite may be used through the IDE&#039;s external tool menu with the click of a button. The recommended, documented tools:&lt;br /&gt;
&lt;br /&gt;
# Scan the currently selected file/directory.&lt;br /&gt;
# Scan everything within the parent directory of the currently selected file/directory.&lt;br /&gt;
# Scan the entire project.&lt;br /&gt;
&lt;br /&gt;
Demonstration videos are available for:&lt;br /&gt;
&lt;br /&gt;
* [https://player.vimeo.com/video/137641243 Visual Studio]&lt;br /&gt;
* [https://player.vimeo.com/video/137641242 IntelliJ IDEA]&lt;br /&gt;
* [https://player.vimeo.com/video/137641241 Eclipse]&lt;br /&gt;
&lt;br /&gt;
To configure Lite in the IDE, please see this page: [https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html Lite IDE Usage].&lt;br /&gt;
&lt;br /&gt;
The developer can then use the power of the IDE to refactor the relevant issues or to mark false positives in the code using Globalyzer ignore comments, such as $NON-NLS-L$. For more information, see the Globalyzer Comment Tags in [[ False Positives | False Positives ]] . &lt;br /&gt;
&lt;br /&gt;
Those refactoring and the comment tags are now part of the code: The Continuous Globalization System using the same Lite project definition file will show the same results in the Dashboard.&lt;br /&gt;
&lt;br /&gt;
==How do I install Globalyzer Lite?==&lt;br /&gt;
&lt;br /&gt;
To install the Globalyzer Lite, you first need a Globalyzer account (see [[Globalyzer_Overview_and_General#How_do_I_obtain_a_Globalyzer_account.3F|this FAQ]]). Once you have an account, you log into the Globalyzer Server and at the bottom of your home page there is a link to download Globalyzer Lite.&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite is a standalone Java application. It uses Rule Sets to scan code at the command line. It is used in Jenkins configured for the Continuous G11n System and can be integrated as an external tool in an IDE.  &lt;br /&gt;
&lt;br /&gt;
Please see [https://www.globalyzer.com/gzserver/home/installclient installation] for complete Globalyzer Lite download/installation instructions.&lt;br /&gt;
&lt;br /&gt;
To install:&lt;br /&gt;
&lt;br /&gt;
# Unzip the Globalyzer Lite zip file at a desired location&lt;br /&gt;
# Run either &amp;lt;code&amp;gt;lite-setup.bat&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;lite-setup.sh&amp;lt;/code&amp;gt; depending on your system.&lt;br /&gt;
&lt;br /&gt;
To verify the installation, from a command line at the location that it was installed:&lt;br /&gt;
 java -jar globalyzer-lite.jar -version&lt;br /&gt;
&lt;br /&gt;
or, show the help info:&lt;br /&gt;
 java -jar globalyzer-lite.jar -help&lt;br /&gt;
&lt;br /&gt;
== Sharing Project Definition Files Between IDEs and Build Systems ==&lt;br /&gt;
&lt;br /&gt;
It is common to check in a single project definition file per code repository. However, the desired IDE configuration may sometimes be incompatible with the desired build system configuration.&lt;br /&gt;
&lt;br /&gt;
These incompatibilities are best solved by modifying the project definition file within the build system. The IDE config can then be used as the default.&lt;br /&gt;
&lt;br /&gt;
Here is an example: The desired report type for Globalyzer Lite may be ScanDetailedCSV for developer usage, but will need to be ScanDetailedXML within the build system. The project definition file would then be written out with the &amp;lt;report-type&amp;gt; set to ScanDetailedCSV:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;gzproject&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  &amp;lt;report-type&amp;gt;ScanDetailedCSV&amp;lt;/report-type&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/gzproject&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The build system can then be set to auto-replace &amp;quot;ScanDetailedCSV&amp;quot; with &amp;quot;ScanDetailedXML&amp;quot;. The following Linux command will do so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ sed --in-place &#039;s|ScanDetailedCSV|ScanDetailedXML|&#039; $WORKSPACE/ProjectDefinition.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If desired, the opposite replacement also may be performed at the end of the build.&lt;br /&gt;
&lt;br /&gt;
Finally, here is a bash function to replace the content of any XML field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;replace_xml_token() {&lt;br /&gt;
  token_name=$1&lt;br /&gt;
  new_content=$2&lt;br /&gt;
  sed -ri &amp;quot;s|(&amp;lt;${token_name}&amp;gt;).*(&amp;lt;/${token_name}&amp;gt;)|\1${new_content}\2|g&amp;quot; $WORKSPACE/ProjectDefinition.xml&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It may be used like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ replace_xml_token &amp;quot;report-type&amp;quot; &amp;quot;ScanDetailedXML&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lite IDE Ignore==&lt;br /&gt;
When using Lite in an IDE (see https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html ), you can use the power of the IDE to mark some issues in the code as to be ignored. Globalyzer uses a set of standard comments, namely &amp;lt;code&amp;gt;$NON-NLS-L$&amp;lt;/code&amp;gt;. There are many ways to do so. We will illustrate one such way with Lite in Eclipse. &lt;br /&gt;
&lt;br /&gt;
== Globalyzer Lite in Eclipse ==&lt;br /&gt;
To use Globalyzer Lite in your Eclipse environment, refer to https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html#Eclipse ; There are two sections, one for Linux, one for Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:LiteConfigured.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Run Lite ===&lt;br /&gt;
* Select the directory or file you want to analyze&lt;br /&gt;
* Click on the external tools button&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; Lite analyzes the relevant files based on the Globalyzer Project Definition file and shows the clickable results in the Console view.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteRun.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Navigate to the Issue ===&lt;br /&gt;
* Click on the issue in the Console&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; It opens the file and highlights the line with the issue.&lt;br /&gt;
&lt;br /&gt;
=== Refactor the Code or Ignore the Issue===&lt;br /&gt;
Depending on what the developer sees, the issue either needs to be refactored or ignored. If the issue needs to be ignored, the //$NON-NLS-L$ comment needs to be added at the end of that line. One can simply add it by typing it. Some short cut exist and some can be created. For instance:&lt;br /&gt;
&lt;br /&gt;
* Go to the end of the line to ignore and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&lt;br /&gt;
* Choose &amp;quot;nls - non externalize string marker&amp;quot; in the list of templates. &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
* Add the string &amp;quot;nls&amp;quot; and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt; &lt;br /&gt;
* Eclipse proposes the standard $NLS notation by default. Select that notation and type L.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteNlsCtrSpace.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The line now reads:&lt;br /&gt;
    	&amp;lt;code&amp;gt;Locale locale = new Locale(&amp;quot;en&amp;quot;, &amp;quot;US&amp;quot;); //$NON-NLS-L$&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Repeat the process for other false positives&lt;br /&gt;
&lt;br /&gt;
Lines tagged with the &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; will be ignored by Globalyzer the next time you run the Lite external tool.&lt;br /&gt;
&lt;br /&gt;
=== Advanced Template ===&lt;br /&gt;
The previous illustration was done using the default template. You can modify the template to have directly &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; on other key combination or the same &amp;lt;code&amp;gt;nls&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The following image shows how to use &amp;lt;code&amp;gt;nll&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt; to insert directory &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:NllTemplate.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is one way of adding &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; at the end of the line. Some developers will decide on other methods.&lt;br /&gt;
&lt;br /&gt;
== Globalyzer Lite Plugin for VSCode ==&lt;br /&gt;
&lt;br /&gt;
To Configure the Plugin:&lt;br /&gt;
*Install Globalyzer Lite as directed&lt;br /&gt;
*Open your project folder in VSCode&lt;br /&gt;
*Select “Terminal-&amp;gt;Configure Tasks” from the top menu bar&lt;br /&gt;
[[File:Vccode1.png|800px]]&lt;br /&gt;
* Select “Create tasks.json file from template” from the popup option list&lt;br /&gt;
[[File:Vccode2.png|700px]]&lt;br /&gt;
*Select “Others” from the Task Template list&lt;br /&gt;
[[File:Vccode3.png|700px]]&lt;br /&gt;
[[File:Vccode4.png|800px]]&lt;br /&gt;
*Change the default template for the generated tasks.json file  to match the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;2.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;tasks&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;GlobalyzerLite&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;shell&amp;quot;,&lt;br /&gt;
            &amp;quot;command&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
            &amp;quot;args&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;/Applications/Lingoport/globalyzer-lite-6.6.0_8.0/globalyzer-lite.jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-f&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/lingoport/LiteProjectDefinition.xml&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--project-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--report-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/Lingoport&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--scan-items&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${file}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--console-output&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;visual-studio&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;presentation&amp;quot;: {&lt;br /&gt;
                &amp;quot;showReuseMessage&amp;quot;: false,&lt;br /&gt;
                &amp;quot;clear&amp;quot;: true,&lt;br /&gt;
                &amp;quot;revealProblems&amp;quot;: &amp;quot;onProblem&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;problemMatcher&amp;quot;: {&lt;br /&gt;
                &amp;quot;fileLocation&amp;quot;: [&amp;quot;absolute&amp;quot;],&lt;br /&gt;
                &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;,&lt;br /&gt;
                &amp;quot;owner&amp;quot;: &amp;quot;globalyzer&amp;quot;,&lt;br /&gt;
                &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
                    &amp;quot;regexp&amp;quot;: &amp;quot;^(.*)\\((\\d*)\\):\\s+(.*),\\s+(P\\d+):\\s+(.*)&amp;quot;,&lt;br /&gt;
                    &amp;quot;file&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;line&amp;quot;: 2,&lt;br /&gt;
                    &amp;quot;message&amp;quot;: 3,&lt;br /&gt;
                    &amp;quot;severity&amp;quot;: 4,&lt;br /&gt;
                    &amp;quot;code&amp;quot;: 5&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*“label” is the name of the task - this can be changed to whatever makes the most sense&lt;br /&gt;
*“type” specifies that the command should be run in a shell - required&lt;br /&gt;
*“command” is the command to execute in the shell - required&lt;br /&gt;
*“problemMatcher” used to auto-format the output, &lt;br /&gt;
*“args” specifies the arguments to be passed to the command at execution&lt;br /&gt;
*“value” contains the actual arguments&lt;br /&gt;
**-jar specifies the jar to execute&lt;br /&gt;
***Replace &#039;path/to/globalyzer-lite.jar&#039; with the absolute path to your globalyzer-lite.jar. &lt;br /&gt;
***‘C:\Lingoport\globalyzer-lite-x.y.z\globalyzer-lite.jar’&lt;br /&gt;
**-f is the name of the Project Definition file&lt;br /&gt;
***Replace the ‘/path/to/LiteProjectDefinition.xml’ with the workspace relative path of your Project Definition file&lt;br /&gt;
***E.g. ${workspaceFolder}/lingoport/LiteProjectDefinition.xml&lt;br /&gt;
**--project-path is the path of this project&lt;br /&gt;
***Leave this as the ${workspaceFolder} VSCode environment variable&lt;br /&gt;
**--scan-items Overrides the default settings for which files and directories to scan&lt;br /&gt;
***Use ${file} to scan only the currently selected file in VSCode&lt;br /&gt;
**--console-output prints scan report output to console with specified format.&lt;br /&gt;
***Leave as &amp;quot;visual-studio&amp;quot; - format report output for visual studio. This allows the user to click on a candidate issue in the output and jump to its location within a file.&lt;br /&gt;
*“quoting” specifies how to handle quoting within the args -  &#039;strong&#039; is used for arguments that may contain spaces.&lt;br /&gt;
*“presentation” configures how the workspace should handle displaying the task as it executes&lt;br /&gt;
*“problemMatcher” uses a regular expression to extract the problems found in the scan and display them in the problems panel&lt;br /&gt;
&lt;br /&gt;
===To Execute a Scan on the Current Opened File:===&lt;br /&gt;
1.Select “Terminal-&amp;gt;Run Task” and choose the GlobalyzerLite task from the list in the modal window&lt;br /&gt;
&lt;br /&gt;
2.Scan will execute in a VSCode terminal panel and display problems in the problems panel if any are found. Terminal output and problem panel screenshots on next page.&lt;br /&gt;
[[File:Vccode5.png|700px]]&lt;br /&gt;
[[File:Vccode6.png|700px]]&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98108</id>
		<title>Globalyzer in IDE</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98108"/>
		<updated>2023-12-15T00:50:22Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Lite is set in Eclipse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Can I use Globalyzer Lite with my standard IDE?==&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite client can be used with Eclipse, Visual Studio and IntelliJ IDEs.&lt;br /&gt;
&lt;br /&gt;
== Using Globalyzer Lite from an Integrated Development Environment ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Lite may be used within many IDEs that support external tools, including Visual Studio, IntelliJ IDEA, and Eclipse. Configuring Lite as an external tool takes some initial setup, but is relatively easy to accomplish. Once configured, Lite may be used through the IDE&#039;s external tool menu with the click of a button. The recommended, documented tools:&lt;br /&gt;
&lt;br /&gt;
# Scan the currently selected file/directory.&lt;br /&gt;
# Scan everything within the parent directory of the currently selected file/directory.&lt;br /&gt;
# Scan the entire project.&lt;br /&gt;
&lt;br /&gt;
Demonstration videos are available for:&lt;br /&gt;
&lt;br /&gt;
* [https://player.vimeo.com/video/137641243 Visual Studio]&lt;br /&gt;
* [https://player.vimeo.com/video/137641242 IntelliJ IDEA]&lt;br /&gt;
* [https://player.vimeo.com/video/137641241 Eclipse]&lt;br /&gt;
&lt;br /&gt;
To configure Lite in the IDE, please see this page: [https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html Lite IDE Usage].&lt;br /&gt;
&lt;br /&gt;
The developer can then use the power of the IDE to refactor the relevant issues or to mark false positives in the code using Globalyzer ignore comments, such as $NON-NLS-L$. For more information, see the Globalyzer Comment Tags in [[ False Positives | False Positives ]] . &lt;br /&gt;
&lt;br /&gt;
Those refactoring and the comment tags are now part of the code: The Continuous Globalization System using the same Lite project definition file will show the same results in the Dashboard.&lt;br /&gt;
&lt;br /&gt;
==How do I install Globalyzer Lite?==&lt;br /&gt;
&lt;br /&gt;
To install the Globalyzer Lite, you first need a Globalyzer account (see [[Globalyzer_Overview_and_General#How_do_I_obtain_a_Globalyzer_account.3F|this FAQ]]). Once you have an account, you log into the Globalyzer Server and at the bottom of your home page there is a link to download Globalyzer Lite.&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite is a standalone Java application. It uses Rule Sets to scan code at the command line. It is used in Jenkins configured for the Continuous G11n System and can be integrated as an external tool in an IDE.  &lt;br /&gt;
&lt;br /&gt;
Please see [https://www.globalyzer.com/gzserver/home/installclient installation] for complete Globalyzer Lite download/installation instructions.&lt;br /&gt;
&lt;br /&gt;
To install:&lt;br /&gt;
&lt;br /&gt;
# Unzip the Globalyzer Lite zip file at a desired location&lt;br /&gt;
# Run either &amp;lt;code&amp;gt;lite-setup.bat&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;lite-setup.sh&amp;lt;/code&amp;gt; depending on your system.&lt;br /&gt;
&lt;br /&gt;
To verify the installation, from a command line at the location that it was installed:&lt;br /&gt;
 java -jar globalyzer-lite.jar -version&lt;br /&gt;
&lt;br /&gt;
or, show the help info:&lt;br /&gt;
 java -jar globalyzer-lite.jar -help&lt;br /&gt;
&lt;br /&gt;
== Sharing Project Definition Files Between IDEs and Build Systems ==&lt;br /&gt;
&lt;br /&gt;
It is common to check in a single project definition file per code repository. However, the desired IDE configuration may sometimes be incompatible with the desired build system configuration.&lt;br /&gt;
&lt;br /&gt;
These incompatibilities are best solved by modifying the project definition file within the build system. The IDE config can then be used as the default.&lt;br /&gt;
&lt;br /&gt;
Here is an example: The desired report type for Globalyzer Lite may be ScanDetailedCSV for developer usage, but will need to be ScanDetailedXML within the build system. The project definition file would then be written out with the &amp;lt;report-type&amp;gt; set to ScanDetailedCSV:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;gzproject&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  &amp;lt;report-type&amp;gt;ScanDetailedCSV&amp;lt;/report-type&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/gzproject&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The build system can then be set to auto-replace &amp;quot;ScanDetailedCSV&amp;quot; with &amp;quot;ScanDetailedXML&amp;quot;. The following Linux command will do so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ sed --in-place &#039;s|ScanDetailedCSV|ScanDetailedXML|&#039; $WORKSPACE/ProjectDefinition.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If desired, the opposite replacement also may be performed at the end of the build.&lt;br /&gt;
&lt;br /&gt;
Finally, here is a bash function to replace the content of any XML field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;replace_xml_token() {&lt;br /&gt;
  token_name=$1&lt;br /&gt;
  new_content=$2&lt;br /&gt;
  sed -ri &amp;quot;s|(&amp;lt;${token_name}&amp;gt;).*(&amp;lt;/${token_name}&amp;gt;)|\1${new_content}\2|g&amp;quot; $WORKSPACE/ProjectDefinition.xml&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It may be used like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ replace_xml_token &amp;quot;report-type&amp;quot; &amp;quot;ScanDetailedXML&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lite IDE Ignore==&lt;br /&gt;
When using Lite in an IDE (see https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html ), you can use the power of the IDE to mark some issues in the code as to be ignored. Globalyzer uses a set of standard comments, namely &amp;lt;code&amp;gt;$NON-NLS-L$&amp;lt;/code&amp;gt;. There are many ways to do so. We will illustrate one such way with Lite in Eclipse. &lt;br /&gt;
&lt;br /&gt;
== Globalyzer Lite in Eclipse ==&lt;br /&gt;
To set Lite in your Eclipse environment, refer to https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html#Eclipse ; There are two sections, one for Linux, one for Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:LiteConfigured.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Run Lite ===&lt;br /&gt;
* Select the directory or file you want to analyze&lt;br /&gt;
* Click on the external tools button&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; Lite analyzes the relevant files based on the Globalyzer Project Definition file and shows the clickable results in the Console view.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteRun.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Navigate to the Issue ===&lt;br /&gt;
* Click on the issue in the Console&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; It opens the file and highlights the line with the issue.&lt;br /&gt;
&lt;br /&gt;
=== Refactor the Code or Ignore the Issue===&lt;br /&gt;
Depending on what the developer sees, the issue either needs to be refactored or ignored. If the issue needs to be ignored, the //$NON-NLS-L$ comment needs to be added at the end of that line. One can simply add it by typing it. Some short cut exist and some can be created. For instance:&lt;br /&gt;
&lt;br /&gt;
* Go to the end of the line to ignore and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&lt;br /&gt;
* Choose &amp;quot;nls - non externalize string marker&amp;quot; in the list of templates. &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
* Add the string &amp;quot;nls&amp;quot; and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt; &lt;br /&gt;
* Eclipse proposes the standard $NLS notation by default. Select that notation and type L.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteNlsCtrSpace.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The line now reads:&lt;br /&gt;
    	&amp;lt;code&amp;gt;Locale locale = new Locale(&amp;quot;en&amp;quot;, &amp;quot;US&amp;quot;); //$NON-NLS-L$&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Repeat the process for other false positives&lt;br /&gt;
&lt;br /&gt;
Lines tagged with the &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; will be ignored by Globalyzer the next time you run the Lite external tool.&lt;br /&gt;
&lt;br /&gt;
=== Advanced Template ===&lt;br /&gt;
The previous illustration was done using the default template. You can modify the template to have directly &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; on other key combination or the same &amp;lt;code&amp;gt;nls&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The following image shows how to use &amp;lt;code&amp;gt;nll&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt; to insert directory &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:NllTemplate.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is one way of adding &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; at the end of the line. Some developers will decide on other methods.&lt;br /&gt;
&lt;br /&gt;
== Globalyzer Lite Plugin for VSCode ==&lt;br /&gt;
&lt;br /&gt;
To Configure the Plugin:&lt;br /&gt;
*Install Globalyzer Lite as directed&lt;br /&gt;
*Open your project folder in VSCode&lt;br /&gt;
*Select “Terminal-&amp;gt;Configure Tasks” from the top menu bar&lt;br /&gt;
[[File:Vccode1.png|800px]]&lt;br /&gt;
* Select “Create tasks.json file from template” from the popup option list&lt;br /&gt;
[[File:Vccode2.png|700px]]&lt;br /&gt;
*Select “Others” from the Task Template list&lt;br /&gt;
[[File:Vccode3.png|700px]]&lt;br /&gt;
[[File:Vccode4.png|800px]]&lt;br /&gt;
*Change the default template for the generated tasks.json file  to match the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;2.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;tasks&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;GlobalyzerLite&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;shell&amp;quot;,&lt;br /&gt;
            &amp;quot;command&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
            &amp;quot;args&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;/Applications/Lingoport/globalyzer-lite-6.6.0_8.0/globalyzer-lite.jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-f&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/lingoport/LiteProjectDefinition.xml&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--project-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--report-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/Lingoport&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--scan-items&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${file}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--console-output&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;visual-studio&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;presentation&amp;quot;: {&lt;br /&gt;
                &amp;quot;showReuseMessage&amp;quot;: false,&lt;br /&gt;
                &amp;quot;clear&amp;quot;: true,&lt;br /&gt;
                &amp;quot;revealProblems&amp;quot;: &amp;quot;onProblem&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;problemMatcher&amp;quot;: {&lt;br /&gt;
                &amp;quot;fileLocation&amp;quot;: [&amp;quot;absolute&amp;quot;],&lt;br /&gt;
                &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;,&lt;br /&gt;
                &amp;quot;owner&amp;quot;: &amp;quot;globalyzer&amp;quot;,&lt;br /&gt;
                &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
                    &amp;quot;regexp&amp;quot;: &amp;quot;^(.*)\\((\\d*)\\):\\s+(.*),\\s+(P\\d+):\\s+(.*)&amp;quot;,&lt;br /&gt;
                    &amp;quot;file&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;line&amp;quot;: 2,&lt;br /&gt;
                    &amp;quot;message&amp;quot;: 3,&lt;br /&gt;
                    &amp;quot;severity&amp;quot;: 4,&lt;br /&gt;
                    &amp;quot;code&amp;quot;: 5&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*“label” is the name of the task - this can be changed to whatever makes the most sense&lt;br /&gt;
*“type” specifies that the command should be run in a shell - required&lt;br /&gt;
*“command” is the command to execute in the shell - required&lt;br /&gt;
*“problemMatcher” used to auto-format the output, &lt;br /&gt;
*“args” specifies the arguments to be passed to the command at execution&lt;br /&gt;
*“value” contains the actual arguments&lt;br /&gt;
**-jar specifies the jar to execute&lt;br /&gt;
***Replace &#039;path/to/globalyzer-lite.jar&#039; with the absolute path to your globalyzer-lite.jar. &lt;br /&gt;
***‘C:\Lingoport\globalyzer-lite-x.y.z\globalyzer-lite.jar’&lt;br /&gt;
**-f is the name of the Project Definition file&lt;br /&gt;
***Replace the ‘/path/to/LiteProjectDefinition.xml’ with the workspace relative path of your Project Definition file&lt;br /&gt;
***E.g. ${workspaceFolder}/lingoport/LiteProjectDefinition.xml&lt;br /&gt;
**--project-path is the path of this project&lt;br /&gt;
***Leave this as the ${workspaceFolder} VSCode environment variable&lt;br /&gt;
**--scan-items Overrides the default settings for which files and directories to scan&lt;br /&gt;
***Use ${file} to scan only the currently selected file in VSCode&lt;br /&gt;
**--console-output prints scan report output to console with specified format.&lt;br /&gt;
***Leave as &amp;quot;visual-studio&amp;quot; - format report output for visual studio. This allows the user to click on a candidate issue in the output and jump to its location within a file.&lt;br /&gt;
*“quoting” specifies how to handle quoting within the args -  &#039;strong&#039; is used for arguments that may contain spaces.&lt;br /&gt;
*“presentation” configures how the workspace should handle displaying the task as it executes&lt;br /&gt;
*“problemMatcher” uses a regular expression to extract the problems found in the scan and display them in the problems panel&lt;br /&gt;
&lt;br /&gt;
===To Execute a Scan on the Current Opened File:===&lt;br /&gt;
1.Select “Terminal-&amp;gt;Run Task” and choose the GlobalyzerLite task from the list in the modal window&lt;br /&gt;
&lt;br /&gt;
2.Scan will execute in a VSCode terminal panel and display problems in the problems panel if any are found. Terminal output and problem panel screenshots on next page.&lt;br /&gt;
[[File:Vccode5.png|700px]]&lt;br /&gt;
[[File:Vccode6.png|700px]]&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98107</id>
		<title>Globalyzer in IDE</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98107"/>
		<updated>2023-12-15T00:49:49Z</updated>

		<summary type="html">&lt;p&gt;Masnes: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Can I use Globalyzer Lite with my standard IDE?==&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite client can be used with Eclipse, Visual Studio and IntelliJ IDEs.&lt;br /&gt;
&lt;br /&gt;
== Using Globalyzer Lite from an Integrated Development Environment ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Lite may be used within many IDEs that support external tools, including Visual Studio, IntelliJ IDEA, and Eclipse. Configuring Lite as an external tool takes some initial setup, but is relatively easy to accomplish. Once configured, Lite may be used through the IDE&#039;s external tool menu with the click of a button. The recommended, documented tools:&lt;br /&gt;
&lt;br /&gt;
# Scan the currently selected file/directory.&lt;br /&gt;
# Scan everything within the parent directory of the currently selected file/directory.&lt;br /&gt;
# Scan the entire project.&lt;br /&gt;
&lt;br /&gt;
Demonstration videos are available for:&lt;br /&gt;
&lt;br /&gt;
* [https://player.vimeo.com/video/137641243 Visual Studio]&lt;br /&gt;
* [https://player.vimeo.com/video/137641242 IntelliJ IDEA]&lt;br /&gt;
* [https://player.vimeo.com/video/137641241 Eclipse]&lt;br /&gt;
&lt;br /&gt;
To configure Lite in the IDE, please see this page: [https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html Lite IDE Usage].&lt;br /&gt;
&lt;br /&gt;
The developer can then use the power of the IDE to refactor the relevant issues or to mark false positives in the code using Globalyzer ignore comments, such as $NON-NLS-L$. For more information, see the Globalyzer Comment Tags in [[ False Positives | False Positives ]] . &lt;br /&gt;
&lt;br /&gt;
Those refactoring and the comment tags are now part of the code: The Continuous Globalization System using the same Lite project definition file will show the same results in the Dashboard.&lt;br /&gt;
&lt;br /&gt;
==How do I install Globalyzer Lite?==&lt;br /&gt;
&lt;br /&gt;
To install the Globalyzer Lite, you first need a Globalyzer account (see [[Globalyzer_Overview_and_General#How_do_I_obtain_a_Globalyzer_account.3F|this FAQ]]). Once you have an account, you log into the Globalyzer Server and at the bottom of your home page there is a link to download Globalyzer Lite.&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite is a standalone Java application. It uses Rule Sets to scan code at the command line. It is used in Jenkins configured for the Continuous G11n System and can be integrated as an external tool in an IDE.  &lt;br /&gt;
&lt;br /&gt;
Please see [https://www.globalyzer.com/gzserver/home/installclient installation] for complete Globalyzer Lite download/installation instructions.&lt;br /&gt;
&lt;br /&gt;
To install:&lt;br /&gt;
&lt;br /&gt;
# Unzip the Globalyzer Lite zip file at a desired location&lt;br /&gt;
# Run either &amp;lt;code&amp;gt;lite-setup.bat&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;lite-setup.sh&amp;lt;/code&amp;gt; depending on your system.&lt;br /&gt;
&lt;br /&gt;
To verify the installation, from a command line at the location that it was installed:&lt;br /&gt;
 java -jar globalyzer-lite.jar -version&lt;br /&gt;
&lt;br /&gt;
or, show the help info:&lt;br /&gt;
 java -jar globalyzer-lite.jar -help&lt;br /&gt;
&lt;br /&gt;
== Sharing Project Definition Files Between IDEs and Build Systems ==&lt;br /&gt;
&lt;br /&gt;
It is common to check in a single project definition file per code repository. However, the desired IDE configuration may sometimes be incompatible with the desired build system configuration.&lt;br /&gt;
&lt;br /&gt;
These incompatibilities are best solved by modifying the project definition file within the build system. The IDE config can then be used as the default.&lt;br /&gt;
&lt;br /&gt;
Here is an example: The desired report type for Globalyzer Lite may be ScanDetailedCSV for developer usage, but will need to be ScanDetailedXML within the build system. The project definition file would then be written out with the &amp;lt;report-type&amp;gt; set to ScanDetailedCSV:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;gzproject&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  &amp;lt;report-type&amp;gt;ScanDetailedCSV&amp;lt;/report-type&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/gzproject&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The build system can then be set to auto-replace &amp;quot;ScanDetailedCSV&amp;quot; with &amp;quot;ScanDetailedXML&amp;quot;. The following Linux command will do so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ sed --in-place &#039;s|ScanDetailedCSV|ScanDetailedXML|&#039; $WORKSPACE/ProjectDefinition.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If desired, the opposite replacement also may be performed at the end of the build.&lt;br /&gt;
&lt;br /&gt;
Finally, here is a bash function to replace the content of any XML field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;replace_xml_token() {&lt;br /&gt;
  token_name=$1&lt;br /&gt;
  new_content=$2&lt;br /&gt;
  sed -ri &amp;quot;s|(&amp;lt;${token_name}&amp;gt;).*(&amp;lt;/${token_name}&amp;gt;)|\1${new_content}\2|g&amp;quot; $WORKSPACE/ProjectDefinition.xml&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It may be used like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ replace_xml_token &amp;quot;report-type&amp;quot; &amp;quot;ScanDetailedXML&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lite IDE Ignore==&lt;br /&gt;
When using Lite in an IDE (see https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html ), you can use the power of the IDE to mark some issues in the code as to be ignored. Globalyzer uses a set of standard comments, namely &amp;lt;code&amp;gt;$NON-NLS-L$&amp;lt;/code&amp;gt;. There are many ways to do so. We will illustrate one such way with Lite in Eclipse. &lt;br /&gt;
&lt;br /&gt;
== Lite is set in Eclipse ==&lt;br /&gt;
To set Lite in your Eclipse environment, refer to https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html#Eclipse ; There are two sections, one for Linux, one for Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:LiteConfigured.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Run Lite ===&lt;br /&gt;
* Select the directory or file you want to analyze&lt;br /&gt;
* Click on the external tools button&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; Lite analyzes the relevant files based on the Globalyzer Project Definition file and shows the clickable results in the Console view.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteRun.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Navigate to the Issue ===&lt;br /&gt;
* Click on the issue in the Console&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; It opens the file and highlights the line with the issue.&lt;br /&gt;
&lt;br /&gt;
=== Refactor the Code or Ignore the Issue===&lt;br /&gt;
Depending on what the developer sees, the issue either needs to be refactored or ignored. If the issue needs to be ignored, the //$NON-NLS-L$ comment needs to be added at the end of that line. One can simply add it by typing it. Some short cut exist and some can be created. For instance:&lt;br /&gt;
&lt;br /&gt;
* Go to the end of the line to ignore and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&lt;br /&gt;
* Choose &amp;quot;nls - non externalize string marker&amp;quot; in the list of templates. &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
* Add the string &amp;quot;nls&amp;quot; and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt; &lt;br /&gt;
* Eclipse proposes the standard $NLS notation by default. Select that notation and type L.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteNlsCtrSpace.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The line now reads:&lt;br /&gt;
    	&amp;lt;code&amp;gt;Locale locale = new Locale(&amp;quot;en&amp;quot;, &amp;quot;US&amp;quot;); //$NON-NLS-L$&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Repeat the process for other false positives&lt;br /&gt;
&lt;br /&gt;
Lines tagged with the &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; will be ignored by Globalyzer the next time you run the Lite external tool.&lt;br /&gt;
&lt;br /&gt;
=== Advanced Template ===&lt;br /&gt;
The previous illustration was done using the default template. You can modify the template to have directly &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; on other key combination or the same &amp;lt;code&amp;gt;nls&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The following image shows how to use &amp;lt;code&amp;gt;nll&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt; to insert directory &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:NllTemplate.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is one way of adding &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; at the end of the line. Some developers will decide on other methods.&lt;br /&gt;
&lt;br /&gt;
== Globalyzer Lite Plugin for VSCode ==&lt;br /&gt;
&lt;br /&gt;
To Configure the Plugin:&lt;br /&gt;
*Install Globalyzer Lite as directed&lt;br /&gt;
*Open your project folder in VSCode&lt;br /&gt;
*Select “Terminal-&amp;gt;Configure Tasks” from the top menu bar&lt;br /&gt;
[[File:Vccode1.png|800px]]&lt;br /&gt;
* Select “Create tasks.json file from template” from the popup option list&lt;br /&gt;
[[File:Vccode2.png|700px]]&lt;br /&gt;
*Select “Others” from the Task Template list&lt;br /&gt;
[[File:Vccode3.png|700px]]&lt;br /&gt;
[[File:Vccode4.png|800px]]&lt;br /&gt;
*Change the default template for the generated tasks.json file  to match the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;2.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;tasks&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;GlobalyzerLite&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;shell&amp;quot;,&lt;br /&gt;
            &amp;quot;command&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
            &amp;quot;args&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;/Applications/Lingoport/globalyzer-lite-6.6.0_8.0/globalyzer-lite.jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-f&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/lingoport/LiteProjectDefinition.xml&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--project-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--report-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/Lingoport&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--scan-items&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${file}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--console-output&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;visual-studio&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;presentation&amp;quot;: {&lt;br /&gt;
                &amp;quot;showReuseMessage&amp;quot;: false,&lt;br /&gt;
                &amp;quot;clear&amp;quot;: true,&lt;br /&gt;
                &amp;quot;revealProblems&amp;quot;: &amp;quot;onProblem&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;problemMatcher&amp;quot;: {&lt;br /&gt;
                &amp;quot;fileLocation&amp;quot;: [&amp;quot;absolute&amp;quot;],&lt;br /&gt;
                &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;,&lt;br /&gt;
                &amp;quot;owner&amp;quot;: &amp;quot;globalyzer&amp;quot;,&lt;br /&gt;
                &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
                    &amp;quot;regexp&amp;quot;: &amp;quot;^(.*)\\((\\d*)\\):\\s+(.*),\\s+(P\\d+):\\s+(.*)&amp;quot;,&lt;br /&gt;
                    &amp;quot;file&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;line&amp;quot;: 2,&lt;br /&gt;
                    &amp;quot;message&amp;quot;: 3,&lt;br /&gt;
                    &amp;quot;severity&amp;quot;: 4,&lt;br /&gt;
                    &amp;quot;code&amp;quot;: 5&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*“label” is the name of the task - this can be changed to whatever makes the most sense&lt;br /&gt;
*“type” specifies that the command should be run in a shell - required&lt;br /&gt;
*“command” is the command to execute in the shell - required&lt;br /&gt;
*“problemMatcher” used to auto-format the output, &lt;br /&gt;
*“args” specifies the arguments to be passed to the command at execution&lt;br /&gt;
*“value” contains the actual arguments&lt;br /&gt;
**-jar specifies the jar to execute&lt;br /&gt;
***Replace &#039;path/to/globalyzer-lite.jar&#039; with the absolute path to your globalyzer-lite.jar. &lt;br /&gt;
***‘C:\Lingoport\globalyzer-lite-x.y.z\globalyzer-lite.jar’&lt;br /&gt;
**-f is the name of the Project Definition file&lt;br /&gt;
***Replace the ‘/path/to/LiteProjectDefinition.xml’ with the workspace relative path of your Project Definition file&lt;br /&gt;
***E.g. ${workspaceFolder}/lingoport/LiteProjectDefinition.xml&lt;br /&gt;
**--project-path is the path of this project&lt;br /&gt;
***Leave this as the ${workspaceFolder} VSCode environment variable&lt;br /&gt;
**--scan-items Overrides the default settings for which files and directories to scan&lt;br /&gt;
***Use ${file} to scan only the currently selected file in VSCode&lt;br /&gt;
**--console-output prints scan report output to console with specified format.&lt;br /&gt;
***Leave as &amp;quot;visual-studio&amp;quot; - format report output for visual studio. This allows the user to click on a candidate issue in the output and jump to its location within a file.&lt;br /&gt;
*“quoting” specifies how to handle quoting within the args -  &#039;strong&#039; is used for arguments that may contain spaces.&lt;br /&gt;
*“presentation” configures how the workspace should handle displaying the task as it executes&lt;br /&gt;
*“problemMatcher” uses a regular expression to extract the problems found in the scan and display them in the problems panel&lt;br /&gt;
&lt;br /&gt;
===To Execute a Scan on the Current Opened File:===&lt;br /&gt;
1.Select “Terminal-&amp;gt;Run Task” and choose the GlobalyzerLite task from the list in the modal window&lt;br /&gt;
&lt;br /&gt;
2.Scan will execute in a VSCode terminal panel and display problems in the problems panel if any are found. Terminal output and problem panel screenshots on next page.&lt;br /&gt;
[[File:Vccode5.png|700px]]&lt;br /&gt;
[[File:Vccode6.png|700px]]&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98106</id>
		<title>Globalyzer in IDE</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98106"/>
		<updated>2023-12-15T00:42:46Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Globalyzer Lite Plugin for VSCode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Can I use Globalyzer Lite with my standard IDE?==&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite client can be used with Eclipse, Visual Studio and IntelliJ IDEs.&lt;br /&gt;
&lt;br /&gt;
== Using Globalyzer Lite from an Integrated Development Environment ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Lite may be used within many IDEs that support external tools, including Visual Studio, IntelliJ IDEA, and Eclipse. Configuring Lite as an external tool takes some initial setup, but is relatively easy to accomplish. Once configured, Lite may be used through the IDE&#039;s external tool menu with the click of a button. The recommended, documented tools:&lt;br /&gt;
&lt;br /&gt;
# Scan the currently selected file/directory.&lt;br /&gt;
# Scan everything within the parent directory of the currently selected file/directory.&lt;br /&gt;
# Scan the entire project.&lt;br /&gt;
&lt;br /&gt;
Demonstration videos are available for:&lt;br /&gt;
&lt;br /&gt;
* [https://player.vimeo.com/video/137641243 Visual Studio]&lt;br /&gt;
* [https://player.vimeo.com/video/137641242 IntelliJ IDEA]&lt;br /&gt;
* [https://player.vimeo.com/video/137641241 Eclipse]&lt;br /&gt;
&lt;br /&gt;
To configure Lite in the IDE, please see this page: [https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html Lite IDE Usage].&lt;br /&gt;
&lt;br /&gt;
The developer can then use the power of the IDE to refactor the relevant issues or to mark false positives in the code using Globalyzer ignore comments, such as $NON-NLS-L$. For more information, see the Globalyzer Comment Tags in [[ False Positives | False Positives ]] . &lt;br /&gt;
&lt;br /&gt;
Those refactoring and the comment tags are now part of the code: The Continuous Globalization System using the same Lite project definition file will show the same results in the Dashboard.&lt;br /&gt;
&lt;br /&gt;
==How do I install Globalyzer Lite?==&lt;br /&gt;
&lt;br /&gt;
To install the Globalyzer Lite, you first need a Globalyzer account (see [[Globalyzer_Overview_and_General#How_do_I_obtain_a_Globalyzer_account.3F|this FAQ]]). Once you have an account, you log into the Globalyzer Server and at the bottom of your home page there is a link to download Globalyzer Lite.&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite is a standalone Java application. It uses Rule Sets to scan code at the command line. It is used in Jenkins configured for the Continuous G11n System and can be integrated as an external tool in an IDE.  &lt;br /&gt;
&lt;br /&gt;
Please see [https://www.globalyzer.com/gzserver/home/installclient installation] for complete Globalyzer Lite download/installation instructions.&lt;br /&gt;
&lt;br /&gt;
To install:&lt;br /&gt;
&lt;br /&gt;
# Unzip the Globalyzer Lite zip file at a desired location&lt;br /&gt;
# Run either &amp;lt;code&amp;gt;lite-setup.bat&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;lite-setup.sh&amp;lt;/code&amp;gt; depending on your system.&lt;br /&gt;
&lt;br /&gt;
To verify the installation, from a command line at the location that it was installed:&lt;br /&gt;
 java -jar globalyzer-lite.jar -version&lt;br /&gt;
&lt;br /&gt;
or, show the help info:&lt;br /&gt;
 java -jar globalyzer-lite.jar -help&lt;br /&gt;
&lt;br /&gt;
== Sharing Project Definition Files Between IDEs and Build Systems ==&lt;br /&gt;
&lt;br /&gt;
It is common to check in a single project definition file per code repository. However, the desired IDE configuration may sometimes be incompatible with the desired build system configuration.&lt;br /&gt;
&lt;br /&gt;
These incompatibilities are best solved by modifying the project definition file within the build system. The IDE config can then be used as the default.&lt;br /&gt;
&lt;br /&gt;
Here is an example: The desired report type for Globalyzer Lite may be ScanDetailedCSV for developer usage, but will need to be ScanDetailedXML within the build system. The project definition file would then be written out with the &amp;lt;report-type&amp;gt; set to ScanDetailedCSV:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;gzproject&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  &amp;lt;report-type&amp;gt;ScanDetailedCSV&amp;lt;/report-type&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/gzproject&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The build system can then be set to auto-replace &amp;quot;ScanDetailedCSV&amp;quot; with &amp;quot;ScanDetailedXML&amp;quot;. The following Linux command will do so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ sed --in-place &#039;s|ScanDetailedCSV|ScanDetailedXML|&#039; $WORKSPACE/ProjectDefinition.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If desired, the opposite replacement also may be performed at the end of the build.&lt;br /&gt;
&lt;br /&gt;
Finally, here is a bash function to replace the content of any XML field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;replace_xml_token() {&lt;br /&gt;
  token_name=$1&lt;br /&gt;
  new_content=$2&lt;br /&gt;
  sed -ri &amp;quot;s|(&amp;lt;${token_name}&amp;gt;).*(&amp;lt;/${token_name}&amp;gt;)|\1${new_content}\2|g&amp;quot; $WORKSPACE/ProjectDefinition.xml&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It may be used like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ replace_xml_token &amp;quot;report-type&amp;quot; &amp;quot;ScanDetailedXML&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lite IDE Ignore==&lt;br /&gt;
When using Lite in an IDE (see https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html ), you can use the power of the IDE to mark some issues in the code as to be ignored. Globalyzer uses a set of standard comments, namely &amp;lt;code&amp;gt;$NON-NLS-L$&amp;lt;/code&amp;gt;. There are many ways to do so. We will illustrate one such way with Lite in Eclipse. &lt;br /&gt;
&lt;br /&gt;
== Lite is set in Eclipse ==&lt;br /&gt;
To set Lite in your Eclipse environment, refer to https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html#Eclipse ; There are two sections, one for Linux, one for Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:LiteConfigured.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Run Lite ===&lt;br /&gt;
* Select the directory or file you want to analyze&lt;br /&gt;
* Click on the external tools button&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; Lite analyzes the relevant files based on the Globalyzer Project Definition file and shows the clickable results in the Console view.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteRun.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Navigate to the Issue ===&lt;br /&gt;
* Click on the issue in the Console&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; It opens the file and highlights the line with the issue.&lt;br /&gt;
&lt;br /&gt;
=== Refactor the Code or Ignore the Issue===&lt;br /&gt;
Depending on what the developer sees, the issue either needs to be refactored or ignored. If the issue needs to be ignored, the //$NON-NLS-L$ comment needs to be added at the end of that line. One can simply add it by typing it. Some short cut exist and some can be created. For instance:&lt;br /&gt;
&lt;br /&gt;
* Go to the end of the line to ignore and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&lt;br /&gt;
* Choose &amp;quot;nls - non externalize string marker&amp;quot; in the list of templates. &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
* Add the string &amp;quot;nls&amp;quot; and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt; &lt;br /&gt;
* Eclipse proposes the standard $NLS notation by default. Select that notation and type L.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteNlsCtrSpace.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The line now reads:&lt;br /&gt;
    	&amp;lt;code&amp;gt;Locale locale = new Locale(&amp;quot;en&amp;quot;, &amp;quot;US&amp;quot;); //$NON-NLS-L$&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Repeat the process for other false positives&lt;br /&gt;
&lt;br /&gt;
Lines tagged with the &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; will be ignored by Globalyzer the next time you run the Lite external tool.&lt;br /&gt;
&lt;br /&gt;
=== Advanced Template ===&lt;br /&gt;
The previous illustration was done using the default template. You can modify the template to have directly &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; on other key combination or the same &amp;lt;code&amp;gt;nls&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The following image shows how to use &amp;lt;code&amp;gt;nll&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt; to insert directory &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:NllTemplate.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is one way of adding &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; at the end of the line. Some developers will decide on other methods.&lt;br /&gt;
&lt;br /&gt;
=== Globalyzer Lite Plugin for VSCode ===&lt;br /&gt;
&lt;br /&gt;
To Configure the Plugin:&lt;br /&gt;
*Install Globalyzer Lite as directed&lt;br /&gt;
*Open your project folder in VSCode&lt;br /&gt;
*Select “Terminal-&amp;gt;Configure Tasks” from the top menu bar&lt;br /&gt;
[[File:Vccode1.png|800px]]&lt;br /&gt;
* Select “Create tasks.json file from template” from the popup option list&lt;br /&gt;
[[File:Vccode2.png|700px]]&lt;br /&gt;
*Select “Others” from the Task Template list&lt;br /&gt;
[[File:Vccode3.png|700px]]&lt;br /&gt;
[[File:Vccode4.png|800px]]&lt;br /&gt;
*Change the default template for the generated tasks.json file  to match the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;2.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;tasks&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;GlobalyzerLite&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;shell&amp;quot;,&lt;br /&gt;
            &amp;quot;command&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
            &amp;quot;args&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;/Applications/Lingoport/globalyzer-lite-6.6.0_8.0/globalyzer-lite.jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-f&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/lingoport/LiteProjectDefinition.xml&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--project-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--report-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/Lingoport&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--scan-items&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${file}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--console-output&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;visual-studio&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;presentation&amp;quot;: {&lt;br /&gt;
                &amp;quot;showReuseMessage&amp;quot;: false,&lt;br /&gt;
                &amp;quot;clear&amp;quot;: true,&lt;br /&gt;
                &amp;quot;revealProblems&amp;quot;: &amp;quot;onProblem&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;problemMatcher&amp;quot;: {&lt;br /&gt;
                &amp;quot;fileLocation&amp;quot;: [&amp;quot;absolute&amp;quot;],&lt;br /&gt;
                &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;,&lt;br /&gt;
                &amp;quot;owner&amp;quot;: &amp;quot;globalyzer&amp;quot;,&lt;br /&gt;
                &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
                    &amp;quot;regexp&amp;quot;: &amp;quot;^(.*)\\((\\d*)\\):\\s+(.*),\\s+(P\\d+):\\s+(.*)&amp;quot;,&lt;br /&gt;
                    &amp;quot;file&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;line&amp;quot;: 2,&lt;br /&gt;
                    &amp;quot;message&amp;quot;: 3,&lt;br /&gt;
                    &amp;quot;severity&amp;quot;: 4,&lt;br /&gt;
                    &amp;quot;code&amp;quot;: 5&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*“label” is the name of the task - this can be changed to whatever makes the most sense&lt;br /&gt;
*“type” specifies that the command should be run in a shell - required&lt;br /&gt;
*“command” is the command to execute in the shell - required&lt;br /&gt;
*“problemMatcher” used to auto-format the output, &lt;br /&gt;
*“args” specifies the arguments to be passed to the command at execution&lt;br /&gt;
*“value” contains the actual arguments&lt;br /&gt;
**-jar specifies the jar to execute&lt;br /&gt;
***Replace &#039;path/to/globalyzer-lite.jar&#039; with the absolute path to your globalyzer-lite.jar. &lt;br /&gt;
***‘C:\Lingoport\globalyzer-lite-x.y.z\globalyzer-lite.jar’&lt;br /&gt;
**-f is the name of the Project Definition file&lt;br /&gt;
***Replace the ‘/path/to/LiteProjectDefinition.xml’ with the workspace relative path of your Project Definition file&lt;br /&gt;
***E.g. ${workspaceFolder}/lingoport/LiteProjectDefinition.xml&lt;br /&gt;
**--project-path is the path of this project&lt;br /&gt;
***Leave this as the ${workspaceFolder} VSCode environment variable&lt;br /&gt;
**--scan-items Overrides the default settings for which files and directories to scan&lt;br /&gt;
***Use ${file} to scan only the currently selected file in VSCode&lt;br /&gt;
**--console-output prints scan report output to console with specified format.&lt;br /&gt;
***Leave as &amp;quot;visual-studio&amp;quot; - format report output for visual studio. This allows the user to click on a candidate issue in the output and jump to its location within a file.&lt;br /&gt;
*“quoting” specifies how to handle quoting within the args -  &#039;strong&#039; is used for arguments that may contain spaces.&lt;br /&gt;
*“presentation” configures how the workspace should handle displaying the task as it executes&lt;br /&gt;
*“problemMatcher” uses a regular expression to extract the problems found in the scan and display them in the problems panel&lt;br /&gt;
&lt;br /&gt;
===To Execute a Scan on the Current Opened File:===&lt;br /&gt;
1.Select “Terminal-&amp;gt;Run Task” and choose the GlobalyzerLite task from the list in the modal window&lt;br /&gt;
&lt;br /&gt;
2.Scan will execute in a VSCode terminal panel and display problems in the problems panel if any are found. Terminal output and problem panel screenshots on next page.&lt;br /&gt;
[[File:Vccode5.png|700px]]&lt;br /&gt;
[[File:Vccode6.png|700px]]&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98105</id>
		<title>Globalyzer in IDE</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98105"/>
		<updated>2023-12-15T00:41:49Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Globalyzer Lite Plugin for VSCode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Can I use Globalyzer Lite with my standard IDE?==&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite client can be used with Eclipse, Visual Studio and IntelliJ IDEs.&lt;br /&gt;
&lt;br /&gt;
== Using Globalyzer Lite from an Integrated Development Environment ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Lite may be used within many IDEs that support external tools, including Visual Studio, IntelliJ IDEA, and Eclipse. Configuring Lite as an external tool takes some initial setup, but is relatively easy to accomplish. Once configured, Lite may be used through the IDE&#039;s external tool menu with the click of a button. The recommended, documented tools:&lt;br /&gt;
&lt;br /&gt;
# Scan the currently selected file/directory.&lt;br /&gt;
# Scan everything within the parent directory of the currently selected file/directory.&lt;br /&gt;
# Scan the entire project.&lt;br /&gt;
&lt;br /&gt;
Demonstration videos are available for:&lt;br /&gt;
&lt;br /&gt;
* [https://player.vimeo.com/video/137641243 Visual Studio]&lt;br /&gt;
* [https://player.vimeo.com/video/137641242 IntelliJ IDEA]&lt;br /&gt;
* [https://player.vimeo.com/video/137641241 Eclipse]&lt;br /&gt;
&lt;br /&gt;
To configure Lite in the IDE, please see this page: [https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html Lite IDE Usage].&lt;br /&gt;
&lt;br /&gt;
The developer can then use the power of the IDE to refactor the relevant issues or to mark false positives in the code using Globalyzer ignore comments, such as $NON-NLS-L$. For more information, see the Globalyzer Comment Tags in [[ False Positives | False Positives ]] . &lt;br /&gt;
&lt;br /&gt;
Those refactoring and the comment tags are now part of the code: The Continuous Globalization System using the same Lite project definition file will show the same results in the Dashboard.&lt;br /&gt;
&lt;br /&gt;
==How do I install Globalyzer Lite?==&lt;br /&gt;
&lt;br /&gt;
To install the Globalyzer Lite, you first need a Globalyzer account (see [[Globalyzer_Overview_and_General#How_do_I_obtain_a_Globalyzer_account.3F|this FAQ]]). Once you have an account, you log into the Globalyzer Server and at the bottom of your home page there is a link to download Globalyzer Lite.&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite is a standalone Java application. It uses Rule Sets to scan code at the command line. It is used in Jenkins configured for the Continuous G11n System and can be integrated as an external tool in an IDE.  &lt;br /&gt;
&lt;br /&gt;
Please see [https://www.globalyzer.com/gzserver/home/installclient installation] for complete Globalyzer Lite download/installation instructions.&lt;br /&gt;
&lt;br /&gt;
To install:&lt;br /&gt;
&lt;br /&gt;
# Unzip the Globalyzer Lite zip file at a desired location&lt;br /&gt;
# Run either &amp;lt;code&amp;gt;lite-setup.bat&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;lite-setup.sh&amp;lt;/code&amp;gt; depending on your system.&lt;br /&gt;
&lt;br /&gt;
To verify the installation, from a command line at the location that it was installed:&lt;br /&gt;
 java -jar globalyzer-lite.jar -version&lt;br /&gt;
&lt;br /&gt;
or, show the help info:&lt;br /&gt;
 java -jar globalyzer-lite.jar -help&lt;br /&gt;
&lt;br /&gt;
== Sharing Project Definition Files Between IDEs and Build Systems ==&lt;br /&gt;
&lt;br /&gt;
It is common to check in a single project definition file per code repository. However, the desired IDE configuration may sometimes be incompatible with the desired build system configuration.&lt;br /&gt;
&lt;br /&gt;
These incompatibilities are best solved by modifying the project definition file within the build system. The IDE config can then be used as the default.&lt;br /&gt;
&lt;br /&gt;
Here is an example: The desired report type for Globalyzer Lite may be ScanDetailedCSV for developer usage, but will need to be ScanDetailedXML within the build system. The project definition file would then be written out with the &amp;lt;report-type&amp;gt; set to ScanDetailedCSV:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;gzproject&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  &amp;lt;report-type&amp;gt;ScanDetailedCSV&amp;lt;/report-type&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/gzproject&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The build system can then be set to auto-replace &amp;quot;ScanDetailedCSV&amp;quot; with &amp;quot;ScanDetailedXML&amp;quot;. The following Linux command will do so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ sed --in-place &#039;s|ScanDetailedCSV|ScanDetailedXML|&#039; $WORKSPACE/ProjectDefinition.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If desired, the opposite replacement also may be performed at the end of the build.&lt;br /&gt;
&lt;br /&gt;
Finally, here is a bash function to replace the content of any XML field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;replace_xml_token() {&lt;br /&gt;
  token_name=$1&lt;br /&gt;
  new_content=$2&lt;br /&gt;
  sed -ri &amp;quot;s|(&amp;lt;${token_name}&amp;gt;).*(&amp;lt;/${token_name}&amp;gt;)|\1${new_content}\2|g&amp;quot; $WORKSPACE/ProjectDefinition.xml&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It may be used like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ replace_xml_token &amp;quot;report-type&amp;quot; &amp;quot;ScanDetailedXML&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lite IDE Ignore==&lt;br /&gt;
When using Lite in an IDE (see https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html ), you can use the power of the IDE to mark some issues in the code as to be ignored. Globalyzer uses a set of standard comments, namely &amp;lt;code&amp;gt;$NON-NLS-L$&amp;lt;/code&amp;gt;. There are many ways to do so. We will illustrate one such way with Lite in Eclipse. &lt;br /&gt;
&lt;br /&gt;
== Lite is set in Eclipse ==&lt;br /&gt;
To set Lite in your Eclipse environment, refer to https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html#Eclipse ; There are two sections, one for Linux, one for Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:LiteConfigured.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Run Lite ===&lt;br /&gt;
* Select the directory or file you want to analyze&lt;br /&gt;
* Click on the external tools button&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; Lite analyzes the relevant files based on the Globalyzer Project Definition file and shows the clickable results in the Console view.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteRun.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Navigate to the Issue ===&lt;br /&gt;
* Click on the issue in the Console&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; It opens the file and highlights the line with the issue.&lt;br /&gt;
&lt;br /&gt;
=== Refactor the Code or Ignore the Issue===&lt;br /&gt;
Depending on what the developer sees, the issue either needs to be refactored or ignored. If the issue needs to be ignored, the //$NON-NLS-L$ comment needs to be added at the end of that line. One can simply add it by typing it. Some short cut exist and some can be created. For instance:&lt;br /&gt;
&lt;br /&gt;
* Go to the end of the line to ignore and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&lt;br /&gt;
* Choose &amp;quot;nls - non externalize string marker&amp;quot; in the list of templates. &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
* Add the string &amp;quot;nls&amp;quot; and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt; &lt;br /&gt;
* Eclipse proposes the standard $NLS notation by default. Select that notation and type L.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteNlsCtrSpace.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The line now reads:&lt;br /&gt;
    	&amp;lt;code&amp;gt;Locale locale = new Locale(&amp;quot;en&amp;quot;, &amp;quot;US&amp;quot;); //$NON-NLS-L$&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Repeat the process for other false positives&lt;br /&gt;
&lt;br /&gt;
Lines tagged with the &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; will be ignored by Globalyzer the next time you run the Lite external tool.&lt;br /&gt;
&lt;br /&gt;
=== Advanced Template ===&lt;br /&gt;
The previous illustration was done using the default template. You can modify the template to have directly &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; on other key combination or the same &amp;lt;code&amp;gt;nls&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The following image shows how to use &amp;lt;code&amp;gt;nll&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt; to insert directory &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:NllTemplate.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is one way of adding &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; at the end of the line. Some developers will decide on other methods.&lt;br /&gt;
&lt;br /&gt;
=== Globalyzer Lite Plugin for VSCode ===&lt;br /&gt;
&lt;br /&gt;
To Configure the Plugin:&lt;br /&gt;
*Install Globalyzer Lite as directed&lt;br /&gt;
*Open your project folder in VSCode&lt;br /&gt;
*Select “Terminal-&amp;gt;Configure Tasks” from the top menu bar&lt;br /&gt;
[[File:Vccode1.png|800px]]&lt;br /&gt;
* Select “Create tasks.json file from template” from the popup option list&lt;br /&gt;
[[File:Vccode2.png|700px]]&lt;br /&gt;
*Select “Others” from the Task Template list&lt;br /&gt;
[[File:Vccode3.png|700px]]&lt;br /&gt;
[[File:Vccode4.png|800px]]&lt;br /&gt;
*Change the default template for the generated tasks.json file  to match the following:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;2.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;tasks&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;GlobalyzerLite&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;shell&amp;quot;,&lt;br /&gt;
            &amp;quot;command&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
            &amp;quot;args&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;/Applications/Lingoport/globalyzer-lite-6.6.0_8.0/globalyzer-lite.jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-f&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/lingoport/LiteProjectDefinition.xml&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--project-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--report-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/Lingoport&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--scan-items&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${file}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--console-output&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;visual-studio&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;presentation&amp;quot;: {&lt;br /&gt;
                &amp;quot;showReuseMessage&amp;quot;: false,&lt;br /&gt;
                &amp;quot;clear&amp;quot;: true,&lt;br /&gt;
                &amp;quot;revealProblems&amp;quot;: &amp;quot;onProblem&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;problemMatcher&amp;quot;: {&lt;br /&gt;
                &amp;quot;fileLocation&amp;quot;: [&amp;quot;absolute&amp;quot;],&lt;br /&gt;
                &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;,&lt;br /&gt;
                &amp;quot;owner&amp;quot;: &amp;quot;globalyzer&amp;quot;,&lt;br /&gt;
                &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
                    &amp;quot;regexp&amp;quot;: &amp;quot;^(.*)\\((\\d*)\\):\\s+(.*),\\s+(P\\d+):\\s+(.*)&amp;quot;,&lt;br /&gt;
                    &amp;quot;file&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;line&amp;quot;: 2,&lt;br /&gt;
                    &amp;quot;message&amp;quot;: 3,&lt;br /&gt;
                    &amp;quot;severity&amp;quot;: 4,&lt;br /&gt;
                    &amp;quot;code&amp;quot;: 5&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
*“label” is the name of the task - this can be changed to whatever makes the most sense&lt;br /&gt;
*“type” specifies that the command should be run in a shell - required&lt;br /&gt;
*“command” is the command to execute in the shell - required&lt;br /&gt;
*“problemMatcher” used to auto-format the output, &lt;br /&gt;
*“args” specifies the arguments to be passed to the command at execution&lt;br /&gt;
*“value” contains the actual arguments&lt;br /&gt;
**-jar specifies the jar to execute&lt;br /&gt;
***Replace &#039;path/to/globalyzer-lite.jar&#039; with the absolute path to your globalyzer-lite.jar. &lt;br /&gt;
***‘C:\Lingoport\globalyzer-lite-x.y.z\globalyzer-lite.jar’&lt;br /&gt;
**-f is the name of the Project Definition file&lt;br /&gt;
***Replace the ‘/path/to/LiteProjectDefinition.xml’ with the workspace relative path of your Project Definition file&lt;br /&gt;
***E.g. ${workspaceFolder}/lingoport/LiteProjectDefinition.xml&lt;br /&gt;
**--project-path is the path of this project&lt;br /&gt;
***Leave this as the ${workspaceFolder} VSCode environment variable&lt;br /&gt;
**--scan-items Overrides the default settings for which files and directories to scan&lt;br /&gt;
***Use ${file} to scan only the currently selected file in VSCode&lt;br /&gt;
**--console-output prints scan report output to console with specified format.&lt;br /&gt;
***Leave as &amp;quot;visual-studio&amp;quot; - format report output for visual studio. This allows the user to click on a candidate issue in the output and jump to its location within a file.&lt;br /&gt;
*“quoting” specifies how to handle quoting within the args -  &#039;strong&#039; is used for arguments that may contain spaces.&lt;br /&gt;
*“presentation” configures how the workspace should handle displaying the task as it executes&lt;br /&gt;
*“problemMatcher” uses a regular expression to extract the problems found in the scan and display them in the problems panel&lt;br /&gt;
&lt;br /&gt;
===To Execute a Scan on the Current Opened File:===&lt;br /&gt;
1.Select “Terminal-&amp;gt;Run Task” and choose the GlobalyzerLite task from the list in the modal window&lt;br /&gt;
&lt;br /&gt;
2.Scan will execute in a VSCode terminal panel and display problems in the problems panel if any are found. Terminal output and problem panel screenshots on next page.&lt;br /&gt;
[[File:Vccode5.png|700px]]&lt;br /&gt;
[[File:Vccode6.png|700px]]&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98081</id>
		<title>Globalyzer in IDE</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98081"/>
		<updated>2023-12-11T22:55:32Z</updated>

		<summary type="html">&lt;p&gt;Masnes: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Can I use Globalyzer Lite with my standard IDE?==&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite client can be used with Eclipse, Visual Studio and IntelliJ IDEs.&lt;br /&gt;
&lt;br /&gt;
== Using Globalyzer Lite from an Integrated Development Environment ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Lite may be used within many IDEs that support external tools, including Visual Studio, IntelliJ IDEA, and Eclipse. Configuring Lite as an external tool takes some initial setup, but is relatively easy to accomplish. Once configured, Lite may be used through the IDE&#039;s external tool menu with the click of a button. The recommended, documented tools:&lt;br /&gt;
&lt;br /&gt;
# Scan the currently selected file/directory.&lt;br /&gt;
# Scan everything within the parent directory of the currently selected file/directory.&lt;br /&gt;
# Scan the entire project.&lt;br /&gt;
&lt;br /&gt;
Demonstration videos are available for:&lt;br /&gt;
&lt;br /&gt;
* [https://player.vimeo.com/video/137641243 Visual Studio]&lt;br /&gt;
* [https://player.vimeo.com/video/137641242 IntelliJ IDEA]&lt;br /&gt;
* [https://player.vimeo.com/video/137641241 Eclipse]&lt;br /&gt;
&lt;br /&gt;
To configure Lite in the IDE, please see this page: [https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html Lite IDE Usage].&lt;br /&gt;
&lt;br /&gt;
The developer can then use the power of the IDE to refactor the relevant issues or to mark false positives in the code using Globalyzer ignore comments, such as $NON-NLS-L$. For more information, see the Globalyzer Comment Tags in [[ False Positives | False Positives ]] . &lt;br /&gt;
&lt;br /&gt;
Those refactoring and the comment tags are now part of the code: The Continuous Globalization System using the same Lite project definition file will show the same results in the Dashboard.&lt;br /&gt;
&lt;br /&gt;
==How do I install Globalyzer Lite?==&lt;br /&gt;
&lt;br /&gt;
To install the Globalyzer Lite, you first need a Globalyzer account (see [[Globalyzer_Overview_and_General#How_do_I_obtain_a_Globalyzer_account.3F|this FAQ]]). Once you have an account, you log into the Globalyzer Server and at the bottom of your home page there is a link to download Globalyzer Lite.&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite is a standalone Java application. It uses Rule Sets to scan code at the command line. It is used in Jenkins configured for the Continuous G11n System and can be integrated as an external tool in an IDE.  &lt;br /&gt;
&lt;br /&gt;
Please see [https://www.globalyzer.com/gzserver/home/installclient installation] for complete Globalyzer Lite download/installation instructions.&lt;br /&gt;
&lt;br /&gt;
To install:&lt;br /&gt;
&lt;br /&gt;
# Unzip the Globalyzer Lite zip file at a desired location&lt;br /&gt;
# Run either &amp;lt;code&amp;gt;lite-setup.bat&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;lite-setup.sh&amp;lt;/code&amp;gt; depending on your system.&lt;br /&gt;
&lt;br /&gt;
To verify the installation, from a command line at the location that it was installed:&lt;br /&gt;
 java -jar globalyzer-lite.jar -version&lt;br /&gt;
&lt;br /&gt;
or, show the help info:&lt;br /&gt;
 java -jar globalyzer-lite.jar -help&lt;br /&gt;
&lt;br /&gt;
== Sharing Project Definition Files Between IDEs and Build Systems ==&lt;br /&gt;
&lt;br /&gt;
It is common to check in a single project definition file per code repository. However, the desired IDE configuration may sometimes be incompatible with the desired build system configuration.&lt;br /&gt;
&lt;br /&gt;
These incompatibilities are best solved by modifying the project definition file within the build system. The IDE config can then be used as the default.&lt;br /&gt;
&lt;br /&gt;
Here is an example: The desired report type for Globalyzer Lite may be ScanDetailedCSV for developer usage, but will need to be ScanDetailedXML within the build system. The project definition file would then be written out with the &amp;lt;report-type&amp;gt; set to ScanDetailedCSV:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;gzproject&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  &amp;lt;report-type&amp;gt;ScanDetailedCSV&amp;lt;/report-type&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/gzproject&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The build system can then be set to auto-replace &amp;quot;ScanDetailedCSV&amp;quot; with &amp;quot;ScanDetailedXML&amp;quot;. The following Linux command will do so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ sed --in-place &#039;s|ScanDetailedCSV|ScanDetailedXML|&#039; $WORKSPACE/ProjectDefinition.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If desired, the opposite replacement also may be performed at the end of the build.&lt;br /&gt;
&lt;br /&gt;
Finally, here is a bash function to replace the content of any XML field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;replace_xml_token() {&lt;br /&gt;
  token_name=$1&lt;br /&gt;
  new_content=$2&lt;br /&gt;
  sed -ri &amp;quot;s|(&amp;lt;${token_name}&amp;gt;).*(&amp;lt;/${token_name}&amp;gt;)|\1${new_content}\2|g&amp;quot; $WORKSPACE/ProjectDefinition.xml&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It may be used like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ replace_xml_token &amp;quot;report-type&amp;quot; &amp;quot;ScanDetailedXML&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lite IDE Ignore==&lt;br /&gt;
When using Lite in an IDE (see https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html ), you can use the power of the IDE to mark some issues in the code as to be ignored. Globalyzer uses a set of standard comments, namely &amp;lt;code&amp;gt;$NON-NLS-L$&amp;lt;/code&amp;gt;. There are many ways to do so. We will illustrate one such way with Lite in Eclipse. &lt;br /&gt;
&lt;br /&gt;
== Lite is set in Eclipse ==&lt;br /&gt;
To set Lite in your Eclipse environment, refer to https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html#Eclipse ; There are two sections, one for Linux, one for Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:LiteConfigured.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Run Lite ===&lt;br /&gt;
* Select the directory or file you want to analyze&lt;br /&gt;
* Click on the external tools button&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; Lite analyzes the relevant files based on the Globalyzer Project Definition file and shows the clickable results in the Console view.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteRun.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Navigate to the Issue ===&lt;br /&gt;
* Click on the issue in the Console&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; It opens the file and highlights the line with the issue.&lt;br /&gt;
&lt;br /&gt;
=== Refactor the Code or Ignore the Issue===&lt;br /&gt;
Depending on what the developer sees, the issue either needs to be refactored or ignored. If the issue needs to be ignored, the //$NON-NLS-L$ comment needs to be added at the end of that line. One can simply add it by typing it. Some short cut exist and some can be created. For instance:&lt;br /&gt;
&lt;br /&gt;
* Go to the end of the line to ignore and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&lt;br /&gt;
* Choose &amp;quot;nls - non externalize string marker&amp;quot; in the list of templates. &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
* Add the string &amp;quot;nls&amp;quot; and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt; &lt;br /&gt;
* Eclipse proposes the standard $NLS notation by default. Select that notation and type L.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteNlsCtrSpace.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The line now reads:&lt;br /&gt;
    	&amp;lt;code&amp;gt;Locale locale = new Locale(&amp;quot;en&amp;quot;, &amp;quot;US&amp;quot;); //$NON-NLS-L$&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Repeat the process for other false positives&lt;br /&gt;
&lt;br /&gt;
Lines tagged with the &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; will be ignored by Globalyzer the next time you run the Lite external tool.&lt;br /&gt;
&lt;br /&gt;
=== Advanced Template ===&lt;br /&gt;
The previous illustration was done using the default template. You can modify the template to have directly &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; on other key combination or the same &amp;lt;code&amp;gt;nls&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The following image shows how to use &amp;lt;code&amp;gt;nll&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt; to insert directory &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:NllTemplate.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is one way of adding &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; at the end of the line. Some developers will decide on other methods.&lt;br /&gt;
&lt;br /&gt;
=== Globalyzer Lite Plugin for VSCode ===&lt;br /&gt;
&lt;br /&gt;
To Configure the Plugin:&lt;br /&gt;
*Install Globalyzer Lite as directed&lt;br /&gt;
*Open your project folder in VSCode&lt;br /&gt;
*Select “Terminal-&amp;gt;Configure Tasks” from the top menu bar&lt;br /&gt;
[[File:Vccode1.png|800px]]&lt;br /&gt;
* Select “Create tasks.json file from template” from the popup option list&lt;br /&gt;
[[File:Vccode2.png|700px]]&lt;br /&gt;
*Select “Others” from the Task Template list&lt;br /&gt;
[[File:Vccode3.png|700px]]&lt;br /&gt;
[[File:Vccode4.png|800px]]&lt;br /&gt;
*Change the default template for the generated tasks.json file  to match the following:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;2.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;tasks&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;GlobalyzerLite&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;shell&amp;quot;,&lt;br /&gt;
            &amp;quot;command&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
            &amp;quot;args&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;/Applications/Lingoport/globalyzer-lite-6.6.0_8.0/globalyzer-lite.jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-f&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/lingoport/LiteProjectDefinition.xml&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--project-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--report-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/Lingoport&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--scan-items&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${file}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;strong&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--console-output&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;visual-studio&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;presentation&amp;quot;: {&lt;br /&gt;
                &amp;quot;showReuseMessage&amp;quot;: false,&lt;br /&gt;
                &amp;quot;clear&amp;quot;: true,&lt;br /&gt;
                &amp;quot;revealProblems&amp;quot;: &amp;quot;onProblem&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;problemMatcher&amp;quot;: {&lt;br /&gt;
                &amp;quot;fileLocation&amp;quot;: [&amp;quot;absolute&amp;quot;],&lt;br /&gt;
                &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;,&lt;br /&gt;
                &amp;quot;owner&amp;quot;: &amp;quot;globalyzer&amp;quot;,&lt;br /&gt;
                &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
                    &amp;quot;regexp&amp;quot;: &amp;quot;^(.*)\\((\\d*)\\):\\s+(.*),\\s+(P\\d+):\\s+(.*)&amp;quot;,&lt;br /&gt;
                    &amp;quot;file&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;line&amp;quot;: 2,&lt;br /&gt;
                    &amp;quot;message&amp;quot;: 3,&lt;br /&gt;
                    &amp;quot;severity&amp;quot;: 4,&lt;br /&gt;
                    &amp;quot;code&amp;quot;: 5&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
*“label” is the name of the task - this can be changed to whatever makes the most sense&lt;br /&gt;
*“type” specifies that the command should be run in a shell - required&lt;br /&gt;
*“command” is the command to execute in the shell - required&lt;br /&gt;
*“problemMatcher” used to auto-format the output, &lt;br /&gt;
*“args” specifies the arguments to be passed to the command at execution&lt;br /&gt;
*“value” contains the actual arguments&lt;br /&gt;
**-jar specifies the jar to execute&lt;br /&gt;
***Replace &#039;path/to/globalyzer-lite.jar&#039; with the absolute path to your globalyzer-lite.jar. &lt;br /&gt;
***‘C:\Lingoport\globalyzer-lite-x.y.z\globalyzer-lite.jar’&lt;br /&gt;
**-f is the name of the Project Definition file&lt;br /&gt;
***Replace the ‘/path/to/LiteProjectDefinition.xml’ with the workspace relative path of your Project Definition file&lt;br /&gt;
***E.g. ${workspaceFolder}/lingoport/LiteProjectDefinition.xml&lt;br /&gt;
**--project-path is the path of this project&lt;br /&gt;
***Leave this as the ${workspaceFolder} VSCode environment variable&lt;br /&gt;
**--scan-items Overrides the default settings for which files and directories to scan&lt;br /&gt;
***Use ${file} to scan only the currently selected file in VSCode&lt;br /&gt;
**--console-output prints scan report output to console with specified format.&lt;br /&gt;
***Leave as &amp;quot;visual-studio&amp;quot; - format report output for visual studio. This allows the user to click on a candidate issue in the output and jump to its location within a file.&lt;br /&gt;
*“quoting” specifies how to handle quoting within the args - required as “weak”&lt;br /&gt;
*“presentation” configures how the workspace should handle displaying the task as it executes&lt;br /&gt;
*“problemMatcher” uses a regular expression to extract the problems found in the scan and display them in the problems panel&lt;br /&gt;
&lt;br /&gt;
===To Execute a Scan on the Current Opened File:===&lt;br /&gt;
1.Select “Terminal-&amp;gt;Run Task” and choose the GlobalyzerLite task from the list in the modal window&lt;br /&gt;
&lt;br /&gt;
2.Scan will execute in a VSCode terminal panel and display problems in the problems panel if any are found. Terminal output and problem panel screenshots on next page.&lt;br /&gt;
[[File:Vccode5.png|700px]]&lt;br /&gt;
[[File:Vccode6.png|700px]]&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98080</id>
		<title>Globalyzer in IDE</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=98080"/>
		<updated>2023-12-11T22:45:05Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Globalyzer Lite Plugin for VSCode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Can I use Globalyzer Lite with my standard IDE?==&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite client can be used with Eclipse, Visual Studio and IntelliJ IDEs.&lt;br /&gt;
&lt;br /&gt;
== Using Globalyzer Lite from an Integrated Development Environment ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Lite may be used within many IDEs that support external tools, including Visual Studio, IntelliJ IDEA, and Eclipse. Configuring Lite as an external tool takes some initial setup, but is relatively easy to accomplish. Once configured, Lite may be used through the IDE&#039;s external tool menu with the click of a button. The recommended, documented tools:&lt;br /&gt;
&lt;br /&gt;
# Scan the currently selected file/directory.&lt;br /&gt;
# Scan everything within the parent directory of the currently selected file/directory.&lt;br /&gt;
# Scan the entire project.&lt;br /&gt;
&lt;br /&gt;
Demonstration videos are available for:&lt;br /&gt;
&lt;br /&gt;
* [https://player.vimeo.com/video/137641243 Visual Studio]&lt;br /&gt;
* [https://player.vimeo.com/video/137641242 IntelliJ IDEA]&lt;br /&gt;
* [https://player.vimeo.com/video/137641241 Eclipse]&lt;br /&gt;
&lt;br /&gt;
To configure Lite in the IDE, please see this page: [https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html Lite IDE Usage].&lt;br /&gt;
&lt;br /&gt;
The developer can then use the power of the IDE to refactor the relevant issues or to mark false positives in the code using Globalyzer ignore comments, such as $NON-NLS-L$. For more information, see the Globalyzer Comment Tags in [[ False Positives | False Positives ]] . &lt;br /&gt;
&lt;br /&gt;
Those refactoring and the comment tags are now part of the code: The Continuous Globalization System using the same Lite project definition file will show the same results in the Dashboard.&lt;br /&gt;
&lt;br /&gt;
==How do I install Globalyzer Lite?==&lt;br /&gt;
&lt;br /&gt;
To install the Globalyzer Lite, you first need a Globalyzer account (see [[Globalyzer_Overview_and_General#How_do_I_obtain_a_Globalyzer_account.3F|this FAQ]]). Once you have an account, you log into the Globalyzer Server and at the bottom of your home page there is a link to download Globalyzer Lite.&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite is a standalone Java application. It uses Rule Sets to scan code at the command line. It is used in Jenkins configured for the Continuous G11n System and can be integrated as an external tool in an IDE.  &lt;br /&gt;
&lt;br /&gt;
Please see [https://www.globalyzer.com/gzserver/home/installclient installation] for complete Globalyzer Lite download/installation instructions.&lt;br /&gt;
&lt;br /&gt;
To install:&lt;br /&gt;
&lt;br /&gt;
# Unzip the Globalyzer Lite zip file at a desired location&lt;br /&gt;
# Run either &amp;lt;code&amp;gt;lite-setup.bat&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;lite-setup.sh&amp;lt;/code&amp;gt; depending on your system.&lt;br /&gt;
&lt;br /&gt;
To verify the installation, from a command line at the location that it was installed:&lt;br /&gt;
 java -jar globalyzer-lite.jar -version&lt;br /&gt;
&lt;br /&gt;
or, show the help info:&lt;br /&gt;
 java -jar globalyzer-lite.jar -help&lt;br /&gt;
&lt;br /&gt;
== Sharing Project Definition Files Between IDEs and Build Systems ==&lt;br /&gt;
&lt;br /&gt;
It is common to check in a single project definition file per code repository. However, the desired IDE configuration may sometimes be incompatible with the desired build system configuration.&lt;br /&gt;
&lt;br /&gt;
These incompatibilities are best solved by modifying the project definition file within the build system. The IDE config can then be used as the default.&lt;br /&gt;
&lt;br /&gt;
Here is an example: The desired report type for Globalyzer Lite may be ScanDetailedCSV for developer usage, but will need to be ScanDetailedXML within the build system. The project definition file would then be written out with the &amp;lt;report-type&amp;gt; set to ScanDetailedCSV:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;gzproject&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  &amp;lt;report-type&amp;gt;ScanDetailedCSV&amp;lt;/report-type&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/gzproject&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The build system can then be set to auto-replace &amp;quot;ScanDetailedCSV&amp;quot; with &amp;quot;ScanDetailedXML&amp;quot;. The following Linux command will do so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ sed --in-place &#039;s|ScanDetailedCSV|ScanDetailedXML|&#039; $WORKSPACE/ProjectDefinition.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If desired, the opposite replacement also may be performed at the end of the build.&lt;br /&gt;
&lt;br /&gt;
Finally, here is a bash function to replace the content of any XML field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;replace_xml_token() {&lt;br /&gt;
  token_name=$1&lt;br /&gt;
  new_content=$2&lt;br /&gt;
  sed -ri &amp;quot;s|(&amp;lt;${token_name}&amp;gt;).*(&amp;lt;/${token_name}&amp;gt;)|\1${new_content}\2|g&amp;quot; $WORKSPACE/ProjectDefinition.xml&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It may be used like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ replace_xml_token &amp;quot;report-type&amp;quot; &amp;quot;ScanDetailedXML&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lite IDE Ignore==&lt;br /&gt;
When using Lite in an IDE (see https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html ), you can use the power of the IDE to mark some issues in the code as to be ignored. Globalyzer uses a set of standard comments, namely &amp;lt;code&amp;gt;$NON-NLS-L$&amp;lt;/code&amp;gt;. There are many ways to do so. We will illustrate one such way with Lite in Eclipse. &lt;br /&gt;
&lt;br /&gt;
== Lite is set in Eclipse ==&lt;br /&gt;
To set Lite in your Eclipse environment, refer to https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html#Eclipse ; There are two sections, one for Linux, one for Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:LiteConfigured.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Run Lite ===&lt;br /&gt;
* Select the directory or file you want to analyze&lt;br /&gt;
* Click on the external tools button&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; Lite analyzes the relevant files based on the Globalyzer Project Definition file and shows the clickable results in the Console view.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteRun.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Navigate to the Issue ===&lt;br /&gt;
* Click on the issue in the Console&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; It opens the file and highlights the line with the issue.&lt;br /&gt;
&lt;br /&gt;
=== Refactor the Code or Ignore the Issue===&lt;br /&gt;
Depending on what the developer sees, the issue either needs to be refactored or ignored. If the issue needs to be ignored, the //$NON-NLS-L$ comment needs to be added at the end of that line. One can simply add it by typing it. Some short cut exist and some can be created. For instance:&lt;br /&gt;
&lt;br /&gt;
* Go to the end of the line to ignore and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&lt;br /&gt;
* Choose &amp;quot;nls - non externalize string marker&amp;quot; in the list of templates. &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
* Add the string &amp;quot;nls&amp;quot; and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt; &lt;br /&gt;
* Eclipse proposes the standard $NLS notation by default. Select that notation and type L.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteNlsCtrSpace.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The line now reads:&lt;br /&gt;
    	&amp;lt;code&amp;gt;Locale locale = new Locale(&amp;quot;en&amp;quot;, &amp;quot;US&amp;quot;); //$NON-NLS-L$&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Repeat the process for other false positives&lt;br /&gt;
&lt;br /&gt;
Lines tagged with the &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; will be ignored by Globalyzer the next time you run the Lite external tool.&lt;br /&gt;
&lt;br /&gt;
=== Advanced Template ===&lt;br /&gt;
The previous illustration was done using the default template. You can modify the template to have directly &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; on other key combination or the same &amp;lt;code&amp;gt;nls&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The following image shows how to use &amp;lt;code&amp;gt;nll&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt; to insert directory &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:NllTemplate.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is one way of adding &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; at the end of the line. Some developers will decide on other methods.&lt;br /&gt;
&lt;br /&gt;
=== Globalyzer Lite Plugin for VSCode ===&lt;br /&gt;
&lt;br /&gt;
To Configure the Plugin:&lt;br /&gt;
*Install Globalyzer Lite as directed&lt;br /&gt;
*Open your project folder in VSCode&lt;br /&gt;
*Select “Terminal-&amp;gt;Configure Tasks” from the top menu bar&lt;br /&gt;
[[File:Vccode1.png|800px]]&lt;br /&gt;
* Select “Create tasks.json file from template” from the popup option list&lt;br /&gt;
[[File:Vccode2.png|700px]]&lt;br /&gt;
*Select “Others” from the Task Template list&lt;br /&gt;
[[File:Vccode3.png|700px]]&lt;br /&gt;
[[File:Vccode4.png|800px]]&lt;br /&gt;
*Change the default template for the generated tasks.json file  to match the following:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;2.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;tasks&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;GlobalyzerLite&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;shell&amp;quot;,&lt;br /&gt;
            &amp;quot;command&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
            &amp;quot;args&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;/Applications/Lingoport/globalyzer-lite-6.6.0_8.0/globalyzer-lite.jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-f&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/lingoport/LiteProjectDefinition.xml&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--project-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--scan-items&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${file}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--console-output&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;visual-studio&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;presentation&amp;quot;: {&lt;br /&gt;
                &amp;quot;showReuseMessage&amp;quot;: false,&lt;br /&gt;
                &amp;quot;clear&amp;quot;: true,&lt;br /&gt;
                &amp;quot;revealProblems&amp;quot;: &amp;quot;onProblem&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;problemMatcher&amp;quot;: {&lt;br /&gt;
                &amp;quot;fileLocation&amp;quot;: [&amp;quot;absolute&amp;quot;],&lt;br /&gt;
                &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;,&lt;br /&gt;
                &amp;quot;owner&amp;quot;: &amp;quot;globalyzer&amp;quot;,&lt;br /&gt;
                &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
                    &amp;quot;regexp&amp;quot;: &amp;quot;^(.*)\\((\\d*)\\):\\s+(.*),\\s+(P\\d+):\\s+(.*)&amp;quot;,&lt;br /&gt;
                    &amp;quot;file&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;line&amp;quot;: 2,&lt;br /&gt;
                    &amp;quot;message&amp;quot;: 3,&lt;br /&gt;
                    &amp;quot;severity&amp;quot;: 4,&lt;br /&gt;
                    &amp;quot;code&amp;quot;: 5&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
*“label” is the name of the task - this can be changed to whatever makes the most sense&lt;br /&gt;
*“type” specifies that the command should be run in a shell - required&lt;br /&gt;
*“command” is the command to execute in the shell - required&lt;br /&gt;
*“problemMatcher” used to auto-format the output, &lt;br /&gt;
*“args” specifies the arguments to be passed to the command at execution&lt;br /&gt;
*“value” contains the actual arguments&lt;br /&gt;
**-jar specifies the jar to execute&lt;br /&gt;
***Replace &#039;path/to/globalyzer-lite.jar&#039; with the absolute path to your globalyzer-lite.jar. &lt;br /&gt;
***‘C:\Lingoport\globalyzer-lite-x.y.z\globalyzer-lite.jar’&lt;br /&gt;
**-f is the name of the Project Definition file&lt;br /&gt;
***Replace the ‘/path/to/LiteProjectDefinition.xml’ with the workspace relative path of your Project Definition file&lt;br /&gt;
***E.g. ${workspaceFolder}/lingoport/LiteProjectDefinition.xml&lt;br /&gt;
**--project-path is the path of this project&lt;br /&gt;
***Leave this as the ${workspaceFolder} VSCode environment variable&lt;br /&gt;
**--scan-items Overrides the default settings for which files and directories to scan&lt;br /&gt;
***Use ${file} to scan only the currently selected file in VSCode&lt;br /&gt;
**--console-output prints scan report output to console with specified format.&lt;br /&gt;
***Leave as &amp;quot;visual-studio&amp;quot; - format report output for visual studio. This allows the user to click on a candidate issue in the output and jump to its location within a file.&lt;br /&gt;
*“quoting” specifies how to handle quoting within the args - required as “weak”&lt;br /&gt;
*“presentation” configures how the workspace should handle displaying the task as it executes&lt;br /&gt;
*“problemMatcher” uses a regular expression to extract the problems found in the scan and display them in the problems panel&lt;br /&gt;
&lt;br /&gt;
===To Execute a Scan on the Current Opened File:===&lt;br /&gt;
1.Select “Terminal-&amp;gt;Run Task” and choose the GlobalyzerLite task from the list in the modal window&lt;br /&gt;
&lt;br /&gt;
2.Scan will execute in a VSCode terminal panel and display problems in the problems panel if any are found. Terminal output and problem panel screenshots on next page.&lt;br /&gt;
[[File:Vccode5.png|700px]]&lt;br /&gt;
[[File:Vccode6.png|700px]]&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Installing_Docker_on_Amazon_Linux_2&amp;diff=97987</id>
		<title>Installing Docker on Amazon Linux 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Installing_Docker_on_Amazon_Linux_2&amp;diff=97987"/>
		<updated>2023-09-27T18:24:16Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Configure Reverse Proxy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
On the system (most likely a virtual machine) dedicated to Command Center, make sure you have the latest version of docker up and running. The following steps may help.&lt;br /&gt;
&lt;br /&gt;
A user with &#039;&#039;&#039;sudo&#039;&#039;&#039; privileges is required to run most commands.  The Amazon Linux user may be &#039;ec2-user&#039;. &lt;br /&gt;
&lt;br /&gt;
==Uninstall old docker versions==&lt;br /&gt;
&lt;br /&gt;
This is an optional step in case your docker version is out of date:&lt;br /&gt;
&lt;br /&gt;
    sudo yum remove docker \&lt;br /&gt;
                  docker-client \&lt;br /&gt;
                  docker-client-latest \&lt;br /&gt;
                  docker-common \&lt;br /&gt;
                  docker-latest \&lt;br /&gt;
                  docker-latest-logrotate \&lt;br /&gt;
                  docker-logrotate \&lt;br /&gt;
                  docker-engine&lt;br /&gt;
&lt;br /&gt;
==Install docker using the repository==&lt;br /&gt;
&lt;br /&gt;
    sudo yum update&lt;br /&gt;
    sudo yum install docker&lt;br /&gt;
&lt;br /&gt;
    wget https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) &lt;br /&gt;
    sudo mv docker-compose-$(uname -s)-$(uname -m) /usr/local/bin/docker-compose&lt;br /&gt;
    sudo chmod -v +x /usr/local/bin/docker-compose&lt;br /&gt;
&lt;br /&gt;
==Start Docker.==&lt;br /&gt;
Start docker using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl start docker&lt;br /&gt;
&lt;br /&gt;
Enable the Docker service to start automatically on system boot by running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl enable docker&lt;br /&gt;
&lt;br /&gt;
==Verify that Docker Engine is installed correctly ==&lt;br /&gt;
Run the hello-world image.&lt;br /&gt;
&lt;br /&gt;
    $ sudo docker run hello-world&lt;br /&gt;
&lt;br /&gt;
This command will run a test container and display a message indicating that the installation is working properly.&lt;br /&gt;
&lt;br /&gt;
== Install other packages ==&lt;br /&gt;
In anticipation of installing Command Center, the following packages should be installed, if not already on the system.&lt;br /&gt;
&lt;br /&gt;
*git&lt;br /&gt;
*zip and unzip&lt;br /&gt;
&lt;br /&gt;
   sudo yum install git zip unzip&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Return to the [[Command Center Installation|Installation page]] to continue installing Command Center on the system&lt;br /&gt;
&lt;br /&gt;
== Configure HTTP/HTTPS and TimeOut through Reverse Proxy ==&lt;br /&gt;
&lt;br /&gt;
Please see [[HTTPS_configuration]]&lt;br /&gt;
&lt;br /&gt;
Be sure to set an apache timeout by modifying or appending the line:&lt;br /&gt;
&lt;br /&gt;
TimeOut 600&lt;br /&gt;
to /etc/httpd/conf/httpd.conf&lt;br /&gt;
&lt;br /&gt;
As mentioned in the instructions above.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Installing_Docker_on_Amazon_Linux_2&amp;diff=97986</id>
		<title>Installing Docker on Amazon Linux 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Installing_Docker_on_Amazon_Linux_2&amp;diff=97986"/>
		<updated>2023-09-27T18:23:47Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Install other packages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
On the system (most likely a virtual machine) dedicated to Command Center, make sure you have the latest version of docker up and running. The following steps may help.&lt;br /&gt;
&lt;br /&gt;
A user with &#039;&#039;&#039;sudo&#039;&#039;&#039; privileges is required to run most commands.  The Amazon Linux user may be &#039;ec2-user&#039;. &lt;br /&gt;
&lt;br /&gt;
==Uninstall old docker versions==&lt;br /&gt;
&lt;br /&gt;
This is an optional step in case your docker version is out of date:&lt;br /&gt;
&lt;br /&gt;
    sudo yum remove docker \&lt;br /&gt;
                  docker-client \&lt;br /&gt;
                  docker-client-latest \&lt;br /&gt;
                  docker-common \&lt;br /&gt;
                  docker-latest \&lt;br /&gt;
                  docker-latest-logrotate \&lt;br /&gt;
                  docker-logrotate \&lt;br /&gt;
                  docker-engine&lt;br /&gt;
&lt;br /&gt;
==Install docker using the repository==&lt;br /&gt;
&lt;br /&gt;
    sudo yum update&lt;br /&gt;
    sudo yum install docker&lt;br /&gt;
&lt;br /&gt;
    wget https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) &lt;br /&gt;
    sudo mv docker-compose-$(uname -s)-$(uname -m) /usr/local/bin/docker-compose&lt;br /&gt;
    sudo chmod -v +x /usr/local/bin/docker-compose&lt;br /&gt;
&lt;br /&gt;
==Start Docker.==&lt;br /&gt;
Start docker using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl start docker&lt;br /&gt;
&lt;br /&gt;
Enable the Docker service to start automatically on system boot by running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl enable docker&lt;br /&gt;
&lt;br /&gt;
==Verify that Docker Engine is installed correctly ==&lt;br /&gt;
Run the hello-world image.&lt;br /&gt;
&lt;br /&gt;
    $ sudo docker run hello-world&lt;br /&gt;
&lt;br /&gt;
This command will run a test container and display a message indicating that the installation is working properly.&lt;br /&gt;
&lt;br /&gt;
== Install other packages ==&lt;br /&gt;
In anticipation of installing Command Center, the following packages should be installed, if not already on the system.&lt;br /&gt;
&lt;br /&gt;
*git&lt;br /&gt;
*zip and unzip&lt;br /&gt;
&lt;br /&gt;
   sudo yum install git zip unzip&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Return to the [[Command Center Installation|Installation page]] to continue installing Command Center on the system&lt;br /&gt;
&lt;br /&gt;
== Configure Reverse Proxy ==&lt;br /&gt;
&lt;br /&gt;
Please see [[HTTPS_configuration]]&lt;br /&gt;
&lt;br /&gt;
Be sure to set an apache timeout by modifying or appending the line:&lt;br /&gt;
&lt;br /&gt;
TimeOut 600&lt;br /&gt;
to /etc/httpd/conf/httpd.conf&lt;br /&gt;
&lt;br /&gt;
As mentioned in the instructions above.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=HTTPS_configuration&amp;diff=97985</id>
		<title>HTTPS configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=HTTPS_configuration&amp;diff=97985"/>
		<updated>2023-09-27T18:22:31Z</updated>

		<summary type="html">&lt;p&gt;Masnes: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
HTTPS configuration is often achieved via a reverse proxy hosted on the Linux system. Instructions to do so using Apache are as follows for CentOS / RHEL:&lt;br /&gt;
&lt;br /&gt;
1. Install Apache and mod_ssl (https support for apache)&lt;br /&gt;
&lt;br /&gt;
 sudo yum install httpd&lt;br /&gt;
 sudo yum install mod_ssl&lt;br /&gt;
&lt;br /&gt;
2. Configure SELinux to allow Apache network connections&lt;br /&gt;
&lt;br /&gt;
 sudo setsebool -P httpd_can_network_connect true&lt;br /&gt;
&lt;br /&gt;
3. Set an apache timeout by modifying or appending the line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TimeOut 600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to /etc/httpd/conf/httpd.conf&lt;br /&gt;
&lt;br /&gt;
4. Add http (not s) config file with the following content (edit as appropriate):&lt;br /&gt;
&lt;br /&gt;
 vi /etc/httpd/conf.d/lingoport-apps.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8083 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8083/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8083/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8083 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8083/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8083/&lt;br /&gt;
&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
5. Restart Apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl restart httpd&lt;br /&gt;
&lt;br /&gt;
6. Acquire a certificate. Please follow your organization&#039;s instructions to do so. You should have a private key, and acquire both a certificate and a certificate chain. Some orgs may provide the certificate in the same file as the chain. Please request .pem style certificates, or convert the certificates to .pem.&lt;br /&gt;
&lt;br /&gt;
7. Place the certificate and private key on a secure location on your system. Standard location is /etc/pki/tls/, with the certificate under /etc/pki/tls/certs/ and the associated private key under /etc/pki/tls/private/&lt;br /&gt;
&lt;br /&gt;
8. Add Apache config to utilize the certificate:&lt;br /&gt;
&lt;br /&gt;
 vi /etc/httpd/conf.d/lingoport-apps-ssl.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
    DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8083 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8083/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8083/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8083 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8083/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8083/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# SSL Settings. These may be placed in other config files instead, but are left here for convenience. &lt;br /&gt;
SSLEngine on&lt;br /&gt;
&lt;br /&gt;
# BEGIN Possible security settings - based on LetsEncrypt recommendations as of Feb 2023.&lt;br /&gt;
# ---&lt;br /&gt;
# Please adjust to your own organization&#039;s guidelines!&lt;br /&gt;
SSLHonorCipherOrder     off&lt;br /&gt;
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1&lt;br /&gt;
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&lt;br /&gt;
&lt;br /&gt;
SSLOptions +StrictRequire&lt;br /&gt;
&lt;br /&gt;
# Add vhost name to log entries:&lt;br /&gt;
LogFormat &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot; vhost_combined&lt;br /&gt;
LogFormat &amp;quot;%v %h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b&amp;quot; vhost_common&lt;br /&gt;
# ---&lt;br /&gt;
# END Possible security settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Reference the certificates:&lt;br /&gt;
SSLCertificateFile /etc/pki/tls/certs/&amp;lt;yourserver.yourorg.com&amp;gt;.pem&lt;br /&gt;
SSLCertificateKeyFile /etc/pki/tls/private/&amp;lt;yourserversprivatekey&amp;gt;.pem&lt;br /&gt;
&lt;br /&gt;
# Not necessary if the certificate file includes a chain as well. See [[apache doc|https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile]] &lt;br /&gt;
SSLCertificateChainFile /etc/letsencrypt/live/dockerdev1.lingoport.io/chain.pem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
9. Optionally enforce a redirect to https by uncommenting and filling out the following section in /etc/httpd/conf.d/lingoport-apps.conf&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteCond %{SERVER_NAME} =example.somecorp.com&lt;br /&gt;
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. Restart Apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
    sudo systemctl restart httpd&lt;br /&gt;
&lt;br /&gt;
11.  Set up Apache to start automatically after a reboot.&lt;br /&gt;
&lt;br /&gt;
    sudo systemctl enable httpd&lt;br /&gt;
&lt;br /&gt;
To continue on Command Center installation, please go to:&lt;br /&gt;
* [[Command Center Installation | Command Center Installation ]]&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=GitHub_Pull_Requests&amp;diff=97458</id>
		<title>GitHub Pull Requests</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=GitHub_Pull_Requests&amp;diff=97458"/>
		<updated>2023-05-25T23:35:20Z</updated>

		<summary type="html">&lt;p&gt;Masnes: MediaWiki Formatting - removed &amp;lt;pre&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GitHub Pull Requests &amp;amp; Commits Globalyzer Analysis Webhook =&lt;br /&gt;
&lt;br /&gt;
Follow these steps to set up a Webhook to automate Globalyzer&#039;s analysis on your repository&#039;s pull requests and/or commits.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Video Guide:&#039;&#039;&#039; https://vimeo.com/817611647&lt;br /&gt;
&lt;br /&gt;
== Jenkins Set Up ==&lt;br /&gt;
&lt;br /&gt;
=== Install Globalyzer Lite ===&lt;br /&gt;
1. If not done so already, move the root Globalyzer Lite folder to your Jenkins file system. Create a `lingoport` directory at the root of your Jenkins system and place the downloaded globalyzer-lite folder there (e.g., /var/lib/jenkins/lingoport/globalyzer-lite). &#039;&#039;To avoid any errors, please do not modify or move the files in this folder unless specifically directed to do so.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2. Install Globalyzer Lite on your Jenkins system by following the instructions in the `README.txt` file (located in the globalyzer-lite folder).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make sure to install Lite as the `jenkins` user!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; You should see the success message &amp;quot;Globalyzer Lite installation completed successfully&amp;quot; before proceeding.&lt;br /&gt;
&lt;br /&gt;
3. You will need to download the Globalyzer.license file from here: https://www.globalyzer.com/gzserver/home/installclient (you may need to log in with your Globalyzer.com credentials). Once downloaded, place the Globalyzer.license file into the `lingoport` directory from step 1.&lt;br /&gt;
&lt;br /&gt;
=== Set Up GitHub Credentials ===&lt;br /&gt;
4. In this folder, you will find the `github.properties` file. Your GitHub credentials will need to be set in this file before proceeding (failure to set these credentials will result in an error).&lt;br /&gt;
&lt;br /&gt;
* For `github.login`, enter your GitHub username. Note this is not your GitHub login email, it is the username as it appears after you sign in.&lt;br /&gt;
* For `github.oauth`, you will need to enter a Personal Access Token created for your GitHub account. To generate an access token:&lt;br /&gt;
** Sign in to GitHub.&lt;br /&gt;
** Select your profile icon on the top right hand side and select &amp;quot;Settings&amp;quot;.&lt;br /&gt;
** Scroll down and select &amp;quot;Developer settings&amp;quot;.&lt;br /&gt;
** Select &amp;quot;Personal access tokens&amp;quot; &amp;gt; &amp;quot;Tokens (classic)&amp;quot;.&lt;br /&gt;
** Select &amp;quot;Generate new token&amp;quot; &amp;gt; &amp;quot;Generate new token (classic)&amp;quot;.&lt;br /&gt;
** Add a note and expiration date as desired.&lt;br /&gt;
** Under &amp;quot;Select scopes&amp;quot;, select &amp;quot;**repo**&amp;quot;.&lt;br /&gt;
** Select &amp;quot;Generate token&amp;quot;.&lt;br /&gt;
** Copy the generated token and paste it into the file. Note that the token will disappear after the window is closed/changed.&lt;br /&gt;
&lt;br /&gt;
=== Create &amp;amp; Configure Jenkins Job ===&lt;br /&gt;
5. On Jenkins, navigate to &amp;quot;Manage Jenkins&amp;quot; &amp;gt; &amp;quot;Configure System&amp;quot; &amp;gt; &amp;quot;Global properties&amp;quot; &amp;gt; select the &amp;quot;Environment variables&amp;quot; box &amp;gt; select &amp;quot;Add&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Under name, enter `GITHUB_PRC_FILES` and for the value, enter the file path to the webhook file directory in the globalyzer-lite folder, for example: `$JENKINS_HOME/lingoport/globalyzer-lite-*.*.*_*.*/GitHub_PRC`&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Note&#039;&#039;&#039;:  Whenever a new version of Lite is downloaded, only this environment variable&#039;s value needs to be changed rather than having to reconfigure every Jenkins job.&lt;br /&gt;
&lt;br /&gt;
6. On Jenkins, select &amp;quot;New Item&amp;quot; and create a new &amp;quot;Freestyle project&amp;quot;. Give it a name, we recommend the format &amp;quot;Team.RepoName-GitHub-COMMAND&amp;quot; where COMMAND could be PullRequest, Commit, or PRC (for both PRs and commits) depending on what you would like to be scanned.&lt;br /&gt;
&lt;br /&gt;
7. Configure the project:&lt;br /&gt;
* &#039;&#039;&#039;General:&#039;&#039;&#039;&lt;br /&gt;
** Check the &amp;quot;This project is parameterized&amp;quot; box. Two **string** parameters are needed for the job to run properly.&lt;br /&gt;
** payload: The first parameter is named `payload` and the default value is `NOT_SET`. This parameter is NOT set by hand. GitHub&#039;s webhooks generate data based on the GitHub event and send the JSON data to Jenkins as the payload parameter. See the [GitHub Page](https://developer.github.com/webhooks/#payloads) for more details.&lt;br /&gt;
** LITE_PROJECT_DEFINITION: The second parameter is named `LITE_PROJECT_DEFINITION` and it&#039;s default value is `DEFAULT`. This parameter is the location of the project definition file that will be used when scanning (such as: $JENKINS_HOME/jobs/$JOB_NAME/workspace/lingoport/LiteProjectDefinition.xml). If DEFAULT, it will use the lingoport/LiteProjectDefinition.xml file from the working branch of the pull request/commit.  We highly recommend setting up concurrent build throttling as well to allow builds to process one at a time. Please refer to the [Throttle Concurrent Builds](#throttle-concurrent-builds) section at the bottom of the page for more details.&lt;br /&gt;
** Source Code Management: You may leave this as &amp;quot;None&amp;quot;. The job will locate the corresponding repo and branch through the webhook&#039;s payload data.&lt;br /&gt;
** Build Triggers:  Check the &amp;quot;Trigger builds remotely (e.g., from scripts)&amp;quot; box. Under &amp;quot;Authentication Token&amp;quot;, enter a token to trigger the build remotely, we recommend `HOOK`. This token will be used to set up the webhook in the following section.&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If your job does not have the &amp;quot;Trigger builds remotely&amp;quot; option, it is likely that your Jenkins user does not have the necessary permissions.&lt;br /&gt;
** Build: Select &amp;quot;Add build step&amp;quot; and select the &amp;quot;Execute shell&amp;quot; option. Under &amp;quot;Command&amp;quot;, enter the code to execute the `job_lite_pr.sh` file and pass `pr_message.html` as an argument. If you haven&#039;t already, configure the `GITHUB_PRC_FILES` environment variable (refer to step 5) before proceeding.&lt;br /&gt;
        bash&lt;br /&gt;
        set +x&lt;br /&gt;
        $GITHUB_PRC_FILES/job_lite_pr.sh $GITHUB_PRC_FILES/pr_message.html&lt;br /&gt;
        &lt;br /&gt;
8. Select &amp;quot;Save&amp;quot; to save the project configuration.&lt;br /&gt;
9. Install jq on the system (if not already done): https://stedolan.github.io/jq/download/. jq is used to process the incoming webhook&#039;s JSON data.&lt;br /&gt;
&lt;br /&gt;
=== Create The Github Webhook ===&lt;br /&gt;
10. Navigate to the repository where the webhook will be created.&lt;br /&gt;
11. Select &amp;quot;Settings&amp;quot; &amp;gt; &amp;quot;Webhooks&amp;quot; &amp;gt; &amp;quot;Add webhook&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;Note:&#039;&#039;&#039; You will need admin access to the repository to be able to access the settings.&lt;br /&gt;
12. Under &amp;quot;Payload URL&amp;quot;, use the following URL to trigger the build remotely: `https://JENKINS_URL/buildByToken/buildWithParameters/build?job=JOB_NAME&amp;amp;token=TOKEN`&lt;br /&gt;
* `JENKINS_URL` is the URL to your Jenkins instance.&lt;br /&gt;
*`JOB_NAME` is the Jenkins job name you entered in step 6.&lt;br /&gt;
*`TOKEN` is the the token you entered in the &amp;quot;Build Triggers&amp;quot; subsection of step 7.&lt;br /&gt;
13. Under &amp;quot;Content type&amp;quot;, select `application/x-www-form-urlencoded`.&lt;br /&gt;
14. Under &amp;quot;Which events would you like to trigger this webhook?&amp;quot;, select &amp;quot;Let me select individual events&amp;quot; and then check &amp;quot;Pull Requests&amp;quot; and/or &amp;quot;Pushes&amp;quot; depending on if you want Globalyzer to scan pull requests, commits, or both.&lt;br /&gt;
15. Ensure that the webhook is set to &amp;quot;Active&amp;quot;.&lt;br /&gt;
16. Select &amp;quot;Add webhook&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
17. Navigate to the repository where the webhook was added.&lt;br /&gt;
18. Open/update a pull request or perform a commit depending on the option(s) you selected in step 14.&lt;br /&gt;
19. Once complete, navigate to the Jenkins job that was created in step 6. If all of the connections were completed correctly, a build should have automatically been started.&lt;br /&gt;
* If the build did not start automatically, navigate to the Github repo and select &amp;quot;Settings&amp;quot; &amp;gt; &amp;quot;Webhooks&amp;quot;. Locate and select the webhook created in the last section and click &amp;quot;Recent Deliveries&amp;quot;. Check for any potential issues that may have prevented the webhook from delivering the payload before trying again. Once you are ready to try again, select &amp;quot;Redeliver&amp;quot; &amp;gt; &amp;quot;Yes, redeliver this payload&amp;quot;.&lt;br /&gt;
** If you see an error that says &amp;quot;We couldn’t deliver this payload: failed to connect to host&amp;quot;, there may be a proxy or firewall issue that is blocking the webhook. See GitHub&#039;s guide to GitHub IP addresses [https://docs.github.com/en/enterprise-cloud@latest/authentication/keeping-your-account-and-data-secure/about-githubs-ip-addresses here], and check with your IT and networking departments to set up access or forwarding of GitHub&#039;s connections before trying again.&lt;br /&gt;
** If you see a 403 error (&amp;quot;No valid crumb was included in the request&amp;quot;), you may need to use a Jenkins API token as an added security measure. From your Jenkins home page, select the user on the top right hand side of the page &amp;gt; select &amp;quot;Configure&amp;quot;. Under API Tokens, select &amp;quot;Add New Token&amp;quot; &amp;gt; enter a name &amp;gt; select &amp;quot;Generate&amp;quot;. Copy the token (note that it will disappear once the page is changed/closed). Navigate to the webhook created in step 16 and modify the URL to include the Jenkins credentials like so: `http://JENKINS_USERNAME:JENKINS_TOKEN@JENKINS_URL/...` (Note the : and @ characters.)&lt;br /&gt;
*** `JENKINS_USERNAME`: The username used to log into Jenkins. Note that this is not the full name of the user.&lt;br /&gt;
*** `JENKINS_TOKEN`: The API token generated from Jenkins.&lt;br /&gt;
** If you see a 404 error, please double check your URL from step 12. If everything looks correct, you may need to use this URL format instead for the GitHub webhook: `https://JENKINS_URL/job/JOB_NAME/buildWithParameters?token=TOKEN`.&lt;br /&gt;
20. If the build...&lt;br /&gt;
* &#039;&#039;&#039;Finished Successfully:&#039;&#039;&#039; Navigate to the pull request/commit from step 18 and look at the comments.&lt;br /&gt;
** If everything was set up correctly, you should see a new comment titled &amp;quot;Globalyzer Analysis Summary&amp;quot; with a concise summary of i18n issues detected by Globalyzer Lite. With that, &#039;&#039;&#039;you are done!&#039;&#039;&#039; Future pull requests and/or commits should automatically trigger the corresponding Jenkins job and run the Globalyzer analysis.&lt;br /&gt;
** If a comment was not created on the corresponding pull request/commit, there may be an issue. Navigate to the Jenkins job &amp;gt; select the most recent build &amp;gt; select &amp;quot;Console Output&amp;quot; &amp;gt; locate and fix any errors that may have occurred. If there are no visible errors and the output &amp;quot;Globalyzer Analysis Summary added to {commit/pull-request}&amp;quot; is present but there is no comment, please contact support@lingoport.com for assistance.&lt;br /&gt;
* &#039;&#039;&#039;Failed:&#039;&#039;&#039; Select the most recent build &amp;gt; select &amp;quot;Console Output&amp;quot;. Locate and fix any errors that may have occurred before trying step 18 again.&lt;br /&gt;
** If you see the error &amp;quot;Host key verification failed&amp;quot; or &amp;quot;git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.&amp;quot;, you will need to create an ssh key. If you do not already have a .ssh directory (it may be hidden) on the root of your Jenkins system, create the directory before proceeding.&lt;br /&gt;
*** If you already have a .ssh directory, check if you have a file named `id_rsa.pub`. If so, you may skip this step. If you do not, navigate to the .ssh directory and run the command `ssh-keygen`. It will ask where you want to save the key, it should default to the .ssh directory (enter the path to the Jenkins .ssh directory if not). Enter a passphrase if desired (it will ask you to enter it twice) to proceed. Once the key has been saved, navigate to the .ssh folder and you should see two new files: `id_rsa.pub` and `id_rsa`.&lt;br /&gt;
*** Next, sign in to GitHub &amp;gt; select your profile icon on the top right hand side and select &amp;quot;Settings&amp;quot; &amp;gt; select &amp;quot;SSH and GPG keys&amp;quot; &amp;gt; select &amp;quot;New SSH key&amp;quot;. Enter a title and leave the &amp;quot;Key type&amp;quot; as Authentication Key. For the &amp;quot;Key&amp;quot; field, paste the contents of the `id_rsa.pub` file and select &amp;quot;Add SSH Key&amp;quot;. It is also worth making sure that GitHub is on your list of known hosts. To check, navigate to the .ssh folder on your Jenkins system and view the `known_hosts` file. If github.com is not present in the file (or the file does not exist), you will need to add it either manually with the command: `ssh-keyscan -t rsa github.com &amp;gt;&amp;gt; &amp;lt;PATH_TO_SSH_FOLDER&amp;gt;/.ssh/known_hosts` or by letting ssh do it for you when you run a git command and entering &amp;quot;yes&amp;quot; when prompted. Once complete, try step 18 again.&lt;br /&gt;
** If you see the error &amp;quot;Error: Lite failed,  GlobalyzerLicense: Cannot find license file&amp;quot;, refer to step 3. Ensure that the file is in the `lingoport` directory (the program will attempt to look here: `/var/lib/jenkins/lingoport` for the license file). If your license has expired, please download the license again.&lt;br /&gt;
** If the build finished successfully but you see an error like so: &amp;quot;main ERROR Unable to create file /root/.globalyzer/log/globalyzer.log&amp;quot;, you may have installed Globalyzer Lite as the root user instead of the jenkins user (refer to step 2). To fix this, navigate to your Jenkins file system &amp;gt; locate the Globalyzer Lite folder &amp;gt; locate the `log4j2.xml` file. Modify the LOG_DIR variable like so: `&amp;lt;Property name=&amp;quot;LOG_DIR&amp;quot;&amp;gt;/var/lib/jenkins/.globalyzer/log/globalyzer.log&amp;lt;/Property&amp;gt;`.&lt;br /&gt;
*** If you are using an older version of Lite, you may have a `log4j.properties` file instead. If so, you want to modify the log4j.appender.FILE.File variable like so: `log4j.appender.FILE.File=/var/lib/jenkins/.globalyzer/log/globalyzer.log`.&lt;br /&gt;
*** If you see the error &amp;quot;File /var/lib/jenkins/.globalyzer/log/globalyzer.log exists and is not a directory. Unable to create directory&amp;quot; after this fix, you just need to delete the existing .globalyzer directory from your Jenkins system by running: `rm -rf /var/lib/jenkins/.globalyzer`.&lt;br /&gt;
&lt;br /&gt;
=== Optional Additions ===&lt;br /&gt;
&lt;br /&gt;
==== Throttle Concurrent Builds ====&lt;br /&gt;
- We highly recommend installing the &amp;quot;Throttle Concurrent Builds&amp;quot; plugin: https://plugins.jenkins.io/throttle-concurrents/throttling if not done so already. This allows multiple webhook calls to this job to execute one after the other, rather than all at the same time.&lt;br /&gt;
- After installing the plugin, navigate to the Jenkins job created in step 6 and select &amp;quot;Configure&amp;quot;. Select the &amp;quot;Throttle Concurrent Builds&amp;quot; checkbox. Select the &amp;quot;Throttle this project alone&amp;quot; option and configure the &amp;quot;Maximum Total Concurrent Builds&amp;quot; and &amp;quot;Maximum Concurrent Builds Per Node&amp;quot;, we recommend leaving both values as 1 to allow the job to process each build one at a time.&lt;br /&gt;
&lt;br /&gt;
==== Discard Old Builds ====&lt;br /&gt;
- We also recommend installing the &amp;quot;Discard Old Build&amp;quot; Jenkins plugin: https://plugins.jenkins.io/discard-old-build/ to automatically remove old builds. This plugin is highly configurable and helps to reduce build clutter.&lt;br /&gt;
- After installing the plugin, navigate to the Jenkins job created in step 6 and select &amp;quot;Configure&amp;quot;. Under &amp;quot;Post-build Actions&amp;quot;, select &amp;quot;Add post-build action&amp;quot;, and select &amp;quot;Discard Old Builds&amp;quot;. You can customize how the builds are discarded here (i.e., over a set number of days, keep a max number of builds, etc.).&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=GitHub_Pull_Requests&amp;diff=97457</id>
		<title>GitHub Pull Requests</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=GitHub_Pull_Requests&amp;diff=97457"/>
		<updated>2023-05-25T23:34:53Z</updated>

		<summary type="html">&lt;p&gt;Masnes: MediaWiki formatting (kept pre to avoid nasty diff)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GitHub Pull Requests &amp;amp; Commits Globalyzer Analysis Webhook =&lt;br /&gt;
&lt;br /&gt;
Follow these steps to set up a Webhook to automate Globalyzer&#039;s analysis on your repository&#039;s pull requests and/or commits.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Video Guide:&#039;&#039;&#039; https://vimeo.com/817611647&lt;br /&gt;
&lt;br /&gt;
== Jenkins Set Up ==&lt;br /&gt;
&lt;br /&gt;
=== Install Globalyzer Lite ===&lt;br /&gt;
1. If not done so already, move the root Globalyzer Lite folder to your Jenkins file system. Create a `lingoport` directory at the root of your Jenkins system and place the downloaded globalyzer-lite folder there (e.g., /var/lib/jenkins/lingoport/globalyzer-lite). &#039;&#039;To avoid any errors, please do not modify or move the files in this folder unless specifically directed to do so.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2. Install Globalyzer Lite on your Jenkins system by following the instructions in the `README.txt` file (located in the globalyzer-lite folder).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make sure to install Lite as the `jenkins` user!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; You should see the success message &amp;quot;Globalyzer Lite installation completed successfully&amp;quot; before proceeding.&lt;br /&gt;
&lt;br /&gt;
3. You will need to download the Globalyzer.license file from here: https://www.globalyzer.com/gzserver/home/installclient (you may need to log in with your Globalyzer.com credentials). Once downloaded, place the Globalyzer.license file into the `lingoport` directory from step 1.&lt;br /&gt;
&lt;br /&gt;
=== Set Up GitHub Credentials ===&lt;br /&gt;
4. In this folder, you will find the `github.properties` file. Your GitHub credentials will need to be set in this file before proceeding (failure to set these credentials will result in an error).&lt;br /&gt;
&lt;br /&gt;
* For `github.login`, enter your GitHub username. Note this is not your GitHub login email, it is the username as it appears after you sign in.&lt;br /&gt;
* For `github.oauth`, you will need to enter a Personal Access Token created for your GitHub account. To generate an access token:&lt;br /&gt;
** Sign in to GitHub.&lt;br /&gt;
** Select your profile icon on the top right hand side and select &amp;quot;Settings&amp;quot;.&lt;br /&gt;
** Scroll down and select &amp;quot;Developer settings&amp;quot;.&lt;br /&gt;
** Select &amp;quot;Personal access tokens&amp;quot; &amp;gt; &amp;quot;Tokens (classic)&amp;quot;.&lt;br /&gt;
** Select &amp;quot;Generate new token&amp;quot; &amp;gt; &amp;quot;Generate new token (classic)&amp;quot;.&lt;br /&gt;
** Add a note and expiration date as desired.&lt;br /&gt;
** Under &amp;quot;Select scopes&amp;quot;, select &amp;quot;**repo**&amp;quot;.&lt;br /&gt;
** Select &amp;quot;Generate token&amp;quot;.&lt;br /&gt;
** Copy the generated token and paste it into the file. Note that the token will disappear after the window is closed/changed.&lt;br /&gt;
&lt;br /&gt;
=== Create &amp;amp; Configure Jenkins Job ===&lt;br /&gt;
5. On Jenkins, navigate to &amp;quot;Manage Jenkins&amp;quot; &amp;gt; &amp;quot;Configure System&amp;quot; &amp;gt; &amp;quot;Global properties&amp;quot; &amp;gt; select the &amp;quot;Environment variables&amp;quot; box &amp;gt; select &amp;quot;Add&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Under name, enter `GITHUB_PRC_FILES` and for the value, enter the file path to the webhook file directory in the globalyzer-lite folder, for example: `$JENKINS_HOME/lingoport/globalyzer-lite-*.*.*_*.*/GitHub_PRC`&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Note&#039;&#039;&#039;:  Whenever a new version of Lite is downloaded, only this environment variable&#039;s value needs to be changed rather than having to reconfigure every Jenkins job.&lt;br /&gt;
&lt;br /&gt;
6. On Jenkins, select &amp;quot;New Item&amp;quot; and create a new &amp;quot;Freestyle project&amp;quot;. Give it a name, we recommend the format &amp;quot;Team.RepoName-GitHub-COMMAND&amp;quot; where COMMAND could be PullRequest, Commit, or PRC (for both PRs and commits) depending on what you would like to be scanned.&lt;br /&gt;
&lt;br /&gt;
7. Configure the project:&lt;br /&gt;
* &#039;&#039;&#039;General:&#039;&#039;&#039;&lt;br /&gt;
** Check the &amp;quot;This project is parameterized&amp;quot; box. Two **string** parameters are needed for the job to run properly.&lt;br /&gt;
** payload: The first parameter is named `payload` and the default value is `NOT_SET`. This parameter is NOT set by hand. GitHub&#039;s webhooks generate data based on the GitHub event and send the JSON data to Jenkins as the payload parameter. See the [GitHub Page](https://developer.github.com/webhooks/#payloads) for more details.&lt;br /&gt;
** LITE_PROJECT_DEFINITION: The second parameter is named `LITE_PROJECT_DEFINITION` and it&#039;s default value is `DEFAULT`. This parameter is the location of the project definition file that will be used when scanning (such as: $JENKINS_HOME/jobs/$JOB_NAME/workspace/lingoport/LiteProjectDefinition.xml). If DEFAULT, it will use the lingoport/LiteProjectDefinition.xml file from the working branch of the pull request/commit.  We highly recommend setting up concurrent build throttling as well to allow builds to process one at a time. Please refer to the [Throttle Concurrent Builds](#throttle-concurrent-builds) section at the bottom of the page for more details.&lt;br /&gt;
** Source Code Management: You may leave this as &amp;quot;None&amp;quot;. The job will locate the corresponding repo and branch through the webhook&#039;s payload data.&lt;br /&gt;
** Build Triggers:  Check the &amp;quot;Trigger builds remotely (e.g., from scripts)&amp;quot; box. Under &amp;quot;Authentication Token&amp;quot;, enter a token to trigger the build remotely, we recommend `HOOK`. This token will be used to set up the webhook in the following section.&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If your job does not have the &amp;quot;Trigger builds remotely&amp;quot; option, it is likely that your Jenkins user does not have the necessary permissions.&lt;br /&gt;
** Build: Select &amp;quot;Add build step&amp;quot; and select the &amp;quot;Execute shell&amp;quot; option. Under &amp;quot;Command&amp;quot;, enter the code to execute the `job_lite_pr.sh` file and pass `pr_message.html` as an argument. If you haven&#039;t already, configure the `GITHUB_PRC_FILES` environment variable (refer to step 5) before proceeding.&lt;br /&gt;
        bash&lt;br /&gt;
        set +x&lt;br /&gt;
        $GITHUB_PRC_FILES/job_lite_pr.sh $GITHUB_PRC_FILES/pr_message.html&lt;br /&gt;
        &lt;br /&gt;
8. Select &amp;quot;Save&amp;quot; to save the project configuration.&lt;br /&gt;
9. Install jq on the system (if not already done): https://stedolan.github.io/jq/download/. jq is used to process the incoming webhook&#039;s JSON data.&lt;br /&gt;
&lt;br /&gt;
=== Create The Github Webhook ===&lt;br /&gt;
10. Navigate to the repository where the webhook will be created.&lt;br /&gt;
11. Select &amp;quot;Settings&amp;quot; &amp;gt; &amp;quot;Webhooks&amp;quot; &amp;gt; &amp;quot;Add webhook&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;Note:&#039;&#039;&#039; You will need admin access to the repository to be able to access the settings.&lt;br /&gt;
12. Under &amp;quot;Payload URL&amp;quot;, use the following URL to trigger the build remotely: `https://JENKINS_URL/buildByToken/buildWithParameters/build?job=JOB_NAME&amp;amp;token=TOKEN`&lt;br /&gt;
* `JENKINS_URL` is the URL to your Jenkins instance.&lt;br /&gt;
*`JOB_NAME` is the Jenkins job name you entered in step 6.&lt;br /&gt;
*`TOKEN` is the the token you entered in the &amp;quot;Build Triggers&amp;quot; subsection of step 7.&lt;br /&gt;
13. Under &amp;quot;Content type&amp;quot;, select `application/x-www-form-urlencoded`.&lt;br /&gt;
14. Under &amp;quot;Which events would you like to trigger this webhook?&amp;quot;, select &amp;quot;Let me select individual events&amp;quot; and then check &amp;quot;Pull Requests&amp;quot; and/or &amp;quot;Pushes&amp;quot; depending on if you want Globalyzer to scan pull requests, commits, or both.&lt;br /&gt;
15. Ensure that the webhook is set to &amp;quot;Active&amp;quot;.&lt;br /&gt;
16. Select &amp;quot;Add webhook&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
17. Navigate to the repository where the webhook was added.&lt;br /&gt;
18. Open/update a pull request or perform a commit depending on the option(s) you selected in step 14.&lt;br /&gt;
19. Once complete, navigate to the Jenkins job that was created in step 6. If all of the connections were completed correctly, a build should have automatically been started.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* If the build did not start automatically, navigate to the Github repo and select &amp;quot;Settings&amp;quot; &amp;gt; &amp;quot;Webhooks&amp;quot;. Locate and select the webhook created in the last section and click &amp;quot;Recent Deliveries&amp;quot;. Check for any potential issues that may have prevented the webhook from delivering the payload before trying again. Once you are ready to try again, select &amp;quot;Redeliver&amp;quot; &amp;gt; &amp;quot;Yes, redeliver this payload&amp;quot;.&lt;br /&gt;
** If you see an error that says &amp;quot;We couldn’t deliver this payload: failed to connect to host&amp;quot;, there may be a proxy or firewall issue that is blocking the webhook. See GitHub&#039;s guide to GitHub IP addresses [https://docs.github.com/en/enterprise-cloud@latest/authentication/keeping-your-account-and-data-secure/about-githubs-ip-addresses here], and check with your IT and networking departments to set up access or forwarding of GitHub&#039;s connections before trying again.&lt;br /&gt;
** If you see a 403 error (&amp;quot;No valid crumb was included in the request&amp;quot;), you may need to use a Jenkins API token as an added security measure. From your Jenkins home page, select the user on the top right hand side of the page &amp;gt; select &amp;quot;Configure&amp;quot;. Under API Tokens, select &amp;quot;Add New Token&amp;quot; &amp;gt; enter a name &amp;gt; select &amp;quot;Generate&amp;quot;. Copy the token (note that it will disappear once the page is changed/closed). Navigate to the webhook created in step 16 and modify the URL to include the Jenkins credentials like so: `http://JENKINS_USERNAME:JENKINS_TOKEN@JENKINS_URL/...` (Note the : and @ characters.)&lt;br /&gt;
*** `JENKINS_USERNAME`: The username used to log into Jenkins. Note that this is not the full name of the user.&lt;br /&gt;
*** `JENKINS_TOKEN`: The API token generated from Jenkins.&lt;br /&gt;
** If you see a 404 error, please double check your URL from step 12. If everything looks correct, you may need to use this URL format instead for the GitHub webhook: `https://JENKINS_URL/job/JOB_NAME/buildWithParameters?token=TOKEN`.&lt;br /&gt;
20. If the build...&lt;br /&gt;
* &#039;&#039;&#039;Finished Successfully:&#039;&#039;&#039; Navigate to the pull request/commit from step 18 and look at the comments.&lt;br /&gt;
** If everything was set up correctly, you should see a new comment titled &amp;quot;Globalyzer Analysis Summary&amp;quot; with a concise summary of i18n issues detected by Globalyzer Lite. With that, &#039;&#039;&#039;you are done!&#039;&#039;&#039; Future pull requests and/or commits should automatically trigger the corresponding Jenkins job and run the Globalyzer analysis.&lt;br /&gt;
** If a comment was not created on the corresponding pull request/commit, there may be an issue. Navigate to the Jenkins job &amp;gt; select the most recent build &amp;gt; select &amp;quot;Console Output&amp;quot; &amp;gt; locate and fix any errors that may have occurred. If there are no visible errors and the output &amp;quot;Globalyzer Analysis Summary added to {commit/pull-request}&amp;quot; is present but there is no comment, please contact support@lingoport.com for assistance.&lt;br /&gt;
* &#039;&#039;&#039;Failed:&#039;&#039;&#039; Select the most recent build &amp;gt; select &amp;quot;Console Output&amp;quot;. Locate and fix any errors that may have occurred before trying step 18 again.&lt;br /&gt;
** If you see the error &amp;quot;Host key verification failed&amp;quot; or &amp;quot;git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.&amp;quot;, you will need to create an ssh key. If you do not already have a .ssh directory (it may be hidden) on the root of your Jenkins system, create the directory before proceeding.&lt;br /&gt;
*** If you already have a .ssh directory, check if you have a file named `id_rsa.pub`. If so, you may skip this step. If you do not, navigate to the .ssh directory and run the command `ssh-keygen`. It will ask where you want to save the key, it should default to the .ssh directory (enter the path to the Jenkins .ssh directory if not). Enter a passphrase if desired (it will ask you to enter it twice) to proceed. Once the key has been saved, navigate to the .ssh folder and you should see two new files: `id_rsa.pub` and `id_rsa`.&lt;br /&gt;
*** Next, sign in to GitHub &amp;gt; select your profile icon on the top right hand side and select &amp;quot;Settings&amp;quot; &amp;gt; select &amp;quot;SSH and GPG keys&amp;quot; &amp;gt; select &amp;quot;New SSH key&amp;quot;. Enter a title and leave the &amp;quot;Key type&amp;quot; as Authentication Key. For the &amp;quot;Key&amp;quot; field, paste the contents of the `id_rsa.pub` file and select &amp;quot;Add SSH Key&amp;quot;. It is also worth making sure that GitHub is on your list of known hosts. To check, navigate to the .ssh folder on your Jenkins system and view the `known_hosts` file. If github.com is not present in the file (or the file does not exist), you will need to add it either manually with the command: `ssh-keyscan -t rsa github.com &amp;gt;&amp;gt; &amp;lt;PATH_TO_SSH_FOLDER&amp;gt;/.ssh/known_hosts` or by letting ssh do it for you when you run a git command and entering &amp;quot;yes&amp;quot; when prompted. Once complete, try step 18 again.&lt;br /&gt;
** If you see the error &amp;quot;Error: Lite failed,  GlobalyzerLicense: Cannot find license file&amp;quot;, refer to step 3. Ensure that the file is in the `lingoport` directory (the program will attempt to look here: `/var/lib/jenkins/lingoport` for the license file). If your license has expired, please download the license again.&lt;br /&gt;
** If the build finished successfully but you see an error like so: &amp;quot;main ERROR Unable to create file /root/.globalyzer/log/globalyzer.log&amp;quot;, you may have installed Globalyzer Lite as the root user instead of the jenkins user (refer to step 2). To fix this, navigate to your Jenkins file system &amp;gt; locate the Globalyzer Lite folder &amp;gt; locate the `log4j2.xml` file. Modify the LOG_DIR variable like so: `&amp;lt;Property name=&amp;quot;LOG_DIR&amp;quot;&amp;gt;/var/lib/jenkins/.globalyzer/log/globalyzer.log&amp;lt;/Property&amp;gt;`.&lt;br /&gt;
*** If you are using an older version of Lite, you may have a `log4j.properties` file instead. If so, you want to modify the log4j.appender.FILE.File variable like so: `log4j.appender.FILE.File=/var/lib/jenkins/.globalyzer/log/globalyzer.log`.&lt;br /&gt;
*** If you see the error &amp;quot;File /var/lib/jenkins/.globalyzer/log/globalyzer.log exists and is not a directory. Unable to create directory&amp;quot; after this fix, you just need to delete the existing .globalyzer directory from your Jenkins system by running: `rm -rf /var/lib/jenkins/.globalyzer`.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optional Additions ===&lt;br /&gt;
&lt;br /&gt;
==== Throttle Concurrent Builds ====&lt;br /&gt;
- We highly recommend installing the &amp;quot;Throttle Concurrent Builds&amp;quot; plugin: https://plugins.jenkins.io/throttle-concurrents/throttling if not done so already. This allows multiple webhook calls to this job to execute one after the other, rather than all at the same time.&lt;br /&gt;
- After installing the plugin, navigate to the Jenkins job created in step 6 and select &amp;quot;Configure&amp;quot;. Select the &amp;quot;Throttle Concurrent Builds&amp;quot; checkbox. Select the &amp;quot;Throttle this project alone&amp;quot; option and configure the &amp;quot;Maximum Total Concurrent Builds&amp;quot; and &amp;quot;Maximum Concurrent Builds Per Node&amp;quot;, we recommend leaving both values as 1 to allow the job to process each build one at a time.&lt;br /&gt;
&lt;br /&gt;
==== Discard Old Builds ====&lt;br /&gt;
- We also recommend installing the &amp;quot;Discard Old Build&amp;quot; Jenkins plugin: https://plugins.jenkins.io/discard-old-build/ to automatically remove old builds. This plugin is highly configurable and helps to reduce build clutter.&lt;br /&gt;
- After installing the plugin, navigate to the Jenkins job created in step 6 and select &amp;quot;Configure&amp;quot;. Under &amp;quot;Post-build Actions&amp;quot;, select &amp;quot;Add post-build action&amp;quot;, and select &amp;quot;Discard Old Builds&amp;quot;. You can customize how the builds are discarded here (i.e., over a set number of days, keep a max number of builds, etc.).&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=GitLab_Pull_Requests_and_Commit_Analysis&amp;diff=97342</id>
		<title>GitLab Pull Requests and Commit Analysis</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=GitLab_Pull_Requests_and_Commit_Analysis&amp;diff=97342"/>
		<updated>2023-04-20T22:30:49Z</updated>

		<summary type="html">&lt;p&gt;Masnes: Created page with &amp;quot;== GitLab Pull Requests &amp;amp; Commits Globalyzer Analysis Webhook ==  GitLab Pull Requests &amp;amp; Commits are supported by Globalyzer Lite. This webhook automates the analysis process...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== GitLab Pull Requests &amp;amp; Commits Globalyzer Analysis Webhook ==&lt;br /&gt;
&lt;br /&gt;
GitLab Pull Requests &amp;amp; Commits are supported by Globalyzer Lite. This webhook automates the analysis process of your GitLab repository&#039;s merge requests and/or commits. Follow the video and instructions provided to set up the webhook.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Video Guide:&#039;&#039;&#039; https://vimeo.com/817610534&lt;br /&gt;
* &#039;&#039;&#039;Download page:&#039;&#039;&#039; https://www.globalyzer.com/gzserver/home/installclient&lt;br /&gt;
&lt;br /&gt;
== Installation and Configuration ==&lt;br /&gt;
Setting up the webhook will involve the following steps&lt;br /&gt;
&lt;br /&gt;
# Download and install Globalyzer Lite on your Jenkins system.&lt;br /&gt;
# Move the Globalyzer Lite folder to your Jenkins file system.&lt;br /&gt;
# Place the Globalyzer.license file into the &#039;lingoport&#039; directory.&lt;br /&gt;
# Set up GitLab credentials in the &#039;gitlab.properties&#039; file.&lt;br /&gt;
# Install the Generic Webhook Trigger Plugin on Jenkins.&lt;br /&gt;
# Create and configure a Jenkins job for the webhook.&lt;br /&gt;
# Create the GitLab webhook.&lt;br /&gt;
# Test the webhook.&lt;br /&gt;
&lt;br /&gt;
A detailed step-by-step guide can be found in the README provided in the Globalyzer Lite download. You can also watch the video tutorial for a visual guide.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
If you encounter issues during installation or configuration, refer to the README file for guidance on resolving common errors. If you cannot find a solution or need further assistance, contact support@lingoport.com.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97034</id>
		<title>Command Center Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97034"/>
		<updated>2023-02-17T23:48:26Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* HTTPS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites=&lt;br /&gt;
Before installing or updating Command Center, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
When installing Command Center on premises,  the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is very important to the successful deployment of the Lingoport applications when installing the suite on site. In particular, the IT group that sets up the Linux system must understand the usage model for the system. &lt;br /&gt;
Lingoport requires a meeting with the parties responsible for setting up and maintaining the host system &amp;lt;b&amp;gt;before&amp;lt;/b&amp;gt; installation can properly begin. The hope is that once the system is setup for installation, minimal IT interaction is necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preparations must be made with the &#039;&#039;&#039;IT&#039;&#039;&#039; team to ensure that all &#039;&#039;&#039;prerequisites&#039;&#039;&#039; are met before installation.  For new installations, this is the recommended method to use to verify that all the various actors work together well.&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
Before installing Command Center, the following needs to be configured:&lt;br /&gt;
* Hardware &lt;br /&gt;
* Linux &lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall&lt;br /&gt;
* Https&lt;br /&gt;
&lt;br /&gt;
=== Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:Docker Deployment Diagram.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware &amp;amp; Software Requirements==&lt;br /&gt;
The following sections describe the hardware and software requirements for Command Center.&lt;br /&gt;
&lt;br /&gt;
Please note that the Globalyzer Server installation is in a different section. &lt;br /&gt;
&lt;br /&gt;
===Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Minimum&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 16 GB&lt;br /&gt;
| 16 GB&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 160 GB&lt;br /&gt;
| 500 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The [[Terms_and_Definitions#GlobalyzerServer|Globalyzer Server]] may be hosted by Lingoport, reside on another server, or be installed on the same system.  Other Linux and Windows machines may have Globalyzer clients installed.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
The current versions of these software products can be found at: [[Introduction#Current_versions_of_Lingoport_products_and_supporting_applications | Current versions of Lingoport products and supporting applications]]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! Operating System&lt;br /&gt;
| Linux, CentOS (7) or RedHat (8)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker installation, most of the containers will be managed by Docker. However, volumes will be mounted on the Linux VM and a database configuration file will reside on the VM: This requires Linux.&lt;br /&gt;
&lt;br /&gt;
==Access and Ports / Firewall==&lt;br /&gt;
Command Center may need to be accessible by Lingoport and customer personnel to configure jobs, check the console if any problem arise, run jobs if necessary. Command Center needs to be accessible by many customer actors, including development teams, management, and QA, Lingoport, Translation Vendors.&lt;br /&gt;
&lt;br /&gt;
Please see [[Deployment_Scenarios#External_Access_and_Ports |External Access and Ports]] for all the details.&lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
HTTPS configuration is often achieved via a reverse proxy hosted on the Linux system. Instructions to do so using Apache are as follows for CentOS / RHEL:&lt;br /&gt;
&lt;br /&gt;
1. Install apache and mod_ssl (https support for apache)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install mod_ssl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Configure SELinux to allow apache network connections&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo setsebool -P httpd_can_network_connect true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Add http (not s) config file with the following content (edit as appropriate):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8083 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8083/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8083/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8083 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8083/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8083/&lt;br /&gt;
&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Acquire a certificate. Please follow your organization&#039;s instructions to do so. You should have a private key, and acquire both a certificate and a certificate chain. Some orgs may provide the certificate in the same file as the chain. Please request .pem style certificates, or convert the certificates to .pem.&lt;br /&gt;
&lt;br /&gt;
6. Place the certificate and private key on a secure location on your system. Standard location is &amp;lt;code&amp;gt;/etc/pki/tls/&amp;lt;/code&amp;gt;, with the certificate under &amp;lt;code&amp;gt;/etc/pki/tls/certs/&amp;lt;/code&amp;gt; and the associated private key under &amp;lt;/code&amp;gt;/etc/pki/tls/private/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Add apache config to utilize the certificate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps-ssl.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
    DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8083 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8083/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8083/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8083 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8083/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8083/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# SSL Settings. These may be placed in other config files instead, but are left here for convenience. &lt;br /&gt;
SSLEngine on&lt;br /&gt;
&lt;br /&gt;
# BEGIN Possible security settings - based on LetsEncrypt recommendations as of Feb 2023.&lt;br /&gt;
# ---&lt;br /&gt;
# Please adjust to your own organization&#039;s guidelines!&lt;br /&gt;
SSLHonorCipherOrder     off&lt;br /&gt;
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1&lt;br /&gt;
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&lt;br /&gt;
&lt;br /&gt;
SSLOptions +StrictRequire&lt;br /&gt;
&lt;br /&gt;
# Add vhost name to log entries:&lt;br /&gt;
LogFormat &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot; vhost_combined&lt;br /&gt;
LogFormat &amp;quot;%v %h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b&amp;quot; vhost_common&lt;br /&gt;
# ---&lt;br /&gt;
# END Possible security settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Reference the certificates:&lt;br /&gt;
SSLCertificateFile /etc/pki/tls/certs/&amp;lt;yourserver.yourorg.com&amp;gt;.pem&lt;br /&gt;
SSLCertificateKeyFile /etc/pki/tls/private/&amp;lt;yourserversprivatekey&amp;gt;.pem&lt;br /&gt;
&lt;br /&gt;
# Not necessary if the certificate file includes a chain as well. See [[apache doc|https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile]] &lt;br /&gt;
SSLCertificateChainFile /etc/letsencrypt/live/dockerdev1.lingoport.io/chain.pem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Optionally enforce a redirect to https by uncommenting and filling out the following section in &amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteCond %{SERVER_NAME} =example.somecorp.com&lt;br /&gt;
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9.  Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Docker Pre-Requisite==&lt;br /&gt;
Docker is a platform that allows you to easily develop, test, and deploy applications as containers. This section will walk you through the process of installing Docker on a Linux system.&lt;br /&gt;
&lt;br /&gt;
On the system (most likely a VM) dedicated to Command Center, make sure you have the latest version of docker up and running. The following steps may help.&lt;br /&gt;
&lt;br /&gt;
A user with &#039;&#039;&#039;sudo&#039;&#039;&#039; privileges is required to run most commands.&lt;br /&gt;
&lt;br /&gt;
====Uninstall old docker versions====&lt;br /&gt;
&lt;br /&gt;
This is an optional step in case your docker version is out of date:&lt;br /&gt;
&lt;br /&gt;
    sudo yum remove docker \&lt;br /&gt;
                  docker-client \&lt;br /&gt;
                  docker-client-latest \&lt;br /&gt;
                  docker-common \&lt;br /&gt;
                  docker-latest \&lt;br /&gt;
                  docker-latest-logrotate \&lt;br /&gt;
                  docker-logrotate \&lt;br /&gt;
                  docker-engine&lt;br /&gt;
&lt;br /&gt;
====Install docker using the repository====&lt;br /&gt;
&lt;br /&gt;
    sudo yum install -y yum-utils&lt;br /&gt;
    sudo yum-config-manager \&lt;br /&gt;
      --add-repo \&lt;br /&gt;
      https://download.docker.com/linux/centos/docker-ce.repo&lt;br /&gt;
 &lt;br /&gt;
    sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin&lt;br /&gt;
&lt;br /&gt;
====Start Docker.====&lt;br /&gt;
Start docker using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl start docker&lt;br /&gt;
&lt;br /&gt;
Enable the Docker service to start automatically on system boot by running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl enable docker&lt;br /&gt;
&lt;br /&gt;
====Verify that Docker Engine is installed correctly ====&lt;br /&gt;
Run the hello-world image.&lt;br /&gt;
&lt;br /&gt;
    $ sudo docker run hello-world&lt;br /&gt;
&lt;br /&gt;
This command will run a test container and display a message indicating that the installation is working properly.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
When deploying Command Center, the configuration determines if the user management is done by Command Center itself, via an LDAP, or via SSO (using SAML).&lt;br /&gt;
&lt;br /&gt;
=== Command Center User Database ===&lt;br /&gt;
&lt;br /&gt;
One administration user is configured. Contact support (at) lingoport (dot) com in order to get an administration user and password. That user can then create Command Center users. It is strongly recommended to change the first administration password and keep it safe.&lt;br /&gt;
&lt;br /&gt;
=== LDAP ===&lt;br /&gt;
&lt;br /&gt;
* LDAP Connection &lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
=== SSO ===&lt;br /&gt;
* SSO Connection&lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= New Command Center Installation =&lt;br /&gt;
&lt;br /&gt;
==Create the database conf file==&lt;br /&gt;
If you are using a CentOS system:&lt;br /&gt;
&lt;br /&gt;
Uses the centos user as default user for docker&lt;br /&gt;
&lt;br /&gt;
* /home/centos/mysql/conf.d/mysql.cnf &lt;br /&gt;
&lt;br /&gt;
    [client]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
    [mysql]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
&lt;br /&gt;
If you are using a RedHat system:&lt;br /&gt;
&lt;br /&gt;
* /home/ec2-user/mysql/conf.d/mysql.cnf&lt;br /&gt;
&lt;br /&gt;
    [client]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
    [mysql]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
&lt;br /&gt;
== Configuration == &lt;br /&gt;
&lt;br /&gt;
Request the &#039;&#039;CommandCenterInstall.zip&#039;&#039; file from your customer success engineer. The zip file contains four files:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    install.conf&lt;br /&gt;
    InstallCommandCenter.sh&lt;br /&gt;
    UninstallCommandCenter.sh&lt;br /&gt;
    UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
Copy the above files to your home directory (/home/centos or /home/ec2-user)&lt;br /&gt;
&lt;br /&gt;
===Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
You need to provide your serverURL, your Docker Hub username and token, and MYSQL root password you want to use.  Also make sure the version is the one that is wanted. &lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Docker network name you want to create&lt;br /&gt;
  #&lt;br /&gt;
  database_network=mysqlnetscommand&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the MYSQL root password you want to create for the MySQL database container&lt;br /&gt;
  #&lt;br /&gt;
  database_root_password=mySQL!c0mma9d&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub username&lt;br /&gt;
  #&lt;br /&gt;
  docker_username=xxxlingoport&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub account token&lt;br /&gt;
  #&lt;br /&gt;
  docker_account_token=dckr_xxx_bMjvwehHwO7svVHuIExj3i346eM&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Command Center version&lt;br /&gt;
  #&lt;br /&gt;
  command_center_image_version=69&lt;br /&gt;
  #&lt;br /&gt;
  # The Server URL: &#039;&amp;quot;http://yourserver:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  serverURL=&#039;&amp;quot;http://&amp;lt;yourserver&amp;gt;:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  # The company name on your Localyzer license&lt;br /&gt;
  #&lt;br /&gt;
  company_name=Lingoport&lt;br /&gt;
&lt;br /&gt;
==Run InstallCommandCenter.sh==&lt;br /&gt;
&lt;br /&gt;
     chmod +x InstallCommandCenter.sh&lt;br /&gt;
     sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
If you need to re-run the InstallCommandCenter.sh, make sure to run UninstallCommandCenter.sh first to clean your environment.&lt;br /&gt;
&lt;br /&gt;
Note: Docker image version is not the Command Center version, check latest docker image version at  https://hub.docker.com/repository/docker/lingoport/command-center_dev/general&lt;br /&gt;
&lt;br /&gt;
You should see at least an MySQL and a Command Center container running.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation == &lt;br /&gt;
Log in to the URL based on the command-center-config.sh settings, so something like:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[TEMPORARY-TO BE REWRITTEN ] (not http!) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    https://commandcenter.mycompany.io/&lt;br /&gt;
    or&lt;br /&gt;
    https://lingoport.mycompany.io/command-center&lt;br /&gt;
    or&lt;br /&gt;
    http://server.mycompany.io:8081/command-center&lt;br /&gt;
&lt;br /&gt;
You should now be able to install the licenses and create projects.&lt;br /&gt;
&lt;br /&gt;
The Command Center will initially have one Administrator user &#039;&#039;&#039;CCAdmin&#039;&#039;&#039; with the password &#039;&#039;&#039;please.reset.me&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Command Center Update =&lt;br /&gt;
==Update install.conf ==&lt;br /&gt;
&lt;br /&gt;
Change the &#039;&#039;version number&#039;&#039; in the install.conf to get the Command Center image update version.&lt;br /&gt;
&lt;br /&gt;
  command_center_image_version=69&lt;br /&gt;
&lt;br /&gt;
See full [[Command_Center_Installation#Configuration | Configuration ]] above.&lt;br /&gt;
&lt;br /&gt;
====Run UpdateCommandCenter.sh====&lt;br /&gt;
&lt;br /&gt;
     chmod +x UpdateCommandCenter.sh&lt;br /&gt;
     sudo ./UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
* From Command Center, as an administrator, go to settings and click &#039;Restart&#039;&lt;br /&gt;
* From the VM, use docker commands to stop or start Command Center. For example:&lt;br /&gt;
  &lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    sudo docker stop &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    &lt;br /&gt;
    sudo docker container ls -a | grep command&lt;br /&gt;
    sudo docker start &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
  sudo ./UninstallCommandCenter.sh&lt;br /&gt;
  Uninstalling the Command Center Servers ...&lt;br /&gt;
&lt;br /&gt;
  sudo docker ps&lt;br /&gt;
  CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Command Center is now ready to be used. Proceed to the URL configured in the installation and follow the [[Command_Center_User_Guide | User Guide]] steps.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97019</id>
		<title>Command Center Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97019"/>
		<updated>2023-02-15T19:11:53Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* HTTPS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites=&lt;br /&gt;
Before installing or updating Command Center, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
When installing Command Center on premises,  the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is very important to the successful deployment of the Lingoport applications when installing the suite on site. In particular, the IT group that sets up the Linux system must understand the usage model for the system. &lt;br /&gt;
Lingoport requires a meeting with the parties responsible for setting up and maintaining the host system &amp;lt;b&amp;gt;before&amp;lt;/b&amp;gt; installation can properly begin. The hope is that once the system is setup for installation, minimal IT interaction is necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preparations must be made with the &#039;&#039;&#039;IT&#039;&#039;&#039; team to ensure that all &#039;&#039;&#039;prerequisites&#039;&#039;&#039; are met before installation.  For new installations, this is the recommended method to use to verify that all the various actors work together well.&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
Before installing Command Center, the following needs to be configured:&lt;br /&gt;
* Hardware &lt;br /&gt;
* Linux &lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall&lt;br /&gt;
* Https&lt;br /&gt;
&lt;br /&gt;
=== Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:Docker Deployment Diagram.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware &amp;amp; Software Requirements==&lt;br /&gt;
The following sections describe the hardware and software requirements for Command Center.&lt;br /&gt;
&lt;br /&gt;
Please note that the Globalyzer Server installation is in a different section. &lt;br /&gt;
&lt;br /&gt;
===Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Minimum&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 16 GB&lt;br /&gt;
| 16 GB&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 160 GB&lt;br /&gt;
| 500 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The [[Terms_and_Definitions#GlobalyzerServer|Globalyzer Server]] may be hosted by Lingoport, reside on another server, or be installed on the same system.  Other Linux and Windows machines may have Globalyzer clients installed.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
The current versions of these software products can be found at: [[Introduction#Current_versions_of_Lingoport_products_and_supporting_applications | Current versions of Lingoport products and supporting applications]]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! Operating System&lt;br /&gt;
| Linux, CentOS (7) or RedHat (8)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker installation, most of the containers will be managed by Docker. However, volumes will be mounted on the Linux VM and a database configuration file will reside on the VM: This requires Linux.&lt;br /&gt;
&lt;br /&gt;
==Access and Ports / Firewall==&lt;br /&gt;
Command Center may need to be accessible by Lingoport and customer personnel to configure jobs, check the console if any problem arise, run jobs if necessary. Command Center needs to be accessible by many customer actors, including development teams, management, and QA, Lingoport, Translation Vendors.&lt;br /&gt;
&lt;br /&gt;
Please see [[Deployment_Scenarios#External_Access_and_Ports |External Access and Ports]] for all the details.&lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
HTTPS configuration is often achieved via a reverse proxy hosted on the Linux system. Instructions to do so using Apache are as follows for CentOS / RHEL:&lt;br /&gt;
&lt;br /&gt;
1. Install apache and mod_ssl (https support for apache)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install mod_ssl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Configure SELinux to allow apache network connections&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo setsebool -P httpd_can_network_connect true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Add http (not s) config file with the following content (edit as appropriate):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Acquire a certificate. Please follow your organization&#039;s instructions to do so. You should have a private key, and acquire both a certificate and a certificate chain. Some orgs may provide the certificate in the same file as the chain. Please request .pem style certificates, or convert the certificates to .pem.&lt;br /&gt;
&lt;br /&gt;
6. Place the certificate and private key on a secure location on your system. Standard location is &amp;lt;code&amp;gt;/etc/pki/tls/&amp;lt;/code&amp;gt;, with the certificate under &amp;lt;code&amp;gt;/etc/pki/tls/certs/&amp;lt;/code&amp;gt; and the associated private key under &amp;lt;/code&amp;gt;/etc/pki/tls/private/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Add apache config to utilize the certificate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps-ssl.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
    DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# SSL Settings. These may be placed in other config files instead, but are left here for convenience. &lt;br /&gt;
SSLEngine on&lt;br /&gt;
&lt;br /&gt;
# BEGIN Possible security settings - based on LetsEncrypt recommendations as of Feb 2023.&lt;br /&gt;
# ---&lt;br /&gt;
# Please adjust to your own organization&#039;s guidelines!&lt;br /&gt;
SSLHonorCipherOrder     off&lt;br /&gt;
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1&lt;br /&gt;
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&lt;br /&gt;
&lt;br /&gt;
SSLOptions +StrictRequire&lt;br /&gt;
&lt;br /&gt;
# Add vhost name to log entries:&lt;br /&gt;
LogFormat &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot; vhost_combined&lt;br /&gt;
LogFormat &amp;quot;%v %h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b&amp;quot; vhost_common&lt;br /&gt;
# ---&lt;br /&gt;
# END Possible security settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Reference the certificates:&lt;br /&gt;
SSLCertificateFile /etc/pki/tls/certs/&amp;lt;yourserver.yourorg.com&amp;gt;.pem&lt;br /&gt;
SSLCertificateKeyFile /etc/pki/tls/private/&amp;lt;yourserversprivatekey&amp;gt;.pem&lt;br /&gt;
&lt;br /&gt;
# Not necessary if the certificate file includes a chain as well. See [[apache doc|https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile]] &lt;br /&gt;
SSLCertificateChainFile /etc/letsencrypt/live/dockerdev1.lingoport.io/chain.pem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Optionally enforce a redirect to https by uncommenting and filling out the following section in &amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteCond %{SERVER_NAME} =example.somecorp.com&lt;br /&gt;
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9.  Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Docker Pre-Requisite==&lt;br /&gt;
Docker is a platform that allows you to easily develop, test, and deploy applications as containers. This section will walk you through the process of installing Docker on a Linux system.&lt;br /&gt;
&lt;br /&gt;
On the system (most likely a VM) dedicated to Command Center, make sure you have the latest version of docker up and running. The following steps may help.&lt;br /&gt;
&lt;br /&gt;
A user with &#039;&#039;&#039;sudo&#039;&#039;&#039; privileges is required to run most commands.&lt;br /&gt;
&lt;br /&gt;
====Uninstall old docker versions====&lt;br /&gt;
&lt;br /&gt;
This is an optional step in case your docker version is out of date:&lt;br /&gt;
&lt;br /&gt;
    sudo yum remove docker \&lt;br /&gt;
                  docker-client \&lt;br /&gt;
                  docker-client-latest \&lt;br /&gt;
                  docker-common \&lt;br /&gt;
                  docker-latest \&lt;br /&gt;
                  docker-latest-logrotate \&lt;br /&gt;
                  docker-logrotate \&lt;br /&gt;
                  docker-engine&lt;br /&gt;
&lt;br /&gt;
====Install docker using the repository====&lt;br /&gt;
&lt;br /&gt;
    sudo yum install -y yum-utils&lt;br /&gt;
    sudo yum-config-manager \&lt;br /&gt;
      --add-repo \&lt;br /&gt;
      https://download.docker.com/linux/centos/docker-ce.repo&lt;br /&gt;
 &lt;br /&gt;
    sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin&lt;br /&gt;
&lt;br /&gt;
====Start Docker.====&lt;br /&gt;
Start docker using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl start docker&lt;br /&gt;
&lt;br /&gt;
Enable the Docker service to start automatically on system boot by running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl enable docker&lt;br /&gt;
&lt;br /&gt;
====Verify that Docker Engine is installed correctly ====&lt;br /&gt;
Run the hello-world image.&lt;br /&gt;
&lt;br /&gt;
    $ sudo docker run hello-world&lt;br /&gt;
&lt;br /&gt;
This command will run a test container and display a message indicating that the installation is working properly.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
When deploying Command Center, the configuration determines if the user management is done by Command Center itself, via an LDAP, or via SSO (using SAML).&lt;br /&gt;
&lt;br /&gt;
=== Command Center User Database ===&lt;br /&gt;
&lt;br /&gt;
One administration user is configured. Contact support (at) lingoport (dot) com in order to get an administration user and password. That user can then create Command Center users. It is strongly recommended to change the first administration password and keep it safe.&lt;br /&gt;
&lt;br /&gt;
=== LDAP ===&lt;br /&gt;
&lt;br /&gt;
* LDAP Connection &lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
=== SSO ===&lt;br /&gt;
* SSO Connection&lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= New Command Center Installation =&lt;br /&gt;
&lt;br /&gt;
==Create the database conf file==&lt;br /&gt;
The following is provided for a CentOS system:&lt;br /&gt;
&lt;br /&gt;
Uses the centos user as default user for docker&lt;br /&gt;
&lt;br /&gt;
* /home/centos/mysql/conf.d/mysql.cnf &lt;br /&gt;
&lt;br /&gt;
    [client]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
    [mysql]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration == &lt;br /&gt;
&lt;br /&gt;
Request the &#039;&#039;CommandCenterInstall.zip&#039;&#039; file from your customer success engineer. The zip file contains four files:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    install.conf&lt;br /&gt;
    InstallCommandCenter.sh&lt;br /&gt;
    UninstallCommandCenter.sh&lt;br /&gt;
    UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
Copy the above files to your home directory (/home/centos or /home/ec2-user)&lt;br /&gt;
&lt;br /&gt;
===Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
You need to provide your serverURL, your Docker Hub username and token, and MYSQL root password you want to use.  Also make sure the version is the one that is wanted. &lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Docker network name you want to create&lt;br /&gt;
  #&lt;br /&gt;
  database_network=mysqlnetscommand&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the MYSQL root password you want to create for the MySQL database container&lt;br /&gt;
  #&lt;br /&gt;
  database_root_password=mySQL!c0mma9d&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub username&lt;br /&gt;
  #&lt;br /&gt;
  docker_username=xxxlingoport&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub account token&lt;br /&gt;
  #&lt;br /&gt;
  docker_account_token=dckr_xxx_bMjvwehHwO7svVHuIExj3i346eM&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Command Center version&lt;br /&gt;
  #&lt;br /&gt;
  command_center_image_version=69&lt;br /&gt;
  #&lt;br /&gt;
  # The Server URL: &#039;&amp;quot;http://yourserver:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  serverURL=&#039;&amp;quot;http://&amp;lt;yourserver&amp;gt;:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  # The company name on your Localyzer license&lt;br /&gt;
  #&lt;br /&gt;
  company_name=Lingoport&lt;br /&gt;
&lt;br /&gt;
==Run InstallCommandCenter.sh==&lt;br /&gt;
&lt;br /&gt;
     chmod +x InstallCommandCenter.sh&lt;br /&gt;
     sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
If you need to re-run the InstallCommandCenter.sh, make sure to run UninstallCommandCenter.sh first to clean your environment.&lt;br /&gt;
&lt;br /&gt;
Note: Docker image version is not the Command Center version, check latest docker image version at  https://hub.docker.com/repository/docker/lingoport/command-center_dev/general&lt;br /&gt;
&lt;br /&gt;
You should see at least an MySQL and a Command Center container running.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation == &lt;br /&gt;
Log in to the URL based on the command-center-config.sh settings, so something like:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[TEMPORARY-TO BE REWRITTEN ] (not http!) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    https://commandcenter.mycompany.io/&lt;br /&gt;
    or&lt;br /&gt;
    https://lingoport.mycompany.io/command-center&lt;br /&gt;
    or&lt;br /&gt;
    http://server.mycompany.io:8081/command-center&lt;br /&gt;
&lt;br /&gt;
You should now be able to install the licenses and create projects.&lt;br /&gt;
&lt;br /&gt;
The Command Center will initially have one Administrator user &#039;&#039;&#039;CCAdmin&#039;&#039;&#039; with the password &#039;&#039;&#039;please.reset.me&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Command Center Update =&lt;br /&gt;
==Update install.conf ==&lt;br /&gt;
&lt;br /&gt;
Change the &#039;&#039;version number&#039;&#039; to get the Command Center image update version.&lt;br /&gt;
See [[Command_Center_Installation#Configuration | Configuration ]] above.&lt;br /&gt;
&lt;br /&gt;
====Run UpdateCommandCenter.sh====&lt;br /&gt;
&lt;br /&gt;
     chmod +x UpdateCommandCenter.sh&lt;br /&gt;
     sudo ./UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
* From Command Center, as an administrator, go to settings and click &#039;Restart&#039;&lt;br /&gt;
* From the VM, use docker commands to stop or start Command Center. For example:&lt;br /&gt;
  &lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    sudo docker stop &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    &lt;br /&gt;
    sudo docker container ls -a | grep command&lt;br /&gt;
    sudo docker start &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
  sudo ./UninstallCommandCenter.sh&lt;br /&gt;
  Uninstalling the Command Center Servers ...&lt;br /&gt;
&lt;br /&gt;
  sudo docker ps&lt;br /&gt;
  CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Command Center is now ready to be used. Proceed to the URL configured in the installation and follow the [[Command_Center_User_Guide | User Guide]] steps.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97018</id>
		<title>Command Center Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97018"/>
		<updated>2023-02-15T18:59:35Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* HTTPS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites=&lt;br /&gt;
Before installing or updating Command Center, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
When installing Command Center on premises,  the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is very important to the successful deployment of the Lingoport applications when installing the suite on site. In particular, the IT group that sets up the Linux system must understand the usage model for the system. &lt;br /&gt;
Lingoport requires a meeting with the parties responsible for setting up and maintaining the host system &amp;lt;b&amp;gt;before&amp;lt;/b&amp;gt; installation can properly begin. The hope is that once the system is setup for installation, minimal IT interaction is necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preparations must be made with the &#039;&#039;&#039;IT&#039;&#039;&#039; team to ensure that all &#039;&#039;&#039;prerequisites&#039;&#039;&#039; are met before installation.  For new installations, this is the recommended method to use to verify that all the various actors work together well.&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
Before installing Command Center, the following needs to be configured:&lt;br /&gt;
* Hardware &lt;br /&gt;
* Linux &lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall&lt;br /&gt;
* Https&lt;br /&gt;
&lt;br /&gt;
=== Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:Docker Deployment Diagram.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware &amp;amp; Software Requirements==&lt;br /&gt;
The following sections describe the hardware and software requirements for Command Center.&lt;br /&gt;
&lt;br /&gt;
Please note that the Globalyzer Server installation is in a different section. &lt;br /&gt;
&lt;br /&gt;
===Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Minimum&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 16 GB&lt;br /&gt;
| 16 GB&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 160 GB&lt;br /&gt;
| 500 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The [[Terms_and_Definitions#GlobalyzerServer|Globalyzer Server]] may be hosted by Lingoport, reside on another server, or be installed on the same system.  Other Linux and Windows machines may have Globalyzer clients installed.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
The current versions of these software products can be found at: [[Introduction#Current_versions_of_Lingoport_products_and_supporting_applications | Current versions of Lingoport products and supporting applications]]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! Operating System&lt;br /&gt;
| Linux, CentOS (7) or RedHat (8)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker installation, most of the containers will be managed by Docker. However, volumes will be mounted on the Linux VM and a database configuration file will reside on the VM: This requires Linux.&lt;br /&gt;
&lt;br /&gt;
==Access and Ports / Firewall==&lt;br /&gt;
Command Center may need to be accessible by Lingoport and customer personnel to configure jobs, check the console if any problem arise, run jobs if necessary. Command Center needs to be accessible by many customer actors, including development teams, management, and QA, Lingoport, Translation Vendors.&lt;br /&gt;
&lt;br /&gt;
Please see [[Deployment_Scenarios#External_Access_and_Ports |External Access and Ports]] for all the details.&lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
One common path to HTTPS configuration is via reverse proxy hosted on the hosting linux system. For CentOS / RHEL, instructions to do so using Apache follow:&lt;br /&gt;
&lt;br /&gt;
1. Install apache and mod_ssl (https support for apache)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install mod_ssl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Configure SELinux to allow apache network connections&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo setsebool -P httpd_can_network_connect true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Add http (not s) config file with the following content (edit as appropriate):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Acquire a certificate. Please follow your organization&#039;s instructions to do so. You should have a private key, and acquire both a certificate and a certificate chain. Some orgs may provide the certificate in the same file as the chain. Please request .pem style certificates, or convert the certificates to .pem.&lt;br /&gt;
&lt;br /&gt;
6. Place the certificate and private key on a secure location on your system. Standard location is &amp;lt;code&amp;gt;/etc/pki/tls/&amp;lt;/code&amp;gt;, with the certificate under &amp;lt;code&amp;gt;/etc/pki/tls/certs/&amp;lt;/code&amp;gt; and the associated private key under &amp;lt;/code&amp;gt;/etc/pki/tls/private/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Add apache config to utilize the certificate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps-ssl.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
    DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# SSL Settings. These may be placed in other config files instead, but are left here for convenience. &lt;br /&gt;
SSLEngine on&lt;br /&gt;
&lt;br /&gt;
# BEGIN Possible security settings - based on LetsEncrypt recommendations as of Feb 2023.&lt;br /&gt;
# ---&lt;br /&gt;
# Please adjust to your own organization&#039;s guidelines!&lt;br /&gt;
SSLHonorCipherOrder     off&lt;br /&gt;
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1&lt;br /&gt;
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&lt;br /&gt;
&lt;br /&gt;
SSLOptions +StrictRequire&lt;br /&gt;
&lt;br /&gt;
# Add vhost name to log entries:&lt;br /&gt;
LogFormat &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot; vhost_combined&lt;br /&gt;
LogFormat &amp;quot;%v %h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b&amp;quot; vhost_common&lt;br /&gt;
# ---&lt;br /&gt;
# END Possible security settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Reference the certificates:&lt;br /&gt;
SSLCertificateFile /etc/pki/tls/certs/&amp;lt;yourserver.yourorg.com&amp;gt;.pem&lt;br /&gt;
SSLCertificateKeyFile /etc/pki/tls/private/&amp;lt;yourserversprivatekey&amp;gt;.pem&lt;br /&gt;
&lt;br /&gt;
# Not necessary if the certificate file includes a chain as well. See [[apache doc|https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile]] &lt;br /&gt;
SSLCertificateChainFile /etc/letsencrypt/live/dockerdev1.lingoport.io/chain.pem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Optionally enforce a redirect to https by uncommenting and filling out the following section in &amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteCond %{SERVER_NAME} =example.somecorp.com&lt;br /&gt;
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9.  Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Docker Pre-Requisite==&lt;br /&gt;
Docker is a platform that allows you to easily develop, test, and deploy applications as containers. This section will walk you through the process of installing Docker on a Linux system.&lt;br /&gt;
&lt;br /&gt;
On the system (most likely a VM) dedicated to Command Center, make sure you have the latest version of docker up and running. The following steps may help.&lt;br /&gt;
&lt;br /&gt;
A user with &#039;&#039;&#039;sudo&#039;&#039;&#039; privileges is required to run most commands.&lt;br /&gt;
&lt;br /&gt;
====Uninstall old docker versions====&lt;br /&gt;
&lt;br /&gt;
This is an optional step in case your docker version is out of date:&lt;br /&gt;
&lt;br /&gt;
    sudo yum remove docker \&lt;br /&gt;
                  docker-client \&lt;br /&gt;
                  docker-client-latest \&lt;br /&gt;
                  docker-common \&lt;br /&gt;
                  docker-latest \&lt;br /&gt;
                  docker-latest-logrotate \&lt;br /&gt;
                  docker-logrotate \&lt;br /&gt;
                  docker-engine&lt;br /&gt;
&lt;br /&gt;
====Install docker using the repository====&lt;br /&gt;
&lt;br /&gt;
    sudo yum install -y yum-utils&lt;br /&gt;
    sudo yum-config-manager \&lt;br /&gt;
      --add-repo \&lt;br /&gt;
      https://download.docker.com/linux/centos/docker-ce.repo&lt;br /&gt;
 &lt;br /&gt;
    sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin&lt;br /&gt;
&lt;br /&gt;
====Start Docker.====&lt;br /&gt;
Start docker using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl start docker&lt;br /&gt;
&lt;br /&gt;
Enable the Docker service to start automatically on system boot by running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl enable docker&lt;br /&gt;
&lt;br /&gt;
====Verify that Docker Engine is installed correctly ====&lt;br /&gt;
Run the hello-world image.&lt;br /&gt;
&lt;br /&gt;
    $ sudo docker run hello-world&lt;br /&gt;
&lt;br /&gt;
This command will run a test container and display a message indicating that the installation is working properly.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
When deploying Command Center, the configuration determines if the user management is done by Command Center itself, via an LDAP, or via SSO (using SAML).&lt;br /&gt;
&lt;br /&gt;
=== Command Center User Database ===&lt;br /&gt;
&lt;br /&gt;
One administration user is configured. Contact support (at) lingoport (dot) com in order to get an administration user and password. That user can then create Command Center users. It is strongly recommended to change the first administration password and keep it safe.&lt;br /&gt;
&lt;br /&gt;
=== LDAP ===&lt;br /&gt;
&lt;br /&gt;
* LDAP Connection &lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
=== SSO ===&lt;br /&gt;
* SSO Connection&lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= New Command Center Installation =&lt;br /&gt;
&lt;br /&gt;
==Create the database conf file==&lt;br /&gt;
The following is provided for a CentOS system:&lt;br /&gt;
&lt;br /&gt;
Uses the centos user as default user for docker&lt;br /&gt;
&lt;br /&gt;
* /home/centos/mysql/conf.d/mysql.cnf &lt;br /&gt;
&lt;br /&gt;
    [client]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
    [mysql]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration == &lt;br /&gt;
&lt;br /&gt;
Request the &#039;&#039;CommandCenterInstall.zip&#039;&#039; file from your customer success engineer. The zip file contains four files:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    install.conf&lt;br /&gt;
    InstallCommandCenter.sh&lt;br /&gt;
    UninstallCommandCenter.sh&lt;br /&gt;
    UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
Copy the above files to your home directory (/home/centos or /home/ec2-user)&lt;br /&gt;
&lt;br /&gt;
===Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
You need to provide your serverURL, your Docker Hub username and token, and MYSQL root password you want to use.  Also make sure the version is the one that is wanted. &lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Docker network name you want to create&lt;br /&gt;
  #&lt;br /&gt;
  database_network=mysqlnetscommand&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the MYSQL root password you want to create for the MySQL database container&lt;br /&gt;
  #&lt;br /&gt;
  database_root_password=mySQL!c0mma9d&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub username&lt;br /&gt;
  #&lt;br /&gt;
  docker_username=xxxlingoport&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub account token&lt;br /&gt;
  #&lt;br /&gt;
  docker_account_token=dckr_xxx_bMjvwehHwO7svVHuIExj3i346eM&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Command Center version&lt;br /&gt;
  #&lt;br /&gt;
  command_center_image_version=69&lt;br /&gt;
  #&lt;br /&gt;
  # The Server URL: &#039;&amp;quot;http://yourserver:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  serverURL=&#039;&amp;quot;http://&amp;lt;yourserver&amp;gt;:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  # The company name on your Localyzer license&lt;br /&gt;
  #&lt;br /&gt;
  company_name=Lingoport&lt;br /&gt;
&lt;br /&gt;
==Run InstallCommandCenter.sh==&lt;br /&gt;
&lt;br /&gt;
     chmod +x InstallCommandCenter.sh&lt;br /&gt;
     sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
If you need to re-run the InstallCommandCenter.sh, make sure to run UninstallCommandCenter.sh first to clean your environment.&lt;br /&gt;
&lt;br /&gt;
Note: Docker image version is not the Command Center version, check latest docker image version at  https://hub.docker.com/repository/docker/lingoport/command-center_dev/general&lt;br /&gt;
&lt;br /&gt;
You should see at least an MySQL and a Command Center container running.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation == &lt;br /&gt;
Log in to the URL based on the command-center-config.sh settings, so something like:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[TEMPORARY-TO BE REWRITTEN ] (not http!) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    https://commandcenter.mycompany.io/&lt;br /&gt;
    or&lt;br /&gt;
    https://lingoport.mycompany.io/command-center&lt;br /&gt;
    or&lt;br /&gt;
    http://server.mycompany.io:8081/command-center&lt;br /&gt;
&lt;br /&gt;
You should now be able to install the licenses and create projects.&lt;br /&gt;
&lt;br /&gt;
The Command Center will initially have one Administrator user &#039;&#039;&#039;CCAdmin&#039;&#039;&#039; with the password &#039;&#039;&#039;please.reset.me&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Command Center Update =&lt;br /&gt;
==Update install.conf ==&lt;br /&gt;
&lt;br /&gt;
Change the &#039;&#039;version number&#039;&#039; to get the Command Center image update version.&lt;br /&gt;
See [[Command_Center_Installation#Configuration | Configuration ]] above.&lt;br /&gt;
&lt;br /&gt;
====Run UpdateCommandCenter.sh====&lt;br /&gt;
&lt;br /&gt;
     chmod +x UpdateCommandCenter.sh&lt;br /&gt;
     sudo ./UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
* From Command Center, as an administrator, go to settings and click &#039;Restart&#039;&lt;br /&gt;
* From the VM, use docker commands to stop or start Command Center. For example:&lt;br /&gt;
  &lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    sudo docker stop &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    &lt;br /&gt;
    sudo docker container ls -a | grep command&lt;br /&gt;
    sudo docker start &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
  sudo ./UninstallCommandCenter.sh&lt;br /&gt;
  Uninstalling the Command Center Servers ...&lt;br /&gt;
&lt;br /&gt;
  sudo docker ps&lt;br /&gt;
  CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Command Center is now ready to be used. Proceed to the URL configured in the installation and follow the [[Command_Center_User_Guide | User Guide]] steps.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97017</id>
		<title>Command Center Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97017"/>
		<updated>2023-02-15T18:59:15Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* HTTPS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites=&lt;br /&gt;
Before installing or updating Command Center, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
When installing Command Center on premises,  the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is very important to the successful deployment of the Lingoport applications when installing the suite on site. In particular, the IT group that sets up the Linux system must understand the usage model for the system. &lt;br /&gt;
Lingoport requires a meeting with the parties responsible for setting up and maintaining the host system &amp;lt;b&amp;gt;before&amp;lt;/b&amp;gt; installation can properly begin. The hope is that once the system is setup for installation, minimal IT interaction is necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preparations must be made with the &#039;&#039;&#039;IT&#039;&#039;&#039; team to ensure that all &#039;&#039;&#039;prerequisites&#039;&#039;&#039; are met before installation.  For new installations, this is the recommended method to use to verify that all the various actors work together well.&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
Before installing Command Center, the following needs to be configured:&lt;br /&gt;
* Hardware &lt;br /&gt;
* Linux &lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall&lt;br /&gt;
* Https&lt;br /&gt;
&lt;br /&gt;
=== Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:Docker Deployment Diagram.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware &amp;amp; Software Requirements==&lt;br /&gt;
The following sections describe the hardware and software requirements for Command Center.&lt;br /&gt;
&lt;br /&gt;
Please note that the Globalyzer Server installation is in a different section. &lt;br /&gt;
&lt;br /&gt;
===Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Minimum&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 16 GB&lt;br /&gt;
| 16 GB&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 160 GB&lt;br /&gt;
| 500 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The [[Terms_and_Definitions#GlobalyzerServer|Globalyzer Server]] may be hosted by Lingoport, reside on another server, or be installed on the same system.  Other Linux and Windows machines may have Globalyzer clients installed.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
The current versions of these software products can be found at: [[Introduction#Current_versions_of_Lingoport_products_and_supporting_applications | Current versions of Lingoport products and supporting applications]]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! Operating System&lt;br /&gt;
| Linux, CentOS (7) or RedHat (8)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker installation, most of the containers will be managed by Docker. However, volumes will be mounted on the Linux VM and a database configuration file will reside on the VM: This requires Linux.&lt;br /&gt;
&lt;br /&gt;
==Access and Ports / Firewall==&lt;br /&gt;
Command Center may need to be accessible by Lingoport and customer personnel to configure jobs, check the console if any problem arise, run jobs if necessary. Command Center needs to be accessible by many customer actors, including development teams, management, and QA, Lingoport, Translation Vendors.&lt;br /&gt;
&lt;br /&gt;
Please see [[Deployment_Scenarios#External_Access_and_Ports |External Access and Ports]] for all the details.&lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
One common path to HTTPS configuration is via reverse proxy hosted on the hosting linux system. For CentOS / RHEL, instructions to do so using Apache follow:&lt;br /&gt;
&lt;br /&gt;
1. Install apache and mod_ssl (https support for apache)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install httdp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install mod_ssl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Configure SELinux to allow apache network connections&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo setsebool -P httpd_can_network_connect true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Add http (not s) config file with the following content (edit as appropriate):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Acquire a certificate. Please follow your organization&#039;s instructions to do so. You should have a private key, and acquire both a certificate and a certificate chain. Some orgs may provide the certificate in the same file as the chain. Please request .pem style certificates, or convert the certificates to .pem.&lt;br /&gt;
&lt;br /&gt;
6. Place the certificate and private key on a secure location on your system. Standard location is &amp;lt;code&amp;gt;/etc/pki/tls/&amp;lt;/code&amp;gt;, with the certificate under &amp;lt;code&amp;gt;/etc/pki/tls/certs/&amp;lt;/code&amp;gt; and the associated private key under &amp;lt;/code&amp;gt;/etc/pki/tls/private/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Add apache config to utilize the certificate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps-ssl.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
    DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# SSL Settings. These may be placed in other config files instead, but are left here for convenience. &lt;br /&gt;
SSLEngine on&lt;br /&gt;
&lt;br /&gt;
# BEGIN Possible security settings - based on LetsEncrypt recommendations as of Feb 2023.&lt;br /&gt;
# ---&lt;br /&gt;
# Please adjust to your own organization&#039;s guidelines!&lt;br /&gt;
SSLHonorCipherOrder     off&lt;br /&gt;
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1&lt;br /&gt;
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&lt;br /&gt;
&lt;br /&gt;
SSLOptions +StrictRequire&lt;br /&gt;
&lt;br /&gt;
# Add vhost name to log entries:&lt;br /&gt;
LogFormat &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot; vhost_combined&lt;br /&gt;
LogFormat &amp;quot;%v %h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b&amp;quot; vhost_common&lt;br /&gt;
# ---&lt;br /&gt;
# END Possible security settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Reference the certificates:&lt;br /&gt;
SSLCertificateFile /etc/pki/tls/certs/&amp;lt;yourserver.yourorg.com&amp;gt;.pem&lt;br /&gt;
SSLCertificateKeyFile /etc/pki/tls/private/&amp;lt;yourserversprivatekey&amp;gt;.pem&lt;br /&gt;
&lt;br /&gt;
# Not necessary if the certificate file includes a chain as well. See [[apache doc|https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile]] &lt;br /&gt;
SSLCertificateChainFile /etc/letsencrypt/live/dockerdev1.lingoport.io/chain.pem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Optionally enforce a redirect to https by uncommenting and filling out the following section in &amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteCond %{SERVER_NAME} =example.somecorp.com&lt;br /&gt;
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9.  Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Docker Pre-Requisite==&lt;br /&gt;
Docker is a platform that allows you to easily develop, test, and deploy applications as containers. This section will walk you through the process of installing Docker on a Linux system.&lt;br /&gt;
&lt;br /&gt;
On the system (most likely a VM) dedicated to Command Center, make sure you have the latest version of docker up and running. The following steps may help.&lt;br /&gt;
&lt;br /&gt;
A user with &#039;&#039;&#039;sudo&#039;&#039;&#039; privileges is required to run most commands.&lt;br /&gt;
&lt;br /&gt;
====Uninstall old docker versions====&lt;br /&gt;
&lt;br /&gt;
This is an optional step in case your docker version is out of date:&lt;br /&gt;
&lt;br /&gt;
    sudo yum remove docker \&lt;br /&gt;
                  docker-client \&lt;br /&gt;
                  docker-client-latest \&lt;br /&gt;
                  docker-common \&lt;br /&gt;
                  docker-latest \&lt;br /&gt;
                  docker-latest-logrotate \&lt;br /&gt;
                  docker-logrotate \&lt;br /&gt;
                  docker-engine&lt;br /&gt;
&lt;br /&gt;
====Install docker using the repository====&lt;br /&gt;
&lt;br /&gt;
    sudo yum install -y yum-utils&lt;br /&gt;
    sudo yum-config-manager \&lt;br /&gt;
      --add-repo \&lt;br /&gt;
      https://download.docker.com/linux/centos/docker-ce.repo&lt;br /&gt;
 &lt;br /&gt;
    sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin&lt;br /&gt;
&lt;br /&gt;
====Start Docker.====&lt;br /&gt;
Start docker using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl start docker&lt;br /&gt;
&lt;br /&gt;
Enable the Docker service to start automatically on system boot by running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl enable docker&lt;br /&gt;
&lt;br /&gt;
====Verify that Docker Engine is installed correctly ====&lt;br /&gt;
Run the hello-world image.&lt;br /&gt;
&lt;br /&gt;
    $ sudo docker run hello-world&lt;br /&gt;
&lt;br /&gt;
This command will run a test container and display a message indicating that the installation is working properly.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
When deploying Command Center, the configuration determines if the user management is done by Command Center itself, via an LDAP, or via SSO (using SAML).&lt;br /&gt;
&lt;br /&gt;
=== Command Center User Database ===&lt;br /&gt;
&lt;br /&gt;
One administration user is configured. Contact support (at) lingoport (dot) com in order to get an administration user and password. That user can then create Command Center users. It is strongly recommended to change the first administration password and keep it safe.&lt;br /&gt;
&lt;br /&gt;
=== LDAP ===&lt;br /&gt;
&lt;br /&gt;
* LDAP Connection &lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
=== SSO ===&lt;br /&gt;
* SSO Connection&lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= New Command Center Installation =&lt;br /&gt;
&lt;br /&gt;
==Create the database conf file==&lt;br /&gt;
The following is provided for a CentOS system:&lt;br /&gt;
&lt;br /&gt;
Uses the centos user as default user for docker&lt;br /&gt;
&lt;br /&gt;
* /home/centos/mysql/conf.d/mysql.cnf &lt;br /&gt;
&lt;br /&gt;
    [client]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
    [mysql]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration == &lt;br /&gt;
&lt;br /&gt;
Request the &#039;&#039;CommandCenterInstall.zip&#039;&#039; file from your customer success engineer. The zip file contains four files:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    install.conf&lt;br /&gt;
    InstallCommandCenter.sh&lt;br /&gt;
    UninstallCommandCenter.sh&lt;br /&gt;
    UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
Copy the above files to your home directory (/home/centos or /home/ec2-user)&lt;br /&gt;
&lt;br /&gt;
===Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
You need to provide your serverURL, your Docker Hub username and token, and MYSQL root password you want to use.  Also make sure the version is the one that is wanted. &lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Docker network name you want to create&lt;br /&gt;
  #&lt;br /&gt;
  database_network=mysqlnetscommand&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the MYSQL root password you want to create for the MySQL database container&lt;br /&gt;
  #&lt;br /&gt;
  database_root_password=mySQL!c0mma9d&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub username&lt;br /&gt;
  #&lt;br /&gt;
  docker_username=xxxlingoport&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub account token&lt;br /&gt;
  #&lt;br /&gt;
  docker_account_token=dckr_xxx_bMjvwehHwO7svVHuIExj3i346eM&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Command Center version&lt;br /&gt;
  #&lt;br /&gt;
  command_center_image_version=69&lt;br /&gt;
  #&lt;br /&gt;
  # The Server URL: &#039;&amp;quot;http://yourserver:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  serverURL=&#039;&amp;quot;http://&amp;lt;yourserver&amp;gt;:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  # The company name on your Localyzer license&lt;br /&gt;
  #&lt;br /&gt;
  company_name=Lingoport&lt;br /&gt;
&lt;br /&gt;
==Run InstallCommandCenter.sh==&lt;br /&gt;
&lt;br /&gt;
     chmod +x InstallCommandCenter.sh&lt;br /&gt;
     sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
If you need to re-run the InstallCommandCenter.sh, make sure to run UninstallCommandCenter.sh first to clean your environment.&lt;br /&gt;
&lt;br /&gt;
Note: Docker image version is not the Command Center version, check latest docker image version at  https://hub.docker.com/repository/docker/lingoport/command-center_dev/general&lt;br /&gt;
&lt;br /&gt;
You should see at least an MySQL and a Command Center container running.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation == &lt;br /&gt;
Log in to the URL based on the command-center-config.sh settings, so something like:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[TEMPORARY-TO BE REWRITTEN ] (not http!) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    https://commandcenter.mycompany.io/&lt;br /&gt;
    or&lt;br /&gt;
    https://lingoport.mycompany.io/command-center&lt;br /&gt;
    or&lt;br /&gt;
    http://server.mycompany.io:8081/command-center&lt;br /&gt;
&lt;br /&gt;
You should now be able to install the licenses and create projects.&lt;br /&gt;
&lt;br /&gt;
The Command Center will initially have one Administrator user &#039;&#039;&#039;CCAdmin&#039;&#039;&#039; with the password &#039;&#039;&#039;please.reset.me&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Command Center Update =&lt;br /&gt;
==Update install.conf ==&lt;br /&gt;
&lt;br /&gt;
Change the &#039;&#039;version number&#039;&#039; to get the Command Center image update version.&lt;br /&gt;
See [[Command_Center_Installation#Configuration | Configuration ]] above.&lt;br /&gt;
&lt;br /&gt;
====Run UpdateCommandCenter.sh====&lt;br /&gt;
&lt;br /&gt;
     chmod +x UpdateCommandCenter.sh&lt;br /&gt;
     sudo ./UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
* From Command Center, as an administrator, go to settings and click &#039;Restart&#039;&lt;br /&gt;
* From the VM, use docker commands to stop or start Command Center. For example:&lt;br /&gt;
  &lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    sudo docker stop &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    &lt;br /&gt;
    sudo docker container ls -a | grep command&lt;br /&gt;
    sudo docker start &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
  sudo ./UninstallCommandCenter.sh&lt;br /&gt;
  Uninstalling the Command Center Servers ...&lt;br /&gt;
&lt;br /&gt;
  sudo docker ps&lt;br /&gt;
  CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Command Center is now ready to be used. Proceed to the URL configured in the installation and follow the [[Command_Center_User_Guide | User Guide]] steps.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97016</id>
		<title>Command Center Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97016"/>
		<updated>2023-02-15T18:58:41Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* HTTPS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites=&lt;br /&gt;
Before installing or updating Command Center, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
When installing Command Center on premises,  the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is very important to the successful deployment of the Lingoport applications when installing the suite on site. In particular, the IT group that sets up the Linux system must understand the usage model for the system. &lt;br /&gt;
Lingoport requires a meeting with the parties responsible for setting up and maintaining the host system &amp;lt;b&amp;gt;before&amp;lt;/b&amp;gt; installation can properly begin. The hope is that once the system is setup for installation, minimal IT interaction is necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preparations must be made with the &#039;&#039;&#039;IT&#039;&#039;&#039; team to ensure that all &#039;&#039;&#039;prerequisites&#039;&#039;&#039; are met before installation.  For new installations, this is the recommended method to use to verify that all the various actors work together well.&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
Before installing Command Center, the following needs to be configured:&lt;br /&gt;
* Hardware &lt;br /&gt;
* Linux &lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall&lt;br /&gt;
* Https&lt;br /&gt;
&lt;br /&gt;
=== Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:Docker Deployment Diagram.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware &amp;amp; Software Requirements==&lt;br /&gt;
The following sections describe the hardware and software requirements for Command Center.&lt;br /&gt;
&lt;br /&gt;
Please note that the Globalyzer Server installation is in a different section. &lt;br /&gt;
&lt;br /&gt;
===Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Minimum&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 16 GB&lt;br /&gt;
| 16 GB&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 160 GB&lt;br /&gt;
| 500 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The [[Terms_and_Definitions#GlobalyzerServer|Globalyzer Server]] may be hosted by Lingoport, reside on another server, or be installed on the same system.  Other Linux and Windows machines may have Globalyzer clients installed.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
The current versions of these software products can be found at: [[Introduction#Current_versions_of_Lingoport_products_and_supporting_applications | Current versions of Lingoport products and supporting applications]]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! Operating System&lt;br /&gt;
| Linux, CentOS (7) or RedHat (8)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker installation, most of the containers will be managed by Docker. However, volumes will be mounted on the Linux VM and a database configuration file will reside on the VM: This requires Linux.&lt;br /&gt;
&lt;br /&gt;
==Access and Ports / Firewall==&lt;br /&gt;
Command Center may need to be accessible by Lingoport and customer personnel to configure jobs, check the console if any problem arise, run jobs if necessary. Command Center needs to be accessible by many customer actors, including development teams, management, and QA, Lingoport, Translation Vendors.&lt;br /&gt;
&lt;br /&gt;
Please see [[Deployment_Scenarios#External_Access_and_Ports |External Access and Ports]] for all the details.&lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
One common path to HTTPS configuration is via reverse proxy hosted on the hosting linux system. For CentOS / RHEL, instructions are:&lt;br /&gt;
&lt;br /&gt;
1. Install apache and mod_ssl (https support for apache)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install httdp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install mod_ssl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Configure SELinux to allow apache network connections&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo setsebool -P httpd_can_network_connect true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Add http (not s) config file with the following content (edit as appropriate):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Acquire a certificate. Please follow your organization&#039;s instructions to do so. You should have a private key, and acquire both a certificate and a certificate chain. Some orgs may provide the certificate in the same file as the chain. Please request .pem style certificates, or convert the certificates to .pem.&lt;br /&gt;
&lt;br /&gt;
6. Place the certificate and private key on a secure location on your system. Standard location is &amp;lt;code&amp;gt;/etc/pki/tls/&amp;lt;/code&amp;gt;, with the certificate under &amp;lt;code&amp;gt;/etc/pki/tls/certs/&amp;lt;/code&amp;gt; and the associated private key under &amp;lt;/code&amp;gt;/etc/pki/tls/private/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Add apache config to utilize the certificate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps-ssl.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
    DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# SSL Settings. These may be placed in other config files instead, but are left here for convenience. &lt;br /&gt;
SSLEngine on&lt;br /&gt;
&lt;br /&gt;
# BEGIN Possible security settings - based on LetsEncrypt recommendations as of Feb 2023.&lt;br /&gt;
# ---&lt;br /&gt;
# Please adjust to your own organization&#039;s guidelines!&lt;br /&gt;
SSLHonorCipherOrder     off&lt;br /&gt;
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1&lt;br /&gt;
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&lt;br /&gt;
&lt;br /&gt;
SSLOptions +StrictRequire&lt;br /&gt;
&lt;br /&gt;
# Add vhost name to log entries:&lt;br /&gt;
LogFormat &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot; vhost_combined&lt;br /&gt;
LogFormat &amp;quot;%v %h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b&amp;quot; vhost_common&lt;br /&gt;
# ---&lt;br /&gt;
# END Possible security settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Reference the certificates:&lt;br /&gt;
SSLCertificateFile /etc/pki/tls/certs/&amp;lt;yourserver.yourorg.com&amp;gt;.pem&lt;br /&gt;
SSLCertificateKeyFile /etc/pki/tls/private/&amp;lt;yourserversprivatekey&amp;gt;.pem&lt;br /&gt;
&lt;br /&gt;
# Not necessary if the certificate file includes a chain as well. See [[apache doc|https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile]] &lt;br /&gt;
SSLCertificateChainFile /etc/letsencrypt/live/dockerdev1.lingoport.io/chain.pem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Optionally enforce a redirect to https by uncommenting and filling out the following section in &amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteCond %{SERVER_NAME} =example.somecorp.com&lt;br /&gt;
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9.  Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Docker Pre-Requisite==&lt;br /&gt;
Docker is a platform that allows you to easily develop, test, and deploy applications as containers. This section will walk you through the process of installing Docker on a Linux system.&lt;br /&gt;
&lt;br /&gt;
On the system (most likely a VM) dedicated to Command Center, make sure you have the latest version of docker up and running. The following steps may help.&lt;br /&gt;
&lt;br /&gt;
A user with &#039;&#039;&#039;sudo&#039;&#039;&#039; privileges is required to run most commands.&lt;br /&gt;
&lt;br /&gt;
====Uninstall old docker versions====&lt;br /&gt;
&lt;br /&gt;
This is an optional step in case your docker version is out of date:&lt;br /&gt;
&lt;br /&gt;
    sudo yum remove docker \&lt;br /&gt;
                  docker-client \&lt;br /&gt;
                  docker-client-latest \&lt;br /&gt;
                  docker-common \&lt;br /&gt;
                  docker-latest \&lt;br /&gt;
                  docker-latest-logrotate \&lt;br /&gt;
                  docker-logrotate \&lt;br /&gt;
                  docker-engine&lt;br /&gt;
&lt;br /&gt;
====Install docker using the repository====&lt;br /&gt;
&lt;br /&gt;
    sudo yum install -y yum-utils&lt;br /&gt;
    sudo yum-config-manager \&lt;br /&gt;
      --add-repo \&lt;br /&gt;
      https://download.docker.com/linux/centos/docker-ce.repo&lt;br /&gt;
 &lt;br /&gt;
    sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin&lt;br /&gt;
&lt;br /&gt;
====Start Docker.====&lt;br /&gt;
Start docker using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl start docker&lt;br /&gt;
&lt;br /&gt;
Enable the Docker service to start automatically on system boot by running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl enable docker&lt;br /&gt;
&lt;br /&gt;
====Verify that Docker Engine is installed correctly ====&lt;br /&gt;
Run the hello-world image.&lt;br /&gt;
&lt;br /&gt;
    $ sudo docker run hello-world&lt;br /&gt;
&lt;br /&gt;
This command will run a test container and display a message indicating that the installation is working properly.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
When deploying Command Center, the configuration determines if the user management is done by Command Center itself, via an LDAP, or via SSO (using SAML).&lt;br /&gt;
&lt;br /&gt;
=== Command Center User Database ===&lt;br /&gt;
&lt;br /&gt;
One administration user is configured. Contact support (at) lingoport (dot) com in order to get an administration user and password. That user can then create Command Center users. It is strongly recommended to change the first administration password and keep it safe.&lt;br /&gt;
&lt;br /&gt;
=== LDAP ===&lt;br /&gt;
&lt;br /&gt;
* LDAP Connection &lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
=== SSO ===&lt;br /&gt;
* SSO Connection&lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= New Command Center Installation =&lt;br /&gt;
&lt;br /&gt;
==Create the database conf file==&lt;br /&gt;
The following is provided for a CentOS system:&lt;br /&gt;
&lt;br /&gt;
Uses the centos user as default user for docker&lt;br /&gt;
&lt;br /&gt;
* /home/centos/mysql/conf.d/mysql.cnf &lt;br /&gt;
&lt;br /&gt;
    [client]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
    [mysql]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration == &lt;br /&gt;
&lt;br /&gt;
Request the &#039;&#039;CommandCenterInstall.zip&#039;&#039; file from your customer success engineer. The zip file contains four files:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    install.conf&lt;br /&gt;
    InstallCommandCenter.sh&lt;br /&gt;
    UninstallCommandCenter.sh&lt;br /&gt;
    UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
Copy the above files to your home directory (/home/centos or /home/ec2-user)&lt;br /&gt;
&lt;br /&gt;
===Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
You need to provide your serverURL, your Docker Hub username and token, and MYSQL root password you want to use.  Also make sure the version is the one that is wanted. &lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Docker network name you want to create&lt;br /&gt;
  #&lt;br /&gt;
  database_network=mysqlnetscommand&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the MYSQL root password you want to create for the MySQL database container&lt;br /&gt;
  #&lt;br /&gt;
  database_root_password=mySQL!c0mma9d&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub username&lt;br /&gt;
  #&lt;br /&gt;
  docker_username=xxxlingoport&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub account token&lt;br /&gt;
  #&lt;br /&gt;
  docker_account_token=dckr_xxx_bMjvwehHwO7svVHuIExj3i346eM&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Command Center version&lt;br /&gt;
  #&lt;br /&gt;
  command_center_image_version=69&lt;br /&gt;
  #&lt;br /&gt;
  # The Server URL: &#039;&amp;quot;http://yourserver:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  serverURL=&#039;&amp;quot;http://&amp;lt;yourserver&amp;gt;:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  # The company name on your Localyzer license&lt;br /&gt;
  #&lt;br /&gt;
  company_name=Lingoport&lt;br /&gt;
&lt;br /&gt;
==Run InstallCommandCenter.sh==&lt;br /&gt;
&lt;br /&gt;
     chmod +x InstallCommandCenter.sh&lt;br /&gt;
     sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
If you need to re-run the InstallCommandCenter.sh, make sure to run UninstallCommandCenter.sh first to clean your environment.&lt;br /&gt;
&lt;br /&gt;
Note: Docker image version is not the Command Center version, check latest docker image version at  https://hub.docker.com/repository/docker/lingoport/command-center_dev/general&lt;br /&gt;
&lt;br /&gt;
You should see at least an MySQL and a Command Center container running.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation == &lt;br /&gt;
Log in to the URL based on the command-center-config.sh settings, so something like:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[TEMPORARY-TO BE REWRITTEN ] (not http!) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    https://commandcenter.mycompany.io/&lt;br /&gt;
    or&lt;br /&gt;
    https://lingoport.mycompany.io/command-center&lt;br /&gt;
    or&lt;br /&gt;
    http://server.mycompany.io:8081/command-center&lt;br /&gt;
&lt;br /&gt;
You should now be able to install the licenses and create projects.&lt;br /&gt;
&lt;br /&gt;
The Command Center will initially have one Administrator user &#039;&#039;&#039;CCAdmin&#039;&#039;&#039; with the password &#039;&#039;&#039;please.reset.me&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Command Center Update =&lt;br /&gt;
==Update install.conf ==&lt;br /&gt;
&lt;br /&gt;
Change the &#039;&#039;version number&#039;&#039; to get the Command Center image update version.&lt;br /&gt;
See [[Command_Center_Installation#Configuration | Configuration ]] above.&lt;br /&gt;
&lt;br /&gt;
====Run UpdateCommandCenter.sh====&lt;br /&gt;
&lt;br /&gt;
     chmod +x UpdateCommandCenter.sh&lt;br /&gt;
     sudo ./UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
* From Command Center, as an administrator, go to settings and click &#039;Restart&#039;&lt;br /&gt;
* From the VM, use docker commands to stop or start Command Center. For example:&lt;br /&gt;
  &lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    sudo docker stop &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    &lt;br /&gt;
    sudo docker container ls -a | grep command&lt;br /&gt;
    sudo docker start &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
  sudo ./UninstallCommandCenter.sh&lt;br /&gt;
  Uninstalling the Command Center Servers ...&lt;br /&gt;
&lt;br /&gt;
  sudo docker ps&lt;br /&gt;
  CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Command Center is now ready to be used. Proceed to the URL configured in the installation and follow the [[Command_Center_User_Guide | User Guide]] steps.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97015</id>
		<title>Command Center Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97015"/>
		<updated>2023-02-15T18:57:52Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* HTTPS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites=&lt;br /&gt;
Before installing or updating Command Center, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
When installing Command Center on premises,  the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is very important to the successful deployment of the Lingoport applications when installing the suite on site. In particular, the IT group that sets up the Linux system must understand the usage model for the system. &lt;br /&gt;
Lingoport requires a meeting with the parties responsible for setting up and maintaining the host system &amp;lt;b&amp;gt;before&amp;lt;/b&amp;gt; installation can properly begin. The hope is that once the system is setup for installation, minimal IT interaction is necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preparations must be made with the &#039;&#039;&#039;IT&#039;&#039;&#039; team to ensure that all &#039;&#039;&#039;prerequisites&#039;&#039;&#039; are met before installation.  For new installations, this is the recommended method to use to verify that all the various actors work together well.&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
Before installing Command Center, the following needs to be configured:&lt;br /&gt;
* Hardware &lt;br /&gt;
* Linux &lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall&lt;br /&gt;
* Https&lt;br /&gt;
&lt;br /&gt;
=== Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:Docker Deployment Diagram.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware &amp;amp; Software Requirements==&lt;br /&gt;
The following sections describe the hardware and software requirements for Command Center.&lt;br /&gt;
&lt;br /&gt;
Please note that the Globalyzer Server installation is in a different section. &lt;br /&gt;
&lt;br /&gt;
===Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Minimum&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 16 GB&lt;br /&gt;
| 16 GB&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 160 GB&lt;br /&gt;
| 500 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The [[Terms_and_Definitions#GlobalyzerServer|Globalyzer Server]] may be hosted by Lingoport, reside on another server, or be installed on the same system.  Other Linux and Windows machines may have Globalyzer clients installed.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
The current versions of these software products can be found at: [[Introduction#Current_versions_of_Lingoport_products_and_supporting_applications | Current versions of Lingoport products and supporting applications]]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! Operating System&lt;br /&gt;
| Linux, CentOS (7) or RedHat (8)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker installation, most of the containers will be managed by Docker. However, volumes will be mounted on the Linux VM and a database configuration file will reside on the VM: This requires Linux.&lt;br /&gt;
&lt;br /&gt;
==Access and Ports / Firewall==&lt;br /&gt;
Command Center may need to be accessible by Lingoport and customer personnel to configure jobs, check the console if any problem arise, run jobs if necessary. Command Center needs to be accessible by many customer actors, including development teams, management, and QA, Lingoport, Translation Vendors.&lt;br /&gt;
&lt;br /&gt;
Please see [[Deployment_Scenarios#External_Access_and_Ports |External Access and Ports]] for all the details.&lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
A simple path to HTTPS configuration is via reverse proxy hosted on the hosting linux system. For CentOS / RHEL, common instructions are:&lt;br /&gt;
&lt;br /&gt;
1. Install apache and mod_ssl (https support for apache)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install httdp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install mod_ssl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Configure SELinux to allow apache network connections&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo setsebool -P httpd_can_network_connect true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Add http (not s) config file with the following content (edit as appropriate):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Acquire a certificate. Please follow your organization&#039;s instructions to do so. You should have a private key, and acquire both a certificate and a certificate chain. Some orgs may provide the certificate in the same file as the chain. Please request .pem style certificates, or convert the certificates to .pem.&lt;br /&gt;
&lt;br /&gt;
6. Place the certificate and private key on a secure location on your system. Standard location is &amp;lt;code&amp;gt;/etc/pki/tls/&amp;lt;/code&amp;gt;, with the certificate under &amp;lt;code&amp;gt;/etc/pki/tls/certs/&amp;lt;/code&amp;gt; and the associated private key under &amp;lt;/code&amp;gt;/etc/pki/tls/private/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Add apache config to utilize the certificate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps-ssl.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
    DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# SSL Settings. These may be placed in other config files instead, but are left here for convenience. &lt;br /&gt;
SSLEngine on&lt;br /&gt;
&lt;br /&gt;
# BEGIN Possible security settings - based on LetsEncrypt recommendations as of Feb 2023.&lt;br /&gt;
# ---&lt;br /&gt;
# Please adjust to your own organization&#039;s guidelines!&lt;br /&gt;
SSLHonorCipherOrder     off&lt;br /&gt;
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1&lt;br /&gt;
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&lt;br /&gt;
&lt;br /&gt;
SSLOptions +StrictRequire&lt;br /&gt;
&lt;br /&gt;
# Add vhost name to log entries:&lt;br /&gt;
LogFormat &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot; vhost_combined&lt;br /&gt;
LogFormat &amp;quot;%v %h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b&amp;quot; vhost_common&lt;br /&gt;
# ---&lt;br /&gt;
# END Possible security settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Reference the certificates:&lt;br /&gt;
SSLCertificateFile /etc/pki/tls/certs/&amp;lt;yourserver.yourorg.com&amp;gt;.pem&lt;br /&gt;
SSLCertificateKeyFile /etc/pki/tls/private/&amp;lt;yourserversprivatekey&amp;gt;.pem&lt;br /&gt;
&lt;br /&gt;
# Not necessary if the certificate file includes a chain as well. See [[apache doc|https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile]] &lt;br /&gt;
SSLCertificateChainFile /etc/letsencrypt/live/dockerdev1.lingoport.io/chain.pem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Optionally enforce a redirect to https by uncommenting and filling out the following section in &amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteCond %{SERVER_NAME} =example.somecorp.com&lt;br /&gt;
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8.  Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sudo systemctl restart httpd&lt;br /&gt;
&lt;br /&gt;
== Docker Pre-Requisite==&lt;br /&gt;
Docker is a platform that allows you to easily develop, test, and deploy applications as containers. This section will walk you through the process of installing Docker on a Linux system.&lt;br /&gt;
&lt;br /&gt;
On the system (most likely a VM) dedicated to Command Center, make sure you have the latest version of docker up and running. The following steps may help.&lt;br /&gt;
&lt;br /&gt;
A user with &#039;&#039;&#039;sudo&#039;&#039;&#039; privileges is required to run most commands.&lt;br /&gt;
&lt;br /&gt;
====Uninstall old docker versions====&lt;br /&gt;
&lt;br /&gt;
This is an optional step in case your docker version is out of date:&lt;br /&gt;
&lt;br /&gt;
    sudo yum remove docker \&lt;br /&gt;
                  docker-client \&lt;br /&gt;
                  docker-client-latest \&lt;br /&gt;
                  docker-common \&lt;br /&gt;
                  docker-latest \&lt;br /&gt;
                  docker-latest-logrotate \&lt;br /&gt;
                  docker-logrotate \&lt;br /&gt;
                  docker-engine&lt;br /&gt;
&lt;br /&gt;
====Install docker using the repository====&lt;br /&gt;
&lt;br /&gt;
    sudo yum install -y yum-utils&lt;br /&gt;
    sudo yum-config-manager \&lt;br /&gt;
      --add-repo \&lt;br /&gt;
      https://download.docker.com/linux/centos/docker-ce.repo&lt;br /&gt;
 &lt;br /&gt;
    sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin&lt;br /&gt;
&lt;br /&gt;
====Start Docker.====&lt;br /&gt;
Start docker using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl start docker&lt;br /&gt;
&lt;br /&gt;
Enable the Docker service to start automatically on system boot by running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl enable docker&lt;br /&gt;
&lt;br /&gt;
====Verify that Docker Engine is installed correctly ====&lt;br /&gt;
Run the hello-world image.&lt;br /&gt;
&lt;br /&gt;
    $ sudo docker run hello-world&lt;br /&gt;
&lt;br /&gt;
This command will run a test container and display a message indicating that the installation is working properly.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
When deploying Command Center, the configuration determines if the user management is done by Command Center itself, via an LDAP, or via SSO (using SAML).&lt;br /&gt;
&lt;br /&gt;
=== Command Center User Database ===&lt;br /&gt;
&lt;br /&gt;
One administration user is configured. Contact support (at) lingoport (dot) com in order to get an administration user and password. That user can then create Command Center users. It is strongly recommended to change the first administration password and keep it safe.&lt;br /&gt;
&lt;br /&gt;
=== LDAP ===&lt;br /&gt;
&lt;br /&gt;
* LDAP Connection &lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
=== SSO ===&lt;br /&gt;
* SSO Connection&lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= New Command Center Installation =&lt;br /&gt;
&lt;br /&gt;
==Create the database conf file==&lt;br /&gt;
The following is provided for a CentOS system:&lt;br /&gt;
&lt;br /&gt;
Uses the centos user as default user for docker&lt;br /&gt;
&lt;br /&gt;
* /home/centos/mysql/conf.d/mysql.cnf &lt;br /&gt;
&lt;br /&gt;
    [client]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
    [mysql]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration == &lt;br /&gt;
&lt;br /&gt;
Request the &#039;&#039;CommandCenterInstall.zip&#039;&#039; file from your customer success engineer. The zip file contains four files:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    install.conf&lt;br /&gt;
    InstallCommandCenter.sh&lt;br /&gt;
    UninstallCommandCenter.sh&lt;br /&gt;
    UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
Copy the above files to your home directory (/home/centos or /home/ec2-user)&lt;br /&gt;
&lt;br /&gt;
===Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
You need to provide your serverURL, your Docker Hub username and token, and MYSQL root password you want to use.  Also make sure the version is the one that is wanted. &lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Docker network name you want to create&lt;br /&gt;
  #&lt;br /&gt;
  database_network=mysqlnetscommand&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the MYSQL root password you want to create for the MySQL database container&lt;br /&gt;
  #&lt;br /&gt;
  database_root_password=mySQL!c0mma9d&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub username&lt;br /&gt;
  #&lt;br /&gt;
  docker_username=xxxlingoport&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub account token&lt;br /&gt;
  #&lt;br /&gt;
  docker_account_token=dckr_xxx_bMjvwehHwO7svVHuIExj3i346eM&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Command Center version&lt;br /&gt;
  #&lt;br /&gt;
  command_center_image_version=69&lt;br /&gt;
  #&lt;br /&gt;
  # The Server URL: &#039;&amp;quot;http://yourserver:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  serverURL=&#039;&amp;quot;http://&amp;lt;yourserver&amp;gt;:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  # The company name on your Localyzer license&lt;br /&gt;
  #&lt;br /&gt;
  company_name=Lingoport&lt;br /&gt;
&lt;br /&gt;
==Run InstallCommandCenter.sh==&lt;br /&gt;
&lt;br /&gt;
     chmod +x InstallCommandCenter.sh&lt;br /&gt;
     sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
If you need to re-run the InstallCommandCenter.sh, make sure to run UninstallCommandCenter.sh first to clean your environment.&lt;br /&gt;
&lt;br /&gt;
Note: Docker image version is not the Command Center version, check latest docker image version at  https://hub.docker.com/repository/docker/lingoport/command-center_dev/general&lt;br /&gt;
&lt;br /&gt;
You should see at least an MySQL and a Command Center container running.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation == &lt;br /&gt;
Log in to the URL based on the command-center-config.sh settings, so something like:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[TEMPORARY-TO BE REWRITTEN ] (not http!) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    https://commandcenter.mycompany.io/&lt;br /&gt;
    or&lt;br /&gt;
    https://lingoport.mycompany.io/command-center&lt;br /&gt;
    or&lt;br /&gt;
    http://server.mycompany.io:8081/command-center&lt;br /&gt;
&lt;br /&gt;
You should now be able to install the licenses and create projects.&lt;br /&gt;
&lt;br /&gt;
The Command Center will initially have one Administrator user &#039;&#039;&#039;CCAdmin&#039;&#039;&#039; with the password &#039;&#039;&#039;please.reset.me&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Command Center Update =&lt;br /&gt;
==Update install.conf ==&lt;br /&gt;
&lt;br /&gt;
Change the &#039;&#039;version number&#039;&#039; to get the Command Center image update version.&lt;br /&gt;
See [[Command_Center_Installation#Configuration | Configuration ]] above.&lt;br /&gt;
&lt;br /&gt;
====Run UpdateCommandCenter.sh====&lt;br /&gt;
&lt;br /&gt;
     chmod +x UpdateCommandCenter.sh&lt;br /&gt;
     sudo ./UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
* From Command Center, as an administrator, go to settings and click &#039;Restart&#039;&lt;br /&gt;
* From the VM, use docker commands to stop or start Command Center. For example:&lt;br /&gt;
  &lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    sudo docker stop &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    &lt;br /&gt;
    sudo docker container ls -a | grep command&lt;br /&gt;
    sudo docker start &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
  sudo ./UninstallCommandCenter.sh&lt;br /&gt;
  Uninstalling the Command Center Servers ...&lt;br /&gt;
&lt;br /&gt;
  sudo docker ps&lt;br /&gt;
  CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Command Center is now ready to be used. Proceed to the URL configured in the installation and follow the [[Command_Center_User_Guide | User Guide]] steps.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97014</id>
		<title>Command Center Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97014"/>
		<updated>2023-02-15T18:55:52Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* HTTPS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites=&lt;br /&gt;
Before installing or updating Command Center, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
When installing Command Center on premises,  the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is very important to the successful deployment of the Lingoport applications when installing the suite on site. In particular, the IT group that sets up the Linux system must understand the usage model for the system. &lt;br /&gt;
Lingoport requires a meeting with the parties responsible for setting up and maintaining the host system &amp;lt;b&amp;gt;before&amp;lt;/b&amp;gt; installation can properly begin. The hope is that once the system is setup for installation, minimal IT interaction is necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preparations must be made with the &#039;&#039;&#039;IT&#039;&#039;&#039; team to ensure that all &#039;&#039;&#039;prerequisites&#039;&#039;&#039; are met before installation.  For new installations, this is the recommended method to use to verify that all the various actors work together well.&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
Before installing Command Center, the following needs to be configured:&lt;br /&gt;
* Hardware &lt;br /&gt;
* Linux &lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall&lt;br /&gt;
* Https&lt;br /&gt;
&lt;br /&gt;
=== Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:Docker Deployment Diagram.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware &amp;amp; Software Requirements==&lt;br /&gt;
The following sections describe the hardware and software requirements for Command Center.&lt;br /&gt;
&lt;br /&gt;
Please note that the Globalyzer Server installation is in a different section. &lt;br /&gt;
&lt;br /&gt;
===Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Minimum&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 16 GB&lt;br /&gt;
| 16 GB&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 160 GB&lt;br /&gt;
| 500 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The [[Terms_and_Definitions#GlobalyzerServer|Globalyzer Server]] may be hosted by Lingoport, reside on another server, or be installed on the same system.  Other Linux and Windows machines may have Globalyzer clients installed.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
The current versions of these software products can be found at: [[Introduction#Current_versions_of_Lingoport_products_and_supporting_applications | Current versions of Lingoport products and supporting applications]]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! Operating System&lt;br /&gt;
| Linux, CentOS (7) or RedHat (8)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker installation, most of the containers will be managed by Docker. However, volumes will be mounted on the Linux VM and a database configuration file will reside on the VM: This requires Linux.&lt;br /&gt;
&lt;br /&gt;
==Access and Ports / Firewall==&lt;br /&gt;
Command Center may need to be accessible by Lingoport and customer personnel to configure jobs, check the console if any problem arise, run jobs if necessary. Command Center needs to be accessible by many customer actors, including development teams, management, and QA, Lingoport, Translation Vendors.&lt;br /&gt;
&lt;br /&gt;
Please see [[Deployment_Scenarios#External_Access_and_Ports |External Access and Ports]] for all the details.&lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
A simple path to HTTPS configuration is via reverse proxy hosted on the hosting linux system. For CentOS / RHEL, common instructions are:&lt;br /&gt;
&lt;br /&gt;
1. Install apache and mod_ssl (https support for apache)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install httdp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install mod_ssl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Configure SELinux to allow apache network connections&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo setsebool -P httpd_can_network_connect true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Add http (not s) config file with the following content (edit as appropriate):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Acquire a certificate. Please follow your organization&#039;s instructions to do so. You should have a private key, and acquire both a certificate and a certificate chain. Some orgs may provide the certificate in the same file as the chain. Please request .pem style certificates, or convert the certificates to .pem.&lt;br /&gt;
&lt;br /&gt;
6. Place the certificate and private key on a secure location on your system. Standard location is &amp;lt;code&amp;gt;/etc/pki/tls/&amp;lt;/code&amp;gt;, with the certificate under &amp;lt;code&amp;gt;/etc/pki/tls/certs/&amp;lt;/code&amp;gt; and the associated private key under &amp;lt;/code&amp;gt;/etc/pki/tls/private/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Add apache config to utilize the certificate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps-ssl.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
    DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# SSL Settings. These may be placed in other config files instead, but are left here for convenience. &lt;br /&gt;
SSLEngine on&lt;br /&gt;
&lt;br /&gt;
# BEGIN Possible security settings - based on LetsEncrypt recommendations as of Feb 2023.&lt;br /&gt;
# ---&lt;br /&gt;
# Please adjust to your own organization&#039;s guidelines!&lt;br /&gt;
SSLHonorCipherOrder     off&lt;br /&gt;
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1&lt;br /&gt;
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&lt;br /&gt;
&lt;br /&gt;
SSLOptions +StrictRequire&lt;br /&gt;
&lt;br /&gt;
# Add vhost name to log entries:&lt;br /&gt;
LogFormat &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot; vhost_combined&lt;br /&gt;
LogFormat &amp;quot;%v %h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b&amp;quot; vhost_common&lt;br /&gt;
# ---&lt;br /&gt;
# END Possible security settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Reference the certificates:&lt;br /&gt;
SSLCertificateFile /etc/pki/tls/certs/&amp;lt;yourserver.yourorg.com&amp;gt;.pem&lt;br /&gt;
SSLCertificateKeyFile /etc/pki/tls/private/&amp;lt;yourserversprivatekey&amp;gt;.pem&lt;br /&gt;
&lt;br /&gt;
# Not necessary if the certificate file includes a chain as well. See [[apache doc|https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile]] &lt;br /&gt;
SSLCertificateChainFile /etc/letsencrypt/live/dockerdev1.lingoport.io/chain.pem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8.  Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sudo systemctl restart httpd&lt;br /&gt;
&lt;br /&gt;
== Docker Pre-Requisite==&lt;br /&gt;
Docker is a platform that allows you to easily develop, test, and deploy applications as containers. This section will walk you through the process of installing Docker on a Linux system.&lt;br /&gt;
&lt;br /&gt;
On the system (most likely a VM) dedicated to Command Center, make sure you have the latest version of docker up and running. The following steps may help.&lt;br /&gt;
&lt;br /&gt;
A user with &#039;&#039;&#039;sudo&#039;&#039;&#039; privileges is required to run most commands.&lt;br /&gt;
&lt;br /&gt;
====Uninstall old docker versions====&lt;br /&gt;
&lt;br /&gt;
This is an optional step in case your docker version is out of date:&lt;br /&gt;
&lt;br /&gt;
    sudo yum remove docker \&lt;br /&gt;
                  docker-client \&lt;br /&gt;
                  docker-client-latest \&lt;br /&gt;
                  docker-common \&lt;br /&gt;
                  docker-latest \&lt;br /&gt;
                  docker-latest-logrotate \&lt;br /&gt;
                  docker-logrotate \&lt;br /&gt;
                  docker-engine&lt;br /&gt;
&lt;br /&gt;
====Install docker using the repository====&lt;br /&gt;
&lt;br /&gt;
    sudo yum install -y yum-utils&lt;br /&gt;
    sudo yum-config-manager \&lt;br /&gt;
      --add-repo \&lt;br /&gt;
      https://download.docker.com/linux/centos/docker-ce.repo&lt;br /&gt;
 &lt;br /&gt;
    sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin&lt;br /&gt;
&lt;br /&gt;
====Start Docker.====&lt;br /&gt;
Start docker using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl start docker&lt;br /&gt;
&lt;br /&gt;
Enable the Docker service to start automatically on system boot by running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl enable docker&lt;br /&gt;
&lt;br /&gt;
====Verify that Docker Engine is installed correctly ====&lt;br /&gt;
Run the hello-world image.&lt;br /&gt;
&lt;br /&gt;
    $ sudo docker run hello-world&lt;br /&gt;
&lt;br /&gt;
This command will run a test container and display a message indicating that the installation is working properly.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
When deploying Command Center, the configuration determines if the user management is done by Command Center itself, via an LDAP, or via SSO (using SAML).&lt;br /&gt;
&lt;br /&gt;
=== Command Center User Database ===&lt;br /&gt;
&lt;br /&gt;
One administration user is configured. Contact support (at) lingoport (dot) com in order to get an administration user and password. That user can then create Command Center users. It is strongly recommended to change the first administration password and keep it safe.&lt;br /&gt;
&lt;br /&gt;
=== LDAP ===&lt;br /&gt;
&lt;br /&gt;
* LDAP Connection &lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
=== SSO ===&lt;br /&gt;
* SSO Connection&lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= New Command Center Installation =&lt;br /&gt;
&lt;br /&gt;
==Create the database conf file==&lt;br /&gt;
The following is provided for a CentOS system:&lt;br /&gt;
&lt;br /&gt;
Uses the centos user as default user for docker&lt;br /&gt;
&lt;br /&gt;
* /home/centos/mysql/conf.d/mysql.cnf &lt;br /&gt;
&lt;br /&gt;
    [client]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
    [mysql]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration == &lt;br /&gt;
&lt;br /&gt;
Request the &#039;&#039;CommandCenterInstall.zip&#039;&#039; file from your customer success engineer. The zip file contains four files:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    install.conf&lt;br /&gt;
    InstallCommandCenter.sh&lt;br /&gt;
    UninstallCommandCenter.sh&lt;br /&gt;
    UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
Copy the above files to your home directory (/home/centos or /home/ec2-user)&lt;br /&gt;
&lt;br /&gt;
===Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
You need to provide your serverURL, your Docker Hub username and token, and MYSQL root password you want to use.  Also make sure the version is the one that is wanted. &lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Docker network name you want to create&lt;br /&gt;
  #&lt;br /&gt;
  database_network=mysqlnetscommand&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the MYSQL root password you want to create for the MySQL database container&lt;br /&gt;
  #&lt;br /&gt;
  database_root_password=mySQL!c0mma9d&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub username&lt;br /&gt;
  #&lt;br /&gt;
  docker_username=xxxlingoport&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub account token&lt;br /&gt;
  #&lt;br /&gt;
  docker_account_token=dckr_xxx_bMjvwehHwO7svVHuIExj3i346eM&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Command Center version&lt;br /&gt;
  #&lt;br /&gt;
  command_center_image_version=69&lt;br /&gt;
  #&lt;br /&gt;
  # The Server URL: &#039;&amp;quot;http://yourserver:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  serverURL=&#039;&amp;quot;http://&amp;lt;yourserver&amp;gt;:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  # The company name on your Localyzer license&lt;br /&gt;
  #&lt;br /&gt;
  company_name=Lingoport&lt;br /&gt;
&lt;br /&gt;
==Run InstallCommandCenter.sh==&lt;br /&gt;
&lt;br /&gt;
     chmod +x InstallCommandCenter.sh&lt;br /&gt;
     sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
If you need to re-run the InstallCommandCenter.sh, make sure to run UninstallCommandCenter.sh first to clean your environment.&lt;br /&gt;
&lt;br /&gt;
Note: Docker image version is not the Command Center version, check latest docker image version at  https://hub.docker.com/repository/docker/lingoport/command-center_dev/general&lt;br /&gt;
&lt;br /&gt;
You should see at least an MySQL and a Command Center container running.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation == &lt;br /&gt;
Log in to the URL based on the command-center-config.sh settings, so something like:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[TEMPORARY-TO BE REWRITTEN ] (not http!) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    https://commandcenter.mycompany.io/&lt;br /&gt;
    or&lt;br /&gt;
    https://lingoport.mycompany.io/command-center&lt;br /&gt;
    or&lt;br /&gt;
    http://server.mycompany.io:8081/command-center&lt;br /&gt;
&lt;br /&gt;
You should now be able to install the licenses and create projects.&lt;br /&gt;
&lt;br /&gt;
The Command Center will initially have one Administrator user &#039;&#039;&#039;CCAdmin&#039;&#039;&#039; with the password &#039;&#039;&#039;please.reset.me&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Command Center Update =&lt;br /&gt;
==Update install.conf ==&lt;br /&gt;
&lt;br /&gt;
Change the &#039;&#039;version number&#039;&#039; to get the Command Center image update version.&lt;br /&gt;
See [[Command_Center_Installation#Configuration | Configuration ]] above.&lt;br /&gt;
&lt;br /&gt;
====Run UpdateCommandCenter.sh====&lt;br /&gt;
&lt;br /&gt;
     chmod +x UpdateCommandCenter.sh&lt;br /&gt;
     sudo ./UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
* From Command Center, as an administrator, go to settings and click &#039;Restart&#039;&lt;br /&gt;
* From the VM, use docker commands to stop or start Command Center. For example:&lt;br /&gt;
  &lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    sudo docker stop &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    &lt;br /&gt;
    sudo docker container ls -a | grep command&lt;br /&gt;
    sudo docker start &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
  sudo ./UninstallCommandCenter.sh&lt;br /&gt;
  Uninstalling the Command Center Servers ...&lt;br /&gt;
&lt;br /&gt;
  sudo docker ps&lt;br /&gt;
  CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Command Center is now ready to be used. Proceed to the URL configured in the installation and follow the [[Command_Center_User_Guide | User Guide]] steps.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97013</id>
		<title>Command Center Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97013"/>
		<updated>2023-02-15T18:55:20Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* HTTPS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites=&lt;br /&gt;
Before installing or updating Command Center, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
When installing Command Center on premises,  the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is very important to the successful deployment of the Lingoport applications when installing the suite on site. In particular, the IT group that sets up the Linux system must understand the usage model for the system. &lt;br /&gt;
Lingoport requires a meeting with the parties responsible for setting up and maintaining the host system &amp;lt;b&amp;gt;before&amp;lt;/b&amp;gt; installation can properly begin. The hope is that once the system is setup for installation, minimal IT interaction is necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preparations must be made with the &#039;&#039;&#039;IT&#039;&#039;&#039; team to ensure that all &#039;&#039;&#039;prerequisites&#039;&#039;&#039; are met before installation.  For new installations, this is the recommended method to use to verify that all the various actors work together well.&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
Before installing Command Center, the following needs to be configured:&lt;br /&gt;
* Hardware &lt;br /&gt;
* Linux &lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall&lt;br /&gt;
* Https&lt;br /&gt;
&lt;br /&gt;
=== Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:Docker Deployment Diagram.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware &amp;amp; Software Requirements==&lt;br /&gt;
The following sections describe the hardware and software requirements for Command Center.&lt;br /&gt;
&lt;br /&gt;
Please note that the Globalyzer Server installation is in a different section. &lt;br /&gt;
&lt;br /&gt;
===Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Minimum&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 16 GB&lt;br /&gt;
| 16 GB&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 160 GB&lt;br /&gt;
| 500 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The [[Terms_and_Definitions#GlobalyzerServer|Globalyzer Server]] may be hosted by Lingoport, reside on another server, or be installed on the same system.  Other Linux and Windows machines may have Globalyzer clients installed.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
The current versions of these software products can be found at: [[Introduction#Current_versions_of_Lingoport_products_and_supporting_applications | Current versions of Lingoport products and supporting applications]]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! Operating System&lt;br /&gt;
| Linux, CentOS (7) or RedHat (8)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker installation, most of the containers will be managed by Docker. However, volumes will be mounted on the Linux VM and a database configuration file will reside on the VM: This requires Linux.&lt;br /&gt;
&lt;br /&gt;
==Access and Ports / Firewall==&lt;br /&gt;
Command Center may need to be accessible by Lingoport and customer personnel to configure jobs, check the console if any problem arise, run jobs if necessary. Command Center needs to be accessible by many customer actors, including development teams, management, and QA, Lingoport, Translation Vendors.&lt;br /&gt;
&lt;br /&gt;
Please see [[Deployment_Scenarios#External_Access_and_Ports |External Access and Ports]] for all the details.&lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
A simple path to HTTPS configuration is via reverse proxy hosted on the hosting linux system. For CentOS / RHEL, common instructions are:&lt;br /&gt;
&lt;br /&gt;
1. Install apache and mod_ssl (https support for apache)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install httdp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install mod_ssl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Configure SELinux to allow apache network connections&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo setsebool -P httpd_can_network_connect true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Add http (not s) config file with the following content (edit as appropriate):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Acquire a certificate. Please follow your organization&#039;s instructions to do so. You should have a private key, and acquire both a certificate and a certificate chain. Some orgs may provide the certificate in the same file as the chain. Please request .pem style certificates, or convert the certificates to .pem.&lt;br /&gt;
&lt;br /&gt;
6. Place the certificate and private key on a secure location on your system. Standard location is &amp;lt;code&amp;gt;/etc/pki/tls/&amp;lt;/code&amp;gt;, with the certificate under &amp;lt;code&amp;gt;/etc/pki/tls/certs/&amp;lt;/code&amp;gt; and the associated private key under &amp;lt;/code&amp;gt;/etc/pki/tls/private/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Add apache config to utilize the certificate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps-ssl.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
        DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# SSL Settings. These may be placed in other config files instead, but are left here for convenience. &lt;br /&gt;
SSLEngine on&lt;br /&gt;
&lt;br /&gt;
# BEGIN Possible security settings - based on LetsEncrypt recommendations as of Feb 2023.&lt;br /&gt;
# ---&lt;br /&gt;
# Please adjust to your own organization&#039;s guidelines!&lt;br /&gt;
SSLHonorCipherOrder     off&lt;br /&gt;
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1&lt;br /&gt;
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&lt;br /&gt;
&lt;br /&gt;
SSLOptions +StrictRequire&lt;br /&gt;
&lt;br /&gt;
# Add vhost name to log entries:&lt;br /&gt;
LogFormat &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot; vhost_combined&lt;br /&gt;
LogFormat &amp;quot;%v %h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b&amp;quot; vhost_common&lt;br /&gt;
# ---&lt;br /&gt;
# END Possible security settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Reference the certificates:&lt;br /&gt;
SSLCertificateFile /etc/pki/tls/certs/&amp;lt;yourserver.yourorg.com&amp;gt;.pem&lt;br /&gt;
SSLCertificateKeyFile /etc/pki/tls/private/&amp;lt;yourserversprivatekey&amp;gt;.pem&lt;br /&gt;
&lt;br /&gt;
# Not necessary if the certificate file includes a chain as well. See [[apache doc|https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile]] &lt;br /&gt;
SSLCertificateChainFile /etc/letsencrypt/live/dockerdev1.lingoport.io/chain.pem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8.  Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sudo systemctl restart httpd&lt;br /&gt;
&lt;br /&gt;
== Docker Pre-Requisite==&lt;br /&gt;
Docker is a platform that allows you to easily develop, test, and deploy applications as containers. This section will walk you through the process of installing Docker on a Linux system.&lt;br /&gt;
&lt;br /&gt;
On the system (most likely a VM) dedicated to Command Center, make sure you have the latest version of docker up and running. The following steps may help.&lt;br /&gt;
&lt;br /&gt;
A user with &#039;&#039;&#039;sudo&#039;&#039;&#039; privileges is required to run most commands.&lt;br /&gt;
&lt;br /&gt;
====Uninstall old docker versions====&lt;br /&gt;
&lt;br /&gt;
This is an optional step in case your docker version is out of date:&lt;br /&gt;
&lt;br /&gt;
    sudo yum remove docker \&lt;br /&gt;
                  docker-client \&lt;br /&gt;
                  docker-client-latest \&lt;br /&gt;
                  docker-common \&lt;br /&gt;
                  docker-latest \&lt;br /&gt;
                  docker-latest-logrotate \&lt;br /&gt;
                  docker-logrotate \&lt;br /&gt;
                  docker-engine&lt;br /&gt;
&lt;br /&gt;
====Install docker using the repository====&lt;br /&gt;
&lt;br /&gt;
    sudo yum install -y yum-utils&lt;br /&gt;
    sudo yum-config-manager \&lt;br /&gt;
      --add-repo \&lt;br /&gt;
      https://download.docker.com/linux/centos/docker-ce.repo&lt;br /&gt;
 &lt;br /&gt;
    sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin&lt;br /&gt;
&lt;br /&gt;
====Start Docker.====&lt;br /&gt;
Start docker using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl start docker&lt;br /&gt;
&lt;br /&gt;
Enable the Docker service to start automatically on system boot by running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl enable docker&lt;br /&gt;
&lt;br /&gt;
====Verify that Docker Engine is installed correctly ====&lt;br /&gt;
Run the hello-world image.&lt;br /&gt;
&lt;br /&gt;
    $ sudo docker run hello-world&lt;br /&gt;
&lt;br /&gt;
This command will run a test container and display a message indicating that the installation is working properly.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
When deploying Command Center, the configuration determines if the user management is done by Command Center itself, via an LDAP, or via SSO (using SAML).&lt;br /&gt;
&lt;br /&gt;
=== Command Center User Database ===&lt;br /&gt;
&lt;br /&gt;
One administration user is configured. Contact support (at) lingoport (dot) com in order to get an administration user and password. That user can then create Command Center users. It is strongly recommended to change the first administration password and keep it safe.&lt;br /&gt;
&lt;br /&gt;
=== LDAP ===&lt;br /&gt;
&lt;br /&gt;
* LDAP Connection &lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
=== SSO ===&lt;br /&gt;
* SSO Connection&lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= New Command Center Installation =&lt;br /&gt;
&lt;br /&gt;
==Create the database conf file==&lt;br /&gt;
The following is provided for a CentOS system:&lt;br /&gt;
&lt;br /&gt;
Uses the centos user as default user for docker&lt;br /&gt;
&lt;br /&gt;
* /home/centos/mysql/conf.d/mysql.cnf &lt;br /&gt;
&lt;br /&gt;
    [client]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
    [mysql]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration == &lt;br /&gt;
&lt;br /&gt;
Request the &#039;&#039;CommandCenterInstall.zip&#039;&#039; file from your customer success engineer. The zip file contains four files:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    install.conf&lt;br /&gt;
    InstallCommandCenter.sh&lt;br /&gt;
    UninstallCommandCenter.sh&lt;br /&gt;
    UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
Copy the above files to your home directory (/home/centos or /home/ec2-user)&lt;br /&gt;
&lt;br /&gt;
===Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
You need to provide your serverURL, your Docker Hub username and token, and MYSQL root password you want to use.  Also make sure the version is the one that is wanted. &lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Docker network name you want to create&lt;br /&gt;
  #&lt;br /&gt;
  database_network=mysqlnetscommand&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the MYSQL root password you want to create for the MySQL database container&lt;br /&gt;
  #&lt;br /&gt;
  database_root_password=mySQL!c0mma9d&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub username&lt;br /&gt;
  #&lt;br /&gt;
  docker_username=xxxlingoport&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub account token&lt;br /&gt;
  #&lt;br /&gt;
  docker_account_token=dckr_xxx_bMjvwehHwO7svVHuIExj3i346eM&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Command Center version&lt;br /&gt;
  #&lt;br /&gt;
  command_center_image_version=69&lt;br /&gt;
  #&lt;br /&gt;
  # The Server URL: &#039;&amp;quot;http://yourserver:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  serverURL=&#039;&amp;quot;http://&amp;lt;yourserver&amp;gt;:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  # The company name on your Localyzer license&lt;br /&gt;
  #&lt;br /&gt;
  company_name=Lingoport&lt;br /&gt;
&lt;br /&gt;
==Run InstallCommandCenter.sh==&lt;br /&gt;
&lt;br /&gt;
     chmod +x InstallCommandCenter.sh&lt;br /&gt;
     sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
If you need to re-run the InstallCommandCenter.sh, make sure to run UninstallCommandCenter.sh first to clean your environment.&lt;br /&gt;
&lt;br /&gt;
Note: Docker image version is not the Command Center version, check latest docker image version at  https://hub.docker.com/repository/docker/lingoport/command-center_dev/general&lt;br /&gt;
&lt;br /&gt;
You should see at least an MySQL and a Command Center container running.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation == &lt;br /&gt;
Log in to the URL based on the command-center-config.sh settings, so something like:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[TEMPORARY-TO BE REWRITTEN ] (not http!) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    https://commandcenter.mycompany.io/&lt;br /&gt;
    or&lt;br /&gt;
    https://lingoport.mycompany.io/command-center&lt;br /&gt;
    or&lt;br /&gt;
    http://server.mycompany.io:8081/command-center&lt;br /&gt;
&lt;br /&gt;
You should now be able to install the licenses and create projects.&lt;br /&gt;
&lt;br /&gt;
The Command Center will initially have one Administrator user &#039;&#039;&#039;CCAdmin&#039;&#039;&#039; with the password &#039;&#039;&#039;please.reset.me&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Command Center Update =&lt;br /&gt;
==Update install.conf ==&lt;br /&gt;
&lt;br /&gt;
Change the &#039;&#039;version number&#039;&#039; to get the Command Center image update version.&lt;br /&gt;
See [[Command_Center_Installation#Configuration | Configuration ]] above.&lt;br /&gt;
&lt;br /&gt;
====Run UpdateCommandCenter.sh====&lt;br /&gt;
&lt;br /&gt;
     chmod +x UpdateCommandCenter.sh&lt;br /&gt;
     sudo ./UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
* From Command Center, as an administrator, go to settings and click &#039;Restart&#039;&lt;br /&gt;
* From the VM, use docker commands to stop or start Command Center. For example:&lt;br /&gt;
  &lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    sudo docker stop &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    &lt;br /&gt;
    sudo docker container ls -a | grep command&lt;br /&gt;
    sudo docker start &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
  sudo ./UninstallCommandCenter.sh&lt;br /&gt;
  Uninstalling the Command Center Servers ...&lt;br /&gt;
&lt;br /&gt;
  sudo docker ps&lt;br /&gt;
  CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Command Center is now ready to be used. Proceed to the URL configured in the installation and follow the [[Command_Center_User_Guide | User Guide]] steps.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97012</id>
		<title>Command Center Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97012"/>
		<updated>2023-02-15T18:55:07Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* HTTPS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites=&lt;br /&gt;
Before installing or updating Command Center, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
When installing Command Center on premises,  the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is very important to the successful deployment of the Lingoport applications when installing the suite on site. In particular, the IT group that sets up the Linux system must understand the usage model for the system. &lt;br /&gt;
Lingoport requires a meeting with the parties responsible for setting up and maintaining the host system &amp;lt;b&amp;gt;before&amp;lt;/b&amp;gt; installation can properly begin. The hope is that once the system is setup for installation, minimal IT interaction is necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preparations must be made with the &#039;&#039;&#039;IT&#039;&#039;&#039; team to ensure that all &#039;&#039;&#039;prerequisites&#039;&#039;&#039; are met before installation.  For new installations, this is the recommended method to use to verify that all the various actors work together well.&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
Before installing Command Center, the following needs to be configured:&lt;br /&gt;
* Hardware &lt;br /&gt;
* Linux &lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall&lt;br /&gt;
* Https&lt;br /&gt;
&lt;br /&gt;
=== Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:Docker Deployment Diagram.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware &amp;amp; Software Requirements==&lt;br /&gt;
The following sections describe the hardware and software requirements for Command Center.&lt;br /&gt;
&lt;br /&gt;
Please note that the Globalyzer Server installation is in a different section. &lt;br /&gt;
&lt;br /&gt;
===Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Minimum&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 16 GB&lt;br /&gt;
| 16 GB&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 160 GB&lt;br /&gt;
| 500 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The [[Terms_and_Definitions#GlobalyzerServer|Globalyzer Server]] may be hosted by Lingoport, reside on another server, or be installed on the same system.  Other Linux and Windows machines may have Globalyzer clients installed.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
The current versions of these software products can be found at: [[Introduction#Current_versions_of_Lingoport_products_and_supporting_applications | Current versions of Lingoport products and supporting applications]]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! Operating System&lt;br /&gt;
| Linux, CentOS (7) or RedHat (8)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker installation, most of the containers will be managed by Docker. However, volumes will be mounted on the Linux VM and a database configuration file will reside on the VM: This requires Linux.&lt;br /&gt;
&lt;br /&gt;
==Access and Ports / Firewall==&lt;br /&gt;
Command Center may need to be accessible by Lingoport and customer personnel to configure jobs, check the console if any problem arise, run jobs if necessary. Command Center needs to be accessible by many customer actors, including development teams, management, and QA, Lingoport, Translation Vendors.&lt;br /&gt;
&lt;br /&gt;
Please see [[Deployment_Scenarios#External_Access_and_Ports |External Access and Ports]] for all the details.&lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
A simple path to HTTPS configuration is via reverse proxy hosted on the hosting linux system. For CentOS / RHEL, common instructions are:&lt;br /&gt;
&lt;br /&gt;
1. Install apache and mod_ssl (https support for apache)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install httdp&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install mod_ssl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Configure SELinux to allow apache network connections&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo setsebool -P httpd_can_network_connect true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Add http (not s) config file with the following content (edit as appropriate):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Acquire a certificate. Please follow your organization&#039;s instructions to do so. You should have a private key, and acquire both a certificate and a certificate chain. Some orgs may provide the certificate in the same file as the chain. Please request .pem style certificates, or convert the certificates to .pem.&lt;br /&gt;
&lt;br /&gt;
6. Place the certificate and private key on a secure location on your system. Standard location is &amp;lt;code&amp;gt;/etc/pki/tls/&amp;lt;/code&amp;gt;, with the certificate under &amp;lt;code&amp;gt;/etc/pki/tls/certs/&amp;lt;/code&amp;gt; and the associated private key under &amp;lt;/code&amp;gt;/etc/pki/tls/private/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Add apache config to utilize the certificate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps-ssl.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
        DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# SSL Settings. These may be placed in other config files instead, but are left here for convenience. &lt;br /&gt;
SSLEngine on&lt;br /&gt;
&lt;br /&gt;
# BEGIN Possible security settings - based on LetsEncrypt recommendations as of Feb 2023.&lt;br /&gt;
# ---&lt;br /&gt;
# Please adjust to your own organization&#039;s guidelines!&lt;br /&gt;
SSLHonorCipherOrder     off&lt;br /&gt;
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1&lt;br /&gt;
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&lt;br /&gt;
&lt;br /&gt;
SSLOptions +StrictRequire&lt;br /&gt;
&lt;br /&gt;
# Add vhost name to log entries:&lt;br /&gt;
LogFormat &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot; vhost_combined&lt;br /&gt;
LogFormat &amp;quot;%v %h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b&amp;quot; vhost_common&lt;br /&gt;
# ---&lt;br /&gt;
# END Possible security settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Reference the certificates:&lt;br /&gt;
SSLCertificateFile /etc/pki/tls/certs/&amp;lt;yourserver.yourorg.com&amp;gt;.pem&lt;br /&gt;
SSLCertificateKeyFile /etc/pki/tls/private/&amp;lt;yourserversprivatekey&amp;gt;.pem&lt;br /&gt;
&lt;br /&gt;
# Not necessary if the certificate file includes a chain as well. See [[apache doc|https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile]] &lt;br /&gt;
SSLCertificateChainFile /etc/letsencrypt/live/dockerdev1.lingoport.io/chain.pem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8.  Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sudo systemctl restart httpd&lt;br /&gt;
&lt;br /&gt;
== Docker Pre-Requisite==&lt;br /&gt;
Docker is a platform that allows you to easily develop, test, and deploy applications as containers. This section will walk you through the process of installing Docker on a Linux system.&lt;br /&gt;
&lt;br /&gt;
On the system (most likely a VM) dedicated to Command Center, make sure you have the latest version of docker up and running. The following steps may help.&lt;br /&gt;
&lt;br /&gt;
A user with &#039;&#039;&#039;sudo&#039;&#039;&#039; privileges is required to run most commands.&lt;br /&gt;
&lt;br /&gt;
====Uninstall old docker versions====&lt;br /&gt;
&lt;br /&gt;
This is an optional step in case your docker version is out of date:&lt;br /&gt;
&lt;br /&gt;
    sudo yum remove docker \&lt;br /&gt;
                  docker-client \&lt;br /&gt;
                  docker-client-latest \&lt;br /&gt;
                  docker-common \&lt;br /&gt;
                  docker-latest \&lt;br /&gt;
                  docker-latest-logrotate \&lt;br /&gt;
                  docker-logrotate \&lt;br /&gt;
                  docker-engine&lt;br /&gt;
&lt;br /&gt;
====Install docker using the repository====&lt;br /&gt;
&lt;br /&gt;
    sudo yum install -y yum-utils&lt;br /&gt;
    sudo yum-config-manager \&lt;br /&gt;
      --add-repo \&lt;br /&gt;
      https://download.docker.com/linux/centos/docker-ce.repo&lt;br /&gt;
 &lt;br /&gt;
    sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin&lt;br /&gt;
&lt;br /&gt;
====Start Docker.====&lt;br /&gt;
Start docker using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl start docker&lt;br /&gt;
&lt;br /&gt;
Enable the Docker service to start automatically on system boot by running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl enable docker&lt;br /&gt;
&lt;br /&gt;
====Verify that Docker Engine is installed correctly ====&lt;br /&gt;
Run the hello-world image.&lt;br /&gt;
&lt;br /&gt;
    $ sudo docker run hello-world&lt;br /&gt;
&lt;br /&gt;
This command will run a test container and display a message indicating that the installation is working properly.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
When deploying Command Center, the configuration determines if the user management is done by Command Center itself, via an LDAP, or via SSO (using SAML).&lt;br /&gt;
&lt;br /&gt;
=== Command Center User Database ===&lt;br /&gt;
&lt;br /&gt;
One administration user is configured. Contact support (at) lingoport (dot) com in order to get an administration user and password. That user can then create Command Center users. It is strongly recommended to change the first administration password and keep it safe.&lt;br /&gt;
&lt;br /&gt;
=== LDAP ===&lt;br /&gt;
&lt;br /&gt;
* LDAP Connection &lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
=== SSO ===&lt;br /&gt;
* SSO Connection&lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= New Command Center Installation =&lt;br /&gt;
&lt;br /&gt;
==Create the database conf file==&lt;br /&gt;
The following is provided for a CentOS system:&lt;br /&gt;
&lt;br /&gt;
Uses the centos user as default user for docker&lt;br /&gt;
&lt;br /&gt;
* /home/centos/mysql/conf.d/mysql.cnf &lt;br /&gt;
&lt;br /&gt;
    [client]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
    [mysql]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration == &lt;br /&gt;
&lt;br /&gt;
Request the &#039;&#039;CommandCenterInstall.zip&#039;&#039; file from your customer success engineer. The zip file contains four files:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    install.conf&lt;br /&gt;
    InstallCommandCenter.sh&lt;br /&gt;
    UninstallCommandCenter.sh&lt;br /&gt;
    UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
Copy the above files to your home directory (/home/centos or /home/ec2-user)&lt;br /&gt;
&lt;br /&gt;
===Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
You need to provide your serverURL, your Docker Hub username and token, and MYSQL root password you want to use.  Also make sure the version is the one that is wanted. &lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Docker network name you want to create&lt;br /&gt;
  #&lt;br /&gt;
  database_network=mysqlnetscommand&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the MYSQL root password you want to create for the MySQL database container&lt;br /&gt;
  #&lt;br /&gt;
  database_root_password=mySQL!c0mma9d&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub username&lt;br /&gt;
  #&lt;br /&gt;
  docker_username=xxxlingoport&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub account token&lt;br /&gt;
  #&lt;br /&gt;
  docker_account_token=dckr_xxx_bMjvwehHwO7svVHuIExj3i346eM&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Command Center version&lt;br /&gt;
  #&lt;br /&gt;
  command_center_image_version=69&lt;br /&gt;
  #&lt;br /&gt;
  # The Server URL: &#039;&amp;quot;http://yourserver:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  serverURL=&#039;&amp;quot;http://&amp;lt;yourserver&amp;gt;:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  # The company name on your Localyzer license&lt;br /&gt;
  #&lt;br /&gt;
  company_name=Lingoport&lt;br /&gt;
&lt;br /&gt;
==Run InstallCommandCenter.sh==&lt;br /&gt;
&lt;br /&gt;
     chmod +x InstallCommandCenter.sh&lt;br /&gt;
     sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
If you need to re-run the InstallCommandCenter.sh, make sure to run UninstallCommandCenter.sh first to clean your environment.&lt;br /&gt;
&lt;br /&gt;
Note: Docker image version is not the Command Center version, check latest docker image version at  https://hub.docker.com/repository/docker/lingoport/command-center_dev/general&lt;br /&gt;
&lt;br /&gt;
You should see at least an MySQL and a Command Center container running.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation == &lt;br /&gt;
Log in to the URL based on the command-center-config.sh settings, so something like:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[TEMPORARY-TO BE REWRITTEN ] (not http!) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    https://commandcenter.mycompany.io/&lt;br /&gt;
    or&lt;br /&gt;
    https://lingoport.mycompany.io/command-center&lt;br /&gt;
    or&lt;br /&gt;
    http://server.mycompany.io:8081/command-center&lt;br /&gt;
&lt;br /&gt;
You should now be able to install the licenses and create projects.&lt;br /&gt;
&lt;br /&gt;
The Command Center will initially have one Administrator user &#039;&#039;&#039;CCAdmin&#039;&#039;&#039; with the password &#039;&#039;&#039;please.reset.me&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Command Center Update =&lt;br /&gt;
==Update install.conf ==&lt;br /&gt;
&lt;br /&gt;
Change the &#039;&#039;version number&#039;&#039; to get the Command Center image update version.&lt;br /&gt;
See [[Command_Center_Installation#Configuration | Configuration ]] above.&lt;br /&gt;
&lt;br /&gt;
====Run UpdateCommandCenter.sh====&lt;br /&gt;
&lt;br /&gt;
     chmod +x UpdateCommandCenter.sh&lt;br /&gt;
     sudo ./UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
* From Command Center, as an administrator, go to settings and click &#039;Restart&#039;&lt;br /&gt;
* From the VM, use docker commands to stop or start Command Center. For example:&lt;br /&gt;
  &lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    sudo docker stop &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    &lt;br /&gt;
    sudo docker container ls -a | grep command&lt;br /&gt;
    sudo docker start &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
  sudo ./UninstallCommandCenter.sh&lt;br /&gt;
  Uninstalling the Command Center Servers ...&lt;br /&gt;
&lt;br /&gt;
  sudo docker ps&lt;br /&gt;
  CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Command Center is now ready to be used. Proceed to the URL configured in the installation and follow the [[Command_Center_User_Guide | User Guide]] steps.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97011</id>
		<title>Command Center Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97011"/>
		<updated>2023-02-15T18:54:39Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* HTTPS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites=&lt;br /&gt;
Before installing or updating Command Center, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
When installing Command Center on premises,  the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is very important to the successful deployment of the Lingoport applications when installing the suite on site. In particular, the IT group that sets up the Linux system must understand the usage model for the system. &lt;br /&gt;
Lingoport requires a meeting with the parties responsible for setting up and maintaining the host system &amp;lt;b&amp;gt;before&amp;lt;/b&amp;gt; installation can properly begin. The hope is that once the system is setup for installation, minimal IT interaction is necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preparations must be made with the &#039;&#039;&#039;IT&#039;&#039;&#039; team to ensure that all &#039;&#039;&#039;prerequisites&#039;&#039;&#039; are met before installation.  For new installations, this is the recommended method to use to verify that all the various actors work together well.&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
Before installing Command Center, the following needs to be configured:&lt;br /&gt;
* Hardware &lt;br /&gt;
* Linux &lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall&lt;br /&gt;
* Https&lt;br /&gt;
&lt;br /&gt;
=== Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:Docker Deployment Diagram.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware &amp;amp; Software Requirements==&lt;br /&gt;
The following sections describe the hardware and software requirements for Command Center.&lt;br /&gt;
&lt;br /&gt;
Please note that the Globalyzer Server installation is in a different section. &lt;br /&gt;
&lt;br /&gt;
===Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Minimum&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 16 GB&lt;br /&gt;
| 16 GB&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 160 GB&lt;br /&gt;
| 500 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The [[Terms_and_Definitions#GlobalyzerServer|Globalyzer Server]] may be hosted by Lingoport, reside on another server, or be installed on the same system.  Other Linux and Windows machines may have Globalyzer clients installed.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
The current versions of these software products can be found at: [[Introduction#Current_versions_of_Lingoport_products_and_supporting_applications | Current versions of Lingoport products and supporting applications]]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! Operating System&lt;br /&gt;
| Linux, CentOS (7) or RedHat (8)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker installation, most of the containers will be managed by Docker. However, volumes will be mounted on the Linux VM and a database configuration file will reside on the VM: This requires Linux.&lt;br /&gt;
&lt;br /&gt;
==Access and Ports / Firewall==&lt;br /&gt;
Command Center may need to be accessible by Lingoport and customer personnel to configure jobs, check the console if any problem arise, run jobs if necessary. Command Center needs to be accessible by many customer actors, including development teams, management, and QA, Lingoport, Translation Vendors.&lt;br /&gt;
&lt;br /&gt;
Please see [[Deployment_Scenarios#External_Access_and_Ports |External Access and Ports]] for all the details.&lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
A simple path to HTTPS configuration is via reverse proxy hosted on the hosting linux system. For CentOS / RHEL, common instructions are:&lt;br /&gt;
&lt;br /&gt;
1. Install apache and mod_ssl (https support for apache)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install httdp&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install mod_ssl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Configure SELinux to allow apache network connections&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo setsebool -P httpd_can_network_connect true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Add http (not s) config file with the following content (edit as appropriate):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Acquire a certificate. Please follow your organization&#039;s instructions to do so. You should have a private key, and acquire both a certificate and a certificate chain. Some orgs may provide the certificate in the same file as the chain. Please request .pem style certificates, or convert the certificates to .pem.&lt;br /&gt;
&lt;br /&gt;
https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile&lt;br /&gt;
&lt;br /&gt;
6. Place the certificate and private key on a secure location on your system. Standard location is &amp;lt;code&amp;gt;/etc/pki/tls/&amp;lt;/code&amp;gt;, with the certificate under &amp;lt;code&amp;gt;/etc/pki/tls/certs/&amp;lt;/code&amp;gt; and the associated private key under &amp;lt;/code&amp;gt;/etc/pki/tls/private/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Add apache config to utilize the certificate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps-ssl.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
        DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# SSL Settings. These may be placed in other config files instead, but are left here for convenience. &lt;br /&gt;
SSLEngine on&lt;br /&gt;
&lt;br /&gt;
# BEGIN Possible security settings - based on LetsEncrypt recommendations as of Feb 2023.&lt;br /&gt;
# ---&lt;br /&gt;
# Please adjust to your own organization&#039;s guidelines!&lt;br /&gt;
SSLHonorCipherOrder     off&lt;br /&gt;
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1&lt;br /&gt;
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&lt;br /&gt;
&lt;br /&gt;
SSLOptions +StrictRequire&lt;br /&gt;
&lt;br /&gt;
# Add vhost name to log entries:&lt;br /&gt;
LogFormat &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot; vhost_combined&lt;br /&gt;
LogFormat &amp;quot;%v %h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b&amp;quot; vhost_common&lt;br /&gt;
# ---&lt;br /&gt;
# END Possible security settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Reference the certificates:&lt;br /&gt;
SSLCertificateFile /etc/pki/tls/certs/&amp;lt;yourserver.yourorg.com&amp;gt;.pem&lt;br /&gt;
SSLCertificateKeyFile /etc/pki/tls/private/&amp;lt;yourserversprivatekey&amp;gt;.pem&lt;br /&gt;
&lt;br /&gt;
# Not necessary if the certificate file includes a chain as well. See [[apache doc|https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile]] &lt;br /&gt;
SSLCertificateChainFile /etc/letsencrypt/live/dockerdev1.lingoport.io/chain.pem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8.  Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sudo systemctl restart httpd&lt;br /&gt;
&lt;br /&gt;
== Docker Pre-Requisite==&lt;br /&gt;
Docker is a platform that allows you to easily develop, test, and deploy applications as containers. This section will walk you through the process of installing Docker on a Linux system.&lt;br /&gt;
&lt;br /&gt;
On the system (most likely a VM) dedicated to Command Center, make sure you have the latest version of docker up and running. The following steps may help.&lt;br /&gt;
&lt;br /&gt;
A user with &#039;&#039;&#039;sudo&#039;&#039;&#039; privileges is required to run most commands.&lt;br /&gt;
&lt;br /&gt;
====Uninstall old docker versions====&lt;br /&gt;
&lt;br /&gt;
This is an optional step in case your docker version is out of date:&lt;br /&gt;
&lt;br /&gt;
    sudo yum remove docker \&lt;br /&gt;
                  docker-client \&lt;br /&gt;
                  docker-client-latest \&lt;br /&gt;
                  docker-common \&lt;br /&gt;
                  docker-latest \&lt;br /&gt;
                  docker-latest-logrotate \&lt;br /&gt;
                  docker-logrotate \&lt;br /&gt;
                  docker-engine&lt;br /&gt;
&lt;br /&gt;
====Install docker using the repository====&lt;br /&gt;
&lt;br /&gt;
    sudo yum install -y yum-utils&lt;br /&gt;
    sudo yum-config-manager \&lt;br /&gt;
      --add-repo \&lt;br /&gt;
      https://download.docker.com/linux/centos/docker-ce.repo&lt;br /&gt;
 &lt;br /&gt;
    sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin&lt;br /&gt;
&lt;br /&gt;
====Start Docker.====&lt;br /&gt;
Start docker using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl start docker&lt;br /&gt;
&lt;br /&gt;
Enable the Docker service to start automatically on system boot by running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl enable docker&lt;br /&gt;
&lt;br /&gt;
====Verify that Docker Engine is installed correctly ====&lt;br /&gt;
Run the hello-world image.&lt;br /&gt;
&lt;br /&gt;
    $ sudo docker run hello-world&lt;br /&gt;
&lt;br /&gt;
This command will run a test container and display a message indicating that the installation is working properly.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
When deploying Command Center, the configuration determines if the user management is done by Command Center itself, via an LDAP, or via SSO (using SAML).&lt;br /&gt;
&lt;br /&gt;
=== Command Center User Database ===&lt;br /&gt;
&lt;br /&gt;
One administration user is configured. Contact support (at) lingoport (dot) com in order to get an administration user and password. That user can then create Command Center users. It is strongly recommended to change the first administration password and keep it safe.&lt;br /&gt;
&lt;br /&gt;
=== LDAP ===&lt;br /&gt;
&lt;br /&gt;
* LDAP Connection &lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
=== SSO ===&lt;br /&gt;
* SSO Connection&lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= New Command Center Installation =&lt;br /&gt;
&lt;br /&gt;
==Create the database conf file==&lt;br /&gt;
The following is provided for a CentOS system:&lt;br /&gt;
&lt;br /&gt;
Uses the centos user as default user for docker&lt;br /&gt;
&lt;br /&gt;
* /home/centos/mysql/conf.d/mysql.cnf &lt;br /&gt;
&lt;br /&gt;
    [client]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
    [mysql]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration == &lt;br /&gt;
&lt;br /&gt;
Request the &#039;&#039;CommandCenterInstall.zip&#039;&#039; file from your customer success engineer. The zip file contains four files:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    install.conf&lt;br /&gt;
    InstallCommandCenter.sh&lt;br /&gt;
    UninstallCommandCenter.sh&lt;br /&gt;
    UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
Copy the above files to your home directory (/home/centos or /home/ec2-user)&lt;br /&gt;
&lt;br /&gt;
===Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
You need to provide your serverURL, your Docker Hub username and token, and MYSQL root password you want to use.  Also make sure the version is the one that is wanted. &lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Docker network name you want to create&lt;br /&gt;
  #&lt;br /&gt;
  database_network=mysqlnetscommand&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the MYSQL root password you want to create for the MySQL database container&lt;br /&gt;
  #&lt;br /&gt;
  database_root_password=mySQL!c0mma9d&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub username&lt;br /&gt;
  #&lt;br /&gt;
  docker_username=xxxlingoport&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub account token&lt;br /&gt;
  #&lt;br /&gt;
  docker_account_token=dckr_xxx_bMjvwehHwO7svVHuIExj3i346eM&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Command Center version&lt;br /&gt;
  #&lt;br /&gt;
  command_center_image_version=69&lt;br /&gt;
  #&lt;br /&gt;
  # The Server URL: &#039;&amp;quot;http://yourserver:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  serverURL=&#039;&amp;quot;http://&amp;lt;yourserver&amp;gt;:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  # The company name on your Localyzer license&lt;br /&gt;
  #&lt;br /&gt;
  company_name=Lingoport&lt;br /&gt;
&lt;br /&gt;
==Run InstallCommandCenter.sh==&lt;br /&gt;
&lt;br /&gt;
     chmod +x InstallCommandCenter.sh&lt;br /&gt;
     sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
If you need to re-run the InstallCommandCenter.sh, make sure to run UninstallCommandCenter.sh first to clean your environment.&lt;br /&gt;
&lt;br /&gt;
Note: Docker image version is not the Command Center version, check latest docker image version at  https://hub.docker.com/repository/docker/lingoport/command-center_dev/general&lt;br /&gt;
&lt;br /&gt;
You should see at least an MySQL and a Command Center container running.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation == &lt;br /&gt;
Log in to the URL based on the command-center-config.sh settings, so something like:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[TEMPORARY-TO BE REWRITTEN ] (not http!) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    https://commandcenter.mycompany.io/&lt;br /&gt;
    or&lt;br /&gt;
    https://lingoport.mycompany.io/command-center&lt;br /&gt;
    or&lt;br /&gt;
    http://server.mycompany.io:8081/command-center&lt;br /&gt;
&lt;br /&gt;
You should now be able to install the licenses and create projects.&lt;br /&gt;
&lt;br /&gt;
The Command Center will initially have one Administrator user &#039;&#039;&#039;CCAdmin&#039;&#039;&#039; with the password &#039;&#039;&#039;please.reset.me&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Command Center Update =&lt;br /&gt;
==Update install.conf ==&lt;br /&gt;
&lt;br /&gt;
Change the &#039;&#039;version number&#039;&#039; to get the Command Center image update version.&lt;br /&gt;
See [[Command_Center_Installation#Configuration | Configuration ]] above.&lt;br /&gt;
&lt;br /&gt;
====Run UpdateCommandCenter.sh====&lt;br /&gt;
&lt;br /&gt;
     chmod +x UpdateCommandCenter.sh&lt;br /&gt;
     sudo ./UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
* From Command Center, as an administrator, go to settings and click &#039;Restart&#039;&lt;br /&gt;
* From the VM, use docker commands to stop or start Command Center. For example:&lt;br /&gt;
  &lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    sudo docker stop &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    &lt;br /&gt;
    sudo docker container ls -a | grep command&lt;br /&gt;
    sudo docker start &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
  sudo ./UninstallCommandCenter.sh&lt;br /&gt;
  Uninstalling the Command Center Servers ...&lt;br /&gt;
&lt;br /&gt;
  sudo docker ps&lt;br /&gt;
  CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Command Center is now ready to be used. Proceed to the URL configured in the installation and follow the [[Command_Center_User_Guide | User Guide]] steps.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97010</id>
		<title>Command Center Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97010"/>
		<updated>2023-02-15T18:54:23Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* HTTPS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites=&lt;br /&gt;
Before installing or updating Command Center, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
When installing Command Center on premises,  the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is very important to the successful deployment of the Lingoport applications when installing the suite on site. In particular, the IT group that sets up the Linux system must understand the usage model for the system. &lt;br /&gt;
Lingoport requires a meeting with the parties responsible for setting up and maintaining the host system &amp;lt;b&amp;gt;before&amp;lt;/b&amp;gt; installation can properly begin. The hope is that once the system is setup for installation, minimal IT interaction is necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preparations must be made with the &#039;&#039;&#039;IT&#039;&#039;&#039; team to ensure that all &#039;&#039;&#039;prerequisites&#039;&#039;&#039; are met before installation.  For new installations, this is the recommended method to use to verify that all the various actors work together well.&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
Before installing Command Center, the following needs to be configured:&lt;br /&gt;
* Hardware &lt;br /&gt;
* Linux &lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall&lt;br /&gt;
* Https&lt;br /&gt;
&lt;br /&gt;
=== Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:Docker Deployment Diagram.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware &amp;amp; Software Requirements==&lt;br /&gt;
The following sections describe the hardware and software requirements for Command Center.&lt;br /&gt;
&lt;br /&gt;
Please note that the Globalyzer Server installation is in a different section. &lt;br /&gt;
&lt;br /&gt;
===Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Minimum&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 16 GB&lt;br /&gt;
| 16 GB&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 160 GB&lt;br /&gt;
| 500 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The [[Terms_and_Definitions#GlobalyzerServer|Globalyzer Server]] may be hosted by Lingoport, reside on another server, or be installed on the same system.  Other Linux and Windows machines may have Globalyzer clients installed.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
The current versions of these software products can be found at: [[Introduction#Current_versions_of_Lingoport_products_and_supporting_applications | Current versions of Lingoport products and supporting applications]]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! Operating System&lt;br /&gt;
| Linux, CentOS (7) or RedHat (8)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker installation, most of the containers will be managed by Docker. However, volumes will be mounted on the Linux VM and a database configuration file will reside on the VM: This requires Linux.&lt;br /&gt;
&lt;br /&gt;
==Access and Ports / Firewall==&lt;br /&gt;
Command Center may need to be accessible by Lingoport and customer personnel to configure jobs, check the console if any problem arise, run jobs if necessary. Command Center needs to be accessible by many customer actors, including development teams, management, and QA, Lingoport, Translation Vendors.&lt;br /&gt;
&lt;br /&gt;
Please see [[Deployment_Scenarios#External_Access_and_Ports |External Access and Ports]] for all the details.&lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
A simple path to HTTPS configuration is via reverse proxy hosted on the hosting linux system. For CentOS / RHEL, common instructions are:&lt;br /&gt;
&lt;br /&gt;
1. Install apache and mod_ssl (https support for apache)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install httdp&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install mod_ssl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Configure SELinux to allow apache network connections&lt;br /&gt;
&lt;br /&gt;
sudo setsebool -P httpd_can_network_connect true&lt;br /&gt;
&lt;br /&gt;
3. Add http (not s) config file with the following content (edit as appropriate):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Acquire a certificate. Please follow your organization&#039;s instructions to do so. You should have a private key, and acquire both a certificate and a certificate chain. Some orgs may provide the certificate in the same file as the chain. Please request .pem style certificates, or convert the certificates to .pem.&lt;br /&gt;
&lt;br /&gt;
https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile&lt;br /&gt;
&lt;br /&gt;
6. Place the certificate and private key on a secure location on your system. Standard location is &amp;lt;code&amp;gt;/etc/pki/tls/&amp;lt;/code&amp;gt;, with the certificate under &amp;lt;code&amp;gt;/etc/pki/tls/certs/&amp;lt;/code&amp;gt; and the associated private key under &amp;lt;/code&amp;gt;/etc/pki/tls/private/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Add apache config to utilize the certificate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps-ssl.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
        DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# SSL Settings. These may be placed in other config files instead, but are left here for convenience. &lt;br /&gt;
SSLEngine on&lt;br /&gt;
&lt;br /&gt;
# BEGIN Possible security settings - based on LetsEncrypt recommendations as of Feb 2023.&lt;br /&gt;
# ---&lt;br /&gt;
# Please adjust to your own organization&#039;s guidelines!&lt;br /&gt;
SSLHonorCipherOrder     off&lt;br /&gt;
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1&lt;br /&gt;
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&lt;br /&gt;
&lt;br /&gt;
SSLOptions +StrictRequire&lt;br /&gt;
&lt;br /&gt;
# Add vhost name to log entries:&lt;br /&gt;
LogFormat &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot; vhost_combined&lt;br /&gt;
LogFormat &amp;quot;%v %h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b&amp;quot; vhost_common&lt;br /&gt;
# ---&lt;br /&gt;
# END Possible security settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Reference the certificates:&lt;br /&gt;
SSLCertificateFile /etc/pki/tls/certs/&amp;lt;yourserver.yourorg.com&amp;gt;.pem&lt;br /&gt;
SSLCertificateKeyFile /etc/pki/tls/private/&amp;lt;yourserversprivatekey&amp;gt;.pem&lt;br /&gt;
&lt;br /&gt;
# Not necessary if the certificate file includes a chain as well. See [[apache doc|https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile]] &lt;br /&gt;
SSLCertificateChainFile /etc/letsencrypt/live/dockerdev1.lingoport.io/chain.pem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8.  Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sudo systemctl restart httpd&lt;br /&gt;
&lt;br /&gt;
== Docker Pre-Requisite==&lt;br /&gt;
Docker is a platform that allows you to easily develop, test, and deploy applications as containers. This section will walk you through the process of installing Docker on a Linux system.&lt;br /&gt;
&lt;br /&gt;
On the system (most likely a VM) dedicated to Command Center, make sure you have the latest version of docker up and running. The following steps may help.&lt;br /&gt;
&lt;br /&gt;
A user with &#039;&#039;&#039;sudo&#039;&#039;&#039; privileges is required to run most commands.&lt;br /&gt;
&lt;br /&gt;
====Uninstall old docker versions====&lt;br /&gt;
&lt;br /&gt;
This is an optional step in case your docker version is out of date:&lt;br /&gt;
&lt;br /&gt;
    sudo yum remove docker \&lt;br /&gt;
                  docker-client \&lt;br /&gt;
                  docker-client-latest \&lt;br /&gt;
                  docker-common \&lt;br /&gt;
                  docker-latest \&lt;br /&gt;
                  docker-latest-logrotate \&lt;br /&gt;
                  docker-logrotate \&lt;br /&gt;
                  docker-engine&lt;br /&gt;
&lt;br /&gt;
====Install docker using the repository====&lt;br /&gt;
&lt;br /&gt;
    sudo yum install -y yum-utils&lt;br /&gt;
    sudo yum-config-manager \&lt;br /&gt;
      --add-repo \&lt;br /&gt;
      https://download.docker.com/linux/centos/docker-ce.repo&lt;br /&gt;
 &lt;br /&gt;
    sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin&lt;br /&gt;
&lt;br /&gt;
====Start Docker.====&lt;br /&gt;
Start docker using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl start docker&lt;br /&gt;
&lt;br /&gt;
Enable the Docker service to start automatically on system boot by running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl enable docker&lt;br /&gt;
&lt;br /&gt;
====Verify that Docker Engine is installed correctly ====&lt;br /&gt;
Run the hello-world image.&lt;br /&gt;
&lt;br /&gt;
    $ sudo docker run hello-world&lt;br /&gt;
&lt;br /&gt;
This command will run a test container and display a message indicating that the installation is working properly.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
When deploying Command Center, the configuration determines if the user management is done by Command Center itself, via an LDAP, or via SSO (using SAML).&lt;br /&gt;
&lt;br /&gt;
=== Command Center User Database ===&lt;br /&gt;
&lt;br /&gt;
One administration user is configured. Contact support (at) lingoport (dot) com in order to get an administration user and password. That user can then create Command Center users. It is strongly recommended to change the first administration password and keep it safe.&lt;br /&gt;
&lt;br /&gt;
=== LDAP ===&lt;br /&gt;
&lt;br /&gt;
* LDAP Connection &lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
=== SSO ===&lt;br /&gt;
* SSO Connection&lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= New Command Center Installation =&lt;br /&gt;
&lt;br /&gt;
==Create the database conf file==&lt;br /&gt;
The following is provided for a CentOS system:&lt;br /&gt;
&lt;br /&gt;
Uses the centos user as default user for docker&lt;br /&gt;
&lt;br /&gt;
* /home/centos/mysql/conf.d/mysql.cnf &lt;br /&gt;
&lt;br /&gt;
    [client]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
    [mysql]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration == &lt;br /&gt;
&lt;br /&gt;
Request the &#039;&#039;CommandCenterInstall.zip&#039;&#039; file from your customer success engineer. The zip file contains four files:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    install.conf&lt;br /&gt;
    InstallCommandCenter.sh&lt;br /&gt;
    UninstallCommandCenter.sh&lt;br /&gt;
    UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
Copy the above files to your home directory (/home/centos or /home/ec2-user)&lt;br /&gt;
&lt;br /&gt;
===Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
You need to provide your serverURL, your Docker Hub username and token, and MYSQL root password you want to use.  Also make sure the version is the one that is wanted. &lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Docker network name you want to create&lt;br /&gt;
  #&lt;br /&gt;
  database_network=mysqlnetscommand&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the MYSQL root password you want to create for the MySQL database container&lt;br /&gt;
  #&lt;br /&gt;
  database_root_password=mySQL!c0mma9d&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub username&lt;br /&gt;
  #&lt;br /&gt;
  docker_username=xxxlingoport&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub account token&lt;br /&gt;
  #&lt;br /&gt;
  docker_account_token=dckr_xxx_bMjvwehHwO7svVHuIExj3i346eM&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Command Center version&lt;br /&gt;
  #&lt;br /&gt;
  command_center_image_version=69&lt;br /&gt;
  #&lt;br /&gt;
  # The Server URL: &#039;&amp;quot;http://yourserver:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  serverURL=&#039;&amp;quot;http://&amp;lt;yourserver&amp;gt;:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  # The company name on your Localyzer license&lt;br /&gt;
  #&lt;br /&gt;
  company_name=Lingoport&lt;br /&gt;
&lt;br /&gt;
==Run InstallCommandCenter.sh==&lt;br /&gt;
&lt;br /&gt;
     chmod +x InstallCommandCenter.sh&lt;br /&gt;
     sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
If you need to re-run the InstallCommandCenter.sh, make sure to run UninstallCommandCenter.sh first to clean your environment.&lt;br /&gt;
&lt;br /&gt;
Note: Docker image version is not the Command Center version, check latest docker image version at  https://hub.docker.com/repository/docker/lingoport/command-center_dev/general&lt;br /&gt;
&lt;br /&gt;
You should see at least an MySQL and a Command Center container running.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation == &lt;br /&gt;
Log in to the URL based on the command-center-config.sh settings, so something like:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[TEMPORARY-TO BE REWRITTEN ] (not http!) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    https://commandcenter.mycompany.io/&lt;br /&gt;
    or&lt;br /&gt;
    https://lingoport.mycompany.io/command-center&lt;br /&gt;
    or&lt;br /&gt;
    http://server.mycompany.io:8081/command-center&lt;br /&gt;
&lt;br /&gt;
You should now be able to install the licenses and create projects.&lt;br /&gt;
&lt;br /&gt;
The Command Center will initially have one Administrator user &#039;&#039;&#039;CCAdmin&#039;&#039;&#039; with the password &#039;&#039;&#039;please.reset.me&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Command Center Update =&lt;br /&gt;
==Update install.conf ==&lt;br /&gt;
&lt;br /&gt;
Change the &#039;&#039;version number&#039;&#039; to get the Command Center image update version.&lt;br /&gt;
See [[Command_Center_Installation#Configuration | Configuration ]] above.&lt;br /&gt;
&lt;br /&gt;
====Run UpdateCommandCenter.sh====&lt;br /&gt;
&lt;br /&gt;
     chmod +x UpdateCommandCenter.sh&lt;br /&gt;
     sudo ./UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
* From Command Center, as an administrator, go to settings and click &#039;Restart&#039;&lt;br /&gt;
* From the VM, use docker commands to stop or start Command Center. For example:&lt;br /&gt;
  &lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    sudo docker stop &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    &lt;br /&gt;
    sudo docker container ls -a | grep command&lt;br /&gt;
    sudo docker start &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
  sudo ./UninstallCommandCenter.sh&lt;br /&gt;
  Uninstalling the Command Center Servers ...&lt;br /&gt;
&lt;br /&gt;
  sudo docker ps&lt;br /&gt;
  CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Command Center is now ready to be used. Proceed to the URL configured in the installation and follow the [[Command_Center_User_Guide | User Guide]] steps.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97009</id>
		<title>Command Center Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97009"/>
		<updated>2023-02-15T18:53:52Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* HTTPS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites=&lt;br /&gt;
Before installing or updating Command Center, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
When installing Command Center on premises,  the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is very important to the successful deployment of the Lingoport applications when installing the suite on site. In particular, the IT group that sets up the Linux system must understand the usage model for the system. &lt;br /&gt;
Lingoport requires a meeting with the parties responsible for setting up and maintaining the host system &amp;lt;b&amp;gt;before&amp;lt;/b&amp;gt; installation can properly begin. The hope is that once the system is setup for installation, minimal IT interaction is necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preparations must be made with the &#039;&#039;&#039;IT&#039;&#039;&#039; team to ensure that all &#039;&#039;&#039;prerequisites&#039;&#039;&#039; are met before installation.  For new installations, this is the recommended method to use to verify that all the various actors work together well.&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
Before installing Command Center, the following needs to be configured:&lt;br /&gt;
* Hardware &lt;br /&gt;
* Linux &lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall&lt;br /&gt;
* Https&lt;br /&gt;
&lt;br /&gt;
=== Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:Docker Deployment Diagram.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware &amp;amp; Software Requirements==&lt;br /&gt;
The following sections describe the hardware and software requirements for Command Center.&lt;br /&gt;
&lt;br /&gt;
Please note that the Globalyzer Server installation is in a different section. &lt;br /&gt;
&lt;br /&gt;
===Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Minimum&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 16 GB&lt;br /&gt;
| 16 GB&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 160 GB&lt;br /&gt;
| 500 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The [[Terms_and_Definitions#GlobalyzerServer|Globalyzer Server]] may be hosted by Lingoport, reside on another server, or be installed on the same system.  Other Linux and Windows machines may have Globalyzer clients installed.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
The current versions of these software products can be found at: [[Introduction#Current_versions_of_Lingoport_products_and_supporting_applications | Current versions of Lingoport products and supporting applications]]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! Operating System&lt;br /&gt;
| Linux, CentOS (7) or RedHat (8)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker installation, most of the containers will be managed by Docker. However, volumes will be mounted on the Linux VM and a database configuration file will reside on the VM: This requires Linux.&lt;br /&gt;
&lt;br /&gt;
==Access and Ports / Firewall==&lt;br /&gt;
Command Center may need to be accessible by Lingoport and customer personnel to configure jobs, check the console if any problem arise, run jobs if necessary. Command Center needs to be accessible by many customer actors, including development teams, management, and QA, Lingoport, Translation Vendors.&lt;br /&gt;
&lt;br /&gt;
Please see [[Deployment_Scenarios#External_Access_and_Ports |External Access and Ports]] for all the details.&lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
A simple path to HTTPS configuration is via reverse proxy hosted on the hosting linux system. For CentOS / RHEL, common instructions are:&lt;br /&gt;
&lt;br /&gt;
1. Install apache and mod_ssl (https support for apache)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install httdp&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install mod_ssl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Configure SELinux to allow apache network connections&lt;br /&gt;
&lt;br /&gt;
sudo setsebool -P httpd_can_network_connect true&lt;br /&gt;
&lt;br /&gt;
3. Add http (not s) config file with the following content (edit as appropriate):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Acquire a certificate. Please follow your organization&#039;s instructions to do so. You should have a private key, and acquire both a certificate and a certificate chain. Some orgs may provide the certificate in the same file as the chain. Please request .pem style certificates, or convert the certificates to .pem.&lt;br /&gt;
&lt;br /&gt;
https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile&lt;br /&gt;
&lt;br /&gt;
6. Place the certificate and private key on a secure location on your system. Standard location is &amp;lt;code&amp;gt;/etc/pki/tls/&amp;lt;/code&amp;gt;, with the certificate under &amp;lt;code&amp;gt;/etc/pki/tls/certs/&amp;lt;/code&amp;gt; and the associated private key under &amp;lt;/code&amp;gt;/etc/pki/tls/private/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Add apache config to utilize the certificate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps-ssl.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
        DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# SSL Settings. These may be placed in other config files instead, but are left here for convenience. &lt;br /&gt;
SSLEngine on&lt;br /&gt;
&lt;br /&gt;
# BEGIN Possible security settings - based on LetsEncrypt recommendations as of Feb 2023.&lt;br /&gt;
# ---&lt;br /&gt;
# Please adjust to your own organization&#039;s guidelines!&lt;br /&gt;
SSLHonorCipherOrder     off&lt;br /&gt;
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1&lt;br /&gt;
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&lt;br /&gt;
&lt;br /&gt;
SSLOptions +StrictRequire&lt;br /&gt;
&lt;br /&gt;
# Add vhost name to log entries:&lt;br /&gt;
LogFormat &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot; vhost_combined&lt;br /&gt;
LogFormat &amp;quot;%v %h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b&amp;quot; vhost_common&lt;br /&gt;
# ---&lt;br /&gt;
# END Possible security settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Reference the certificates:&lt;br /&gt;
SSLCertificateFile /etc/pki/tls/certs/&amp;lt;yourserver.yourorg.com&amp;gt;.pem&lt;br /&gt;
SSLCertificateKeyFile /etc/pki/tls/private/&amp;lt;yourserversprivatekey&amp;gt;.pem&lt;br /&gt;
&lt;br /&gt;
# Not necessary if the certificate file includes a chain as well. See [[apache doc|https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile]] &lt;br /&gt;
SSLCertificateChainFile /etc/letsencrypt/live/dockerdev1.lingoport.io/chain.pem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8.  Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sudo systemctl restart httpd&lt;br /&gt;
&lt;br /&gt;
== Docker Pre-Requisite==&lt;br /&gt;
Docker is a platform that allows you to easily develop, test, and deploy applications as containers. This section will walk you through the process of installing Docker on a Linux system.&lt;br /&gt;
&lt;br /&gt;
On the system (most likely a VM) dedicated to Command Center, make sure you have the latest version of docker up and running. The following steps may help.&lt;br /&gt;
&lt;br /&gt;
A user with &#039;&#039;&#039;sudo&#039;&#039;&#039; privileges is required to run most commands.&lt;br /&gt;
&lt;br /&gt;
====Uninstall old docker versions====&lt;br /&gt;
&lt;br /&gt;
This is an optional step in case your docker version is out of date:&lt;br /&gt;
&lt;br /&gt;
    sudo yum remove docker \&lt;br /&gt;
                  docker-client \&lt;br /&gt;
                  docker-client-latest \&lt;br /&gt;
                  docker-common \&lt;br /&gt;
                  docker-latest \&lt;br /&gt;
                  docker-latest-logrotate \&lt;br /&gt;
                  docker-logrotate \&lt;br /&gt;
                  docker-engine&lt;br /&gt;
&lt;br /&gt;
====Install docker using the repository====&lt;br /&gt;
&lt;br /&gt;
    sudo yum install -y yum-utils&lt;br /&gt;
    sudo yum-config-manager \&lt;br /&gt;
      --add-repo \&lt;br /&gt;
      https://download.docker.com/linux/centos/docker-ce.repo&lt;br /&gt;
 &lt;br /&gt;
    sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin&lt;br /&gt;
&lt;br /&gt;
====Start Docker.====&lt;br /&gt;
Start docker using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl start docker&lt;br /&gt;
&lt;br /&gt;
Enable the Docker service to start automatically on system boot by running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl enable docker&lt;br /&gt;
&lt;br /&gt;
====Verify that Docker Engine is installed correctly ====&lt;br /&gt;
Run the hello-world image.&lt;br /&gt;
&lt;br /&gt;
    $ sudo docker run hello-world&lt;br /&gt;
&lt;br /&gt;
This command will run a test container and display a message indicating that the installation is working properly.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
When deploying Command Center, the configuration determines if the user management is done by Command Center itself, via an LDAP, or via SSO (using SAML).&lt;br /&gt;
&lt;br /&gt;
=== Command Center User Database ===&lt;br /&gt;
&lt;br /&gt;
One administration user is configured. Contact support (at) lingoport (dot) com in order to get an administration user and password. That user can then create Command Center users. It is strongly recommended to change the first administration password and keep it safe.&lt;br /&gt;
&lt;br /&gt;
=== LDAP ===&lt;br /&gt;
&lt;br /&gt;
* LDAP Connection &lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
=== SSO ===&lt;br /&gt;
* SSO Connection&lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= New Command Center Installation =&lt;br /&gt;
&lt;br /&gt;
==Create the database conf file==&lt;br /&gt;
The following is provided for a CentOS system:&lt;br /&gt;
&lt;br /&gt;
Uses the centos user as default user for docker&lt;br /&gt;
&lt;br /&gt;
* /home/centos/mysql/conf.d/mysql.cnf &lt;br /&gt;
&lt;br /&gt;
    [client]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
    [mysql]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration == &lt;br /&gt;
&lt;br /&gt;
Request the &#039;&#039;CommandCenterInstall.zip&#039;&#039; file from your customer success engineer. The zip file contains four files:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    install.conf&lt;br /&gt;
    InstallCommandCenter.sh&lt;br /&gt;
    UninstallCommandCenter.sh&lt;br /&gt;
    UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
Copy the above files to your home directory (/home/centos or /home/ec2-user)&lt;br /&gt;
&lt;br /&gt;
===Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
You need to provide your serverURL, your Docker Hub username and token, and MYSQL root password you want to use.  Also make sure the version is the one that is wanted. &lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Docker network name you want to create&lt;br /&gt;
  #&lt;br /&gt;
  database_network=mysqlnetscommand&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the MYSQL root password you want to create for the MySQL database container&lt;br /&gt;
  #&lt;br /&gt;
  database_root_password=mySQL!c0mma9d&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub username&lt;br /&gt;
  #&lt;br /&gt;
  docker_username=xxxlingoport&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub account token&lt;br /&gt;
  #&lt;br /&gt;
  docker_account_token=dckr_xxx_bMjvwehHwO7svVHuIExj3i346eM&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Command Center version&lt;br /&gt;
  #&lt;br /&gt;
  command_center_image_version=69&lt;br /&gt;
  #&lt;br /&gt;
  # The Server URL: &#039;&amp;quot;http://yourserver:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  serverURL=&#039;&amp;quot;http://&amp;lt;yourserver&amp;gt;:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  # The company name on your Localyzer license&lt;br /&gt;
  #&lt;br /&gt;
  company_name=Lingoport&lt;br /&gt;
&lt;br /&gt;
==Run InstallCommandCenter.sh==&lt;br /&gt;
&lt;br /&gt;
     chmod +x InstallCommandCenter.sh&lt;br /&gt;
     sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
If you need to re-run the InstallCommandCenter.sh, make sure to run UninstallCommandCenter.sh first to clean your environment.&lt;br /&gt;
&lt;br /&gt;
Note: Docker image version is not the Command Center version, check latest docker image version at  https://hub.docker.com/repository/docker/lingoport/command-center_dev/general&lt;br /&gt;
&lt;br /&gt;
You should see at least an MySQL and a Command Center container running.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation == &lt;br /&gt;
Log in to the URL based on the command-center-config.sh settings, so something like:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[TEMPORARY-TO BE REWRITTEN ] (not http!) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    https://commandcenter.mycompany.io/&lt;br /&gt;
    or&lt;br /&gt;
    https://lingoport.mycompany.io/command-center&lt;br /&gt;
    or&lt;br /&gt;
    http://server.mycompany.io:8081/command-center&lt;br /&gt;
&lt;br /&gt;
You should now be able to install the licenses and create projects.&lt;br /&gt;
&lt;br /&gt;
The Command Center will initially have one Administrator user &#039;&#039;&#039;CCAdmin&#039;&#039;&#039; with the password &#039;&#039;&#039;please.reset.me&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Command Center Update =&lt;br /&gt;
==Update install.conf ==&lt;br /&gt;
&lt;br /&gt;
Change the &#039;&#039;version number&#039;&#039; to get the Command Center image update version.&lt;br /&gt;
See [[Command_Center_Installation#Configuration | Configuration ]] above.&lt;br /&gt;
&lt;br /&gt;
====Run UpdateCommandCenter.sh====&lt;br /&gt;
&lt;br /&gt;
     chmod +x UpdateCommandCenter.sh&lt;br /&gt;
     sudo ./UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
* From Command Center, as an administrator, go to settings and click &#039;Restart&#039;&lt;br /&gt;
* From the VM, use docker commands to stop or start Command Center. For example:&lt;br /&gt;
  &lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    sudo docker stop &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    &lt;br /&gt;
    sudo docker container ls -a | grep command&lt;br /&gt;
    sudo docker start &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
  sudo ./UninstallCommandCenter.sh&lt;br /&gt;
  Uninstalling the Command Center Servers ...&lt;br /&gt;
&lt;br /&gt;
  sudo docker ps&lt;br /&gt;
  CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Command Center is now ready to be used. Proceed to the URL configured in the installation and follow the [[Command_Center_User_Guide | User Guide]] steps.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97008</id>
		<title>Command Center Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Command_Center_Installation&amp;diff=97008"/>
		<updated>2023-02-15T18:53:39Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Access and Ports / Firewall */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pre-Requisites=&lt;br /&gt;
Before installing or updating Command Center, please verify this section is complete. &lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
=== IT ===&lt;br /&gt;
When installing Command Center on premises,  the customer &#039;&#039;&#039;IT&#039;&#039;&#039; group is very important to the successful deployment of the Lingoport applications when installing the suite on site. In particular, the IT group that sets up the Linux system must understand the usage model for the system. &lt;br /&gt;
Lingoport requires a meeting with the parties responsible for setting up and maintaining the host system &amp;lt;b&amp;gt;before&amp;lt;/b&amp;gt; installation can properly begin. The hope is that once the system is setup for installation, minimal IT interaction is necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preparations must be made with the &#039;&#039;&#039;IT&#039;&#039;&#039; team to ensure that all &#039;&#039;&#039;prerequisites&#039;&#039;&#039; are met before installation.  For new installations, this is the recommended method to use to verify that all the various actors work together well.&lt;br /&gt;
&lt;br /&gt;
=== Basics ===&lt;br /&gt;
Before installing Command Center, the following needs to be configured:&lt;br /&gt;
* Hardware &lt;br /&gt;
* Linux &lt;br /&gt;
* Docker&lt;br /&gt;
* Firewall&lt;br /&gt;
* Https&lt;br /&gt;
&lt;br /&gt;
=== Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:Docker Deployment Diagram.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware &amp;amp; Software Requirements==&lt;br /&gt;
The following sections describe the hardware and software requirements for Command Center.&lt;br /&gt;
&lt;br /&gt;
Please note that the Globalyzer Server installation is in a different section. &lt;br /&gt;
&lt;br /&gt;
===Hardware Requirements ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Minimum&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! CPU&lt;br /&gt;
| 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
! Memory&lt;br /&gt;
| 16 GB&lt;br /&gt;
| 16 GB&lt;br /&gt;
|-&lt;br /&gt;
! Disk&lt;br /&gt;
| 160 GB&lt;br /&gt;
| 500 GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The [[Terms_and_Definitions#GlobalyzerServer|Globalyzer Server]] may be hosted by Lingoport, reside on another server, or be installed on the same system.  Other Linux and Windows machines may have Globalyzer clients installed.&lt;br /&gt;
&lt;br /&gt;
===Software requirements===&lt;br /&gt;
The current versions of these software products can be found at: [[Introduction#Current_versions_of_Lingoport_products_and_supporting_applications | Current versions of Lingoport products and supporting applications]]&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width=50%&amp;quot;&lt;br /&gt;
! Software&lt;br /&gt;
! Recommended&lt;br /&gt;
|-&lt;br /&gt;
! Operating System&lt;br /&gt;
| Linux, CentOS (7) or RedHat (8)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Since this is a Docker installation, most of the containers will be managed by Docker. However, volumes will be mounted on the Linux VM and a database configuration file will reside on the VM: This requires Linux.&lt;br /&gt;
&lt;br /&gt;
==Access and Ports / Firewall==&lt;br /&gt;
Command Center may need to be accessible by Lingoport and customer personnel to configure jobs, check the console if any problem arise, run jobs if necessary. Command Center needs to be accessible by many customer actors, including development teams, management, and QA, Lingoport, Translation Vendors.&lt;br /&gt;
&lt;br /&gt;
Please see [[Deployment_Scenarios#External_Access_and_Ports |External Access and Ports]] for all the details.&lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
A simple path to HTTPS configuration is via reverse proxy hosted on the hosting linux system. For CentOS / RHEL, common instructions are:&lt;br /&gt;
&lt;br /&gt;
1. Install apache and mod_ssl (https support for apache)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install httdp&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo yum install mod_ssl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Configure SELinux to allow apache network connections&lt;br /&gt;
&lt;br /&gt;
sudo setsebool -P httpd_can_network_connect true&lt;br /&gt;
&lt;br /&gt;
3. Add http (not s) config file with the following content (edit as appropriate):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
    # Force HTTPS only (Requires ssl config enabled) &lt;br /&gt;
    #Header edit Location ^http://(.*)$ https://$1&lt;br /&gt;
    #RewriteEngine on&lt;br /&gt;
    #RewriteCond %{SERVER_NAME} =SERVER_URL_REPLACE_ME&lt;br /&gt;
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;sudo systemctl restart httpd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Acquire a certificate. Please follow your organization&#039;s instructions to do so. You should have a private key, and acquire both a certificate and a certificate chain. Some orgs may provide the certificate in the same file as the chain. Please request .pem style certificates, or convert the certificates to .pem.&lt;br /&gt;
&lt;br /&gt;
https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile&lt;br /&gt;
&lt;br /&gt;
6. Place the certificate and private key on a secure location on your system. Standard location is &amp;lt;code&amp;gt;/etc/pki/tls/&amp;lt;/code&amp;gt;, with the certificate under &amp;lt;code&amp;gt;/etc/pki/tls/certs/&amp;lt;/code&amp;gt; and the associated private key under &amp;lt;/code&amp;gt;/etc/pki/tls/private/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Add apache config to utilize the certificate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/httpd/conf.d/lingoport-apps-ssl.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerName SERVER_URL_REPLACE_ME   # example: myserver.lingoport.io&lt;br /&gt;
        DocumentRoot /var/www/html&lt;br /&gt;
&lt;br /&gt;
    AllowEncodedSlashes NoDecode&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
&lt;br /&gt;
    # Default command center config - hosted on port 8081 under url path &#039;/command-center/&#039;&lt;br /&gt;
    ProxyPass /command-center/ http://localhost:8081/command-center/ nocanon&lt;br /&gt;
    ProxyPassReverse /command-center/ http://localhost:8081/command-center/&lt;br /&gt;
&lt;br /&gt;
    # Default fallback config, redirect to port 8081 for urls without &#039;/command-center/&#039; as the starting path.&lt;br /&gt;
    # Adjust this if a different fallback mechanism is preferred.&lt;br /&gt;
    ProxyPass / http://localhost:8081/&lt;br /&gt;
    ProxyPassReverse / http://localhost:8081/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# SSL Settings. These may be placed in other config files instead, but are left here for convenience. &lt;br /&gt;
SSLEngine on&lt;br /&gt;
&lt;br /&gt;
# BEGIN Possible security settings - based on LetsEncrypt recommendations as of Feb 2023.&lt;br /&gt;
# ---&lt;br /&gt;
# Please adjust to your own organization&#039;s guidelines!&lt;br /&gt;
SSLHonorCipherOrder     off&lt;br /&gt;
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1&lt;br /&gt;
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384&lt;br /&gt;
&lt;br /&gt;
SSLOptions +StrictRequire&lt;br /&gt;
&lt;br /&gt;
# Add vhost name to log entries:&lt;br /&gt;
LogFormat &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b \&amp;quot;%{Referer}i\&amp;quot; \&amp;quot;%{User-agent}i\&amp;quot;&amp;quot; vhost_combined&lt;br /&gt;
LogFormat &amp;quot;%v %h %l %u %t \&amp;quot;%r\&amp;quot; %&amp;gt;s %b&amp;quot; vhost_common&lt;br /&gt;
# ---&lt;br /&gt;
# END Possible security settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Reference the certificates:&lt;br /&gt;
SSLCertificateFile /etc/pki/tls/certs/&amp;lt;yourserver.yourorg.com&amp;gt;.pem&lt;br /&gt;
SSLCertificateKeyFile /etc/pki/tls/private/&amp;lt;yourserversprivatekey&amp;gt;.pem&lt;br /&gt;
&lt;br /&gt;
# Not necessary if the certificate file includes a chain as well. See [[apache doc|https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile]] &lt;br /&gt;
SSLCertificateChainFile /etc/letsencrypt/live/dockerdev1.lingoport.io/chain.pem&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8.  Restart apache to apply the settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sudo systemctl hrestart httpd&lt;br /&gt;
&lt;br /&gt;
== Docker Pre-Requisite==&lt;br /&gt;
Docker is a platform that allows you to easily develop, test, and deploy applications as containers. This section will walk you through the process of installing Docker on a Linux system.&lt;br /&gt;
&lt;br /&gt;
On the system (most likely a VM) dedicated to Command Center, make sure you have the latest version of docker up and running. The following steps may help.&lt;br /&gt;
&lt;br /&gt;
A user with &#039;&#039;&#039;sudo&#039;&#039;&#039; privileges is required to run most commands.&lt;br /&gt;
&lt;br /&gt;
====Uninstall old docker versions====&lt;br /&gt;
&lt;br /&gt;
This is an optional step in case your docker version is out of date:&lt;br /&gt;
&lt;br /&gt;
    sudo yum remove docker \&lt;br /&gt;
                  docker-client \&lt;br /&gt;
                  docker-client-latest \&lt;br /&gt;
                  docker-common \&lt;br /&gt;
                  docker-latest \&lt;br /&gt;
                  docker-latest-logrotate \&lt;br /&gt;
                  docker-logrotate \&lt;br /&gt;
                  docker-engine&lt;br /&gt;
&lt;br /&gt;
====Install docker using the repository====&lt;br /&gt;
&lt;br /&gt;
    sudo yum install -y yum-utils&lt;br /&gt;
    sudo yum-config-manager \&lt;br /&gt;
      --add-repo \&lt;br /&gt;
      https://download.docker.com/linux/centos/docker-ce.repo&lt;br /&gt;
 &lt;br /&gt;
    sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin&lt;br /&gt;
&lt;br /&gt;
====Start Docker.====&lt;br /&gt;
Start docker using the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl start docker&lt;br /&gt;
&lt;br /&gt;
Enable the Docker service to start automatically on system boot by running the following command:&lt;br /&gt;
&lt;br /&gt;
    $ sudo systemctl enable docker&lt;br /&gt;
&lt;br /&gt;
====Verify that Docker Engine is installed correctly ====&lt;br /&gt;
Run the hello-world image.&lt;br /&gt;
&lt;br /&gt;
    $ sudo docker run hello-world&lt;br /&gt;
&lt;br /&gt;
This command will run a test container and display a message indicating that the installation is working properly.&lt;br /&gt;
&lt;br /&gt;
== Credentials ==&lt;br /&gt;
&lt;br /&gt;
When deploying Command Center, the configuration determines if the user management is done by Command Center itself, via an LDAP, or via SSO (using SAML).&lt;br /&gt;
&lt;br /&gt;
=== Command Center User Database ===&lt;br /&gt;
&lt;br /&gt;
One administration user is configured. Contact support (at) lingoport (dot) com in order to get an administration user and password. That user can then create Command Center users. It is strongly recommended to change the first administration password and keep it safe.&lt;br /&gt;
&lt;br /&gt;
=== LDAP ===&lt;br /&gt;
&lt;br /&gt;
* LDAP Connection &lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
=== SSO ===&lt;br /&gt;
* SSO Connection&lt;br /&gt;
* Management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= New Command Center Installation =&lt;br /&gt;
&lt;br /&gt;
==Create the database conf file==&lt;br /&gt;
The following is provided for a CentOS system:&lt;br /&gt;
&lt;br /&gt;
Uses the centos user as default user for docker&lt;br /&gt;
&lt;br /&gt;
* /home/centos/mysql/conf.d/mysql.cnf &lt;br /&gt;
&lt;br /&gt;
    [client]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
    [mysql]&lt;br /&gt;
    default-character-set = utf8mb4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration == &lt;br /&gt;
&lt;br /&gt;
Request the &#039;&#039;CommandCenterInstall.zip&#039;&#039; file from your customer success engineer. The zip file contains four files:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    install.conf&lt;br /&gt;
    InstallCommandCenter.sh&lt;br /&gt;
    UninstallCommandCenter.sh&lt;br /&gt;
    UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
Copy the above files to your home directory (/home/centos or /home/ec2-user)&lt;br /&gt;
&lt;br /&gt;
===Set up install.conf ===&lt;br /&gt;
&lt;br /&gt;
You need to provide your serverURL, your Docker Hub username and token, and MYSQL root password you want to use.  Also make sure the version is the one that is wanted. &lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Docker network name you want to create&lt;br /&gt;
  #&lt;br /&gt;
  database_network=mysqlnetscommand&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the MYSQL root password you want to create for the MySQL database container&lt;br /&gt;
  #&lt;br /&gt;
  database_root_password=mySQL!c0mma9d&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub username&lt;br /&gt;
  #&lt;br /&gt;
  docker_username=xxxlingoport&lt;br /&gt;
  #&lt;br /&gt;
  # Provide your Docker Hub account token&lt;br /&gt;
  #&lt;br /&gt;
  docker_account_token=dckr_xxx_bMjvwehHwO7svVHuIExj3i346eM&lt;br /&gt;
  #&lt;br /&gt;
  # Provide the Command Center version&lt;br /&gt;
  #&lt;br /&gt;
  command_center_image_version=69&lt;br /&gt;
  #&lt;br /&gt;
  # The Server URL: &#039;&amp;quot;http://yourserver:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  serverURL=&#039;&amp;quot;http://&amp;lt;yourserver&amp;gt;:8081/command-center&amp;quot;&#039;&lt;br /&gt;
  #&lt;br /&gt;
  # The company name on your Localyzer license&lt;br /&gt;
  #&lt;br /&gt;
  company_name=Lingoport&lt;br /&gt;
&lt;br /&gt;
==Run InstallCommandCenter.sh==&lt;br /&gt;
&lt;br /&gt;
     chmod +x InstallCommandCenter.sh&lt;br /&gt;
     sudo ./InstallCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
If you need to re-run the InstallCommandCenter.sh, make sure to run UninstallCommandCenter.sh first to clean your environment.&lt;br /&gt;
&lt;br /&gt;
Note: Docker image version is not the Command Center version, check latest docker image version at  https://hub.docker.com/repository/docker/lingoport/command-center_dev/general&lt;br /&gt;
&lt;br /&gt;
You should see at least an MySQL and a Command Center container running.&lt;br /&gt;
&lt;br /&gt;
== Verify Installation == &lt;br /&gt;
Log in to the URL based on the command-center-config.sh settings, so something like:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[TEMPORARY-TO BE REWRITTEN ] (not http!) &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    https://commandcenter.mycompany.io/&lt;br /&gt;
    or&lt;br /&gt;
    https://lingoport.mycompany.io/command-center&lt;br /&gt;
    or&lt;br /&gt;
    http://server.mycompany.io:8081/command-center&lt;br /&gt;
&lt;br /&gt;
You should now be able to install the licenses and create projects.&lt;br /&gt;
&lt;br /&gt;
The Command Center will initially have one Administrator user &#039;&#039;&#039;CCAdmin&#039;&#039;&#039; with the password &#039;&#039;&#039;please.reset.me&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Command Center Update =&lt;br /&gt;
==Update install.conf ==&lt;br /&gt;
&lt;br /&gt;
Change the &#039;&#039;version number&#039;&#039; to get the Command Center image update version.&lt;br /&gt;
See [[Command_Center_Installation#Configuration | Configuration ]] above.&lt;br /&gt;
&lt;br /&gt;
====Run UpdateCommandCenter.sh====&lt;br /&gt;
&lt;br /&gt;
     chmod +x UpdateCommandCenter.sh&lt;br /&gt;
     sudo ./UpdateCommandCenter.sh&lt;br /&gt;
&lt;br /&gt;
To check the running container status&lt;br /&gt;
&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
= Start and Stop System =&lt;br /&gt;
* From Command Center, as an administrator, go to settings and click &#039;Restart&#039;&lt;br /&gt;
* From the VM, use docker commands to stop or start Command Center. For example:&lt;br /&gt;
  &lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    sudo docker stop &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
    &lt;br /&gt;
    sudo docker container ls -a | grep command&lt;br /&gt;
    sudo docker start &amp;lt;hash&amp;gt;&lt;br /&gt;
    sudo docker ps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Uninstall =&lt;br /&gt;
&lt;br /&gt;
  sudo ./UninstallCommandCenter.sh&lt;br /&gt;
  Uninstalling the Command Center Servers ...&lt;br /&gt;
&lt;br /&gt;
  sudo docker ps&lt;br /&gt;
  CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
Command Center is now ready to be used. Proceed to the URL configured in the installation and follow the [[Command_Center_User_Guide | User Guide]] steps.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=95903</id>
		<title>Globalyzer in IDE</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Globalyzer_in_IDE&amp;diff=95903"/>
		<updated>2022-03-02T15:42:36Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Globalyzer Lite Plugin for VSCode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Can I use Globalyzer Lite with my standard IDE?==&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite client can be used with Eclipse, Visual Studio and IntelliJ IDEs.&lt;br /&gt;
&lt;br /&gt;
== Using Globalyzer Lite from an Integrated Development Environment ==&lt;br /&gt;
&lt;br /&gt;
Globalyzer Lite may be used within many IDEs that support external tools, including Visual Studio, IntelliJ IDEA, and Eclipse. Configuring Lite as an external tool takes some initial setup, but is relatively easy to accomplish. Once configured, Lite may be used through the IDE&#039;s external tool menu with the click of a button. The recommended, documented tools:&lt;br /&gt;
&lt;br /&gt;
# Scan the currently selected file/directory.&lt;br /&gt;
# Scan everything within the parent directory of the currently selected file/directory.&lt;br /&gt;
# Scan the entire project.&lt;br /&gt;
&lt;br /&gt;
Demonstration videos are available for:&lt;br /&gt;
&lt;br /&gt;
* [https://player.vimeo.com/video/137641243 Visual Studio]&lt;br /&gt;
* [https://player.vimeo.com/video/137641242 IntelliJ IDEA]&lt;br /&gt;
* [https://player.vimeo.com/video/137641241 Eclipse]&lt;br /&gt;
&lt;br /&gt;
To configure Lite in the IDE, please see this page: [https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html Lite IDE Usage].&lt;br /&gt;
&lt;br /&gt;
The developer can then use the power of the IDE to refactor the relevant issues or to mark false positives in the code using Globalyzer ignore comments, such as $NON-NLS-L$. For more information, see the Globalyzer Comment Tags in [[ False Positives | False Positives ]] . &lt;br /&gt;
&lt;br /&gt;
Those refactoring and the comment tags are now part of the code: The Continuous Globalization System using the same Lite project definition file will show the same results in the Dashboard.&lt;br /&gt;
&lt;br /&gt;
==How do I install Globalyzer Lite?==&lt;br /&gt;
&lt;br /&gt;
To install the Globalyzer Lite, you first need a Globalyzer account (see [[Globalyzer_Overview_and_General#How_do_I_obtain_a_Globalyzer_account.3F|this FAQ]]). Once you have an account, you log into the Globalyzer Server and at the bottom of your home page there is a link to download Globalyzer Lite.&lt;br /&gt;
&lt;br /&gt;
The Globalyzer Lite is a standalone Java application. It uses Rule Sets to scan code at the command line. It is used in Jenkins configured for the Continuous G11n System and can be integrated as an external tool in an IDE.  &lt;br /&gt;
&lt;br /&gt;
Please see [https://www.globalyzer.com/gzserver/home/installclient installation] for complete Globalyzer Lite download/installation instructions.&lt;br /&gt;
&lt;br /&gt;
To install:&lt;br /&gt;
&lt;br /&gt;
# Unzip the Globalyzer Lite zip file at a desired location&lt;br /&gt;
# Run either &amp;lt;code&amp;gt;lite-setup.bat&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;lite-setup.sh&amp;lt;/code&amp;gt; depending on your system.&lt;br /&gt;
&lt;br /&gt;
To verify the installation, from a command line at the location that it was installed:&lt;br /&gt;
 java -jar globalyzer-lite.jar -version&lt;br /&gt;
&lt;br /&gt;
or, show the help info:&lt;br /&gt;
 java -jar globalyzer-lite.jar -help&lt;br /&gt;
&lt;br /&gt;
== Sharing Project Definition Files Between IDEs and Build Systems ==&lt;br /&gt;
&lt;br /&gt;
It is common to check in a single project definition file per code repository. However, the desired IDE configuration may sometimes be incompatible with the desired build system configuration.&lt;br /&gt;
&lt;br /&gt;
These incompatibilities are best solved by modifying the project definition file within the build system. The IDE config can then be used as the default.&lt;br /&gt;
&lt;br /&gt;
Here is an example: The desired report type for Globalyzer Lite may be ScanDetailedCSV for developer usage, but will need to be ScanDetailedXML within the build system. The project definition file would then be written out with the &amp;lt;report-type&amp;gt; set to ScanDetailedCSV:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;gzproject&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  &amp;lt;report-type&amp;gt;ScanDetailedCSV&amp;lt;/report-type&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/gzproject&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The build system can then be set to auto-replace &amp;quot;ScanDetailedCSV&amp;quot; with &amp;quot;ScanDetailedXML&amp;quot;. The following Linux command will do so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ sed --in-place &#039;s|ScanDetailedCSV|ScanDetailedXML|&#039; $WORKSPACE/ProjectDefinition.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If desired, the opposite replacement also may be performed at the end of the build.&lt;br /&gt;
&lt;br /&gt;
Finally, here is a bash function to replace the content of any XML field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;replace_xml_token() {&lt;br /&gt;
  token_name=$1&lt;br /&gt;
  new_content=$2&lt;br /&gt;
  sed -ri &amp;quot;s|(&amp;lt;${token_name}&amp;gt;).*(&amp;lt;/${token_name}&amp;gt;)|\1${new_content}\2|g&amp;quot; $WORKSPACE/ProjectDefinition.xml&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It may be used like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ replace_xml_token &amp;quot;report-type&amp;quot; &amp;quot;ScanDetailedXML&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lite IDE Ignore==&lt;br /&gt;
When using Lite in an IDE (see https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html ), you can use the power of the IDE to mark some issues in the code as to be ignored. Globalyzer uses a set of standard comments, namely &amp;lt;code&amp;gt;$NON-NLS-L$&amp;lt;/code&amp;gt;. There are many ways to do so. We will illustrate one such way with Lite in Eclipse. &lt;br /&gt;
&lt;br /&gt;
== Lite is set in Eclipse ==&lt;br /&gt;
To set Lite in your Eclipse environment, refer to https://www.globalyzer.com/gzserver/help/referenceLite/globalyzer-lite-IDE-usage.html#Eclipse ; There are two sections, one for Linux, one for Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:LiteConfigured.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Run Lite ===&lt;br /&gt;
* Select the directory or file you want to analyze&lt;br /&gt;
* Click on the external tools button&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; Lite analyzes the relevant files based on the Globalyzer Project Definition file and shows the clickable results in the Console view.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteRun.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Navigate to the Issue ===&lt;br /&gt;
* Click on the issue in the Console&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; It opens the file and highlights the line with the issue.&lt;br /&gt;
&lt;br /&gt;
=== Refactor the Code or Ignore the Issue===&lt;br /&gt;
Depending on what the developer sees, the issue either needs to be refactored or ignored. If the issue needs to be ignored, the //$NON-NLS-L$ comment needs to be added at the end of that line. One can simply add it by typing it. Some short cut exist and some can be created. For instance:&lt;br /&gt;
&lt;br /&gt;
* Go to the end of the line to ignore and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&lt;br /&gt;
* Choose &amp;quot;nls - non externalize string marker&amp;quot; in the list of templates. &lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
* Add the string &amp;quot;nls&amp;quot; and type &amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt; &lt;br /&gt;
* Eclipse proposes the standard $NLS notation by default. Select that notation and type L.&lt;br /&gt;
&lt;br /&gt;
[[File:LiteNlsCtrSpace.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The line now reads:&lt;br /&gt;
    	&amp;lt;code&amp;gt;Locale locale = new Locale(&amp;quot;en&amp;quot;, &amp;quot;US&amp;quot;); //$NON-NLS-L$&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Repeat the process for other false positives&lt;br /&gt;
&lt;br /&gt;
Lines tagged with the &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; will be ignored by Globalyzer the next time you run the Lite external tool.&lt;br /&gt;
&lt;br /&gt;
=== Advanced Template ===&lt;br /&gt;
The previous illustration was done using the default template. You can modify the template to have directly &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; on other key combination or the same &amp;lt;code&amp;gt;nls&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The following image shows how to use &amp;lt;code&amp;gt;nll&amp;lt;Ctr&amp;gt;&amp;lt;Space&amp;gt;&amp;lt;/code&amp;gt; to insert directory &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:NllTemplate.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is one way of adding &amp;lt;code&amp;gt;//$NON-NLS-L$&amp;lt;/code&amp;gt; at the end of the line. Some developers will decide on other methods.&lt;br /&gt;
&lt;br /&gt;
=== Globalyzer Lite Plugin for VSCode ===&lt;br /&gt;
&lt;br /&gt;
To Configure the Plugin:&lt;br /&gt;
*Install Globalyzer Lite as directed&lt;br /&gt;
*Open your project folder in VSCode&lt;br /&gt;
*Select “Terminal-&amp;gt;Configure Tasks” from the top menu bar&lt;br /&gt;
[[File:Vccode1.png|800px]]&lt;br /&gt;
* Select “Create tasks.json file from template” from the popup option list&lt;br /&gt;
[[File:Vccode2.png|700px]]&lt;br /&gt;
*Select “Others” from the Task Template list&lt;br /&gt;
[[File:Vccode3.png|700px]]&lt;br /&gt;
[[File:Vccode4.png|800px]]&lt;br /&gt;
*Change the default template for the generated tasks.json file  to match the following:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;2.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;tasks&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;GlobalyzerLite&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;shell&amp;quot;,&lt;br /&gt;
            &amp;quot;command&amp;quot;: &amp;quot;java&amp;quot;,&lt;br /&gt;
            &amp;quot;args&amp;quot;: [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;/Applications/Lingoport/globalyzer-lite-6.6.0_8.0/globalyzer-lite.jar&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;-f&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}/lingoport/LiteProjectDefinition.xml&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--project-path&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${workspaceFolder}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--scan-items&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;${file}&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;--console-output&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;value&amp;quot;: &amp;quot;visual-studio&amp;quot;,&lt;br /&gt;
                        &amp;quot;quoting&amp;quot;: &amp;quot;weak&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
                &lt;br /&gt;
            ],&lt;br /&gt;
            &amp;quot;presentation&amp;quot;: {&lt;br /&gt;
                &amp;quot;showReuseMessage&amp;quot;: false,&lt;br /&gt;
                &amp;quot;clear&amp;quot;: true,&lt;br /&gt;
                &amp;quot;revealProblems&amp;quot;: &amp;quot;onProblem&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;problemMatcher&amp;quot;: {&lt;br /&gt;
                &amp;quot;fileLocation&amp;quot;: [&amp;quot;absolute&amp;quot;],&lt;br /&gt;
                &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;,&lt;br /&gt;
                &amp;quot;pattern&amp;quot;: {&lt;br /&gt;
                    &amp;quot;regexp&amp;quot;: &amp;quot;^(.*)\\((\\d*)\\):\\s+(.*),\\s+(P\\d+):\\s+(.*)&amp;quot;,&lt;br /&gt;
                    &amp;quot;file&amp;quot;: 1,&lt;br /&gt;
                    &amp;quot;line&amp;quot;: 2,&lt;br /&gt;
                    &amp;quot;message&amp;quot;: 3,&lt;br /&gt;
                    &amp;quot;severity&amp;quot;: 4,&lt;br /&gt;
                    &amp;quot;code&amp;quot;: 5&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
*“label” is the name of the task - this can be changed to whatever makes the most sense&lt;br /&gt;
*“type” specifies that the command should be run in a shell - required&lt;br /&gt;
*“command” is the command to execute in the shell - required&lt;br /&gt;
*“problemMatcher” used to auto-format the output, &lt;br /&gt;
*“args” specifies the arguments to be passed to the command at execution&lt;br /&gt;
*“value” contains the actual arguments&lt;br /&gt;
**-jar specifies the jar to execute&lt;br /&gt;
***Replace &#039;path/to/globalyzer-lite.jar&#039; with the absolute path to your globalyzer-lite.jar. &lt;br /&gt;
***‘C:\Lingoport\globalyzer-lite-x.y.z\globalyzer-lite.jar’&lt;br /&gt;
**-f is the name of the Project Definition file&lt;br /&gt;
***Replace the ‘/path/to/LiteProjectDefinition.xml’ with the workspace relative path of your Project Definition file&lt;br /&gt;
***E.g. ${workspaceFolder}/lingoport/LiteProjectDefinition.xml&lt;br /&gt;
**--project-path is the path of this project&lt;br /&gt;
***Leave this as the ${workspaceFolder} VSCode environment variable&lt;br /&gt;
**--scan-items Overrides the default settings for which files and directories to scan&lt;br /&gt;
***Use ${file} to scan only the currently selected file in VSCode&lt;br /&gt;
**--console-output prints scan report output to console with specified format.&lt;br /&gt;
***Leave as &amp;quot;visual-studio&amp;quot; - format report output for visual studio. This allows the user to click on a candidate issue in the output and jump to its location within a file.&lt;br /&gt;
*“quoting” specifies how to handle quoting within the args - required as “weak”&lt;br /&gt;
*“presentation” configures how the workspace should handle displaying the task as it executes&lt;br /&gt;
*“problemMatcher” uses a regular expression to extract the problems found in the scan and display them in the problems panel&lt;br /&gt;
&lt;br /&gt;
===To Execute a Scan on the Current Opened File:===&lt;br /&gt;
1.Select “Terminal-&amp;gt;Run Task” and choose the GlobalyzerLite task from the list in the modal window&lt;br /&gt;
&lt;br /&gt;
2.Scan will execute in a VSCode terminal panel and display problems in the problems panel if any are found. Terminal output and problem panel screenshots on next page.&lt;br /&gt;
[[File:Vccode5.png|700px]]&lt;br /&gt;
[[File:Vccode6.png|700px]]&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Vulnerability_Remediation&amp;diff=95785</id>
		<title>Vulnerability Remediation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Vulnerability_Remediation&amp;diff=95785"/>
		<updated>2022-01-21T16:36:03Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Lingoport&amp;#039;s Response to Major Software Vulnerabilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lingoport&#039;s Response to Major Software Vulnerabilities =&lt;br /&gt;
&lt;br /&gt;
== Apache Log4j Security Vulnerabilities ==&lt;br /&gt;
&lt;br /&gt;
A major security vulnerability allowing for remote code execution on affected systems.&lt;br /&gt;
&lt;br /&gt;
See: https://logging.apache.org/log4j/2.x/security.html&lt;br /&gt;
&lt;br /&gt;
=== Lingoport Response ===&lt;br /&gt;
&lt;br /&gt;
Pending further action, Lingoport has shut down all non-critical systems.&lt;br /&gt;
&lt;br /&gt;
Critical systems have been patched to remove all copies of log4j 2.x with log4j 2.17.1 followed by a hard reboot.&lt;br /&gt;
&lt;br /&gt;
=== For Lingoport Clients ===&lt;br /&gt;
&lt;br /&gt;
The below scripts may be used in conjunction to replace all log4j 2.x with log4j 2.17.1. &lt;br /&gt;
&lt;br /&gt;
==== 1. Remove previous patch files, &#039;&#039;if any&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
If you applied patches previously, you may have log4j 2.15, 2.16, or 2.17.0 files. They are likely under the /tmp directory, as per our instructions. &lt;br /&gt;
* Navigate to /tmp &lt;br /&gt;
  cd /tmp&lt;br /&gt;
* Remove the files. For instance, &lt;br /&gt;
   ls apache-log4j*.zip&lt;br /&gt;
   rm apache-log4j*.zip&lt;br /&gt;
   rm -rf /tmp/apache-log4j-2.15.0-bin/&lt;br /&gt;
   rm -rf /tmp/apache-log4j-2.16.0-bin/&lt;br /&gt;
   rm -rf /tmp/apache-log4j-2.17.0-bin/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If previous patches were not applied, this step is not necessary.&lt;br /&gt;
&lt;br /&gt;
==== 2. Check the status of your system before the fix ====&lt;br /&gt;
&lt;br /&gt;
Check if your system is vulnerable with the following script, which will search your system for vulnerable libraries.&lt;br /&gt;
&lt;br /&gt;
This script is designed to be run as root, or via sudo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$EUID&amp;quot; -ne 0  ]&lt;br /&gt;
then echo &amp;quot;Please run $0 as root&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
while read -r log4j_jar ; do&lt;br /&gt;
    if [[ -z &amp;quot;$log4j_jar&amp;quot; ]] ; then&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-2.17.1&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;Up to date: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-1.&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;1.x - safe: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
        echo &amp;quot;Vulnerable: $log4j_jar&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;Outdated:   $log4j_jar&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done &amp;lt;&amp;lt;&amp;lt; &amp;quot;$(find / -name &#039;log4j*.jar&#039;)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. Retrieve log4j 2.17.1 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp/&lt;br /&gt;
curl -O https://dlcdn.apache.org/logging/log4j/2.17.1/apache-log4j-2.17.1-bin.zip &lt;br /&gt;
unzip apache-log4j-2.17.1-bin.zip &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4.  Replace other log4j instances on your system with 2.17.1 ====&lt;br /&gt;
&lt;br /&gt;
The following script will replace vulnerable log4j libraries with 2.17.1. It searches your system for the vulnerable libraries, and replaces any that are found.&lt;br /&gt;
&lt;br /&gt;
This script is designed to be run as root or via sudo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
set -e&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$EUID&amp;quot; -ne 0 ]&lt;br /&gt;
  then echo &amp;quot;Please run $0 as root&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
strip_version() {&lt;br /&gt;
    target=&amp;quot;$1&amp;quot;&lt;br /&gt;
    echo &amp;quot;$target&amp;quot; | sed -E &#039;s|-[0-9.]+.jar|-|&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
note_not_replaced() {&lt;br /&gt;
    target=&amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
        echo &amp;gt;&amp;amp;2 &amp;quot;unable to replace vulnerable $log4j_jar&amp;quot;&lt;br /&gt;
        exit_=&amp;quot;1&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;gt;&amp;amp;2 &amp;quot;unable to replace $log4j_jar (note: vuln not detected)&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [[ ! -d /tmp/apache-log4j-2.17.1-bin/ ]] ; then&lt;br /&gt;
    echo &amp;gt;&amp;amp;2 &amp;quot;Please retrieve apache log4j 2.17.1 and unzip it in /tmp before running this script&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
while read -r log4j_jar ; do&lt;br /&gt;
    if [[ -z &amp;quot;$log4j_jar&amp;quot; ]] ; then&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-2.17.1&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;Up to date: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*-1([0-9.]+).jar ]] ; then&lt;br /&gt;
        echo &amp;quot;1.x - safe: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*\/log4j[^0-9]*(slf4j)?[^0-9]*.jar  ]] ; then&lt;br /&gt;
        if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
            echo &amp;gt;&amp;amp;2 Cannot replace vulnerable versionless &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
            export exit_=1&lt;br /&gt;
            continue&lt;br /&gt;
        fi&lt;br /&gt;
        echo &amp;quot;ignoring versionless:  $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*\/log4j[^-]*[0-9.]+.jar  ]] ; then&lt;br /&gt;
        if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
            echo &amp;gt;&amp;amp;2 Cannot replace vulnerable strange-versioned &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
            export exit_=1&lt;br /&gt;
            continue&lt;br /&gt;
        fi&lt;br /&gt;
        echo &amp;quot;ignoring strange-versioned:  $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    user_group=&amp;quot;$(stat -c &amp;quot;%U:%G&amp;quot; &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    without_version=&amp;quot;$(strip_version &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    patched_jar=&amp;quot;$(basename &amp;quot;$without_version&amp;quot;)2.17.1.jar&amp;quot;&lt;br /&gt;
    base_dir=&amp;quot;$(dirname &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    echo &amp;quot;replace $log4j_jar ($user_group) - with $patched_jar&amp;quot;&lt;br /&gt;
    set -x&lt;br /&gt;
    cp /tmp/apache-log4j-2.17.1-bin/&amp;quot;$patched_jar&amp;quot; &amp;quot;$base_dir&amp;quot; || {&lt;br /&gt;
        set +x&lt;br /&gt;
        note_not_replaced &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    }&lt;br /&gt;
    chown &amp;quot;$user_group&amp;quot; &amp;quot;$base_dir/$patched_jar&amp;quot;&lt;br /&gt;
    mv &amp;quot;$log4j_jar&amp;quot; &amp;quot;$log4j_jar.orig.vulnerable&amp;quot;&lt;br /&gt;
    set +x&lt;br /&gt;
done &amp;lt;&amp;lt;&amp;lt; &amp;quot;$(find / -name &#039;log4j*.jar&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;${exit_}&amp;quot; == &amp;quot;1&amp;quot; ]] ; then&lt;br /&gt;
    echo &amp;quot;Failed!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 5. Check the status after the fix ====&lt;br /&gt;
You may wish to run the check script from #2 a second time to validate the fix. &lt;br /&gt;
Please note that the log4j 1.x are being worked on for our upcoming release (codename &#039;Ireland&#039;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 6.  Please reboot your system  ====&lt;br /&gt;
Reboot your system after replacing your libraries. This will ensure that the patch becomes fully effective.&lt;br /&gt;
&lt;br /&gt;
== FATAL: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter ==&lt;br /&gt;
&lt;br /&gt;
In versions &amp;lt;b&amp;gt;prior to Ireland&amp;lt;/b&amp;gt;, if the console output of a Localyzer project shows the following type of error:&lt;br /&gt;
&lt;br /&gt;
  FATAL: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter&lt;br /&gt;
  java.lang.NoClassDefFoundError: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter&lt;br /&gt;
     at com.lingoport.plugins.jenkinsgyzrlrmplugin.BuildLRM.saveProjectSettings(BuildLRM.java:860)&lt;br /&gt;
&lt;br /&gt;
or if the error is like:&lt;br /&gt;
&lt;br /&gt;
  FATAL: org/apache/log4j/Logger&lt;br /&gt;
  java.lang.ClassNotFoundException: org.apache.log4j.Logger&lt;br /&gt;
     at jenkins.util.AntClassLoader.findClassInComponents(AntClassLoader.java:1393)&lt;br /&gt;
     at jenkins.util.AntClassLoader.findClass(AntClassLoader.java:1348)&lt;br /&gt;
     at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1094)&lt;br /&gt;
     at java.lang.ClassLoader.loadClass(ClassLoader.java:351)&lt;br /&gt;
  Caused: java.lang.NoClassDefFoundError: org/apache/log4j/Logger&lt;br /&gt;
     at com.lingoport.common.velocity.LingoportVelocityWriter.&amp;lt;clinit&amp;gt;(LingoportVelocityWriter.java:45)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
it is likely that a Log4j is actually missing from the classpath. In that case, &lt;br /&gt;
&lt;br /&gt;
   copy the  lingoport/LRM-server-xx/lib/log4j-x.y.z.jar to /var/lib/jenkins/plugins/jenkins-gyzr-lrm-plugin/WEB-INF/lib/.&lt;br /&gt;
&lt;br /&gt;
This should only happen with versions prior to Ireland.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Vulnerability_Remediation&amp;diff=95774</id>
		<title>Vulnerability Remediation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Vulnerability_Remediation&amp;diff=95774"/>
		<updated>2021-12-30T21:29:21Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* 1. Remove previous patch files, if any */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lingoport&#039;s Response to Major Software Vulnerabilities =&lt;br /&gt;
&lt;br /&gt;
== Apache Log4j Security Vulnerabilities ==&lt;br /&gt;
&lt;br /&gt;
A major security vulnerability allowing for remote code execution on affected systems.&lt;br /&gt;
&lt;br /&gt;
See: https://logging.apache.org/log4j/2.x/security.html&lt;br /&gt;
&lt;br /&gt;
=== Lingoport Response ===&lt;br /&gt;
&lt;br /&gt;
Pending further action, Lingoport has shut down all non-critical systems.&lt;br /&gt;
&lt;br /&gt;
Critical systems have been patched to remove all copies of log4j 2.x with log4j 2.17.1 followed by a hard reboot.&lt;br /&gt;
&lt;br /&gt;
=== For Lingoport Clients ===&lt;br /&gt;
&lt;br /&gt;
The below scripts may be used in conjunction to replace all log4j 2.x with log4j 2.17.1. &lt;br /&gt;
&lt;br /&gt;
==== 1. Remove previous patch files, &#039;&#039;if any&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
If you applied patches previously, you may have log4j 2.15, 2.16, or 2.17.0 files. They are likely under the /tmp directory, as per our instructions. &lt;br /&gt;
* Navigate to /tmp &lt;br /&gt;
  cd /tmp&lt;br /&gt;
* Remove the files. For instance, &lt;br /&gt;
   ls apache-log4j*.zip&lt;br /&gt;
   rm apache-log4j*.zip&lt;br /&gt;
   rm -rf /tmp/apache-log4j-2.15.0-bin/&lt;br /&gt;
   rm -rf /tmp/apache-log4j-2.16.0-bin/&lt;br /&gt;
   rm -rf /tmp/apache-log4j-2.17.0-bin/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If previous patches were not applied, this step is not necessary.&lt;br /&gt;
&lt;br /&gt;
==== 2. Check the status of your system before the fix ====&lt;br /&gt;
&lt;br /&gt;
Check if your system is vulnerable with the following script, which will search your system for vulnerable libraries.&lt;br /&gt;
&lt;br /&gt;
This script is designed to be run as root, or via sudo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$EUID&amp;quot; -ne 0  ]&lt;br /&gt;
then echo &amp;quot;Please run $0 as root&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
while read -r log4j_jar ; do&lt;br /&gt;
    if [[ -z &amp;quot;$log4j_jar&amp;quot; ]] ; then&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-2.17.1&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;Up to date: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-1.&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;1.x - safe: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
        echo &amp;quot;Vulnerable: $log4j_jar&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;Outdated:   $log4j_jar&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done &amp;lt;&amp;lt;&amp;lt; &amp;quot;$(find / -name &#039;log4j*.jar&#039;)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. Retrieve log4j 2.17.1 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp/&lt;br /&gt;
curl -O https://dlcdn.apache.org/logging/log4j/2.17.1/apache-log4j-2.17.1-bin.zip &lt;br /&gt;
unzip apache-log4j-2.17.1-bin.zip &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4.  Replace other log4j instances on your system with 2.17.1 ====&lt;br /&gt;
&lt;br /&gt;
The following script will replace vulnerable log4j libraries with 2.17.1. It searches your system for the vulnerable libraries, and replaces any that are found.&lt;br /&gt;
&lt;br /&gt;
This script is designed to be run as root or via sudo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
set -e&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$EUID&amp;quot; -ne 0 ]&lt;br /&gt;
  then echo &amp;quot;Please run $0 as root&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
strip_version() {&lt;br /&gt;
    target=&amp;quot;$1&amp;quot;&lt;br /&gt;
    echo &amp;quot;$target&amp;quot; | sed -E &#039;s|-[0-9.]+.jar|-|&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
note_not_replaced() {&lt;br /&gt;
    target=&amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
        echo &amp;gt;&amp;amp;2 &amp;quot;unable to replace vulnerable $log4j_jar&amp;quot;&lt;br /&gt;
        exit_=&amp;quot;1&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;gt;&amp;amp;2 &amp;quot;unable to replace $log4j_jar (note: vuln not detected)&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [[ ! -d /tmp/apache-log4j-2.17.1-bin/ ]] ; then&lt;br /&gt;
    echo &amp;gt;&amp;amp;2 &amp;quot;Please retrieve apache log4j 2.17.1 and unzip it in /tmp before running this script&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
while read -r log4j_jar ; do&lt;br /&gt;
    if [[ -z &amp;quot;$log4j_jar&amp;quot; ]] ; then&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-2.17.1&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;Up to date: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*-1([0-9.]+).jar ]] ; then&lt;br /&gt;
        echo &amp;quot;1.x - safe: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*\/log4j[^0-9]*(slf4j)?[^0-9]*.jar  ]] ; then&lt;br /&gt;
        if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
            echo &amp;gt;&amp;amp;2 Cannot replace vulnerable versionless &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
            export exit_=1&lt;br /&gt;
            continue&lt;br /&gt;
        fi&lt;br /&gt;
        echo &amp;quot;ignoring versionless:  $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*\/log4j[^-]*[0-9.]+.jar  ]] ; then&lt;br /&gt;
        if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
            echo &amp;gt;&amp;amp;2 Cannot replace vulnerable strange-versioned &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
            export exit_=1&lt;br /&gt;
            continue&lt;br /&gt;
        fi&lt;br /&gt;
        echo &amp;quot;ignoring strange-versioned:  $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    user_group=&amp;quot;$(stat -c &amp;quot;%U:%G&amp;quot; &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    without_version=&amp;quot;$(strip_version &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    patched_jar=&amp;quot;$(basename &amp;quot;$without_version&amp;quot;)2.17.1.jar&amp;quot;&lt;br /&gt;
    base_dir=&amp;quot;$(dirname &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    echo &amp;quot;replace $log4j_jar ($user_group) - with $patched_jar&amp;quot;&lt;br /&gt;
    set -x&lt;br /&gt;
    cp /tmp/apache-log4j-2.17.1-bin/&amp;quot;$patched_jar&amp;quot; &amp;quot;$base_dir&amp;quot; || {&lt;br /&gt;
        set +x&lt;br /&gt;
        note_not_replaced &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    }&lt;br /&gt;
    chown &amp;quot;$user_group&amp;quot; &amp;quot;$base_dir/$patched_jar&amp;quot;&lt;br /&gt;
    mv &amp;quot;$log4j_jar&amp;quot; &amp;quot;$log4j_jar.orig.vulnerable&amp;quot;&lt;br /&gt;
    set +x&lt;br /&gt;
done &amp;lt;&amp;lt;&amp;lt; &amp;quot;$(find / -name &#039;log4j*.jar&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;${exit_}&amp;quot; == &amp;quot;1&amp;quot; ]] ; then&lt;br /&gt;
    echo &amp;quot;Failed!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 5. Check the status after the fix ====&lt;br /&gt;
You may wish to run the check script from #1 a second time to validate the fix. &lt;br /&gt;
Please note that the log4j 1.x are being worked on for our upcoming release (codename &#039;Ireland&#039;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 6.  Please reboot your system  ====&lt;br /&gt;
Reboot your system after replacing your libraries. This will ensure that the patch becomes fully effective.&lt;br /&gt;
&lt;br /&gt;
== FATAL: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter ==&lt;br /&gt;
&lt;br /&gt;
In versions &amp;lt;b&amp;gt;prior to Ireland&amp;lt;/b&amp;gt;, if the console output of a Localyzer project shows the following type of error:&lt;br /&gt;
&lt;br /&gt;
  FATAL: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter&lt;br /&gt;
  java.lang.NoClassDefFoundError: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter&lt;br /&gt;
     at com.lingoport.plugins.jenkinsgyzrlrmplugin.BuildLRM.saveProjectSettings(BuildLRM.java:860)&lt;br /&gt;
&lt;br /&gt;
or if the error is like:&lt;br /&gt;
&lt;br /&gt;
  FATAL: org/apache/log4j/Logger&lt;br /&gt;
  java.lang.ClassNotFoundException: org.apache.log4j.Logger&lt;br /&gt;
     at jenkins.util.AntClassLoader.findClassInComponents(AntClassLoader.java:1393)&lt;br /&gt;
     at jenkins.util.AntClassLoader.findClass(AntClassLoader.java:1348)&lt;br /&gt;
     at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1094)&lt;br /&gt;
     at java.lang.ClassLoader.loadClass(ClassLoader.java:351)&lt;br /&gt;
  Caused: java.lang.NoClassDefFoundError: org/apache/log4j/Logger&lt;br /&gt;
     at com.lingoport.common.velocity.LingoportVelocityWriter.&amp;lt;clinit&amp;gt;(LingoportVelocityWriter.java:45)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
it is likely that a Log4j is actually missing from the classpath. In that case, &lt;br /&gt;
&lt;br /&gt;
   copy the  lingoport/LRM-server-xx/lib/log4j-x.y.z.jar to /var/lib/jenkins/plugins/jenkins-gyzr-lrm-plugin/WEB-INF/lib/.&lt;br /&gt;
&lt;br /&gt;
This should only happen with versions prior to Ireland.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Vulnerability_Remediation&amp;diff=95773</id>
		<title>Vulnerability Remediation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Vulnerability_Remediation&amp;diff=95773"/>
		<updated>2021-12-30T21:17:39Z</updated>

		<summary type="html">&lt;p&gt;Masnes: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lingoport&#039;s Response to Major Software Vulnerabilities =&lt;br /&gt;
&lt;br /&gt;
== Apache Log4j Security Vulnerabilities ==&lt;br /&gt;
&lt;br /&gt;
A major security vulnerability allowing for remote code execution on affected systems.&lt;br /&gt;
&lt;br /&gt;
See: https://logging.apache.org/log4j/2.x/security.html&lt;br /&gt;
&lt;br /&gt;
=== Lingoport Response ===&lt;br /&gt;
&lt;br /&gt;
Pending further action, Lingoport has shut down all non-critical systems.&lt;br /&gt;
&lt;br /&gt;
Critical systems have been patched to remove all copies of log4j 2.x with log4j 2.17.1 followed by a hard reboot.&lt;br /&gt;
&lt;br /&gt;
=== For Lingoport Clients ===&lt;br /&gt;
&lt;br /&gt;
The below scripts may be used in conjunction to replace all log4j 2.x with log4j 2.17.1. &lt;br /&gt;
&lt;br /&gt;
==== 1. Remove previous patch files, &#039;&#039;if any&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
If you applied patches previously, you may have log4j 2.15 or 2.16 files. They are likely under the /tmp directory, as per our instructions. &lt;br /&gt;
* Navigate to /tmp &lt;br /&gt;
  cd /tmp&lt;br /&gt;
* Remove the files. For instance, &lt;br /&gt;
   ls apache-log4j*.zip&lt;br /&gt;
   rm apache-log4j*.zip&lt;br /&gt;
   rm -rf /tmp/apache-log4j-2.15.0-bin/&lt;br /&gt;
   rm -rf /tmp/apache-log4j-2.16.0-bin/&lt;br /&gt;
&lt;br /&gt;
If previous patches were not applied, this step is not necessary.&lt;br /&gt;
&lt;br /&gt;
==== 2. Check the status of your system before the fix ====&lt;br /&gt;
&lt;br /&gt;
Check if your system is vulnerable with the following script, which will search your system for vulnerable libraries.&lt;br /&gt;
&lt;br /&gt;
This script is designed to be run as root, or via sudo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$EUID&amp;quot; -ne 0  ]&lt;br /&gt;
then echo &amp;quot;Please run $0 as root&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
while read -r log4j_jar ; do&lt;br /&gt;
    if [[ -z &amp;quot;$log4j_jar&amp;quot; ]] ; then&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-2.17.1&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;Up to date: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-1.&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;1.x - safe: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
        echo &amp;quot;Vulnerable: $log4j_jar&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;Outdated:   $log4j_jar&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done &amp;lt;&amp;lt;&amp;lt; &amp;quot;$(find / -name &#039;log4j*.jar&#039;)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. Retrieve log4j 2.17.1 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp/&lt;br /&gt;
curl -O https://dlcdn.apache.org/logging/log4j/2.17.1/apache-log4j-2.17.1-bin.zip &lt;br /&gt;
unzip apache-log4j-2.17.1-bin.zip &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4.  Replace other log4j instances on your system with 2.17.1 ====&lt;br /&gt;
&lt;br /&gt;
The following script will replace vulnerable log4j libraries with 2.17.1. It searches your system for the vulnerable libraries, and replaces any that are found.&lt;br /&gt;
&lt;br /&gt;
This script is designed to be run as root or via sudo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
set -e&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$EUID&amp;quot; -ne 0 ]&lt;br /&gt;
  then echo &amp;quot;Please run $0 as root&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
strip_version() {&lt;br /&gt;
    target=&amp;quot;$1&amp;quot;&lt;br /&gt;
    echo &amp;quot;$target&amp;quot; | sed -E &#039;s|-[0-9.]+.jar|-|&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
note_not_replaced() {&lt;br /&gt;
    target=&amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
        echo &amp;gt;&amp;amp;2 &amp;quot;unable to replace vulnerable $log4j_jar&amp;quot;&lt;br /&gt;
        exit_=&amp;quot;1&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;gt;&amp;amp;2 &amp;quot;unable to replace $log4j_jar (note: vuln not detected)&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [[ ! -d /tmp/apache-log4j-2.17.1-bin/ ]] ; then&lt;br /&gt;
    echo &amp;gt;&amp;amp;2 &amp;quot;Please retrieve apache log4j 2.17.1 and unzip it in /tmp before running this script&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
while read -r log4j_jar ; do&lt;br /&gt;
    if [[ -z &amp;quot;$log4j_jar&amp;quot; ]] ; then&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-2.17.1&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;Up to date: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*-1([0-9.]+).jar ]] ; then&lt;br /&gt;
        echo &amp;quot;1.x - safe: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*\/log4j[^0-9]*(slf4j)?[^0-9]*.jar  ]] ; then&lt;br /&gt;
        if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
            echo &amp;gt;&amp;amp;2 Cannot replace vulnerable versionless &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
            export exit_=1&lt;br /&gt;
            continue&lt;br /&gt;
        fi&lt;br /&gt;
        echo &amp;quot;ignoring versionless:  $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*\/log4j[^-]*[0-9.]+.jar  ]] ; then&lt;br /&gt;
        if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
            echo &amp;gt;&amp;amp;2 Cannot replace vulnerable strange-versioned &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
            export exit_=1&lt;br /&gt;
            continue&lt;br /&gt;
        fi&lt;br /&gt;
        echo &amp;quot;ignoring strange-versioned:  $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    user_group=&amp;quot;$(stat -c &amp;quot;%U:%G&amp;quot; &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    without_version=&amp;quot;$(strip_version &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    patched_jar=&amp;quot;$(basename &amp;quot;$without_version&amp;quot;)2.17.1.jar&amp;quot;&lt;br /&gt;
    base_dir=&amp;quot;$(dirname &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    echo &amp;quot;replace $log4j_jar ($user_group) - with $patched_jar&amp;quot;&lt;br /&gt;
    set -x&lt;br /&gt;
    cp /tmp/apache-log4j-2.17.1-bin/&amp;quot;$patched_jar&amp;quot; &amp;quot;$base_dir&amp;quot; || {&lt;br /&gt;
        set +x&lt;br /&gt;
        note_not_replaced &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    }&lt;br /&gt;
    chown &amp;quot;$user_group&amp;quot; &amp;quot;$base_dir/$patched_jar&amp;quot;&lt;br /&gt;
    mv &amp;quot;$log4j_jar&amp;quot; &amp;quot;$log4j_jar.orig.vulnerable&amp;quot;&lt;br /&gt;
    set +x&lt;br /&gt;
done &amp;lt;&amp;lt;&amp;lt; &amp;quot;$(find / -name &#039;log4j*.jar&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;${exit_}&amp;quot; == &amp;quot;1&amp;quot; ]] ; then&lt;br /&gt;
    echo &amp;quot;Failed!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 5. Check the status after the fix ====&lt;br /&gt;
You may wish to run the check script from #1 a second time to validate the fix. &lt;br /&gt;
Please note that the log4j 1.x are being worked on for our upcoming release (codename &#039;Ireland&#039;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 6.  Please reboot your system  ====&lt;br /&gt;
Reboot your system after replacing your libraries. This will ensure that the patch becomes fully effective.&lt;br /&gt;
&lt;br /&gt;
== FATAL: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter ==&lt;br /&gt;
&lt;br /&gt;
In versions &amp;lt;b&amp;gt;prior to Ireland&amp;lt;/b&amp;gt;, if the console output of a Localyzer project shows the following type of error:&lt;br /&gt;
&lt;br /&gt;
  FATAL: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter&lt;br /&gt;
  java.lang.NoClassDefFoundError: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter&lt;br /&gt;
     at com.lingoport.plugins.jenkinsgyzrlrmplugin.BuildLRM.saveProjectSettings(BuildLRM.java:860)&lt;br /&gt;
&lt;br /&gt;
or if the error is like:&lt;br /&gt;
&lt;br /&gt;
  FATAL: org/apache/log4j/Logger&lt;br /&gt;
  java.lang.ClassNotFoundException: org.apache.log4j.Logger&lt;br /&gt;
     at jenkins.util.AntClassLoader.findClassInComponents(AntClassLoader.java:1393)&lt;br /&gt;
     at jenkins.util.AntClassLoader.findClass(AntClassLoader.java:1348)&lt;br /&gt;
     at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1094)&lt;br /&gt;
     at java.lang.ClassLoader.loadClass(ClassLoader.java:351)&lt;br /&gt;
  Caused: java.lang.NoClassDefFoundError: org/apache/log4j/Logger&lt;br /&gt;
     at com.lingoport.common.velocity.LingoportVelocityWriter.&amp;lt;clinit&amp;gt;(LingoportVelocityWriter.java:45)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
it is likely that a Log4j is actually missing from the classpath. In that case, &lt;br /&gt;
&lt;br /&gt;
   copy the  lingoport/LRM-server-xx/lib/log4j-x.y.z.jar to /var/lib/jenkins/plugins/jenkins-gyzr-lrm-plugin/WEB-INF/lib/.&lt;br /&gt;
&lt;br /&gt;
This should only happen with versions prior to Ireland.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Vulnerability_Remediation&amp;diff=95772</id>
		<title>Vulnerability Remediation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Vulnerability_Remediation&amp;diff=95772"/>
		<updated>2021-12-30T21:16:53Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* 4.  Replace other log4j instances on your system with 2.17 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lingoport&#039;s Response to Major Software Vulnerabilities =&lt;br /&gt;
&lt;br /&gt;
== Apache Log4j Security Vulnerabilities ==&lt;br /&gt;
&lt;br /&gt;
A major security vulnerability allowing for remote code execution on affected systems.&lt;br /&gt;
&lt;br /&gt;
See: https://logging.apache.org/log4j/2.x/security.html&lt;br /&gt;
&lt;br /&gt;
=== Lingoport Response ===&lt;br /&gt;
&lt;br /&gt;
Pending further action, Lingoport has shut down all non-critical systems.&lt;br /&gt;
&lt;br /&gt;
Critical systems have been patched to remove all copies of log4j 2.x with log4j 2.17 followed by a hard reboot.&lt;br /&gt;
&lt;br /&gt;
=== For Lingoport Clients ===&lt;br /&gt;
&lt;br /&gt;
The below scripts may be used in conjunction to replace all log4j 2.x with log4j 2.17. &lt;br /&gt;
&lt;br /&gt;
==== 1. Remove previous patch files, &#039;&#039;if any&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
If you applied patches previously, you may have log4j 2.15 or 2.16 files. They are likely under the /tmp directory, as per our instructions. &lt;br /&gt;
* Navigate to /tmp &lt;br /&gt;
  cd /tmp&lt;br /&gt;
* Remove the files. For instance, &lt;br /&gt;
   ls apache-log4j*.zip&lt;br /&gt;
   rm apache-log4j*.zip&lt;br /&gt;
   rm -rf /tmp/apache-log4j-2.15.0-bin/&lt;br /&gt;
   rm -rf /tmp/apache-log4j-2.16.0-bin/&lt;br /&gt;
&lt;br /&gt;
If previous patches were not applied, this step is not necessary.&lt;br /&gt;
&lt;br /&gt;
==== 2. Check the status of your system before the fix ====&lt;br /&gt;
&lt;br /&gt;
Check if your system is vulnerable with the following script, which will search your system for vulnerable libraries.&lt;br /&gt;
&lt;br /&gt;
This script is designed to be run as root, or via sudo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$EUID&amp;quot; -ne 0  ]&lt;br /&gt;
then echo &amp;quot;Please run $0 as root&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
while read -r log4j_jar ; do&lt;br /&gt;
    if [[ -z &amp;quot;$log4j_jar&amp;quot; ]] ; then&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-2.17.1&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;Up to date: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-1.&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;1.x - safe: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
        echo &amp;quot;Vulnerable: $log4j_jar&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;Outdated:   $log4j_jar&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done &amp;lt;&amp;lt;&amp;lt; &amp;quot;$(find / -name &#039;log4j*.jar&#039;)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. Retrieve log4j 2.17 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp/&lt;br /&gt;
curl -O https://dlcdn.apache.org/logging/log4j/2.17.1/apache-log4j-2.17.1-bin.zip &lt;br /&gt;
unzip apache-log4j-2.17.1-bin.zip &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4.  Replace other log4j instances on your system with 2.17.1 ====&lt;br /&gt;
&lt;br /&gt;
The following script will replace vulnerable log4j libraries with 2.17.1. It searches your system for the vulnerable libraries, and replaces any that are found.&lt;br /&gt;
&lt;br /&gt;
This script is designed to be run as root or via sudo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
set -e&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$EUID&amp;quot; -ne 0 ]&lt;br /&gt;
  then echo &amp;quot;Please run $0 as root&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
strip_version() {&lt;br /&gt;
    target=&amp;quot;$1&amp;quot;&lt;br /&gt;
    echo &amp;quot;$target&amp;quot; | sed -E &#039;s|-[0-9.]+.jar|-|&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
note_not_replaced() {&lt;br /&gt;
    target=&amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
        echo &amp;gt;&amp;amp;2 &amp;quot;unable to replace vulnerable $log4j_jar&amp;quot;&lt;br /&gt;
        exit_=&amp;quot;1&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;gt;&amp;amp;2 &amp;quot;unable to replace $log4j_jar (note: vuln not detected)&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [[ ! -d /tmp/apache-log4j-2.17.1-bin/ ]] ; then&lt;br /&gt;
    echo &amp;gt;&amp;amp;2 &amp;quot;Please retrieve apache log4j 2.17 and unzip it in /tmp before running this script&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
while read -r log4j_jar ; do&lt;br /&gt;
    if [[ -z &amp;quot;$log4j_jar&amp;quot; ]] ; then&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-2.17.1&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;Up to date: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*-1([0-9.]+).jar ]] ; then&lt;br /&gt;
        echo &amp;quot;1.x - safe: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*\/log4j[^0-9]*(slf4j)?[^0-9]*.jar  ]] ; then&lt;br /&gt;
        if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
            echo &amp;gt;&amp;amp;2 Cannot replace vulnerable versionless &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
            export exit_=1&lt;br /&gt;
            continue&lt;br /&gt;
        fi&lt;br /&gt;
        echo &amp;quot;ignoring versionless:  $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*\/log4j[^-]*[0-9.]+.jar  ]] ; then&lt;br /&gt;
        if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
            echo &amp;gt;&amp;amp;2 Cannot replace vulnerable strange-versioned &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
            export exit_=1&lt;br /&gt;
            continue&lt;br /&gt;
        fi&lt;br /&gt;
        echo &amp;quot;ignoring strange-versioned:  $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    user_group=&amp;quot;$(stat -c &amp;quot;%U:%G&amp;quot; &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    without_version=&amp;quot;$(strip_version &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    patched_jar=&amp;quot;$(basename &amp;quot;$without_version&amp;quot;)2.17.0.jar&amp;quot;&lt;br /&gt;
    base_dir=&amp;quot;$(dirname &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    echo &amp;quot;replace $log4j_jar ($user_group) - with $patched_jar&amp;quot;&lt;br /&gt;
    set -x&lt;br /&gt;
    cp /tmp/apache-log4j-2.17.1-bin/&amp;quot;$patched_jar&amp;quot; &amp;quot;$base_dir&amp;quot; || {&lt;br /&gt;
        set +x&lt;br /&gt;
        note_not_replaced &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    }&lt;br /&gt;
    chown &amp;quot;$user_group&amp;quot; &amp;quot;$base_dir/$patched_jar&amp;quot;&lt;br /&gt;
    mv &amp;quot;$log4j_jar&amp;quot; &amp;quot;$log4j_jar.orig.vulnerable&amp;quot;&lt;br /&gt;
    set +x&lt;br /&gt;
done &amp;lt;&amp;lt;&amp;lt; &amp;quot;$(find / -name &#039;log4j*.jar&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;${exit_}&amp;quot; == &amp;quot;1&amp;quot; ]] ; then&lt;br /&gt;
    echo &amp;quot;Failed!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 5. Check the status after the fix ====&lt;br /&gt;
You may wish to run the check script from #1 a second time to validate the fix. &lt;br /&gt;
Please note that the log4j 1.x are being worked on for our upcoming release (codename &#039;Ireland&#039;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 6.  Please reboot your system  ====&lt;br /&gt;
Reboot your system after replacing your libraries. This will ensure that the patch becomes fully effective.&lt;br /&gt;
&lt;br /&gt;
== FATAL: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter ==&lt;br /&gt;
&lt;br /&gt;
In versions &amp;lt;b&amp;gt;prior to Ireland&amp;lt;/b&amp;gt;, if the console output of a Localyzer project shows the following type of error:&lt;br /&gt;
&lt;br /&gt;
  FATAL: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter&lt;br /&gt;
  java.lang.NoClassDefFoundError: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter&lt;br /&gt;
     at com.lingoport.plugins.jenkinsgyzrlrmplugin.BuildLRM.saveProjectSettings(BuildLRM.java:860)&lt;br /&gt;
&lt;br /&gt;
or if the error is like:&lt;br /&gt;
&lt;br /&gt;
  FATAL: org/apache/log4j/Logger&lt;br /&gt;
  java.lang.ClassNotFoundException: org.apache.log4j.Logger&lt;br /&gt;
     at jenkins.util.AntClassLoader.findClassInComponents(AntClassLoader.java:1393)&lt;br /&gt;
     at jenkins.util.AntClassLoader.findClass(AntClassLoader.java:1348)&lt;br /&gt;
     at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1094)&lt;br /&gt;
     at java.lang.ClassLoader.loadClass(ClassLoader.java:351)&lt;br /&gt;
  Caused: java.lang.NoClassDefFoundError: org/apache/log4j/Logger&lt;br /&gt;
     at com.lingoport.common.velocity.LingoportVelocityWriter.&amp;lt;clinit&amp;gt;(LingoportVelocityWriter.java:45)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
it is likely that a Log4j is actually missing from the classpath. In that case, &lt;br /&gt;
&lt;br /&gt;
   copy the  lingoport/LRM-server-xx/lib/log4j-x.y.z.jar to /var/lib/jenkins/plugins/jenkins-gyzr-lrm-plugin/WEB-INF/lib/.&lt;br /&gt;
&lt;br /&gt;
This should only happen with versions prior to Ireland.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Vulnerability_Remediation&amp;diff=95771</id>
		<title>Vulnerability Remediation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Vulnerability_Remediation&amp;diff=95771"/>
		<updated>2021-12-30T21:16:02Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* 3. Retrieve log4j 2.17 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lingoport&#039;s Response to Major Software Vulnerabilities =&lt;br /&gt;
&lt;br /&gt;
== Apache Log4j Security Vulnerabilities ==&lt;br /&gt;
&lt;br /&gt;
A major security vulnerability allowing for remote code execution on affected systems.&lt;br /&gt;
&lt;br /&gt;
See: https://logging.apache.org/log4j/2.x/security.html&lt;br /&gt;
&lt;br /&gt;
=== Lingoport Response ===&lt;br /&gt;
&lt;br /&gt;
Pending further action, Lingoport has shut down all non-critical systems.&lt;br /&gt;
&lt;br /&gt;
Critical systems have been patched to remove all copies of log4j 2.x with log4j 2.17 followed by a hard reboot.&lt;br /&gt;
&lt;br /&gt;
=== For Lingoport Clients ===&lt;br /&gt;
&lt;br /&gt;
The below scripts may be used in conjunction to replace all log4j 2.x with log4j 2.17. &lt;br /&gt;
&lt;br /&gt;
==== 1. Remove previous patch files, &#039;&#039;if any&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
If you applied patches previously, you may have log4j 2.15 or 2.16 files. They are likely under the /tmp directory, as per our instructions. &lt;br /&gt;
* Navigate to /tmp &lt;br /&gt;
  cd /tmp&lt;br /&gt;
* Remove the files. For instance, &lt;br /&gt;
   ls apache-log4j*.zip&lt;br /&gt;
   rm apache-log4j*.zip&lt;br /&gt;
   rm -rf /tmp/apache-log4j-2.15.0-bin/&lt;br /&gt;
   rm -rf /tmp/apache-log4j-2.16.0-bin/&lt;br /&gt;
&lt;br /&gt;
If previous patches were not applied, this step is not necessary.&lt;br /&gt;
&lt;br /&gt;
==== 2. Check the status of your system before the fix ====&lt;br /&gt;
&lt;br /&gt;
Check if your system is vulnerable with the following script, which will search your system for vulnerable libraries.&lt;br /&gt;
&lt;br /&gt;
This script is designed to be run as root, or via sudo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$EUID&amp;quot; -ne 0  ]&lt;br /&gt;
then echo &amp;quot;Please run $0 as root&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
while read -r log4j_jar ; do&lt;br /&gt;
    if [[ -z &amp;quot;$log4j_jar&amp;quot; ]] ; then&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-2.17.1&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;Up to date: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-1.&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;1.x - safe: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
        echo &amp;quot;Vulnerable: $log4j_jar&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;Outdated:   $log4j_jar&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done &amp;lt;&amp;lt;&amp;lt; &amp;quot;$(find / -name &#039;log4j*.jar&#039;)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. Retrieve log4j 2.17 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp/&lt;br /&gt;
curl -O https://dlcdn.apache.org/logging/log4j/2.17.1/apache-log4j-2.17.1-bin.zip &lt;br /&gt;
unzip apache-log4j-2.17.1-bin.zip &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4.  Replace other log4j instances on your system with 2.17 ====&lt;br /&gt;
&lt;br /&gt;
The following script will replace vulnerable log4j libraries with 2.17. It searches your system for the vulnerable libraries, and replaces any that are found.&lt;br /&gt;
&lt;br /&gt;
This script is designed to be run as root or via sudo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
set -e&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$EUID&amp;quot; -ne 0 ]&lt;br /&gt;
  then echo &amp;quot;Please run $0 as root&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
strip_version() {&lt;br /&gt;
    target=&amp;quot;$1&amp;quot;&lt;br /&gt;
    echo &amp;quot;$target&amp;quot; | sed -E &#039;s|-[0-9.]+.jar|-|&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
note_not_replaced() {&lt;br /&gt;
    target=&amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
        echo &amp;gt;&amp;amp;2 &amp;quot;unable to replace vulnerable $log4j_jar&amp;quot;&lt;br /&gt;
        exit_=&amp;quot;1&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;gt;&amp;amp;2 &amp;quot;unable to replace $log4j_jar (note: vuln not detected)&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [[ ! -d /tmp/apache-log4j-2.17.0-bin/ ]] ; then&lt;br /&gt;
    echo &amp;gt;&amp;amp;2 &amp;quot;Please retrieve apache log4j 2.17 and unzip it in /tmp before running this script&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
while read -r log4j_jar ; do&lt;br /&gt;
    if [[ -z &amp;quot;$log4j_jar&amp;quot; ]] ; then&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-2.17&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;Up to date: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*-1([0-9.]+).jar ]] ; then&lt;br /&gt;
        echo &amp;quot;1.x - safe: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*\/log4j[^0-9]*(slf4j)?[^0-9]*.jar  ]] ; then&lt;br /&gt;
        if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
            echo &amp;gt;&amp;amp;2 Cannot replace vulnerable versionless &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
            export exit_=1&lt;br /&gt;
            continue&lt;br /&gt;
        fi&lt;br /&gt;
        echo &amp;quot;ignoring versionless:  $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*\/log4j[^-]*[0-9.]+.jar  ]] ; then&lt;br /&gt;
        if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
            echo &amp;gt;&amp;amp;2 Cannot replace vulnerable strange-versioned &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
            export exit_=1&lt;br /&gt;
            continue&lt;br /&gt;
        fi&lt;br /&gt;
        echo &amp;quot;ignoring strange-versioned:  $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    user_group=&amp;quot;$(stat -c &amp;quot;%U:%G&amp;quot; &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    without_version=&amp;quot;$(strip_version &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    patched_jar=&amp;quot;$(basename &amp;quot;$without_version&amp;quot;)2.17.0.jar&amp;quot;&lt;br /&gt;
    base_dir=&amp;quot;$(dirname &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    echo &amp;quot;replace $log4j_jar ($user_group) - with $patched_jar&amp;quot;&lt;br /&gt;
    set -x&lt;br /&gt;
    cp /tmp/apache-log4j-2.17.0-bin/&amp;quot;$patched_jar&amp;quot; &amp;quot;$base_dir&amp;quot; || {&lt;br /&gt;
        set +x&lt;br /&gt;
        note_not_replaced &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    }&lt;br /&gt;
    chown &amp;quot;$user_group&amp;quot; &amp;quot;$base_dir/$patched_jar&amp;quot;&lt;br /&gt;
    mv &amp;quot;$log4j_jar&amp;quot; &amp;quot;$log4j_jar.orig.vulnerable&amp;quot;&lt;br /&gt;
    set +x&lt;br /&gt;
done &amp;lt;&amp;lt;&amp;lt; &amp;quot;$(find / -name &#039;log4j*.jar&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;${exit_}&amp;quot; == &amp;quot;1&amp;quot; ]] ; then&lt;br /&gt;
    echo &amp;quot;Failed!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 5. Check the status after the fix ====&lt;br /&gt;
You may wish to run the check script from #1 a second time to validate the fix. &lt;br /&gt;
Please note that the log4j 1.x are being worked on for our upcoming release (codename &#039;Ireland&#039;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 6.  Please reboot your system  ====&lt;br /&gt;
Reboot your system after replacing your libraries. This will ensure that the patch becomes fully effective.&lt;br /&gt;
&lt;br /&gt;
== FATAL: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter ==&lt;br /&gt;
&lt;br /&gt;
In versions &amp;lt;b&amp;gt;prior to Ireland&amp;lt;/b&amp;gt;, if the console output of a Localyzer project shows the following type of error:&lt;br /&gt;
&lt;br /&gt;
  FATAL: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter&lt;br /&gt;
  java.lang.NoClassDefFoundError: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter&lt;br /&gt;
     at com.lingoport.plugins.jenkinsgyzrlrmplugin.BuildLRM.saveProjectSettings(BuildLRM.java:860)&lt;br /&gt;
&lt;br /&gt;
or if the error is like:&lt;br /&gt;
&lt;br /&gt;
  FATAL: org/apache/log4j/Logger&lt;br /&gt;
  java.lang.ClassNotFoundException: org.apache.log4j.Logger&lt;br /&gt;
     at jenkins.util.AntClassLoader.findClassInComponents(AntClassLoader.java:1393)&lt;br /&gt;
     at jenkins.util.AntClassLoader.findClass(AntClassLoader.java:1348)&lt;br /&gt;
     at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1094)&lt;br /&gt;
     at java.lang.ClassLoader.loadClass(ClassLoader.java:351)&lt;br /&gt;
  Caused: java.lang.NoClassDefFoundError: org/apache/log4j/Logger&lt;br /&gt;
     at com.lingoport.common.velocity.LingoportVelocityWriter.&amp;lt;clinit&amp;gt;(LingoportVelocityWriter.java:45)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
it is likely that a Log4j is actually missing from the classpath. In that case, &lt;br /&gt;
&lt;br /&gt;
   copy the  lingoport/LRM-server-xx/lib/log4j-x.y.z.jar to /var/lib/jenkins/plugins/jenkins-gyzr-lrm-plugin/WEB-INF/lib/.&lt;br /&gt;
&lt;br /&gt;
This should only happen with versions prior to Ireland.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Vulnerability_Remediation&amp;diff=95770</id>
		<title>Vulnerability Remediation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Vulnerability_Remediation&amp;diff=95770"/>
		<updated>2021-12-30T21:15:49Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* 2. Check the status of your system before the fix */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lingoport&#039;s Response to Major Software Vulnerabilities =&lt;br /&gt;
&lt;br /&gt;
== Apache Log4j Security Vulnerabilities ==&lt;br /&gt;
&lt;br /&gt;
A major security vulnerability allowing for remote code execution on affected systems.&lt;br /&gt;
&lt;br /&gt;
See: https://logging.apache.org/log4j/2.x/security.html&lt;br /&gt;
&lt;br /&gt;
=== Lingoport Response ===&lt;br /&gt;
&lt;br /&gt;
Pending further action, Lingoport has shut down all non-critical systems.&lt;br /&gt;
&lt;br /&gt;
Critical systems have been patched to remove all copies of log4j 2.x with log4j 2.17 followed by a hard reboot.&lt;br /&gt;
&lt;br /&gt;
=== For Lingoport Clients ===&lt;br /&gt;
&lt;br /&gt;
The below scripts may be used in conjunction to replace all log4j 2.x with log4j 2.17. &lt;br /&gt;
&lt;br /&gt;
==== 1. Remove previous patch files, &#039;&#039;if any&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
If you applied patches previously, you may have log4j 2.15 or 2.16 files. They are likely under the /tmp directory, as per our instructions. &lt;br /&gt;
* Navigate to /tmp &lt;br /&gt;
  cd /tmp&lt;br /&gt;
* Remove the files. For instance, &lt;br /&gt;
   ls apache-log4j*.zip&lt;br /&gt;
   rm apache-log4j*.zip&lt;br /&gt;
   rm -rf /tmp/apache-log4j-2.15.0-bin/&lt;br /&gt;
   rm -rf /tmp/apache-log4j-2.16.0-bin/&lt;br /&gt;
&lt;br /&gt;
If previous patches were not applied, this step is not necessary.&lt;br /&gt;
&lt;br /&gt;
==== 2. Check the status of your system before the fix ====&lt;br /&gt;
&lt;br /&gt;
Check if your system is vulnerable with the following script, which will search your system for vulnerable libraries.&lt;br /&gt;
&lt;br /&gt;
This script is designed to be run as root, or via sudo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$EUID&amp;quot; -ne 0  ]&lt;br /&gt;
then echo &amp;quot;Please run $0 as root&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
while read -r log4j_jar ; do&lt;br /&gt;
    if [[ -z &amp;quot;$log4j_jar&amp;quot; ]] ; then&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-2.17.1&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;Up to date: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-1.&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;1.x - safe: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
        echo &amp;quot;Vulnerable: $log4j_jar&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;Outdated:   $log4j_jar&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done &amp;lt;&amp;lt;&amp;lt; &amp;quot;$(find / -name &#039;log4j*.jar&#039;)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. Retrieve log4j 2.17 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp/&lt;br /&gt;
curl -O https://dlcdn.apache.org/logging/log4j/2.17.0/apache-log4j-2.17.0-bin.zip &lt;br /&gt;
unzip apache-log4j-2.17.0-bin.zip &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4.  Replace other log4j instances on your system with 2.17 ====&lt;br /&gt;
&lt;br /&gt;
The following script will replace vulnerable log4j libraries with 2.17. It searches your system for the vulnerable libraries, and replaces any that are found.&lt;br /&gt;
&lt;br /&gt;
This script is designed to be run as root or via sudo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
set -e&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$EUID&amp;quot; -ne 0 ]&lt;br /&gt;
  then echo &amp;quot;Please run $0 as root&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
strip_version() {&lt;br /&gt;
    target=&amp;quot;$1&amp;quot;&lt;br /&gt;
    echo &amp;quot;$target&amp;quot; | sed -E &#039;s|-[0-9.]+.jar|-|&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
note_not_replaced() {&lt;br /&gt;
    target=&amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
        echo &amp;gt;&amp;amp;2 &amp;quot;unable to replace vulnerable $log4j_jar&amp;quot;&lt;br /&gt;
        exit_=&amp;quot;1&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;gt;&amp;amp;2 &amp;quot;unable to replace $log4j_jar (note: vuln not detected)&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [[ ! -d /tmp/apache-log4j-2.17.0-bin/ ]] ; then&lt;br /&gt;
    echo &amp;gt;&amp;amp;2 &amp;quot;Please retrieve apache log4j 2.17 and unzip it in /tmp before running this script&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
while read -r log4j_jar ; do&lt;br /&gt;
    if [[ -z &amp;quot;$log4j_jar&amp;quot; ]] ; then&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-2.17&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;Up to date: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*-1([0-9.]+).jar ]] ; then&lt;br /&gt;
        echo &amp;quot;1.x - safe: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*\/log4j[^0-9]*(slf4j)?[^0-9]*.jar  ]] ; then&lt;br /&gt;
        if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
            echo &amp;gt;&amp;amp;2 Cannot replace vulnerable versionless &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
            export exit_=1&lt;br /&gt;
            continue&lt;br /&gt;
        fi&lt;br /&gt;
        echo &amp;quot;ignoring versionless:  $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*\/log4j[^-]*[0-9.]+.jar  ]] ; then&lt;br /&gt;
        if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
            echo &amp;gt;&amp;amp;2 Cannot replace vulnerable strange-versioned &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
            export exit_=1&lt;br /&gt;
            continue&lt;br /&gt;
        fi&lt;br /&gt;
        echo &amp;quot;ignoring strange-versioned:  $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    user_group=&amp;quot;$(stat -c &amp;quot;%U:%G&amp;quot; &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    without_version=&amp;quot;$(strip_version &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    patched_jar=&amp;quot;$(basename &amp;quot;$without_version&amp;quot;)2.17.0.jar&amp;quot;&lt;br /&gt;
    base_dir=&amp;quot;$(dirname &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    echo &amp;quot;replace $log4j_jar ($user_group) - with $patched_jar&amp;quot;&lt;br /&gt;
    set -x&lt;br /&gt;
    cp /tmp/apache-log4j-2.17.0-bin/&amp;quot;$patched_jar&amp;quot; &amp;quot;$base_dir&amp;quot; || {&lt;br /&gt;
        set +x&lt;br /&gt;
        note_not_replaced &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    }&lt;br /&gt;
    chown &amp;quot;$user_group&amp;quot; &amp;quot;$base_dir/$patched_jar&amp;quot;&lt;br /&gt;
    mv &amp;quot;$log4j_jar&amp;quot; &amp;quot;$log4j_jar.orig.vulnerable&amp;quot;&lt;br /&gt;
    set +x&lt;br /&gt;
done &amp;lt;&amp;lt;&amp;lt; &amp;quot;$(find / -name &#039;log4j*.jar&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;${exit_}&amp;quot; == &amp;quot;1&amp;quot; ]] ; then&lt;br /&gt;
    echo &amp;quot;Failed!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 5. Check the status after the fix ====&lt;br /&gt;
You may wish to run the check script from #1 a second time to validate the fix. &lt;br /&gt;
Please note that the log4j 1.x are being worked on for our upcoming release (codename &#039;Ireland&#039;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 6.  Please reboot your system  ====&lt;br /&gt;
Reboot your system after replacing your libraries. This will ensure that the patch becomes fully effective.&lt;br /&gt;
&lt;br /&gt;
== FATAL: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter ==&lt;br /&gt;
&lt;br /&gt;
In versions &amp;lt;b&amp;gt;prior to Ireland&amp;lt;/b&amp;gt;, if the console output of a Localyzer project shows the following type of error:&lt;br /&gt;
&lt;br /&gt;
  FATAL: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter&lt;br /&gt;
  java.lang.NoClassDefFoundError: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter&lt;br /&gt;
     at com.lingoport.plugins.jenkinsgyzrlrmplugin.BuildLRM.saveProjectSettings(BuildLRM.java:860)&lt;br /&gt;
&lt;br /&gt;
or if the error is like:&lt;br /&gt;
&lt;br /&gt;
  FATAL: org/apache/log4j/Logger&lt;br /&gt;
  java.lang.ClassNotFoundException: org.apache.log4j.Logger&lt;br /&gt;
     at jenkins.util.AntClassLoader.findClassInComponents(AntClassLoader.java:1393)&lt;br /&gt;
     at jenkins.util.AntClassLoader.findClass(AntClassLoader.java:1348)&lt;br /&gt;
     at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1094)&lt;br /&gt;
     at java.lang.ClassLoader.loadClass(ClassLoader.java:351)&lt;br /&gt;
  Caused: java.lang.NoClassDefFoundError: org/apache/log4j/Logger&lt;br /&gt;
     at com.lingoport.common.velocity.LingoportVelocityWriter.&amp;lt;clinit&amp;gt;(LingoportVelocityWriter.java:45)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
it is likely that a Log4j is actually missing from the classpath. In that case, &lt;br /&gt;
&lt;br /&gt;
   copy the  lingoport/LRM-server-xx/lib/log4j-x.y.z.jar to /var/lib/jenkins/plugins/jenkins-gyzr-lrm-plugin/WEB-INF/lib/.&lt;br /&gt;
&lt;br /&gt;
This should only happen with versions prior to Ireland.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Vulnerability_Remediation&amp;diff=95752</id>
		<title>Vulnerability Remediation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Vulnerability_Remediation&amp;diff=95752"/>
		<updated>2021-12-20T20:25:31Z</updated>

		<summary type="html">&lt;p&gt;Masnes: /* Apache Log4j Security Vulnerabilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lingoport&#039;s Response to Major Software Vulnerabilities =&lt;br /&gt;
&lt;br /&gt;
== Apache Log4j Security Vulnerabilities ==&lt;br /&gt;
&lt;br /&gt;
A major security vulnerability allowing for remote code execution on affected systems.&lt;br /&gt;
&lt;br /&gt;
See: https://logging.apache.org/log4j/2.x/security.html&lt;br /&gt;
&lt;br /&gt;
=== Lingoport Response ===&lt;br /&gt;
&lt;br /&gt;
Pending further action, Lingoport has shut down all non-critical systems.&lt;br /&gt;
&lt;br /&gt;
Critical systems have been patched to remove all copies of log4j 2.x with log4j 2.17 followed by a hard reboot.&lt;br /&gt;
&lt;br /&gt;
=== For Lingoport Clients ===&lt;br /&gt;
&lt;br /&gt;
The below scripts may be used in conjunction to replace all log4j 2.x with log4j 2.17. &lt;br /&gt;
&lt;br /&gt;
0. Check if your system is vulnerable with the following script, which will search your system for vulnerable libraries.&lt;br /&gt;
&lt;br /&gt;
This script is designed to be run as root, or via sudo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$EUID&amp;quot; -ne 0  ]&lt;br /&gt;
then echo &amp;quot;Please run $0 as root&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
while read -r log4j_jar ; do&lt;br /&gt;
    if [[ -z &amp;quot;$log4j_jar&amp;quot; ]] ; then&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-2.17&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;Up to date: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-1.&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;1.x - safe: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
        echo &amp;quot;Vulnerable: $log4j_jar&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;Outdated:   $log4j_jar&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done &amp;lt;&amp;lt;&amp;lt; &amp;quot;$(find / -name &#039;log4j*.jar&#039;)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Retrieve log4j 2.17:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp/&lt;br /&gt;
curl -O https://dlcdn.apache.org/logging/log4j/2.17.0/apache-log4j-2.17.0-bin.zip &lt;br /&gt;
unzip apache-log4j-2.17.0-bin.zip &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Replace other log4j instances on your system with 2.17&lt;br /&gt;
&lt;br /&gt;
The following script will replace vulnerable log4j libraries with 2.17. It searches your system for the vulnerable libraries, and replaces any that are found.&lt;br /&gt;
&lt;br /&gt;
This script is designed to be run as root or via sudo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
set -e&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$EUID&amp;quot; -ne 0 ]&lt;br /&gt;
  then echo &amp;quot;Please run $0 as root&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
strip_version() {&lt;br /&gt;
    target=&amp;quot;$1&amp;quot;&lt;br /&gt;
    echo &amp;quot;$target&amp;quot; | sed -E &#039;s|-[0-9.]+.jar|-|&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
note_not_replaced() {&lt;br /&gt;
    target=&amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
        echo &amp;gt;&amp;amp;2 &amp;quot;unable to replace vulnerable $log4j_jar&amp;quot;&lt;br /&gt;
        exit_=&amp;quot;1&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;gt;&amp;amp;2 &amp;quot;unable to replace $log4j_jar (note: vuln not detected)&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [[ ! -d /tmp/apache-log4j-2.17.0-bin/ ]] ; then&lt;br /&gt;
    echo &amp;gt;&amp;amp;2 &amp;quot;Please retrieve apache log4j 2.17 and unzip it in /tmp before running this script&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
while read -r log4j_jar ; do&lt;br /&gt;
    if [[ -z &amp;quot;$log4j_jar&amp;quot; ]] ; then&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-2.17&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;Up to date: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*-1([0-9.]+).jar ]] ; then&lt;br /&gt;
        echo &amp;quot;1.x - safe: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*\/log4j[^0-9]*(slf4j)?[^0-9]*.jar  ]] ; then&lt;br /&gt;
        if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
            echo &amp;gt;&amp;amp;2 Cannot replace vulnerable versionless &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
            export exit_=1&lt;br /&gt;
            continue&lt;br /&gt;
        fi&lt;br /&gt;
        echo &amp;quot;ignoring versionless:  $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*\/log4j[^-]*[0-9.]+.jar  ]] ; then&lt;br /&gt;
        if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
            echo &amp;gt;&amp;amp;2 Cannot replace vulnerable strange-versioned &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
            export exit_=1&lt;br /&gt;
            continue&lt;br /&gt;
        fi&lt;br /&gt;
        echo &amp;quot;ignoring strange-versioned:  $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    user_group=&amp;quot;$(stat -c &amp;quot;%U:%G&amp;quot; &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    without_version=&amp;quot;$(strip_version &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    patched_jar=&amp;quot;$(basename &amp;quot;$without_version&amp;quot;)2.17.0.jar&amp;quot;&lt;br /&gt;
    base_dir=&amp;quot;$(dirname &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    echo &amp;quot;replace $log4j_jar ($user_group) - with $patched_jar&amp;quot;&lt;br /&gt;
    set -x&lt;br /&gt;
    cp /tmp/apache-log4j-2.17.0-bin/&amp;quot;$patched_jar&amp;quot; &amp;quot;$base_dir&amp;quot; || {&lt;br /&gt;
        set +x&lt;br /&gt;
        note_not_replaced &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    }&lt;br /&gt;
    chown &amp;quot;$user_group&amp;quot; &amp;quot;$base_dir/$patched_jar&amp;quot;&lt;br /&gt;
    mv &amp;quot;$log4j_jar&amp;quot; &amp;quot;$log4j_jar.orig.vulnerable&amp;quot;&lt;br /&gt;
    set +x&lt;br /&gt;
done &amp;lt;&amp;lt;&amp;lt; &amp;quot;$(find / -name &#039;log4j*.jar&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;${exit_}&amp;quot; == &amp;quot;1&amp;quot; ]] ; then&lt;br /&gt;
    echo &amp;quot;Failed!&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. You may wish to run the check script from #0 a second time to validate the fix.&lt;br /&gt;
&lt;br /&gt;
4. Please reboot your system after replacing your libraries. This will ensure that the patch becomes fully effective.&lt;br /&gt;
&lt;br /&gt;
== FATAL: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter ==&lt;br /&gt;
&lt;br /&gt;
In versions &amp;lt;b&amp;gt;prior to Ireland&amp;lt;/b&amp;gt;, if the console output of a Localyzer project shows the following type of error:&lt;br /&gt;
&lt;br /&gt;
  FATAL: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter&lt;br /&gt;
  java.lang.NoClassDefFoundError: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter&lt;br /&gt;
     at com.lingoport.plugins.jenkinsgyzrlrmplugin.BuildLRM.saveProjectSettings(BuildLRM.java:860)&lt;br /&gt;
&lt;br /&gt;
or if the error is like:&lt;br /&gt;
&lt;br /&gt;
  FATAL: org/apache/log4j/Logger&lt;br /&gt;
  java.lang.ClassNotFoundException: org.apache.log4j.Logger&lt;br /&gt;
     at jenkins.util.AntClassLoader.findClassInComponents(AntClassLoader.java:1393)&lt;br /&gt;
     at jenkins.util.AntClassLoader.findClass(AntClassLoader.java:1348)&lt;br /&gt;
     at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1094)&lt;br /&gt;
     at java.lang.ClassLoader.loadClass(ClassLoader.java:351)&lt;br /&gt;
  Caused: java.lang.NoClassDefFoundError: org/apache/log4j/Logger&lt;br /&gt;
     at com.lingoport.common.velocity.LingoportVelocityWriter.&amp;lt;clinit&amp;gt;(LingoportVelocityWriter.java:45)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
it is likely that a Log4j is actually missing from the classpath. In that case, &lt;br /&gt;
&lt;br /&gt;
   copy the  lingoport/LRM-server-xx/lib/log4j-x.y.z.jar to /var/lib/jenkins/plugins/jenkins-gyzr-lrm-plugin/WEB-INF/lib/.&lt;br /&gt;
&lt;br /&gt;
This should only happen with versions prior to Ireland.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
	<entry>
		<id>https://wiki.lingoport.com/index.php?title=Vulnerability_Remediation&amp;diff=95751</id>
		<title>Vulnerability Remediation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lingoport.com/index.php?title=Vulnerability_Remediation&amp;diff=95751"/>
		<updated>2021-12-20T17:54:09Z</updated>

		<summary type="html">&lt;p&gt;Masnes: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lingoport&#039;s Response to Major Software Vulnerabilities =&lt;br /&gt;
&lt;br /&gt;
== Apache Log4j Security Vulnerabilities ==&lt;br /&gt;
&lt;br /&gt;
A major security vulnerability allowing for remote code execution on affected systems.&lt;br /&gt;
&lt;br /&gt;
See: https://logging.apache.org/log4j/2.x/security.html&lt;br /&gt;
&lt;br /&gt;
=== Lingoport Response ===&lt;br /&gt;
&lt;br /&gt;
Pending further action, Lingoport has shut down all non-critical systems.&lt;br /&gt;
&lt;br /&gt;
Critical systems have been patched to remove all copies of log4j 2.x with log4j 2.17 followed by a hard reboot.&lt;br /&gt;
&lt;br /&gt;
=== For Lingoport Clients ===&lt;br /&gt;
&lt;br /&gt;
The below scripts may be used in conjunction to replace all log4j 2.x with log4j 2.17. &lt;br /&gt;
&lt;br /&gt;
0. Check if your system is vulnerable with the following script, which will search your system for vulnerable libraries.&lt;br /&gt;
&lt;br /&gt;
This script is designed to be run as root, or via sudo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$EUID&amp;quot; -ne 0  ]&lt;br /&gt;
then echo &amp;quot;Please run $0 as root&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
while read -r log4j_jar ; do&lt;br /&gt;
    if [[ -z &amp;quot;$log4j_jar&amp;quot; ]] ; then&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-2.17&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;Up to date: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-1.&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;1.x - safe: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
        echo &amp;quot;Vulnerable: $log4j_jar&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;Outdated:   $log4j_jar&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done &amp;lt;&amp;lt;&amp;lt; &amp;quot;$(find / -name &#039;log4j*.jar&#039;)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Retrieve log4j 2.17:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp/&lt;br /&gt;
curl -O https://dlcdn.apache.org/logging/log4j/2.17.0/apache-log4j-2.17.0-bin.zip &lt;br /&gt;
unzip apache-log4j-2.17.0-bin.zip &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Replace other log4j instances on your system with 2.17&lt;br /&gt;
&lt;br /&gt;
The following script will replace vulnerable log4j libraries with 2.17. It searches your system for the vulnerable libraries, and replaces any that are found.&lt;br /&gt;
&lt;br /&gt;
This script is designed to be run as root or via sudo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
set -e&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$EUID&amp;quot; -ne 0 ]&lt;br /&gt;
  then echo &amp;quot;Please run $0 as root&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
strip_version() {&lt;br /&gt;
    target=&amp;quot;$1&amp;quot;&lt;br /&gt;
    echo &amp;quot;$target&amp;quot; | sed -E &#039;s|-[0-9.]+.jar|-|&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
note_not_replaced() {&lt;br /&gt;
    target=&amp;quot;$1&amp;quot;&lt;br /&gt;
    if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
        echo &amp;gt;&amp;amp;2 &amp;quot;unable to replace vulnerable $log4j_jar&amp;quot;&lt;br /&gt;
        exit_=&amp;quot;1&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;gt;&amp;amp;2 &amp;quot;unable to replace $log4j_jar (note: vuln not detected)&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [[ ! -d /tmp/apache-log4j-2.17.0-bin/ ]] ; then&lt;br /&gt;
    echo &amp;gt;&amp;amp;2 &amp;quot;Please retrieve apache log4j 2.17 and unzip it in /tmp before running this script&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
while read -r log4j_jar ; do&lt;br /&gt;
    if [[ -z &amp;quot;$log4j_jar&amp;quot; ]] ; then&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; == *&amp;quot;-2.17&amp;quot;* ]] ; then&lt;br /&gt;
        echo &amp;quot;Up to date: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*-1([0-9.]+).jar ]] ; then&lt;br /&gt;
        echo &amp;quot;1.x - safe: $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*\/log4j[^0-9]*(slf4j)?[^0-9]*.jar  ]] ; then&lt;br /&gt;
        if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
            echo &amp;gt;&amp;amp;2 Cannot replace vulnerable versionless &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
            export exit_=1&lt;br /&gt;
            continue&lt;br /&gt;
        fi&lt;br /&gt;
        echo &amp;quot;ignoring versionless:  $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    if [[ &amp;quot;$log4j_jar&amp;quot; =~ .*\/log4j[^-]*[0-9.]+.jar  ]] ; then&lt;br /&gt;
        if unzip -l &amp;quot;$log4j_jar&amp;quot; | grep -q JndiLookup.class ; then&lt;br /&gt;
            echo &amp;gt;&amp;amp;2 Cannot replace vulnerable strange-versioned &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
            export exit_=1&lt;br /&gt;
            continue&lt;br /&gt;
        fi&lt;br /&gt;
        echo &amp;quot;ignoring strange-versioned:  $log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    fi&lt;br /&gt;
    user_group=&amp;quot;$(stat -c &amp;quot;%U:%G&amp;quot; &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    without_version=&amp;quot;$(strip_version &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    patched_jar=&amp;quot;$(basename &amp;quot;$without_version&amp;quot;)2.17.0.jar&amp;quot;&lt;br /&gt;
    base_dir=&amp;quot;$(dirname &amp;quot;$log4j_jar&amp;quot;)&amp;quot;&lt;br /&gt;
    echo &amp;quot;replace $log4j_jar ($user_group) - with $patched_jar&amp;quot;&lt;br /&gt;
    set -x&lt;br /&gt;
    cp /tmp/apache-log4j-2.17.0-bin/&amp;quot;$patched_jar&amp;quot; &amp;quot;$base_dir&amp;quot; || {&lt;br /&gt;
        set +x&lt;br /&gt;
        note_not_replaced &amp;quot;$log4j_jar&amp;quot;&lt;br /&gt;
        continue&lt;br /&gt;
    }&lt;br /&gt;
    chown &amp;quot;$user_group&amp;quot; &amp;quot;$base_dir/$patched_jar&amp;quot;&lt;br /&gt;
    mv &amp;quot;$log4j_jar&amp;quot; &amp;quot;$log4j_jar.orig.vulnerable&amp;quot;&lt;br /&gt;
    set +x&lt;br /&gt;
done &amp;lt;&amp;lt;&amp;lt; &amp;quot;$(find / -name &#039;log4j*.jar&#039;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;${exit_}&amp;quot; == &amp;quot;1&amp;quot; ]] ; then&lt;br /&gt;
    echo &amp;quot;Failed!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. You may wish to run the check script from #0 a second time to validate the fix.&lt;br /&gt;
&lt;br /&gt;
4. Please reboot your system after replacing your libraries. This will ensure that the patch becomes fully effective.&lt;br /&gt;
&lt;br /&gt;
== FATAL: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter ==&lt;br /&gt;
&lt;br /&gt;
In versions &amp;lt;b&amp;gt;prior to Ireland&amp;lt;/b&amp;gt;, if the console output of a Localyzer project shows the following type of error:&lt;br /&gt;
&lt;br /&gt;
  FATAL: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter&lt;br /&gt;
  java.lang.NoClassDefFoundError: Could not initialize class com.lingoport.common.velocity.LingoportVelocityWriter&lt;br /&gt;
     at com.lingoport.plugins.jenkinsgyzrlrmplugin.BuildLRM.saveProjectSettings(BuildLRM.java:860)&lt;br /&gt;
&lt;br /&gt;
or if the error is like:&lt;br /&gt;
&lt;br /&gt;
  FATAL: org/apache/log4j/Logger&lt;br /&gt;
  java.lang.ClassNotFoundException: org.apache.log4j.Logger&lt;br /&gt;
     at jenkins.util.AntClassLoader.findClassInComponents(AntClassLoader.java:1393)&lt;br /&gt;
     at jenkins.util.AntClassLoader.findClass(AntClassLoader.java:1348)&lt;br /&gt;
     at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1094)&lt;br /&gt;
     at java.lang.ClassLoader.loadClass(ClassLoader.java:351)&lt;br /&gt;
  Caused: java.lang.NoClassDefFoundError: org/apache/log4j/Logger&lt;br /&gt;
     at com.lingoport.common.velocity.LingoportVelocityWriter.&amp;lt;clinit&amp;gt;(LingoportVelocityWriter.java:45)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
it is likely that a Log4j is actually missing from the classpath. In that case, &lt;br /&gt;
&lt;br /&gt;
   copy the  lingoport/LRM-server-xx/lib/log4j-x.y.z.jar to /var/lib/jenkins/plugins/jenkins-gyzr-lrm-plugin/WEB-INF/lib/.&lt;br /&gt;
&lt;br /&gt;
This should only happen with versions prior to Ireland.&lt;/div&gt;</summary>
		<author><name>Masnes</name></author>
	</entry>
</feed>