mirror of
https://github.com/louislam/dockge.git
synced 2025-08-12 13:27:51 +02:00
Compare commits
7 Commits
remove-ver
...
rollout
Author | SHA1 | Date | |
---|---|---|---|
5ed6bd9982 | |||
875793d6c2 | |||
457f038108 | |||
f862bbc7cd | |||
3d56846cd6 | |||
cff929c69d | |||
e9c8abf759 |
@ -189,6 +189,28 @@ export class DockerSocketHandler extends SocketHandler {
|
||||
}
|
||||
});
|
||||
|
||||
// rolloutStack
|
||||
socket.on("rolloutStack", async (stackName : unknown, callback) => {
|
||||
try {
|
||||
checkLogin(socket);
|
||||
|
||||
if (typeof(stackName) !== "string") {
|
||||
throw new ValidationError("Stack name must be a string");
|
||||
}
|
||||
|
||||
const stack = Stack.getStack(server, stackName);
|
||||
await stack.rollout(socket);
|
||||
callback({
|
||||
ok: true,
|
||||
msg: "Rolled out"
|
||||
});
|
||||
server.sendStackList();
|
||||
stack.joinCombinedTerminal(socket);
|
||||
} catch (e) {
|
||||
callbackError(e, callback);
|
||||
}
|
||||
});
|
||||
|
||||
// down stack
|
||||
socket.on("downStack", async (stackName : unknown, callback) => {
|
||||
try {
|
||||
|
@ -323,6 +323,21 @@ export class Stack {
|
||||
return exitCode;
|
||||
}
|
||||
|
||||
async rollout(socket: DockgeSocket) {
|
||||
let terminalName = getComposeTerminalName(this.name);
|
||||
let exitCode = await Terminal.exec(this.server, socket, terminalName, "docker", [ "compose", "pull" ], this.path);
|
||||
if (exitCode !== 0) {
|
||||
throw new Error("Failed to pull, please check the terminal output for more information.");
|
||||
}
|
||||
|
||||
terminalName = getComposeTerminalName(this.name);
|
||||
exitCode = await Terminal.exec(this.server, socket, terminalName, "docker", [ "rollout", this.name ], this.path);
|
||||
if (exitCode !== 0) {
|
||||
throw new Error("Failed to rollout, please check the terminal output for more information.");
|
||||
}
|
||||
return exitCode;
|
||||
}
|
||||
|
||||
async stop(socket: DockgeSocket) : Promise<number> {
|
||||
const terminalName = getComposeTerminalName(this.name);
|
||||
let exitCode = await Terminal.exec(this.server, socket, terminalName, "docker", [ "compose", "stop" ], this.path);
|
||||
|
@ -25,15 +25,8 @@ RUN apt update && apt install --yes --no-install-recommends \
|
||||
&& npm install pnpm -g \
|
||||
&& pnpm install -g tsx
|
||||
|
||||
# ensures that /var/run/docker.sock exists
|
||||
# changes the ownership of /var/run/docker.sock
|
||||
RUN touch /var/run/docker.sock && chown node:node /var/run/docker.sock
|
||||
|
||||
# Full Base Image
|
||||
# MariaDB, Chromium and fonts
|
||||
#FROM base-slim AS base
|
||||
#ENV DOCKGE_ENABLE_EMBEDDED_MARIADB=1
|
||||
#RUN apt update && \
|
||||
# apt --yes --no-install-recommends install mariadb-server && \
|
||||
# rm -rf /var/lib/apt/lists/* && \
|
||||
# apt --yes autoremove
|
||||
# Install docker rollout plugin \
|
||||
RUN mkdir -p ~/.docker/cli-plugins \
|
||||
&& curl https://raw.githubusercontent.com/wowu/docker-rollout/master/docker-rollout -o ~/.docker/cli-plugins/docker-rollout \
|
||||
&& chmod +x ~/.docker/cli-plugins/docker-rollout \
|
||||
&& docker rollout --help
|
||||
|
@ -45,11 +45,12 @@ export default {
|
||||
<style scoped>
|
||||
.badge {
|
||||
min-width: 62px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
}
|
||||
|
||||
.fixed-width {
|
||||
width: 62px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
</style>
|
||||
|
@ -13,6 +13,7 @@ const languageList = {
|
||||
"sl": "Slovenščina",
|
||||
"tr": "Türkçe",
|
||||
"zh-CN": "简体中文",
|
||||
"zh-TW": "繁體中文(台灣)",
|
||||
"ur": "Urdu",
|
||||
"ko-KR": "한국어",
|
||||
"ru": "Русский",
|
||||
@ -20,7 +21,8 @@ const languageList = {
|
||||
"ar": "العربية",
|
||||
"th":"ไทย",
|
||||
"it-IT":"Italiano",
|
||||
"sv-SE":"Svenska"
|
||||
"sv-SE":"Svenska",
|
||||
"uk-UA":"Українська"
|
||||
};
|
||||
|
||||
let messages = {
|
||||
|
@ -54,6 +54,7 @@ import {
|
||||
faTerminal, faWarehouse, faHome, faRocket,
|
||||
faRotate,
|
||||
faCloudArrowDown, faArrowsRotate,
|
||||
faPaintRoller,
|
||||
} from "@fortawesome/free-solid-svg-icons";
|
||||
|
||||
library.add(
|
||||
@ -109,6 +110,7 @@ library.add(
|
||||
faRotate,
|
||||
faCloudArrowDown,
|
||||
faArrowsRotate,
|
||||
faPaintRoller,
|
||||
);
|
||||
|
||||
export { FontAwesomeIcon };
|
||||
|
@ -20,6 +20,7 @@
|
||||
"updateStack": "Update",
|
||||
"startStack": "Start",
|
||||
"downStack": "Stop & Down",
|
||||
"rolloutStack": "Rollout Update (Zero Downtime)",
|
||||
"editStack": "Edit",
|
||||
"discardStack": "Discard",
|
||||
"saveStackDraft": "Save",
|
||||
|
94
frontend/src/lang/uk-UA.json
Normal file
94
frontend/src/lang/uk-UA.json
Normal file
@ -0,0 +1,94 @@
|
||||
{
|
||||
"languageName": "Українська",
|
||||
"Create your admin account": "Створити акаунт адміністратора",
|
||||
"authIncorrectCreds": "Невірний логін чи пароль",
|
||||
"PasswordsDoNotMatch": "Паролі не співпадають.",
|
||||
"Repeat Password": "Повторіть пароль",
|
||||
"Create": "Створити",
|
||||
"signedInDisp": "Авторизовано як {0}",
|
||||
"signedInDispDisabled": "Авторизацію вимкнено.",
|
||||
"home": "Головна",
|
||||
"console": "Консоль",
|
||||
"registry": "Registry",
|
||||
"compose": "Compose",
|
||||
"addFirstStackMsg": "Додайте свій перший стек!",
|
||||
"stackName" : "Назва стеку",
|
||||
"deployStack": "Розрознути",
|
||||
"deleteStack": "Видалити",
|
||||
"stopStack": "Зупинити",
|
||||
"restartStack": "Перезапустити",
|
||||
"updateStack": "Оновити",
|
||||
"startStack": "Запустити",
|
||||
"editStack": "Редагувати",
|
||||
"discardStack": "Відмінити",
|
||||
"saveStackDraft": "Зберегти",
|
||||
"notAvailableShort" : "Н/Д",
|
||||
"deleteStackMsg": "Ви впевнені що хочете видалити цей стек?",
|
||||
"stackNotManagedByDockgeMsg": "Даний стек не управляється Dockge.",
|
||||
"primaryHostname": "Назва хосту",
|
||||
"general": "Загальне",
|
||||
"container": "Контейнер | Контейнери",
|
||||
"scanFolder": "Сканувати папку зі стеками",
|
||||
"dockerImage": "Образ",
|
||||
"restartPolicyUnlessStopped": "Доки не буде зупинено",
|
||||
"restartPolicyAlways": "Завжди",
|
||||
"restartPolicyOnFailure": "При падінні",
|
||||
"restartPolicyNo": "Ніколи",
|
||||
"environmentVariable": "Змінна середовища | змінні середовища",
|
||||
"restartPolicy": "Перезапуск",
|
||||
"containerName": "Назва контейнеру",
|
||||
"port": "Порт | Порти",
|
||||
"volume": "Сховище | Сховища",
|
||||
"network": "Мережа | Мережі",
|
||||
"dependsOn": "Залежність контейнера | Залежності контейнеру",
|
||||
"addListItem": "Додати {0}",
|
||||
"deleteContainer": "Видалити",
|
||||
"addContainer": "Додати Контейнер",
|
||||
"addNetwork": "Додати Мережу",
|
||||
"disableauth.message1": "Ви впевнені що хочете <strong>вимкнути авторизацію</strong>?",
|
||||
"disableauth.message2": "Це призначено для сценаріїв, <strong>де ви збираєтесь використати сторонню авторизацію</strong> перед Dockge, наприклад Cloudflare Access, Authelia чи інші.",
|
||||
"passwordNotMatchMsg": "Паролі не співпадають.",
|
||||
"autoGet": "Отримати",
|
||||
"add": "Додати",
|
||||
"Edit": "Змінити",
|
||||
"applyToYAML": "Застосувати для YAML",
|
||||
"createExternalNetwork": "Створити",
|
||||
"addInternalNetwork": "Додати",
|
||||
"Save": "Зберегти",
|
||||
"Language": "Мова",
|
||||
"Current User": "Користувач",
|
||||
"Change Password": "Змінити пароль",
|
||||
"Current Password": "Поточний пароль",
|
||||
"New Password": "Новий пароль",
|
||||
"Repeat New Password": "Повторіть новий пароль",
|
||||
"Update Password": "Оновити пароль",
|
||||
"Advanced": "Розширені опції",
|
||||
"Please use this option carefully!": "Будь-ласка, використовуйте цю опцію з обережністю!",
|
||||
"Enable Auth": "Увімкнути автентифікацію",
|
||||
"Disable Auth": "Вимкнути автентифікацію",
|
||||
"I understand, please disable": "Зрозуміло, все-одно вимкнути",
|
||||
"Leave": "Покинути",
|
||||
"Frontend Version": "Версія інтерфейсу",
|
||||
"Check Update On GitHub": "Перевірити оновлення на GitHub",
|
||||
"Show update if available": "Показати оновлення, якщо доступно",
|
||||
"Also check beta release": "Перевіряти оновлення до бета-версії",
|
||||
"Remember me": "Запамʼятати мене",
|
||||
"Login": "Логін",
|
||||
"Username": "Імʼя користувача",
|
||||
"Password": "Пароль",
|
||||
"Settings": "Налаштування",
|
||||
"Logout": "Вийти",
|
||||
"Lowercase only": "Тільки нижній регістр",
|
||||
"Convert to Compose": "Конвертувати в Compose",
|
||||
"Docker Run": "Запустити Docker",
|
||||
"active": "активно",
|
||||
"exited": "завершено",
|
||||
"inactive": "неактивно",
|
||||
"Appearance": "Зовнішній вигляд",
|
||||
"Security": "Безпека",
|
||||
"About": "Про продукт",
|
||||
"Allowed commands:": "Дозволені команди:",
|
||||
"Internal Networks": "Внутрішні мережі",
|
||||
"External Networks": "Зовнішні мережі",
|
||||
"No External Networks": "Немає зовнішніх мереж"
|
||||
}
|
94
frontend/src/lang/zh-TW.json
Normal file
94
frontend/src/lang/zh-TW.json
Normal file
@ -0,0 +1,94 @@
|
||||
{
|
||||
"languageName": "繁體中文(台灣)",
|
||||
"Create your admin account": "建立您的管理員帳號",
|
||||
"authIncorrectCreds": "使用者名稱或密碼錯誤",
|
||||
"PasswordsDoNotMatch": "兩次輸入的密碼不一致。",
|
||||
"Repeat Password": "重複以確認密碼",
|
||||
"Create": "建立",
|
||||
"signedInDisp": "目前使用者:{0}",
|
||||
"signedInDispDisabled": "已停用身份驗證",
|
||||
"home": "首頁",
|
||||
"console": "主控台",
|
||||
"registry": "映像倉庫",
|
||||
"compose": "Compose",
|
||||
"addFirstStackMsg": "組合您的第一個堆疊!",
|
||||
"stackName": "堆疊名稱",
|
||||
"deployStack": "部署",
|
||||
"deleteStack": "刪除",
|
||||
"stopStack": "停止",
|
||||
"restartStack": "重啟",
|
||||
"updateStack": "更新",
|
||||
"startStack": "啟動",
|
||||
"editStack": "編輯",
|
||||
"discardStack": "捨棄",
|
||||
"saveStackDraft": "儲存",
|
||||
"notAvailableShort": "不可用",
|
||||
"deleteStackMsg": "您確定要刪除這個堆疊嗎?",
|
||||
"stackNotManagedByDockgeMsg": "這個堆疊不由 Dockge 管理",
|
||||
"primaryHostname": "主機名稱",
|
||||
"general": "一般",
|
||||
"container": "容器 | 容器群組",
|
||||
"scanFolder": "掃描堆疊資料夾",
|
||||
"dockerImage": "映像",
|
||||
"restartPolicyUnlessStopped": "除非手動停止",
|
||||
"restartPolicyAlways": "始終",
|
||||
"restartPolicyOnFailure": "在失敗時",
|
||||
"restartPolicyNo": "不重啟",
|
||||
"environmentVariable": "環境變數 | 環境變數群組",
|
||||
"restartPolicy": "重啟策略",
|
||||
"containerName": "容器名稱",
|
||||
"port": "連接埠 | 連接埠群組",
|
||||
"volume": "資料卷 | 資料卷群組",
|
||||
"network": "網路 | 網路群組",
|
||||
"dependsOn": "容器依賴 | 容器依賴關係",
|
||||
"addListItem": "新增 {0}",
|
||||
"deleteContainer": "刪除容器",
|
||||
"addContainer": "新增容器",
|
||||
"addNetwork": "新增網路",
|
||||
"disableauth.message1": "您確定要<strong>停用身份驗證</strong>嗎?",
|
||||
"disableauth.message2": "該選項設計用於某些場景,<strong>例如在 Dockge 之上接入第三方認證</strong>,如 Cloudflare Access、Authelia 或其他認證機制。如果您不清楚這個選項的作用,請不要停用驗證!",
|
||||
"passwordNotMatchMsg": "兩次輸入的密碼不一致。",
|
||||
"autoGet": "自動取得",
|
||||
"add": "新增",
|
||||
"Edit": "編輯",
|
||||
"applyToYAML": "應用到YAML",
|
||||
"createExternalNetwork": "建立",
|
||||
"addInternalNetwork": "新增",
|
||||
"Save": "儲存",
|
||||
"Language": "語言",
|
||||
"Current User": "目前使用者",
|
||||
"Change Password": "更換密碼",
|
||||
"Current Password": "目前密碼",
|
||||
"New Password": "新密碼",
|
||||
"Repeat New Password": "重複以確認新密碼",
|
||||
"Update Password": "更新密碼",
|
||||
"Advanced": "進階",
|
||||
"Please use this option carefully!": "請謹慎使用該選項!",
|
||||
"Enable Auth": "啟用驗證",
|
||||
"Disable Auth": "停用驗證",
|
||||
"I understand, please disable": "我已了解風險,確認停用",
|
||||
"Leave": "離開",
|
||||
"Frontend Version": "前端版本",
|
||||
"Check Update On GitHub": "在 GitHub 上檢查更新",
|
||||
"Show update if available": "有更新時提醒我",
|
||||
"Also check beta release": "同時檢查 Beta 渠道更新",
|
||||
"Remember me": "記住我",
|
||||
"Login": "登入",
|
||||
"Username": "使用者名稱",
|
||||
"Password": "密碼",
|
||||
"Settings": "設定",
|
||||
"Logout": "登出",
|
||||
"Lowercase only": "僅小寫字母",
|
||||
"Convert to Compose": "轉換為 Compose 格式",
|
||||
"Docker Run": "Docker 啟動",
|
||||
"active": "已啟動",
|
||||
"exited": "已退出",
|
||||
"inactive": "未啟動",
|
||||
"Appearance": "外觀",
|
||||
"Security": "安全",
|
||||
"About": "關於",
|
||||
"Allowed commands:": "允許使用的指令:",
|
||||
"Internal Networks": "內部網路",
|
||||
"External Networks": "外部網路",
|
||||
"No External Networks": "無外部網路"
|
||||
}
|
@ -41,11 +41,15 @@
|
||||
{{ $t("stopStack") }}
|
||||
</button>
|
||||
|
||||
<BDropdown v-if="!isEditMode && active" right text="" variant="normal">
|
||||
<BDropdownItem @click="downStack">
|
||||
<BDropdown v-if="!isEditMode || active" right text="" variant="normal">
|
||||
<BDropdownItem v-if="!isEditMode" @click="downStack">
|
||||
<font-awesome-icon icon="stop" class="me-1" />
|
||||
{{ $t("downStack") }}
|
||||
</BDropdownItem>
|
||||
<BDropdownItem v-if="active" @click="rolloutStack">
|
||||
<font-awesome-icon icon="paint-roller" class="me-1" />
|
||||
{{ $t("rolloutStack") }} <span class="badge bg-info">Beta</span>
|
||||
</BDropdownItem>
|
||||
</BDropdown>
|
||||
</div>
|
||||
|
||||
@ -486,6 +490,15 @@ export default {
|
||||
});
|
||||
},
|
||||
|
||||
rolloutStack() {
|
||||
this.processing = true;
|
||||
|
||||
this.$root.getSocket().emit("rolloutStack", this.stack.name, (res) => {
|
||||
this.processing = false;
|
||||
this.$root.toastRes(res);
|
||||
});
|
||||
},
|
||||
|
||||
downStack() {
|
||||
this.processing = true;
|
||||
|
||||
|
Reference in New Issue
Block a user