{"id":474814,"date":"2025-09-12T21:02:03","date_gmt":"2025-09-12T21:02:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=474814"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=474814","title":{"rendered":"<span>\u0420\u0430\u0437\u043b\u043e\u0447\u043a\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 Mattermost Team Edition<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440: \u0414\u0430\u043d\u043d\u044b\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0446\u0435\u043b\u044f\u0445. \u0410\u0432\u0442\u043e\u0440 \u043d\u0438 \u0432 \u043a\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u043f\u0440\u0438\u0437\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u0432 \u0446\u0435\u043b\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0445\u043e\u0434\u044f\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438  \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>Mattermost \u0432 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Team edition \u0438\u043c\u0435\u0435\u0442 \u0440\u044f\u0434 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 Enterprise \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438. \u041d\u043e \u043f\u043e\u043a\u043e\u043f\u0430\u0432\u0448\u0438\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432 \u043a\u043e\u0434\u0435, \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0432\u043d\u0435\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u0431\u0440\u0430\u0432 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432.<\/p>\n<hr\/>\n<p>\u041d\u0430\u0447\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0433\u0430\u0439\u0434\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 &#8212;<a href=\"https:\/\/developers.mattermost.com\/contribute\/developer-setup\/\" rel=\"noopener noreferrer nofollow\">https:\/\/developers.mattermost.com\/contribute\/developer-setup\/<\/a><\/p>\n<p>\u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0441\u0451 \u0431\u0438\u043b\u0434 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e, \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441\u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d \u043d\u0430 \u0442\u0435\u0433 v10.12.0. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430 \u043f\u0443\u043d\u043a\u0442\u0435 9.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0435 \u0444\u0438\u0447\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0438\u0445 \u043c\u0435\u0441\u0442 \u0432\u0441\u0435\u0433\u043e 2:<br \/>&#8212; server\/channels\/app\/platform\/license.go<br \/>&#8212; webapp\/channels\/src\/utils\/license_utils.ts<\/p>\n<p>\u0412\u043d\u043e\u0441\u0438\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/p>\n<details class=\"spoiler\">\n<summary>server\/channels\/app\/platform\/license.go changes<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"diff\"> func (ps *PlatformService) License() *model.License { -return ps.licenseValue.Load() +return model.NewTestLicenseSKU(model.LicenseShortSkuEnterpriseAdvanced)  }<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043c\u044b \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u044f\u0449\u0435\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438, \u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044e \u0438\u0437 e2e \u0442\u0435\u0441\u0442\u043e\u0432.<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>webapp\/channels\/src\/utils\/license_utils.ts changes<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"diff\">export const isEnterpriseLicense = (license?: ClientLicense) =&gt; {     switch (license?.SkuShortName) {     case LicenseSkus.Enterprise:     case LicenseSkus.E20:     case LicenseSkus.EnterpriseAdvanced:         return true;     }  -    return false; +    return true; };<\/code><\/pre>\n<pre><code class=\"diff\">-export const isNonEnterpriseLicense = (license?: ClientLicense) =&gt; !isEnterpriseLicense(license); +export const isNonEnterpriseLicense = (license?: ClientLicense) =&gt; false;<\/code><\/pre>\n<pre><code class=\"diff\"> export function isMinimumProfessionalLicense(license: ClientLicense): boolean { -    if (!license) { -        return false; -    } - -    return getLicenseTier(license.SkuShortName) &gt;= getLicenseTier(LicenseSkus.Professional); +    return true;  }<\/code><\/pre>\n<pre><code class=\"diff\"> export function isMinimumEnterpriseLicense(license: ClientLicense): boolean { -    if (!license) { -        return false; -    } - -    return getLicenseTier(license.SkuShortName) &gt;= getLicenseTier(LicenseSkus.Enterprise); +    return true;  }<\/code><\/pre>\n<pre><code class=\"diff\"> export function isMinimumEnterpriseAdvancedLicense(license?: ClientLicense): boolean { -    if (!license) { -        return false; -    } - -    return getLicenseTier(license.SkuShortName) &gt;= getLicenseTier(LicenseSkus.EnterpriseAdvanced); +    return true;  }<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u0432\u0440\u043e\u043d\u044f \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043b\u043e\u0433\u0438\u043a\u0443 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c true.<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e (\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0441 \u043f\u0443\u043d\u043a\u0442\u0430 9 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0433\u0430\u0439\u0434\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432:<\/p>\n<ol>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a<\/p>\n<pre><code class=\"bash\">cd &lt;repo_path&gt;\/server make run-server<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0416\u0434\u0435\u043c \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f<\/p>\n<\/li>\n<li>\n<p>\u0427\u0435\u043a\u0430\u0435\u043c \u0447\u0442\u043e \u0432\u0441\u0435 \u041e\u041a<\/p>\n<pre><code class=\"bash\">curl http:\/\/localhost:8065\/api\/v4\/system\/ping # \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0431\u0443\u0434\u0435\u0442: {\"AndroidLatestVersion\":\"\",\"AndroidMinVersion\":\"\",\"DesktopLatestVersion\":\"\",\"DesktopMinVersion\":\"\",\"IosLatestVersion\":\"\",\"IosMinVersion\":\"\",\"status\":\"OK\"}<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<\/p>\n<pre><code class=\"bash\">cd &lt;repo_path&gt;\/server bin\/mmctl user create --local --email admin@example.com --username admin --password adminadmin --system-admin bin\/mmctl user create --local --email admin2@example.com --username admin2 --password adminadmin --system-admin<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c webapp<\/p>\n<pre><code class=\"bash\">cd &lt;repo_path&gt;\/webapp make run<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0416\u0434\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u041c\u041c \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"http:\/\/localhost:8065\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost:8065<\/a><\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"bash\">cd &lt;repo_path&gt;\/server make stop-server make stop-docker<\/code><\/pre>\n<p>\u041a\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0437\u043b\u043e\u0447\u0438\u043b\u0438\u0441\u044c:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0440\u0443\u043f\u043f (User Groups)<\/p>\n<details class=\"spoiler\">\n<summary>\u0441\u043a\u0440\u0438\u043d\u044b<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/57b\/49c\/638\/57b49c63835274e6cedef82fe1bd6c6f.png\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 -&gt; User Groups\" title=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 -&gt; User Groups\" width=\"574\" height=\"914\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/57b\/49c\/638\/57b49c63835274e6cedef82fe1bd6c6f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/57b\/49c\/638\/57b49c63835274e6cedef82fe1bd6c6f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 -&gt; User Groups<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/304\/6bf\/61c\/3046bf61ccf8e6418abc11d6204e80b9.png\" alt=\"\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0433\u0440\u0443\u043f\u043f\u0443 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439\" title=\"\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0433\u0440\u0443\u043f\u043f\u0443 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439\" width=\"938\" height=\"630\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/304\/6bf\/61c\/3046bf61ccf8e6418abc11d6204e80b9.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/304\/6bf\/61c\/3046bf61ccf8e6418abc11d6204e80b9.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0433\u0440\u0443\u043f\u043f\u0443 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/525\/552\/871\/5255528711ecd86b1132b27512cfa8d8.png\" alt=\"\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u0443\" title=\"\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u0443\" width=\"818\" height=\"444\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/525\/552\/871\/5255528711ecd86b1132b27512cfa8d8.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/525\/552\/871\/5255528711ecd86b1132b27512cfa8d8.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u0443<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/001\/45b\/584\/00145b584d2eb8dc86f5fa3207e42505.png\" alt=\"\u0412\u0438\u0434\u0438\u043c \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435\" title=\"\u0412\u0438\u0434\u0438\u043c \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435\" width=\"687\" height=\"140\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/001\/45b\/584\/00145b584d2eb8dc86f5fa3207e42505.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/001\/45b\/584\/00145b584d2eb8dc86f5fa3207e42505.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u0438\u0434\u0438\u043c \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<\/li>\n<li>\n<p>\u041c\u0435\u0442\u0440\u0438\u043a\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 <a href=\"http:\/\/localhost:8067\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost:8067<\/a><\/p>\n<details class=\"spoiler\">\n<summary>\u0441\u043a\u0440\u0438\u043d\u044b<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eff\/ba0\/69d\/effba069d9711132519fe1395dde2864.png\" alt=\"\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445\" title=\"\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445\" width=\"1020\" height=\"302\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/eff\/ba0\/69d\/effba069d9711132519fe1395dde2864.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eff\/ba0\/69d\/effba069d9711132519fe1395dde2864.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/db5\/d34\/dcb\/db5d34dcb0d78920762c7333301ac250.png\" alt=\"http:\/\/localhost:8067\" title=\"http:\/\/localhost:8067\" width=\"666\" height=\"564\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/db5\/d34\/dcb\/db5d34dcb0d78920762c7333301ac250.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/db5\/d34\/dcb\/db5d34dcb0d78920762c7333301ac250.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><a href=\"http:\/\/localhost:8067\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost:8067<\/a><\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6e7\/380\/e9a\/6e7380e9af291dae0110ed345be935b1.png\" alt=\"http:\/\/localhost:8067\/metrics\" title=\"http:\/\/localhost:8067\/metrics\" width=\"802\" height=\"1030\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/6e7\/380\/e9a\/6e7380e9af291dae0110ed345be935b1.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6e7\/380\/e9a\/6e7380e9af291dae0110ed345be935b1.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><a href=\"http:\/\/localhost:8067\/metrics\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost:8067\/metrics<\/a><\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<\/li>\n<li>\n<p>\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435<\/p>\n<details class=\"spoiler\">\n<summary>\u0441\u043a\u0440\u0438\u043d\u044b<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c35\/47e\/e6b\/c3547ee6b9217523c29834a4610e38ea.png\" width=\"1880\" height=\"1094\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c35\/47e\/e6b\/c3547ee6b9217523c29834a4610e38ea.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c35\/47e\/e6b\/c3547ee6b9217523c29834a4610e38ea.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e87\/5d0\/561\/e875d0561ec44ff50e9a32c650265a88.png\" width=\"1600\" height=\"1052\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e87\/5d0\/561\/e875d0561ec44ff50e9a32c650265a88.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e87\/5d0\/561\/e875d0561ec44ff50e9a32c650265a88.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<\/div>\n<\/details>\n<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0434\u043e\u043a\u0435\u0440 \u043e\u0431\u0440\u0430\u0437:<\/p>\n<ol>\n<li>\n<p>\u0421\u0431\u043e\u0440\u043a\u0430<\/p>\n<pre><code>cd &lt;repo_path&gt;\/server make build make package<\/code><\/pre>\n<\/li>\n<li>\n<p>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0431\u0440\u0430\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u043e\u043a\u0435\u0440\u0430 \u0438 \u0431\u0438\u043b\u0434\u0438\u043c<\/p>\n<pre><code>cp .\/dist\/mattermost-team-linux-amd64.tar.gz .\/build\/<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0412\u043d\u043e\u0441\u0438\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 Dockerfile<\/p>\n<pre><code>+COPY mattermost-team-linux-amd64.tar.gz \/mattermost-team-linux-amd64.tar.gz +  # Set mattermost group\/user and download Mattermost  RUN mkdir -p \/mattermost\/data \/mattermost\/plugins \/mattermost\/client\/plugins \\    &amp;&amp; groupadd --gid ${PGID} mattermost \\    &amp;&amp; useradd --uid ${PUID} --gid ${PGID} --comment \"\" --home-dir \/mattermost mattermost \\ -  &amp;&amp; curl -L $MM_PACKAGE | tar -xvz \\ +  &amp;&amp; tar -xPvzf mattermost-team-linux-amd64.tar.gz \\    &amp;&amp; chown -R mattermost:mattermost \/mattermost \/mattermost\/data \/mattermost\/plugins \/mattermost\/client\/plugins<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0411\u0438\u043b\u0434\u0438\u043c<\/p>\n<pre><code>cd build docker build -t mattermost-test -f .\/Dockerfile .<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432<\/p>\n<pre><code>mkdir ~\/mattermost_tmp cd ~\/mattermost_tmp mkdir pgdata config data logs<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u0411\u0414<\/p>\n<pre><code>docker run -d \\         --name mm_postgres \\         -p 127.0.0.1:5432:5432 \\         -e POSTGRES_PASSWORD=postgres \\         -e PGDATA=\/var\/lib\/postgresql\/data\/pgdata \\         -v .\/pgdata:\/var\/lib\/postgresql\/data \\         postgres<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<pre><code>docker exec -it mm_postgres bash # \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u043a postgres psql -h localhost -U postgres -w # \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u0430\u0437\u0443 create database mattermost; # \u0432\u044b\u0445\u043e\u0434\u0438\u043c quit; exit<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0411\u0435\u0440\u0435\u043c \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 (\u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0442\u0438 \u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442 \u043a \u0431\u0430\u0437\u0435) \u0438\u043b\u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0438\u0436\u0435 (\u0442\u0430\u043c \u0432\u0441\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043e) \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0432 ~\/mattermost_tmp\/config\/<\/p>\n<details class=\"spoiler\">\n<summary>config.json<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{     \"ServiceSettings\": {         \"SiteURL\": \"http:\/\/localhost:8065\",         \"WebsocketURL\": \"\",         \"LicenseFileLocation\": \"\",         \"ListenAddress\": \":8065\",         \"ConnectionSecurity\": \"\",         \"TLSCertFile\": \"\",         \"TLSKeyFile\": \"\",         \"TLSMinVer\": \"1.2\",         \"TLSStrictTransport\": false,         \"TLSStrictTransportMaxAge\": 63072000,         \"TLSOverwriteCiphers\": [],         \"UseLetsEncrypt\": false,         \"LetsEncryptCertificateCacheFile\": \".\/config\/letsencrypt.cache\",         \"Forward80To443\": false,         \"TrustedProxyIPHeader\": [],         \"ReadTimeout\": 300,         \"WriteTimeout\": 300,         \"IdleTimeout\": 60,         \"MaximumLoginAttempts\": 10,         \"GoroutineHealthThreshold\": -1,         \"EnableOAuthServiceProvider\": true,         \"EnableIncomingWebhooks\": true,         \"EnableOutgoingWebhooks\": true,         \"EnableOutgoingOAuthConnections\": false,         \"EnableCommands\": true,         \"OutgoingIntegrationRequestsTimeout\": 30,         \"EnablePostUsernameOverride\": true,         \"EnablePostIconOverride\": true,         \"GoogleDeveloperKey\": \"\",         \"EnableLinkPreviews\": true,         \"EnablePermalinkPreviews\": true,         \"RestrictLinkPreviews\": \"\",         \"EnableTesting\": false,         \"EnableDeveloper\": false,         \"DeveloperFlags\": \"\",         \"EnableClientPerformanceDebugging\": false,         \"EnableSecurityFixAlert\": true,         \"EnableInsecureOutgoingConnections\": true,         \"AllowedUntrustedInternalConnections\": \"\",         \"EnableMultifactorAuthentication\": false,         \"EnforceMultifactorAuthentication\": false,         \"EnableUserAccessTokens\": true,         \"AllowCorsFrom\": \"\",         \"CorsExposedHeaders\": \"\",         \"CorsAllowCredentials\": false,         \"CorsDebug\": false,         \"AllowCookiesForSubdomains\": false,         \"ExtendSessionLengthWithActivity\": true,         \"TerminateSessionsOnPasswordChange\": false,         \"SessionLengthWebInDays\": 180,         \"SessionLengthWebInHours\": 4320,         \"SessionLengthMobileInDays\": 180,         \"SessionLengthMobileInHours\": 4320,         \"SessionLengthSSOInDays\": 30,         \"SessionLengthSSOInHours\": 720,         \"SessionCacheInMinutes\": 10,         \"SessionIdleTimeoutInMinutes\": 43200,         \"WebsocketSecurePort\": 443,         \"WebsocketPort\": 80,         \"WebserverMode\": \"gzip\",         \"EnableGifPicker\": false,         \"GiphySdkKey\": \"\",         \"EnableCustomEmoji\": true,         \"EnableEmojiPicker\": true,         \"PostEditTimeLimit\": -1,         \"TimeBetweenUserTypingUpdatesMilliseconds\": 5000,         \"EnableCrossTeamSearch\": true,         \"EnablePostSearch\": true,         \"EnableFileSearch\": true,         \"MinimumHashtagLength\": 3,         \"EnableUserTypingMessages\": true,         \"EnableChannelViewedMessages\": true,         \"EnableUserStatuses\": true,         \"ExperimentalEnableAuthenticationTransfer\": true,         \"ClusterLogTimeoutMilliseconds\": 2000,         \"EnableTutorial\": true,         \"EnableOnboardingFlow\": true,         \"ExperimentalEnableDefaultChannelLeaveJoinMessages\": true,         \"ExperimentalGroupUnreadChannels\": \"disabled\",         \"EnableAPITeamDeletion\": false,         \"EnableAPITriggerAdminNotifications\": false,         \"EnableAPIUserDeletion\": false,         \"EnableAPIPostDeletion\": false,         \"EnableDesktopLandingPage\": true,         \"ExperimentalEnableHardenedMode\": false,         \"ExperimentalStrictCSRFEnforcement\": false,         \"EnableEmailInvitations\": true,         \"DisableBotsWhenOwnerIsDeactivated\": true,         \"EnableBotAccountCreation\": true,         \"EnableSVGs\": true,         \"EnableLatex\": true,         \"EnableInlineLatex\": true,         \"PostPriority\": true,         \"AllowPersistentNotifications\": true,         \"AllowPersistentNotificationsForGuests\": false,         \"PersistentNotificationIntervalMinutes\": 5,         \"PersistentNotificationMaxCount\": 6,         \"PersistentNotificationMaxRecipients\": 5,         \"EnableAPIChannelDeletion\": false,         \"EnableLocalMode\": true,         \"LocalModeSocketLocation\": \"\/var\/tmp\/mattermost_local.socket\",         \"EnableAWSMetering\": false,         \"SplitKey\": \"\",         \"FeatureFlagSyncIntervalSeconds\": 30,         \"DebugSplit\": false,         \"ThreadAutoFollow\": true,         \"CollapsedThreads\": \"always_on\",         \"ManagedResourcePaths\": \"\",         \"EnableCustomGroups\": true,         \"AllowSyncedDrafts\": true,         \"UniqueEmojiReactionLimitPerPost\": 50,         \"RefreshPostStatsRunTime\": \"00:00\",         \"MaximumPayloadSizeBytes\": 100000,         \"MaximumURLLength\": 2048,         \"ScheduledPosts\": true,         \"EnableWebHubChannelIteration\": false,         \"FrameAncestors\": \"\",         \"DeleteAccountLink\": \"\"     },     \"TeamSettings\": {         \"SiteName\": \"Mattermost\",         \"MaxUsersPerTeam\": 300,         \"EnableJoinLeaveMessageByDefault\": true,         \"EnableUserCreation\": true,         \"EnableOpenServer\": false,         \"EnableUserDeactivation\": false,         \"RestrictCreationToDomains\": \"\",         \"EnableCustomUserStatuses\": true,         \"EnableCustomBrand\": true,         \"CustomBrandText\": \"\",         \"CustomDescriptionText\": \"\",         \"RestrictDirectMessage\": \"any\",         \"EnableLastActiveTime\": true,         \"UserStatusAwayTimeout\": 300,         \"MaxChannelsPerTeam\": 2000,         \"MaxNotificationsPerChannel\": 1000,         \"EnableConfirmNotificationsToChannel\": false,         \"TeammateNameDisplay\": \"username\",         \"ExperimentalViewArchivedChannels\": true,         \"ExperimentalEnableAutomaticReplies\": true,         \"LockTeammateNameDisplay\": false,         \"ExperimentalPrimaryTeam\": \"\",         \"ExperimentalDefaultChannels\": []     },     \"ClientRequirements\": {         \"AndroidLatestVersion\": \"\",         \"AndroidMinVersion\": \"\",         \"IosLatestVersion\": \"\",         \"IosMinVersion\": \"\"     },     \"SqlSettings\": {         \"DriverName\": \"postgres\",         \"DataSource\": \"postgres:\/\/postgres:postgres@mm_postgres:5432\/mattermost?sslmode=disable\\u0026connect_timeout=10\\u0026binary_parameters=yes\",         \"DataSourceReplicas\": [],         \"DataSourceSearchReplicas\": [],         \"MaxIdleConns\": 20,         \"ConnMaxLifetimeMilliseconds\": 3600000,         \"ConnMaxIdleTimeMilliseconds\": 300000,         \"MaxOpenConns\": 300,         \"Trace\": false,         \"AtRestEncryptKey\": \"o8qmtcmxr67rh8eomnugap49kqgesnp9\",         \"QueryTimeout\": 30,         \"DisableDatabaseSearch\": false,         \"MigrationsStatementTimeoutSeconds\": 100000,         \"ReplicaLagSettings\": [],         \"ReplicaMonitorIntervalSeconds\": 5     },     \"LogSettings\": {         \"EnableConsole\": true,         \"ConsoleLevel\": \"INFO\",         \"ConsoleJson\": true,         \"EnableColor\": true,         \"EnableFile\": true,         \"FileLevel\": \"INFO\",         \"FileJson\": true,         \"FileLocation\": \"\/mattermost\/logs\",         \"EnableWebhookDebugging\": true,         \"EnableDiagnostics\": false,         \"VerboseDiagnostics\": false,         \"EnableSentry\": true,         \"AdvancedLoggingJSON\": {},         \"MaxFieldSize\": 2048     },     \"ExperimentalAuditSettings\": {         \"FileEnabled\": false,         \"FileName\": \"\",         \"FileMaxSizeMB\": 100,         \"FileMaxAgeDays\": 0,         \"FileMaxBackups\": 0,         \"FileCompress\": false,         \"FileMaxQueueSize\": 1000,         \"AdvancedLoggingJSON\": {},         \"Certificate\": \"\"     },     \"NotificationLogSettings\": {         \"EnableConsole\": true,         \"ConsoleLevel\": \"DEBUG\",         \"ConsoleJson\": true,         \"EnableColor\": true,         \"EnableFile\": true,         \"FileLevel\": \"INFO\",         \"FileJson\": true,         \"FileLocation\": \"\/mattermost\/logs\",         \"AdvancedLoggingJSON\": {}     },     \"PasswordSettings\": {         \"MinimumLength\": 8,         \"Lowercase\": false,         \"Number\": false,         \"Uppercase\": false,         \"Symbol\": false,         \"EnableForgotLink\": false     },     \"FileSettings\": {         \"EnableFileAttachments\": true,         \"EnableMobileUpload\": true,         \"EnableMobileDownload\": true,         \"MaxFileSize\": 104857600,         \"MaxImageResolution\": 33177600,         \"MaxImageDecoderConcurrency\": -1,         \"DriverName\": \"local\",         \"Directory\": \".\/data\/\",         \"EnablePublicLink\": false,         \"ExtractContent\": true,         \"ArchiveRecursion\": false,         \"PublicLinkSalt\": \"q8pf6phaiaata8g1s1qfqaa31hpn5q55\",         \"InitialFont\": \"nunito-bold.ttf\",         \"AmazonS3AccessKeyId\": \"\",         \"AmazonS3SecretAccessKey\": \"\",         \"AmazonS3Bucket\": \"\",         \"AmazonS3PathPrefix\": \"\",         \"AmazonS3Region\": \"\",         \"AmazonS3Endpoint\": \"s3.amazonaws.com\",         \"AmazonS3SSL\": true,         \"AmazonS3SignV2\": false,         \"AmazonS3SSE\": false,         \"AmazonS3Trace\": false,         \"AmazonS3RequestTimeoutMilliseconds\": 30000,         \"AmazonS3UploadPartSizeBytes\": 5242880,         \"AmazonS3StorageClass\": \"\",         \"DedicatedExportStore\": false,         \"ExportDriverName\": \"local\",         \"ExportDirectory\": \".\/data\/\",         \"ExportAmazonS3AccessKeyId\": \"\",         \"ExportAmazonS3SecretAccessKey\": \"\",         \"ExportAmazonS3Bucket\": \"\",         \"ExportAmazonS3PathPrefix\": \"\",         \"ExportAmazonS3Region\": \"\",         \"ExportAmazonS3Endpoint\": \"s3.amazonaws.com\",         \"ExportAmazonS3SSL\": true,         \"ExportAmazonS3SignV2\": false,         \"ExportAmazonS3SSE\": false,         \"ExportAmazonS3Trace\": false,         \"ExportAmazonS3RequestTimeoutMilliseconds\": 30000,         \"ExportAmazonS3PresignExpiresSeconds\": 21600,         \"ExportAmazonS3UploadPartSizeBytes\": 104857600,         \"ExportAmazonS3StorageClass\": \"\"     },     \"EmailSettings\": {         \"EnableSignUpWithEmail\": true,         \"EnableSignInWithEmail\": true,         \"EnableSignInWithUsername\": true,         \"SendEmailNotifications\": false,         \"UseChannelInEmailNotifications\": false,         \"RequireEmailVerification\": false,         \"FeedbackName\": \"\",         \"FeedbackEmail\": \"\",         \"ReplyToAddress\": \"\",         \"FeedbackOrganization\": \"\",         \"EnableSMTPAuth\": false,         \"SMTPUsername\": \"\",         \"SMTPPassword\": \"\",         \"SMTPServer\": \"localhost\",         \"SMTPPort\": \"10025\",         \"SMTPServerTimeout\": 10,         \"ConnectionSecurity\": \"\",         \"SendPushNotifications\": true,         \"PushNotificationServer\": \"https:\/\/push-test.mattermost.com\",         \"PushNotificationContents\": \"full\",         \"PushNotificationBuffer\": 1000,         \"EnableEmailBatching\": false,         \"EmailBatchingBufferSize\": 256,         \"EmailBatchingInterval\": 30,         \"EnablePreviewModeBanner\": true,         \"SkipServerCertificateVerification\": false,         \"EmailNotificationContentsType\": \"full\",         \"LoginButtonColor\": \"#0000\",         \"LoginButtonBorderColor\": \"#2389D7\",         \"LoginButtonTextColor\": \"#2389D7\"     },     \"RateLimitSettings\": {         \"Enable\": false,         \"PerSec\": 10,         \"MaxBurst\": 100,         \"MemoryStoreSize\": 10000,         \"VaryByRemoteAddr\": true,         \"VaryByUser\": false,         \"VaryByHeader\": \"\"     },     \"PrivacySettings\": {         \"ShowEmailAddress\": true,         \"ShowFullName\": true     },     \"SupportSettings\": {         \"TermsOfServiceLink\": \"https:\/\/mattermost.com\/pl\/terms-of-use\/\",         \"PrivacyPolicyLink\": \"https:\/\/mattermost.com\/pl\/privacy-policy\/\",         \"AboutLink\": \"https:\/\/mattermost.com\/pl\/about-mattermost\",         \"HelpLink\": \"https:\/\/mattermost.com\/pl\/help\/\",         \"ReportAProblemLink\": \"https:\/\/mattermost.com\/pl\/report-a-bug\",         \"ReportAProblemType\": \"default\",         \"ReportAProblemMail\": \"\",         \"AllowDownloadLogs\": true,         \"ForgotPasswordLink\": \"\",         \"SupportEmail\": \"\",         \"CustomTermsOfServiceEnabled\": false,         \"CustomTermsOfServiceReAcceptancePeriod\": 365,         \"EnableAskCommunityLink\": true     },     \"AnnouncementSettings\": {         \"EnableBanner\": false,         \"BannerText\": \"\",         \"BannerColor\": \"#f2a93b\",         \"BannerTextColor\": \"#333333\",         \"AllowBannerDismissal\": true,         \"AdminNoticesEnabled\": true,         \"UserNoticesEnabled\": true,         \"NoticesURL\": \"https:\/\/notices.mattermost.com\/\",         \"NoticesFetchFrequency\": 3600,         \"NoticesSkipCache\": false     },     \"ThemeSettings\": {         \"EnableThemeSelection\": true,         \"DefaultTheme\": \"default\",         \"AllowCustomThemes\": true,         \"AllowedThemes\": []     },     \"GitLabSettings\": {         \"Enable\": false,         \"Secret\": \"\",         \"Id\": \"\",         \"Scope\": \"\",         \"AuthEndpoint\": \"\",         \"TokenEndpoint\": \"\",         \"UserAPIEndpoint\": \"\",         \"DiscoveryEndpoint\": \"\",         \"ButtonText\": \"\",         \"ButtonColor\": \"\"     },     \"GoogleSettings\": {         \"Enable\": false,         \"Secret\": \"\",         \"Id\": \"\",         \"Scope\": \"profile email\",         \"AuthEndpoint\": \"https:\/\/accounts.google.com\/o\/oauth2\/v2\/auth\",         \"TokenEndpoint\": \"https:\/\/www.googleapis.com\/oauth2\/v4\/token\",         \"UserAPIEndpoint\": \"https:\/\/people.googleapis.com\/v1\/people\/me?personFields=names,emailAddresses,nicknames,metadata\",         \"DiscoveryEndpoint\": \"\",         \"ButtonText\": \"\",         \"ButtonColor\": \"\"     },     \"Office365Settings\": {         \"Enable\": false,         \"Secret\": \"\",         \"Id\": \"\",         \"Scope\": \"User.Read\",         \"AuthEndpoint\": \"https:\/\/login.microsoftonline.com\/common\/oauth2\/v2.0\/authorize\",         \"TokenEndpoint\": \"https:\/\/login.microsoftonline.com\/common\/oauth2\/v2.0\/token\",         \"UserAPIEndpoint\": \"https:\/\/graph.microsoft.com\/v1.0\/me\",         \"DiscoveryEndpoint\": \"\",         \"DirectoryId\": \"\"     },     \"OpenIdSettings\": {         \"Enable\": false,         \"Secret\": \"\",         \"Id\": \"\",         \"Scope\": \"profile openid email\",         \"AuthEndpoint\": \"\",         \"TokenEndpoint\": \"\",         \"UserAPIEndpoint\": \"\",         \"DiscoveryEndpoint\": \"\",         \"ButtonText\": \"\",         \"ButtonColor\": \"#145DBF\"     },     \"LdapSettings\": {         \"Enable\": false,         \"EnableSync\": false,         \"LdapServer\": \"\",         \"LdapPort\": 389,         \"ConnectionSecurity\": \"\",         \"BaseDN\": \"\",         \"BindUsername\": \"\",         \"BindPassword\": \"\",         \"MaximumLoginAttempts\": 10,         \"UserFilter\": \"\",         \"GroupFilter\": \"\",         \"GuestFilter\": \"\",         \"EnableAdminFilter\": false,         \"AdminFilter\": \"\",         \"GroupDisplayNameAttribute\": \"\",         \"GroupIdAttribute\": \"\",         \"FirstNameAttribute\": \"\",         \"LastNameAttribute\": \"\",         \"EmailAttribute\": \"\",         \"UsernameAttribute\": \"\",         \"NicknameAttribute\": \"\",         \"IdAttribute\": \"\",         \"PositionAttribute\": \"\",         \"LoginIdAttribute\": \"\",         \"PictureAttribute\": \"\",         \"SyncIntervalMinutes\": 60,         \"ReAddRemovedMembers\": false,         \"SkipCertificateVerification\": false,         \"PublicCertificateFile\": \"\",         \"PrivateKeyFile\": \"\",         \"QueryTimeout\": 60,         \"MaxPageSize\": 0,         \"LoginFieldName\": \"\",         \"LoginButtonColor\": \"#0000\",         \"LoginButtonBorderColor\": \"#2389D7\",         \"LoginButtonTextColor\": \"#2389D7\"     },     \"ComplianceSettings\": {         \"Enable\": false,         \"Directory\": \".\/data\/\",         \"EnableDaily\": false,         \"BatchSize\": 30000     },     \"LocalizationSettings\": {         \"DefaultServerLocale\": \"en\",         \"DefaultClientLocale\": \"en\",         \"AvailableLocales\": \"\",         \"EnableExperimentalLocales\": false     },     \"SamlSettings\": {         \"Enable\": false,         \"EnableSyncWithLdap\": false,         \"EnableSyncWithLdapIncludeAuth\": false,         \"IgnoreGuestsLdapSync\": false,         \"Verify\": true,         \"Encrypt\": true,         \"SignRequest\": false,         \"IdpURL\": \"\",         \"IdpDescriptorURL\": \"\",         \"IdpMetadataURL\": \"\",         \"ServiceProviderIdentifier\": \"\",         \"AssertionConsumerServiceURL\": \"\",         \"SignatureAlgorithm\": \"RSAwithSHA1\",         \"CanonicalAlgorithm\": \"Canonical1.0\",         \"ScopingIDPProviderId\": \"\",         \"ScopingIDPName\": \"\",         \"IdpCertificateFile\": \"\",         \"PublicCertificateFile\": \"\",         \"PrivateKeyFile\": \"\",         \"IdAttribute\": \"\",         \"GuestAttribute\": \"\",         \"EnableAdminAttribute\": false,         \"AdminAttribute\": \"\",         \"FirstNameAttribute\": \"\",         \"LastNameAttribute\": \"\",         \"EmailAttribute\": \"\",         \"UsernameAttribute\": \"\",         \"NicknameAttribute\": \"\",         \"LocaleAttribute\": \"\",         \"PositionAttribute\": \"\",         \"LoginButtonText\": \"SAML\",         \"LoginButtonColor\": \"#34a28b\",         \"LoginButtonBorderColor\": \"#2389D7\",         \"LoginButtonTextColor\": \"#ffffff\"     },     \"NativeAppSettings\": {         \"AppCustomURLSchemes\": [             \"mmauth:\/\/\",             \"mmauthbeta:\/\/\"         ],         \"AppDownloadLink\": \"https:\/\/mattermost.com\/pl\/download-apps\",         \"AndroidAppDownloadLink\": \"https:\/\/mattermost.com\/pl\/android-app\/\",         \"IosAppDownloadLink\": \"https:\/\/mattermost.com\/pl\/ios-app\/\",         \"MobileExternalBrowser\": false,         \"MobileEnableBiometrics\": false,         \"MobilePreventScreenCapture\": false,         \"MobileJailbreakProtection\": false,         \"MobileEnableSecureFilePreview\": false,         \"MobileAllowPdfLinkNavigation\": false     },     \"CacheSettings\": {         \"CacheType\": \"lru\",         \"RedisAddress\": \"\",         \"RedisPassword\": \"********************************\",         \"RedisDB\": -1,         \"RedisCachePrefix\": \"\",         \"DisableClientCache\": false     },     \"ClusterSettings\": {         \"Enable\": false,         \"ClusterName\": \"\",         \"OverrideHostname\": \"\",         \"NetworkInterface\": \"\",         \"BindAddress\": \"\",         \"AdvertiseAddress\": \"\",         \"UseIPAddress\": true,         \"EnableGossipCompression\": true,         \"EnableExperimentalGossipEncryption\": false,         \"EnableGossipEncryption\": false,         \"ReadOnlyConfig\": true,         \"GossipPort\": 8074     },     \"MetricsSettings\": {         \"Enable\": true,         \"BlockProfileRate\": 0,         \"ListenAddress\": \":8067\",         \"EnableClientMetrics\": false,         \"EnableNotificationMetrics\": true,         \"ClientSideUserIds\": []     },     \"ExperimentalSettings\": {         \"ClientSideCertEnable\": false,         \"ClientSideCertCheck\": \"secondary\",         \"LinkMetadataTimeoutMilliseconds\": 5000,         \"RestrictSystemAdmin\": false,         \"EnableSharedChannels\": false,         \"EnableRemoteClusterService\": false,         \"DisableAppBar\": false,         \"DisableRefetchingOnBrowserFocus\": false,         \"DelayChannelAutocomplete\": false,         \"DisableWakeUpReconnectHandler\": false,         \"UsersStatusAndProfileFetchingPollIntervalMilliseconds\": 3000,         \"YoutubeReferrerPolicy\": false,         \"ExperimentalChannelCategorySorting\": false     },     \"AnalyticsSettings\": {         \"MaxUsersForStatistics\": 2500     },     \"ElasticsearchSettings\": {         \"ConnectionURL\": \"http:\/\/localhost:9200\",         \"Backend\": \"elasticsearch\",         \"Username\": \"elastic\",         \"Password\": \"changeme\",         \"EnableIndexing\": false,         \"EnableSearching\": false,         \"EnableAutocomplete\": false,         \"Sniff\": true,         \"PostIndexReplicas\": 1,         \"PostIndexShards\": 1,         \"ChannelIndexReplicas\": 1,         \"ChannelIndexShards\": 1,         \"UserIndexReplicas\": 1,         \"UserIndexShards\": 1,         \"AggregatePostsAfterDays\": 365,         \"PostsAggregatorJobStartTime\": \"03:00\",         \"IndexPrefix\": \"\",         \"GlobalSearchPrefix\": \"\",         \"LiveIndexingBatchSize\": 1,         \"BatchSize\": 10000,         \"RequestTimeoutSeconds\": 30,         \"SkipTLSVerification\": false,         \"CA\": \"\",         \"ClientCert\": \"\",         \"ClientKey\": \"\",         \"Trace\": \"\",         \"IgnoredPurgeIndexes\": \"\"     },     \"BleveSettings\": {         \"IndexDir\": \"\",         \"EnableIndexing\": false,         \"EnableSearching\": false,         \"EnableAutocomplete\": false,         \"BatchSize\": 10000     },     \"DataRetentionSettings\": {         \"EnableMessageDeletion\": false,         \"EnableFileDeletion\": false,         \"EnableBoardsDeletion\": false,         \"MessageRetentionDays\": 365,         \"MessageRetentionHours\": 0,         \"FileRetentionDays\": 365,         \"FileRetentionHours\": 0,         \"BoardsRetentionDays\": 365,         \"DeletionJobStartTime\": \"02:00\",         \"BatchSize\": 3000,         \"TimeBetweenBatchesMilliseconds\": 100,         \"RetentionIdsBatchSize\": 100,         \"PreservePinnedPosts\": false     },     \"MessageExportSettings\": {         \"EnableExport\": false,         \"ExportFormat\": \"actiance\",         \"DailyRunTime\": \"01:00\",         \"ExportFromTimestamp\": 0,         \"BatchSize\": 10000,         \"DownloadExportResults\": false,         \"ChannelBatchSize\": 100,         \"ChannelHistoryBatchSize\": 10,         \"GlobalRelaySettings\": {             \"CustomerType\": \"A9\",             \"SMTPUsername\": \"\",             \"SMTPPassword\": \"\",             \"EmailAddress\": \"\",             \"SMTPServerTimeout\": 1800,             \"CustomSMTPServerName\": \"\",             \"CustomSMTPPort\": \"25\"         }     },     \"JobSettings\": {         \"RunJobs\": true,         \"RunScheduler\": true,         \"CleanupJobsThresholdDays\": -1,         \"CleanupConfigThresholdDays\": -1     },     \"PluginSettings\": {         \"Enable\": true,         \"EnableUploads\": true,         \"AllowInsecureDownloadURL\": true,         \"EnableHealthCheck\": true,         \"Directory\": \".\/plugins\",         \"ClientDirectory\": \".\/client\/plugins\",         \"Plugins\": {             \"com.mattermost.calls\": {                 \"iceserversconfigs\": \"[{\\\"urls\\\":[\\\"stun:stun.global.calls.mattermost.com:3478\\\"]}]\"             },             \"mattermost-ai\": {                 \"allowedUpstreamHostnames\": \"\",                 \"bots\": null,                 \"defaultBotName\": \"\",                 \"embeddingSearchConfig\": {                     \"chunkingOptions\": {                         \"chunkOverlap\": 0,                         \"chunkSize\": 0,                         \"chunkingStrategy\": \"\",                         \"minChunkSize\": 0                     },                     \"dimensions\": 0,                     \"embeddingProvider\": {                         \"parameters\": null,                         \"type\": \"\"                     },                     \"parameters\": null,                     \"type\": \"\",                     \"vectorStore\": {                         \"parameters\": null,                         \"type\": \"\"                     }                 },                 \"enableLLMTrace\": false,                 \"mcp\": {                     \"enabled\": false,                     \"idleTimeoutMinutes\": 0,                     \"servers\": null                 },                 \"services\": null,                 \"transcriptBackend\": \"\"             },             \"playbooks\": {                 \"BotUserID\": \"j8nigb4znty68bcde5z75iztuc\",                 \"EnableIncrementalUpdates\": false,                 \"EnableTeamsTabApp\": false,                 \"TeamsTabAppBotUserID\": \"\",                 \"TeamsTabAppTenantIDs\": \"\"             }         },         \"PluginStates\": {             \"com.mattermost.calls\": {                 \"Enable\": true             },             \"com.mattermost.nps\": {                 \"Enable\": true             },             \"mattermost-ai\": {                 \"Enable\": true             },             \"playbooks\": {                 \"Enable\": true             }         },         \"EnableMarketplace\": true,         \"EnableRemoteMarketplace\": true,         \"AutomaticPrepackagedPlugins\": true,         \"RequirePluginSignature\": false,         \"MarketplaceURL\": \"https:\/\/api.integrations.mattermost.com\",         \"SignaturePublicKeyFiles\": [],         \"ChimeraOAuthProxyURL\": \"\"     },     \"DisplaySettings\": {         \"CustomURLSchemes\": [],         \"MaxMarkdownNodes\": 0     },     \"GuestAccountsSettings\": {         \"Enable\": false,         \"HideTags\": false,         \"AllowEmailAccounts\": true,         \"EnforceMultifactorAuthentication\": false,         \"RestrictCreationToDomains\": \"\"     },     \"ImageProxySettings\": {         \"Enable\": false,         \"ImageProxyType\": \"local\",         \"RemoteImageProxyURL\": \"\",         \"RemoteImageProxyOptions\": \"\"     },     \"CloudSettings\": {         \"CWSURL\": \"https:\/\/customers.mattermost.com\",         \"CWSAPIURL\": \"https:\/\/portal.internal.prod.cloud.mattermost.com\",         \"CWSMock\": false,         \"Disable\": false     },     \"ImportSettings\": {         \"Directory\": \".\/import\",         \"RetentionDays\": 30     },     \"ExportSettings\": {         \"Directory\": \".\/export\",         \"RetentionDays\": 30     },     \"WranglerSettings\": {         \"PermittedWranglerRoles\": [],         \"AllowedEmailDomain\": [],         \"MoveThreadMaxCount\": 100,         \"MoveThreadToAnotherTeamEnable\": false,         \"MoveThreadFromPrivateChannelEnable\": false,         \"MoveThreadFromDirectMessageChannelEnable\": false,         \"MoveThreadFromGroupMessageChannelEnable\": false     },     \"ConnectedWorkspacesSettings\": {         \"EnableSharedChannels\": false,         \"EnableRemoteClusterService\": false,         \"DisableSharedChannelsStatusSync\": false,         \"SyncUsersOnConnectionOpen\": false,         \"GlobalUserSyncBatchSize\": 25,         \"MaxPostsPerSync\": 50,         \"MemberSyncBatchSize\": 20     },     \"AccessControlSettings\": {         \"EnableAttributeBasedAccessControl\": false,         \"EnableChannelScopeAccessControl\": false,         \"EnableUserManagedAttributes\": false     },     \"ContentFlaggingSettings\": {         \"EnableContentFlagging\": false,         \"ReviewerSettings\": {             \"CommonReviewers\": true,             \"CommonReviewerIds\": [],             \"TeamReviewersSetting\": {},             \"SystemAdminsAsReviewers\": false,             \"TeamAdminsAsReviewers\": true         },         \"NotificationSettings\": {             \"EventTargetMapping\": {                 \"assigned\": [                     \"reviewers\"                 ],                 \"dismissed\": [                     \"reviewers\",                     \"reporter\"                 ],                 \"flagged\": [                     \"reviewers\"                 ],                 \"removed\": [                     \"reviewers\",                     \"author\",                     \"reporter\"                 ]             }         },         \"AdditionalSettings\": {             \"Reasons\": [                 \"Inappropriate content\",                 \"Sensitive data\",                 \"Security concern\",                 \"Harassment or abuse\",                 \"Spam or phishing\"             ],             \"ReporterCommentRequired\": true,             \"ReviewerCommentRequired\": true,             \"HideFlaggedContent\": true         }     } }<\/code><\/pre>\n<\/div>\n<\/details>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/p>\n<pre><code>docker run -d \\         --name mattermost_server \\         -p 127.0.0.1:8065:8065 \\         -p 127.0.0.1:8067:8067 \\         -p 127.0.0.1:8443:8443 \\         --link mm_postgres:mm_postgres \\         -v .\/data:\/mattermost\/data \\         -v .\/logs:\/mattermost\/logs \\         -v .\/config:\/mattermost\/config \\         mattermost-test:latest<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>\u041f\u043e \u043f\u043e\u0440\u0442\u0430\u043c:<br \/>&#8212; 8065 \u0441\u0430\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u041c\u041c<br \/>&#8212; 8067 \u043c\u0435\u0442\u0440\u0438\u043a\u0438<br \/>&#8212; 8443 \u0437\u0432\u043e\u043d\u043a\u0438<\/p>\n<p>\u0427\u0442\u043e \u0435\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?<\/p>\n<p>\u0412 \u043f\u043b\u0430\u0433\u0438\u043d\u0435 mattermost-plugin-calls, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 1.0.0, \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u044b\u0435 \u0437\u0432\u043e\u043d\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0441 Enterprise \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439. \u042d\u0442\u043e \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u041d\u0443\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c mattermost-plugin-calls\/server\/enterprise\/license.go<\/p>\n<details class=\"spoiler\">\n<summary>server\/enterprise\/license.go changes<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"diff\"> func (e *LicenseChecker) HostControlsAllowed() bool { -return e.isAtLeastE10Licensed() +return true  }    func (e *LicenseChecker) GroupCallsAllowed() bool { -return e.isAtLeastE10Licensed() || os.Getenv(\"MM_CALLS_GROUP_CALLS_ALLOWED\") == \"true\" +return true  } <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0418 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442<\/p>\n<pre><code class=\"bash\">make dist<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 dist. \u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0435\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u041c\u041c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0438 \u0437\u0432\u043e\u043d\u043a\u0438 \u0432 \u0433\u0440\u0443\u043f\u043f\u0430\u0445 \u0431\u0443\u0434\u0443\u0442 \u0441\u043d\u043e\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u043c \u0434\u043b\u044f \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044f, \u0435\u0441\u0442\u044c \u0444\u043e\u0440\u043a \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u043d\u0435\u0441\u0435\u043d\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 \u043e \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445 \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0430\u0439\u043c\u0437\u043e\u043d\u0430\u0445: <a href=\"https:\/\/github.com\/DawgTeam\/mattermost-yandex-calendar-plugin\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/DawgTeam\/mattermost-yandex-calendar-plugin<\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/945734\/\"> https:\/\/habr.com\/ru\/articles\/945734\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440: \u0414\u0430\u043d\u043d\u044b\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0446\u0435\u043b\u044f\u0445. \u0410\u0432\u0442\u043e\u0440 \u043d\u0438 \u0432 \u043a\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u043f\u0440\u0438\u0437\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u0432 \u0446\u0435\u043b\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0445\u043e\u0434\u044f\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438  \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>Mattermost \u0432 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 Team edition \u0438\u043c\u0435\u0435\u0442 \u0440\u044f\u0434 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 Enterprise \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438. \u041d\u043e \u043f\u043e\u043a\u043e\u043f\u0430\u0432\u0448\u0438\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432 \u043a\u043e\u0434\u0435, \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0432\u043d\u0435\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u0431\u0440\u0430\u0432 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432.<\/p>\n<hr\/>\n<p>\u041d\u0430\u0447\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0433\u0430\u0439\u0434\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 &#8212;<a href=\"https:\/\/developers.mattermost.com\/contribute\/developer-setup\/\" rel=\"noopener noreferrer nofollow\">https:\/\/developers.mattermost.com\/contribute\/developer-setup\/<\/a><\/p>\n<p>\u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0441\u0451 \u0431\u0438\u043b\u0434 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e, \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441\u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d \u043d\u0430 \u0442\u0435\u0433 v10.12.0. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430 \u043f\u0443\u043d\u043a\u0442\u0435 9.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0435 \u0444\u0438\u0447\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0438\u0445 \u043c\u0435\u0441\u0442 \u0432\u0441\u0435\u0433\u043e 2:<br \/>&#8212; server\/channels\/app\/platform\/license.go<br \/>&#8212; webapp\/channels\/src\/utils\/license_utils.ts<\/p>\n<p>\u0412\u043d\u043e\u0441\u0438\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/p>\n<details class=\"spoiler\">\n<summary>server\/channels\/app\/platform\/license.go changes<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"diff\"> func (ps *PlatformService) License() *model.License { -return ps.licenseValue.Load() +return model.NewTestLicenseSKU(model.LicenseShortSkuEnterpriseAdvanced)  }<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043c\u044b \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u044f\u0449\u0435\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438, \u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044e \u0438\u0437 e2e \u0442\u0435\u0441\u0442\u043e\u0432.<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>webapp\/channels\/src\/utils\/license_utils.ts changes<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"diff\">export const isEnterpriseLicense = (license?: ClientLicense) =&gt; {     switch (license?.SkuShortName) {     case LicenseSkus.Enterprise:     case LicenseSkus.E20:     case LicenseSkus.EnterpriseAdvanced:         return true;     }  -    return false; +    return true; };<\/code><\/pre>\n<pre><code class=\"diff\">-export const isNonEnterpriseLicense = (license?: ClientLicense) =&gt; !isEnterpriseLicense(license); +export const isNonEnterpriseLicense = (license?: ClientLicense) =&gt; false;<\/code><\/pre>\n<pre><code class=\"diff\"> export function isMinimumProfessionalLicense(license: ClientLicense): boolean { -    if (!license) { -        return false; -    } - -    return getLicenseTier(license.SkuShortName) &gt;= getLicenseTier(LicenseSkus.Professional); +    return true;  }<\/code><\/pre>\n<pre><code class=\"diff\"> export function isMinimumEnterpriseLicense(license: ClientLicense): boolean { -    if (!license) { -        return false; -    } - -    return getLicenseTier(license.SkuShortName) &gt;= getLicenseTier(LicenseSkus.Enterprise); +    return true;  }<\/code><\/pre>\n<pre><code class=\"diff\"> export function isMinimumEnterpriseAdvancedLicense(license?: ClientLicense): boolean { -    if (!license) { -        return false; -    } - -    return getLicenseTier(license.SkuShortName) &gt;= getLicenseTier(LicenseSkus.EnterpriseAdvanced); +    return true;  }<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u0432\u0440\u043e\u043d\u044f \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043b\u043e\u0433\u0438\u043a\u0443 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c true.<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e (\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0441 \u043f\u0443\u043d\u043a\u0442\u0430 9 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0433\u0430\u0439\u0434\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432:<\/p>\n<ol>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a<\/p>\n<pre><code class=\"bash\">cd &lt;repo_path&gt;\/server make run-server<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0416\u0434\u0435\u043c \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f<\/p>\n<\/li>\n<li>\n<p>\u0427\u0435\u043a\u0430\u0435\u043c \u0447\u0442\u043e \u0432\u0441\u0435 \u041e\u041a<\/p>\n<pre><code class=\"bash\">curl http:\/\/localhost:8065\/api\/v4\/system\/ping # \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0431\u0443\u0434\u0435\u0442: {\"AndroidLatestVersion\":\"\",\"AndroidMinVersion\":\"\",\"DesktopLatestVersion\":\"\",\"DesktopMinVersion\":\"\",\"IosLatestVersion\":\"\",\"IosMinVersion\":\"\",\"status\":\"OK\"}<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<\/p>\n<pre><code class=\"bash\">cd &lt;repo_path&gt;\/server bin\/mmctl user create --local --email admin@example.com --username admin --password adminadmin --system-admin bin\/mmctl user create --local --email admin2@example.com --username admin2 --password adminadmin --system-admin<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c webapp<\/p>\n<pre><code class=\"bash\">cd &lt;repo_path&gt;\/webapp make run<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0416\u0434\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u041c\u041c \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"http:\/\/localhost:8065\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost:8065<\/a><\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"bash\">cd &lt;repo_path&gt;\/server make stop-server make stop-docker<\/code><\/pre>\n<p>\u041a\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0437\u043b\u043e\u0447\u0438\u043b\u0438\u0441\u044c:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0440\u0443\u043f\u043f (User Groups)<\/p>\n<details class=\"spoiler\">\n<summary>\u0441\u043a\u0440\u0438\u043d\u044b<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\">\n<div><figcaption>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 -&gt; User Groups<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0433\u0440\u0443\u043f\u043f\u0443 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption>\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u0443<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption>\u0412\u0438\u0434\u0438\u043c \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<\/li>\n<li>\n<p>\u041c\u0435\u0442\u0440\u0438\u043a\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 <a href=\"http:\/\/localhost:8067\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost:8067<\/a><\/p>\n<details class=\"spoiler\">\n<summary>\u0441\u043a\u0440\u0438\u043d\u044b<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\">\n<div><figcaption>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption><a href=\"http:\/\/localhost:8067\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost:8067<\/a><\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption><a href=\"http:\/\/localhost:8067\/metrics\" rel=\"noopener noreferrer nofollow\">http:\/\/localhost:8067\/metrics<\/a><\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<\/li>\n<li>\n<p>\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435<\/p>\n<details class=\"spoiler\">\n<summary>\u0441\u043a\u0440\u0438\u043d\u044b<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><\/figure>\n<figure class=\"full-width\"><\/figure>\n<\/div>\n<\/details>\n<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0434\u043e\u043a\u0435\u0440 \u043e\u0431\u0440\u0430\u0437:<\/p>\n<ol>\n<li>\n<p>\u0421\u0431\u043e\u0440\u043a\u0430<\/p>\n<pre><code>cd &lt;repo_path&gt;\/server make build make package<\/code><\/pre>\n<\/li>\n<li>\n<p>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0431\u0440\u0430\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u043e\u043a\u0435\u0440\u0430 \u0438 \u0431\u0438\u043b\u0434\u0438\u043c<\/p>\n<pre><code>cp .\/dist\/mattermost-team-linux-amd64.tar.gz .\/build\/<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0412\u043d\u043e\u0441\u0438\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 Dockerfile<\/p>\n<pre><code>+COPY mattermost-team-linux-amd64.tar.gz \/mattermost-team-linux-amd64.tar.gz +  # Set mattermost group\/user and download Mattermost  RUN mkdir -p \/mattermost\/data \/mattermost\/plugins \/mattermost\/client\/plugins \\    &amp;&amp; groupadd --gid ${PGID} mattermost \\    &amp;&amp; useradd --uid ${PUID} --gid ${PGID} --comment \"\" --home-dir \/mattermost mattermost \\ -  &amp;&amp; curl -L $MM_PACKAGE | tar -xvz \\ +  &amp;&amp; tar -xPvzf mattermost-team-linux-amd64.tar.gz \\    &amp;&amp; chown -R mattermost:mattermost \/mattermost \/mattermost\/data \/mattermost\/plugins \/mattermost\/client\/plugins<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0411\u0438\u043b\u0434\u0438\u043c<\/p>\n<pre><code>cd build docker build -t mattermost-test -f .\/Dockerfile .<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432<\/p>\n<pre><code>mkdir ~\/mattermost_tmp cd ~\/mattermost_tmp mkdir pgdata config data logs<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u0411\u0414<\/p>\n<pre><code>docker run -d \\         --name mm_postgres \\         -p 127.0.0.1:5432:5432 \\         -e POSTGRES_PASSWORD=postgres \\         -e PGDATA=\/var\/lib\/postgresql\/data\/pgdata \\         -v .\/pgdata:\/var\/lib\/postgresql\/data \\         postgres<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<pre><code>docker exec -it mm_postgres bash # \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u043a postgres psql -h localhost -U postgres -w # \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u0430\u0437\u0443 create database mattermost; # \u0432\u044b\u0445\u043e\u0434\u0438\u043c quit; exit<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0411\u0435\u0440\u0435\u043c \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 (\u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0442\u0438 \u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442 \u043a \u0431\u0430\u0437\u0435) \u0438\u043b\u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0438\u0436\u0435 (\u0442\u0430\u043c \u0432\u0441\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043e) \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0432 ~\/mattermost_tmp\/config\/<\/p>\n<details class=\"spoiler\">\n<summary>config.json<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{     \"ServiceSettings\": {         \"SiteURL\": \"http:\/\/localhost:8065\",         \"WebsocketURL\": \"\",         \"LicenseFileLocation\": \"\",         \"ListenAddress\": \":8065\",         \"ConnectionSecurity\": \"\",         \"TLSCertFile\": \"\",         \"TLSKeyFile\": \"\",         \"TLSMinVer\": \"1.2\",         \"TLSStrictTransport\": false,         \"TLSStrictTransportMaxAge\": 63072000,         \"TLSOverwriteCiphers\": [],         \"UseLetsEncrypt\": false,         \"LetsEncryptCertificateCacheFile\": \".\/config\/letsencrypt.cache\",         \"Forward80To443\": false,         \"TrustedProxyIPHeader\": [],         \"ReadTimeout\": 300,         \"WriteTimeout\": 300,         \"IdleTimeout\": 60,         \"MaximumLoginAttempts\": 10,         \"GoroutineHealthThreshold\": -1,         \"EnableOAuthServiceProvider\": true,         \"EnableIncomingWebhooks\": true,         \"EnableOutgoingWebhooks\": true,         \"EnableOutgoingOAuthConnections\": false,         \"EnableCommands\": true,         \"OutgoingIntegrationRequestsTimeout\": 30,         \"EnablePostUsernameOverride\": true,         \"EnablePostIconOverride\": true,         \"GoogleDeveloperKey\": \"\",         \"EnableLinkPreviews\": true,         \"EnablePermalinkPreviews\": true,         \"RestrictLinkPreviews\": \"\",         \"EnableTesting\": false,         \"EnableDeveloper\": false,         \"DeveloperFlags\": \"\",         \"EnableClientPerformanceDebugging\": false,         \"EnableSecurityFixAlert\": true,         \"EnableInsecureOutgoingConnections\": true,         \"AllowedUntrustedInternalConnections\": \"\",         \"EnableMultifactorAuthentication\": false,         \"EnforceMultifactorAuthentication\": false,         \"EnableUserAccessTokens\": true,         \"AllowCorsFrom\": \"\",         \"CorsExposedHeaders\": \"\",         \"CorsAllowCredentials\": false,         \"CorsDebug\": false,         \"AllowCookiesForSubdomains\": false,         \"ExtendSessionLengthWithActivity\": true,         \"TerminateSessionsOnPasswordChange\": false,         \"SessionLengthWebInDays\": 180,         \"SessionLengthWebInHours\": 4320,         \"SessionLengthMobileInDays\": 180,         \"SessionLengthMobileInHours\": 4320,         \"SessionLengthSSOInDays\": 30,         \"SessionLengthSSOInHours\": 720,         \"SessionCacheInMinutes\": 10,         \"SessionIdleTimeoutInMinutes\": 43200,         \"WebsocketSecurePort\": 443,         \"WebsocketPort\": 80,         \"WebserverMode\": \"gzip\",         \"EnableGifPicker\": false,         \"GiphySdkKey\": \"\",         \"EnableCustomEmoji\": true,         \"EnableEmojiPicker\": true,         \"PostEditTimeLimit\": -1,         \"TimeBetweenUserTypingUpdatesMilliseconds\": 5000,         \"EnableCrossTeamSearch\": true,         \"EnablePostSearch\": true,         \"EnableFileSearch\": true,         \"MinimumHashtagLength\": 3,         \"EnableUserTypingMessages\": true,         \"EnableChannelViewedMessages\": true,         \"EnableUserStatuses\": true,         \"ExperimentalEnableAuthenticationTransfer\": true,         \"ClusterLogTimeoutMilliseconds\": 2000,         \"EnableTutorial\": true,         \"EnableOnboardingFlow\": true,         \"ExperimentalEnableDefaultChannelLeaveJoinMessages\": true,         \"ExperimentalGroupUnreadChannels\": \"disabled\",         \"EnableAPITeamDeletion\": false,         \"EnableAPITriggerAdminNotifications\": false,         \"EnableAPIUserDeletion\": false,         \"EnableAPIPostDeletion\": false,         \"EnableDesktopLandingPage\": true,         \"ExperimentalEnableHardenedMode\": false,         \"ExperimentalStrictCSRFEnforcement\": false,         \"EnableEmailInvitations\": true,         \"DisableBotsWhenOwnerIsDeactivated\": true,         \"EnableBotAccountCreation\": true,         \"EnableSVGs\": true,         \"EnableLatex\": true,         \"EnableInlineLatex\": true,         \"PostPriority\": true,         \"AllowPersistentNotifications\": true,         \"AllowPersistentNotificationsForGuests\": false,         \"PersistentNotificationIntervalMinutes\": 5,         \"PersistentNotificationMaxCount\": 6,         \"PersistentNotificationMaxRecipients\": 5,         \"EnableAPIChannelDeletion\": false,         \"EnableLocalMode\": true,         \"LocalModeSocketLocation\": \"\/var\/tmp\/mattermost_local.socket\",         \"EnableAWSMetering\": false,         \"SplitKey\": \"\",         \"FeatureFlagSyncIntervalSeconds\": 30,         \"DebugSplit\": false,         \"ThreadAutoFollow\": true,         \"CollapsedThreads\": \"always_on\",         \"ManagedResourcePaths\": \"\",         \"EnableCustomGroups\": true,         \"AllowSyncedDrafts\": true,         \"UniqueEmojiReactionLimitPerPost\": 50,         \"RefreshPostStatsRunTime\": \"00:00\",         \"MaximumPayloadSizeBytes\": 100000,        <\/code><\/pre>\n<\/div>\n<\/details>\n<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-474814","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/474814","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=474814"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/474814\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=474814"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=474814"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=474814"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}