diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index f08bc9c..6b26209 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -14,7 +14,7 @@ jobs: - name: Install Hugo uses: peaceiris/actions-hugo@v2 with: - hugo-version: 'latest' + hugo-version: '0.135.0' - name: Add SSH key to agent run: | diff --git a/content/Technical Support/_index.en.md b/content/Technical Support/_index.en.md index c82e746..b59b948 100644 --- a/content/Technical Support/_index.en.md +++ b/content/Technical Support/_index.en.md @@ -11,14 +11,6 @@ We can help you install RustDesk using supported methods as documented here. We may give pointers, or provide additional troubleshooting steps if we believe your issue may be related to a recent update or bug. -### Commercial Support - -Paid Support: You can [email](mailto:support@rustdesk.com) to get started. - -We can help with lots of problems, installations and configurations. Fully managed hosted servers are also available as well as monthly support packages. - -You get Priority #1 fast responses and service. - ### Ticket for Pro User -Please post the ticket on https://github.com/rustdesk/rustdesk-server-pro/discussions, it is more efficient for us to communicate and track issue there than email. +Please post the ticket on https://github.com/rustdesk/rustdesk-server-pro/discussions, it is more efficient for us to communicate and track issue there than [email](mailto:support@rustdesk.com). diff --git a/content/_index.en.md b/content/_index.en.md index 9b2ab05..36333bc 100644 --- a/content/_index.en.md +++ b/content/_index.en.md @@ -5,7 +5,7 @@ weight: 1 # RustDesk Documentation -RustDesk is a full-featured open source remote control alternative for self-hosting and security with minimal configuration. You have full control of your data, with no concerns about security. The Client is open source and theres a choice between the fully featured **Professional Server** available to purchase on our [website](https://rustdesk.com) and the basic free and OSS Server based on our **Professional Server**. +RustDesk is a full-featured open source remote control alternative for self-hosting and security with minimal configuration. You have full control of your data, with no concerns about security. The Client is open source and there's a choice between the fully featured **Professional Server** available to purchase on our [website](https://rustdesk.com) and the basic free and OSS Server based on our **Professional Server**. ### Features - Works on Windows, macOS, Linux, iOS, Android, Web. diff --git a/content/dev/build/linux/_index.de.md b/content/dev/build/linux/_index.de.md index e9c7249..2fd1719 100644 --- a/content/dev/build/linux/_index.de.md +++ b/content/dev/build/linux/_index.de.md @@ -3,25 +3,6 @@ title: Linux weight: 10 --- -### Abhängigkeiten - -Desktop-Versionen nutzen [Sciter](https://sciter.com/) für die Benutzeroberfläche, bitte laden Sie die dynamische Bibliothek Sciter selbst herunter. - -[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) | -[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) | -[macOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib) - -### Grobe Schritte zum Erstellen - -- Bereiten Sie Ihre Rust-Entwicklungsumgebung und Ihre C++-Build-Umgebung vor - -- Installieren Sie [vcpkg](https://github.com/microsoft/vcpkg) und setzen Sie die Umgebungsvariable `VCPKG_ROOT` korrekt - - - Windows: `vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static` - - Linux/macOS: `vcpkg install - -- Nutzen Sie `cargo run` - ### Auf Linux erstellen #### Ubuntu 18 (Debian 10) @@ -80,9 +61,3 @@ mv libsciter-gtk.so target/debug # Note: VCPKG_ROOT still set cargo run ``` - -#### Wayland zu X11 ändern (Xorg) - -~~RustDesk unterstützt Wayland nicht.~~ Lesen Sie diese [Anleitung](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/), um Xorg als Standard-GNOME-Sitzung zu konfigurieren. - -RustDesk unterstützt jetzt experimentell Wayland. Um dieses Feature zu aktivieren, müssen Sie möglicherweise die [Nightly-Version](https://github.com/rustdesk/rustdesk/releases/tag/nightly) herunterladen. diff --git a/content/dev/build/linux/_index.en.md b/content/dev/build/linux/_index.en.md index fd843c3..d7ea5d8 100644 --- a/content/dev/build/linux/_index.en.md +++ b/content/dev/build/linux/_index.en.md @@ -3,25 +3,6 @@ title: Linux weight: 10 --- -### Dependencies - -Desktop versions use [Sciter](https://sciter.com/) for GUI, please download Sciter dynamic library yourself. - -[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) | -[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) | -[macOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib) - -### Raw steps to build - -- Prepare your Rust development env and C++ build env - -- Install [vcpkg](https://github.com/microsoft/vcpkg) and set `VCPKG_ROOT` env variable correctly - - - Windows: `vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static` - - Linux/macOS: `vcpkg install - -- Run `cargo run` - ### How to build on Linux #### Ubuntu 18 (Debian 10) @@ -81,9 +62,4 @@ mv libsciter-gtk.so target/debug cargo run ``` -#### Change Wayland to X11 (Xorg) - -~~RustDesk does not support Wayland.~~ Check this [guide](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) to configuring Xorg as the default GNOME session. - -RustDesk now has experimental Wayland support. You may need to download the [nightly version](https://github.com/rustdesk/rustdesk/releases/tag/nightly) to enable this feature. diff --git a/content/dev/build/linux/_index.es.md b/content/dev/build/linux/_index.es.md index a37b4ce..bc67adc 100644 --- a/content/dev/build/linux/_index.es.md +++ b/content/dev/build/linux/_index.es.md @@ -3,25 +3,6 @@ title: Linux weight: 10 --- -## Dependencias - -Uso de versiones de escritorio [sciter](https://sciter.com/) para GUI, descargue la biblioteca dinámica sciter usted mismo. - -[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) | -[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) | -[MacOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib) - -## Pasos para construir - -- Prepare su entorno de desarrollo de Rust y el entorno de compilación de C++ - -- Instalar [vcpkg](https://github.com/microsoft/vcpkg), y establecer `VCPKG_ROOT` variable env correctamente - - - Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static - - Linux/MacOS: vcpkg install - -- run `cargo run` - ## Cómo construir en Linux ### Ubuntu 18 (Debian 10) @@ -80,7 +61,3 @@ mv libsciter-gtk.so target/debug # Note: VCPKG_ROOT still set cargo run ``` - -### Cambiar Wayland a X11 (Xorg) - -RustDesk no es compatible con Wayland. Verificar [this](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) para configurar Xorg como la sesión de GNOME predeterminada. diff --git a/content/dev/build/linux/_index.fr.md b/content/dev/build/linux/_index.fr.md index 7423ba4..8b6bef3 100644 --- a/content/dev/build/linux/_index.fr.md +++ b/content/dev/build/linux/_index.fr.md @@ -3,25 +3,6 @@ title: Linux weight: 10 --- -## Dépendances - -Les versions de bureau utilisent [sciter](https://sciter.com/) pour l'interface graphique, veuillez télécharger la bibliothèque dynamique sciter vous-même. - -[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) | -[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) -[macOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib) - -## Étapes brutes de la compilation/build - -- Préparez votre environnement de développement Rust et votre environnement de compilation C++. - -- Installez [vcpkg](https://github.com/microsoft/vcpkg), et définissez correctement la variable d'environnement `VCPKG_ROOT`. - - - Windows : vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static - - Linux/Osx : vcpkg install - -- Exécuter `cargo run` - ## Comment compiler/build sous Linux ### Ubuntu 18 (Debian 10) @@ -80,7 +61,3 @@ mv libsciter-gtk.so target/debug # Note: VCPKG_ROOT still set cargo run ``` - -### Changer Wayland en X11 (Xorg) - -RustDesk ne supporte pas Wayland. Lisez [cela](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) pour configurer Xorg comme la session GNOME par défaut. diff --git a/content/dev/build/linux/_index.it.md b/content/dev/build/linux/_index.it.md index 40e36f1..50e9c87 100644 --- a/content/dev/build/linux/_index.it.md +++ b/content/dev/build/linux/_index.it.md @@ -3,25 +3,6 @@ title: Linux weight: 10 --- -## Dipendenze - -La versione Desktop utilizza [sciter](https://sciter.com/) per la GUI, per favore scarica sciter dynamic library. - -[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) | -[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) | -[MacOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib) - -## Passaggi per la compilazione - -- Prepara l'ambiente per lo sviluppo e compilazione in Rust e C++ - -- Installa [vcpkg](https://github.com/microsoft/vcpkg), e imposta correttamente la variabile d'ambiente `VCPKG_ROOT` - - - Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static - - Linux/MacOS: vcpkg install - -- Esegui `cargo run` - ## Come compilare su Linux ### Ubuntu 18 (Debian 10) @@ -80,7 +61,3 @@ mv libsciter-gtk.so target/debug # Note: VCPKG_ROOT still set cargo run ``` - -### Cambiare Wayland a X11 (Xorg) - -RustDesk non supporta Wayland. Controlla [questo](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) per configurare Xorg come sessione di default di GNOME. diff --git a/content/dev/build/linux/_index.ja.md b/content/dev/build/linux/_index.ja.md index 96d6b89..b904bb5 100644 --- a/content/dev/build/linux/_index.ja.md +++ b/content/dev/build/linux/_index.ja.md @@ -3,26 +3,6 @@ title: Linux weight: 10 --- - -## 依存関係 - -デスクトップ版ではGUIに [sciter](https://sciter.com/) が使われています。 sciter dynamic library をダウンロードしてください。 - -[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) | -[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) | -[MacOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib) - -## ビルド手順 - -- Rust開発環境とC ++ビルド環境を準備します - -- [vcpkg](https://github.com/microsoft/vcpkg), をインストールし、 `VCPKG_ROOT` 環境変数を正しく設定します。 - - - Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static - - Linux/MacOS: vcpkg install - -- run `cargo run` - ## Linuxでのビルド手順 ### Ubuntu 18 (Debian 10) @@ -81,8 +61,3 @@ mv libsciter-gtk.so target/debug # Note: VCPKG_ROOT still set cargo run ``` - -### Wayland の場合、X11(Xorg)に変更します - -RustDeskはWaylandをサポートしていません。 - [こちら](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) を確認して、XorgをデフォルトのGNOMEセッションとして構成します。 diff --git a/content/dev/build/linux/_index.nl.md b/content/dev/build/linux/_index.nl.md index c0836f3..d8a8926 100644 --- a/content/dev/build/linux/_index.nl.md +++ b/content/dev/build/linux/_index.nl.md @@ -3,25 +3,6 @@ title: Linux weight: 10 --- -## Afhankelijkheden - -Desktop versies gebruiken [sciter](https://sciter.com/) voor GUI, download dan zelf de sciter dynamische bibliotheek. - -[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) | -[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) | -[MacOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib) - -## Ruwe build stappen - -- Bereid uw Rust ontwikkelomgeving en C++ build omgeving voor - -- Installeer [vcpkg](https://github.com/microsoft/vcpkg), en stel `VCPKG_ROOT` omgevingsvariabele correct - - - Windows: vcpkg installeer libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static - - Linux/MacOS: vcpkg install - -- run `cargo run` - ## Build op Linux ### Ubuntu 18 (Debian 10) @@ -80,7 +61,3 @@ mv libsciter-gtk.so target/debug # Note: VCPKG_ROOT still set cargo run ``` - -### Verander Wayland in X11 (Xorg) - -RustDesk ondersteunt Wayland niet. Controleer [dit](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) om Xorg te configureren als de standaard GNOME sessie. diff --git a/content/dev/build/linux/_index.pt.md b/content/dev/build/linux/_index.pt.md index be06f9b..5ac613d 100644 --- a/content/dev/build/linux/_index.pt.md +++ b/content/dev/build/linux/_index.pt.md @@ -3,25 +3,6 @@ title: Linux weight: 10 --- -## Dependências - -Versões de desktop utilizam [sciter](https://sciter.com/) para a GUI, por favor baixe a biblioteca dinâmica sciter por conta própria. - -[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) | -[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) | -[MacOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib) - -## Compilação crua - -- Prepare seu ambiente de desenvolvimento Rust e ambiente de compilação C++ - -- Instale [vcpkg](https://github.com/microsoft/vcpkg), e configure a variável de ambiente `VCPKG_ROOT` corretamente - - - Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static - - Linux/MacOS: vcpkg install - -- Execute `cargo run` - ## Como compilar no Linux ### Ubuntu 18 (Debian 10) @@ -80,7 +61,3 @@ mv libsciter-gtk.so target/debug # Note: VCPKG_ROOT still set cargo run ``` - -### Mude Wayland para X11 (Xorg) - -RustDesk não suporta Wayland. Veja [esse link](https://docs.fedoraproject.org/pt_BR/quick-docs/configuring-xorg-as-default-gnome-session/) para configurar o Xorg como a sessão padrão do GNOME. diff --git a/content/dev/build/linux/_index.ru.md b/content/dev/build/linux/_index.ru.md index 7312344..aca7081 100644 --- a/content/dev/build/linux/_index.ru.md +++ b/content/dev/build/linux/_index.ru.md @@ -3,26 +3,6 @@ title: Linux weight: 10 --- - -## Зависимости - -Настольные версии используют [sciter](https://sciter.com/) для графического интерфейса, загрузите динамическую библиотеку sciter самостоятельно. - -[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) | -[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) | -[MacOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib) - -## Первичные шаги для сборки - -- Подготовьте среду разработки Rust и среду сборки C++. - -- Установите [vcpkg](https://github.com/microsoft/vcpkg), и правильно установите переменную `VCPKG_ROOT` - - - Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static - - Linux/MacOS: vcpkg install - -- Запустите`cargo run` - ## Как собрать в Linux ### Ubuntu 18 (Debian 10) @@ -81,7 +61,3 @@ mv libsciter-gtk.so target/debug # Note: VCPKG_ROOT still set cargo run ``` - -### Смените Wayland на X11 (Xorg) - -RustDesk не поддерживает Wayland. Смотрите [этот документ](https://docs.fedoraproject.org/ru/quick-docs/configuring-xorg-as-default-gnome-session/) для настройки Xorg в качестве сеанса GNOME по умолчанию. diff --git a/content/dev/build/linux/_index.zh-cn.md b/content/dev/build/linux/_index.zh-cn.md index a2023f3..c9e16ac 100644 --- a/content/dev/build/linux/_index.zh-cn.md +++ b/content/dev/build/linux/_index.zh-cn.md @@ -3,25 +3,6 @@ title: Linux weight: 10 --- -## 依赖 - -桌面版本界面使用[sciter](https://sciter.com/), 请自行下载。 - -[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) | -[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) | -[macOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib) - -## 基本构建步骤 - -- 请准备好 Rust 开发环境和 C++编译环境 - -- 安装[vcpkg](https://github.com/microsoft/vcpkg), 正确设置`VCPKG_ROOT`环境变量 - - - Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static - - Linux/Osx: vcpkg install - -- 运行 `cargo run` - ## 在 Linux 上编译 ### Ubuntu 18 (Debian 10) @@ -80,8 +61,3 @@ mv libsciter-gtk.so target/debug # Note: VCPKG_ROOT still set cargo run ``` - -### 把 Wayland 修改成 X11 (Xorg) - -RustDesk 暂时不支持 Wayland,不过正在积极开发中. -请查看[this](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/)配置 X11. diff --git a/content/dev/build/linux/_index.zh-tw.md b/content/dev/build/linux/_index.zh-tw.md index 3e0a7e2..b72ce4c 100644 --- a/content/dev/build/linux/_index.zh-tw.md +++ b/content/dev/build/linux/_index.zh-tw.md @@ -3,25 +3,6 @@ title: Linux weight: 10 --- -## 依賴 - -桌面版本界面使用[sciter](https://sciter.com/), 請自行下載。 - -[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) | -[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) | -[macOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib) - -## 基本構建步驟 - -- 請準備好 Rust 開發環境和 C++編譯環境 - -- 安裝[vcpkg](https://github.com/microsoft/vcpkg), 正確設置`VCPKG_ROOT`環境變量 - - - Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static - - Linux/Osx: vcpkg install - -- 運行 `cargo run` - ## 在 Linux 上編譯 ### Ubuntu 18 (Debian 10) @@ -80,8 +61,3 @@ mv libsciter-gtk.so target/debug # Note: VCPKG_ROOT still set cargo run ``` - -### 把 Wayland 修改成 X11 (Xorg) - -RustDesk 暫時不支持 Wayland,不過正在積極開發中. -請查看[this](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/)配置 X11. diff --git a/content/self-host/_index.en.md b/content/self-host/_index.en.md index bbe2657..2746a9d 100755 --- a/content/self-host/_index.en.md +++ b/content/self-host/_index.en.md @@ -8,6 +8,29 @@ If you are using RustDesk you should have your own RustDesk Server, these docs w Support is available via our [Discord](https://discord.com/invite/nDceKgxnkV) for OSS and [email](mailto:support@rustdesk.com) for Pro. +### How does self-hosted server work? + +There are technically two executables (servers): + +- `hbbs` - RustDesk ID (rendezvous / signaling) server, listen on TCP (`21114` - for http in Pro only, `21115`, `21116`, `21118` for web socket) and UDP (`21116`) +- `hbbr` - RustDesk relay server, listen on TCP (`21117`, `21119` for web socket) + +When you install via installation script / docker compose / deb, the two services will be both installed. + +Here is [illustrations](https://github.com/rustdesk/rustdesk/wiki/How-does-RustDesk-work%3F) of how RustDesk client communicates with `hbbr` / `hbbs`. + +As long as RustDesk is running on a machine, the machine constantly pings the ID server (`hbbs`) to make its current IP address and port known. + +When you start a connection from computer A to computer B, computer A contacts the ID server and requests to communicate with computer B. + +The ID server then attempts to connect A and B directly to each other using hole punching. + +If hole punching fails, A will communicate with B via the relay server (`hbbr`). + +In the majority of cases, hole punching is successful, and the relay server is never used. + +Here is a discussion about [Should you self-host a rustdesk server?](https://www.reddit.com/r/rustdesk/comments/1cr8kfv/should_you_selfhost_a_rustdesk_server/) + ### Basic Setup [Set up your own server instance manually.](https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/install/#set-up-your-own-server-instance-manually) diff --git a/content/self-host/client-configuration/advanced-settings/_index.de.md b/content/self-host/client-configuration/advanced-settings/_index.de.md index 6d81bdf..bef5407 100644 --- a/content/self-host/client-configuration/advanced-settings/_index.de.md +++ b/content/self-host/client-configuration/advanced-settings/_index.de.md @@ -316,7 +316,20 @@ Eingehende Sitzungen automatisch aufzeichnen. | Installation erforderlich | Werte | Standard | Beispiel | | :------: | :------: | :------: | :------: | -| N | Y, N | N | `allow-auto-record-incoming=N` | +| N | Y, N | N | `allow-auto-record-incoming=Y` | + +### allow-auto-record-outgoing + +Ausgehende Sitzungen automatisch aufzeichnen. + +**Position**: + +1. **Desktop** Einstellungen → Allgemein → Aufnahme → Ausgehende Sitzungen automatisch aufzeichnen +2. **Mobil** Einstellungen → Aufnahme → Ausgehende Sitzungen automatisch aufzeichnen + +| Installation erforderlich | Werte | Standard | Beispiel | Version | +| :------: | :------: | :------: | :------: | :------: | +| N | Y, N | N | `allow-auto-record-outgoing=Y` | >= 1.3.2 | ### video-save-directory diff --git a/content/self-host/client-configuration/advanced-settings/_index.en.md b/content/self-host/client-configuration/advanced-settings/_index.en.md index 285cc1a..b2fdb65 100644 --- a/content/self-host/client-configuration/advanced-settings/_index.en.md +++ b/content/self-host/client-configuration/advanced-settings/_index.en.md @@ -146,7 +146,7 @@ Allow the control side to change the settings in controlled RustDesk UI. | Install required | Values | Default | Example | | :------: | :------: | :------: | :------: | -| N | Y, N | Y | `allow-remote-config-modification=Y` | +| N | Y, N | N | `allow-remote-config-modification=Y` | ### enable-lan-discovery @@ -242,6 +242,14 @@ Accept incoming connections via password or manually click. | :------: | :------: | :------: | :------: | | N | password, click, password-click | password-click | `approve-mode=password-click` | +### verification-method + +What type of password can be used, `temporary password` refers to the one-time random password. + +| Install required | Values | Default | Example | +| :------: | :------: | :------: | :------: | +| N | use-temporary-password, use-permanent-password, use-both-passwords | use-both-passwords | `verification-method=use-permanent-password` | + ### proxy-url The proxy URL. @@ -318,7 +326,20 @@ Automatically record incoming sessions. | Install required | Values | Default | Example | | :------: | :------: | :------: | :------: | -| N | Y, N | N | `allow-auto-record-incoming=N` | +| N | Y, N | N | `allow-auto-record-incoming=Y` | + +### allow-auto-record-outgoing + +Automatically record outgoing sessions. + +**Location**: + +1. **Desktop** Settings → General → Recording → Automatically record outgoing sessions +2. **Mobile** Settings → Recording → Automatically record outgoing sessions + +| Install required | Values | Default | Example | Version | +| :------: | :------: | :------: | :------: | :------: | +| N | Y, N | N | `allow-auto-record-outgoing=Y` | >= 1.3.2 | ### video-save-directory @@ -1078,3 +1099,46 @@ https://github.com/rustdesk/rustdesk-server-pro/issues/332 | Values | Default | Example | | :------: | :------: | :------: | | Y, N | N | `hide-tray=Y` | + +### one-way-clipboard-redirection + +Disable clipboard sync from controlled side to controlling side, available in RustDesk client >=1.3.1 (controlled side) + +https://github.com/rustdesk/rustdesk/discussions/7837 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `one-way-clipboard-redirection=Y` | + +### one-way-file-transfer + +Disable file transfer from controlled side to controlling side, available in RustDesk client >=1.3.1 (controlled side) + +https://github.com/rustdesk/rustdesk/discussions/7837 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `one-way-file-transfer=Y` | + + +### sync-init-clipboard + +If sync initial clipboard when establishing connection (only from controlling side to controlled side), available in RustDesk client >=1.3.1 (controlling side) + +https://github.com/rustdesk/rustdesk/discussions/9010 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `sync-init-clipboard=Y` | + +### allow-logon-screen-password + +If allow password input on logon screen when [click-only approve mode](https://rustdesk.com/docs/en/self-host/client-configuration/advanced-settings/#approve-mode) is used, available in RustDesk client >=1.3.1 (controlled side) + +https://github.com/rustdesk/rustdesk/discussions/9269 + +| Values | Default | Example | +| :------: | :------: | :------: | +| Y, N | N | `allow-logon-screen-password=Y` | + + diff --git a/content/self-host/client-configuration/advanced-settings/_index.pt.md b/content/self-host/client-configuration/advanced-settings/_index.pt.md index 0d6818d..813db90 100644 --- a/content/self-host/client-configuration/advanced-settings/_index.pt.md +++ b/content/self-host/client-configuration/advanced-settings/_index.pt.md @@ -318,7 +318,20 @@ Gravar automaticamente sessões recebidas. | Instalação necessária | Valores | Padrão | Exemplo | | :------: | :------: | :------: | :------: | -| N | Y, N | N | `allow-auto-record-incoming=N` | +| N | Y, N | N | `allow-auto-record-incoming=Y` | + +### allow-auto-record-outgoing + +Grave automaticamente sessões de saída. + +**Localização**: + +1. **Desktop**: Configurações → Geral → Gravação → Grave automaticamente sessões de saída +2. **Mobile**: Configurações → Gravação → Grave automaticamente sessões de saída + +| Instalação necessária | Valores | Padrão | Exemplo | Versão | +| :------: | :------: | :------: | :------: | :------: | +| N | Y, N | N | `allow-auto-record-outgoing=Y` | >= 1.3.2 | ### video-save-directory diff --git a/content/self-host/client-configuration/advanced-settings/_index.zh-cn.md b/content/self-host/client-configuration/advanced-settings/_index.zh-cn.md index f9c0f4e..d76e161 100644 --- a/content/self-host/client-configuration/advanced-settings/_index.zh-cn.md +++ b/content/self-host/client-configuration/advanced-settings/_index.zh-cn.md @@ -150,7 +150,7 @@ weight: 49 允许局域网发现。 -局域网法相后, 如果支持 [WOL](https://en.wikipedia.org/wiki/Wake-on-LAN) , 则可使用 WOL 。 +局域网发现后, 如果支持 [WOL](https://en.wikipedia.org/wiki/Wake-on-LAN) , 则可使用 WOL 。 **位置**: @@ -240,6 +240,14 @@ IP 直接访问的端口。 | :------: | :------: | :------: | :------: | | N | password, click, password-click | password-click | `approve-mode=password-click` | +### verification-method + +可以使用什么类型的密码,“临时密码”是指一次性随机密码。 + +| 是否需要安装 | 可设值 | 默认值 | 示例 | +| :------: | :------: | :------: | :------: | +| N | use-temporary-password, use-permanent-password, use-both-passwords | use-both-passwords | `verification-method=use-permanent-password` | + ### proxy-url 代理的 url 。 @@ -307,16 +315,29 @@ ar, bg, ca, cs, da, de, el, en, eo, es, et, fa, fr, he, hr, hu, id, it, ja, ko, ### allow-auto-record-incoming -自动录制来访会话。 +自动录制传入会话。 **位置**: -1. **桌面端** 设置 -> 常规 -> 录屏 -> 自动录制来访会话 -1. **移动端** 设置 -> 录屏 -> 自动录制来访会话 +1. **桌面端** 设置 -> 常规 -> 录屏 -> 自动录制传入会话 +1. **移动端** 设置 -> 录屏 -> 自动录制传入会话 | 是否需要安装 | 可设值 | 默认值 | 示例 | | :------: | :------: | :------: | :------: | -| N | Y, N | N | `allow-auto-record-incoming=N` | +| N | Y, N | N | `allow-auto-record-incoming=Y` | + +### allow-auto-record-outgoing + +自动录制传出会话。 + +**位置**: + +1. **桌面端** 设置 -> 常规 -> 录屏 -> 自动录制传出会话 +1. **移动端** 设置 -> 录屏 -> 自动录制传出会话 + +| 是否需要安装 | 可设值 | 默认值 | 示例 | 版本 | +| :------: | :------: | :------: | :------: | :------: | +| N | Y, N | N | `allow-auto-record-outgoing=Y` | >= 1.3.2 | ### video-save-directory @@ -1066,4 +1087,4 @@ https://github.com/rustdesk/rustdesk/discussions/8513#discussioncomment-10234494 | 可设值 | 默认值 | 示例 | | :------: | :------: | :------: | -| Y, N | Y | `enable-trusted-devices=N` | \ No newline at end of file +| Y, N | Y | `enable-trusted-devices=N` | diff --git a/content/self-host/client-deployment/_index.en.md b/content/self-host/client-deployment/_index.en.md index cca269d..53f87b6 100644 --- a/content/self-host/client-deployment/_index.en.md +++ b/content/self-host/client-deployment/_index.en.md @@ -14,7 +14,7 @@ The permanent password can be changed from random to one you prefer using by cha ### PowerShell -```ps +```powershell $ErrorActionPreference= 'silentlycontinue' # Assign the value random password to the password variable @@ -186,6 +186,17 @@ You can also use msi instead of `rustdesk.exe --silent-install`. https://rustdesk.com/docs/en/client/windows/msi/ + +### Winget + +you can deploy via powershell with winget as well (this installs via microsofts version of apt - part of most recent windows installs) + +from a powershell window or via script (for example via GPO) + +``` +winget install --id=RustDesk.RustDesk -e +``` + ### macOS Bash ```sh diff --git a/content/self-host/rustdesk-server-oss/Docker/_index.de.md b/content/self-host/rustdesk-server-oss/Docker/_index.de.md index 7b2ff71..8533813 100644 --- a/content/self-host/rustdesk-server-oss/Docker/_index.de.md +++ b/content/self-host/rustdesk-server-oss/Docker/_index.de.md @@ -17,7 +17,7 @@ Standardmäßig lauscht `hbbs` auf 21114 (TCP für die Webkonsole, nur in der Pr ```sh sudo docker image pull rustdesk/rustdesk-server -sudo docker run --name hbbs -v ./data:/root -td --net=host rustdesk/rustdesk-server hbbs -r +sudo docker run --name hbbs -v ./data:/root -td --net=host rustdesk/rustdesk-server hbbs sudo docker run --name hbbr -v ./data:/root -td --net=host rustdesk/rustdesk-server hbbr ``` diff --git a/content/self-host/rustdesk-server-oss/Docker/_index.en.md b/content/self-host/rustdesk-server-oss/Docker/_index.en.md index cacfb30..1dcd1cd 100644 --- a/content/self-host/rustdesk-server-oss/Docker/_index.en.md +++ b/content/self-host/rustdesk-server-oss/Docker/_index.en.md @@ -6,7 +6,7 @@ weight: 7 ### Install your own server with Docker #### Requirements -You need to have Docker/Podman installed to run a rustdesk-server as a Docker container, if in doubt install Docker with this [guide](https://docs.docker.com/engine/install) to ensure its the most up to date! +You need to have Docker/Podman installed to run a rustdesk-server as a Docker container. If in doubt, install Docker with this [guide](https://docs.docker.com/engine/install) to ensure it's the most up to date! By default, `hbbs` listens on 21114 (TCP, for web console, only available in Pro version), 21115 (TCP), 21116 (TCP/UDP) and 21118 (TCP), `hbbr` listens on 21117 (TCP) and 21119 (TCP). Be sure to open these ports in the firewall. **Please note that 21116 should be enabled both for TCP and UDP.** 21115 is used for the NAT type test, 21116/UDP is used for the ID registration and heartbeat service, 21116/TCP is used for TCP hole punching and connection service, 21117 is used for the Relay services, and 21118 and 21119 are used to support web clients. *If you do not need web client (21118, 21119) support, the corresponding ports can be disabled.* @@ -17,7 +17,7 @@ By default, `hbbs` listens on 21114 (TCP, for web console, only available in Pro ```sh sudo docker image pull rustdesk/rustdesk-server -sudo docker run --name hbbs -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs -r +sudo docker run --name hbbs -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs sudo docker run --name hbbr -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr ``` @@ -30,7 +30,7 @@ If `--net=host` works fine, the `-p` options are not used. If on Windows, leave {{% /notice %}} {{% notice note %}} -If you can not see logs with `-td`, you can see logs via `docker logs hbbs`. Or you can run with `-it`, `hbbs/hbbr` will not run as daemon mode. +If you cannot see logs with `-td`, you can see logs via `docker logs hbbs`. Or you can run with `-it`, `hbbs/hbbr` will not run as daemon mode. {{% /notice %}} #### Docker Compose examples diff --git a/content/self-host/rustdesk-server-oss/Docker/_index.pt.md b/content/self-host/rustdesk-server-oss/Docker/_index.pt.md index 667c93a..7b35319 100644 --- a/content/self-host/rustdesk-server-oss/Docker/_index.pt.md +++ b/content/self-host/rustdesk-server-oss/Docker/_index.pt.md @@ -25,7 +25,7 @@ Por padrão, o `hbbs` escuta nas portas 21114 (TCP, para console web, disponíve ```sh sudo docker image pull rustdesk/rustdesk-server -sudo docker run --name hbbs -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs -r +sudo docker run --name hbbs -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs sudo docker run --name hbbr -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr ``` diff --git a/content/self-host/rustdesk-server-oss/aapanel/_index.zh-cn.md b/content/self-host/rustdesk-server-oss/aapanel/_index.zh-cn.md new file mode 100644 index 0000000..1f6d0fd --- /dev/null +++ b/content/self-host/rustdesk-server-oss/aapanel/_index.zh-cn.md @@ -0,0 +1,24 @@ +--- +title: 宝塔面板 +weight: 40 +--- +本手册基于宝塔面板正式版 9.2.0 +## 前提 +已安装宝塔面板正式版,前往[宝塔面板](https://www.bt.cn/new/index.html)官网,选择对应的脚本下载安装 + +## 部署 +步骤一:登录宝塔面板,在菜单栏中点击 `Docker` + +步骤二:首次会提示安装`Docker`和`Docker Compose`服务,点击立即安装,若已安装请忽略。 + +步骤三:安装完成后在`Docker-应用商店-实用工具`中找到 `RustDesk`,点击`安装` + +步骤四:设置域名等基本信息,点击`确定` +- 名称:应用名称,默认`RustDesk-随机字符` +- 版本选择:默认`1.1.11` +- 允许外部访问:请勾选。 +- 端口:默认情况下,hbbs 监听21115(tcp), 21116(tcp/udp), 21118(tcp),hbbr 监听21117(tcp), 21119(tcp)。务必在防火墙开启这几个端口, 请注意21116同时要开启TCP和UDP。其中21115是hbbs用作NAT类型测试,21116/UDP是hbbs用作ID注册与心跳服务,21116/TCP是hbbs用作TCP打洞与连接服务,21117是hbbr用作中继服务, 21118和21119是为了支持网页客户端。如果您不需要网页客户端(21118,21119)支持,对应端口可以不开。 +- CPU 核心数限制:0为不限制,可根据需要进行修改 +- 内存限制:0为不限制,可根据需要进行修改 + +步骤五:提交后面板会自动进行应用初始化,大概需要`1-3`分钟,初始化完成后即可使用。 diff --git a/content/self-host/rustdesk-server-oss/aapanel/images/Docker.png b/content/self-host/rustdesk-server-oss/aapanel/images/Docker.png new file mode 100644 index 0000000..ae68589 Binary files /dev/null and b/content/self-host/rustdesk-server-oss/aapanel/images/Docker.png differ diff --git a/content/self-host/rustdesk-server-oss/aapanel/images/config-Rustdesk.png b/content/self-host/rustdesk-server-oss/aapanel/images/config-Rustdesk.png new file mode 100644 index 0000000..44ecbce Binary files /dev/null and b/content/self-host/rustdesk-server-oss/aapanel/images/config-Rustdesk.png differ diff --git a/content/self-host/rustdesk-server-oss/aapanel/images/install-Docker.png b/content/self-host/rustdesk-server-oss/aapanel/images/install-Docker.png new file mode 100644 index 0000000..86c41a5 Binary files /dev/null and b/content/self-host/rustdesk-server-oss/aapanel/images/install-Docker.png differ diff --git a/content/self-host/rustdesk-server-oss/aapanel/images/install-RustDesk.png b/content/self-host/rustdesk-server-oss/aapanel/images/install-RustDesk.png new file mode 100644 index 0000000..a3a138c Binary files /dev/null and b/content/self-host/rustdesk-server-oss/aapanel/images/install-RustDesk.png differ diff --git a/content/self-host/rustdesk-server-oss/install/_index.de.md b/content/self-host/rustdesk-server-oss/install/_index.de.md index 2d1d487..1aba868 100644 --- a/content/self-host/rustdesk-server-oss/install/_index.de.md +++ b/content/self-host/rustdesk-server-oss/install/_index.de.md @@ -71,7 +71,7 @@ Wir empfehlen Ihnen die Verwendung von [PM2](https://pm2.keymetrics.io/) für di Starten Sie hbbs/hbbr ohne PM2. ```sh -./hbbs -r +./hbbs ./hbbr ``` @@ -79,7 +79,7 @@ Starten Sie hbbs/hbbr ohne PM2. Starten Sie hbbs/hbbr mit PM2. ```sh -pm2 start hbbs -- -r +pm2 start hbbs pm2 start hbbr ``` @@ -87,7 +87,6 @@ pm2 start hbbr {{% notice note %}} PM2 benötigt Node.js v16+. Wenn Sie PM2 nicht starten können (z. B. können Sie `hbbs`/`hbbr` nicht in `pm2 list` sehen), laden Sie bitte die Node.js-LTS-Version von https://nodejs.org herunter und installieren Sie sie. Wenn Sie `hbbs`/`hbbr` nach einem Neustart automatisch ausführen lassen wollen, schauen Sie sich bitte `pm2 save` und `pm2 startup` an. Mehr über [PM2](https://pm2.keymetrics.io/docs/usage/quick-start/). Ein weiteres gutes Werkzeug für Ihre Logs ist [pm2-logrotate](https://github.com/keymetrics/pm2-logrotate). -Der Parameter `-r` von `hbbs` ist nicht zwingend erforderlich. Es ist nur praktisch, wenn Sie auf der kontrollierten Client-Seite keinen Relay-Server angeben müssen. Sie müssen den Port nicht angeben, wenn Sie den Standardport 21117 verwenden. Der vom Client angegebene Relay-Server hat eine höhere Priorität als dieser. {{% /notice %}} Standardmäßig lauscht `hbbs` auf 21114 (TCP für die Webkonsole, nur in der Pro-Version verfügbar), 21115 (TCP), 21116 (TCP/UDP) und 21118 (TCP), `hbbr` lauscht auf 21117 (TCP) und 21119 (TCP). Diese Ports müssen in der Firewall geöffnet sein. **Bitte beachten Sie, dass 21116 sowohl für TCP als auch für UDP aktiviert sein muss.** 21115 wird für den NAT-Typ-Test verwendet, 21116/UDP wird für die ID-Registrierung und den Heartbeat-Dienst verwendet, 21116/TCP wird für das TCP-Hole-Punching und den Verbindungsdienst verwendet, 21117 wird für die Relay-Dienste verwendet und 21118 sowie 21119 werden zur Unterstützung von Webclients verwendet. *Wenn Sie die Webclient-Unterstützung (21118, 21119) nicht benötigen, können die entsprechenden Ports deaktiviert werden.* diff --git a/content/self-host/rustdesk-server-oss/install/_index.en.md b/content/self-host/rustdesk-server-oss/install/_index.en.md index b59d5e5..c010ce3 100644 --- a/content/self-host/rustdesk-server-oss/install/_index.en.md +++ b/content/self-host/rustdesk-server-oss/install/_index.en.md @@ -17,7 +17,7 @@ You need to have Linux installed, script is tested working with CentOS Linux 7/8 ##### How to Install the server Please setup your firewall on your server prior to running the script. -Make sure you have got access via SSH or otherwise setup prior setting up the firewall. The example commands for UFW (Debian based) are: +Make sure you have got access via SSH or otherwise setup prior to setting up the firewall. The example commands for UFW (Debian based) are: ``` ufw allow proto tcp from YOURIP to any port 22 ``` @@ -74,7 +74,7 @@ We suggest you use [PM2](https://pm2.keymetrics.io/) for managing your service. Run hbbs/hbbr without PM2. ```sh -./hbbs -r +./hbbs ./hbbr ``` @@ -82,15 +82,13 @@ Run hbbs/hbbr without PM2. Run hbbs/hbbr with PM2. ```sh -pm2 start hbbs -- -r +pm2 start hbbs pm2 start hbbr ``` {{% notice note %}} PM2 requires Node.js v16+, if you fail to run PM2 (e.g. you can not see `hbbs`/`hbbr` in `pm2 list`), please download and install the Node.js LTS version from https://nodejs.org. If you want to make `hbbs`/`hbbr` auto-run after reboot, please check out `pm2 save` and `pm2 startup`. More about [PM2](https://pm2.keymetrics.io/docs/usage/quick-start/). Another good tool for your logs is [pm2-logrotate](https://github.com/keymetrics/pm2-logrotate). - -The `-r` parameter of `hbbs` is not mandatory, it is just convenient for you not to specify a relay server on the controlled client side. You do not need to specify port if you are using default 21117 port. The relay server specified by the client has a higher priority than this. {{% /notice %}} #### Ports diff --git a/content/self-host/rustdesk-server-oss/install/_index.es.md b/content/self-host/rustdesk-server-oss/install/_index.es.md index 25d8914..564cf93 100644 --- a/content/self-host/rustdesk-server-oss/install/_index.es.md +++ b/content/self-host/rustdesk-server-oss/install/_index.es.md @@ -34,7 +34,7 @@ Le sugerimos que use [pm2](https://pm2.keymetrics.io/) para administrar su servi Ejecute hbbs/hbbr sin usar pm2 ``` -./hbbs -r +./hbbs ./hbbr ``` @@ -42,7 +42,7 @@ Ejecute hbbs/hbbr sin usar pm2 Ejecute hbbs/hbbr usando pm2 ``` -pm2 start hbbs -- -r +pm2 start hbbs pm2 start hbbr ``` @@ -50,7 +50,6 @@ pm2 start hbbr {{% notice note %}} pm2 requiere nodejs v16+, si fallas al correr pm2 (e.g. No puedes ver hbbs/hbbr in `pm2 list`), descargue e instale la versión LTS nodejs desde https://nodejs.org. Si desea que hbbs/hbbr se ejecute automáticamente después de reiniciar, consulte `pm2 save` y `pm2 startup`. Más sobre [pm2](https://pm2.keymetrics.io/docs/usage/quick-start/). Otra buena herramienta para su registro es [pm2-logrotate](https://github.com/keymetrics/pm2-logrotate). -El `-r` El parámetro de hhbs no es obligatorio, solo es conveniente que no especifique un servidor de retransmisión en el lado del cliente controlado, no necesita especificar el puerto si está utilizando el puerto predeterminado 21117. El servidor de retransmisión especificado por el cliente tiene una prioridad más alta que esta. {{% /notice %}} Por defecto, hbbs escucha en 21115(tcp) y 21116(tcp/udp), 21118(tcp), hbbr escucha en 21117(tcp), 21119(tcp). Asegúrese de abrir estos puertos en el firewall. **Tenga en cuenta que 21116 debe estar habilitado tanto para TCP como para UDP**. 21115 se utiliza para la prueba de tipo NAT, 21116/UDP se utiliza para el registro de ID y el servicio de latidos, 21116/TCP se utiliza para el servicio de conexión y perforación de agujeros TCP, 21117 se utiliza para los servicios de retransmisión, 21118 y 21119 se utilizan para admitir clientes web. Si no necesitas cliente web (21118, 21119) soporte, los puertos correspondientes se pueden deshabilitar. @@ -64,7 +63,7 @@ Ejecute con la opción "-h" para ver ayuda si desea elegir su propio puerto. ``` sudo docker image pull rustdesk/rustdesk-server -sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs -r +sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs sudo docker run --name hbbr -p 21117:21117 -p 21119:21119 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbr ``` @@ -127,11 +126,4 @@ Si no completó la `key:` (el contenido en el archivo de clave pública `id_ed25 cat ./id_ed25519.pub ```` -Si desea prohibir que los usuarios sin clave establezcan conexiones no cifradas, agregue el parámetro `-k _` cuando ejecute hbbs y hbbr, por ejemplo: - -```` -./hbbs -r -k _ -./hbbr -k _ -```` - Si desea cambiar la clave, elimine los archivos `id_ed25519` e `id_ed25519.pub` y reinicie hbbs/hbbr, hbbs generará un nuevo par de claves. diff --git a/content/self-host/rustdesk-server-oss/install/_index.fr.md b/content/self-host/rustdesk-server-oss/install/_index.fr.md index b34faf4..c9dc3f0 100644 --- a/content/self-host/rustdesk-server-oss/install/_index.fr.md +++ b/content/self-host/rustdesk-server-oss/install/_index.fr.md @@ -45,7 +45,7 @@ Vous devez avoir installé Docker/Podman afin d'exécuter un serveur Rustdesk en ### Exemples avec Docker ```bash sudo docker image pull rustdesk/rustdesk-server -sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs -r +sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs sudo docker run --name hbbr -p 21117:21117 -p 21119:21119 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbr ``` @@ -75,7 +75,7 @@ services: - 21116:21116/udp - 21118:21118 image: rustdesk/rustdesk-server:latest - command: hbbs -r example.com:21117 + command: hbbs volumes: - ./data:/root networks: @@ -129,7 +129,7 @@ Les exigences matérielles sont très faibles. La configuration minimale d'un se Exécutez hbbs/hbbr sur votre serveur (CentOS ou Ubuntu). Nous vous suggérons d'utiliser [pm2](https://pm2.keymetrics.io/) pour gérer votre service. ```bash -./hbbs -r +./hbbs ./hbbr ``` @@ -137,7 +137,7 @@ Exécutez hbbs/hbbr sur votre serveur (CentOS ou Ubuntu). Nous vous suggérons d Exécutez hbbs/hbbr avec pm2 ```bash -pm2 start hbbs -- -r +pm2 start hbbs pm2 start hbbr ``` @@ -145,7 +145,6 @@ pm2 start hbbr {{% notice note %}} pm2 nécessite Node.js v16+, si vous ne parvenez pas à exécuter pm2 (par exemple, vous ne pouvez pas voir `hbbs`/`hbbr` dans `pm2 list`), veuillez télécharger et installer la version Node.js LTS à partir de https://nodejs.org. Si vous souhaitez que `hbbs`/`hbbr` s'exécute automatiquement après le redémarrage, veuillez vous référer à `pm2 save` et `pm2 startup`. En savoir plus sur [pm2](https://pm2.keymetrics.io/docs/usage/quick-start/). Un autre bon outil pour vos journaux est [pm2-logrotate](https://github.com/keymetrics/pm2-logrotate). -Le paramètre `-r` de `hbbs` n'est pas obligatoire, il est juste pratique pour ne pas avoir à spécifier de serveur relais côté client contrôlé. Vous n'avez pas besoin de spécifier le port si vous utilisez le port 21117 par défaut. Le serveur relais spécifié par le client est prioritaire sur ce paramètre. {{% /notice %}} Par défaut, `hbbs` écoute sur 21115 (TCP) et 21116 (TCP/UDP), 21118 (TCP), et `hbbr` écoute sur 21117 (TCP), 21119 (TCP). Assurez-vous d'ouvrir ces ports dans le pare-feu. **Veuillez noter que 21116 doit être activé à la fois pour TCP et UDP**. 21115 est utilisé pour le test de type NAT, 21116/UDP est utilisé pour l'enregistrement d'ID et le service `heartbeat`, 21116/TCP est utilisé pour le service `TCP hole punching`, 21117 est utilisé pour le service de relais, et 21118 et 21119 sont utilisés pour prendre en charge les clients Web. *Si vous n'avez pas besoin de la prise en charge du client Web (21118, 21119), les ports correspondants peuvent être désactivés.* @@ -198,13 +197,6 @@ Si vous n'avez pas rempli la clé `Key:` (avec le contenu du fichier de clé pub cat ./id_ed25519.pub ```` -Si vous souhaitez interdire aux utilisateurs sans clé d\'établir des connexions non chiffrées, veuillez ajouter le paramètre `-k _` lors de l\'exécution de -`hbbs` et `hbbr`, par exemple : -```bash -./hbbs -r -k _ -./hbbr -k _ -``` - Si vous voulez changer de clé, supprimez les fichiers `id_ed25519` et `id_ed25519.pub` et redémarrez `hbbs`/`hbbr`,`hbbs` générera une nouvelle paire de clés. {{% notice note %}} diff --git a/content/self-host/rustdesk-server-oss/install/_index.ja.md b/content/self-host/rustdesk-server-oss/install/_index.ja.md index c1838f6..6edb4a2 100644 --- a/content/self-host/rustdesk-server-oss/install/_index.ja.md +++ b/content/self-host/rustdesk-server-oss/install/_index.ja.md @@ -31,14 +31,14 @@ Centos7 でビルドされ Centos7/8, Ubuntu18/20 で動作確認されていま あなたのサーバー (Centos または Ubuntu) でhbbs/hbbrを実行します。[pm2](https://pm2.keymetrics.io/) を使用してサービスを管理することを推奨します。 ``` -./hbbs -r +./hbbs ./hbbr ``` もしくは hbbs/hbbr を pm2 を使用して実行します ``` -pm2 start hbbs -- -r +pm2 start hbbs pm2 start hbbr ``` @@ -46,7 +46,6 @@ pm2 start hbbr {{% notice note %}} pm2 を動作させるには nodejs v16+ が必要です。pm2 を実行できない場合 (例えば `pm2 list` に hbbs/hbbr が表示されない時) はLTS版の node.js を https://nodejs.org からダウンロードしインストールしてください。もし hbbs/hbbr を再起動後に自動実行させたいなら `pm2 save` と `pm2 startup` を確認してみてください。 詳しくは [pm2](https://pm2.keymetrics.io/docs/usage/quick-start/) から確認できます。 ログを記録するのは [pm2-logrotate](https://github.com/keymetrics/pm2-logrotate) を使うのがオススメです。 -hhbsの `-r` パラメータは必須ではなくサーバー側で指定するとクライアント側で中継サーバを指定せず済むので便利です。またデフォルトの 21117 ポートを使う場合はポートを指定する必要はありません。クライアント側が指定するリレーサーバーはこれよりも優先度が高いです。 **RustDeskコントロールクライアント 1.1.9 以降では中継サーバーが別のホストやポートで動作していない場合、クライアント側でも中継サーバーのアドレスを指定する必要はありません。** {{% /notice %}} デフォルトでは hbbs は 21115(tcp) と 21116(tcp/udp) と 21118(tcp) を使用し hbbr は 21117(tcp) と 21119(tcp) を使用します。ファイアウォールでこれらのポートを必ず開放してください。**21116はTCPとUDPの両方で開放する必要があることに注意してください。** 21115 はNATタイプの確認、21116/UDP はTCPホールパンチング,コネクションサービス、21117はリレーサービス、21118 と 21119 はWebクライアントのサポートに使用します。ウェブクライアント(21118, 21119) のサポートが不要な場合は該当するポートを無効にしても良いです。 @@ -60,7 +59,7 @@ hhbsの `-r` パラメータは必須ではなくサーバー側で指定する ``` sudo docker image pull rustdesk/rustdesk-server -sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs -r +sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs sudo docker run --name hbbr -p 21117:21117 -p 21119:21119 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbr ``` @@ -118,10 +117,4 @@ hbbs.example.com:21116 cat ./id_ed25519.pub ```` -もし鍵のないユーザが暗号化されていない接続を確立することを禁止したい場合は、hbbs と hbbr を実行する際に `-k _` パラメータを追加してください。 -```` -./hbbs -r -k _ -./hbbr -k _ -```` - 鍵を変更したい場合は `id_ed25519` と `id_ed25519.pub` を削除し hbbs/hbbr を再起動すると新しい鍵ペアが生成されます。 diff --git a/content/self-host/rustdesk-server-oss/install/_index.nl.md b/content/self-host/rustdesk-server-oss/install/_index.nl.md index 6660617..f379ab7 100644 --- a/content/self-host/rustdesk-server-oss/install/_index.nl.md +++ b/content/self-host/rustdesk-server-oss/install/_index.nl.md @@ -43,7 +43,7 @@ U moet Docker/Podman installeren om een rustdesk-server als docker container te ### Docker voorbeelden ```bash sudo docker image pull rustdesk/rustdesk-server -sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs -r +sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs sudo docker run --name hbbr -p 21117:21117 -p 21119:21119 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbr ``` @@ -72,7 +72,7 @@ services: - 21116:21116/udp - 21118:21118 image: rustdesk/rustdesk-server:latest - command: hbbs -r example.com:21117 + command: hbbs volumes: - ./data:/root networks: @@ -126,7 +126,7 @@ De hardwarevereisten zijn zeer laag; de minimale configuratie van een basiscloud Voer hbbs/hbbr uit op uw server (CentOS of Ubuntu). We stellen voor dat u [pm2](https://pm2.keymetrics.io/) gebruikt voor het beheer van uw service. ```bash -./hbbs -r +./hbbs ./hbbr ``` @@ -134,7 +134,7 @@ Voer hbbs/hbbr uit op uw server (CentOS of Ubuntu). We stellen voor dat u [pm2]( Voer hbbs/hbbr uit met pm2 ```bash -pm2 start hbbs -- -r +pm2 start hbbs pm2 start hbbr ``` @@ -142,7 +142,6 @@ pm2 start hbbr {{% notice note %}} pm2 vereist Node.js v16+, Als het niet lukt om pm2 te starten (bijv. u kunt `hbbs`/`hbbr` niet zien in `pm2 list`), download en installeer dan de Node.js LTS versie van https://nodejs.org. Als je `hbbs`/`hbbr` automatisch wilt laten draaien na een herstart, kijk dan naar `pm2 save` en `pm2 startup`. Meer over [pm2](https://pm2.keymetrics.io/docs/usage/quick-start/). Een ander goed hulpmiddel voor uw logs is [pm2-logrotate](https://github.com/keymetrics/pm2-logrotate). -De `-r` parameter van `hbbs` is niet verplicht, het is gewoon handig om geen relay server te specificeren aan de gecontroleerde client kant. U hoeft geen poort op te geven als u de standaardpoort 21117 gebruikt. De door de klant opgegeven relaisserver heeft dan een hogere prioriteit. {{% /notice %}} Standaard luistert `hbbs` op 21115 (TCP) en 21116 (TCP/UDP), 21118 (TCP), en `hbbr` luistert op 21117 (TCP), 21119 (TCP). Zorg ervoor dat u deze poorten in de firewall opent. **Let op: 21116 moet zowel voor TCP als voor UDP zijn ingeschakeld**. 21115 wordt gebruikt voor de NAT type test, 21116/UDP wordt gebruikt voor de ID registratie en heartbeat service, 21116/TCP wordt gebruikt voor TCP hole punching en connection service, 21117 wordt gebruikt voor de Relay services, en 21118 en 21119 worden gebruikt om web clients te ondersteunen. *Als u geen ondersteuning voor webclients (21118, 21119) nodig hebt, kunnen de corresponderende poorten worden uitgeschakeld. @@ -201,13 +200,6 @@ Ials u de `Sleutel:` (de inhoud van het openbare sleutelbestand `id_ed25519.pub` cat ./id_ed25519.pub ```` -Als u wilt voorkomen dat gebruikers zonder sleutel niet-versleutelde verbindingen tot stand brengen, voeg dan bijvoorbeeld de `-k _` parameter toe bij het uitvoeren van `hbbs` en `hbbr`: - -```bash -./hbbs -r -k _ -./hbbr -k _ -``` - Als je de sleutel wilt veranderen, verwijder dan de `id_ed25519` en `id_ed25519.pub` bestanden en herstart `hbbs`/`hbbr`,`hbbs` zal een nieuw sleutelpaar genereren. {{% notice note %}} diff --git a/content/self-host/rustdesk-server-oss/install/_index.pt.md b/content/self-host/rustdesk-server-oss/install/_index.pt.md index b20f0af..c4c8115 100644 --- a/content/self-host/rustdesk-server-oss/install/_index.pt.md +++ b/content/self-host/rustdesk-server-oss/install/_index.pt.md @@ -75,7 +75,7 @@ Sugerimos usar o [PM2](https://pm2.keymetrics.io/) (em inglês) para gerenciar s Executar hbbs/hbbr sem PM2. ```sh -./hbbs -r +./hbbs ./hbbr ``` @@ -83,7 +83,7 @@ Executar hbbs/hbbr sem PM2. Executar hbbs/hbbr com PM2. ```sh -pm2 start hbbs -- -r +pm2 start hbbs pm2 start hbbr ``` @@ -91,7 +91,6 @@ pm2 start hbbr {{% notice note %}} O PM2 requer Node.js v16+. Se você não conseguir executar o PM2 (por exemplo, não consegue ver `hbbs/hbbr` em `pm2 list`), faça o [download](https://nodejs.org/pt) e instale a versão LTS do Node.js. Para configurar a execução automática do `hbbs/hbbr` após a reinicialização, use os comandos `pm2 save` e `pm2 startup`. Saiba mais sobre o [PM2](https://pm2.keymetrics.io/docs/usage/quick-start/) (em inglês). Outra ferramenta útil para seus logs é o [pm2-logrotate](https://github.com/keymetrics/pm2-logrotate) (em inglês). -O parâmetro `-r` do hbbs é opcional, serve apenas para sua conveniência para não precisar especificar um servidor relay no lado do cliente controlado. Você não precisa especificar a porta se estiver usando a porta padrão **21117**. O servidor relay especificado pelo cliente tem prioridade sobre esta opção. {{% /notice %}} #### Portas diff --git a/content/self-host/rustdesk-server-oss/install/_index.ru.md b/content/self-host/rustdesk-server-oss/install/_index.ru.md index 472be01..3f2af36 100644 --- a/content/self-host/rustdesk-server-oss/install/_index.ru.md +++ b/content/self-host/rustdesk-server-oss/install/_index.ru.md @@ -32,14 +32,14 @@ weight: 10 Запустите hbbs/hbbr на вашем сервере (Centos или Ubuntu). Мы рекомендуем использовать [pm2](https://pm2.keymetrics.io/) для управления службами. ``` -./hbbs -r +./hbbs ./hbbr ``` или запустите hbbs/hbbr при помощи pm2 ``` -pm2 start hbbs -- -r +pm2 start hbbs pm2 start hbbr ``` @@ -48,7 +48,6 @@ pm2 start hbbr pm2 требует для себя nodejs v16+. Если не получится запустить pm2 (например, вы не видите hbbs/hbbr в `pm2 list`), установите последнюю LTS версию nodejs по ссылке https://nodejs.org. Если вы хотите чтобы hbbs/hbbr запускался вмести с системой, посмотрите `pm2 save` и `pm2 startup`. Подробности по ссылке: [pm2](https://pm2.keymetrics.io/docs/usage/quick-start/). Хороший инстурмет для записи логов: [pm2-logrotate](https://github.com/keymetrics/pm2-logrotate). -Параметр `-r` у hhbs не обязательный. Он необходим для автоподстановки адреса ретранслятора на стороне клиента. Адрес ретранслятора на стороне клиента имеет приоритет над адресом, указанным с ключом `-r`. {{% /notice %}} По умолчанию hbbs слушает порты 21115(tcp) и 21116(tcp/udp), 21118(tcp), hbbr слушает порты 21117(tcp) и 21119(tcp). Удостоверьтесь, что эти порты открыты на файрволле. **Обратите внимание: Порт 21116 должен быть открыт и как TCP и как UDP**. Порт 21115 используется для проверки типа NAT, 21116/UDP используется для регистрации и службы heartbeat, 21116/TCP используется для пробивания TCP отверстий и службы соединений, 21117 используется для службы ретранслятора, 21118 и 21119 используется для поддержки Web-клиентов. Если вам не нужны Web-клиент (21118, 21119) соответствующие порты можно отключить. @@ -62,7 +61,7 @@ pm2 требует для себя nodejs v16+. Если не получится ``` sudo docker image pull rustdesk/rustdesk-server -sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs -r +sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs sudo docker run --name hbbr -p 21117:21117 -p 21119:21119 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbr ``` @@ -122,10 +121,4 @@ hbbs.example.com:21116 cat ./id_ed25519.pub ```` -Если вы хотите запретить незашифрованные соединения, используйте параметр `-k _` для запуска hbbs и hbbr, например: -```` -./hbbs -r <адрес ретранслятора[:port]> -k _ -./hbbr -k _ -```` - Если вы хотите сменить ключ, удалите файлы `id_ed25519` и `id_ed25519.pub` и перезапустите hbbs/hbbr,hbbs автоматически сгенерирует новую пару ключей. diff --git a/content/self-host/rustdesk-server-oss/install/_index.zh-cn.md b/content/self-host/rustdesk-server-oss/install/_index.zh-cn.md index afdbcf0..082280b 100644 --- a/content/self-host/rustdesk-server-oss/install/_index.zh-cn.md +++ b/content/self-host/rustdesk-server-oss/install/_index.zh-cn.md @@ -30,14 +30,14 @@ Linux版本在Centos7构建,在 Centos7/8,Ubuntu 18/20上测试过,Debian 在服务器上运行 hbbs/hbbr (Centos 或 Ubuntu)。建议使用[pm2](https://pm2.keymetrics.io/) 管理服务。 ``` -./hbbs -r +./hbbs ./hbbr ``` 或者使用 pm2 运行 hbbs/hbbr ``` -pm2 start hbbs -- -r +pm2 start hbbs pm2 start hbbr ``` @@ -46,7 +46,6 @@ pm2 start hbbr `pm2` 需要 nodejs v16+,如果你运行 pm2 失败(例如在 `pm2 list` 中看不到 hbbs/hbbr),请从 https://nodejs.org 下载并安装 LTS 版本的 nodejs。 如果你想让 hbbs/hbbr 在重启后自动运行,请查看 `pm2 save` 和 `pm2 startup`。 更多关于 [pm2](https://pm2.keymetrics.io/docs/usage/quick-start/)。另一个不错的日志工具是 [pm2-logrotate](https://github.com/keymetrics/pm2-logrotate)。 -hhbs的`-r`参数不是必须的,他只是方便你不用在客户端指定中继服务器,如果是默认21117端口,可以不填port。客户端指定的中继服务器优先级高于这个。 {{% /notice %}} 默认情况下,hbbs 监听21115(tcp), 21116(tcp/udp), 21118(tcp),hbbr 监听21117(tcp), 21119(tcp)。务必在防火墙开启这几个端口, **请注意21116同时要开启TCP和UDP**。其中21115是hbbs用作NAT类型测试,21116/UDP是hbbs用作ID注册与心跳服务,21116/TCP是hbbs用作TCP打洞与连接服务,21117是hbbr用作中继服务, 21118和21119是为了支持网页客户端。如果您不需要网页客户端(21118,21119)支持,对应端口可以不开。 @@ -64,7 +63,7 @@ hhbs的`-r`参数不是必须的,他只是方便你不用在客户端指定中 ``` sudo docker image pull rustdesk/rustdesk-server -sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs -r +sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs sudo docker run --name hbbr -p 21117:21117 -p 21119:21119 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbr ``` @@ -84,7 +83,7 @@ services: - :21116 # 自定义 hbbs 映射端口 - :21116/udp # 自定义 hbbs 映射端口 image: rustdesk/rustdesk-server - command: hbbs -r : # 填入个人域名或 IP + hbbr 暴露端口 + command: hbbs volumes: - :/root # 自定义挂载目录 networks: @@ -168,12 +167,6 @@ If there are invalid characters in the key which can not be used in file name, p cat ./id_ed25519.pub ``` -如果您禁止没有key的用户建立非加密连接,请在运行hbbs和hbbr的时候添加`-k _ `参数,例如: -``` -./hbbs -r -k _ -./hbbr -k _ -``` - 如果要更改key,请删除 `id_ed25519` 和 `id_ed25519.pub` 文件并重新启动 hbbs/hbbr,hbbs将会产生新的密钥对。 diff --git a/content/self-host/rustdesk-server-oss/install/_index.zh-tw.md b/content/self-host/rustdesk-server-oss/install/_index.zh-tw.md index 88d8282..774d94f 100644 --- a/content/self-host/rustdesk-server-oss/install/_index.zh-tw.md +++ b/content/self-host/rustdesk-server-oss/install/_index.zh-tw.md @@ -30,14 +30,14 @@ Linux版本在Centos7構建,在 Centos7/8,Ubuntu 18/20上測試過,Debian 在伺服器上運行 hbbs/hbbr (Centos 或 Ubuntu)。建議使用[pm2](https://pm2.keymetrics.io/) 管理服務。 ``` -./hbbs -r +./hbbs ./hbbr ``` 或者使用 pm2 運行 hbbs/hbbr ``` -pm2 start hbbs -- -r +pm2 start hbbs pm2 start hbbr ``` @@ -46,9 +46,6 @@ pm2 start hbbr `pm2` 需要 nodejs v16+,如果你運行 pm2 失敗(例如在 `pm2 list` 中看不到 hbbs/hbbr),請從 https://nodejs.org 下載並安裝 LTS 版本的 nodejs。如果你想讓 hbbs/hbbr 在重啟後自動運行,請查看 `pm2 save` 和 `pm2 startup`。更多關於 [pm2](https://pm2.keymetrics.io/docs/usage/quick-start/)。另一個不錯的日誌工具是 [pm2-logrotate](https://github.com/keymetrics/pm2-logrotate)。 - -hhbs的`-r`參數不是必須的,他只是方便你不用在客戶端指定中繼伺服器。客戶端指定的中繼伺服器優先級高於這個。 - {{% /notice %}} 默認情況下,hbbs 監聽21115(tcp), 21116(tcp/udp), 21118(tcp),hbbr 監聽21117(tcp), 21119(tcp)。務必在防火牆開啟這幾個端口, **請注意21116同時要開啟TCP和UDP**。其中21115是hbbs用作NAT類型測試,21116/UDP是hbbs用作ID註冊與心跳服務,21116/TCP是hbbs用作TCP打洞與連接服務,21117是hbbr用作中繼服務, 21118和21119是為了支持網頁客戶端。如果您不需要網頁客戶端(21118,21119)支持,對應端口可以不開。 @@ -61,7 +58,7 @@ hhbs的`-r`參數不是必須的,他只是方便你不用在客戶端指定中 #### Docker示範 ``` sudo docker image pull rustdesk/rustdesk-server -sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs -r +sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs sudo docker run --name hbbr -p 21117:21117 -p 21119:21119 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbr ``` @@ -118,11 +115,5 @@ If there are invalid characters in the key which can not be used in file name, p ``` cat ./id_ed25519.pub ``` -如果您禁止沒有key的用戶建立非加密連接,請在運行hbbs和hbbr的時候添加`-k _ `參數,例如: - -``` -./hbbs -r -k _ -./hbbr -k _ -``` 如果要更改key,請刪除 `id_ed25519` 和 `id_ed25519.pub` 文件並重新啟動 hbbs/hbbr,hbbs將會產生新的密鑰對。 diff --git a/content/self-host/rustdesk-server-oss/synology/_index.en.md b/content/self-host/rustdesk-server-oss/synology/_index.en.md index 7300e79..24a2925 100644 --- a/content/self-host/rustdesk-server-oss/synology/_index.en.md +++ b/content/self-host/rustdesk-server-oss/synology/_index.en.md @@ -3,8 +3,8 @@ title: Synology weight: 22 --- -Synology has two types of Docker, "Docker" and "Container Manager". If you're using DSM 7.2 and later, please follow the guide for DSM 7.2, or follow the DSM 6 guide if you're on older system. +Synology has two types of Docker, "Docker" and "Container Manager". If you're using DSM 7.2 and later, please follow the guide for DSM 7.2, or follow the DSM 6 guide if you're on an older system. -If you are using Synology with Portainer, please check [this tutorial](https://mariushosting.com/how-to-install-rustdesk-on-your-synology-nas/). +If you are using Synology with Portainer, please refer to [this tutorial](https://mariushosting.com/how-to-install-rustdesk-on-your-synology-nas/). {{% children depth="3" showhidden="true" %}} diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.de.md b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.de.md index a83f843..5e85a29 100644 --- a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.de.md +++ b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.de.md @@ -50,7 +50,7 @@ Das Betriebssystem von Synology basiert auf Debian, daher funktioniert das Hostn {{% /notice %}} -![](images/hbbs-cmd.png?v2) +![](images/hbbs-cmd.png?v3) - Fertig diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.en.md b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.en.md index e51a23e..47013ca 100644 --- a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.en.md +++ b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.en.md @@ -46,11 +46,9 @@ Click on above `Advanced Settings`. {{% notice note %}} Synology's OS is Debian based, so host net (--net=host) works fine, we do not need to map ports with `-p` option. -`192.168.16.98` is an internal IP used here for demonstration only, please set it to a public IP when you deploy (or you can use your DDNS address if you have configured one in "Control Panel → Connectivity → DDNS") and don't forget to open ports on your router and your Synology firewall if this is enabled ("Control Panel → Connectivity → Firewall")! - {{% /notice %}} -![](images/hbbs-cmd.png?v2) +![](images/hbbs-cmd.png?v3) - Done @@ -58,7 +56,7 @@ Synology's OS is Debian based, so host net (--net=host) works fine, we do not ne ### Create hbbr container -Please repeat above `hbbs` steps, but name the container `hbbr` and command (for Set Command Step) should be `hbbr -k _`. +Please repeat above `hbbs` steps, but name the container `hbbr` and command (for Set Command Step) should be `hbbr`. ![](images/hbbr-config.png) diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.es.md b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.es.md index 59b622b..69f8d02 100644 --- a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.es.md +++ b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.es.md @@ -47,7 +47,7 @@ Synology OS está basado en Debian, os host net (--net=host) funciona bien, no n {{% /notice %}} -![](images/hbbs-cmd.png?v2) +![](images/hbbs-cmd.png?v3) - Hecho diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.fr.md b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.fr.md index 985375d..3c4312e 100644 --- a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.fr.md +++ b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.fr.md @@ -47,7 +47,7 @@ Le système d'exploitation Synology est basé sur Debian. La configuration sur r {{% /notice %}} -![](images/hbbs-cmd.png?v2) +![](images/hbbs-cmd.png?v3) - Terminé diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.ja.md b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.ja.md index 599eae9..ddf6ae7 100644 --- a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.ja.md +++ b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.ja.md @@ -47,7 +47,7 @@ Synology の OS は Debian ベースなのでホストネット (--net=host) は {{% /notice %}} -![](images/hbbs-cmd.png?v2) +![](images/hbbs-cmd.png?v3) - 完了 diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.nl.md b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.nl.md index 3ee7dad..2a704c3 100644 --- a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.nl.md +++ b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.nl.md @@ -47,7 +47,7 @@ Het OS van Synology is gebaseerd op Debian, dus host net (--net=host) werkt prim {{% /notice %}} -![](images/hbbs-cmd.png?v2) +![](images/hbbs-cmd.png?v3) - Klaar diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.ru.md b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.ru.md index 30f8950..ec9656e 100644 --- a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.ru.md +++ b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.ru.md @@ -47,7 +47,7 @@ weight: 22 {{% /notice %}} -![](images/hbbs-cmd.png?v2) +![](images/hbbs-cmd.png?v3) - Готово diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.zh-cn.md b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.zh-cn.md index 8a5b267..dfd288d 100644 --- a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.zh-cn.md +++ b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.zh-cn.md @@ -48,7 +48,7 @@ Synology 的操作系统是基于 Debian 的,因此host net (--net=host) 可 {{% /notice %}} -![](images/hbbs-cmd.png?v2) +![](images/hbbs-cmd.png?v3) - 搞定 diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.zh-tw.md b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.zh-tw.md index 07eb817..91667dd 100644 --- a/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.zh-tw.md +++ b/content/self-host/rustdesk-server-oss/synology/dsm-6/_index.zh-tw.md @@ -47,7 +47,7 @@ weight: 22 {{% /notice %}} -![](images/hbbs-cmd.png?v2) +![](images/hbbs-cmd.png?v3) - 搞定 diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-6/images/hbbs-cmd.png b/content/self-host/rustdesk-server-oss/synology/dsm-6/images/hbbs-cmd.png index 62b5b05..21ad0f8 100644 Binary files a/content/self-host/rustdesk-server-oss/synology/dsm-6/images/hbbs-cmd.png and b/content/self-host/rustdesk-server-oss/synology/dsm-6/images/hbbs-cmd.png differ diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-7/_index.de.md b/content/self-host/rustdesk-server-oss/synology/dsm-7/_index.de.md index 59a4374..f2f24a3 100644 --- a/content/self-host/rustdesk-server-oss/synology/dsm-7/_index.de.md +++ b/content/self-host/rustdesk-server-oss/synology/dsm-7/_index.de.md @@ -28,20 +28,20 @@ Nach der Installation von "Container Manager" wird ein gemeinsamer Ordner `docke Öffnen Sie Ihren Container Manager, gehen Sie zu Project und klicken Sie auf Create. -Geben Sie den Projektnamen `rustdesk-server` ein, ändern Sie Source von "Upload compose.yml" zu "Create compose.yml" und kopieren Sie den folgenden Inhalt in das Feld. Danach sollten Sie `rustdesk.example.com` (die auf Ihre `hbbr` verweist) durch die Domain ersetzen, die auf Ihr NAS verweist. +Geben Sie den Projektnamen `rustdesk-server` ein, ändern Sie Source von "Upload compose.yml" zu "Create compose.yml" und kopieren Sie den folgenden Inhalt in das Feld. {{% notice note %}} Sie könnten die Zeile mit `hbbs` vorübergehend in die LAN-IP Ihres NAS ändern, wie auf dem Bild gelb markiert zu sehen. Nachdem Sie sich vergewissert haben, dass Ihr Server funktioniert, **sollten** Sie die Änderung zurücknehmen. {{% /notice %}} -![](images/dsm7_creating_project_init.png) +![](images/dsm7_creating_project_init.png?v2) ```yaml services: hbbs: container_name: hbbs image: rustdesk/rustdesk-server:latest - command: hbbs -r rustdesk.example.com:21117 -k _ + command: hbbs volumes: - ./data:/root network_mode: host @@ -52,7 +52,7 @@ services: hbbr: container_name: hbbr image: rustdesk/rustdesk-server:latest - command: hbbr -k _ + command: hbbr volumes: - ./data:/root network_mode: host @@ -89,7 +89,7 @@ Wenn Sie Ihren `hbbs`-Befehl so eingestellt haben, dass er auf Ihre LAN-IP verwe 5.2. Nach dem Stoppen klicken Sie auf "YAML Configurations", ändern Sie die Zeile, die mit `command: hbbs` beginnt, in Ihre Domäne und klicken Sie dann auf "Save". Stellen Sie sicher, dass Sie "Build and start the project (rebuild the image)" wählen. -![](images/dsm7_recreate_project_after_modified_args.png) +![](images/dsm7_recreate_project_after_modified_args.png?v2) 5.3. Ihr RustDesk-Server sollte für Verbindungen aus dem Internet bereit sein, als nächstes sollten Sie eine Portweiterleitung einrichten. diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-7/_index.en.md b/content/self-host/rustdesk-server-oss/synology/dsm-7/_index.en.md index 4a13dac..9d60b7e 100644 --- a/content/self-host/rustdesk-server-oss/synology/dsm-7/_index.en.md +++ b/content/self-host/rustdesk-server-oss/synology/dsm-7/_index.en.md @@ -28,20 +28,20 @@ Open your File Station, create a folder named `rustdesk-server`(or whatever you Open your Container Manager, go to Project and click Create. -Enter the project name `rustdesk-server` and change Source from "Upload compose.yml" to "Create compose.yml", and copy following contents to the box. After you copied, you should replace `rustdesk.example.com` (Which point to your `hbbr`) to the domain that will point to your NAS. +Enter the project name `rustdesk-server` and change Source from "Upload compose.yml" to "Create compose.yml", and copy following contents to the box. {{% notice note %}} You could modify the line with `hbbs` to your NAS's LAN IP temporarily just like the picture. After you verify your server is working, you **should** change back. {{% /notice %}} -![](images/dsm7_creating_project_init.png) +![](images/dsm7_creating_project_init.png?v2) ```yaml services: hbbs: container_name: hbbs image: rustdesk/rustdesk-server:latest # Please change this to rustdesk/rustdesk-server-pro:latest if you want to install Pro. - command: hbbs -r rustdesk.example.com:21117 -k _ + command: hbbs volumes: - ./data:/root network_mode: host @@ -52,7 +52,7 @@ services: hbbr: container_name: hbbr image: rustdesk/rustdesk-server:latest # Please change this to rustdesk/rustdesk-server-pro:latest if you want to install Pro. - command: hbbr -k _ + command: hbbr volumes: - ./data:/root network_mode: host @@ -89,7 +89,7 @@ If you have set your `hbbs` command to point to your LAN IP, and verified it is 5.2. After stopped, click "YAML Configurations", modify the line start with `command: hbbs` to your domain, then click "Save". Make sure you choose "Build and start the project (rebuild the image)". -![](images/dsm7_recreate_project_after_modified_args.png) +![](images/dsm7_recreate_project_after_modified_args.png?v2) 5.3. Your RustDesk Server should ready for connections from the Internet, next, you should setup port forwarding. diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-7/_index.zh-tw.md b/content/self-host/rustdesk-server-oss/synology/dsm-7/_index.zh-tw.md index 88e8573..f7341e8 100644 --- a/content/self-host/rustdesk-server-oss/synology/dsm-7/_index.zh-tw.md +++ b/content/self-host/rustdesk-server-oss/synology/dsm-7/_index.zh-tw.md @@ -26,20 +26,20 @@ Container Manager 為部分低階的 ARM64 的機型帶來支援,例如 j 系 打開您的 Container Manager,前往專案並點擊新增。 -輸入您的專案名稱 `rustdesk-server` 然後變更來源從"上傳 compose.yml" 至 "建立 compose.yml",接著複製下方內容到框框,在您複製貼上後,您應該將 `rustdesk.example.com` (它該指向到您的 `hbbr`) 改為會指向至您NAS的網域。 +輸入您的專案名稱 `rustdesk-server` 然後變更來源從"上傳 compose.yml" 至 "建立 compose.yml",接著複製下方內容到框框。 {{% notice note %}} 如圖所示,您可以暫時將 `hbbs` 那行改為指向至您的NAS的 LAN IP,在您驗證您的伺服器可以正常運作後,您**應當**變更回來。 {{% /notice %}} -![](images/dsm7_creating_project_init.png) +![](images/dsm7_creating_project_init.png?v2) ````yaml services: hbbs: container_name: hbbs image: rustdesk/rustdesk-server:latest - command: hbbs -r rustdesk.example.com:21117 -k _ + command: hbbs volumes: - ./data:/root network_mode: host @@ -50,7 +50,7 @@ services: hbbr: container_name: hbbr image: rustdesk/rustdesk-server:latest - command: hbbr -k _ + command: hbbr volumes: - ./data:/root network_mode: host @@ -86,7 +86,7 @@ services: 5.2 在停止之後,點擊 "YAML 設定",修改開始為 `command: hbbs` 的那一行至您的網域,接著點擊 "停止",請確保您選擇了 "建立並啟動專案(重建映像檔)" -![](images/dsm7_recreate_project_after_modified_args.png) +![](images/dsm7_recreate_project_after_modified_args.png?v2) 5.3 您的 RustDesk 伺服器應該可接受來自網際網路的連線了,接著,您應該設定 port forwarding (通訊埠轉發)。 @@ -104,4 +104,4 @@ services: * `21115` `TCP` NAT 類型測試 * `21116` `TCP` TCP 打洞 * `21116` `UDP` 心跳/ID 伺服器 - * `21117` `TCP` Relay/中繼 \ No newline at end of file + * `21117` `TCP` Relay/中繼 diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-7/images/dsm7_creating_project_init.png b/content/self-host/rustdesk-server-oss/synology/dsm-7/images/dsm7_creating_project_init.png index 1e00768..57fbca2 100644 Binary files a/content/self-host/rustdesk-server-oss/synology/dsm-7/images/dsm7_creating_project_init.png and b/content/self-host/rustdesk-server-oss/synology/dsm-7/images/dsm7_creating_project_init.png differ diff --git a/content/self-host/rustdesk-server-oss/synology/dsm-7/images/dsm7_recreate_project_after_modified_args.png b/content/self-host/rustdesk-server-oss/synology/dsm-7/images/dsm7_recreate_project_after_modified_args.png index 20f2ef5..bcbb2b6 100644 Binary files a/content/self-host/rustdesk-server-oss/synology/dsm-7/images/dsm7_recreate_project_after_modified_args.png and b/content/self-host/rustdesk-server-oss/synology/dsm-7/images/dsm7_recreate_project_after_modified_args.png differ diff --git a/content/self-host/rustdesk-server-oss/ubuntu-server/docker/_index.de.md b/content/self-host/rustdesk-server-oss/ubuntu-server/docker/_index.de.md index 8f3299e..dc4d486 100644 --- a/content/self-host/rustdesk-server-oss/ubuntu-server/docker/_index.de.md +++ b/content/self-host/rustdesk-server-oss/ubuntu-server/docker/_index.de.md @@ -177,8 +177,6 @@ Klicken Sie mit der rechten Maustaste auf den Ordner `rustdesk-server` und erste Fügen Sie dies in `compose.yml` ein. -Nach dem Kopieren sollten Sie `rustdesk.example.com` (die auf Ihr `hbbr` verweist) durch die Domäne ersetzen, die auf Ihren Server verweist. - {{% notice note %}} Sie könnten die Zeile mit `hbbs` vorübergehend in die LAN-IP Ihres Servers ändern (wenn Sie in Ihrem LAN arbeiten), um sicherzustellen, dass er funktioniert. Nachdem Sie sich vergewissert haben, dass Ihr Server funktioniert, **sollten** Sie die Änderung zurücknehmen. {{% /notice %}} @@ -192,7 +190,7 @@ services: hbbs: container_name: hbbs image: rustdesk/rustdesk-server:latest - command: hbbs -r rustdesk.example.com:21117 + command: hbbs volumes: - ./data:/root network_mode: host diff --git a/content/self-host/rustdesk-server-oss/ubuntu-server/docker/_index.en.md b/content/self-host/rustdesk-server-oss/ubuntu-server/docker/_index.en.md index 7c0c94b..3782011 100644 --- a/content/self-host/rustdesk-server-oss/ubuntu-server/docker/_index.en.md +++ b/content/self-host/rustdesk-server-oss/ubuntu-server/docker/_index.en.md @@ -177,8 +177,6 @@ Right click `rustdesk-server` folder, create new file named `compose.yml`. Paste this to `compose.yml`. -After you copied, you should replace `rustdesk.example.com` (Which point to your `hbbr`) to the domain that will point to your server. - {{% notice note %}} You could modify the line with `hbbs` to your server's LAN IP temporarily (If you're deploying in your LAN) to ensure it is working. After you verify your server is working, you **should** change back. {{% /notice %}} @@ -192,7 +190,7 @@ services: hbbs: container_name: hbbs image: rustdesk/rustdesk-server:latest - command: hbbs -r rustdesk.example.com:21117 + command: hbbs volumes: - ./data:/root network_mode: host diff --git a/content/self-host/rustdesk-server-oss/windows/_index.es.md b/content/self-host/rustdesk-server-oss/windows/_index.es.md index d7da470..c8aa998 100644 --- a/content/self-host/rustdesk-server-oss/windows/_index.es.md +++ b/content/self-host/rustdesk-server-oss/windows/_index.es.md @@ -20,7 +20,7 @@ pm2-startup install Descargue la versión de Windows de [server program](https://github.com/rustdesk/rustdesk-server/releases), suponiendo que lo descomprima en la unidad C. Ejecute las siguientes cuatro líneas de comandos respectivamente. ``` cd c:\rustdesk-server-windows-x64 -pm2 start hbbs.exe -- -r +pm2 start hbbs.exe pm2 start hbbr.exe pm2 save ``` @@ -29,4 +29,4 @@ pm2 save ``` pm2 log hbbr pm2 log hbbs -``` \ No newline at end of file +``` diff --git a/content/self-host/rustdesk-server-oss/windows/_index.fr.md b/content/self-host/rustdesk-server-oss/windows/_index.fr.md index 4ebd983..8374bf2 100644 --- a/content/self-host/rustdesk-server-oss/windows/_index.fr.md +++ b/content/self-host/rustdesk-server-oss/windows/_index.fr.md @@ -21,7 +21,7 @@ Téléchargez la version Windows du [programme serveur](https://github.com/rustd ``` cd c:\rustdesk-server-windows-x64 pm2 start hbbr.exe -pm2 start hbbs.exe -- -r +pm2 start hbbs.exe pm2 save ``` @@ -29,4 +29,4 @@ pm2 save ``` pm2 log hbbr pm2 log hbbs -``` \ No newline at end of file +``` diff --git a/content/self-host/rustdesk-server-oss/windows/_index.ja.md b/content/self-host/rustdesk-server-oss/windows/_index.ja.md index 4d58bb7..d2fab70 100644 --- a/content/self-host/rustdesk-server-oss/windows/_index.ja.md +++ b/content/self-host/rustdesk-server-oss/windows/_index.ja.md @@ -20,7 +20,7 @@ pm2-startup install Windows版のサーバープログラムをダウンロードします。Cドライブに解凍するのであれば以下の4行のコマンドをそれぞれ実行します。 ``` cd c:\rustdesk-server-windows-x64 -pm2 start hbbs.exe -- -r +pm2 start hbbs.exe pm2 start hbbr.exe pm2 save ``` @@ -29,4 +29,4 @@ pm2 save ``` pm2 log hbbr pm2 log hbbs -``` \ No newline at end of file +``` diff --git a/content/self-host/rustdesk-server-oss/windows/_index.nl.md b/content/self-host/rustdesk-server-oss/windows/_index.nl.md index 2549cd6..1722b5a 100644 --- a/content/self-host/rustdesk-server-oss/windows/_index.nl.md +++ b/content/self-host/rustdesk-server-oss/windows/_index.nl.md @@ -43,15 +43,14 @@ het niet verandert nadat de service is ingesteld). Ga nu terug naar de Command p In dit voorbeeld gebruiken we `C:\Program Files\RustDesk Server`. ```cmd -nssm install "RustDesk hbbs service" "C:\Program Files\RustDesk Server\hbbs.exe" -r 0.0.0.0 -k _ -nssm install "RustDesk hbbr Service" "C:\Program Files\RustDesk Server\hbbr.exe" -k _ +nssm install "RustDesk hbbs service" "C:\Program Files\RustDesk Server\hbbs.exe" +nssm install "RustDesk hbbr Service" "C:\Program Files\RustDesk Server\hbbr.exe" ``` **Merk op:** - U kunt `RustDesk hbbs service` wijzigen in wat u wenst om de service hbbs te benoemen - U kunt `RustDesk hbbr service` aanpassen in wat u wenst om hbbr de service te noemen. - U kunt `C:\Program Files\RustDesk Server\hbbs.exe` veranderen naar waar u de rustdesk bestanden heeft geplaatst. - U kunt `C:\Program Files\RustDesk Serverhbbr.exe` veranderen naar waar u de rustdesk bestanden hebt geplaatst -- U hebt de optie `-k _` niet nodig, die is optioneel, het is alleen voor een betere beveiliging **Commando-sjablonen:** @@ -95,11 +94,11 @@ pm2-startup install ### Voer hbbr en hbbs uit -Download de Windows-versie van het [serverprogramma] (https://github.com/rustdesk/rustdesk-server/releases). Unzip het programma naar de C: drive. Voer de volgende vier commando's uit (let op de `-r` parameter): +Download de Windows-versie van het [serverprogramma] (https://github.com/rustdesk/rustdesk-server/releases). Unzip het programma naar de C: drive. Voer de volgende vier commando's uit: ```cmd cd c:\rustdesk-server-windows-x64 -pm2 start hbbs.exe -- -r +pm2 start hbbs.exe pm2 start hbbr.exe pm2 save ``` diff --git a/content/self-host/rustdesk-server-oss/windows/_index.ru.md b/content/self-host/rustdesk-server-oss/windows/_index.ru.md index ec069d5..48c5a0e 100644 --- a/content/self-host/rustdesk-server-oss/windows/_index.ru.md +++ b/content/self-host/rustdesk-server-oss/windows/_index.ru.md @@ -22,7 +22,7 @@ pm2-startup install В консоли (cmd, PowerShell, и т.п.) используйте команды: ``` cd <каталог с распакованными файлами сервера> -pm2 start hbbs.exe -- -r <адрес ретранслятора> +pm2 start hbbs.exe pm2 start hbbr.exe pm2 save ``` diff --git a/content/self-host/rustdesk-server-oss/windows/_index.zh-cn.md b/content/self-host/rustdesk-server-oss/windows/_index.zh-cn.md index bb3b354..c5d8cc9 100644 --- a/content/self-host/rustdesk-server-oss/windows/_index.zh-cn.md +++ b/content/self-host/rustdesk-server-oss/windows/_index.zh-cn.md @@ -44,8 +44,8 @@ win64 文件夹的内容)。 将 NSSM 的二进制文件移至 在此示例中,我们将使用`C:\Program Files\RustDesk Server` ```cmd -nssm install "RustDesk hbbs service" "C:\Program Files\RustDesk Server\hbbs.exe" -r 0.0.0.0 -k _ -nssm install "RustDesk hbbr Service" "C:\Program Files\RustDesk Server\hbbr.exe" -k _ +nssm install "RustDesk hbbs service" "C:\Program Files\RustDesk Server\hbbs.exe" +nssm install "RustDesk hbbr Service" "C:\Program Files\RustDesk Server\hbbr.exe" ``` **笔记:** @@ -53,7 +53,6 @@ nssm install "RustDesk hbbr Service" "C:\Program Files\RustDesk Server\hbbr.exe" - 您可以将`RustDesk hbbr 服务`更改为您想要将 hbbr 服务命名为任何名称 - 您可以将 `C:\Program Files\RustDesk Server\hbbs.exe` 更改为放置 RustDesk 二进制文件的位置 - 您可以将 `C:\Program Files\RustDesk Server\hbbr.exe` 更改为放置 RustDesk 二进制文件的位置 -- 你不需要`-k _`选项,它是可选的,它只是为了更好的安全性 **命令模板:** @@ -96,7 +95,7 @@ pm2-startup install 下载Windows版本[服务器程序](https://github.com/rustdesk/rustdesk-server/releases),假设你解压缩到了C盘下。分别运行下面四行命令。 ``` cd c:\rustdesk-server-windows-x64 -pm2 start hbbs.exe -- -r hbbr运行所在主机的地址 +pm2 start hbbs.exe pm2 start hbbr.exe pm2 save ``` diff --git a/content/self-host/rustdesk-server-oss/windows/_index.zh-tw.md b/content/self-host/rustdesk-server-oss/windows/_index.zh-tw.md index 3111983..055eb61 100644 --- a/content/self-host/rustdesk-server-oss/windows/_index.zh-tw.md +++ b/content/self-host/rustdesk-server-oss/windows/_index.zh-tw.md @@ -38,15 +38,14 @@ Windows 安全政策較為複雜,如果這份教程對您不適用,或您遇 我們將在範例中使用 `C:\Program Files\RustDesk Server`。 ```cmd -nssm install "RustDesk hbbs service" "C:\Program Files\RustDesk Server\hbbs.exe" -k _ -nssm install "RustDesk hbbr service" "C:\Program Files\RustDesk Server\hbbr.exe" -k _ +nssm install "RustDesk hbbs service" "C:\Program Files\RustDesk Server\hbbs.exe" +nssm install "RustDesk hbbr service" "C:\Program Files\RustDesk Server\hbbr.exe" ``` **注意:** - 您可以將 `RustDesk hbbs service` 改為任何您希望命名 hbbs 的服務名稱。 - 您可以將 `RustDesk hbbr service` 改為任何您希望命名 hbbr 的服務名稱。 - 您可以將 `C:\Program Files\RustDesk Server\hbbs.exe` 改為 RustDesk 執行檔所在的位置。 - 您可以將 `C:\Program Files\RustDesk Server\hbbr.exe` 改為 RustDesk 執行檔所在的位置。 -- 您不需要使用 `-k _` 選項,這是可選的,只是為了更好的安全性。在 `Pro` 版本中,請忽略 `-k _`,它是隱含應用的。 **指令範例:** diff --git a/content/self-host/rustdesk-server-pro/_index.de.md b/content/self-host/rustdesk-server-pro/_index.de.md index 5fb6908..a6052c6 100644 --- a/content/self-host/rustdesk-server-pro/_index.de.md +++ b/content/self-host/rustdesk-server-pro/_index.de.md @@ -46,10 +46,7 @@ Vergessen Sie nicht, Ihre Lizenz unter [https://rustdesk.com/pricing.html](https #### Manuelle Installation -Fast dasselbe wie die [Open-Source-Version](https://rustdesk.com/docs/de/self-host/rustdesk-server-oss/install/), aber Sie müssen hbbs/hbbr nicht mit irgendwelchen Argumenten ausführen. Diese können später in der Webkonsole eingestellt werden. - -- `-k _` ist standardmäßig eingestellt -- `-r ` wird nicht mehr benötigt, wenn der Relay-Server auf demselben Rechner wie hbbs läuft. Sie können in der Webkonsole mehrere Relay-Server einstellen. +Fast dasselbe wie die [Open-Source-Version](https://rustdesk.com/docs/de/self-host/rustdesk-server-oss/install/), sondern verwenden Sie die Pro-Version der Software. #### Erforderliche Ports diff --git a/content/self-host/rustdesk-server-pro/_index.en.md b/content/self-host/rustdesk-server-pro/_index.en.md index c787a48..d1d854c 100644 --- a/content/self-host/rustdesk-server-pro/_index.en.md +++ b/content/self-host/rustdesk-server-pro/_index.en.md @@ -6,6 +6,7 @@ pre: "2.2. " RustDesk Server Pro has more features compared to the open source version. +- Account - No concurrent connection limit, aka no limit of simultaneous connections (OSS version has no limit either, but TeamViewer etc. have this limit) - [Web console](https://rustdesk.com/docs/en/self-host/rustdesk-server-pro/console/) - API @@ -59,10 +60,7 @@ Don't forget to get your license from [https://rustdesk.com/pricing.html](https: #### Manual Installation -Almost the same as [the open source version](https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/install/), but you do not need to run hbbs/hbbr with any arguments. These can be set later in web console. - -- `-k _` is set by default -- `-r ` is not needed any more if the relay server runs on the same machine with hbbs, and you can set multiple relay servers in the web console +Almost the same as [the open source version](https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/install/), but please use the `Pro` version of the software. #### Docker Installation diff --git a/content/self-host/rustdesk-server-pro/_index.it.md b/content/self-host/rustdesk-server-pro/_index.it.md index 432f721..79fb92c 100644 --- a/content/self-host/rustdesk-server-pro/_index.it.md +++ b/content/self-host/rustdesk-server-pro/_index.it.md @@ -41,10 +41,7 @@ Non dimenticare di prendere la tua licenza da [https://rustdesk.com/pricing.html #### Installazione Manuale -L' installazione è simile alla [versione opensource](https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/install/), ma non è necessario eseguire hbbs/hbbr con alcun argomento. Possono essere inseriti in seguito dalla console web. - -- `-k _` è impostato di default -- `-r ` non è più necessario se il server relay è eseguito sulla stessa macchina tramite hbbs, in seguito possono essere impostati relay multipli dalla console web. +L' installazione è simile alla [versione opensource](https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/install/), ma ti preghiamo di utilizzare la versione Pro del software. #### Porte Richieste @@ -53,4 +50,4 @@ Sono necessarie le porte TCP `21114-21119` e UDP `21116`, assicurati che queste {{% notice note %}} E' consigliato utilizzare un proxy come Nginx per utilizzare HTTPS, questo richiede che la porta `443` venga aperta. -{{% /notice %}} \ No newline at end of file +{{% /notice %}} diff --git a/content/self-host/rustdesk-server-pro/_index.pt.md b/content/self-host/rustdesk-server-pro/_index.pt.md index 231fcff..abe4384 100644 --- a/content/self-host/rustdesk-server-pro/_index.pt.md +++ b/content/self-host/rustdesk-server-pro/_index.pt.md @@ -59,10 +59,7 @@ Você pode obter a licença em [https://rustdesk.com/pricing.html](https://rustd ### Instalação manual -É quase idêntica à versão [gratuita](https://rustdesk.com/docs/pt/self-host/rustdesk-server-oss/install/), mas você não precisa executar hbbs/hbbr com nenhum argumento. Eles podem ser definidos posteriormente no console web. - -- `-k _` é definido por padrão. -- `-r ` não é mais necessário se o servidor de retransmissão estiver executando na mesma máquina que o hbbs, e você pode definir vários servidores de retransmissão no console web. +É quase idêntica à versão [gratuita](https://rustdesk.com/docs/pt/self-host/rustdesk-server-oss/install/), mas utilize a versão Pro do software. #### Instalação Docker diff --git a/content/self-host/rustdesk-server-pro/_index.zh-cn.md b/content/self-host/rustdesk-server-pro/_index.zh-cn.md index cde974c..7a37cd7 100644 --- a/content/self-host/rustdesk-server-pro/_index.zh-cn.md +++ b/content/self-host/rustdesk-server-pro/_index.zh-cn.md @@ -34,10 +34,7 @@ weight: 100 ### 手动安装 -几乎与[开源版本](/docs/zh-cn/self-host/install/)相同,但您在执行 hbbs/hbbr 时不需加上任何参数,全部都能在网页控制台中设定。 - -- `-k _` 预设设定 -- `-r ` 如果中继服务器跟 hbbs 在同一台服务器执行,便不需要加上此参数。且您可以在网页控制台设置多台中继服务器。 +几乎与[开源版本](/docs/zh-cn/self-host/install/)相同,只是注意换成`Pro`版本的软件。 ### 额外端口 (或使用 Proxy) diff --git a/content/self-host/rustdesk-server-pro/_index.zh-tw.md b/content/self-host/rustdesk-server-pro/_index.zh-tw.md index 4e7a4b1..05dbec0 100644 --- a/content/self-host/rustdesk-server-pro/_index.zh-tw.md +++ b/content/self-host/rustdesk-server-pro/_index.zh-tw.md @@ -34,10 +34,7 @@ weight: 100 ### 手動安裝 -幾乎與[開源版本](/docs/zh-tw/self-host/install/)相同,但您在執行 hbbs/hbbr 時不需加上任何參數,全部都能在網頁控制台中設定。 - -- `-k _` 預設設定 -- `-r ` 如果中繼伺服器跟 hbbs 在同一台伺服器執行,便不需要加上此參數。且您可以在網頁控制台設置多台中繼伺服器。 +幾乎與[開源版本](/docs/zh-tw/self-host/install/)相同,只是注意換成`Pro`版本的軟體。 ### 額外連接埠 (或使用 Proxy) diff --git a/content/self-host/rustdesk-server-pro/faq/_index.en.md b/content/self-host/rustdesk-server-pro/faq/_index.en.md index b8b37d2..b9c29d7 100644 --- a/content/self-host/rustdesk-server-pro/faq/_index.en.md +++ b/content/self-host/rustdesk-server-pro/faq/_index.en.md @@ -134,11 +134,6 @@ Your mail server may not be using port 25. Please make sure you are using the co ### Can I deploy RustDesk using PowerShell or similar? Sure, you can find scripts to aid deployment [here](https://rustdesk.com/docs/en/self-host/client-deployment/). -### I have installed RustDesk Server Pro manually but the API web console isn't behind SSL, how can I secure this? -Use a proxy like Nginx, the simple install script has one, it's really simple. [This is how we do it](https://github.com/rustdesk/rustdesk-server-pro/blob/493ad90daf8815c3052ff4d0d4aa9cc07e411efa/install.sh#L252). - -Similar configs should work with Traefik v2, HAProxy, Apache Proxy and Cloudflare Tunnel. - ### How can I file a bug report? Please file via [GitHub](https://github.com/rustdesk/rustdesk-server-pro/issues). @@ -263,7 +258,7 @@ There are two ways: ```sh cat > /etc/nginx/sites-available/rustdesk.conf << EOF server { -server_name ; + server_name ; location / { proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; @@ -280,7 +275,7 @@ Run `cat /etc/nginx/sites-available/rustdesk.conf` to make sure its content is c ```sh cat > /etc/nginx/conf.d/rustdesk.conf << EOF server { -server_name ; + server_name ; location / { proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; @@ -302,15 +297,15 @@ sudo ufw --force reload ``` #### 6. Generate SSL certificate -Replace `` with your domain name, then run -`sudo certbot --nginx --cert-name --key-type ecdsa --renew-by-default --no-eff-email --agree-tos --server https://acme-v02.api.letsencrypt.org/directory -d `. +Replace `$YOUR_DOMAIN` with your domain name, then run +`sudo certbot --nginx --cert-name $YOUR_DOMAIN --key-type ecdsa --renew-by-default --no-eff-email --agree-tos --server https://acme-v02.api.letsencrypt.org/directory -d $YOUR_DOMAIN`. If it prompts `Enter email address (used for urgent renewal and security notices)`, enter your email address. Finally, the content of `rustdesk.conf` should be like this: ``` server { -server_name ; + server_name ; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -322,17 +317,16 @@ server_name ; ssl_certificate_key /etc/letsencrypt/live//privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot - } + server { if ($host = ) { return 301 https://$host$request_uri; } # managed by Certbot -server_name ; + server_name ; listen 80; return 404; # managed by Certbot - } ``` @@ -363,7 +357,109 @@ Solution: it may be caused by firewall, please refer to https://rustdesk.com/doc Notice: Run `sudo service nginx restart` if you change the `rustdesk.conf` manually. #### 7. Login to the web page -* Open https:// in the browser, log in using the default user name "admin" and password "test1234", then change the password to your own. +* Open `https://` in the browser, log in using the default user name "admin" and password "test1234", then change the password to your own. + +#### 8. Add WebSocket Secure (WSS) support for the id server and relay server to enable secure communication for the web client. + +Add the following configuration to the first `server` section of the `/etc/nginx/.../rustdesk.conf` file, then restart the `Nginx` service. + +``` + location /ws/id { + proxy_pass http://localhost:21118; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /ws/relay { + proxy_pass http://localhost:21119; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +``` + +The full configuration is + +``` +server { + server_name ; + location / { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://127.0.0.1:21114/; + } + + location /ws/id { + proxy_pass http://localhost:21118; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /ws/relay { + proxy_pass http://localhost:21119; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + listen 443 ssl; # managed by Certbot + ssl_certificate /etc/letsencrypt/live//fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live//privkey.pem; # managed by Certbot + include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot +} + +server { + if ($host = ) { + return 301 https://$host$request_uri; + } # managed by Certbot + + server_name ; + listen 80; + return 404; # managed by Certbot +} +``` + +#### 9. Log in to your server from RustDesk public web client at `https://rustdesk.com/web`. + +You need to add below in the `location /` section of the `/etc/nginx/.../rustdesk.conf` to bypass CORS limitation of browsers. + +``` + if ($http_origin ~* (https?://(www\.)?rustdesk\.com)) { + add_header 'Access-Control-Allow-Origin' "$http_origin" always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, PATCH, OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept, Authorization' always; + add_header 'Access-Control-Allow-Credentials' 'true' always; + } + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' "$http_origin" always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, PATCH, OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept, Authorization' always; + add_header 'Access-Control-Allow-Credentials' 'true' always; + add_header 'Content-Length' 0; + add_header 'Content-Type' 'text/plain charset=UTF-8'; + return 204; + } +``` + ### SELinux diff --git a/content/self-host/rustdesk-server-pro/oidc/_index.en.md b/content/self-host/rustdesk-server-pro/oidc/_index.en.md index 313e35b..bc7da3b 100644 --- a/content/self-host/rustdesk-server-pro/oidc/_index.en.md +++ b/content/self-host/rustdesk-server-pro/oidc/_index.en.md @@ -5,3 +5,7 @@ weight: 16 - Use your existing `Google`, `Okta`, `Facebook`, `Azure`, `GitHub`, `GitLab`, etc. accounts to easily create and log in to your `RustDesk Pro` account. - For the specification see [OpenID Connect Core 1.0 incorporating errata set 1](https://openid.net/specs/openid-connect-core-1_0.html). + +# Examples +{{% children depth="4" showhidden="true" %}} + diff --git a/v2/pricing.html b/v2/pricing.html index 59f699a..6eef098 100644 --- a/v2/pricing.html +++ b/v2/pricing.html @@ -376,7 +376,7 @@ label {
Our Self-hosting Plans
-
Bigger Plans & 3rd-Party Hosting & Help
+
Bigger Plans & Help
diff --git a/v3/.editorconfig b/v3/.editorconfig new file mode 100644 index 0000000..8927e2c --- /dev/null +++ b/v3/.editorconfig @@ -0,0 +1,12 @@ +# https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = false \ No newline at end of file diff --git a/v3/.github/workflows/actions.yaml b/v3/.github/workflows/actions.yaml new file mode 100644 index 0000000..2ac3fc0 --- /dev/null +++ b/v3/.github/workflows/actions.yaml @@ -0,0 +1,41 @@ +name: GitHub Actions + +on: + pull_request: + branches: + - main + push: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: + - 18 + - 20 + - 22 + steps: + - uses: actions/checkout@v4 + - name: Use Node.js v${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: npm + - run: npm ci + - run: npm run build + # - run: npm test + + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Use Node.js 22 + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + - run: npm ci + - run: npm run check diff --git a/v3/.gitignore b/v3/.gitignore new file mode 100644 index 0000000..33741a8 --- /dev/null +++ b/v3/.gitignore @@ -0,0 +1,24 @@ +# build output +dist/ +.output/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store + +pnpm-lock.yaml + +.astro \ No newline at end of file diff --git a/v3/.npmrc b/v3/.npmrc new file mode 100644 index 0000000..999db39 --- /dev/null +++ b/v3/.npmrc @@ -0,0 +1,2 @@ +# Expose Astro dependencies for `pnpm` users +shamefully-hoist=true \ No newline at end of file diff --git a/v3/.prettierignore b/v3/.prettierignore new file mode 100644 index 0000000..76b517c --- /dev/null +++ b/v3/.prettierignore @@ -0,0 +1,4 @@ +dist +node_modules +.github +.changeset \ No newline at end of file diff --git a/v3/.prettierrc.cjs b/v3/.prettierrc.cjs new file mode 100644 index 0000000..752ef12 --- /dev/null +++ b/v3/.prettierrc.cjs @@ -0,0 +1,13 @@ +/** @type {import('prettier').Config} */ +module.exports = { + printWidth: 120, + semi: true, + singleQuote: true, + tabWidth: 2, + trailingComma: 'es5', + useTabs: false, + + plugins: [require.resolve('prettier-plugin-astro')], + + overrides: [{ files: '*.astro', options: { parser: 'astro' } }], +}; diff --git a/v3/.stackblitzrc b/v3/.stackblitzrc new file mode 100644 index 0000000..43798ec --- /dev/null +++ b/v3/.stackblitzrc @@ -0,0 +1,6 @@ +{ + "startCommand": "npm start", + "env": { + "ENABLE_CJS_IMPORTS": true + } +} \ No newline at end of file diff --git a/v3/.vscode/astrowind/config-schema.json b/v3/.vscode/astrowind/config-schema.json new file mode 100644 index 0000000..3297fa3 --- /dev/null +++ b/v3/.vscode/astrowind/config-schema.json @@ -0,0 +1,275 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "site": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "site": { + "type": "string" + }, + "base": { + "type": "string" + }, + "trailingSlash": { + "type": "boolean" + }, + "googleSiteVerificationId": { + "type": "string" + } + }, + "required": ["name", "site", "base", "trailingSlash"], + "additionalProperties": false + }, + "metadata": { + "type": "object", + "properties": { + "title": { + "type": "object", + "properties": { + "default": { + "type": "string" + }, + "template": { + "type": "string" + } + }, + "required": ["default", "template"] + }, + "description": { + "type": "string" + }, + "robots": { + "type": "object", + "properties": { + "index": { + "type": "boolean" + }, + "follow": { + "type": "boolean" + } + }, + "required": ["index", "follow"] + }, + "openGraph": { + "type": "object", + "properties": { + "site_name": { + "type": "string" + }, + "images": { + "type": "array", + "items": [ + { + "type": "object", + "properties": { + "url": { + "type": "string" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + } + }, + "required": ["url", "width", "height"] + } + ] + }, + "type": { + "type": "string" + } + }, + "required": ["site_name", "images", "type"] + }, + "twitter": { + "type": "object", + "properties": { + "handle": { + "type": "string" + }, + "site": { + "type": "string" + }, + "cardType": { + "type": "string" + } + }, + "required": ["handle", "site", "cardType"] + } + }, + "required": ["title", "description", "robots", "openGraph", "twitter"] + }, + "i18n": { + "type": "object", + "properties": { + "language": { + "type": "string" + }, + "textDirection": { + "type": "string" + } + }, + "required": ["language", "textDirection"] + }, + "apps": { + "type": "object", + "properties": { + "blog": { + "type": "object", + "properties": { + "isEnabled": { + "type": "boolean" + }, + "postsPerPage": { + "type": "integer" + }, + "isRelatedPostsEnabled": { + "type": "boolean" + }, + "relatedPostsCount": { + "type": "integer" + }, + "post": { + "type": "object", + "properties": { + "isEnabled": { + "type": "boolean" + }, + "permalink": { + "type": "string" + }, + "robots": { + "type": "object", + "properties": { + "index": { + "type": "boolean" + }, + "follow": { + "type": "boolean" + } + }, + "required": ["index"] + } + }, + "required": ["isEnabled", "permalink", "robots"] + }, + "list": { + "type": "object", + "properties": { + "isEnabled": { + "type": "boolean" + }, + "pathname": { + "type": "string" + }, + "robots": { + "type": "object", + "properties": { + "index": { + "type": "boolean" + }, + "follow": { + "type": "boolean" + } + }, + "required": ["index"] + } + }, + "required": ["isEnabled", "pathname", "robots"] + }, + "category": { + "type": "object", + "properties": { + "isEnabled": { + "type": "boolean" + }, + "pathname": { + "type": "string" + }, + "robots": { + "type": "object", + "properties": { + "index": { + "type": "boolean" + }, + "follow": { + "type": "boolean" + } + }, + "required": ["index"] + } + }, + "required": ["isEnabled", "pathname", "robots"] + }, + "tag": { + "type": "object", + "properties": { + "isEnabled": { + "type": "boolean" + }, + "pathname": { + "type": "string" + }, + "robots": { + "type": "object", + "properties": { + "index": { + "type": "boolean" + }, + "follow": { + "type": "boolean" + } + }, + "required": ["index"] + } + }, + "required": ["isEnabled", "pathname", "robots"] + } + }, + "required": ["isEnabled", "postsPerPage", "post", "list", "category", "tag"] + } + }, + "required": ["blog"] + }, + "analytics": { + "type": "object", + "properties": { + "vendors": { + "type": "object", + "properties": { + "googleAnalytics": { + "type": "object", + "properties": { + "id": { + "type": ["string", "null"] + }, + "partytown": { + "type": "boolean", + "default": true + } + }, + "required": ["id"] + } + }, + "required": ["googleAnalytics"] + } + }, + "required": ["vendors"] + }, + "ui": { + "type": "object", + "properties": { + "theme": { + "type": "string" + } + }, + "required": ["theme"] + } + }, + "required": ["site", "metadata", "i18n", "apps", "analytics", "ui"] +} diff --git a/v3/.vscode/extensions.json b/v3/.vscode/extensions.json new file mode 100644 index 0000000..ec1bfc0 --- /dev/null +++ b/v3/.vscode/extensions.json @@ -0,0 +1,10 @@ +{ + "recommendations": [ + "astro-build.astro-vscode", + "bradlc.vscode-tailwindcss", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "unifiedjs.vscode-mdx" + ], + "unwantedRecommendations": [] +} diff --git a/v3/.vscode/launch.json b/v3/.vscode/launch.json new file mode 100644 index 0000000..d642209 --- /dev/null +++ b/v3/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "command": "./node_modules/.bin/astro dev", + "name": "Development server", + "request": "launch", + "type": "node-terminal" + } + ] +} diff --git a/v3/.vscode/settings.json b/v3/.vscode/settings.json new file mode 100644 index 0000000..c400773 --- /dev/null +++ b/v3/.vscode/settings.json @@ -0,0 +1,15 @@ +{ + "css.customData": ["./vscode.tailwind.json"], + "eslint.validate": ["javascript", "javascriptreact", "astro", "typescript", "typescriptreact"], + "files.associations": { + "*.mdx": "markdown" + }, + "prettier.documentSelectors": ["**/*.astro"], + "[astro]": { + "editor.defaultFormatter": "astro-build.astro-vscode" + }, + "yaml.schemas": { + "./.vscode/astrowind/config-schema.json": "/src/config.yaml" + }, + "eslint.useFlatConfig": true +} diff --git a/v3/LICENSE.md b/v3/LICENSE.md new file mode 100644 index 0000000..fa4db58 --- /dev/null +++ b/v3/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 onWidget + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/v3/README.md b/v3/README.md new file mode 100644 index 0000000..3cdaefb --- /dev/null +++ b/v3/README.md @@ -0,0 +1,295 @@ +# 🚀 AstroWind + +AstroWind Lighthouse Score + +🌟 _Most *starred* & *forked* Astro theme in 2022 & 2023_. 🌟 + +**AstroWind** is a free and open-source template to make your website using **[Astro 4.0](https://astro.build/) + [Tailwind CSS](https://tailwindcss.com/)**. Ready to start a new project and designed taking into account web best practices. + +- ✅ **Production-ready** scores in **PageSpeed Insights** reports. +- ✅ Integration with **Tailwind CSS** supporting **Dark mode** and **_RTL_**. +- ✅ **Fast and SEO friendly blog** with automatic **RSS feed**, **MDX** support, **Categories & Tags**, **Social Share**, ... +- ✅ **Image Optimization** (using new **Astro Assets** and **Unpic** for Universal image CDN). +- ✅ Generation of **project sitemap** based on your routes. +- ✅ **Open Graph tags** for social media sharing. +- ✅ **Analytics** built-in Google Analytics, and Splitbee integration. + +
+ +AstroWind Theme Screenshot + +[![onWidget](https://custom-icon-badges.demolab.com/badge/made%20by%20-onWidget-556bf2?style=flat-square&logo=onwidget&logoColor=white&labelColor=101827)](https://onwidget.com) +[![License](https://img.shields.io/github/license/onwidget/astrowind?style=flat-square&color=dddddd&labelColor=000000)](https://github.com/onwidget/astrowind/blob/main/LICENSE.md) +[![Maintained](https://img.shields.io/badge/maintained%3F-yes-brightgreen.svg?style=flat-square)](https://github.com/onwidget) +[![Contributions Welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat-square)](https://github.com/onwidget/astrowind#contributing) +[![Known Vulnerabilities](https://snyk.io/test/github/onwidget/astrowind/badge.svg?style=flat-square)](https://snyk.io/test/github/onwidget/astrowind) +[![Stars](https://img.shields.io/github/stars/onwidget/astrowind.svg?style=social&label=stars&maxAge=86400&color=ff69b4)](https://github.com/onwidget/astrowind) +[![Forks](https://img.shields.io/github/forks/onwidget/astrowind.svg?style=social&label=forks&maxAge=86400&color=ff69b4)](https://github.com/onwidget/astrowind) + +
+ +
+Table of Contents + +- [Demo](#demo) +- [Upcoming: AstroWind 2.0 – We Need Your Vision!](#-upcoming-astrowind-20--we-need-your-vision) +- [Getting started](#getting-started) + - [Project structure](#project-structure) + - [Commands](#commands) + - [Configuration](#configuration) + - [Deploy](#deploy) +- [Frequently Asked Questions](#frequently-asked-questions) +- [Related Projects](#related-projects) +- [Contributing](#contributing) +- [Acknowledgements](#acknowledgements) +- [License](#license) + +
+ +
+ +## Demo + +📌 [https://astrowind.vercel.app/](https://astrowind.vercel.app/) + +
+ +## 🔔 Upcoming: AstroWind 2.0 – We Need Your Vision! + +We're embarking on an exciting journey with **AstroWind 2.0**, and we want you to be a part of it! We're currently taking the first steps in developing this new version and your insights are invaluable. Join the discussion and share your feedback, ideas, and suggestions to help shape the future of **AstroWind**. Let's make **AstroWind 2.0** even better, together! + +[Share Your Feedback in Our Discussion!](https://github.com/onwidget/astrowind/discussions/392) + +
+ +## Getting started + +**AstroWind** tries to give you quick access to creating a website using [Astro 4.0](https://astro.build/) + [Tailwind CSS](https://tailwindcss.com/). It's a free theme which focuses on simplicity, good practices and high performance. + +Very little vanilla javascript is used only to provide basic functionality so that each developer decides which framework (React, Vue, Svelte, Solid JS...) to use and how to approach their goals. + +In this version the template supports all the options in the `output` configuration, `static`, `hybrid` and `server`, but the blog only works with `prerender = true`. We are working on the next version and aim to make it fully compatible with SSR. + +### Project structure + +Inside **AstroWind** template, you'll see the following folders and files: + +``` +/ +├── public/ +│ ├── _headers +│ └── robots.txt +├── src/ +│ ├── assets/ +│ │ ├── favicons/ +│ │ ├── images/ +│ │ └── styles/ +│ │ └── tailwind.css +│ ├── components/ +│ │ ├── blog/ +│ │ ├── common/ +│ │ ├── ui/ +│ │ ├── widgets/ +│ │ │ ├── Header.astro +│ │ │ └── ... +│ │ ├── CustomStyles.astro +│ │ ├── Favicons.astro +│ │ └── Logo.astro +│ ├── content/ +│ │ ├── post/ +│ │ │ ├── post-slug-1.md +│ │ │ ├── post-slug-2.mdx +│ │ │ └── ... +│ │ └-- config.ts +│ ├── layouts/ +│ │ ├── Layout.astro +│ │ ├── MarkdownLayout.astro +│ │ └── PageLayout.astro +│ ├── pages/ +│ │ ├── [...blog]/ +│ │ │ ├── [category]/ +│ │ │ ├── [tag]/ +│ │ │ ├── [...page].astro +│ │ │ └── index.astro +│ │ ├── index.astro +│ │ ├── 404.astro +│ │ ├-- rss.xml.ts +│ │ └── ... +│ ├── utils/ +│ ├── config.yaml +│ └── navigation.js +├── package.json +├── astro.config.ts +└── ... +``` + +Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name. + +There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components. + +Any static assets, like images, can be placed in the `public/` directory if they do not require any transformation or in the `assets/` directory if they are imported directly. + +[![Edit AstroWind on CodeSandbox](https://codesandbox.io/static/img/play-codesandbox.svg)](https://githubbox.com/onwidget/astrowind/tree/main) [![Open in Gitpod](https://svgshare.com/i/xdi.svg)](https://gitpod.io/?on=gitpod#https://github.com/onwidget/astrowind) [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/onwidget/astrowind) + +> 🧑‍🚀 **Seasoned astronaut?** Delete this file `README.md`. Update `src/config.yaml` and contents. Have fun! + +
+ +### Commands + +All commands are run from the root of the project, from a terminal: + +| Command | Action | +| :-------------------- | :------------------------------------------------- | +| `npm install` | Installs dependencies | +| `npm run dev` | Starts local dev server at `localhost:3000` | +| `npm run build` | Build your production site to `./dist/` | +| `npm run preview` | Preview your build locally, before deploying | +| `npm run format` | Format codes with Prettier | +| `npm run lint:eslint` | Run Eslint | +| `npm run astro ...` | Run CLI commands like `astro add`, `astro preview` | + +
+ +### Configuration + +Basic configuration file: `./src/config.yaml` + +```yaml +site: + name: 'Example' + site: 'https://example.com' + base: '/' # Change this if you need to deploy to Github Pages, for example + trailingSlash: false # Generate permalinks with or without "/" at the end + + googleSiteVerificationId: false # Or some value, + +# Default SEO metadata +metadata: + title: + default: 'Example' + template: '%s — Example' + description: 'This is the default meta description of Example website' + robots: + index: true + follow: true + openGraph: + site_name: 'Example' + images: + - url: '~/assets/images/default.png' + width: 1200 + height: 628 + type: website + twitter: + handle: '@twitter_user' + site: '@twitter_user' + cardType: summary_large_image + +i18n: + language: en + textDirection: ltr + +apps: + blog: + isEnabled: true # If the blog will be enabled + postsPerPage: 6 # Number of posts per page + + post: + isEnabled: true + permalink: '/blog/%slug%' # Variables: %slug%, %year%, %month%, %day%, %hour%, %minute%, %second%, %category% + robots: + index: true + + list: + isEnabled: true + pathname: 'blog' # Blog main path, you can change this to "articles" (/articles) + robots: + index: true + + category: + isEnabled: true + pathname: 'category' # Category main path /category/some-category, you can change this to "group" (/group/some-category) + robots: + index: true + + tag: + isEnabled: true + pathname: 'tag' # Tag main path /tag/some-tag, you can change this to "topics" (/topics/some-category) + robots: + index: false + + isRelatedPostsEnabled: true # If a widget with related posts is to be displayed below each post + relatedPostsCount: 4 # Number of related posts to display + +analytics: + vendors: + googleAnalytics: + id: null # or "G-XXXXXXXXXX" + +ui: + theme: 'system' # Values: "system" | "light" | "dark" | "light:only" | "dark:only" +``` + +
+ +#### Customize Design + +To customize Font families, Colors or more Elements refer to the following files: + +- `src/components/CustomStyles.astro` +- `src/assets/styles/tailwind.css` + +### Deploy + +#### Deploy to production (manual) + +You can create an optimized production build with: + +```shell +npm run build +``` + +Now, your website is ready to be deployed. All generated files are located at +`dist` folder, which you can deploy the folder to any hosting service you +prefer. + +#### Deploy to Netlify + +Clone this repository on your own GitHub account and deploy it to Netlify: + +[![Netlify Deploy button](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/onwidget/astrowind) + +#### Deploy to Vercel + +Clone this repository on your own GitHub account and deploy to Vercel: + +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fonwidget%2Fastrowind) + +
+ +## Frequently Asked Questions + +- Why? +- +- + +
+ +## Related projects + +- [TailNext](https://tailnext.vercel.app/) - Free template using Next.js 14 and Tailwind CSS with the new App Router. +- [Qwind](https://qwind.pages.dev/) - Free template to make your website using Qwik + Tailwind CSS. + +## Contributing + +If you have any ideas, suggestions or find any bugs, feel free to open a discussion, an issue or create a pull request. +That would be very useful for all of us and we would be happy to listen and take action. + +## Acknowledgements + +Initially created by [onWidget](https://onwidget.com) and maintained by a community of [contributors](https://github.com/onwidget/astrowind/graphs/contributors). + +## License + +**AstroWind** is licensed under the MIT license — see the [LICENSE](./LICENSE.md) file for details. diff --git a/v3/astro.config.ts b/v3/astro.config.ts new file mode 100644 index 0000000..4beba68 --- /dev/null +++ b/v3/astro.config.ts @@ -0,0 +1,100 @@ +import path from 'path'; +import { fileURLToPath } from 'url'; + +import { defineConfig } from 'astro/config'; + +import sitemap from '@astrojs/sitemap'; +import tailwind from '@astrojs/tailwind'; +import mdx from '@astrojs/mdx'; +import partytown from '@astrojs/partytown'; +import icon from 'astro-icon'; +import compress from 'astro-compress'; +import type { AstroIntegration } from 'astro'; + +import astrowind from './vendor/integration'; + +import { readingTimeRemarkPlugin, responsiveTablesRehypePlugin, lazyImagesRehypePlugin } from './src/utils/frontmatter'; + +import react from '@astrojs/react'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +const hasExternalScripts = false; +const whenExternalScripts = (items: (() => AstroIntegration) | (() => AstroIntegration)[] = []) => + hasExternalScripts ? (Array.isArray(items) ? items.map((item) => item()) : [items()]) : []; + +export default defineConfig({ + output: 'static', + i18n: { + defaultLocale: 'en', + locales: ['en', 'de', 'es', 'fr', 'it', 'ja', 'pt', 'zh-cn', 'zh-tw', 'ko', 'ar'], + routing: { + prefixDefaultLocale: true, + redirectToDefaultLocale: false, + }, + }, + integrations: [ + react(), + tailwind({ + applyBaseStyles: false, + }), + sitemap(), + mdx(), + icon({ + include: { + tabler: ['*'], + 'flat-color-icons': [ + 'template', + 'gallery', + 'approval', + 'document', + 'advertising', + 'currency-exchange', + 'voice-presentation', + 'business-contact', + 'database', + ], + }, + }), + + ...whenExternalScripts(() => + partytown({ + config: { forward: ['dataLayer.push'] }, + }) + ), + + compress({ + CSS: true, + HTML: { + 'html-minifier-terser': { + removeAttributeQuotes: false, + }, + }, + Image: false, + JavaScript: true, + SVG: false, + Logger: 1, + }), + + astrowind({ + config: './src/config.yaml', + }), + ], + + image: { + domains: ['cdn.pixabay.com'], + }, + + markdown: { + remarkPlugins: [readingTimeRemarkPlugin], + rehypePlugins: [responsiveTablesRehypePlugin, lazyImagesRehypePlugin], + }, + + vite: { + resolve: { + alias: { + '~': path.resolve(__dirname, './src'), + }, + }, + }, +}); diff --git a/v3/deploy.sh b/v3/deploy.sh new file mode 100755 index 0000000..27b6fc8 --- /dev/null +++ b/v3/deploy.sh @@ -0,0 +1,18 @@ + #!/usr/bin/env bash + npm run build + cd dist + ln -s pricing/index.html pricing.html + ln -s terms/index.html terms.html + ln -s success/index.html success.html + ln -s cancel/index.html cancel.html + ln -s privacy/index.html privacy.html + ln -s team/index.html team.html + ln -s careers/index.html careers.html + ln -s open-source/index.html open-source.html + ln -s ../v2/self-host + ln -s ../v2/web + tar czf x * + scp x ot:/tmp/ + ssh ot "sudo tar xzf /tmp/x -C /var/www/html/v3 && /bin/rm /tmp/x && sudo chown www-data:www-data /var/www/html/v3 -R" + /bin/rm x + cd - diff --git a/v3/eslint.config.js b/v3/eslint.config.js new file mode 100644 index 0000000..3961a84 --- /dev/null +++ b/v3/eslint.config.js @@ -0,0 +1,59 @@ +import astroEslintParser from 'astro-eslint-parser'; +import eslintPluginAstro from 'eslint-plugin-astro'; +import globals from 'globals'; +import js from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import typescriptParser from '@typescript-eslint/parser'; + +export default [ + js.configs.recommended, + ...eslintPluginAstro.configs['flat/recommended'], + ...tseslint.configs.recommended, + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.node, + }, + }, + }, + { + files: ['**/*.astro'], + languageOptions: { + parser: astroEslintParser, + parserOptions: { + parser: '@typescript-eslint/parser', + extraFileExtensions: ['.astro'], + }, + }, + }, + { + files: ['**/*.{js,jsx,astro}'], + rules: { + 'no-mixed-spaces-and-tabs': ['error', 'smart-tabs'], + }, + }, + { + // Define the configuration for ` diff --git a/v3/src/components/CookieConsentConfig.ts b/v3/src/components/CookieConsentConfig.ts new file mode 100644 index 0000000..41fe833 --- /dev/null +++ b/v3/src/components/CookieConsentConfig.ts @@ -0,0 +1,62 @@ +import type { CookieConsentConfig } from 'vanilla-cookieconsent'; +import en from './cookie/en.json'; +import de from './cookie/de.json'; +import es from './cookie/es.json'; +import fr from './cookie/fr.json'; +import pt from './cookie/pt.json'; +import it from './cookie/it.json'; +import ja from './cookie/ja.json'; +import ar from './cookie/ar.json'; +import ko from './cookie/ko.json'; +import zhCN from './cookie/zh-CN.json'; +import zhTW from './cookie/zh-TW.json'; + +export const config: CookieConsentConfig = { + guiOptions: { + consentModal: { + layout: 'box inline', + position: 'bottom left', + }, + preferencesModal: { + layout: 'box', + position: 'right', + equalWeightButtons: true, + flipButtons: false, + }, + }, + onConsent: () => { + localStorage.setItem('cookie-accepted', 'true'); + }, + categories: { + necessary: { + readOnly: true, + }, + functionality: {}, + analytics: { + services: { + ga4: { + label: + 'Google Analytics 4', + onAccept: () => { + // TODO: load ga4 + }, + onReject: () => { + console.log('ga4 rejected'); + }, + cookies: [ + { + name: /^_ga/, + }, + ], + }, + }, + }, + }, + language: { + default: 'en', + autoDetect: 'document', + translations: { + en, de, es, fr, ja, pt, it, 'zh-CN': zhCN, 'zh-TW': zhTW, ar, ko, + }, + }, +}; diff --git a/v3/src/components/CustomStyles.astro b/v3/src/components/CustomStyles.astro new file mode 100644 index 0000000..2b27954 --- /dev/null +++ b/v3/src/components/CustomStyles.astro @@ -0,0 +1,63 @@ +--- +import '@fontsource-variable/inter'; + +// 'DM Sans' +// Nunito +// Dosis +// Outfit +// Roboto +// Literata +// 'IBM Plex Sans' +// Karla +// Poppins +// 'Fira Sans' +// 'Libre Franklin' +// Inconsolata +// Raleway +// Oswald +// 'Space Grotesk' +// Urbanist +--- + + diff --git a/v3/src/components/Favicons.astro b/v3/src/components/Favicons.astro new file mode 100644 index 0000000..fed6696 --- /dev/null +++ b/v3/src/components/Favicons.astro @@ -0,0 +1,10 @@ +--- +import favIcon from '~/assets/favicons/favicon.ico'; +import favIconSvg from '~/assets/favicons/favicon.svg'; +import appleTouchIcon from '~/assets/favicons/apple-touch-icon.png'; +--- + + + + + diff --git a/v3/src/components/Logo.astro b/v3/src/components/Logo.astro new file mode 100644 index 0000000..204168c --- /dev/null +++ b/v3/src/components/Logo.astro @@ -0,0 +1,11 @@ +--- +import { SITE } from 'astrowind:config'; +import logo from '~/assets/images/logo.svg'; +--- + + + RustDesk Logo + {SITE?.name?.toLowerCase()} + diff --git a/v3/src/components/blog/Grid.astro b/v3/src/components/blog/Grid.astro new file mode 100644 index 0000000..1b62be4 --- /dev/null +++ b/v3/src/components/blog/Grid.astro @@ -0,0 +1,14 @@ +--- +import Item from '~/components/blog/GridItem.astro'; +import type { Post } from '~/types'; + +export interface Props { + posts: Array; +} + +const { posts } = Astro.props; +--- + +
+ {posts.map((post) => )} +
diff --git a/v3/src/components/blog/GridItem.astro b/v3/src/components/blog/GridItem.astro new file mode 100644 index 0000000..cf7ed14 --- /dev/null +++ b/v3/src/components/blog/GridItem.astro @@ -0,0 +1,69 @@ +--- +import { APP_BLOG } from 'astrowind:config'; +import type { Post } from '~/types'; + +import Image from '~/components/common/Image.astro'; + +import { findImage } from '~/utils/images'; +import { getPermalink } from '~/utils/permalinks'; + +export interface Props { + post: Post; +} + +const { post } = Astro.props; +const image = await findImage(post.image); + +const link = APP_BLOG?.post?.isEnabled ? getPermalink(post.permalink, 'post') : ''; +--- + +
+
+ { + image && + (link ? ( + + {post.title} + + ) : ( + {post.title} + )) + } +
+ +

+ { + link ? ( + + {post.title} + + ) : ( + post.title + ) + } +

+ +

{post.excerpt}

+
diff --git a/v3/src/components/blog/Headline.astro b/v3/src/components/blog/Headline.astro new file mode 100644 index 0000000..5d3ccc6 --- /dev/null +++ b/v3/src/components/blog/Headline.astro @@ -0,0 +1,12 @@ +--- +const { title = await Astro.slots.render('default'), subtitle = await Astro.slots.render('subtitle') } = Astro.props; +--- + +
+

+ { + subtitle && ( +
+ ) + } +

diff --git a/v3/src/components/blog/List.astro b/v3/src/components/blog/List.astro new file mode 100644 index 0000000..6a80ae3 --- /dev/null +++ b/v3/src/components/blog/List.astro @@ -0,0 +1,20 @@ +--- +import Item from '~/components/blog/ListItem.astro'; +import type { Post } from '~/types'; + +export interface Props { + posts: Array; +} + +const { posts } = Astro.props; +--- + +
    + { + posts.map((post) => ( +
  • + +
  • + )) + } +
diff --git a/v3/src/components/blog/ListItem.astro b/v3/src/components/blog/ListItem.astro new file mode 100644 index 0000000..3fef240 --- /dev/null +++ b/v3/src/components/blog/ListItem.astro @@ -0,0 +1,118 @@ +--- +import type { ImageMetadata } from 'astro'; +import { Icon } from 'astro-icon/components'; +import Image from '~/components/common/Image.astro'; +import PostTags from '~/components/blog/Tags.astro'; + +import { APP_BLOG } from 'astrowind:config'; +import type { Post } from '~/types'; + +import { getPermalink } from '~/utils/permalinks'; +import { findImage } from '~/utils/images'; +import { getFormattedDate } from '~/utils/utils'; + +export interface Props { + post: Post; +} + +const { post } = Astro.props; +const image = (await findImage(post.image)) as ImageMetadata | undefined; + +const link = APP_BLOG?.post?.isEnabled ? getPermalink(post.permalink, 'post') : ''; +--- + +
+ { + image && + (link ? ( + + + + ) : ( + + )) + } +
+
+
+ + + + { + post.author && ( + <> + {' '} + · + {post.author.replaceAll('-', ' ')} + + ) + } + { + post.category && ( + <> + {' '} + ·{' '} + + {post.category.title} + + + ) + } + +
+

+ { + link ? ( + + {post.title} + + ) : ( + post.title + ) + } +

+
+ + {post.excerpt &&

{post.excerpt}

} + { + post.tags && Array.isArray(post.tags) ? ( +
+ +
+ ) : ( + + ) + } +
+
diff --git a/v3/src/components/blog/Pagination.astro b/v3/src/components/blog/Pagination.astro new file mode 100644 index 0000000..051587c --- /dev/null +++ b/v3/src/components/blog/Pagination.astro @@ -0,0 +1,36 @@ +--- +import { Icon } from 'astro-icon/components'; +import { getPermalink } from '~/utils/permalinks'; +import Button from '~/components/ui/Button.astro'; + +export interface Props { + prevUrl?: string; + nextUrl?: string; + prevText?: string; + nextText?: string; +} + +const { prevUrl, nextUrl, prevText = 'Newer posts', nextText = 'Older posts' } = Astro.props; +--- + +{ + (prevUrl || nextUrl) && ( +
+
+ + + +
+
+ ) +} diff --git a/v3/src/components/blog/RelatedPosts.astro b/v3/src/components/blog/RelatedPosts.astro new file mode 100644 index 0000000..8d55ecd --- /dev/null +++ b/v3/src/components/blog/RelatedPosts.astro @@ -0,0 +1,28 @@ +--- +import { APP_BLOG } from 'astrowind:config'; + +import { getRelatedPosts } from '~/utils/blog'; +import BlogHighlightedPosts from '../widgets/BlogHighlightedPosts.astro'; +import type { Post } from '~/types'; +import { getBlogPermalink } from '~/utils/permalinks'; + +export interface Props { + post: Post; +} + +const { post } = Astro.props; + +const relatedPosts = post.tags ? await getRelatedPosts(post, 4) : []; +--- + +{ + APP_BLOG.isRelatedPostsEnabled ? ( + post.id)} + /> + ) : null +} diff --git a/v3/src/components/blog/SinglePost.astro b/v3/src/components/blog/SinglePost.astro new file mode 100644 index 0000000..0bb70c8 --- /dev/null +++ b/v3/src/components/blog/SinglePost.astro @@ -0,0 +1,94 @@ +--- +import { Icon } from 'astro-icon/components'; + +import Image from '~/components/common/Image.astro'; +import PostTags from '~/components/blog/Tags.astro'; +import SocialShare from '~/components/common/SocialShare.astro'; + +import { getPermalink } from '~/utils/permalinks'; +import { getFormattedDate } from '~/utils/utils'; + +import type { Post } from '~/types'; + +export interface Props { + post: Post; + url: string | URL; +} + +const { post, url } = Astro.props; +--- + +
+
+
+
+

+ + + { + post.author && ( + <> + {' '} + · + {post.author} + + ) + } + { + post.category && ( + <> + {' '} + ·{' '} + + {post.category.title} + + + ) + } + { + post.readingTime && ( + <> +  · {post.readingTime} min read + + ) + } +

+
+ +

+ {post.title} +

+ + { + post.image ? ( + {post?.excerpt + ) : ( +
+
+
+ ) + } +
+
+ +
+
+ + +
+
+
diff --git a/v3/src/components/blog/Tags.astro b/v3/src/components/blog/Tags.astro new file mode 100644 index 0000000..30b09e2 --- /dev/null +++ b/v3/src/components/blog/Tags.astro @@ -0,0 +1,45 @@ +--- +import { getPermalink } from '~/utils/permalinks'; + +import { APP_BLOG } from 'astrowind:config'; +import type { Post } from '~/types'; + +export interface Props { + tags: Post['tags']; + class?: string; + title?: string | undefined; + isCategory?: boolean; +} + +const { tags, class: className = 'text-sm', title = undefined, isCategory = false } = Astro.props; +--- + +{ + tags && Array.isArray(tags) && ( + <> + <> + {title !== undefined && ( + + {title} + + )} + +
    + {tags.map((tag) => ( +
  • + {!APP_BLOG?.tag?.isEnabled ? ( + tag.title + ) : ( + + {tag.title} + + )} +
  • + ))} +
+ + ) +} diff --git a/v3/src/components/blog/ToBlogLink.astro b/v3/src/components/blog/ToBlogLink.astro new file mode 100644 index 0000000..7fb7a49 --- /dev/null +++ b/v3/src/components/blog/ToBlogLink.astro @@ -0,0 +1,20 @@ +--- +import { Icon } from 'astro-icon/components'; +import { getBlogPermalink } from '~/utils/permalinks'; +import { I18N } from 'astrowind:config'; +import Button from '~/components/ui/Button.astro'; + +const { textDirection } = I18N; +--- + +
+ +
diff --git a/v3/src/components/common/Analytics.astro b/v3/src/components/common/Analytics.astro new file mode 100644 index 0000000..a1a553d --- /dev/null +++ b/v3/src/components/common/Analytics.astro @@ -0,0 +1,13 @@ +--- +import { GoogleAnalytics } from '@astrolib/analytics'; +import { ANALYTICS } from 'astrowind:config'; +--- + +{ + ANALYTICS?.vendors?.googleAnalytics?.id ? ( + + ) : null +} diff --git a/v3/src/components/common/ApplyColorMode.astro b/v3/src/components/common/ApplyColorMode.astro new file mode 100644 index 0000000..d0d97fe --- /dev/null +++ b/v3/src/components/common/ApplyColorMode.astro @@ -0,0 +1,33 @@ +--- +import { UI } from 'astrowind:config'; + +// TODO: This code is temporary +--- + + diff --git a/v3/src/components/common/BasicScripts.astro b/v3/src/components/common/BasicScripts.astro new file mode 100644 index 0000000..fa3c9a9 --- /dev/null +++ b/v3/src/components/common/BasicScripts.astro @@ -0,0 +1,181 @@ +--- +import { UI } from 'astrowind:config'; +--- + + diff --git a/v3/src/components/common/CommonMeta.astro b/v3/src/components/common/CommonMeta.astro new file mode 100644 index 0000000..aab6dd4 --- /dev/null +++ b/v3/src/components/common/CommonMeta.astro @@ -0,0 +1,8 @@ +--- +import { getAsset } from '~/utils/permalinks'; +--- + + + + + diff --git a/v3/src/components/common/Image.astro b/v3/src/components/common/Image.astro new file mode 100644 index 0000000..ada4f27 --- /dev/null +++ b/v3/src/components/common/Image.astro @@ -0,0 +1,64 @@ +--- +import type { HTMLAttributes } from 'astro/types'; +import { findImage } from '~/utils/images'; +import { + getImagesOptimized, + astroAsseetsOptimizer, + unpicOptimizer, + isUnpicCompatible, + type ImageProps, +} from '~/utils/images-optimization'; + +type Props = ImageProps; +type ImageType = { + src: string; + attributes: HTMLAttributes<'img'>; +}; + +const props = Astro.props; + +if (props.alt === undefined || props.alt === null) { + throw new Error(); +} + +if (typeof props.width === 'string') { + props.width = parseInt(props.width); +} + +if (typeof props.height === 'string') { + props.height = parseInt(props.height); +} + +if (!props.loading) { + props.loading = 'lazy'; +} + +if (!props.decoding) { + props.decoding = 'async'; +} + +const _image = await findImage(props.src); + +let image: ImageType | undefined = undefined; + +if (typeof _image === 'string') { + if ((_image.startsWith('http://') || _image.startsWith('https://')) && isUnpicCompatible(_image)) { + image = await getImagesOptimized(_image, props, unpicOptimizer); + } else { + image = { + src: _image, + attributes: { ...props, src: undefined }, + }; + } +} else if (_image) { + image = await getImagesOptimized(_image, props, astroAsseetsOptimizer); +} +--- + +{ + !image ? ( + + ) : ( + + ) +} diff --git a/v3/src/components/common/Metadata.astro b/v3/src/components/common/Metadata.astro new file mode 100644 index 0000000..a4c573e --- /dev/null +++ b/v3/src/components/common/Metadata.astro @@ -0,0 +1,68 @@ +--- +import merge from 'lodash.merge'; +import { AstroSeo } from '@astrolib/seo'; + +import type { Props as AstroSeoProps } from '@astrolib/seo'; + +import { SITE, METADATA, I18N } from 'astrowind:config'; +import type { MetaData } from '~/types'; +import { getCanonical } from '~/utils/permalinks'; + +import { adaptOpenGraphImages } from '~/utils/images'; + +export interface Props extends MetaData { + dontUseTitleTemplate?: boolean; +} + +const { + title, + ignoreTitleTemplate = false, + canonical = String(getCanonical(String(Astro.url.pathname))), + robots = {}, + description, + openGraph = {}, + twitter = {}, +} = Astro.props; + +const seoProps: AstroSeoProps = merge( + { + title: '', + titleTemplate: '%s', + canonical: canonical, + noindex: true, + nofollow: true, + description: undefined, + openGraph: { + url: canonical, + site_name: SITE?.name, + images: [], + locale: I18N?.language || 'en', + type: 'website', + }, + twitter: { + cardType: openGraph?.images?.length ? 'summary_large_image' : 'summary', + }, + }, + { + title: METADATA?.title?.default, + titleTemplate: METADATA?.title?.template, + noindex: typeof METADATA?.robots?.index !== 'undefined' ? !METADATA.robots.index : undefined, + nofollow: typeof METADATA?.robots?.follow !== 'undefined' ? !METADATA.robots.follow : undefined, + description: METADATA?.description, + openGraph: METADATA?.openGraph, + twitter: METADATA?.twitter, + }, + { + title: title, + titleTemplate: ignoreTitleTemplate ? '%s' : undefined, + canonical: canonical, + noindex: typeof robots?.index !== 'undefined' ? !robots.index : undefined, + nofollow: typeof robots?.follow !== 'undefined' ? !robots.follow : undefined, + description: description, + openGraph: { url: canonical, ...openGraph }, + twitter: twitter, + } +); +--- + + diff --git a/v3/src/components/common/Scamming.jsx b/v3/src/components/common/Scamming.jsx new file mode 100644 index 0000000..1212af1 --- /dev/null +++ b/v3/src/components/common/Scamming.jsx @@ -0,0 +1,147 @@ +import React, { useState, useEffect } from 'react'; +import { useTranslations } from '@/i18n'; + +const ScammingBanner = ({ lang }) => { + const t = useTranslations(lang || ''); + const [isHide, setHide] = useState(true); + + useEffect(() => { + const hideScammer = localStorage.getItem('hide-scammer'); + if (hideScammer !== 'Y') { + setHide(false); + } + }, []); + + const handleClose = () => { + setHide(true); + localStorage.setItem('hide-scammer', 'Y'); + }; + + if (isHide === true) { + return null; + } + + return ( +
+ + {t({ + en: ( + <> + WARNING: YOU MAY BE BEING SCAMMED!
+ If you are on the phone with someone you DON'T know AND TRUST who has asked you to install RustDesk, +
+ do not install and hang up immediately.
+ They are likely a scammer trying to steal your money or other private information. + + ), + fr: ( + <> + ATTENTION: VOUS POURRIEZ ÊTRE SCAMMÉ!
+ Si vous êtes sur la ligne avec quelqu'un que vous ne connaissez pas et qui vous a demandé d'installer + RustDesk, +
+ ne l'installez pas et coupez immédiatement.
+ Ils sont probablement des escrocs qui essaient de voler votre argent ou d'autres informations privées. + + ), + de: ( + <> + WARNUNG: Sie könnten betrogen worden sein!
+ Wenn du mit jemanden telefoniest, der du nicht kennst und vertraust, der dich fragt, RustDesk zu + installieren, +
+ installiere es nicht und hänge sofort auf.
+ Sie sind wahrscheinlich ein Betrüger, der versucht, dein Geld oder andere private Informationen zu + stehlen. + + ), + es: ( + <> + ADVERTENCIA: PODRÍAS ESTAR SIENDO ESTAFADO!
+ Si estás en la llamada con alguien que no conoces y no puedes confiar que te pida instalar RustDesk, +
+ no instales y cuelga inmediatamente.
+ Probablemente sean estafadores que intentan robar tu dinero o otra información privada. + + ), + pt: ( + <> + AVISO: VOCÊ PODE ESTAR SENDO ENGANADO!
+ Se você está no telefone com alguém que NÃO conhece e CONFIANÇA que pediu para instalar RustDesk, +
+ não instale e desligue imediatamente.
+ Eles provavelmente são golpistas tentando roubar seu dinheiro ou outras informações privadas. + + ), + 'zh-cn': ( + <> + 警告:您可能正在被骗!
+ 如果您与您不认识和信任的人通话,并要求您安装 RustDesk, +
+ 请勿安装并立即挂断。
+ 他们很可能是骗子,试图窃取您的钱或其他私人信息。 + + ), + 'zh-tw': ( + <> + 警告:您可能正在被騙!
+ 如果您與您不認識和信任的人通話,並要求您安裝 RustDesk, +
+ 請勿安裝並立即掛斷。
+ 他們很可能是騙子,試圖竊取您的錢或其他私人信息。 + + ), + ja: ( + <> + 警告:あなたは騙されているかもしれません!
+ RustDesk をインストールするように頼んだことがない人と電話中である場合、 +
+ インストールしないですぐに電話を切断してください。
+ おそらく、あなたのお金や他の個人情報を盗もうとする詐欺師です。 + + ), + it: ( + <> + AVVISO: POTRESTI ESSERE TRUFFATO!
+ Se sei al telefono con qualcuno che NON conosci e in cui CONFIANZA ti ha chiesto di installare RustDesk, +
+ non installare e riaggancia immediatamente.
+ Probabilmente sono truffatori che cercano di rubarti i soldi o + + ), + ko: ( + <> + 경고: 사기당하고 있을 수 있습니다!
+ RustDesk를 설치하라고 요청한 사람과 전화 중이고, 그 사람을 모르고 믿을 수 없다면, +
+ 설치하지 말고 즉시 전화를 끊으십시오.
+ 그들은 아마도 돈이나 다른 개인 정보를 훔치려는 사기꾼일 가능성이 높습니다. + + ), + ar: ( + <> + تحذير: قد تكون ضحية احتيال!
+ إذا كنت تتحدث عبر الهاتف مع شخص لا تعرفه وطلب منك تثبيت RustDesk، +
+ لا تقم بالتثبيت واغلق المكالمة فوراً.
+ من المحتمل أنهم محتالون يحاولون سرقة أموالك. + + ), + })} +
+ +
+ ); +}; + +export default ScammingBanner; diff --git a/v3/src/components/common/SiteVerification.astro b/v3/src/components/common/SiteVerification.astro new file mode 100644 index 0000000..000baad --- /dev/null +++ b/v3/src/components/common/SiteVerification.astro @@ -0,0 +1,5 @@ +--- +import { SITE } from 'astrowind:config'; +--- + +{SITE.googleSiteVerificationId && } diff --git a/v3/src/components/common/SocialShare.astro b/v3/src/components/common/SocialShare.astro new file mode 100644 index 0000000..d035e8f --- /dev/null +++ b/v3/src/components/common/SocialShare.astro @@ -0,0 +1,65 @@ +--- +import { Icon } from 'astro-icon/components'; + +export interface Props { + text: string; + url: string | URL; + class?: string; +} + +const { text, url, class: className = 'inline-block' } = Astro.props; +--- + +
+ Share: + + + + + +
diff --git a/v3/src/components/common/SplitbeeAnalytics.astro b/v3/src/components/common/SplitbeeAnalytics.astro new file mode 100644 index 0000000..66651db --- /dev/null +++ b/v3/src/components/common/SplitbeeAnalytics.astro @@ -0,0 +1,6 @@ +--- +const { doNotTrack = true, noCookieMode = false, url = 'https://cdn.splitbee.io/sb.js' } = Astro.props; +--- + + + diff --git a/v3/src/components/common/ToggleMenu.astro b/v3/src/components/common/ToggleMenu.astro new file mode 100644 index 0000000..2d19b16 --- /dev/null +++ b/v3/src/components/common/ToggleMenu.astro @@ -0,0 +1,29 @@ +--- +export interface Props { + label?: string; + class?: string; +} + +const { + label = 'Toggle Menu', + class: className = 'flex flex-col h-12 w-12 rounded justify-center items-center cursor-pointer group', +} = Astro.props; +--- + + diff --git a/v3/src/components/common/ToggleTheme.astro b/v3/src/components/common/ToggleTheme.astro new file mode 100644 index 0000000..8f3aafb --- /dev/null +++ b/v3/src/components/common/ToggleTheme.astro @@ -0,0 +1,28 @@ +--- +import { Icon } from 'astro-icon/components'; + +import { UI } from 'astrowind:config'; + +export interface Props { + label?: string; + class?: string; + iconClass?: string; + iconName?: string; +} + +const { + label = 'Toggle between Dark and Light mode', + class: + className = 'text-muted dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 rounded-lg text-sm p-2.5 inline-flex items-center', + iconClass = 'w-6 h-6', + iconName = 'tabler:sun', +} = Astro.props; +--- + +{ + !(UI.theme && UI.theme.endsWith(':only')) && ( + + ) +} diff --git a/v3/src/components/cookie/ar.json b/v3/src/components/cookie/ar.json new file mode 100644 index 0000000..bf62997 --- /dev/null +++ b/v3/src/components/cookie/ar.json @@ -0,0 +1,55 @@ +{ + "consentModal": { + "label": "موافقة ملفات تعريف الارتباط", + "title": "مرحبًا أيها المسافر، حان وقت ملفات تعريف الارتباط!", + "description": "يستخدم موقعنا ملفات تعريف ارتباط أساسية لضمان التشغيل السليم وملفات تعريف ارتباط للتتبع لفهم كيفية تفاعلك معه. سيتم تعيين الأخيرة فقط بعد الموافقة. ", + "acceptAllBtn": "قبول الكل", + "acceptNecessaryBtn": "رفض الكل", + "showPreferencesBtn": "إدارة التفضيلات" + }, + "preferencesModal": { + "title": "تفضيلات ملفات تعريف الارتباط", + "acceptAllBtn": "قبول الكل", + "acceptNecessaryBtn": "رفض الكل", + "savePreferencesBtn": "حفظ التفضيلات", + "closeIconLabel": "إغلاق", + "sections": [ + { + "title": "استخدام ملفات تعريف الارتباط", + "description": "نحن نستخدم ملفات تعريف الارتباط لضمان الوظائف الأساسية للموقع ولتحسين تجربتك عبر الإنترنت ..." + }, + { + "title": "ملفات تعريف الارتباط الضرورية للغاية", + "description": "هذه الملفات ضرورية للتشغيل السليم لموقعي. بدون هذه الملفات، لن يعمل الموقع بشكل صحيح", + "linkedCategory": "necessary" + }, + { + "title": "ملفات تعريف الارتباط الخاصة بالأداء والتحليلات", + "description": "تسمح هذه الملفات للموقع بتذكر الاختيارات التي قمت بها في الماضي", + "linkedCategory": "analytics", + "cookieTable": { + "headers": { + "name": "الاسم", + "domain": "الخدمة", + "description": "الوصف", + "expiration": "انتهاء الصلاحية" + }, + "body": [ + { + "name": "_ga", + "domain": "Google Analytics", + "description": "ملف تعريف ارتباط تم تعيينه بواسطة Google Analytics.", + "expiration": "تنتهي صلاحيته بعد 12 يومًا" + }, + { + "name": "_gid", + "domain": "Google Analytics", + "description": "ملف تعريف ارتباط تم تعيينه بواسطة Google Analytics", + "expiration": "الجلسة" + } + ] + } + } + ] + } +} diff --git a/v3/src/components/cookie/de.json b/v3/src/components/cookie/de.json new file mode 100644 index 0000000..e654ce0 --- /dev/null +++ b/v3/src/components/cookie/de.json @@ -0,0 +1,55 @@ +{ + "consentModal": { + "label": "Cookie-Zustimmung", + "title": "Hallo Reisender, es ist Zeit für Cookies!", + "description": "Unsere Website verwendet essentielle Cookies, um den ordnungsgemäßen Betrieb zu gewährleisten, und Tracking-Cookies, um zu verstehen, wie Sie damit interagieren. Letztere werden erst nach Zustimmung gesetzt. ", + "acceptAllBtn": "Alle akzeptieren", + "acceptNecessaryBtn": "Alle ablehnen", + "showPreferencesBtn": "Einstellungen verwalten" + }, + "preferencesModal": { + "title": "Cookie-Einstellungen", + "acceptAllBtn": "Alle akzeptieren", + "acceptNecessaryBtn": "Alle ablehnen", + "savePreferencesBtn": "Einstellungen speichern", + "closeIconLabel": "Schließen", + "sections": [ + { + "title": "Cookie-Nutzung", + "description": "Wir verwenden Cookies, um die grundlegenden Funktionen der Website sicherzustellen und Ihr Online-Erlebnis zu verbessern ..." + }, + { + "title": "Unbedingt erforderliche Cookies", + "description": "Diese Cookies sind für das ordnungsgemäße Funktionieren meiner Website unerlässlich. Ohne diese Cookies würde die Website nicht richtig funktionieren", + "linkedCategory": "necessary" + }, + { + "title": "Leistungs- und Analyse-Cookies", + "description": "Diese Cookies ermöglichen es der Website, sich an die Entscheidungen zu erinnern, die Sie in der Vergangenheit getroffen haben", + "linkedCategory": "analytics", + "cookieTable": { + "headers": { + "name": "Name", + "domain": "Dienst", + "description": "Beschreibung", + "expiration": "Ablauf" + }, + "body": [ + { + "name": "_ga", + "domain": "Google Analytics", + "description": "Cookie gesetzt von Google Analytics.", + "expiration": "Läuft nach 12 Tagen ab" + }, + { + "name": "_gid", + "domain": "Google Analytics", + "description": "Cookie gesetzt von Google Analytics", + "expiration": "Sitzung" + } + ] + } + } + ] + } +} diff --git a/v3/src/components/cookie/en.json b/v3/src/components/cookie/en.json new file mode 100644 index 0000000..81c0267 --- /dev/null +++ b/v3/src/components/cookie/en.json @@ -0,0 +1,55 @@ +{ + "consentModal": { + "label": "Cookie Consent", + "title": "Hello traveller, it's cookie time!", + "description": "Our website uses essential cookies to ensure its proper operation and tracking cookies to understand how you interact with it. The latter will be set only after consent. ", + "acceptAllBtn": "Accept all", + "acceptNecessaryBtn": "Reject all", + "showPreferencesBtn": "Manage preferences" + }, + "preferencesModal": { + "title": "Cookie preferences", + "acceptAllBtn": "Accept all", + "acceptNecessaryBtn": "Reject all", + "savePreferencesBtn": "Save preferences", + "closeIconLabel": "Close", + "sections": [ + { + "title": "Cookie usage", + "description": "We use cookies to ensure the basic functionalities of the website and to enhance your online experience ..." + }, + { + "title": "Strictly necessary cookies", + "description": "These cookies are essential for the proper functioning of my website. Without these cookies, the website would not work properly", + "linkedCategory": "necessary" + }, + { + "title": "Performance and Analytics cookies", + "description": "These cookies allow the website to remember the choices you have made in the past", + "linkedCategory": "analytics", + "cookieTable": { + "headers": { + "name": "Name", + "domain": "Service", + "description": "Description", + "expiration": "Expiration" + }, + "body": [ + { + "name": "_ga", + "domain": "Google Analytics", + "description": "Cookie set by Google Analytics.", + "expiration": "Expires after 12 days" + }, + { + "name": "_gid", + "domain": "Google Analytics", + "description": "Cookie set by Google Analytics", + "expiration": "Session" + } + ] + } + } + ] + } +} diff --git a/v3/src/components/cookie/es.json b/v3/src/components/cookie/es.json new file mode 100644 index 0000000..ce78c4a --- /dev/null +++ b/v3/src/components/cookie/es.json @@ -0,0 +1,55 @@ +{ + "consentModal": { + "label": "Consentimiento de Cookies", + "title": "¡Hola viajero, es hora de las cookies!", + "description": "Nuestro sitio web utiliza cookies esenciales para garantizar su correcto funcionamiento y cookies de seguimiento para entender cómo interactúas con él. Estas últimas solo se establecerán después del consentimiento. ", + "acceptAllBtn": "Aceptar todas", + "acceptNecessaryBtn": "Rechazar todas", + "showPreferencesBtn": "Gestionar preferencias" + }, + "preferencesModal": { + "title": "Preferencias de cookies", + "acceptAllBtn": "Aceptar todas", + "acceptNecessaryBtn": "Rechazar todas", + "savePreferencesBtn": "Guardar preferencias", + "closeIconLabel": "Cerrar", + "sections": [ + { + "title": "Uso de cookies", + "description": "Utilizamos cookies para garantizar las funcionalidades básicas del sitio web y mejorar tu experiencia en línea ..." + }, + { + "title": "Cookies estrictamente necesarias", + "description": "Estas cookies son esenciales para el correcto funcionamiento de mi sitio web. Sin estas cookies, el sitio web no funcionaría correctamente", + "linkedCategory": "necessary" + }, + { + "title": "Cookies de rendimiento y análisis", + "description": "Estas cookies permiten al sitio web recordar las elecciones que has hecho en el pasado", + "linkedCategory": "analytics", + "cookieTable": { + "headers": { + "name": "Nombre", + "domain": "Servicio", + "description": "Descripción", + "expiration": "Expiración" + }, + "body": [ + { + "name": "_ga", + "domain": "Google Analytics", + "description": "Cookie establecida por Google Analytics.", + "expiration": "Expira después de 12 días" + }, + { + "name": "_gid", + "domain": "Google Analytics", + "description": "Cookie establecida por Google Analytics", + "expiration": "Sesión" + } + ] + } + } + ] + } +} diff --git a/v3/src/components/cookie/fr.json b/v3/src/components/cookie/fr.json new file mode 100644 index 0000000..ee5e233 --- /dev/null +++ b/v3/src/components/cookie/fr.json @@ -0,0 +1,55 @@ +{ + "consentModal": { + "label": "Consentement aux cookies", + "title": "Bonjour voyageur, c'est l'heure des cookies !", + "description": "Notre site web utilise des cookies essentiels pour assurer son bon fonctionnement et des cookies de suivi pour comprendre comment vous interagissez avec lui. Ces derniers ne seront installés qu'après consentement. ", + "acceptAllBtn": "Tout accepter", + "acceptNecessaryBtn": "Tout rejeter", + "showPreferencesBtn": "Gérer les préférences" + }, + "preferencesModal": { + "title": "Préférences des cookies", + "acceptAllBtn": "Tout accepter", + "acceptNecessaryBtn": "Tout rejeter", + "savePreferencesBtn": "Enregistrer les préférences", + "closeIconLabel": "Fermer", + "sections": [ + { + "title": "Utilisation des cookies", + "description": "Nous utilisons des cookies pour assurer les fonctionnalités de base du site web et pour améliorer votre expérience en ligne ..." + }, + { + "title": "Cookies strictement nécessaires", + "description": "Ces cookies sont essentiels au bon fonctionnement de notre site web. Sans ces cookies, le site ne fonctionnerait pas correctement", + "linkedCategory": "necessary" + }, + { + "title": "Cookies de performance et d'analyse", + "description": "Ces cookies permettent au site web de se souvenir des choix que vous avez faits dans le passé", + "linkedCategory": "analytics", + "cookieTable": { + "headers": { + "name": "Nom", + "domain": "Service", + "description": "Description", + "expiration": "Expiration" + }, + "body": [ + { + "name": "_ga", + "domain": "Google Analytics", + "description": "Cookie défini par Google Analytics.", + "expiration": "Expire après 12 jours" + }, + { + "name": "_gid", + "domain": "Google Analytics", + "description": "Cookie défini par Google Analytics", + "expiration": "Session" + } + ] + } + } + ] + } +} diff --git a/v3/src/components/cookie/it.json b/v3/src/components/cookie/it.json new file mode 100644 index 0000000..79ae33f --- /dev/null +++ b/v3/src/components/cookie/it.json @@ -0,0 +1,55 @@ +{ + "consentModal": { + "label": "Consenso ai cookie", + "title": "Ciao viaggiatore, è l'ora dei cookie!", + "description": "Il nostro sito web utilizza cookie essenziali per garantire il suo corretto funzionamento e cookie di tracciamento per capire come interagisci con esso. Questi ultimi saranno installati solo dopo il consenso. ", + "acceptAllBtn": "Accetta tutti", + "acceptNecessaryBtn": "Rifiuta tutti", + "showPreferencesBtn": "Gestisci preferenze" + }, + "preferencesModal": { + "title": "Preferenze dei cookie", + "acceptAllBtn": "Accetta tutti", + "acceptNecessaryBtn": "Rifiuta tutti", + "savePreferencesBtn": "Salva preferenze", + "closeIconLabel": "Chiudi", + "sections": [ + { + "title": "Utilizzo dei cookie", + "description": "Utilizziamo i cookie per garantire le funzionalità di base del sito web e per migliorare la tua esperienza online ..." + }, + { + "title": "Cookie strettamente necessari", + "description": "Questi cookie sono essenziali per il corretto funzionamento del nostro sito web. Senza questi cookie, il sito non funzionerebbe correttamente", + "linkedCategory": "necessary" + }, + { + "title": "Cookie di prestazione e analisi", + "description": "Questi cookie permettono al sito web di ricordare le scelte che hai fatto in passato", + "linkedCategory": "analytics", + "cookieTable": { + "headers": { + "name": "Nome", + "domain": "Servizio", + "description": "Descrizione", + "expiration": "Scadenza" + }, + "body": [ + { + "name": "_ga", + "domain": "Google Analytics", + "description": "Cookie impostato da Google Analytics.", + "expiration": "Scade dopo 12 giorni" + }, + { + "name": "_gid", + "domain": "Google Analytics", + "description": "Cookie impostato da Google Analytics", + "expiration": "Sessione" + } + ] + } + } + ] + } +} diff --git a/v3/src/components/cookie/ja.json b/v3/src/components/cookie/ja.json new file mode 100644 index 0000000..0be9218 --- /dev/null +++ b/v3/src/components/cookie/ja.json @@ -0,0 +1,55 @@ +{ + "consentModal": { + "label": "クッキー同意", + "title": "こんにちは旅人さん、クッキーの時間です!", + "description": "当ウェブサイトは、適切な運営を確保するために必要不可欠なクッキーと、お客様との対話を理解するための追跡クッキーを使用しています。後者は同意後にのみ設定されます。", + "acceptAllBtn": "すべて受け入れる", + "acceptNecessaryBtn": "すべて拒否する", + "showPreferencesBtn": "設定を管理する" + }, + "preferencesModal": { + "title": "クッキー設定", + "acceptAllBtn": "すべて受け入れる", + "acceptNecessaryBtn": "すべて拒否する", + "savePreferencesBtn": "設定を保存する", + "closeIconLabel": "閉じる", + "sections": [ + { + "title": "クッキーの使用", + "description": "私たちはウェブサイトの基本的な機能を確保し、オンライン体験を向上させるためにクッキーを使用しています..." + }, + { + "title": "厳密に必要なクッキー", + "description": "これらのクッキーは、当ウェブサイトの適切な機能のために不可欠です。これらのクッキーがなければ、ウェブサイトは正常に動作しません", + "linkedCategory": "necessary" + }, + { + "title": "パフォーマンスと分析用クッキー", + "description": "これらのクッキーにより、ウェブサイトはあなたが過去に行った選択を記憶することができます", + "linkedCategory": "analytics", + "cookieTable": { + "headers": { + "name": "名前", + "domain": "サービス", + "description": "説明", + "expiration": "有効期限" + }, + "body": [ + { + "name": "_ga", + "domain": "Google Analytics", + "description": "Google Analyticsによって設定されたクッキー。", + "expiration": "12日後に有効期限切れ" + }, + { + "name": "_gid", + "domain": "Google Analytics", + "description": "Google Analyticsによって設定されたクッキー", + "expiration": "セッション" + } + ] + } + } + ] + } +} diff --git a/v3/src/components/cookie/ko.json b/v3/src/components/cookie/ko.json new file mode 100644 index 0000000..0625292 --- /dev/null +++ b/v3/src/components/cookie/ko.json @@ -0,0 +1,55 @@ +{ + "consentModal": { + "label": "쿠키 동의", + "title": "안녕하세요 여행자님, 쿠키 시간입니다!", + "description": "우리 웹사이트는 적절한 운영을 위해 필수 쿠키를 사용하며, 귀하와의 상호작용을 이해하기 위해 추적 쿠키를 사용합니다. 후자는 동의 후에만 설정됩니다. ", + "acceptAllBtn": "모두 수락", + "acceptNecessaryBtn": "모두 거부", + "showPreferencesBtn": "환경설정 관리" + }, + "preferencesModal": { + "title": "쿠키 환경설정", + "acceptAllBtn": "모두 수락", + "acceptNecessaryBtn": "모두 거부", + "savePreferencesBtn": "환경설정 저장", + "closeIconLabel": "닫기", + "sections": [ + { + "title": "쿠키 사용", + "description": "우리는 웹사이트의 기본 기능을 보장하고 귀하의 온라인 경험을 향상시키기 위해 쿠키를 사용합니다 ..." + }, + { + "title": "엄격히 필요한 쿠키", + "description": "이 쿠키들은 제 웹사이트의 적절한 기능을 위해 필수적입니다. 이 쿠키들이 없으면 웹사이트가 제대로 작동하지 않을 것입니다", + "linkedCategory": "necessary" + }, + { + "title": "성능 및 분석 쿠키", + "description": "이 쿠키들은 웹사이트가 귀하가 과거에 선택한 사항들을 기억할 수 있게 합니다", + "linkedCategory": "analytics", + "cookieTable": { + "headers": { + "name": "이름", + "domain": "서비스", + "description": "설명", + "expiration": "만료" + }, + "body": [ + { + "name": "_ga", + "domain": "Google Analytics", + "description": "Google Analytics에 의해 설정된 쿠키입니다.", + "expiration": "12일 후 만료" + }, + { + "name": "_gid", + "domain": "Google Analytics", + "description": "Google Analytics에 의해 설정된 쿠키입니다", + "expiration": "세션" + } + ] + } + } + ] + } +} diff --git a/v3/src/components/cookie/pt.json b/v3/src/components/cookie/pt.json new file mode 100644 index 0000000..2e61579 --- /dev/null +++ b/v3/src/components/cookie/pt.json @@ -0,0 +1,55 @@ +{ + "consentModal": { + "label": "Consentimento de Cookies", + "title": "Olá viajante, é hora dos cookies!", + "description": "Nosso site usa cookies essenciais para garantir seu funcionamento adequado e cookies de rastreamento para entender como você interage com ele. Estes últimos só serão definidos após o consentimento. ", + "acceptAllBtn": "Aceitar todos", + "acceptNecessaryBtn": "Rejeitar todos", + "showPreferencesBtn": "Gerenciar preferências" + }, + "preferencesModal": { + "title": "Preferências de cookies", + "acceptAllBtn": "Aceitar todos", + "acceptNecessaryBtn": "Rejeitar todos", + "savePreferencesBtn": "Salvar preferências", + "closeIconLabel": "Fechar", + "sections": [ + { + "title": "Uso de cookies", + "description": "Usamos cookies para garantir as funcionalidades básicas do site e para melhorar sua experiência online ..." + }, + { + "title": "Cookies estritamente necessários", + "description": "Esses cookies são essenciais para o funcionamento adequado do nosso site. Sem esses cookies, o site não funcionaria corretamente", + "linkedCategory": "necessary" + }, + { + "title": "Cookies de desempenho e análise", + "description": "Esses cookies permitem que o site lembre as escolhas que você fez no passado", + "linkedCategory": "analytics", + "cookieTable": { + "headers": { + "name": "Nome", + "domain": "Serviço", + "description": "Descrição", + "expiration": "Expiração" + }, + "body": [ + { + "name": "_ga", + "domain": "Google Analytics", + "description": "Cookie definido pelo Google Analytics.", + "expiration": "Expira após 12 dias" + }, + { + "name": "_gid", + "domain": "Google Analytics", + "description": "Cookie definido pelo Google Analytics", + "expiration": "Sessão" + } + ] + } + } + ] + } +} diff --git a/v3/src/components/cookie/zh-CN.json b/v3/src/components/cookie/zh-CN.json new file mode 100644 index 0000000..cb91d6b --- /dev/null +++ b/v3/src/components/cookie/zh-CN.json @@ -0,0 +1,55 @@ +{ + "consentModal": { + "label": "Cookie 同意", + "title": "你好旅行者,是时候选择 Cookie 了!", + "description": "我们的网站使用必要的 cookie 来确保其正常运行,并使用跟踪 cookie 来了解您与之交互的方式。后者只有在得到同意后才会设置。", + "acceptAllBtn": "接受全部", + "acceptNecessaryBtn": "拒绝全部", + "showPreferencesBtn": "管理偏好设置" + }, + "preferencesModal": { + "title": "Cookie 偏好设置", + "acceptAllBtn": "接受全部", + "acceptNecessaryBtn": "拒绝全部", + "savePreferencesBtn": "保存偏好设置", + "closeIconLabel": "关闭", + "sections": [ + { + "title": "Cookie 使用", + "description": "我们使用 cookie 来确保网站的基本功能并增强您的在线体验 ..." + }, + { + "title": "严格必要的 cookie", + "description": "这些 cookie 对我的网站的正常运行至关重要。没有这些 cookie,网站将无法正常工作", + "linkedCategory": "necessary" + }, + { + "title": "性能和分析 cookie", + "description": "这些 cookie 允许网站记住您过去做出的选择", + "linkedCategory": "analytics", + "cookieTable": { + "headers": { + "name": "名称", + "domain": "服务", + "description": "描述", + "expiration": "过期时间" + }, + "body": [ + { + "name": "_ga", + "domain": "Google Analytics", + "description": "由 Google Analytics 设置的 cookie。", + "expiration": "12天后过期" + }, + { + "name": "_gid", + "domain": "Google Analytics", + "description": "由 Google Analytics 设置的 cookie", + "expiration": "会话结束时" + } + ] + } + } + ] + } +} diff --git a/v3/src/components/cookie/zh-TW.json b/v3/src/components/cookie/zh-TW.json new file mode 100644 index 0000000..c9f2fc9 --- /dev/null +++ b/v3/src/components/cookie/zh-TW.json @@ -0,0 +1,55 @@ +{ + "consentModal": { + "label": "Cookie 同意", + "title": "您好旅行者,是時候談談 Cookie 了!", + "description": "我們的網站使用必要的 Cookie 來確保其正常運作,並使用追蹤 Cookie 來了解您如何與之互動。後者只有在得到同意後才會設置。", + "acceptAllBtn": "接受全部", + "acceptNecessaryBtn": "拒絕全部", + "showPreferencesBtn": "管理偏好設置" + }, + "preferencesModal": { + "title": "Cookie 偏好設置", + "acceptAllBtn": "接受全部", + "acceptNecessaryBtn": "拒絕全部", + "savePreferencesBtn": "保存偏好設置", + "closeIconLabel": "關閉", + "sections": [ + { + "title": "Cookie 使用", + "description": "我們使用 Cookie 來確保網站的基本功能並增強您的線上體驗 ..." + }, + { + "title": "絕對必要的 Cookie", + "description": "這些 Cookie 對於我的網站的正常運作至關重要。沒有這些 Cookie,網站將無法正常工作", + "linkedCategory": "necessary" + }, + { + "title": "性能和分析 Cookie", + "description": "這些 Cookie 允許網站記住您過去做出的選擇", + "linkedCategory": "analytics", + "cookieTable": { + "headers": { + "name": "名稱", + "domain": "服務", + "description": "描述", + "expiration": "過期時間" + }, + "body": [ + { + "name": "_ga", + "domain": "Google Analytics", + "description": "由 Google Analytics 設置的 Cookie。", + "expiration": "12天後過期" + }, + { + "name": "_gid", + "domain": "Google Analytics", + "description": "由 Google Analytics 設置的 Cookie", + "expiration": "會話結束時" + } + ] + } + } + ] + } +} diff --git a/v3/src/components/ui/Background.astro b/v3/src/components/ui/Background.astro new file mode 100644 index 0000000..1093c17 --- /dev/null +++ b/v3/src/components/ui/Background.astro @@ -0,0 +1,11 @@ +--- +export interface Props { + isDark?: boolean; +} + +const { isDark = false } = Astro.props; +--- + +
+ +
diff --git a/v3/src/components/ui/Button.astro b/v3/src/components/ui/Button.astro new file mode 100644 index 0000000..d3c2398 --- /dev/null +++ b/v3/src/components/ui/Button.astro @@ -0,0 +1,40 @@ +--- +import { Icon } from 'astro-icon/components'; +import { twMerge } from 'tailwind-merge'; +import type { CallToAction as Props } from '~/types'; + +const { + variant = 'secondary', + target, + text = Astro.slots.render('default'), + icon = '', + class: className = '', + type, + ...rest +} = Astro.props; + +const variants = { + primary: 'btn-primary', + secondary: 'btn-secondary', + tertiary: 'btn btn-tertiary', + link: 'cursor-pointer hover:text-primary', +}; +--- + +{ + type === 'button' || type === 'submit' || type === 'reset' ? ( + + ) : ( + + + {icon && } + + ) +} diff --git a/v3/src/components/ui/DListItem.astro b/v3/src/components/ui/DListItem.astro new file mode 100644 index 0000000..36d4072 --- /dev/null +++ b/v3/src/components/ui/DListItem.astro @@ -0,0 +1,22 @@ +--- +// component: DListItem +// +// Mimics the html 'dl' (description list) +// +// The 'dt' item is the item 'term' and is inserted into an 'h6' tag. +// Caller needs to style the 'h6' tag appropriately. +// +// You can put pretty much any content you want between the open and +// closing tags - it's simply contained in an enclosing div with a +// margin left. No need for 'dd' items. +// +const { dt } = Astro.props; +interface Props { + dt: string; +} + +const content: string = await Astro.slots.render('default'); +--- + +
+
diff --git a/v3/src/components/ui/Form.astro b/v3/src/components/ui/Form.astro new file mode 100644 index 0000000..276b39f --- /dev/null +++ b/v3/src/components/ui/Form.astro @@ -0,0 +1,87 @@ +--- +import type { Form as Props } from '~/types'; +import Button from '~/components/ui/Button.astro'; + +const { inputs, textarea, disclaimer, button = 'Contact us', description = '' } = Astro.props; +--- + +
+ { + inputs && + inputs.map( + ({ type = 'text', name, label = '', autocomplete = 'on', placeholder = '' }) => + name && ( +
+ {label && ( + + )} + +
+ ) + ) + } + + { + textarea && ( +
+ +