d4166ec62a
Co-authored-by: Cursor <cursoragent@cursor.com>
113 lines
5.0 KiB
Plaintext
113 lines
5.0 KiB
Plaintext
<%- include('../partials/layout-start') %>
|
||
|
||
<div class="admin-header">
|
||
<h1>Обновление с Git</h1>
|
||
<%- include('../partials/admin-nav', { adminNav: 'system' }) %>
|
||
</div>
|
||
|
||
<% if (updateOk) { %>
|
||
<p class="alert alert--success">Обновление выполнено успешно. Если сайт не открывается — подождите 10–20 сек и обновите страницу.</p>
|
||
<% } %>
|
||
<% if (updateFail) { %>
|
||
<p class="alert alert--error">Обновление завершилось с ошибкой (код <%= updateCode %>).</p>
|
||
<% } %>
|
||
<% if (confirmError) { %>
|
||
<p class="alert alert--error">Введите <strong>update</strong> для подтверждения.</p>
|
||
<% } %>
|
||
<% if (disabledError) { %>
|
||
<p class="alert alert--warn">Обновление из админки отключено на этом сервере.</p>
|
||
<% } %>
|
||
|
||
<section class="card admin-system">
|
||
<h2>Текущая версия</h2>
|
||
<% if (!git.available) { %>
|
||
<p class="alert alert--warn"><%= git.reason || 'Git недоступен' %></p>
|
||
<% } else { %>
|
||
<dl class="profile-dl admin-system__meta">
|
||
<dt>Версия приложения</dt>
|
||
<dd><strong>v<%= git.packageVersion || '?' %></strong></dd>
|
||
<dt>Каталог</dt>
|
||
<dd><code class="admin-system__path"><%= git.shopRoot %></code></dd>
|
||
<dt>Ветка</dt>
|
||
<dd><%= git.branch %></dd>
|
||
<dt>Коммит</dt>
|
||
<dd>
|
||
<code><%= git.commitShort %></code>
|
||
— <%= git.commitSubject %>
|
||
<span class="muted">(<%= git.commitDate %>)</span>
|
||
</dd>
|
||
<% if (git.dirty) { %>
|
||
<dt>Состояние</dt>
|
||
<dd><span class="badge badge--warn">Есть незакоммиченные изменения</span></dd>
|
||
<% } %>
|
||
<% if (git.behind != null) { %>
|
||
<dt>На origin/main</dt>
|
||
<dd>
|
||
<% if (git.behind > 0) { %>
|
||
<span class="badge badge--sale">Доступно обновлений: <%= git.behind %></span>
|
||
<% } else { %>
|
||
<span class="badge">Актуально</span>
|
||
<% } %>
|
||
</dd>
|
||
<% } %>
|
||
<% if (git.fetchError) { %>
|
||
<dt>origin</dt>
|
||
<dd class="muted">Не удалось проверить: <%= git.fetchError %></dd>
|
||
<% } %>
|
||
</dl>
|
||
<% } %>
|
||
|
||
<div class="admin-system__actions">
|
||
<form action="/admin/system/check" method="post" class="inline-form">
|
||
<button type="submit" class="btn btn--ghost">
|
||
<%- include('../partials/icon', { name: 'refresh', iconSize: 18 }) %>
|
||
Проверить на Git
|
||
</button>
|
||
</form>
|
||
</div>
|
||
|
||
<% if (git.updateEnabled) { %>
|
||
<hr class="admin-system__hr">
|
||
<h2>Обновить сейчас</h2>
|
||
<p class="muted admin-hint">
|
||
Выполняется <code>git pull</code>, <code>npm install</code> и перезапуск службы <code>shop</code>.
|
||
Страница может оборваться на несколько секунд — это нормально.
|
||
</p>
|
||
<form action="/admin/system/update" method="post" class="form admin-system__form" onsubmit="return confirm('Обновить код с Git и перезапустить магазин?');">
|
||
<label class="label">
|
||
Подтверждение: введите <strong>update</strong>
|
||
<input type="text" name="confirm" class="input" required autocomplete="off" placeholder="update">
|
||
</label>
|
||
<button type="submit" class="btn btn--primary btn--lg">
|
||
<%- include('../partials/icon', { name: 'download', iconSize: 20 }) %>
|
||
Обновить с Git
|
||
</button>
|
||
</form>
|
||
<% } else if (git.available) { %>
|
||
<p class="alert alert--warn">
|
||
Обновление из админки отключено (Windows, нет .git или <code>ADMIN_UPDATE_ENABLED=0</code>).
|
||
На сервере: <code>bash "$SHOP_ROOT/scripts/server-update.sh"</code>
|
||
</p>
|
||
<% } %>
|
||
</section>
|
||
|
||
<% if (updateLog) { %>
|
||
<section class="card admin-system__log">
|
||
<h2>Журнал обновления</h2>
|
||
<pre class="admin-system__pre"><%= updateLog %></pre>
|
||
</section>
|
||
<% } %>
|
||
|
||
<section class="card admin-system__help muted">
|
||
<h2>Настройка сервера</h2>
|
||
<p>В <code>.env</code>: <code>SHOP_ROOT=/opt/shop</code>, <code>ADMIN_UPDATE_ENABLED=1</code>.</p>
|
||
<p>Если служба работает от <code>www-data</code>, добавьте в sudoers (от root):</p>
|
||
<pre class="admin-system__pre">www-data ALL=(root) NOPASSWD: <%= git.shopRoot || '/opt/shop' %>/scripts/admin-web-update.sh</pre>
|
||
<p>И в .env: <code>ADMIN_UPDATE_USE_SUDO=1</code></p>
|
||
<p>При ошибке <code>dubious ownership</code> один раз на сервере:</p>
|
||
<pre class="admin-system__pre">git config --global --add safe.directory <%= git.shopRoot || '/opt/shop/shop10' %></pre>
|
||
<p class="muted">(для пользователя службы shop, обычно <code>www-data</code>)</p>
|
||
</section>
|
||
|
||
<%- include('../partials/layout-end') %>
|