Compare commits
47 Commits
module-app
...
cli/fix/ru
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2e45229c82 | ||
|
|
35770fbe46 | ||
|
|
39cb3335d6 | ||
|
|
0e1208d555 | ||
|
|
65fa0c0da8 | ||
|
|
cf7125aac8 | ||
|
|
46ba0e64e8 | ||
|
|
a15fe1e3e0 | ||
|
|
1b3305dd98 | ||
|
|
54f2996efe | ||
|
|
7870520b57 | ||
|
|
2dbd99d64a | ||
|
|
44d3f5d26a | ||
|
|
0f67f6227f | ||
|
|
21e1c06794 | ||
|
|
838c146fc0 | ||
|
|
403460b9c2 | ||
|
|
9f1800c8c6 | ||
|
|
29756b392e | ||
|
|
fd122768e7 | ||
|
|
6c40d3a288 | ||
|
|
5b843d19e4 | ||
|
|
97e2b82d0e | ||
|
|
8614fa6253 | ||
|
|
b4966d5e38 | ||
|
|
a7f698faf7 | ||
|
|
d7ea9b40d6 | ||
|
|
5a5d00d910 | ||
|
|
7de7ff989c | ||
|
|
1a1fcfac89 | ||
|
|
452a6f2e78 | ||
|
|
2d1abe8965 | ||
|
|
744b4a3666 | ||
|
|
eb61923584 | ||
|
|
991d4e1dce | ||
|
|
5f513e2155 | ||
|
|
7c3246dd9b | ||
|
|
362c6f1cde | ||
|
|
d2e685abd8 | ||
|
|
ae2b6b1353 | ||
|
|
8cbdc32725 | ||
|
|
c696be90e6 | ||
|
|
9487ef8862 | ||
|
|
a982a1568a | ||
|
|
60d445f92a | ||
|
|
839133fc27 | ||
|
|
2e6405ae1b |
@@ -317,7 +317,7 @@ spec:
|
||||
chown -R 1000:1000 /uploadstemp && \
|
||||
chown -R 1000:1000 /appdata
|
||||
- name: olares-app-init
|
||||
image: beclab/system-frontend:v1.8.7
|
||||
image: beclab/system-frontend:v1.9.6
|
||||
imagePullPolicy: IfNotPresent
|
||||
command:
|
||||
- /bin/sh
|
||||
@@ -439,7 +439,7 @@ spec:
|
||||
- name: NATS_SUBJECT_VAULT
|
||||
value: os.vault.{{ .Values.bfl.username}}
|
||||
- name: user-service
|
||||
image: beclab/user-service:v0.0.85
|
||||
image: beclab/user-service:v0.0.86
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- containerPort: 3000
|
||||
|
||||
@@ -415,7 +415,7 @@ export default defineComponent({
|
||||
background-color: $background-1;
|
||||
|
||||
.app_title {
|
||||
font-family: 'Inter';
|
||||
font-family: 'Roboto' !important;
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
|
||||
@@ -358,7 +358,7 @@ export default defineComponent({
|
||||
left: 0;
|
||||
|
||||
.app_title {
|
||||
font-family: 'Source Han Sans CN';
|
||||
font-family: 'Roboto' !important;
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-size: 16px;
|
||||
|
||||
@@ -202,11 +202,15 @@ if [ "$PREINSTALL" == "1" ]; then
|
||||
fi
|
||||
|
||||
|
||||
echo "configuring storage ..."
|
||||
$sh_c "$INSTALL_OLARES_CLI install storage"
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo "error: failed to configure storage"
|
||||
exit 1
|
||||
if [[ "$JUICEFS" == "1" ]]; then
|
||||
echo "configuring storage for juicefs ..."
|
||||
$sh_c "$INSTALL_OLARES_CLI install storage"
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo "error: failed to configure storage"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "juicefs is not enabled, skip configuring storage"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
@@ -281,7 +281,7 @@ func collectSystemdLogs(tw *tar.Writer, options *LogCollectOptions) error {
|
||||
}
|
||||
|
||||
func collectDmesgLogs(tw *tar.Writer, options *LogCollectOptions) error {
|
||||
cmd := exec.Command("dmesg -T")
|
||||
cmd := exec.Command("dmesg", "-T")
|
||||
output, err := cmd.Output()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -645,7 +645,7 @@ func checkServiceExists(service string) bool {
|
||||
func NewCmdLogs() *cobra.Command {
|
||||
options := &LogCollectOptions{
|
||||
Since: "7d",
|
||||
MaxLines: 3000,
|
||||
MaxLines: 20000,
|
||||
OutputDir: "./olares-logs",
|
||||
IgnoreKubeErrors: false,
|
||||
}
|
||||
|
||||
121
cli/pkg/amdgpu/module.go
Normal file
121
cli/pkg/amdgpu/module.go
Normal file
@@ -0,0 +1,121 @@
|
||||
package amdgpu
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/beclab/Olares/cli/pkg/common"
|
||||
"github.com/beclab/Olares/cli/pkg/core/prepare"
|
||||
"github.com/beclab/Olares/cli/pkg/core/task"
|
||||
)
|
||||
|
||||
// InstallAmdContainerToolkitModule installs AMD container toolkit on supported Ubuntu if ROCm is installed.
|
||||
type InstallAmdContainerToolkitModule struct {
|
||||
common.KubeModule
|
||||
Skip bool // conditional execution based on ROCm detection
|
||||
SkipRocmCheck bool
|
||||
}
|
||||
|
||||
func (m *InstallAmdContainerToolkitModule) IsSkip() bool {
|
||||
return m.Skip
|
||||
}
|
||||
|
||||
func (m *InstallAmdContainerToolkitModule) Init() {
|
||||
m.Name = "InstallAmdContainerToolkit"
|
||||
if m.IsSkip() {
|
||||
return
|
||||
}
|
||||
|
||||
prepareCollection := prepare.PrepareCollection{}
|
||||
if !m.SkipRocmCheck {
|
||||
prepareCollection = append(prepareCollection, new(RocmInstalled))
|
||||
}
|
||||
|
||||
updateAmdSource := &task.RemoteTask{
|
||||
Name: "UpdateAmdContainerToolkitSource",
|
||||
Hosts: m.Runtime.GetHostsByRole(common.Master),
|
||||
Action: new(UpdateAmdContainerToolkitSource),
|
||||
Prepare: &prepareCollection,
|
||||
Parallel: false,
|
||||
Retry: 1,
|
||||
}
|
||||
|
||||
installAmdContainerToolkit := &task.RemoteTask{
|
||||
Name: "InstallAmdContainerToolkit",
|
||||
Hosts: m.Runtime.GetHostsByRole(common.Master),
|
||||
Prepare: &prepareCollection,
|
||||
Action: new(InstallAmdContainerToolkit),
|
||||
Parallel: false,
|
||||
Retry: 1,
|
||||
}
|
||||
|
||||
generateAndValidateCDI := &task.RemoteTask{
|
||||
Name: "GenerateAndValidateAmdCDI",
|
||||
Hosts: m.Runtime.GetHostsByRole(common.Master),
|
||||
Prepare: &prepareCollection,
|
||||
Action: new(GenerateAndValidateAmdCDI),
|
||||
Parallel: false,
|
||||
Retry: 1,
|
||||
}
|
||||
|
||||
m.Tasks = []task.Interface{
|
||||
updateAmdSource,
|
||||
installAmdContainerToolkit,
|
||||
generateAndValidateCDI,
|
||||
}
|
||||
}
|
||||
|
||||
// InstallAmdPluginModule installs AMD GPU device plugin on Kubernetes.
|
||||
type InstallAmdPluginModule struct {
|
||||
common.KubeModule
|
||||
Skip bool // conditional execution based on GPU enablement
|
||||
}
|
||||
|
||||
func (m *InstallAmdPluginModule) IsSkip() bool {
|
||||
return m.Skip
|
||||
}
|
||||
|
||||
func (m *InstallAmdPluginModule) Init() {
|
||||
m.Name = "InstallAmdPlugin"
|
||||
|
||||
// update node with AMD GPU labels
|
||||
updateNode := &task.RemoteTask{
|
||||
Name: "UpdateNodeAmdGPUInfo",
|
||||
Hosts: m.Runtime.GetHostsByRole(common.Master),
|
||||
Prepare: &prepare.PrepareCollection{
|
||||
new(common.OnlyFirstMaster),
|
||||
},
|
||||
Action: new(UpdateNodeAmdGPUInfo),
|
||||
Parallel: false,
|
||||
Retry: 1,
|
||||
}
|
||||
|
||||
installPlugin := &task.RemoteTask{
|
||||
Name: "InstallAmdPlugin",
|
||||
Hosts: m.Runtime.GetHostsByRole(common.Master),
|
||||
Prepare: &prepare.PrepareCollection{
|
||||
new(common.OnlyFirstMaster),
|
||||
},
|
||||
Action: new(InstallAmdPlugin),
|
||||
Parallel: false,
|
||||
Retry: 1,
|
||||
}
|
||||
|
||||
checkGpuState := &task.RemoteTask{
|
||||
Name: "CheckAmdGPUState",
|
||||
Hosts: m.Runtime.GetHostsByRole(common.Master),
|
||||
Prepare: &prepare.PrepareCollection{
|
||||
new(common.OnlyFirstMaster),
|
||||
new(RocmInstalled),
|
||||
},
|
||||
Action: new(CheckAmdGpuStatus),
|
||||
Parallel: false,
|
||||
Retry: 50,
|
||||
Delay: 10 * time.Second,
|
||||
}
|
||||
|
||||
m.Tasks = []task.Interface{
|
||||
updateNode,
|
||||
installPlugin,
|
||||
checkGpuState,
|
||||
}
|
||||
}
|
||||
56
cli/pkg/amdgpu/prepares.go
Normal file
56
cli/pkg/amdgpu/prepares.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package amdgpu
|
||||
|
||||
import (
|
||||
"github.com/beclab/Olares/cli/pkg/bootstrap/precheck"
|
||||
"github.com/beclab/Olares/cli/pkg/common"
|
||||
"github.com/beclab/Olares/cli/pkg/core/connector"
|
||||
"github.com/beclab/Olares/cli/pkg/core/logger"
|
||||
)
|
||||
|
||||
// RocmInstalled checks if AMD ROCm is installed on the system.
|
||||
type RocmInstalled struct {
|
||||
common.KubePrepare
|
||||
}
|
||||
|
||||
func (p *RocmInstalled) PreCheck(runtime connector.Runtime) (bool, error) {
|
||||
rocmV, err := connector.RocmVersion()
|
||||
if err != nil {
|
||||
logger.Debugf("ROCm version check error: %v", err)
|
||||
return false, nil
|
||||
}
|
||||
if rocmV == nil {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
logger.Infof("Detected ROCm version: %s", rocmV.Original())
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// RocmNotInstalled checks if AMD ROCm is NOT installed on the system.
|
||||
type RocmNotInstalled struct {
|
||||
common.KubePrepare
|
||||
RocmInstalled
|
||||
}
|
||||
|
||||
func (p *RocmNotInstalled) PreCheck(runtime connector.Runtime) (bool, error) {
|
||||
installed, err := p.RocmInstalled.PreCheck(runtime)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return !installed, nil
|
||||
}
|
||||
|
||||
// ContainerdInstalled checks if containerd is installed on the system.
|
||||
type ContainerdInstalled struct {
|
||||
common.KubePrepare
|
||||
}
|
||||
|
||||
func (p *ContainerdInstalled) PreCheck(runtime connector.Runtime) (bool, error) {
|
||||
containerdCheck := precheck.ConflictingContainerdCheck{}
|
||||
if err := containerdCheck.Check(runtime); err != nil {
|
||||
return true, nil
|
||||
}
|
||||
|
||||
logger.Info("containerd is not installed, ignore task")
|
||||
return false, nil
|
||||
}
|
||||
@@ -1,17 +1,20 @@
|
||||
package amdgpu
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os/exec"
|
||||
"path"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/beclab/Olares/cli/pkg/clientset"
|
||||
"github.com/beclab/Olares/cli/pkg/common"
|
||||
cc "github.com/beclab/Olares/cli/pkg/core/common"
|
||||
"github.com/beclab/Olares/cli/pkg/core/connector"
|
||||
"github.com/beclab/Olares/cli/pkg/core/logger"
|
||||
"github.com/beclab/Olares/cli/pkg/core/task"
|
||||
"github.com/beclab/Olares/cli/pkg/utils"
|
||||
"github.com/beclab/Olares/cli/pkg/core/util"
|
||||
"github.com/beclab/Olares/cli/pkg/gpu"
|
||||
|
||||
"github.com/Masterminds/semver/v3"
|
||||
"github.com/pkg/errors"
|
||||
@@ -26,8 +29,8 @@ func (m *InstallAmdRocmModule) Init() {
|
||||
m.Name = "InstallAMDGPU"
|
||||
|
||||
installAmd := &task.RemoteTask{
|
||||
Name: "InstallAmdRocm",
|
||||
Hosts: m.Runtime.GetHostsByRole(common.Master),
|
||||
Name: "InstallAmdRocm",
|
||||
Hosts: m.Runtime.GetHostsByRole(common.Master),
|
||||
Action: &InstallAmdRocm{
|
||||
// no manifest needed
|
||||
},
|
||||
@@ -51,7 +54,7 @@ func (t *InstallAmdRocm) Execute(runtime connector.Runtime) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
amdGPUExists, err := utils.HasAmdIGPU(runtime)
|
||||
amdGPUExists, err := connector.HasAmdAPUOrGPU(runtime)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -59,7 +62,7 @@ func (t *InstallAmdRocm) Execute(runtime connector.Runtime) error {
|
||||
if !amdGPUExists {
|
||||
return nil
|
||||
}
|
||||
rocmV, _ := utils.RocmVersion()
|
||||
rocmV, _ := connector.RocmVersion()
|
||||
min := semver.MustParse("7.1.1")
|
||||
if rocmV != nil && rocmV.LessThan(min) {
|
||||
return fmt.Errorf("detected ROCm version %s, which is lower than required %s; please uninstall existing ROCm/AMDGPU components before installation with command: olares-cli amdgpu uninstall", rocmV.Original(), min.Original())
|
||||
@@ -131,3 +134,163 @@ func (t *AmdgpuUninstallAction) Execute(runtime connector.Runtime) error {
|
||||
logger.Warn("Warning: Please reboot your machine after uninstall to fully remove ROCm components.")
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdateAmdContainerToolkitSource configures the AMD container toolkit APT repository.
|
||||
type UpdateAmdContainerToolkitSource struct {
|
||||
common.KubeAction
|
||||
}
|
||||
|
||||
func (t *UpdateAmdContainerToolkitSource) Execute(runtime connector.Runtime) error {
|
||||
// Install prerequisites
|
||||
if _, err := runtime.GetRunner().SudoCmd("apt update && apt install -y wget gnupg2", false, true); err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "failed to install prerequisites for AMD container toolkit")
|
||||
}
|
||||
|
||||
if _, err := runtime.GetRunner().SudoCmd("install -d -m 0755 /etc/apt/keyrings", false, true); err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "failed to create /etc/apt/keyrings directory")
|
||||
}
|
||||
|
||||
cmd := "wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | gpg --dearmor | tee /etc/apt/keyrings/rocm.gpg > /dev/null"
|
||||
if _, err := runtime.GetRunner().SudoCmd(cmd, false, true); err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "failed to download and install AMD ROCm GPG key")
|
||||
}
|
||||
|
||||
si := runtime.GetSystemInfo()
|
||||
var ubuntuCodename string
|
||||
if si.IsUbuntuVersionEqual(connector.Ubuntu2404) {
|
||||
ubuntuCodename = "noble"
|
||||
} else if si.IsUbuntuVersionEqual(connector.Ubuntu2204) {
|
||||
ubuntuCodename = "jammy"
|
||||
} else {
|
||||
return fmt.Errorf("unsupported Ubuntu version for AMD container toolkit")
|
||||
}
|
||||
|
||||
aptSourceLine := fmt.Sprintf("deb [signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/amd-container-toolkit/apt/ %s main", ubuntuCodename)
|
||||
cmd = fmt.Sprintf("echo '%s' > /etc/apt/sources.list.d/amd-container-toolkit.list", aptSourceLine)
|
||||
if _, err := runtime.GetRunner().SudoCmd(cmd, false, true); err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "failed to add AMD container toolkit APT source")
|
||||
}
|
||||
|
||||
logger.Infof("AMD container toolkit repository configured successfully")
|
||||
return nil
|
||||
}
|
||||
|
||||
// InstallAmdContainerToolkit installs the AMD container toolkit package.
|
||||
type InstallAmdContainerToolkit struct {
|
||||
common.KubeAction
|
||||
}
|
||||
|
||||
func (t *InstallAmdContainerToolkit) Execute(runtime connector.Runtime) error {
|
||||
logger.Infof("Installing AMD container toolkit...")
|
||||
if _, err := runtime.GetRunner().SudoCmd("apt update && apt install -y amd-container-toolkit", false, true); err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "failed to install AMD container toolkit")
|
||||
}
|
||||
logger.Infof("AMD container toolkit installed successfully")
|
||||
return nil
|
||||
}
|
||||
|
||||
// GenerateAndValidateAmdCDI generates and validates the AMD CDI spec.
|
||||
type GenerateAndValidateAmdCDI struct {
|
||||
common.KubeAction
|
||||
}
|
||||
|
||||
func (t *GenerateAndValidateAmdCDI) Execute(runtime connector.Runtime) error {
|
||||
// Ensure /etc/cdi directory exists
|
||||
if _, err := runtime.GetRunner().SudoCmd("install -d -m 0755 /etc/cdi", false, true); err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "failed to create /etc/cdi directory")
|
||||
}
|
||||
|
||||
// Generate CDI spec
|
||||
logger.Infof("Generating AMD CDI spec...")
|
||||
if _, err := runtime.GetRunner().SudoCmd("amd-ctk cdi generate --output=/etc/cdi/amd.json", false, true); err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "failed to generate AMD CDI spec")
|
||||
}
|
||||
|
||||
// Validate CDI spec
|
||||
logger.Infof("Validating AMD CDI spec...")
|
||||
if _, err := runtime.GetRunner().SudoCmd("amd-ctk cdi validate --path=/etc/cdi/amd.json", false, true); err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "failed to validate AMD CDI spec")
|
||||
}
|
||||
|
||||
logger.Infof("AMD CDI spec generated and validated successfully")
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdateNodeAmdGPUInfo updates Kubernetes node labels with AMD GPU information.
|
||||
type UpdateNodeAmdGPUInfo struct {
|
||||
common.KubeAction
|
||||
}
|
||||
|
||||
func (u *UpdateNodeAmdGPUInfo) Execute(runtime connector.Runtime) error {
|
||||
client, err := clientset.NewKubeClient()
|
||||
if err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "kubeclient create error")
|
||||
}
|
||||
|
||||
// Check if AMD GPU/APU exists
|
||||
amdGPUExists, err := connector.HasAmdAPUOrGPU(runtime)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !amdGPUExists {
|
||||
logger.Info("AMD GPU/APU is not detected")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get ROCm version
|
||||
rocmV, err := connector.RocmVersion()
|
||||
if err != nil || rocmV == nil {
|
||||
logger.Info("ROCm is not installed")
|
||||
return nil
|
||||
}
|
||||
|
||||
rocmVersion := rocmV.Original()
|
||||
|
||||
// Determine GPU type (APU vs discrete GPU)
|
||||
gpuType := gpu.AmdGpuCardType
|
||||
if runtime.GetSystemInfo().IsAmdApu() {
|
||||
gpuType = gpu.AmdApuCardType
|
||||
}
|
||||
|
||||
// Use ROCm version as both driver and "cuda" version for AMD
|
||||
return gpu.UpdateNodeGpuLabel(context.Background(), client.Kubernetes(), &rocmVersion, nil, nil, &gpuType)
|
||||
}
|
||||
|
||||
// InstallAmdPlugin installs the AMD GPU device plugin DaemonSet.
|
||||
type InstallAmdPlugin struct {
|
||||
common.KubeAction
|
||||
}
|
||||
|
||||
func (t *InstallAmdPlugin) Execute(runtime connector.Runtime) error {
|
||||
amdPluginPath := path.Join(runtime.GetInstallerDir(), "wizard/config/gpu/nvidia/amdgpu-device-plugin.yaml")
|
||||
_, err := runtime.GetRunner().SudoCmd(fmt.Sprintf("kubectl apply -f %s", amdPluginPath), false, true)
|
||||
if err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "failed to apply AMD GPU device plugin")
|
||||
}
|
||||
|
||||
logger.Infof("AMD GPU device plugin installed successfully")
|
||||
return nil
|
||||
}
|
||||
|
||||
// CheckAmdGpuStatus checks if the AMD GPU device plugin pod is running.
|
||||
type CheckAmdGpuStatus struct {
|
||||
common.KubeAction
|
||||
}
|
||||
|
||||
func (t *CheckAmdGpuStatus) Execute(runtime connector.Runtime) error {
|
||||
kubectlpath, err := util.GetCommand(common.CommandKubectl)
|
||||
if err != nil {
|
||||
return fmt.Errorf("kubectl not found")
|
||||
}
|
||||
|
||||
// Check AMD device plugin pod status using the label from amdgpu-device-plugin.yaml
|
||||
selector := "name=amdgpu-dp-ds"
|
||||
cmd := fmt.Sprintf("%s get pod -n kube-system -l '%s' -o jsonpath='{.items[*].status.phase}'", kubectlpath, selector)
|
||||
|
||||
rphase, _ := runtime.GetRunner().SudoCmd(cmd, false, false)
|
||||
if rphase == "Running" {
|
||||
logger.Infof("AMD GPU device plugin is running")
|
||||
return nil
|
||||
}
|
||||
return fmt.Errorf("AMD GPU device plugin state is not Running (current: %s)", rphase)
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ func (t *PatchTask) Execute(runtime connector.Runtime) error {
|
||||
pre_reqs = pre_reqs + " network-manager "
|
||||
}
|
||||
|
||||
pre_reqs += " conntrack socat apache2-utils net-tools make gcc bison flex tree unzip "
|
||||
pre_reqs += " conntrack socat apache2-utils net-tools make gcc bison flex tree unzip lshw"
|
||||
|
||||
var systemInfo = runtime.GetSystemInfo()
|
||||
var platformFamily = systemInfo.GetOsPlatformFamily()
|
||||
|
||||
@@ -338,7 +338,9 @@ func (c *CudaChecker) Name() string {
|
||||
}
|
||||
|
||||
func (c *CudaChecker) Check(runtime connector.Runtime) error {
|
||||
if !runtime.GetSystemInfo().IsLinux() {
|
||||
if !runtime.GetSystemInfo().IsLinux() ||
|
||||
// Skip check on NVIDIA DGX Spark systems, which have their own GPU management
|
||||
runtime.GetSystemInfo().IsGB10Chip() {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -388,17 +390,17 @@ func (r *RocmChecker) Check(runtime connector.Runtime) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// detect AMD GPU presence
|
||||
amdGPUExists, err := utils.HasAmdIGPU(runtime)
|
||||
// detect AMD APU/GPU presence
|
||||
amdGPUExists, err := connector.HasAmdAPUOrGPU(runtime)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// no AMD GPU found, no need to check rocm
|
||||
// no AMD APU/GPU found, no need to check rocm
|
||||
if !amdGPUExists {
|
||||
return nil
|
||||
}
|
||||
|
||||
curV, err := utils.RocmVersion()
|
||||
curV, err := connector.RocmVersion()
|
||||
if err != nil && !os.IsNotExist(err) {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -210,6 +210,7 @@ func NewArgument() *Argument {
|
||||
arg.IsCloudInstance, _ = strconv.ParseBool(os.Getenv(ENV_TERMINUS_IS_CLOUD_VERSION))
|
||||
arg.IsOlaresInContainer = os.Getenv(ENV_CONTAINER_MODE) == "oic"
|
||||
si.IsOIC = arg.IsOlaresInContainer
|
||||
si.ProductName = arg.GetProductName()
|
||||
|
||||
// Ensure BaseDir is initialized before loading master.conf
|
||||
// so master host config can be loaded from ${base-dir}/master.conf reliably.
|
||||
@@ -415,6 +416,57 @@ func (a *Argument) SetSwapConfig(config SwapConfig) {
|
||||
a.Swappiness = config.Swappiness
|
||||
}
|
||||
|
||||
func (a *Argument) SetMasterHostOverride(config MasterHostConfig) {
|
||||
if config.MasterHost != "" {
|
||||
a.MasterHost = config.MasterHost
|
||||
}
|
||||
if config.MasterNodeName != "" {
|
||||
a.MasterNodeName = config.MasterNodeName
|
||||
}
|
||||
|
||||
// set a dummy name to bypass validity checks
|
||||
// as it will be overridden later when the node name is fetched
|
||||
if a.MasterNodeName == "" {
|
||||
a.MasterNodeName = "master"
|
||||
}
|
||||
if config.MasterSSHPassword != "" {
|
||||
a.MasterSSHPassword = config.MasterSSHPassword
|
||||
}
|
||||
if config.MasterSSHUser != "" {
|
||||
a.MasterSSHUser = config.MasterSSHUser
|
||||
}
|
||||
if config.MasterSSHPort != 0 {
|
||||
a.MasterSSHPort = config.MasterSSHPort
|
||||
}
|
||||
if config.MasterSSHPrivateKeyPath != "" {
|
||||
a.MasterSSHPrivateKeyPath = config.MasterSSHPrivateKeyPath
|
||||
}
|
||||
}
|
||||
|
||||
func (a *Argument) LoadMasterHostConfigIfAny() error {
|
||||
if a.BaseDir == "" {
|
||||
return errors.New("basedir unset")
|
||||
}
|
||||
content, err := os.ReadFile(filepath.Join(a.BaseDir, MasterHostConfigFile))
|
||||
if os.IsNotExist(err) {
|
||||
return nil
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return json.Unmarshal(content, a.MasterHostConfig)
|
||||
}
|
||||
|
||||
func (a *Argument) GetProductName() string {
|
||||
data, err := os.ReadFile("/sys/class/dmi/id/product_name")
|
||||
if err != nil {
|
||||
fmt.Printf("\nCannot get product name on this device, %s\n", err)
|
||||
return ""
|
||||
}
|
||||
|
||||
return strings.TrimSpace(string(data))
|
||||
}
|
||||
|
||||
func NewKubeRuntime(arg Argument) (*KubeRuntime, error) {
|
||||
loader := NewLoader(arg)
|
||||
cluster, err := loader.Load()
|
||||
|
||||
@@ -98,4 +98,6 @@ const (
|
||||
|
||||
const (
|
||||
ZfsSnapshotter = "/var/lib/containerd/io.containerd.snapshotter.v1.zfs"
|
||||
|
||||
ENV_GB10_CHIP = "GB10_CHIP" // for building images for NVIDIA GB10 Superchip systems
|
||||
)
|
||||
|
||||
117
cli/pkg/core/connector/amdgpu.go
Normal file
117
cli/pkg/core/connector/amdgpu.go
Normal file
@@ -0,0 +1,117 @@
|
||||
package connector
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
"github.com/Masterminds/semver/v3"
|
||||
)
|
||||
|
||||
func hasAmdAPU(cmdExec func(s string) (string, error)) (bool, error) {
|
||||
// Detect by CPU model names that bundle AMD AI NPU/graphics
|
||||
targets := []string{
|
||||
"AMD Ryzen AI Max+ 395",
|
||||
"AMD Ryzen AI Max 390",
|
||||
"AMD Ryzen AI Max 385",
|
||||
"AMD Ryzen AI 9 HX 375",
|
||||
"AMD Ryzen AI 9 HX 370",
|
||||
"AMD Ryzen AI 9 365",
|
||||
}
|
||||
// try lscpu first: extract 'Model name' field
|
||||
out, err := cmdExec("lscpu 2>/dev/null | awk -F': *' '/^Model name/{print $2; exit}' || true")
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if out != "" {
|
||||
lo := strings.ToLower(strings.TrimSpace(out))
|
||||
for _, t := range targets {
|
||||
if strings.Contains(lo, strings.ToLower(t)) {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
// fallback to /proc/cpuinfo
|
||||
out, err = cmdExec("awk -F': *' '/^model name/{print $2; exit}' /proc/cpuinfo 2>/dev/null || true")
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if out != "" {
|
||||
lo := strings.ToLower(strings.TrimSpace(out))
|
||||
for _, t := range targets {
|
||||
if strings.Contains(lo, strings.ToLower(t)) {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
func hasAmdAPUOrGPU(cmdExec func(s string) (string, error)) (bool, error) {
|
||||
out, err := cmdExec("lspci -d '1002:' 2>/dev/null | grep 'AMD' || true")
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if out != "" {
|
||||
return true, nil
|
||||
}
|
||||
out, err = cmdExec("lshw -c display -numeric -disable network 2>/dev/null | grep 'vendor: .* \\[1002\\]' || true")
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if out != "" {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
func HasAmdAPU(execRuntime Runtime) (bool, error) {
|
||||
return hasAmdAPU(func(s string) (string, error) {
|
||||
return execRuntime.GetRunner().SudoCmd(s, false, false)
|
||||
})
|
||||
}
|
||||
|
||||
func HasAmdAPULocal() (bool, error) {
|
||||
return hasAmdAPU(func(s string) (string, error) {
|
||||
out, err := exec.Command("sh", "-c", s).Output()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(out), nil
|
||||
})
|
||||
}
|
||||
|
||||
func HasAmdAPUOrGPULocal() (bool, error) {
|
||||
return hasAmdAPUOrGPU(func(s string) (string, error) {
|
||||
out, err := exec.Command("sh", "-c", s).Output()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(out), nil
|
||||
})
|
||||
}
|
||||
|
||||
func HasAmdAPUOrGPU(execRuntime Runtime) (bool, error) {
|
||||
return hasAmdAPUOrGPU(func(s string) (string, error) {
|
||||
return execRuntime.GetRunner().SudoCmd(s, false, false)
|
||||
})
|
||||
}
|
||||
|
||||
func RocmVersion() (*semver.Version, error) {
|
||||
const rocmVersionFile = "/opt/rocm/.info/version"
|
||||
data, err := os.ReadFile(rocmVersionFile)
|
||||
if err != nil {
|
||||
// no ROCm installed, nothing to check
|
||||
if os.IsNotExist(err) {
|
||||
return nil, err
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
curStr := strings.TrimSpace(string(data))
|
||||
cur, err := semver.NewVersion(curStr)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid rocm version: %s", curStr)
|
||||
}
|
||||
return cur, nil
|
||||
}
|
||||
@@ -76,6 +76,10 @@ type Systems interface {
|
||||
IsPveOrPveLxc() bool
|
||||
IsRaspbian() bool
|
||||
IsLinux() bool
|
||||
IsGB10Chip() bool
|
||||
IsAmdApu() bool
|
||||
IsAmdGPU() bool
|
||||
IsAmdGPUOrAPU() bool
|
||||
|
||||
IsUbuntu() bool
|
||||
IsDebian() bool
|
||||
@@ -111,16 +115,18 @@ type Systems interface {
|
||||
}
|
||||
|
||||
type SystemInfo struct {
|
||||
HostInfo *HostInfo `json:"host"`
|
||||
CpuInfo *CpuInfo `json:"cpu"`
|
||||
DiskInfo *DiskInfo `json:"disk"`
|
||||
MemoryInfo *MemoryInfo `json:"memory"`
|
||||
FsInfo *FileSystemInfo `json:"filesystem"`
|
||||
CgroupInfo *CgroupInfo `json:"cgroup,omitempty"`
|
||||
LocalIp string `json:"local_ip"`
|
||||
NatGateway string `json:"nat_gateway"`
|
||||
PkgManager string `json:"pkg_manager"`
|
||||
IsOIC bool `json:"is_oic,omitempty"`
|
||||
HostInfo *HostInfo `json:"host"`
|
||||
CpuInfo *CpuInfo `json:"cpu"`
|
||||
DiskInfo *DiskInfo `json:"disk"`
|
||||
MemoryInfo *MemoryInfo `json:"memory"`
|
||||
FsInfo *FileSystemInfo `json:"filesystem"`
|
||||
CgroupInfo *CgroupInfo `json:"cgroup,omitempty"`
|
||||
LocalIp string `json:"local_ip"`
|
||||
NatGateway string `json:"nat_gateway"`
|
||||
PkgManager string `json:"pkg_manager"`
|
||||
IsOIC bool `json:"is_oic,omitempty"`
|
||||
ProductName string `json:"product_name,omitempty"`
|
||||
HasAmdGPU bool `json:"has_amd_gpu,omitempty"`
|
||||
}
|
||||
|
||||
func (s *SystemInfo) IsSupport() error {
|
||||
@@ -235,6 +241,22 @@ func (s *SystemInfo) IsLinux() bool {
|
||||
return s.HostInfo.OsType == common.Linux
|
||||
}
|
||||
|
||||
func (s *SystemInfo) IsGB10Chip() bool {
|
||||
return s.CpuInfo.IsGB10Chip
|
||||
}
|
||||
|
||||
func (s *SystemInfo) IsAmdApu() bool {
|
||||
return s.CpuInfo.HasAmdAPU
|
||||
}
|
||||
|
||||
func (s *SystemInfo) IsAmdGPU() bool {
|
||||
return s.HasAmdGPU
|
||||
}
|
||||
|
||||
func (s *SystemInfo) IsAmdGPUOrAPU() bool {
|
||||
return s.CpuInfo.HasAmdAPU || s.HasAmdGPU
|
||||
}
|
||||
|
||||
func (s *SystemInfo) IsUbuntu() bool {
|
||||
return s.HostInfo.OsPlatformFamily == common.Ubuntu
|
||||
}
|
||||
@@ -322,6 +344,12 @@ func GetSystemInfo() *SystemInfo {
|
||||
si.MemoryInfo = getMem()
|
||||
si.FsInfo = getFs()
|
||||
|
||||
hasAmdGPU, err := getAmdGPU()
|
||||
if err != nil {
|
||||
panic(errors.Wrap(err, "failed to get amd apu/gpu"))
|
||||
}
|
||||
si.HasAmdGPU = hasAmdGPU
|
||||
|
||||
localIP, err := util.GetLocalIP()
|
||||
if err != nil {
|
||||
panic(errors.Wrap(err, "failed to get local ip"))
|
||||
@@ -437,6 +465,28 @@ type CpuInfo struct {
|
||||
CpuModel string `json:"cpu_model"`
|
||||
CpuLogicalCount int `json:"cpu_logical_count"`
|
||||
CpuPhysicalCount int `json:"cpu_physical_count"`
|
||||
IsGB10Chip bool `json:"is_gb10_chip,omitempty"`
|
||||
HasAmdAPU bool `json:"has_amd_apu,omitempty"`
|
||||
}
|
||||
|
||||
// Not considering the case where AMD GPU and AMD APU coexist.
|
||||
func getAmdGPU() (bool, error) {
|
||||
APUOrGPUExists, err := HasAmdAPUOrGPULocal()
|
||||
if err != nil {
|
||||
fmt.Printf("Error checking AMD APU/GPU: %v\n", err)
|
||||
return false, err
|
||||
}
|
||||
|
||||
hasAmdAPU, err := HasAmdAPULocal()
|
||||
if err != nil {
|
||||
fmt.Printf("Error checking AMD APU: %v\n", err)
|
||||
return false, err
|
||||
}
|
||||
|
||||
if APUOrGPUExists && !hasAmdAPU {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
func getCpu() *CpuInfo {
|
||||
@@ -452,10 +502,36 @@ func getCpu() *CpuInfo {
|
||||
cpuModel = cpuInfo[0].ModelName
|
||||
}
|
||||
|
||||
// check if is GB10 chip
|
||||
isGB10Chip := false
|
||||
|
||||
// In Linux systems, it is recognized via lspci as "NVIDIA Corporation Device 2e12 (rev a1)
|
||||
// or NVIDIA Corporation GB20B [GB10] (rev a1)
|
||||
cmd := exec.Command("sh", "-c", "lspci | grep -i vga | egrep 'GB10|2e12'")
|
||||
output, err := cmd.Output()
|
||||
if err == nil && strings.TrimSpace(string(output)) != "" {
|
||||
isGB10Chip = true
|
||||
} else {
|
||||
fmt.Printf("Error checking GB10 chip: %v\n", err)
|
||||
gb10env := os.Getenv(common.ENV_GB10_CHIP)
|
||||
if gb10env == "1" || strings.EqualFold(gb10env, "true") {
|
||||
isGB10Chip = true
|
||||
}
|
||||
}
|
||||
|
||||
// check if it has amd igpu
|
||||
hasAmdAPU, err := HasAmdAPULocal()
|
||||
if err != nil {
|
||||
fmt.Printf("Error checking AMD iGPU: %v\n", err)
|
||||
hasAmdAPU = false
|
||||
}
|
||||
|
||||
return &CpuInfo{
|
||||
CpuModel: cpuModel,
|
||||
CpuLogicalCount: cpuLogicalCount,
|
||||
CpuPhysicalCount: cpuPhysicalCount,
|
||||
IsGB10Chip: isGB10Chip,
|
||||
HasAmdAPU: hasAmdAPU,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,6 +37,11 @@ type CudaInstalled struct {
|
||||
}
|
||||
|
||||
func (p *CudaInstalled) PreCheck(runtime connector.Runtime) (bool, error) {
|
||||
if runtime.GetSystemInfo().IsGB10Chip() {
|
||||
logger.Debug("Assume DGX Spark or GB10 OEM system has CUDA installed")
|
||||
return true, nil
|
||||
}
|
||||
|
||||
st, err := utils.GetNvidiaStatus(runtime)
|
||||
if err != nil {
|
||||
return false, err
|
||||
@@ -50,17 +55,15 @@ func (p *CudaInstalled) PreCheck(runtime connector.Runtime) (bool, error) {
|
||||
|
||||
type CudaNotInstalled struct {
|
||||
common.KubePrepare
|
||||
CudaInstalled
|
||||
}
|
||||
|
||||
func (p *CudaNotInstalled) PreCheck(runtime connector.Runtime) (bool, error) {
|
||||
st, err := utils.GetNvidiaStatus(runtime)
|
||||
installed, err := p.CudaInstalled.PreCheck(runtime)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if st == nil || !st.Installed {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
return !installed, nil
|
||||
}
|
||||
|
||||
type CurrentNodeInK8s struct {
|
||||
|
||||
@@ -325,7 +325,8 @@ func (t *CheckGpuStatus) Execute(runtime connector.Runtime) error {
|
||||
return fmt.Errorf("kubectl not found")
|
||||
}
|
||||
|
||||
cmd := fmt.Sprintf("%s get pod -n kube-system -l 'app.kubernetes.io/component=hami-device-plugin' -o jsonpath='{.items[*].status.phase}'", kubectlpath)
|
||||
selector := "app.kubernetes.io/component=hami-device-plugin"
|
||||
cmd := fmt.Sprintf("%s get pod -n kube-system -l '%s' -o jsonpath='{.items[*].status.phase}'", kubectlpath, selector)
|
||||
|
||||
rphase, _ := runtime.GetRunner().SudoCmd(cmd, false, false)
|
||||
if rphase == "Running" {
|
||||
@@ -363,7 +364,16 @@ func (u *UpdateNodeGPUInfo) Execute(runtime connector.Runtime) error {
|
||||
driverVersion = st.LibraryVersion
|
||||
}
|
||||
|
||||
return UpdateNodeGpuLabel(context.Background(), client.Kubernetes(), &driverVersion, &st.CudaVersion, &supported)
|
||||
// TODO:
|
||||
gpuType := NvidiaCardType
|
||||
switch {
|
||||
case runtime.GetSystemInfo().IsAmdApu():
|
||||
gpuType = AmdApuCardType
|
||||
case runtime.GetSystemInfo().IsGB10Chip():
|
||||
gpuType = GB10ChipType
|
||||
}
|
||||
|
||||
return UpdateNodeGpuLabel(context.Background(), client.Kubernetes(), &driverVersion, &st.CudaVersion, &supported, &gpuType)
|
||||
}
|
||||
|
||||
type RemoveNodeLabels struct {
|
||||
@@ -376,12 +386,12 @@ func (u *RemoveNodeLabels) Execute(runtime connector.Runtime) error {
|
||||
return errors.Wrap(errors.WithStack(err), "kubeclient create error")
|
||||
}
|
||||
|
||||
return UpdateNodeGpuLabel(context.Background(), client.Kubernetes(), nil, nil, nil)
|
||||
return UpdateNodeGpuLabel(context.Background(), client.Kubernetes(), nil, nil, nil, nil)
|
||||
}
|
||||
|
||||
// update k8s node labels gpu.bytetrade.io/driver and gpu.bytetrade.io/cuda.
|
||||
// if labels are not exists, create it.
|
||||
func UpdateNodeGpuLabel(ctx context.Context, client kubernetes.Interface, driver, cuda *string, supported *string) error {
|
||||
func UpdateNodeGpuLabel(ctx context.Context, client kubernetes.Interface, driver, cuda *string, supported *string, gpuType *string) error {
|
||||
// get node name from hostname
|
||||
nodeName, err := os.Hostname()
|
||||
if err != nil {
|
||||
@@ -408,6 +418,7 @@ func UpdateNodeGpuLabel(ctx context.Context, client kubernetes.Interface, driver
|
||||
{GpuDriverLabel, driver},
|
||||
{GpuCudaLabel, cuda},
|
||||
{GpuCudaSupportedLabel, supported},
|
||||
{GpuType, gpuType},
|
||||
} {
|
||||
old, ok := labels[label.key]
|
||||
switch {
|
||||
|
||||
@@ -8,4 +8,13 @@ var (
|
||||
GpuDriverLabel = GpuLabelGroup + "/driver"
|
||||
GpuCudaLabel = GpuLabelGroup + "/cuda"
|
||||
GpuCudaSupportedLabel = GpuLabelGroup + "/cuda-supported"
|
||||
GpuType = GpuLabelGroup + "/type"
|
||||
)
|
||||
|
||||
const (
|
||||
NvidiaCardType = "nvidia" // handling by HAMi
|
||||
AmdGpuCardType = "amd-gpu" //
|
||||
AmdApuCardType = "amd-apu" // AMD APU with integrated GPU , AI Max 395 etc.
|
||||
GB10ChipType = "nvidia-gb10" // NVIDIA GB10 Superchip & unified system memory
|
||||
StrixHaloChipType = "strix-halo" // AMD Strix Halo GPU & unified system memory
|
||||
)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package cluster
|
||||
|
||||
import (
|
||||
"github.com/beclab/Olares/cli/pkg/amdgpu"
|
||||
"github.com/beclab/Olares/cli/pkg/common"
|
||||
"github.com/beclab/Olares/cli/pkg/core/module"
|
||||
"github.com/beclab/Olares/cli/pkg/gpu"
|
||||
@@ -58,6 +59,12 @@ func (l *linuxInstallPhaseBuilder) installGpuPlugin() phase {
|
||||
return []module.Module{
|
||||
&gpu.RestartK3sServiceModule{Skip: !(l.runtime.Arg.Kubetype == common.K3s)},
|
||||
&gpu.InstallPluginModule{Skip: skipGpuPlugin},
|
||||
&amdgpu.InstallAmdPluginModule{Skip: func() bool {
|
||||
if l.runtime.GetSystemInfo().IsAmdGPUOrAPU() {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}()},
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -83,6 +83,13 @@ func (l *linuxPhaseBuilder) build() []module.Module {
|
||||
addModule(gpuModuleBuilder(func() []module.Module {
|
||||
return []module.Module{
|
||||
&amdgpu.InstallAmdRocmModule{},
|
||||
&amdgpu.InstallAmdContainerToolkitModule{Skip: func() bool {
|
||||
if l.runtime.GetSystemInfo().IsAmdGPUOrAPU() {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}(),
|
||||
},
|
||||
&gpu.InstallDriversModule{
|
||||
ManifestModule: manifest.ManifestModule{
|
||||
Manifest: l.manifestMap,
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
"github.com/beclab/Olares/cli/pkg/core/connector"
|
||||
"github.com/beclab/Olares/cli/pkg/core/logger"
|
||||
"github.com/beclab/Olares/cli/pkg/core/task"
|
||||
"github.com/beclab/Olares/cli/pkg/utils"
|
||||
)
|
||||
|
||||
type WelcomeMessage struct {
|
||||
@@ -73,7 +72,7 @@ func (t *WelcomeMessage) Execute(runtime connector.Runtime) error {
|
||||
|
||||
// If AMD GPU on Ubuntu 22.04/24.04, print warning about reboot for ROCm
|
||||
if si := runtime.GetSystemInfo(); si.IsUbuntu() && (si.IsUbuntuVersionEqual(connector.Ubuntu2204) || si.IsUbuntuVersionEqual(connector.Ubuntu2404)) {
|
||||
if hasAmd, _ := utils.HasAmdIGPU(runtime); hasAmd {
|
||||
if hasAmd, _ := connector.HasAmdAPUOrGPU(runtime); hasAmd {
|
||||
logger.Warnf("\x1b[31mWarning: To enable ROCm, please reboot your machine after activation.\x1b[0m")
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
@@ -7,19 +7,19 @@ import (
|
||||
"github.com/beclab/Olares/cli/pkg/core/task"
|
||||
)
|
||||
|
||||
type upgrader_1_12_5_20260122 struct {
|
||||
type upgrader_1_12_5_20260225 struct {
|
||||
breakingUpgraderBase
|
||||
}
|
||||
|
||||
func (u upgrader_1_12_5_20260122) Version() *semver.Version {
|
||||
return semver.MustParse("1.12.5-20260122")
|
||||
func (u upgrader_1_12_5_20260225) Version() *semver.Version {
|
||||
return semver.MustParse("1.12.5-20260225")
|
||||
}
|
||||
|
||||
func (u upgrader_1_12_5_20260122) UpgradeSystemComponents() []task.Interface {
|
||||
func (u upgrader_1_12_5_20260225) UpgradeSystemComponents() []task.Interface {
|
||||
pre := []task.Interface{
|
||||
&task.LocalTask{
|
||||
Name: "UpgradeL4BFLProxy",
|
||||
Action: &upgradeL4BFLProxy{Tag: "v0.3.10"},
|
||||
Action: &upgradeL4BFLProxy{Tag: "v0.3.11"},
|
||||
Retry: 3,
|
||||
Delay: 5 * time.Second,
|
||||
},
|
||||
@@ -28,5 +28,5 @@ func (u upgrader_1_12_5_20260122) UpgradeSystemComponents() []task.Interface {
|
||||
}
|
||||
|
||||
func init() {
|
||||
registerDailyUpgrader(upgrader_1_12_5_20260122{})
|
||||
registerDailyUpgrader(upgrader_1_12_5_20260225{})
|
||||
}
|
||||
@@ -380,7 +380,7 @@ func (a *upgradeGPUDriverIfNeeded) Execute(runtime connector.Runtime) error {
|
||||
if err != nil {
|
||||
return errors.Wrap(errors.WithStack(err), "kubeclient create error")
|
||||
}
|
||||
err = gpu.UpdateNodeGpuLabel(context.Background(), client.Kubernetes(), &targetDriverVersionStr, ptr.To(common.CurrentVerifiedCudaVersion), ptr.To("true"))
|
||||
err = gpu.UpdateNodeGpuLabel(context.Background(), client.Kubernetes(), &targetDriverVersionStr, ptr.To(common.CurrentVerifiedCudaVersion), ptr.To("true"), ptr.To(gpu.NvidiaCardType))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/Masterminds/semver/v3"
|
||||
"github.com/beclab/Olares/cli/pkg/core/connector"
|
||||
)
|
||||
|
||||
func HasAmdIGPU(execRuntime connector.Runtime) (bool, error) {
|
||||
// Detect by CPU model names that bundle AMD AI NPU/graphics
|
||||
targets := []string{
|
||||
"AMD Ryzen AI Max+ 395",
|
||||
"AMD Ryzen AI Max 390",
|
||||
"AMD Ryzen AI Max 385",
|
||||
"AMD Ryzen AI 9 HX 375",
|
||||
"AMD Ryzen AI 9 HX 370",
|
||||
"AMD Ryzen AI 9 365",
|
||||
}
|
||||
// try lscpu first: extract 'Model name' field
|
||||
out, err := execRuntime.GetRunner().SudoCmd("lscpu 2>/dev/null | awk -F': *' '/^Model name/{print $2; exit}' || true", false, false)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if out != "" {
|
||||
lo := strings.ToLower(strings.TrimSpace(out))
|
||||
for _, t := range targets {
|
||||
if strings.Contains(lo, strings.ToLower(t)) {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
// fallback to /proc/cpuinfo
|
||||
out, err = execRuntime.GetRunner().SudoCmd("awk -F': *' '/^model name/{print $2; exit}' /proc/cpuinfo 2>/dev/null || true", false, false)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if out != "" {
|
||||
lo := strings.ToLower(strings.TrimSpace(out))
|
||||
for _, t := range targets {
|
||||
if strings.Contains(lo, strings.ToLower(t)) {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
func RocmVersion() (*semver.Version, error) {
|
||||
const rocmVersionFile = "/opt/rocm/.info/version"
|
||||
data, err := os.ReadFile(rocmVersionFile)
|
||||
if err != nil {
|
||||
// no ROCm installed, nothing to check
|
||||
if os.IsNotExist(err) {
|
||||
return nil, err
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
curStr := strings.TrimSpace(string(data))
|
||||
cur, err := semver.NewVersion(curStr)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid rocm version: %s", curStr)
|
||||
}
|
||||
return cur, nil
|
||||
}
|
||||
@@ -11,6 +11,13 @@ func AssertPodReady(pod *corev1.Pod) error {
|
||||
return fmt.Errorf("pod is nil")
|
||||
}
|
||||
|
||||
// simply ignore finished pod
|
||||
// it can be seen as just an execution record, not a running pod
|
||||
// and the deployment will create a new replica
|
||||
if pod.Status.Phase == corev1.PodSucceeded || pod.Status.Phase == corev1.PodFailed {
|
||||
return nil
|
||||
}
|
||||
|
||||
podKey := fmt.Sprintf("%s/%s", pod.Namespace, pod.Name)
|
||||
if pod.DeletionTimestamp != nil {
|
||||
return fmt.Errorf("pod %s is terminating", podKey)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
project_name: olaresd
|
||||
builds:
|
||||
- env:
|
||||
- CGO_ENABLED=0
|
||||
- CGO_ENABLED=1
|
||||
# - CC=aarch64-linux-gnu-gcc
|
||||
# - CXX=aarch64-linux-gnu-g++
|
||||
main: ./cmd/terminusd/main.go
|
||||
@@ -17,6 +17,12 @@ builds:
|
||||
goamd64: v1
|
||||
env:
|
||||
- CGO_ENABLED=1
|
||||
- goarch: arm64
|
||||
goos: linux
|
||||
env:
|
||||
- CGO_ENABLED=1
|
||||
- CC=aarch64-linux-gnu-gcc
|
||||
- CXX=aarch64-linux-gnu-g++
|
||||
tags:
|
||||
containers_image_openpgp
|
||||
ldflags:
|
||||
|
||||
@@ -20,6 +20,9 @@ build: fmt vet ;$(info $(M)...Begin to build terminusd.) @
|
||||
build-linux: fmt vet ;$(info $(M)...Begin to build terminusd (linux version).) @
|
||||
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o bin/olaresd cmd/terminusd/main.go
|
||||
|
||||
build-arm: fmt vet ;$(info $(M)...Begin to build terminusd (linux version).) @
|
||||
CGO_ENABLED=1 GOOS=linux GOARCH=arm64 go build -o bin/olaresd cmd/terminusd/main.go
|
||||
|
||||
build-linux-in-docker:
|
||||
docker run -it --platform linux/amd64 --rm \
|
||||
-v $(current_dir):/olaresd \
|
||||
@@ -27,3 +30,11 @@ build-linux-in-docker:
|
||||
-e DEBIAN_FRONTEND=noninteractive \
|
||||
golang:1.24.11 \
|
||||
sh -c "apt-get -y update; apt-get -y install libudev-dev libpcap-dev; make build-linux"
|
||||
|
||||
build-arm-in-docker:
|
||||
docker run -it --platform linux/arm64 --rm \
|
||||
-v $(current_dir):/olaresd \
|
||||
-w /olaresd \
|
||||
-e DEBIAN_FRONTEND=noninteractive \
|
||||
golang:1.24.11 \
|
||||
sh -c "apt-get -y update; apt-get -y install libudev-dev libpcap-dev; make build-arm"
|
||||
|
||||
@@ -31,7 +31,7 @@ require (
|
||||
github.com/jaypipes/ghw v0.13.0
|
||||
github.com/jochenvg/go-udev v0.0.0-20171110120927-d6b62d56d37b
|
||||
github.com/joho/godotenv v1.5.1
|
||||
github.com/klauspost/cpuid/v2 v2.2.8
|
||||
github.com/klauspost/cpuid/v2 v2.3.0
|
||||
github.com/labstack/echo/v4 v4.0.0-00010101000000-000000000000
|
||||
github.com/libp2p/go-netroute v0.2.2
|
||||
github.com/mackerelio/go-osstat v0.2.5
|
||||
|
||||
@@ -205,8 +205,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
|
||||
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
|
||||
github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM=
|
||||
github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
|
||||
github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
|
||||
github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||
@@ -471,7 +471,6 @@ golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//go:build !(linux && amd64)
|
||||
// +build !linux !amd64
|
||||
//go:build !linux
|
||||
// +build !linux
|
||||
|
||||
package intranet
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//go:build linux && amd64
|
||||
// +build linux,amd64
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package intranet
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ func detectdStorageDevices(ctx context.Context, bus string) (usbDevs []storageDe
|
||||
for _, d := range ds {
|
||||
if d.Properties()["ID_BUS"] == bus {
|
||||
usbs = append(usbs, d)
|
||||
} else if d.Properties()["ID_BUS"] == "ata" &&
|
||||
} else if (d.Properties()["ID_BUS"] == "ata" || d.Properties()["ID_BUS"] == "scsi") &&
|
||||
d.Properties()["ID_USB_TYPE"] == "disk" &&
|
||||
bus == "usb" {
|
||||
usbs = append(usbs, d)
|
||||
@@ -97,14 +97,18 @@ func detectdStorageDevices(ctx context.Context, bus string) (usbDevs []storageDe
|
||||
|
||||
idSerial := device.Properties()["ID_SERIAL"]
|
||||
idSerialShort := device.Properties()["ID_SERIAL_SHORT"]
|
||||
idUsbSerial := device.Properties()["ID_USB_SERIAL"]
|
||||
idUsbSerialShort := device.Properties()["ID_USB_SERIAL_SHORT"]
|
||||
partUUID := device.Properties()["ID_PART_ENTRY_UUID"]
|
||||
|
||||
usbDevs = append(usbDevs, storageDevice{
|
||||
DevPath: devPath,
|
||||
Vender: vender,
|
||||
IDSerial: idSerial,
|
||||
IDSerialShort: idSerialShort,
|
||||
PartitionUUID: partUUID,
|
||||
DevPath: devPath,
|
||||
Vender: vender,
|
||||
IDSerial: idSerial,
|
||||
IDSerialShort: idSerialShort,
|
||||
IDUsbSerial: idUsbSerial,
|
||||
IDUsbSerialShort: idUsbSerialShort,
|
||||
PartitionUUID: partUUID,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -199,7 +203,10 @@ func MountedHddPath(ctx context.Context) ([]string, error) {
|
||||
|
||||
func FilterBySerial(serial string) func(dev storageDevice) bool {
|
||||
return func(dev storageDevice) bool {
|
||||
return strings.HasSuffix(serial, dev.IDSerial) || strings.HasSuffix(serial, dev.IDSerialShort)
|
||||
return strings.HasSuffix(serial, dev.IDSerial) ||
|
||||
strings.HasSuffix(serial, dev.IDSerialShort) ||
|
||||
strings.HasSuffix(serial, dev.IDUsbSerial) ||
|
||||
strings.HasSuffix(serial, dev.IDUsbSerialShort)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,11 +3,13 @@ package utils
|
||||
import "strings"
|
||||
|
||||
type storageDevice struct {
|
||||
DevPath string
|
||||
Vender string
|
||||
IDSerial string
|
||||
IDSerialShort string
|
||||
PartitionUUID string
|
||||
DevPath string
|
||||
Vender string
|
||||
IDSerial string
|
||||
IDSerialShort string
|
||||
IDUsbSerial string
|
||||
IDUsbSerialShort string
|
||||
PartitionUUID string
|
||||
}
|
||||
|
||||
type mountedPath struct {
|
||||
|
||||
476
docs/.vitepress/developer.en.ts
Normal file
476
docs/.vitepress/developer.en.ts
Normal file
@@ -0,0 +1,476 @@
|
||||
import { defineConfig, type DefaultTheme } from "vitepress";
|
||||
|
||||
export const developerSidebar: DefaultTheme.Sidebar = {
|
||||
"/developer/": [
|
||||
{
|
||||
text: "Concepts",
|
||||
link: "/developer/concepts/",
|
||||
items: [
|
||||
{ text: "Olares architecture", link: "/developer/concepts/system-architecture" },
|
||||
{
|
||||
text: "Olares ID",
|
||||
link: "/developer/concepts/olares-id",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Decentralized ID",
|
||||
link: "/developer/concepts/did",
|
||||
},
|
||||
{
|
||||
text: "Blockchain Registry",
|
||||
link: "/developer/concepts/registry",
|
||||
},
|
||||
{
|
||||
text: "Verifiable Credential",
|
||||
link: "/developer/concepts/vc",
|
||||
},
|
||||
{
|
||||
text: "Autonomous Reputation",
|
||||
link: "/developer/concepts/reputation",
|
||||
},
|
||||
// {
|
||||
// text: "Self-Sovereign Network",
|
||||
// link: "/developer/concepts/self-sovereign-network",
|
||||
// },
|
||||
{
|
||||
text: "Identity Wallet",
|
||||
link: "/developer/concepts/wallet",
|
||||
},
|
||||
],
|
||||
},
|
||||
{ text: "Account", link: "/developer/concepts/account" },
|
||||
{ text: "Application", link: "/developer/concepts/application" },
|
||||
{ text: "Network", link: "/developer/concepts/network" },
|
||||
{ text: "Data", link: "/developer/concepts/data" },
|
||||
{ text: "Secrets", link: "/developer/concepts/secrets" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Installation deep-dive",
|
||||
link: "/developer/install/",
|
||||
items: [
|
||||
{
|
||||
text: "Installation architecture",
|
||||
link: "/developer/install/installation-overview",
|
||||
},
|
||||
{
|
||||
text: "Installation process",
|
||||
link: "/developer/install/installation-process",
|
||||
},
|
||||
{
|
||||
text: "Olares Home",
|
||||
link: "/developer/install/olares-home",
|
||||
},
|
||||
{
|
||||
text: "Environment variables",
|
||||
link: "/developer/install/environment-variables",
|
||||
},
|
||||
{
|
||||
text: "Olares CLI",
|
||||
link: "/developer/install/cli/olares-cli",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "Access Olares terminal", link: "/developer/reference/access-olares-terminal" },
|
||||
{
|
||||
text: "backups",
|
||||
link: "/developer/install/cli/backups",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "backup", link: "/developer/install/cli/backups-backup" },
|
||||
{ text: "download", link: "/developer/install/cli/backups-download" },
|
||||
{ text: "region", link: "/developer/install/cli/backups-region" },
|
||||
{ text: "restore", link: "/developer/install/cli/backups-restore" },
|
||||
{ text: "snapshots", link: "/developer/install/cli/backups-snapshots" },
|
||||
],
|
||||
},
|
||||
{ text: "change-ip", link: "/developer/install/cli/change-ip" },
|
||||
{ text: "disk", link: "/developer/install/cli/disk" },
|
||||
{ text: "download", link: "/developer/install/cli/download" },
|
||||
{ text: "gpu", link: "/developer/install/cli/gpu" },
|
||||
{ text: "info", link: "/developer/install/cli/info" },
|
||||
{ text: "install", link: "/developer/install/cli/install" },
|
||||
{ text: "logs", link: "/developer/install/cli/logs" },
|
||||
{ text: "node", link: "/developer/install/cli/node" },
|
||||
{ text: "osinfo", link: "/developer/install/cli/osinfo" },
|
||||
{ text: "precheck", link: "/developer/install/cli/precheck" },
|
||||
{ text: "prepare", link: "/developer/install/cli/prepare" },
|
||||
{ text: "release", link: "/developer/install/cli/release" },
|
||||
{ text: "start", link: "/developer/install/cli/start" },
|
||||
{ text: "stop", link: "/developer/install/cli/stop" },
|
||||
{ text: "uninstall", link: "/developer/install/cli/uninstall" },
|
||||
{ text: "upgrade", link: "/developer/install/cli/upgrade" },
|
||||
{
|
||||
text: "user",
|
||||
link: "/developer/install/cli/user",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "activate", link: "/developer/install/cli/user-activate" },
|
||||
{ text: "create", link: "/developer/install/cli/user-create" },
|
||||
{ text: "delete", link: "/developer/install/cli/user-delete" },
|
||||
{ text: "get", link: "/developer/install/cli/user-get" },
|
||||
{ text: "list", link: "/developer/install/cli/user-list" },
|
||||
{ text: "reset-password", link: "/developer/install/cli/user-reset-password" },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Olares versioning",
|
||||
link: "/developer/install/versioning",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Develop Olares apps",
|
||||
link: "/developer/develop/",
|
||||
items: [
|
||||
{
|
||||
text: "Develop with Studio",
|
||||
collapsed: true,
|
||||
link: "/developer/develop/tutorial/",
|
||||
items: [
|
||||
{
|
||||
text: "Deploy an app",
|
||||
link: "/developer/develop/tutorial/deploy",
|
||||
},
|
||||
{
|
||||
text: "Develop in a dev container",
|
||||
link: "/developer/develop/tutorial/develop",
|
||||
},
|
||||
{
|
||||
text: "Package and upload",
|
||||
link: "/developer/develop/tutorial/package-upload",
|
||||
},
|
||||
{
|
||||
text: "Add app assets",
|
||||
link: "/developer/develop/tutorial/assets",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Application package",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Application chart",
|
||||
link: "/developer/develop/package/chart",
|
||||
},
|
||||
{
|
||||
text: "OlaresManifest",
|
||||
link: "/developer/develop/package/manifest",
|
||||
},
|
||||
/*{
|
||||
text: "Recommendation",
|
||||
link: "/developer/develop/package/recommend",
|
||||
},*/
|
||||
{
|
||||
text: "Helm extension",
|
||||
link: "/developer/develop/package/extension",
|
||||
},
|
||||
],
|
||||
},
|
||||
// {
|
||||
// text: "Advanced",
|
||||
// collapsed: true,
|
||||
// items: [
|
||||
// {
|
||||
// text: "terminus-info",
|
||||
// link: "/developer/develop/advanced/terminus-info",
|
||||
// },
|
||||
// {
|
||||
// text: "Service provider",
|
||||
// link: "/developer/develop/advanced/provider",
|
||||
// },
|
||||
// {
|
||||
// text: "AI",
|
||||
// link: "/developer/develop/advanced/ai",
|
||||
// },
|
||||
// { text: "Cookie", link: "/developer/develop/advanced/cookie" },
|
||||
// { text: "Database", link: "/developer/develop/advanced/database" },
|
||||
// {
|
||||
// text: "Account",
|
||||
// link: "/developer/develop/advanced/account",
|
||||
// },
|
||||
// {
|
||||
// text: "Market",
|
||||
// link: "/developer/develop/advanced/market",
|
||||
// },
|
||||
// {
|
||||
// text: "Websocket",
|
||||
// link: "/developer/develop/advanced/websocket",
|
||||
// },
|
||||
// {
|
||||
// text: "File upload",
|
||||
// link: "/developer/develop/advanced/file-upload",
|
||||
// },
|
||||
// {
|
||||
// text: "Secret",
|
||||
// link: "/developer/develop/advanced/secret",
|
||||
// },
|
||||
// {
|
||||
// text: "Kubesphere",
|
||||
// link: "/developer/develop/advanced/kubesphere",
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
{
|
||||
text: "Middleware",
|
||||
link: "/developer/develop/mw-overview",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Elasticsearch",
|
||||
collapsed: true,
|
||||
items :[
|
||||
{
|
||||
text: "Integrate with Elasticsearch",
|
||||
link: "/developer/develop/mw-integrate-with-es", },
|
||||
{
|
||||
text: "View Elasticsearch data",
|
||||
link: "/developer/develop/mw-view-es-data",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Grafana",
|
||||
link :"/developer/develop/mw-view-grafana-data",
|
||||
},
|
||||
{
|
||||
text: "MariaDB",
|
||||
collapsed: true,
|
||||
items :[
|
||||
{
|
||||
text: "Integrate with MariaDB",
|
||||
link: "/developer/develop/mw-integrate-with-mariadb", },
|
||||
{
|
||||
text: "View MariaDB data",
|
||||
link: "/developer/develop/mw-view-mariadb-data",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "MinIO",
|
||||
collapsed: true,
|
||||
items :[
|
||||
{
|
||||
text: "Integrate with MinIO",
|
||||
link: "/developer/develop/mw-integrate-with-minio", },
|
||||
{
|
||||
text: "View MinIO data",
|
||||
link: "/developer/develop/mw-view-minio-data",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "MongoDB",
|
||||
collapsed: true,
|
||||
items :[
|
||||
{
|
||||
text: "Integrate with MongoDB",
|
||||
link: "/developer/develop/mw-integrate-with-mongodb", },
|
||||
{
|
||||
text: "View MongoDB data",
|
||||
link: "/developer/develop/mw-view-mongodb-data",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "MySQL",
|
||||
collapsed: true,
|
||||
items :[
|
||||
{
|
||||
text: "Integrate with MySQL",
|
||||
link: "/developer/develop/mw-integrate-with-mysql", },
|
||||
{
|
||||
text: "View MySQL data",
|
||||
link: "/developer/develop/mw-view-mysql-data",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "NATS",
|
||||
link :"/developer/develop/mw-view-nats-data",
|
||||
},
|
||||
{
|
||||
text: "OpenTelemetry",
|
||||
link :"/developer/develop/mw-view-otel-data",
|
||||
},
|
||||
{
|
||||
text: "PostgreSQL",
|
||||
collapsed: true,
|
||||
items :[
|
||||
{
|
||||
text: "Integrate with PostgreSQL",
|
||||
link: "/developer/develop/mw-integrate-with-pg", },
|
||||
{
|
||||
text: "View PostgreSQL data",
|
||||
link: "/developer/develop/mw-view-pg-data",
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "RabbitMQ",
|
||||
collapsed: true,
|
||||
items :[
|
||||
{
|
||||
text: "Integrate with RabbitMQ",
|
||||
link: "/developer/develop/mw-integrate-with-rabbitmq", },
|
||||
{
|
||||
text: "View RabbitMQ data",
|
||||
link: "/developer/develop/mw-view-rabbitmq-data",
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Redis",
|
||||
collapsed: true,
|
||||
items :[
|
||||
{
|
||||
text: "Integrate with Redis",
|
||||
link: "/developer/develop/mw-integrate-with-redis", },
|
||||
{
|
||||
text: "View Redis data",
|
||||
link: "/developer/develop/mw-view-redis-data",
|
||||
}
|
||||
]
|
||||
},
|
||||
]
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Distribute Olares apps",
|
||||
link: "/developer/develop/distribute-index",
|
||||
items: [
|
||||
{
|
||||
text: "Summit apps",
|
||||
link: "/developer/develop/submit-apps",
|
||||
},
|
||||
{
|
||||
text: "Manage app lifecycle",
|
||||
link: "/developer/develop/manage-apps",
|
||||
},
|
||||
{
|
||||
text: "Promote your apps",
|
||||
link:"/developer/develop/promote-apps"
|
||||
},
|
||||
{
|
||||
text: "Publish paid apps",
|
||||
link: "/developer/develop/paid-apps",
|
||||
},
|
||||
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Contribute to Olares",
|
||||
items: [
|
||||
{
|
||||
text: "Develop system app",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Overview",
|
||||
link: "/developer/contribute/system-app/overview",
|
||||
},
|
||||
{
|
||||
text: "Configure deployment",
|
||||
link: "/developer/contribute/system-app/deployment",
|
||||
},
|
||||
{
|
||||
text: "Configure permissions",
|
||||
link: "/developer/contribute/system-app/olares-manifest",
|
||||
},
|
||||
{
|
||||
text: "Install",
|
||||
link: "/developer/contribute/system-app/install",
|
||||
},
|
||||
{
|
||||
text: "Other",
|
||||
link: "/developer/contribute/system-app/other",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Develop protocols",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Contract",
|
||||
link: "/developer/contribute/olares-id/contract/contract",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Architecture",
|
||||
link: "/developer/contribute/olares-id/contract/architecture",
|
||||
},
|
||||
{
|
||||
text: "DID",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Design",
|
||||
link: "/developer/contribute/olares-id/contract/did/design",
|
||||
},
|
||||
{
|
||||
text: "Official Taggers",
|
||||
link: "/developer/contribute/olares-id/contract/did/official-taggers",
|
||||
},
|
||||
{
|
||||
text: "Release History",
|
||||
link: "/developer/contribute/olares-id/contract/did/release-history",
|
||||
},
|
||||
{
|
||||
text: "FAQ",
|
||||
link: "/developer/contribute/olares-id/contract/did/faq",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Reputation",
|
||||
link: "/developer/contribute/olares-id/contract/contract-reputation",
|
||||
},
|
||||
{
|
||||
text: "Manage",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Contract",
|
||||
link: "/developer/contribute/olares-id/contract/manage/contract",
|
||||
},
|
||||
{
|
||||
text: "SDK",
|
||||
link: "/developer/contribute/olares-id/contract/manage/sdk",
|
||||
},
|
||||
{
|
||||
text: "Environment",
|
||||
link: "/developer/contribute/olares-id/contract/manage/environment",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Verifiable Credential",
|
||||
link: "/developer/contribute/olares-id/verifiable-credential/overview",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Issuer",
|
||||
link: "/developer/contribute/olares-id/verifiable-credential/issuer",
|
||||
},
|
||||
{
|
||||
text: "Verifer",
|
||||
link: "/developer/contribute/olares-id/verifiable-credential/verifer",
|
||||
},
|
||||
{
|
||||
text: "Olares",
|
||||
link: "/developer/contribute/olares-id/verifiable-credential/olares",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
492
docs/.vitepress/developer.zh.ts
Normal file
492
docs/.vitepress/developer.zh.ts
Normal file
@@ -0,0 +1,492 @@
|
||||
import { defineConfig, type DefaultTheme } from "vitepress";
|
||||
|
||||
export const developerSidebar: DefaultTheme.Sidebar = {
|
||||
"/zh/developer/": [
|
||||
{
|
||||
text: "概念",
|
||||
link: "/zh/developer/concepts/",
|
||||
items: [
|
||||
{ text: "系统架构", link: "/zh/developer/concepts/system-architecture" },
|
||||
{
|
||||
text: "Olares ID",
|
||||
link: "/zh/developer/concepts/olares-id",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "去中心化标识符",
|
||||
link: "/zh/developer/concepts/did",
|
||||
},
|
||||
{
|
||||
text: "DID Registry",
|
||||
link: "/zh/developer/concepts/registry",
|
||||
},
|
||||
{
|
||||
text: "可验证凭证",
|
||||
link: "/zh/developer/concepts/vc",
|
||||
},
|
||||
{
|
||||
text: "自治声誉",
|
||||
link: "/zh/developer/concepts/reputation",
|
||||
},
|
||||
// {
|
||||
// text: "主权网络",
|
||||
// link: "/zh/developer/concepts/self-sovereign-network",
|
||||
// },
|
||||
{
|
||||
text: "身份钱包",
|
||||
link: "/zh/developer/concepts/wallet",
|
||||
},
|
||||
],
|
||||
},
|
||||
{ text: "账户", link: "/zh/developer/concepts/account" },
|
||||
{ text: "应用", link: "/zh/developer/concepts/application" },
|
||||
{ text: "网络", link: "/zh/developer/concepts/network" },
|
||||
{ text: "数据", link: "/zh/developer/concepts/data" },
|
||||
{ text: "密钥", link: "/zh/developer/concepts/secrets" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Olares 安装详解",
|
||||
link: "/zh/developer/install/",
|
||||
items: [
|
||||
{
|
||||
text: "安装概述",
|
||||
link: "/zh/developer/install/installation-overview",
|
||||
},
|
||||
{
|
||||
text: "安装流程",
|
||||
link: "/zh/developer/install/installation-process",
|
||||
},
|
||||
{
|
||||
text: "Olares Home",
|
||||
link: "/zh/developer/install/olares-home",
|
||||
},
|
||||
{
|
||||
text: "环境变量",
|
||||
link: "/zh/developer/install/environment-variables",
|
||||
},
|
||||
{
|
||||
text: "Olares CLI",
|
||||
link: "/zh/developer/install/cli/olares-cli",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "backups",
|
||||
link: "/zh/developer/install/cli/backups",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "backup", link: "/zh/developer/install/cli/backups-backup" },
|
||||
{ text: "download", link: "/zh/developer/install/cli/backups-download" },
|
||||
{ text: "region", link: "/zh/developer/install/cli/backups-region" },
|
||||
{ text: "restore", link: "/zh/developer/install/cli/backups-restore" },
|
||||
{ text: "snapshots", link: "/zh/developer/install/cli/backups-snapshots" },
|
||||
],
|
||||
},
|
||||
{ text: "change-ip", link: "/zh/developer/install/cli/change-ip" },
|
||||
{ text: "disk", link: "/zh/developer/install/cli/disk" },
|
||||
{ text: "download", link: "/zh/developer/install/cli/download" },
|
||||
{ text: "gpu", link: "/zh/developer/install/cli/gpu" },
|
||||
{ text: "info", link: "/zh/developer/install/cli/info" },
|
||||
{ text: "install", link: "/zh/developer/install/cli/install" },
|
||||
{ text: "logs", link: "/zh/developer/install/cli/logs" },
|
||||
{ text: "node", link: "/zh/developer/install/cli/node" },
|
||||
{ text: "osinfo", link: "/zh/developer/install/cli/osinfo" },
|
||||
{ text: "precheck", link: "/zh/developer/install/cli/precheck" },
|
||||
{ text: "prepare", link: "/zh/developer/install/cli/prepare" },
|
||||
{ text: "release", link: "/zh/developer/install/cli/release" },
|
||||
{ text: "start", link: "/zh/developer/install/cli/start" },
|
||||
{ text: "stop", link: "/zh/developer/install/cli/stop" },
|
||||
{ text: "uninstall", link: "/zh/developer/install/cli/uninstall" },
|
||||
{ text: "upgrade", link: "/zh/developer/install/cli/upgrade" },
|
||||
{
|
||||
text: "user",
|
||||
link: "/zh/developer/install/cli/user",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "activate", link: "/zh/developer/install/cli/user-activate" },
|
||||
{ text: "create", link: "/zh/developer/install/cli/user-create" },
|
||||
{ text: "delete", link: "/zh/developer/install/cli/user-delete" },
|
||||
{ text: "get", link: "/zh/developer/install/cli/user-get" },
|
||||
{ text: "list", link: "/zh/developer/install/cli/user-list" },
|
||||
{ text: "reset-password", link: "/zh/developer/install/cli/user-reset-password" },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "版本说明",
|
||||
link: "/zh/developer/install/versioning",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "开发 Olares 应用",
|
||||
link: "/zh/developer/develop/",
|
||||
items: [
|
||||
{
|
||||
text: "使用 Studio 开发",
|
||||
collapsed: true,
|
||||
link: "/zh/developer/develop/tutorial/",
|
||||
items: [
|
||||
{
|
||||
text: "部署应用",
|
||||
link: "/zh/developer/develop/tutorial/deploy",
|
||||
},
|
||||
{
|
||||
text: "使用开发容器",
|
||||
link: "/zh/developer/develop/tutorial/develop",
|
||||
},
|
||||
{
|
||||
text: "打包与上传",
|
||||
link: "/zh/developer/develop/tutorial/package-upload",
|
||||
},
|
||||
{
|
||||
text: "添加应用素材",
|
||||
link: "/zh/developer/develop/tutorial/assets",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "应用包管理",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "应用 Chart 包",
|
||||
link: "/zh/developer/develop/package/chart",
|
||||
},
|
||||
{
|
||||
text: "OlaresManifest",
|
||||
link: "/zh/developer/develop/package/manifest",
|
||||
},
|
||||
/*{
|
||||
text: "推荐算法",
|
||||
link: "/zh/developer/develop/package/recommend",
|
||||
},*/
|
||||
{
|
||||
text: "Helm 扩展",
|
||||
link: "/zh/developer/develop/package/extension",
|
||||
},
|
||||
],
|
||||
},
|
||||
// {
|
||||
// text: "进阶",
|
||||
// collapsed: true,
|
||||
// items: [
|
||||
// {
|
||||
// text: "terminus-info",
|
||||
// link: "/zh/developer/develop/advanced/terminus-info",
|
||||
// },
|
||||
// {
|
||||
// text: "Service Provider",
|
||||
// link: "/zh/developer/develop/advanced/provider",
|
||||
// },
|
||||
// {
|
||||
// text: "AI",
|
||||
// link: "/zh/developer/develop/advanced/ai",
|
||||
// },
|
||||
// { text: "Cookie", link: "/zh/developer/develop/advanced/cookie" },
|
||||
// { text: "数据库", link: "/zh/developer/develop/advanced/database" },
|
||||
// {
|
||||
// text: "账户",
|
||||
// link: "/zh/developer/develop/advanced/account",
|
||||
// },
|
||||
// {
|
||||
// text: "应用市场",
|
||||
// link: "/zh/developer/develop/advanced/market",
|
||||
// },
|
||||
// {
|
||||
// text: "Analytic",
|
||||
// link: "/zh/developer/develop/advanced/analytic",
|
||||
// },
|
||||
// {
|
||||
// text: "Websocket",
|
||||
// link: "/zh/developer/develop/advanced/websocket",
|
||||
// },
|
||||
// {
|
||||
// text: "文件上传",
|
||||
// link: "/zh/developer/develop/advanced/file-upload",
|
||||
// },
|
||||
// {
|
||||
// text: "Rss",
|
||||
// link: "/zh/developer/develop/advanced/rss",
|
||||
// },
|
||||
// {
|
||||
// text: "密钥",
|
||||
// link: "/zh/developer/develop/advanced/secret",
|
||||
// },
|
||||
// {
|
||||
// text: "Notification",
|
||||
// link: "/zh/developer/develop/advanced/notification",
|
||||
// },
|
||||
// {
|
||||
// text: "Frontend",
|
||||
// link: "/zh/developer/develop/advanced/frontend",
|
||||
// },
|
||||
// {
|
||||
// text: "Kubesphere",
|
||||
// link: "/zh/developer/develop/advanced/kubesphere",
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
{
|
||||
text: "中间件",
|
||||
link: "/zh/developer/develop/mw-overview",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Elasticsearch",
|
||||
collapsed: true,
|
||||
items :[
|
||||
{
|
||||
text: "集成 Elasticsearch",
|
||||
link: "zh/developer/develop/mw-integrate-with-es", },
|
||||
{
|
||||
text: "查看 Elasticsearch 数据",
|
||||
link: "zh/developer/develop/mw-view-es-data",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Grafana",
|
||||
link: "zh/developer/develop/mw-view-grafana-data",
|
||||
},
|
||||
{
|
||||
text: "MariaDB",
|
||||
collapsed: true,
|
||||
items :[
|
||||
{
|
||||
text: "集成 MariaDB",
|
||||
link: "zh/developer/develop/mw-integrate-with-mariadb", },
|
||||
{
|
||||
text: "查看 MariaDB 数据",
|
||||
link: "zh/developer/develop/mw-view-mariadb-data",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "MinIO",
|
||||
collapsed: true,
|
||||
items :[
|
||||
{
|
||||
text: "集成 MinIO",
|
||||
link: "zh/developer/develop/mw-integrate-with-minio", },
|
||||
{
|
||||
text: "查看 MinIO 数据",
|
||||
link: "zh/developer/develop/mw-view-minio-data",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "MongoDB",
|
||||
collapsed: true,
|
||||
items :[
|
||||
{
|
||||
text: "集成 MongoDB",
|
||||
link: "zh/developer/develop/mw-integrate-with-mongodb", },
|
||||
{
|
||||
text: "查看 MongoDB 数据",
|
||||
link: "zh/developer/develop/mw-view-mongodb-data",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "MySQL",
|
||||
collapsed: true,
|
||||
items :[
|
||||
{
|
||||
text: "集成 MySQL",
|
||||
link: "zh/developer/develop/mw-integrate-with-mysql", },
|
||||
{
|
||||
text: "查看 MySQL 数据",
|
||||
link: "zh/developer/develop/mw-view-mysql-data",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "NATS",
|
||||
link :"zh/developer/develop/mw-view-nats-data",
|
||||
},
|
||||
{
|
||||
text: "OpenTelemetry",
|
||||
link :"zh/developer/develop/mw-view-otel-data",
|
||||
},
|
||||
{
|
||||
text: "PostgreSQL",
|
||||
collapsed: true,
|
||||
items :[
|
||||
{
|
||||
text: "集成 PostgreSQL",
|
||||
link: "zh/developer/develop/mw-integrate-with-pg", },
|
||||
{
|
||||
text: "查看 PostgreSQL 数据",
|
||||
link: "zh/developer/develop/mw-view-pg-data",
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "RabbitMQ",
|
||||
collapsed: true,
|
||||
items :[
|
||||
{
|
||||
text: "集成 RabbitMQ",
|
||||
link: "zh/developer/develop/mw-integrate-with-rabbitmq", },
|
||||
{
|
||||
text: "查看 RabbitMQ 数据",
|
||||
link: "zh/developer/develop/mw-view-rabbitmq-data",
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Redis",
|
||||
collapsed: true,
|
||||
items :[
|
||||
{
|
||||
text: "集成 Redis",
|
||||
link: "zh/developer/develop/mw-integrate-with-redis", },
|
||||
{
|
||||
text: "查看 Redis 数据",
|
||||
link: "zh/developer/develop/mw-view-redis-data",
|
||||
},
|
||||
]
|
||||
},
|
||||
]
|
||||
},
|
||||
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "分发 Olares 应用",
|
||||
link: "/zh/developer/develop/distribute-index",
|
||||
items: [
|
||||
{
|
||||
text: "提交应用",
|
||||
link: "/zh/developer/develop/submit-apps",
|
||||
},
|
||||
{
|
||||
text: "管理应用",
|
||||
link: "/zh/developer/develop/manage-apps",
|
||||
},
|
||||
{
|
||||
text: "推广应用",
|
||||
link:"/zh/developer/develop/promote-apps"
|
||||
},
|
||||
{
|
||||
text: "发布付费应用",
|
||||
link: "/zh/developer/develop/paid-apps",
|
||||
},
|
||||
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "参与贡献",
|
||||
items: [
|
||||
{
|
||||
text: "开发系统应用",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "概述",
|
||||
link: "/zh/developer/contribute/system-app/overview",
|
||||
},
|
||||
{
|
||||
text: "应用部署配置",
|
||||
link: "/zh/developer/contribute/system-app/deployment",
|
||||
},
|
||||
{
|
||||
text: "Olares 权限配置",
|
||||
link: "/zh/developer/contribute/system-app/olares-manifest",
|
||||
},
|
||||
{
|
||||
text: "安装",
|
||||
link: "/zh/developer/contribute/system-app/install",
|
||||
},
|
||||
{
|
||||
text: "其他",
|
||||
link: "/zh/developer/contribute/system-app/other",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "开发协议",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "合约",
|
||||
link: "/zh/developer/contribute/olares-id/contract/contract",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "架构",
|
||||
link: "/zh/developer/contribute/olares-id/contract/architecture",
|
||||
},
|
||||
{
|
||||
text: "DID",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "设计",
|
||||
link: "/zh/developer/contribute/olares-id/contract/did/design",
|
||||
},
|
||||
{
|
||||
text: "官方 Tagger",
|
||||
link: "/zh/developer/contribute/olares-id/contract/did/official-taggers",
|
||||
},
|
||||
{
|
||||
text: "发布历史",
|
||||
link: "/zh/developer/contribute/olares-id/contract/did/release-history",
|
||||
},
|
||||
{
|
||||
text: "FAQ",
|
||||
link: "/zh/developer/contribute/olares-id/contract/did/faq",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "声誉",
|
||||
link: "/zh/developer/contribute/olares-id/contract/contract-reputation",
|
||||
},
|
||||
{
|
||||
text: "管理",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "合约",
|
||||
link: "/zh/developer/contribute/olares-id/contract/manage/contract",
|
||||
},
|
||||
{
|
||||
text: "SDK",
|
||||
link: "/zh/developer/contribute/olares-id/contract/manage/sdk",
|
||||
},
|
||||
{
|
||||
text: "环境",
|
||||
link: "/zh/developer/contribute/olares-id/contract/manage/environment",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "可验证凭证(VC)",
|
||||
link: "/zh/developer/contribute/olares-id/verifiable-credential/overview",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "发行方",
|
||||
link: "/zh/developer/contribute/olares-id/verifiable-credential/issuer",
|
||||
},
|
||||
{
|
||||
text: "验证方",
|
||||
link: "/zh/developer/contribute/olares-id/verifiable-credential/verifer",
|
||||
},
|
||||
{
|
||||
text: "Olares 案例",
|
||||
link: "/zh/developer/contribute/olares-id/verifiable-credential/olares",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
@@ -1,7 +1,9 @@
|
||||
import { defineConfig, type DefaultTheme } from "vitepress";
|
||||
|
||||
import { oneSidebar } from './one.en.ts';
|
||||
import { useCaseSidebar } from './usecase.en.ts';
|
||||
import { developerSidebar } from './developer.en.ts';
|
||||
const side = {
|
||||
"/manual/": [
|
||||
"/manual/": [
|
||||
{
|
||||
text: "What is Olares",
|
||||
link: "/manual/overview",
|
||||
@@ -17,7 +19,7 @@ const side = {
|
||||
link: "/manual/help/olares",
|
||||
},
|
||||
{
|
||||
text: "Installation FAQs",
|
||||
text: "Setup & access FAQs",
|
||||
link: "/manual/help/installation",
|
||||
},
|
||||
{
|
||||
@@ -28,10 +30,21 @@ const side = {
|
||||
// text: "Request support",
|
||||
// link: "/manual/help/request-technical-support",
|
||||
// },
|
||||
// {
|
||||
// text: "Troubleshooting",
|
||||
// link: "/manual/help/troubleshooting",
|
||||
// },
|
||||
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Troubleshooting",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Insufficient memory or memory not freed",
|
||||
link: "/manual/help/ts-free-memory",
|
||||
},
|
||||
{
|
||||
text: "Missing apps in Market",
|
||||
link: "/manual/help/ts-missing-apps",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -133,53 +146,8 @@ const side = {
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "LarePass",
|
||||
link: "/manual/larepass/",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Manage accounts",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "Create accounts", link: "/manual/larepass/create-account" },
|
||||
{ text: "Back up mnemonics", link: "/manual/larepass/back-up-mnemonics" },
|
||||
{ text: "Manage integrations", link: "/manual/larepass/integrations" },
|
||||
],
|
||||
},
|
||||
{ text: "Use VPN", link: "/manual/larepass/private-network" },
|
||||
{
|
||||
text: "Manage device",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "Activate Olares", link: "/manual/larepass/activate-olares" },
|
||||
{ text: "Manage Olares", link: "/manual/larepass/manage-olares" },
|
||||
],
|
||||
},
|
||||
{ text: "Manage files", link: "/manual/larepass/manage-files" },
|
||||
// collapsed: true,
|
||||
//items: [
|
||||
// {text: "Common file operations", link:"/manual/larepass/manage-files"},
|
||||
// {text: "Sync and share", link:"/manual/larepass/sync-share"}
|
||||
// ]
|
||||
// },
|
||||
{
|
||||
text: "Manage passwords",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "Autofill passwords", link: "/manual/larepass/autofill" },
|
||||
{ text: "Generate 2FA codes", link: "/manual/larepass/two-factor-verification" },
|
||||
],
|
||||
},
|
||||
/*{
|
||||
text: "Manage knowledge",
|
||||
link: "/manual/larepass/manage-knowledge",
|
||||
},*/
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Olares applications",
|
||||
collapsed: true,
|
||||
link: "/manual/olares/",
|
||||
items: [
|
||||
{ text: "Desktop", link: "/manual/olares/desktop", },
|
||||
@@ -375,7 +343,7 @@ const side = {
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Change revere proxy",
|
||||
text: "Change reverse proxy",
|
||||
link: "/manual/olares/settings/change-frp",
|
||||
},
|
||||
{
|
||||
@@ -395,13 +363,101 @@ const side = {
|
||||
{ text: "Restore", link: "/manual/olares/settings/restore" },
|
||||
],
|
||||
},
|
||||
{ text: "Developer resources", link: "/manual/olares/settings/developer" },
|
||||
{ text: "Advanced settings", link: "/manual/olares/settings/developer" },
|
||||
]
|
||||
},
|
||||
{ text: "Dashboard", link: "/manual/olares/resources-usage" },
|
||||
{ text: "Profile", link: "/manual/olares/profile" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "LarePass",
|
||||
link: "/manual/larepass/",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Manage accounts",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "Create accounts", link: "/manual/larepass/create-account" },
|
||||
{ text: "Back up mnemonics", link: "/manual/larepass/back-up-mnemonics" },
|
||||
{ text: "Manage integrations", link: "/manual/larepass/integrations" },
|
||||
],
|
||||
},
|
||||
{ text: "Use VPN", link: "/manual/larepass/private-network" },
|
||||
{
|
||||
text: "Manage device",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "Activate Olares", link: "/manual/larepass/activate-olares" },
|
||||
{ text: "Manage Olares", link: "/manual/larepass/manage-olares" },
|
||||
],
|
||||
},
|
||||
{ text: "Manage files", link: "/manual/larepass/manage-files" },
|
||||
// collapsed: true,
|
||||
//items: [
|
||||
// {text: "Common file operations", link:"/manual/larepass/manage-files"},
|
||||
// {text: "Sync and share", link:"/manual/larepass/sync-share"}
|
||||
// ]
|
||||
// },
|
||||
{
|
||||
text: "Manage passwords",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "Autofill passwords", link: "/manual/larepass/autofill" },
|
||||
{ text: "Generate 2FA codes", link: "/manual/larepass/two-factor-verification" },
|
||||
],
|
||||
},
|
||||
/*{
|
||||
text: "Manage knowledge",
|
||||
link: "/manual/larepass/manage-knowledge",
|
||||
},*/
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Olares Space",
|
||||
link: "/manual/space/",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Manage accounts",
|
||||
link: "/manual/space/manage-accounts",
|
||||
},
|
||||
{
|
||||
text: "Host Olares",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Create Olares",
|
||||
link: "/manual/space/create-olares",
|
||||
},
|
||||
{
|
||||
text: "Manage Olares",
|
||||
link: "/manual/space/manage-olares",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Host domains",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Set up a custom domain",
|
||||
link: "/manual/space/host-domain",
|
||||
},
|
||||
{
|
||||
text: "Manage a domain",
|
||||
link: "/manual/space/manage-domain",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Back up and restore",
|
||||
link: "/manual/space/backup-restore",
|
||||
},
|
||||
{ text: "Billing", link: "/manual/space/billing" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Tutorials",
|
||||
link: "/manual/best-practices/",
|
||||
@@ -435,475 +491,6 @@ const side = {
|
||||
},
|
||||
{ text: "Glossary", link: "/manual/glossary" },
|
||||
],
|
||||
"/space/": [
|
||||
{
|
||||
text: "Olares Space",
|
||||
link: "/space/",
|
||||
items: [
|
||||
{
|
||||
text: "Manage accounts",
|
||||
link: "/space/manage-accounts",
|
||||
},
|
||||
{
|
||||
text: "Host Olares",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Create Olares",
|
||||
link: "/space/create-olares",
|
||||
},
|
||||
{
|
||||
text: "Manage Olares",
|
||||
link: "/space/manage-olares",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Host domains",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Set up a custom domain",
|
||||
link: "/space/host-domain",
|
||||
},
|
||||
{
|
||||
text: "Manage a domain",
|
||||
link: "/space/manage-domain",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Back up and restore",
|
||||
link: "/space/backup-restore",
|
||||
},
|
||||
{ text: "Billing", link: "/space/billing" },
|
||||
],
|
||||
},
|
||||
],
|
||||
"/use-cases/": [
|
||||
{
|
||||
text: "Use cases",
|
||||
link: "/use-cases/",
|
||||
items: [
|
||||
{
|
||||
text: "Stable Diffusion",
|
||||
link: "/use-cases/stable-diffusion",
|
||||
},
|
||||
{
|
||||
text: "ComfyUI",
|
||||
link: "/use-cases/comfyui",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Manage ComfyUI",
|
||||
link: "/use-cases/comfyui-launcher",
|
||||
},
|
||||
{
|
||||
text: "Use ComfyUI for Krita",
|
||||
link: "/use-cases/comfyui-for-krita",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Ollama",
|
||||
link: "/use-cases/ollama",
|
||||
},
|
||||
{
|
||||
text: "Open WebUI",
|
||||
link: "/use-cases/openwebui",
|
||||
},
|
||||
{
|
||||
text: "Perplexica",
|
||||
link: "/use-cases/perplexica",
|
||||
},
|
||||
{
|
||||
text: "Dify",
|
||||
link: "/use-cases/dify",
|
||||
},
|
||||
{
|
||||
text: "Jellyfin",
|
||||
link: "/use-cases/stream-media",
|
||||
},
|
||||
{
|
||||
text: "Steam",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Play directly on Olares",
|
||||
link: "/use-cases/play-games-directly",
|
||||
},
|
||||
{
|
||||
text: "Stream to other devices",
|
||||
link: "/use-cases/stream-game",
|
||||
}
|
||||
]
|
||||
},
|
||||
// {
|
||||
// text: "Redroid",
|
||||
// link: "/use-cases/host-cloud-android",
|
||||
// },
|
||||
{
|
||||
text: "Windows",
|
||||
link: "/use-cases/windows",
|
||||
},
|
||||
{
|
||||
text: "DeerFlow",
|
||||
link: "/use-cases/deerflow",
|
||||
},
|
||||
{
|
||||
text: "Duix.Avatar",
|
||||
link: "/use-cases/duix-avatar",
|
||||
},
|
||||
{
|
||||
text: "ACE-Step",
|
||||
link: "/use-cases/ace-step",
|
||||
},
|
||||
{
|
||||
text: "Stirling PDF",
|
||||
link: "/use-cases/stirling-pdf",
|
||||
},
|
||||
{
|
||||
text: "PDFMathTranslate",
|
||||
link: "/use-cases/pdfmathtranslate",
|
||||
},
|
||||
{
|
||||
text: "LobeChat",
|
||||
link: "/use-cases/lobechat",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
"/developer/": [
|
||||
{
|
||||
text: "Concepts",
|
||||
link: "/developer/concepts/",
|
||||
items: [
|
||||
{ text: "Olares architecture", link: "/developer/concepts/system-architecture" },
|
||||
{
|
||||
text: "Olares ID",
|
||||
link: "/developer/concepts/olares-id",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Decentralized ID",
|
||||
link: "/developer/concepts/did",
|
||||
},
|
||||
{
|
||||
text: "Blockchain Registry",
|
||||
link: "/developer/concepts/registry",
|
||||
},
|
||||
{
|
||||
text: "Verifiable Credential",
|
||||
link: "/developer/concepts/vc",
|
||||
},
|
||||
{
|
||||
text: "Autonomous Reputation",
|
||||
link: "/developer/concepts/reputation",
|
||||
},
|
||||
// {
|
||||
// text: "Self-Sovereign Network",
|
||||
// link: "/developer/concepts/self-sovereign-network",
|
||||
// },
|
||||
{
|
||||
text: "Identity Wallet",
|
||||
link: "/developer/concepts/wallet",
|
||||
},
|
||||
],
|
||||
},
|
||||
{ text: "Account", link: "/developer/concepts/account" },
|
||||
{ text: "Application", link: "/developer/concepts/application" },
|
||||
{ text: "Network", link: "/developer/concepts/network" },
|
||||
{ text: "Data", link: "/developer/concepts/data" },
|
||||
{ text: "Secrets", link: "/developer/concepts/secrets" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Installation deep-dive",
|
||||
link: "/developer/install/",
|
||||
items: [
|
||||
{
|
||||
text: "Installation architecture",
|
||||
link: "/developer/install/installation-overview",
|
||||
},
|
||||
{
|
||||
text: "Installation process",
|
||||
link: "/developer/install/installation-process",
|
||||
},
|
||||
{
|
||||
text: "Olares Home",
|
||||
link: "/developer/install/olares-home",
|
||||
},
|
||||
{
|
||||
text: "Environment variables",
|
||||
link: "/developer/install/environment-variables",
|
||||
},
|
||||
{
|
||||
text: "Olares CLI",
|
||||
link: "/developer/install/cli/olares-cli",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "Access Olares terminal", link: "/developer/reference/access-olares-terminal" },
|
||||
{
|
||||
text: "backups",
|
||||
link: "/developer/install/cli/backups",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "backup", link: "/developer/install/cli/backups-backup" },
|
||||
{ text: "download", link: "/developer/install/cli/backups-download" },
|
||||
{ text: "region", link: "/developer/install/cli/backups-region" },
|
||||
{ text: "restore", link: "/developer/install/cli/backups-restore" },
|
||||
{ text: "snapshots", link: "/developer/install/cli/backups-snapshots" },
|
||||
],
|
||||
},
|
||||
{ text: "change-ip", link: "/developer/install/cli/change-ip" },
|
||||
{ text: "disk", link: "/developer/install/cli/disk" },
|
||||
{ text: "download", link: "/developer/install/cli/download" },
|
||||
{ text: "gpu", link: "/developer/install/cli/gpu" },
|
||||
{ text: "info", link: "/developer/install/cli/info" },
|
||||
{ text: "install", link: "/developer/install/cli/install" },
|
||||
{ text: "logs", link: "/developer/install/cli/logs" },
|
||||
{ text: "node", link: "/developer/install/cli/node" },
|
||||
{ text: "osinfo", link: "/developer/install/cli/osinfo" },
|
||||
{ text: "precheck", link: "/developer/install/cli/precheck" },
|
||||
{ text: "prepare", link: "/developer/install/cli/prepare" },
|
||||
{ text: "release", link: "/developer/install/cli/release" },
|
||||
{ text: "start", link: "/developer/install/cli/start" },
|
||||
{ text: "stop", link: "/developer/install/cli/stop" },
|
||||
{ text: "uninstall", link: "/developer/install/cli/uninstall" },
|
||||
{ text: "upgrade", link: "/developer/install/cli/upgrade" },
|
||||
{
|
||||
text: "user",
|
||||
link: "/developer/install/cli/user",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "activate", link: "/developer/install/cli/user-activate" },
|
||||
{ text: "create", link: "/developer/install/cli/user-create" },
|
||||
{ text: "delete", link: "/developer/install/cli/user-delete" },
|
||||
{ text: "get", link: "/developer/install/cli/user-get" },
|
||||
{ text: "list", link: "/developer/install/cli/user-list" },
|
||||
{ text: "reset-password", link: "/developer/install/cli/user-reset-password" },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Olares versioning",
|
||||
link: "/developer/install/versioning",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Develop Olares apps",
|
||||
link: "/developer/develop/",
|
||||
items: [
|
||||
{
|
||||
text: "Develop with Studio",
|
||||
collapsed: true,
|
||||
link: "/developer/develop/tutorial/",
|
||||
items: [
|
||||
{
|
||||
text: "Deploy an app",
|
||||
link: "/developer/develop/tutorial/deploy",
|
||||
},
|
||||
{
|
||||
text: "Develop in a dev container",
|
||||
link: "/developer/develop/tutorial/develop",
|
||||
},
|
||||
{
|
||||
text: "Package and upload",
|
||||
link: "/developer/develop/tutorial/package-upload",
|
||||
},
|
||||
{
|
||||
text: "Add app assets",
|
||||
link: "/developer/develop/tutorial/assets",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Application package",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Application chart",
|
||||
link: "/developer/develop/package/chart",
|
||||
},
|
||||
{
|
||||
text: "OlaresManifest",
|
||||
link: "/developer/develop/package/manifest",
|
||||
},
|
||||
/*{
|
||||
text: "Recommendation",
|
||||
link: "/developer/develop/package/recommend",
|
||||
},*/
|
||||
{
|
||||
text: "Helm extension",
|
||||
link: "/developer/develop/package/extension",
|
||||
},
|
||||
],
|
||||
},
|
||||
// {
|
||||
// text: "Advanced",
|
||||
// collapsed: true,
|
||||
// items: [
|
||||
// {
|
||||
// text: "terminus-info",
|
||||
// link: "/developer/develop/advanced/terminus-info",
|
||||
// },
|
||||
// {
|
||||
// text: "Service provider",
|
||||
// link: "/developer/develop/advanced/provider",
|
||||
// },
|
||||
// {
|
||||
// text: "AI",
|
||||
// link: "/developer/develop/advanced/ai",
|
||||
// },
|
||||
// { text: "Cookie", link: "/developer/develop/advanced/cookie" },
|
||||
// { text: "Database", link: "/developer/develop/advanced/database" },
|
||||
// {
|
||||
// text: "Account",
|
||||
// link: "/developer/develop/advanced/account",
|
||||
// },
|
||||
// {
|
||||
// text: "Market",
|
||||
// link: "/developer/develop/advanced/market",
|
||||
// },
|
||||
// {
|
||||
// text: "Websocket",
|
||||
// link: "/developer/develop/advanced/websocket",
|
||||
// },
|
||||
// {
|
||||
// text: "File upload",
|
||||
// link: "/developer/develop/advanced/file-upload",
|
||||
// },
|
||||
// {
|
||||
// text: "Secret",
|
||||
// link: "/developer/develop/advanced/secret",
|
||||
// },
|
||||
// {
|
||||
// text: "Kubesphere",
|
||||
// link: "/developer/develop/advanced/kubesphere",
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
{
|
||||
text: "Submit application",
|
||||
collapsed: true,
|
||||
link: "/developer/develop/submit/",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Contribute to Olares",
|
||||
items: [
|
||||
{
|
||||
text: "Develop system app",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Overview",
|
||||
link: "/developer/contribute/system-app/overview",
|
||||
},
|
||||
{
|
||||
text: "Configure deployment",
|
||||
link: "/developer/contribute/system-app/deployment",
|
||||
},
|
||||
{
|
||||
text: "Configure permissions",
|
||||
link: "/developer/contribute/system-app/olares-manifest",
|
||||
},
|
||||
{
|
||||
text: "Install",
|
||||
link: "/developer/contribute/system-app/install",
|
||||
},
|
||||
{
|
||||
text: "Other",
|
||||
link: "/developer/contribute/system-app/other",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Develop protocols",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Contract",
|
||||
link: "/developer/contribute/olares-id/contract/contract",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Architecture",
|
||||
link: "/developer/contribute/olares-id/contract/architecture",
|
||||
},
|
||||
{
|
||||
text: "DID",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Design",
|
||||
link: "/developer/contribute/olares-id/contract/did/design",
|
||||
},
|
||||
{
|
||||
text: "Official Taggers",
|
||||
link: "/developer/contribute/olares-id/contract/did/official-taggers",
|
||||
},
|
||||
{
|
||||
text: "Release History",
|
||||
link: "/developer/contribute/olares-id/contract/did/release-history",
|
||||
},
|
||||
{
|
||||
text: "FAQ",
|
||||
link: "/developer/contribute/olares-id/contract/did/faq",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Reputation",
|
||||
link: "/developer/contribute/olares-id/contract/contract-reputation",
|
||||
},
|
||||
{
|
||||
text: "Manage",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Contract",
|
||||
link: "/developer/contribute/olares-id/contract/manage/contract",
|
||||
},
|
||||
{
|
||||
text: "SDK",
|
||||
link: "/developer/contribute/olares-id/contract/manage/sdk",
|
||||
},
|
||||
{
|
||||
text: "Environment",
|
||||
link: "/developer/contribute/olares-id/contract/manage/environment",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Verifiable Credential",
|
||||
link: "/developer/contribute/olares-id/verifiable-credential/overview",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Issuer",
|
||||
link: "/developer/contribute/olares-id/verifiable-credential/issuer",
|
||||
},
|
||||
{
|
||||
text: "Verifer",
|
||||
link: "/developer/contribute/olares-id/verifiable-credential/verifer",
|
||||
},
|
||||
{
|
||||
text: "Olares",
|
||||
link: "/developer/contribute/olares-id/verifiable-credential/olares",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
export const en = defineConfig({
|
||||
@@ -913,12 +500,17 @@ export const en = defineConfig({
|
||||
socialLinks: [{ icon: "github", link: "https://github.com/beclab/olares" }],
|
||||
|
||||
nav: [
|
||||
{ text: "Olares", link: "/manual/overview" },
|
||||
{ text: "Olares Space", link: "/space/" },
|
||||
{ text: "Use Cases", link: "/use-cases/" },
|
||||
{ text: "Developer Guide", link: "/developer/concepts/" },
|
||||
{ text: "Olares OS", link: "/manual/overview" },
|
||||
{ text: "Olares One", link: "/one/" },
|
||||
{ text: "Use cases", link: "/use-cases/" },
|
||||
{ text: "Developer guide", link: "/developer/concepts/" },
|
||||
],
|
||||
|
||||
sidebar: side,
|
||||
sidebar: {
|
||||
...side,
|
||||
...oneSidebar,
|
||||
...useCaseSidebar,
|
||||
...developerSidebar,
|
||||
},
|
||||
},
|
||||
});
|
||||
239
docs/.vitepress/one.en.ts
Normal file
239
docs/.vitepress/one.en.ts
Normal file
@@ -0,0 +1,239 @@
|
||||
import { defineConfig, type DefaultTheme } from "vitepress";
|
||||
|
||||
export const oneSidebar: DefaultTheme.Sidebar = {
|
||||
"/one/": [
|
||||
{
|
||||
text: "Olares One",
|
||||
link: "/one/",
|
||||
items: [
|
||||
{
|
||||
text: "Technical spec",
|
||||
link: "/one/spec",
|
||||
},
|
||||
{
|
||||
text: "FAQs",
|
||||
link: "/one/faq",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Initial setup",
|
||||
items: [
|
||||
{
|
||||
text: "First boot",
|
||||
link: "/one/first-boot",
|
||||
},
|
||||
{
|
||||
text: "Access Olares securely",
|
||||
link: "/one/access-olares-via-vpn",
|
||||
},
|
||||
{
|
||||
text: "Redeem membership",
|
||||
link: "/one/redeem-membership",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Onboarding",
|
||||
items: [
|
||||
{
|
||||
text: "Open WebUI with Ollama",
|
||||
link: "/one/open-webui",
|
||||
},
|
||||
{
|
||||
text: "Generate images with ComfyUI",
|
||||
link: "/one/comfyui",
|
||||
},
|
||||
{
|
||||
text: "Switch GPU mode",
|
||||
link: "/one/gpu",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Use",
|
||||
items: [
|
||||
{
|
||||
text: "Customize Olares",
|
||||
link: "/one/customize",
|
||||
},
|
||||
{
|
||||
text: "Manage files",
|
||||
link: "/one/files",
|
||||
},
|
||||
{
|
||||
text: "Install & update apps",
|
||||
link: "/one/market",
|
||||
},
|
||||
{
|
||||
text: "Secure passwords",
|
||||
link: "/one/vault",
|
||||
},
|
||||
{
|
||||
text: "Download YouTube videos",
|
||||
link: "/one/wise-download",
|
||||
},
|
||||
{
|
||||
text: "Deploy an app",
|
||||
link: "/one/deploy",
|
||||
},
|
||||
|
||||
]
|
||||
},
|
||||
// {
|
||||
// text: "Manage",
|
||||
// items: [
|
||||
// {
|
||||
// text: "Set up app entrances",
|
||||
// link: "/one/app-entrances",
|
||||
// },
|
||||
// {
|
||||
// text: "Create users",
|
||||
// link: "/one/users",
|
||||
// },
|
||||
// ]
|
||||
// },
|
||||
{
|
||||
text: "Monitor",
|
||||
items: [
|
||||
{
|
||||
text: "System resources",
|
||||
link: "/one/dashboard",
|
||||
},
|
||||
{
|
||||
text: "Traffic",
|
||||
link: "/one/space",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Explore",
|
||||
items: [
|
||||
{
|
||||
text: "Play Steam games",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Streaming",
|
||||
link: "/one/steam-stream"
|
||||
},
|
||||
{
|
||||
text: "Direct play",
|
||||
link: "/one/steam-direct-play",
|
||||
}]
|
||||
},
|
||||
{
|
||||
text: "Access Windows in Olares",
|
||||
link: "/one/windows",
|
||||
},
|
||||
{
|
||||
text: "Generate music with Ace-Step",
|
||||
link: "/one/ace-step",
|
||||
},
|
||||
|
||||
{
|
||||
text: "Deep research with DeerFlow",
|
||||
link: "/one/deerflow",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Advanced",
|
||||
items: [
|
||||
{
|
||||
text: "SSH into Olares One",
|
||||
link: "/one/access-terminal-ssh",
|
||||
},
|
||||
{
|
||||
text: "Expand storage",
|
||||
collapsed: true,
|
||||
items:
|
||||
[
|
||||
{
|
||||
text: "USB drive",
|
||||
link: "/one/expand-storage-usb-drive",
|
||||
},
|
||||
{
|
||||
text: "External SSD",
|
||||
link: "/one/expand-storage-external-ssd",
|
||||
},
|
||||
{
|
||||
text: "NVMe SSD",
|
||||
link: "/one/expand-storage-internal-ssd",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Connect two Olares One",
|
||||
link: "/one/connect-two-olares-one"
|
||||
// items:
|
||||
// [
|
||||
// {
|
||||
// text: "Manage GPU",
|
||||
// link: "/one/two-one-gpu",
|
||||
// },
|
||||
// {
|
||||
// text: "Run larger local LLMs",
|
||||
// link: "/one/two-one-llm",
|
||||
// }
|
||||
// ]
|
||||
},
|
||||
{
|
||||
text: "Set up with eGPU",
|
||||
link: "/one/egpu",
|
||||
},
|
||||
{
|
||||
text: "Dual-boot Olares OS with Windows",
|
||||
collapsed: true,
|
||||
items:
|
||||
[
|
||||
{
|
||||
text: "Dual-drive setup (Recommended)",
|
||||
link: "/one/dual-boot-dual-drive",
|
||||
},
|
||||
{
|
||||
text: "Single-drive setup",
|
||||
link: "/one/dual-boot-single-drive",
|
||||
}
|
||||
,
|
||||
{
|
||||
text: "Install drivers on Windows",
|
||||
link: "/one/install-nvidia-driver",
|
||||
}
|
||||
]
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "System update",
|
||||
items: [
|
||||
{
|
||||
text: "Update OS",
|
||||
link: "/one/update",
|
||||
},
|
||||
{
|
||||
text: "Back up & restore",
|
||||
link: "/one/backup-resotre",
|
||||
},
|
||||
{
|
||||
text: "Factory reset",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Using LarePass",
|
||||
link: "/one/factory-reset",
|
||||
},
|
||||
{
|
||||
text: "In BIOS",
|
||||
link: "/one/factory-reset-in-bios",
|
||||
},
|
||||
{
|
||||
text: "Using bootable USB",
|
||||
link: "/one/create-drive",
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
},
|
||||
],
|
||||
}
|
||||
239
docs/.vitepress/one.zh.ts
Normal file
239
docs/.vitepress/one.zh.ts
Normal file
@@ -0,0 +1,239 @@
|
||||
import { defineConfig, type DefaultTheme } from "vitepress";
|
||||
|
||||
export const oneSidebar: DefaultTheme.Sidebar = {
|
||||
"/zh/one/": [
|
||||
{
|
||||
text: "Olares One",
|
||||
link: "/zh/one/",
|
||||
items: [
|
||||
{
|
||||
text: "Technical spec",
|
||||
link: "/zh/one/spec",
|
||||
},
|
||||
{
|
||||
text: "FAQs",
|
||||
link: "/zh/one/faq",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Initial setup",
|
||||
items: [
|
||||
{
|
||||
text: "First boot",
|
||||
link: "/zh/one/first-boot",
|
||||
},
|
||||
{
|
||||
text: "Access Olares securely",
|
||||
link: "/zh/one/access-olares-via-vpn",
|
||||
},
|
||||
{
|
||||
text: "Redeem Olares Space membership",
|
||||
link: "/zh/one/redeem-membership",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Onboarding",
|
||||
items: [
|
||||
{
|
||||
text: "Open WebUI with Ollama",
|
||||
link: "/zh/one/open-webui",
|
||||
},
|
||||
{
|
||||
text: "Generate images with ComfyUI",
|
||||
link: "/zh/one/comfyui",
|
||||
},
|
||||
{
|
||||
text: "Switch GPU mode",
|
||||
link: "/zh/one/gpu",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Use",
|
||||
items: [
|
||||
{
|
||||
text: "Customize Olares",
|
||||
link: "/zh/one/customize",
|
||||
},
|
||||
{
|
||||
text: "Manage files",
|
||||
link: "/zh/one/files",
|
||||
},
|
||||
{
|
||||
text: "Install & update apps",
|
||||
link: "/zh/one/market",
|
||||
},
|
||||
{
|
||||
text: "Secure passwords",
|
||||
link: "/zh/one/vault",
|
||||
},
|
||||
{
|
||||
text: "Download YouTube videos",
|
||||
link: "/zh/one/wise-download",
|
||||
},
|
||||
{
|
||||
text: "Deploy an app",
|
||||
link: "/zh/one/deploy",
|
||||
},
|
||||
|
||||
]
|
||||
},
|
||||
// {
|
||||
// text: "Manage",
|
||||
// items: [
|
||||
// {
|
||||
// text: "Set up app entrances",
|
||||
// link: "/zh/one/app-entrances",
|
||||
// },
|
||||
// {
|
||||
// text: "Create users",
|
||||
// link: "/zh/one/users",
|
||||
// },
|
||||
// ]
|
||||
// },
|
||||
{
|
||||
text: "Monitor",
|
||||
items: [
|
||||
{
|
||||
text: "System resources",
|
||||
link: "/zh/one/dashboard",
|
||||
},
|
||||
{
|
||||
text: "Traffic",
|
||||
link: "/zh/one/space",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Explore",
|
||||
items: [
|
||||
{
|
||||
text: "Play Steam games",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Streaming",
|
||||
link: "/zh/one/steam-stream"
|
||||
},
|
||||
{
|
||||
text: "Direct play",
|
||||
link: "/zh/one/steam-direct-play",
|
||||
}]
|
||||
},
|
||||
{
|
||||
text: "Access Windows in Olares",
|
||||
link: "/zh/one/windows",
|
||||
},
|
||||
{
|
||||
text: "Generate music with Ace-Step",
|
||||
link: "/zh/one/ace-step",
|
||||
},
|
||||
|
||||
{
|
||||
text: "Deep research with DeerFlow",
|
||||
link: "/zh/one/deerflow",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Advanced",
|
||||
items: [
|
||||
{
|
||||
text: "SSH into Olares One",
|
||||
link: "/zh/one/access-terminal-ssh",
|
||||
},
|
||||
{
|
||||
text: "Expand storage",
|
||||
collapsed: true,
|
||||
items:
|
||||
[
|
||||
{
|
||||
text: "USB drive",
|
||||
link: "/zh/one/expand-storage-usb-drive",
|
||||
},
|
||||
{
|
||||
text: "External SSD",
|
||||
link: "/zh/one/expand-storage-external-ssd",
|
||||
},
|
||||
{
|
||||
text: "NVMe SSD",
|
||||
link: "/zh/one/expand-storage-internal-ssd",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Connect two Olares One",
|
||||
link: "/zh/one/connect-two-olares-one"
|
||||
// items:
|
||||
// [
|
||||
// {
|
||||
// text: "Manage GPU",
|
||||
// link: "/zh/one/two-one-gpu",
|
||||
// },
|
||||
// {
|
||||
// text: "Run larger local LLMs",
|
||||
// link: "/zh/one/two-one-llm",
|
||||
// }
|
||||
// ]
|
||||
},
|
||||
{
|
||||
text: "Set up with eGPU",
|
||||
link: "/zh/one/egpu",
|
||||
},
|
||||
{
|
||||
text: "Dual-boot Olares OS with Windows",
|
||||
collapsed: true,
|
||||
items:
|
||||
[
|
||||
{
|
||||
text: "Dual-drive setup (Recommended)",
|
||||
link: "/zh/one/dual-boot-dual-drive",
|
||||
},
|
||||
{
|
||||
text: "Single-drive setup",
|
||||
link: "/zh/one/dual-boot-single-drive",
|
||||
}
|
||||
,
|
||||
{
|
||||
text: "Install drivers on Windows",
|
||||
link: "/zh/one/install-nvidia-driver",
|
||||
}
|
||||
]
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "System update",
|
||||
items: [
|
||||
{
|
||||
text: "Update OS",
|
||||
link: "/zh/one/update",
|
||||
},
|
||||
{
|
||||
text: "Back up & restore",
|
||||
link: "/zh/one/backup-resotre",
|
||||
},
|
||||
{
|
||||
text: "Factory reset",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Using LarePass",
|
||||
link: "/zh/one/factory-reset",
|
||||
},
|
||||
{
|
||||
text: "In BIOS",
|
||||
link: "/zh/one/factory-reset-in-bios",
|
||||
},
|
||||
{
|
||||
text: "Using bootable USB",
|
||||
link: "/zh/one/create-drive",
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
},
|
||||
],
|
||||
}
|
||||
101
docs/.vitepress/usecase.en.ts
Normal file
101
docs/.vitepress/usecase.en.ts
Normal file
@@ -0,0 +1,101 @@
|
||||
import { defineConfig, type DefaultTheme } from "vitepress";
|
||||
|
||||
export const useCaseSidebar: DefaultTheme.Sidebar = {
|
||||
"/use-cases/": [
|
||||
{
|
||||
text: "Use cases",
|
||||
link: "/use-cases/",
|
||||
items: [
|
||||
{
|
||||
text: "Stable Diffusion",
|
||||
link: "/use-cases/stable-diffusion",
|
||||
},
|
||||
{
|
||||
text: "ComfyUI",
|
||||
link: "/use-cases/comfyui",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Manage ComfyUI",
|
||||
link: "/use-cases/comfyui-launcher",
|
||||
},
|
||||
{
|
||||
text: "Use ComfyUI for Krita",
|
||||
link: "/use-cases/comfyui-for-krita",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Ollama",
|
||||
link: "/use-cases/ollama",
|
||||
},
|
||||
{
|
||||
text: "Open WebUI",
|
||||
link: "/use-cases/openwebui",
|
||||
},
|
||||
{
|
||||
text: "Perplexica",
|
||||
link: "/use-cases/perplexica",
|
||||
},
|
||||
{
|
||||
text: "Dify",
|
||||
link: "/use-cases/dify",
|
||||
},
|
||||
{
|
||||
text: "Jellyfin",
|
||||
link: "/use-cases/stream-media",
|
||||
},
|
||||
{
|
||||
text: "Steam",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Play directly on Olares",
|
||||
link: "/use-cases/play-games-directly",
|
||||
},
|
||||
{
|
||||
text: "Stream to other devices",
|
||||
link: "/use-cases/stream-game",
|
||||
}
|
||||
]
|
||||
},
|
||||
// {
|
||||
// text: "Redroid",
|
||||
// link: "/use-cases/host-cloud-android",
|
||||
// },
|
||||
{
|
||||
text: "Windows",
|
||||
link: "/use-cases/windows",
|
||||
},
|
||||
{
|
||||
text: "DeerFlow",
|
||||
link: "/use-cases/deerflow",
|
||||
},
|
||||
{
|
||||
text: "Duix.Avatar",
|
||||
link: "/use-cases/duix-avatar",
|
||||
},
|
||||
{
|
||||
text: "ACE-Step",
|
||||
link: "/use-cases/ace-step",
|
||||
},
|
||||
{
|
||||
text: "Stirling PDF",
|
||||
link: "/use-cases/stirling-pdf",
|
||||
},
|
||||
{
|
||||
text: "PDFMathTranslate",
|
||||
link: "/use-cases/pdfmathtranslate",
|
||||
},
|
||||
{
|
||||
text: "LobeChat",
|
||||
link: "/use-cases/lobechat",
|
||||
},
|
||||
{
|
||||
text: "OpenClaw",
|
||||
link: "/use-cases/openclaw",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
69
docs/.vitepress/usecase.zh.ts
Normal file
69
docs/.vitepress/usecase.zh.ts
Normal file
@@ -0,0 +1,69 @@
|
||||
import { defineConfig, type DefaultTheme } from "vitepress";
|
||||
|
||||
export const useCaseSidebar: DefaultTheme.Sidebar = {
|
||||
"/zh/use-cases/": [
|
||||
{
|
||||
text: "应用示例",
|
||||
link: "/zh/use-cases/",
|
||||
items: [
|
||||
{
|
||||
text: "Stable Diffusion",
|
||||
link: "/zh/use-cases/stable-diffusion",
|
||||
},
|
||||
{
|
||||
text: "ComfyUI",
|
||||
link: "/zh/use-cases/comfyui",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Manage ComfyUI",
|
||||
link: "/zh/use-cases/comfyui-launcher",
|
||||
},
|
||||
{
|
||||
text: "Use ComfyUI for Krita",
|
||||
link: "/zh/use-cases/comfyui-for-krita",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Ollama",
|
||||
link: "/zh/use-cases/ollama",
|
||||
},
|
||||
{
|
||||
text: "Open WebUI",
|
||||
link: "/zh/use-cases/openwebui",
|
||||
},
|
||||
{
|
||||
text: "Perplexica",
|
||||
link: "/zh/use-cases/perplexica",
|
||||
},
|
||||
{
|
||||
text: "Dify",
|
||||
link: "/zh/use-cases/dify",
|
||||
},
|
||||
{
|
||||
text: "Jellyfin",
|
||||
link: "/zh/use-cases/stream-media",
|
||||
},
|
||||
{
|
||||
text: "Steam",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "在 Olares 本机游玩",
|
||||
link: "/zh/use-cases/play-games-directly",
|
||||
},
|
||||
{
|
||||
text: "串流到其他设备",
|
||||
link: "/zh/use-cases/stream-game",
|
||||
}
|
||||
]
|
||||
},
|
||||
// {
|
||||
// text: "Redroid",
|
||||
// link: "/zh/use-cases/host-cloud-android",
|
||||
// },
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
import { defineConfig, type DefaultTheme } from "vitepress";
|
||||
|
||||
import { oneSidebar } from './one.zh.ts';
|
||||
import { useCaseSidebar } from './usecase.zh.ts';
|
||||
import { developerSidebar } from './developer.zh.ts';
|
||||
const side = {
|
||||
"/zh/manual/": [
|
||||
{
|
||||
@@ -17,7 +19,7 @@ const side = {
|
||||
link: "/zh/manual/help/olares",
|
||||
},
|
||||
{
|
||||
text: "安装激活",
|
||||
text: "安装配置与访问",
|
||||
link: "/zh/manual/help/installation",
|
||||
},
|
||||
{
|
||||
@@ -28,10 +30,20 @@ const side = {
|
||||
// text: "技术支持",
|
||||
// link: "/zh/manual/help/request-technical-support",
|
||||
// },
|
||||
// {
|
||||
// text: "Troubleshooting Guide",
|
||||
// link: "/zh/manual/help/troubleshooting-guide",
|
||||
// },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "故障排查",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "内存不足或没有释放",
|
||||
link: "/zh/manual/help/ts-free-memory",
|
||||
},
|
||||
{
|
||||
text: "应用市场应用缺失",
|
||||
link: "/zh/manual/help/ts-missing-apps",
|
||||
}
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -132,53 +144,8 @@ const side = {
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "LarePass",
|
||||
link: "/zh/manual/larepass/",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "管理账户",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "创建账户", link: "/zh/manual/larepass/create-account" },
|
||||
{ text: "备份助记词", link: "/zh/manual/larepass/back-up-mnemonics" },
|
||||
{ text: "管理集成", link: "/zh/manual/larepass/integrations" },
|
||||
],
|
||||
},
|
||||
{ text: "使用专用网络", link: "/zh/manual/larepass/private-network" },
|
||||
{
|
||||
text: "管理设备",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "激活 Olares", link: "/zh/manual/larepass/activate-olares" },
|
||||
{ text: "管理 Olares", link: "/zh/manual/larepass/manage-olares" },
|
||||
],
|
||||
},
|
||||
{ text: "管理文件", link: "/zh/manual/larepass/manage-files" },
|
||||
// collapsed: true,
|
||||
// items: [
|
||||
// {text: "常用文件操作", link:"/zh/manual/larepass/manage-files"},
|
||||
// {text: "同步与共享", link:"/zh/manual/larepass/sync-share"}
|
||||
// ]
|
||||
// },
|
||||
{
|
||||
text: "管理密码",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "自动填充", link: "/zh/manual/larepass/autofill" },
|
||||
{ text: "双重验证", link: "/zh/manual/larepass/two-factor-verification" },
|
||||
],
|
||||
},
|
||||
/*{
|
||||
text: "管理内容",
|
||||
link: "/zh/manual/larepass/manage-knowledge",
|
||||
},*/
|
||||
],
|
||||
},
|
||||
{
|
||||
"text": "Olares 应用",
|
||||
"collapsed": true,
|
||||
"link": "/zh/manual/olares/",
|
||||
"items": [
|
||||
{ "text": "桌面", "link": "/zh/manual/olares/desktop" },
|
||||
@@ -391,7 +358,7 @@ const side = {
|
||||
{ text: "恢复", link: "/zh/manual/olares/settings/restore" },
|
||||
],
|
||||
},
|
||||
{ text: "开发者资源", link: "/zh/manual/olares/settings/developer" },
|
||||
{ text: "高级设置", link: "/zh/manual/olares/settings/developer" },
|
||||
]
|
||||
},
|
||||
{ "text": "仪表盘", "link": "/zh/manual/olares/resources-usage" },
|
||||
@@ -399,9 +366,97 @@ const side = {
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "教程",
|
||||
text: "LarePass",
|
||||
link: "/zh/manual/larepass/",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "管理账户",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "创建账户", link: "/zh/manual/larepass/create-account" },
|
||||
{ text: "备份助记词", link: "/zh/manual/larepass/back-up-mnemonics" },
|
||||
{ text: "管理集成", link: "/zh/manual/larepass/integrations" },
|
||||
],
|
||||
},
|
||||
{ text: "使用专用网络", link: "/zh/manual/larepass/private-network" },
|
||||
{
|
||||
text: "管理设备",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "激活 Olares", link: "/zh/manual/larepass/activate-olares" },
|
||||
{ text: "管理 Olares", link: "/zh/manual/larepass/manage-olares" },
|
||||
],
|
||||
},
|
||||
{ text: "管理文件", link: "/zh/manual/larepass/manage-files" },
|
||||
// collapsed: true,
|
||||
// items: [
|
||||
// {text: "常用文件操作", link:"/zh/manual/larepass/manage-files"},
|
||||
// {text: "同步与共享", link:"/zh/manual/larepass/sync-share"}
|
||||
// ]
|
||||
// },
|
||||
{
|
||||
text: "管理密码",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "自动填充", link: "/zh/manual/larepass/autofill" },
|
||||
{ text: "双重验证", link: "/zh/manual/larepass/two-factor-verification" },
|
||||
],
|
||||
},
|
||||
/*{
|
||||
text: "管理内容",
|
||||
link: "/zh/manual/larepass/manage-knowledge",
|
||||
},*/
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Olares Space",
|
||||
link: "/zh/manual/space/index",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "管理账号",
|
||||
link: "/zh/manual/space/manage-accounts",
|
||||
},
|
||||
{
|
||||
text: "托管 Olares",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "创建 Olares",
|
||||
link: "/zh/manual/space/create-olares",
|
||||
},
|
||||
{
|
||||
text: "管理 Olares",
|
||||
link: "/zh/manual/space/manage-olares",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "托管域名",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "设置自定义域名",
|
||||
link: "/zh/manual/space/host-domain",
|
||||
},
|
||||
{
|
||||
text: "管理域名",
|
||||
link: "/zh/manual/space/manage-domain",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "备份与恢复",
|
||||
link: "/zh/manual/space/backup-restore",
|
||||
},
|
||||
{ text: "计费", link: "/zh/manual/space/billing" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "教程",
|
||||
link: "/zh/manual/best-practices/",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "设置自定义域名",
|
||||
@@ -435,464 +490,6 @@ const side = {
|
||||
},
|
||||
{ text: "术语", link: "/zh/manual/glossary" },
|
||||
],
|
||||
"/zh/space/": [
|
||||
{
|
||||
text: "Olares Space",
|
||||
link: "/zh/space/",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "管理账号",
|
||||
link: "/zh/space/manage-accounts",
|
||||
},
|
||||
{
|
||||
text: "托管 Olares",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "创建 Olares",
|
||||
link: "/zh/space/create-olares",
|
||||
},
|
||||
{
|
||||
text: "管理 Olares",
|
||||
link: "/zh/space/manage-olares",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "托管域名",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "设置自定义域名",
|
||||
link: "/zh/space/host-domain",
|
||||
},
|
||||
{
|
||||
text: "管理域名",
|
||||
link: "/zh/space/manage-domain",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "备份与恢复",
|
||||
link: "/zh/space/backup-restore",
|
||||
},
|
||||
{ text: "计费", link: "/zh/space/billing" },
|
||||
],
|
||||
},
|
||||
],
|
||||
"/zh/use-cases/": [
|
||||
{
|
||||
text: "应用示例",
|
||||
link: "/zh/use-cases/",
|
||||
items: [
|
||||
{
|
||||
text: "Stable Diffusion",
|
||||
link: "/zh/use-cases/stable-diffusion",
|
||||
},
|
||||
{
|
||||
text: "ComfyUI",
|
||||
link: "/zh/use-cases/comfyui",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "Manage ComfyUI",
|
||||
link: "/zh/use-cases/comfyui-launcher",
|
||||
},
|
||||
{
|
||||
text: "Use ComfyUI for Krita",
|
||||
link: "/zh/use-cases/comfyui-for-krita",
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "Ollama",
|
||||
link: "/zh/use-cases/ollama",
|
||||
},
|
||||
{
|
||||
text: "Open WebUI",
|
||||
link: "/zh/use-cases/openwebui",
|
||||
},
|
||||
{
|
||||
text: "Perplexica",
|
||||
link: "/zh/use-cases/perplexica",
|
||||
},
|
||||
{
|
||||
text: "Dify",
|
||||
link: "/zh/use-cases/dify",
|
||||
},
|
||||
{
|
||||
text: "Jellyfin",
|
||||
link: "/zh/use-cases/stream-media",
|
||||
},
|
||||
{
|
||||
text: "Steam",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "在 Olares 本机游玩",
|
||||
link: "/zh/use-cases/play-games-directly",
|
||||
},
|
||||
{
|
||||
text: "串流到其他设备",
|
||||
link: "/zh/use-cases/stream-game",
|
||||
}
|
||||
]
|
||||
},
|
||||
// {
|
||||
// text: "Redroid",
|
||||
// link: "/zh/use-cases/host-cloud-android",
|
||||
// },
|
||||
],
|
||||
},
|
||||
],
|
||||
"/zh/developer/": [
|
||||
{
|
||||
text: "概念",
|
||||
link: "/zh/developer/concepts/",
|
||||
items: [
|
||||
{ text: "系统架构", link: "/zh/developer/concepts/system-architecture" },
|
||||
{
|
||||
text: "Olares ID",
|
||||
link: "/zh/developer/concepts/olares-id",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "去中心化标识符",
|
||||
link: "/zh/developer/concepts/did",
|
||||
},
|
||||
{
|
||||
text: "DID Registry",
|
||||
link: "/zh/developer/concepts/registry",
|
||||
},
|
||||
{
|
||||
text: "可验证凭证",
|
||||
link: "/zh/developer/concepts/vc",
|
||||
},
|
||||
{
|
||||
text: "自治声誉",
|
||||
link: "/zh/developer/concepts/reputation",
|
||||
},
|
||||
// {
|
||||
// text: "主权网络",
|
||||
// link: "/zh/developer/concepts/self-sovereign-network",
|
||||
// },
|
||||
{
|
||||
text: "身份钱包",
|
||||
link: "/zh/developer/concepts/wallet",
|
||||
},
|
||||
],
|
||||
},
|
||||
{ text: "账户", link: "/zh/developer/concepts/account" },
|
||||
{ text: "应用", link: "/zh/developer/concepts/application" },
|
||||
{ text: "网络", link: "/zh/developer/concepts/network" },
|
||||
{ text: "数据", link: "/zh/developer/concepts/data" },
|
||||
{ text: "密钥", link: "/zh/developer/concepts/secrets" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Olares 安装详解",
|
||||
link: "/zh/developer/install/",
|
||||
items: [
|
||||
{
|
||||
text: "安装概述",
|
||||
link: "/zh/developer/install/installation-overview",
|
||||
},
|
||||
{
|
||||
text: "安装流程",
|
||||
link: "/zh/developer/install/installation-process",
|
||||
},
|
||||
{
|
||||
text: "Olares Home",
|
||||
link: "/zh/developer/install/olares-home",
|
||||
},
|
||||
{
|
||||
text: "环境变量",
|
||||
link: "/zh/developer/install/environment-variables",
|
||||
},
|
||||
{
|
||||
text: "Olares CLI",
|
||||
link: "/zh/developer/install/cli/olares-cli",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "访问 Olares 终端", link: "/zh/developer/reference/access-olares-terminal" },
|
||||
{
|
||||
text: "backups",
|
||||
link: "/zh/developer/install/cli/backups",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "backup", link: "/zh/developer/install/cli/backups-backup" },
|
||||
{ text: "download", link: "/zh/developer/install/cli/backups-download" },
|
||||
{ text: "region", link: "/zh/developer/install/cli/backups-region" },
|
||||
{ text: "restore", link: "/zh/developer/install/cli/backups-restore" },
|
||||
{ text: "snapshots", link: "/zh/developer/install/cli/backups-snapshots" },
|
||||
],
|
||||
},
|
||||
{ text: "change-ip", link: "/zh/developer/install/cli/change-ip" },
|
||||
{ text: "disk", link: "/zh/developer/install/cli/disk" },
|
||||
{ text: "download", link: "/zh/developer/install/cli/download" },
|
||||
{ text: "gpu", link: "/zh/developer/install/cli/gpu" },
|
||||
{ text: "info", link: "/zh/developer/install/cli/info" },
|
||||
{ text: "install", link: "/zh/developer/install/cli/install" },
|
||||
{ text: "logs", link: "/zh/developer/install/cli/logs" },
|
||||
{ text: "node", link: "/zh/developer/install/cli/node" },
|
||||
{ text: "osinfo", link: "/zh/developer/install/cli/osinfo" },
|
||||
{ text: "precheck", link: "/zh/developer/install/cli/precheck" },
|
||||
{ text: "prepare", link: "/zh/developer/install/cli/prepare" },
|
||||
{ text: "release", link: "/zh/developer/install/cli/release" },
|
||||
{ text: "start", link: "/zh/developer/install/cli/start" },
|
||||
{ text: "stop", link: "/zh/developer/install/cli/stop" },
|
||||
{ text: "uninstall", link: "/zh/developer/install/cli/uninstall" },
|
||||
{ text: "upgrade", link: "/zh/developer/install/cli/upgrade" },
|
||||
{
|
||||
text: "user",
|
||||
link: "/zh/developer/install/cli/user",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "activate", link: "/zh/developer/install/cli/user-activate" },
|
||||
{ text: "create", link: "/zh/developer/install/cli/user-create" },
|
||||
{ text: "delete", link: "/zh/developer/install/cli/user-delete" },
|
||||
{ text: "get", link: "/zh/developer/install/cli/user-get" },
|
||||
{ text: "list", link: "/zh/developer/install/cli/user-list" },
|
||||
{ text: "reset-password", link: "/zh/developer/install/cli/user-reset-password" },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "版本说明",
|
||||
link: "/zh/developer/install/versioning",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "开发 Olares 应用",
|
||||
link: "/zh/developer/develop/",
|
||||
items: [
|
||||
{
|
||||
text: "使用 Studio 开发",
|
||||
collapsed: true,
|
||||
link: "/zh/developer/develop/tutorial/",
|
||||
items: [
|
||||
{
|
||||
text: "部署应用",
|
||||
link: "/zh/developer/develop/tutorial/deploy",
|
||||
},
|
||||
{
|
||||
text: "使用开发容器",
|
||||
link: "/zh/developer/develop/tutorial/develop",
|
||||
},
|
||||
{
|
||||
text: "打包与上传",
|
||||
link: "/zh/developer/develop/tutorial/package-upload",
|
||||
},
|
||||
{
|
||||
text: "添加应用素材",
|
||||
link: "/zh/developer/develop/tutorial/assets",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "应用包管理",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "应用 Chart 包",
|
||||
link: "/zh/developer/develop/package/chart",
|
||||
},
|
||||
{
|
||||
text: "OlaresManifest",
|
||||
link: "/zh/developer/develop/package/manifest",
|
||||
},
|
||||
/*{
|
||||
text: "推荐算法",
|
||||
link: "/zh/developer/develop/package/recommend",
|
||||
},*/
|
||||
{
|
||||
text: "Helm 扩展",
|
||||
link: "/zh/developer/develop/package/extension",
|
||||
},
|
||||
],
|
||||
},
|
||||
// {
|
||||
// text: "进阶",
|
||||
// collapsed: true,
|
||||
// items: [
|
||||
// {
|
||||
// text: "terminus-info",
|
||||
// link: "/zh/developer/develop/advanced/terminus-info",
|
||||
// },
|
||||
// {
|
||||
// text: "Service Provider",
|
||||
// link: "/zh/developer/develop/advanced/provider",
|
||||
// },
|
||||
// {
|
||||
// text: "AI",
|
||||
// link: "/zh/developer/develop/advanced/ai",
|
||||
// },
|
||||
// { text: "Cookie", link: "/zh/developer/develop/advanced/cookie" },
|
||||
// { text: "数据库", link: "/zh/developer/develop/advanced/database" },
|
||||
// {
|
||||
// text: "账户",
|
||||
// link: "/zh/developer/develop/advanced/account",
|
||||
// },
|
||||
// {
|
||||
// text: "应用市场",
|
||||
// link: "/zh/developer/develop/advanced/market",
|
||||
// },
|
||||
// {
|
||||
// text: "Analytic",
|
||||
// link: "/zh/developer/develop/advanced/analytic",
|
||||
// },
|
||||
// {
|
||||
// text: "Websocket",
|
||||
// link: "/zh/developer/develop/advanced/websocket",
|
||||
// },
|
||||
// {
|
||||
// text: "文件上传",
|
||||
// link: "/zh/developer/develop/advanced/file-upload",
|
||||
// },
|
||||
// {
|
||||
// text: "Rss",
|
||||
// link: "/zh/developer/develop/advanced/rss",
|
||||
// },
|
||||
// {
|
||||
// text: "密钥",
|
||||
// link: "/zh/developer/develop/advanced/secret",
|
||||
// },
|
||||
// {
|
||||
// text: "Notification",
|
||||
// link: "/zh/developer/develop/advanced/notification",
|
||||
// },
|
||||
// {
|
||||
// text: "Frontend",
|
||||
// link: "/zh/developer/develop/advanced/frontend",
|
||||
// },
|
||||
// {
|
||||
// text: "Kubesphere",
|
||||
// link: "/zh/developer/develop/advanced/kubesphere",
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
{
|
||||
text: "提交应用",
|
||||
collapsed: true,
|
||||
link: "/zh/developer/develop/submit/",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "参与贡献",
|
||||
items: [
|
||||
{
|
||||
text: "开发系统应用",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "概述",
|
||||
link: "/zh/developer/contribute/system-app/overview",
|
||||
},
|
||||
{
|
||||
text: "应用部署配置",
|
||||
link: "/zh/developer/contribute/system-app/deployment",
|
||||
},
|
||||
{
|
||||
text: "Olares 权限配置",
|
||||
link: "/zh/developer/contribute/system-app/olares-manifest",
|
||||
},
|
||||
{
|
||||
text: "安装",
|
||||
link: "/zh/developer/contribute/system-app/install",
|
||||
},
|
||||
{
|
||||
text: "其他",
|
||||
link: "/zh/developer/contribute/system-app/other",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "开发协议",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "合约",
|
||||
link: "/zh/developer/contribute/olares-id/contract/contract",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "架构",
|
||||
link: "/zh/developer/contribute/olares-id/contract/architecture",
|
||||
},
|
||||
{
|
||||
text: "DID",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "设计",
|
||||
link: "/zh/developer/contribute/olares-id/contract/did/design",
|
||||
},
|
||||
{
|
||||
text: "官方 Tagger",
|
||||
link: "/zh/developer/contribute/olares-id/contract/did/official-taggers",
|
||||
},
|
||||
{
|
||||
text: "发布历史",
|
||||
link: "/zh/developer/contribute/olares-id/contract/did/release-history",
|
||||
},
|
||||
{
|
||||
text: "FAQ",
|
||||
link: "/zh/developer/contribute/olares-id/contract/did/faq",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "声誉",
|
||||
link: "/zh/developer/contribute/olares-id/contract/contract-reputation",
|
||||
},
|
||||
{
|
||||
text: "管理",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "合约",
|
||||
link: "/zh/developer/contribute/olares-id/contract/manage/contract",
|
||||
},
|
||||
{
|
||||
text: "SDK",
|
||||
link: "/zh/developer/contribute/olares-id/contract/manage/sdk",
|
||||
},
|
||||
{
|
||||
text: "环境",
|
||||
link: "/zh/developer/contribute/olares-id/contract/manage/environment",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "可验证凭证(VC)",
|
||||
link: "/zh/developer/contribute/olares-id/verifiable-credential/overview",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
text: "发行方",
|
||||
link: "/zh/developer/contribute/olares-id/verifiable-credential/issuer",
|
||||
},
|
||||
{
|
||||
text: "验证方",
|
||||
link: "/zh/developer/contribute/olares-id/verifiable-credential/verifer",
|
||||
},
|
||||
{
|
||||
text: "Olares 案例",
|
||||
link: "/zh/developer/contribute/olares-id/verifiable-credential/olares",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
export const zh = defineConfig({
|
||||
@@ -902,12 +499,17 @@ export const zh = defineConfig({
|
||||
socialLinks: [{ icon: "github", link: "https://github.com/beclab/olares" }],
|
||||
|
||||
nav: [
|
||||
{ text: "Olares", link: "zh/manual/overview" },
|
||||
{ text: "Olares Space", link: "/zh/space/" },
|
||||
{ text: "Olares OS", link: "zh/manual/overview" },
|
||||
{ text: "Olares One", link: "/zh/one/" },
|
||||
{ text: "应用示例", link: "/zh/use-cases/" },
|
||||
{ text: "开发者文档", link: "/zh/developer/concepts/" },
|
||||
],
|
||||
|
||||
sidebar: side,
|
||||
sidebar: {
|
||||
...side,
|
||||
...oneSidebar,
|
||||
...useCaseSidebar,
|
||||
...developerSidebar,
|
||||
},
|
||||
},
|
||||
});
|
||||
@@ -89,15 +89,9 @@ Key characteristics of shared applications include:
|
||||
* **Centralized management**: Only administrators can install the core service of a shared application. Administrators are responsible for installing, configuring, and hosting the app's service, resources, and runtime environment within the cluster.
|
||||
* **Easy identification**: In Olares Market, shared applications are typically marked with a "Shared" label for easy identification.
|
||||
* **Flexible access**: The method for accessing a shared application depends on the app's form:
|
||||
* **Headless backend service**: For shared applications that typically run as a background service without a graphical UI (e.g., Ollama), users need to install a **reference application** to call the service. For example, users within the cluster can access the Ollama service via Open WebUI or LobeChat.
|
||||
* **Headless backend service**: For shared applications that typically run as a background service without a graphical UI (e.g., Ollama), no dedicated reference application is required. The service exposes standard APIs and shared entrances that can be directly consumed by any compatible third‑party client such as LobeChat and Open WebUI. Users install the client and point it to the shared app’s API endpoint found in the Olares **Settings** > **Applications** > **Entrances**.
|
||||
* **Complete application with built-in UI**: For shared applications that include a complete user interface and backend service themselves (e.g., ComfyUI Shared or Dify Shared), administrators and other users in the cluster can obtain the service access point by directly installing the shared application itself.
|
||||
|
||||
### Reference applications
|
||||
|
||||
Reference applications are applications that have been granted access to specific shared applications within Olares. They typically provide a user-friendly interface, allowing users to easily access the APIs or services exposed by the shared applications.
|
||||
|
||||
For example, Open WebUI, LobeChat, and n8n are reference applications for Ollama. Dify Shared is the reference application of itself.
|
||||
|
||||
### Dependencies
|
||||
|
||||
Dependencies are prerequisite applications that must be present for certain applications to function properly. Before installing an application with dependencies, users must ensure all required dependencies are already installed in the cluster.
|
||||
|
||||
107
docs/developer/develop/distribute-index.md
Normal file
107
docs/developer/develop/distribute-index.md
Normal file
@@ -0,0 +1,107 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Understand how application distribution works in Olares.
|
||||
---
|
||||
# Distribute Olares applications
|
||||
|
||||
Distributing applications on Olares is based on open standards and automated validation.
|
||||
If your application is already packaged as an Olares Application Chart (OAC), you can publish it to Olares Market and make it available to users with minimal friction.
|
||||
|
||||
This guide walks you through the distribution lifecycle of an Olares application, from understanding how Market indexing works to publishing, maintaining, and promoting your app.
|
||||
|
||||
## Before you begin
|
||||
|
||||
Before distributing your application, it helps to understand a few core concepts:
|
||||
|
||||
- **[Olares Application Chart (OAC)](/developer/develop/package/chart.md)**
|
||||
|
||||
The packaging format used to describe an Olares application, including metadata, ownership, versioning, and installation configuration.
|
||||
|
||||
- **Application index**
|
||||
|
||||
A service that provides application metadata to Olares Market. Olares includes a default public index, and developers can deploy their own.
|
||||
|
||||
- **Terminus-Gitbot**
|
||||
|
||||
The automated validation system that checks application submissions and enforces distribution rules.
|
||||
|
||||
- **Owners file (`owners`)**
|
||||
|
||||
A file in the OAC root directory used to validate ownership and permissions. The file has no extension.
|
||||
```text
|
||||
owners:
|
||||
- <your-github-username>
|
||||
- <collaborator1-username>
|
||||
- <collaborator2-username>
|
||||
```
|
||||
- **Control files**
|
||||
|
||||
Special empty files in the OAC root directory that control distribution status:
|
||||
- `.suspend`: suspend distribution
|
||||
- `.remove`: remove an app from the Market
|
||||
|
||||
For details, see [Manage the app lifecycle](/developer/develop/manage-apps.md#control-files).
|
||||
|
||||
## Ownership and collaboration
|
||||
|
||||
To collaborate as a team:
|
||||
- Add all maintainers to the owners file (recommended). Each listed owner can independently fork the repo and submit changes for that app.
|
||||
- Add teammates as collaborators to your forked repository so they can push commits to your PR branch.
|
||||
|
||||
## App distribution workflow
|
||||
|
||||
### 1. Prepare your app package
|
||||
|
||||
Before an app can be distributed, it must be packaged as an **Olares Application Chart (OAC)**.
|
||||
|
||||
At this stage, developers typically:
|
||||
- Develop and test the app on an Olares host.
|
||||
- Verify installation and upgrade behavior.
|
||||
- Finalize chart metadata and structure.
|
||||
|
||||
For details, see [Olares Application Chart (OAC)](/developer/develop/package/chart.md).
|
||||
|
||||
### 2. Submit the app to the default index
|
||||
|
||||
Olares Market indexes applications from Git repositories.
|
||||
To publish an app to the default public index, developers submit their OAC by opening a PR to the official repository.
|
||||
|
||||
During submission:
|
||||
- The PR title declares the action type.
|
||||
- Terminus-Gitbot validates file scope, ownership, and version rules.
|
||||
- Valid PRs are merged automatically without manual review.
|
||||
|
||||
For details, see [Submit applications](/developer/develop/submit-apps.md).
|
||||
|
||||
### 3. Automated validation and indexing
|
||||
|
||||
After a PR is submitted, Terminus-Gitbot performs automated checks to ensure the submission follows distribution rules.
|
||||
|
||||
If all checks pass, the PR is merged automatically.
|
||||
After a short delay, the application becomes visible in Olares Market.
|
||||
|
||||
### 4. Manage the application lifecycle
|
||||
|
||||
After an application is published, developers continue to manage its lifecycle through Pull Requests.
|
||||
|
||||
Lifecycle actions include:
|
||||
- Releasing new versions.
|
||||
- Temporarily suspending distribution.
|
||||
- Permanently removing an application from the Market.
|
||||
|
||||
These actions are controlled using PR types and special control files in the OAC.
|
||||
|
||||
For details, see [Manage the app lifecycle](/developer/develop/manage-apps.md).
|
||||
|
||||
### 5. Optimize your Market listing
|
||||
|
||||
Once published, you can improve how your app is presented in Olares Market by adding icons, screenshots, and featured images.
|
||||
|
||||
For details, see [Promote your apps](/developer/develop/promote-apps.md).
|
||||
|
||||
### 6. (Optional) Publish paid applications
|
||||
|
||||
Olares Market also supports paid application distribution.
|
||||
Paid apps require additional identity registration, pricing configuration, and license management.
|
||||
|
||||
For details, see [Publish paid applications](/developer/develop/paid-apps.md).
|
||||
@@ -27,4 +27,4 @@ To publish your application to the Olares Market, you must structure it accordin
|
||||
## Step 3: Submit your application
|
||||
Once your application is built and packaged, the final step is to share it with the Olares community.
|
||||
|
||||
* **[Submit to Market](./submit/index.md)**: Learn how to submit your application to the Olares Market for review and distribution.
|
||||
* **[Submit to Market](/developer/develop/distribute-index.md)**: Learn how to submit your application to the Olares Market for review and distribution.
|
||||
72
docs/developer/develop/manage-apps.md
Normal file
72
docs/developer/develop/manage-apps.md
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to update, suspend, or remove your application from Olares Market.
|
||||
---
|
||||
# Manage the app lifecycle
|
||||
|
||||
This guide explains how to manage an application after it has been published, including updating, suspending, or removing it from Olares Market.
|
||||
|
||||
All actions are performed through Pull Requests (PRs) to the `main` branch. Terminus-Gitbot supports three lifecycle actions after your app is published:
|
||||
|
||||
- **UPDATE**: Keep your app up to date. Release new versions, fix bugs, or adjust configurations.
|
||||
- **SUSPEND**: Pause distribution. Stop new discovery, downloads, and installs in Olares Market without affecting existing users.
|
||||
- **REMOVE**: Retire the app. Permanently stop distribution and prevent the chart folder name from being reused.
|
||||
|
||||
:::tip Reduce conflicts
|
||||
Before opening the PR, sync your fork and rebase your branch onto the latest `main` to reduce potential conflicts.
|
||||
:::
|
||||
|
||||
## Control files
|
||||
|
||||
Control files are special empty files in the OAC root directory that manage an application's distribution status in Olares Market.
|
||||
|
||||
| File name | Used for | Version rule | Content needed |
|
||||
|--|--|--|--|
|
||||
| `.suspend` | Suspend distribution | Upgrade (>) | Empty file |
|
||||
| `.remove` | Remove application | Same (=) | Empty file |
|
||||
|
||||
An `UPDATE` PR or a `NEW` PR must not include these files. They are only used for `SUSPEND` and `REMOVE`.
|
||||
|
||||
## Update an app (UPDATE)
|
||||
|
||||
To update an existing application, such as releasing a new version, changing configurations, or updating the owners, submit a PR with type `UPDATE`.
|
||||
|
||||
The PR must meet the following requirements:
|
||||
|
||||
- **Version bump**: The new Chart version must be greater than the current version in the repository. Any change to a chart must bump the Chart version.
|
||||
- **Clean directory**: The OAC root must not contain `.suspend` or `.remove` files.
|
||||
- **No conflict**: The PR branch must not conflict with `beclab/apps:main`.
|
||||
|
||||
:::warning No rollbacks
|
||||
Olares Market does not support version rollbacks. If an issue occurs, you must submit a new version to fix it.
|
||||
:::
|
||||
|
||||
## Suspend an app (SUSPEND)
|
||||
|
||||
To temporarily stop your application from being listed, downloaded, or installed, submit a PR with type `SUSPEND`.
|
||||
|
||||
The PR must meet the following requirements:
|
||||
- **Version bump**: The Chart version must be greater than the current version in the repository.
|
||||
- **Control file**: The OAC root directory contains the `.suspend` file and does not contain the `.remove` file.
|
||||
- **No conflict**: The PR branch must not conflict with `beclab/apps:main`.
|
||||
|
||||
After the PR is merged, the application is no longer listed in Olares Market. Users who have already installed the application can continue to use it.
|
||||
|
||||
## Remove an app (REMOVE)
|
||||
|
||||
To permanently remove an application from Olares Market, submit a PR with type `REMOVE`.
|
||||
|
||||
The PR must meet the following requirements:
|
||||
|
||||
- **Same version**: The Chart version in the PR title must be the same as the current version in the repository.
|
||||
- **Control file**: After the change, the `.remove` file is the only file in the OAC root directory.
|
||||
- **No conflict**: The PR branch must not conflict with `beclab/apps:main`.
|
||||
|
||||
:::warning
|
||||
Removal is irreversible.
|
||||
:::
|
||||
|
||||
After the PR is merged:
|
||||
|
||||
- The chart folder name cannot be reused by the application owners.
|
||||
- Users who have already installed the application can continue to use it.
|
||||
72
docs/developer/develop/mw-integrate-with-es.md
Normal file
72
docs/developer/develop/mw-integrate-with-es.md
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to integrate your app with Elasticsearch service in Olares.
|
||||
---
|
||||
# Integrate with Elasticsearch
|
||||
|
||||
Use Olares Elasticsearch middleware by declaring it in `OlaresManifest.yaml`, then mapping the injected values to your container environment variables.
|
||||
|
||||
## Install Elasticsearch service
|
||||
|
||||
Install the Elasticsearch service from Market.
|
||||
|
||||
1. Open Market from Launchpad and search for "Elasticsearch".
|
||||
2. Click **Get**, then **Install**, and wait for the installation to complete.
|
||||
|
||||
Once installed, the service and its connection details will appear in the Middleware list in Control Hub.
|
||||
|
||||
## Configure `OlaresManifest.yaml`
|
||||
|
||||
In `OlaresManifest.yaml`, add the required middleware configuration.
|
||||
|
||||
- Use the `username` field to specify the Elasticsearch user.
|
||||
- Use the `indexes` field to request one or more indexes. Each index name is used as the key in `.Values.elasticsearch.indexes`.
|
||||
|
||||
**Example**
|
||||
|
||||
```yaml
|
||||
middleware:
|
||||
elasticsearch:
|
||||
username: elasticlient
|
||||
indexes:
|
||||
- name: aaa
|
||||
```
|
||||
|
||||
## Inject environment variables
|
||||
|
||||
In your deployment YAML, map the injected `.Values.elasticsearch.*` fields to the environment variables your app uses.
|
||||
|
||||
**Example**
|
||||
```yaml
|
||||
containers:
|
||||
- name: my-app
|
||||
env:
|
||||
- name: ES_HOST
|
||||
value: "{{ .Values.elasticsearch.host }}"
|
||||
|
||||
- name: ES_PORT
|
||||
value: "{{ .Values.elasticsearch.port }}"
|
||||
|
||||
- name: ES_USER
|
||||
value: "{{ .Values.elasticsearch.username }}"
|
||||
|
||||
- name: ES_PASSWORD
|
||||
value: "{{ .Values.elasticsearch.password }}"
|
||||
|
||||
# Index name
|
||||
# The index name configured in OlaresManifest (for example, aaa)
|
||||
- name: ES_INDEX
|
||||
value: "{{ .Values.elasticsearch.indexes.aaa }}"
|
||||
```
|
||||
|
||||
## Elasticsearch Values reference
|
||||
|
||||
Elasticsearch Values are predefined environment variables injected into `values.yaml` during deployment. They are system-managed and not user-editable.
|
||||
|
||||
| Key | Type | Description |
|
||||
|--|--|--|
|
||||
|`.Values.elasticsearch.host`| String | Elasticsearch service host |
|
||||
|`.Values.elasticsearch.port`| Number | Elasticsearch service port |
|
||||
|`.Values.elasticsearch.username`| String | Elasticsearch username |
|
||||
|`.Values.elasticsearch.password`| String | Elasticsearch password |
|
||||
|`.Values.elasticsearch.indexes` | Map<String,String> | The requested index name is used<br> as the key. For example, if you request `aaa`, the value is available at `.Values.elasticsearch.indexes.aaa`. |
|
||||
72
docs/developer/develop/mw-integrate-with-mariadb.md
Normal file
72
docs/developer/develop/mw-integrate-with-mariadb.md
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to integrate your app with MariaDB service in Olares.
|
||||
---
|
||||
# Integrate with MariaDB
|
||||
|
||||
Use Olares MariaDB middleware by declaring it in `OlaresManifest.yaml`, then mapping the injected values to your container environment variables.
|
||||
|
||||
## Install MariaDB service
|
||||
|
||||
Install the MariaDB service from Market.
|
||||
|
||||
1. Open Market from Launchpad and search for "MariaDB".
|
||||
2. Click **Get**, then **Install**, and wait for the installation to complete.
|
||||
|
||||
Once installed, the service and its connection details will appear in the Middleware list in Control Hub.
|
||||
|
||||
## Configure `OlaresManifest.yaml`
|
||||
|
||||
In `OlaresManifest.yaml`, add the required middleware configuration.
|
||||
|
||||
- Use the `username` field to specify the database username.
|
||||
- Use the `databases` field to request one or more databases. Each database name is used as the key in `.Values.mariadb.databases`.
|
||||
|
||||
**Example**
|
||||
```yaml
|
||||
middleware:
|
||||
mariadb:
|
||||
username: mariadbclient
|
||||
databases:
|
||||
- name: aaa
|
||||
```
|
||||
|
||||
## Inject environment variables
|
||||
|
||||
In your deployment YAML, map the injected `.Values.mariadb.*` fields to the environment variables your app uses.
|
||||
|
||||
**Example**
|
||||
```yaml
|
||||
containers:
|
||||
- name: my-app
|
||||
# For MariaDB, the corresponding value is as follows
|
||||
env:
|
||||
- name: MDB_HOST
|
||||
value: "{{ .Values.mariadb.host }}"
|
||||
|
||||
- name: MDB_PORT
|
||||
value: "{{ .Values.mariadb.port }}"
|
||||
|
||||
- name: MDB_USER
|
||||
value: "{{ .Values.mariadb.username }}"
|
||||
|
||||
- name: MDB_PASSWORD
|
||||
value: "{{ .Values.mariadb.password }}"
|
||||
|
||||
# Database Name
|
||||
# The database name configured in OlaresManifest (e.g., aaa)
|
||||
- name: MDB_DB
|
||||
value: "{{ .Values.mariadb.databases.aaa }}"
|
||||
```
|
||||
|
||||
## MariaDB Values reference
|
||||
|
||||
MariaDB Values are predefined environment variables injected into `values.yaml` during deployment. They are system-managed and not user-editable.
|
||||
|
||||
| Key | Type | Description |
|
||||
|--|--|--|
|
||||
| `.Values.mariadb.host` | String | MariaDB database host |
|
||||
| `.Values.mariadb.port` | Number | MariaDB database port |
|
||||
| `.Values.mariadb.username` | String | MariaDB database username |
|
||||
| `.Values.mariadb.password` | String | MariaDB database password |
|
||||
| `.Values.mariadb.databases` | Map<String,String> | The requested database name is used as the key. <br/>For example, if you request `aaa`, the value is available at `.Values.mariadb.databases.aaa`. |
|
||||
73
docs/developer/develop/mw-integrate-with-minio.md
Normal file
73
docs/developer/develop/mw-integrate-with-minio.md
Normal file
@@ -0,0 +1,73 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to integrate your app with MinIO service in Olares.
|
||||
---
|
||||
# Integrate with MinIO
|
||||
|
||||
Use Olares MinIO middleware by declaring it in `OlaresManifest.yaml`, then mapping the injected values to your container environment variables.
|
||||
|
||||
## Install MinIO service
|
||||
|
||||
Install the MinIO service from Market.
|
||||
|
||||
1. Open Market from Launchpad and search for "MinIO".
|
||||
2. Click **Get**, then **Install**, and wait for the installation to complete.
|
||||
|
||||
Once installed, the service and its connection details will appear in the Middleware list in Control Hub.
|
||||
|
||||
## Configure `OlaresManifest.yaml`
|
||||
|
||||
In `OlaresManifest.yaml`, add the required middleware configuration.
|
||||
|
||||
- Use the `username` field to specify the MinIO access key.
|
||||
- Use the `buckets` field to request one or more buckets. Each bucket name is used as the key in `.Values.minio.buckets`.
|
||||
|
||||
**Example**
|
||||
```yaml
|
||||
middleware:
|
||||
minio:
|
||||
username: miniouser
|
||||
buckets:
|
||||
- name: mybucket
|
||||
```
|
||||
|
||||
## Inject environment variables
|
||||
|
||||
In your deployment YAML, map the injected `.Values.minio.*` fields to the environment variables your app uses.
|
||||
|
||||
**Example**
|
||||
```yaml
|
||||
containers:
|
||||
- name: my-app
|
||||
# For MinIO, the corresponding values are as follows
|
||||
env:
|
||||
# Construct the endpoint using host and port
|
||||
- name: MINIO_ENDPOINT
|
||||
value: "{{ .Values.minio.host }}:{{ .Values.minio.port }}"
|
||||
|
||||
- name: MINIO_PORT
|
||||
value: "{{ .Values.minio.port }}"
|
||||
|
||||
- name: MINIO_ACCESS_KEY
|
||||
value: "{{ .Values.minio.username }}"
|
||||
|
||||
- name: MINIO_SECRET_KEY
|
||||
value: "{{ .Values.minio.password }}"
|
||||
|
||||
# Bucket name
|
||||
# The bucket name configured in OlaresManifest (e.g., mybucket)
|
||||
- name: MINIO_BUCKET
|
||||
value: "{{ .Values.minio.buckets.mybucket }}"
|
||||
```
|
||||
|
||||
## MinIO Values reference
|
||||
|
||||
MinIO Values are predefined environment variables injected into `values.yaml` during deployment. They are system-managed and not user-editable.
|
||||
|
||||
| Key | Type | Description |
|
||||
|--|--|--|
|
||||
| `.Values.minio.host` | String | MinIO service host |
|
||||
| `.Values.minio.port` | Number | MinIO service port |
|
||||
| `.Values.minio.username` | String | MinIO access key |
|
||||
| `.Values.minio.password` | String | MinIO secret key |
|
||||
| `.Values.minio.buckets` | Map<String,String> | The requested bucket name is used as the key. <br>For example, if you request `mybucket`, the value is available at `.Values.minio.buckets.mybucket`. |
|
||||
76
docs/developer/develop/mw-integrate-with-mongodb.md
Normal file
76
docs/developer/develop/mw-integrate-with-mongodb.md
Normal file
@@ -0,0 +1,76 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to integrate your app with MongoDB service in Olares.
|
||||
---
|
||||
# Integrate with MongoDB
|
||||
|
||||
Use Olares MongoDB middleware by declaring it in `OlaresManifest.yaml`, then mapping the injected values to your container environment variables.
|
||||
|
||||
## Install MongoDB service
|
||||
|
||||
Install the MongoDB service from Market.
|
||||
|
||||
1. Open Market from Launchpad and search for "MongoDB".
|
||||
2. Click **Get**, then **Install**, and wait for the installation to complete.
|
||||
|
||||
Once installed, the service and its connection details will appear in the Middleware list in Control Hub.
|
||||
|
||||
## Configure `OlaresManifest.yaml`
|
||||
|
||||
In `OlaresManifest.yaml`, add the required middleware configuration.
|
||||
|
||||
- Use the `username` field to specify the MongoDB database user.
|
||||
- Use the `databases` field to request one or more databases.
|
||||
- (Optional) Use the `script` field under each database to specify initialization scripts that are executed after the database is created.
|
||||
|
||||
**Example**
|
||||
```yaml
|
||||
middleware:
|
||||
mongodb:
|
||||
username: chromium
|
||||
databases:
|
||||
- name: chromium
|
||||
script:
|
||||
- 'db.getSiblingDB("$databasename").myCollection.insertOne({ x: 111 });'
|
||||
# Please make sure each line is a complete query.
|
||||
```
|
||||
|
||||
## Inject environment variables
|
||||
|
||||
In your deployment YAML, map the injected `.Values.mongodb.*` fields to the environment variables your app uses.
|
||||
|
||||
**Example**
|
||||
```yaml
|
||||
containers:
|
||||
- name: my-app
|
||||
# For MongoDB, the corresponding values are as follows
|
||||
env:
|
||||
- name: MONGODB_HOST
|
||||
value: "{{ .Values.mongodb.host }}"
|
||||
|
||||
- name: MONGODB_PORT
|
||||
value: "{{ .Values.mongodb.port }}"
|
||||
|
||||
- name: MONGODB_USER
|
||||
value: "{{ .Values.mongodb.username }}"
|
||||
|
||||
- name: MONGODB_PASSWORD
|
||||
value: "{{ .Values.mongodb.password }}"
|
||||
|
||||
# Database name
|
||||
# The database name configured in OlaresManifest (e.g., app_db)
|
||||
- name: MONGODB_DATABASE
|
||||
value: "{{ .Values.mongodb.databases.app_db }}"
|
||||
```
|
||||
|
||||
## MongoDB Values reference
|
||||
|
||||
MongoDB Values are predefined environment variables injected into `values.yaml` during deployment. They are system-managed and not user-editable.
|
||||
|
||||
| Key | Type | Description |
|
||||
|--|--|--|
|
||||
| `.Values.mongodb.host` | String | MongoDB database host |
|
||||
| `.Values.mongodb.port` | Number | MongoDB database port |
|
||||
| `.Values.mongodb.username` | String | MongoDB database username |
|
||||
| `.Values.mongodb.password` | String | MongoDB database password |
|
||||
| `.Values.mongodb.databases` | Map<String,String> | The requested database name is used as the key. <br/>For example, if you request `app_db`, the value is available at `.Values.mongodb.databases.app_db`. |
|
||||
72
docs/developer/develop/mw-integrate-with-mysql.md
Normal file
72
docs/developer/develop/mw-integrate-with-mysql.md
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to integrate your app with MySQL service in Olares.
|
||||
---
|
||||
# Integrate with MySQL
|
||||
|
||||
Use Olares MySQL middleware by declaring it in `OlaresManifest.yaml`, then mapping the injected values to your container environment variables.
|
||||
|
||||
## Install MySQL service
|
||||
|
||||
Install the MySQL service from Market.
|
||||
|
||||
1. Open Market from Launchpad and search for "MySQL".
|
||||
2. Click **Get**, then **Install**, and wait for the installation to complete.
|
||||
|
||||
Once installed, the service and its connection details will appear in the Middleware list in Control Hub.
|
||||
|
||||
## Configure `OlaresManifest.yaml`
|
||||
|
||||
In `OlaresManifest.yaml`, add the required middleware configuration.
|
||||
|
||||
- Use the `username` field to specify the MySQL database user.
|
||||
- Use the `databases` field to request one or more databases. Each database name is used as the key in `.Values.mysql.databases`.
|
||||
|
||||
**Example**
|
||||
```yaml
|
||||
middleware:
|
||||
mysql:
|
||||
username: mysqlclient
|
||||
databases:
|
||||
- name: aaa
|
||||
```
|
||||
|
||||
## Inject environment variables
|
||||
|
||||
In your deployment YAML, map the injected `.Values.mysql.*` fields to the environment variables your app uses.
|
||||
|
||||
**Example**
|
||||
```yaml
|
||||
containers:
|
||||
- name: my-app
|
||||
# For MySQL, the corresponding values are as follows
|
||||
env:
|
||||
- name: MDB_HOST
|
||||
value: "{{ .Values.mysql.host }}"
|
||||
|
||||
- name: MDB_PORT
|
||||
value: "{{ .Values.mysql.port }}"
|
||||
|
||||
- name: MDB_USER
|
||||
value: "{{ .Values.mysql.username }}"
|
||||
|
||||
- name: MDB_PASSWORD
|
||||
value: "{{ .Values.mysql.password }}"
|
||||
|
||||
# Database name
|
||||
# The database name configured in OlaresManifest (e.g., aaa)
|
||||
- name: MDB_DB
|
||||
value: "{{ .Values.mysql.databases.aaa }}"
|
||||
```
|
||||
|
||||
## MySQL Values reference
|
||||
|
||||
MySQL Values are predefined environment variables injected into `values.yaml` during deployment. They are system-managed and not user-editable.
|
||||
|
||||
| Key | Type | Description |
|
||||
|--|--|--|
|
||||
| `.Values.mysql.host` | String | MySQL database host |
|
||||
| `.Values.mysql.port` | Number | MySQL database port |
|
||||
| `.Values.mysql.username` | String | MySQL database username |
|
||||
| `.Values.mysql.password` | String | MySQL database password |
|
||||
| `.Values.mysql.databases` | Map<String,String> | The requested database name is used as the key. <br/>For example, if you request `aaa`, the value is available at `.Values.mysql.databases.aaa`. |
|
||||
81
docs/developer/develop/mw-integrate-with-pg.md
Normal file
81
docs/developer/develop/mw-integrate-with-pg.md
Normal file
@@ -0,0 +1,81 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to integrate your app with the built-in PostgreSQL service in Olares.
|
||||
---
|
||||
# Integrate with PostgreSQL
|
||||
|
||||
Use Olares PostgreSQL middleware by declaring it in `OlaresManifest.yaml`, then mapping the injected values to your container environment variables.
|
||||
|
||||
:::info PosgreSQL installed
|
||||
PostgreSQL service has been installed by default.
|
||||
:::
|
||||
|
||||
## Configure `OlaresManifest.yaml`
|
||||
|
||||
In `OlaresManifest.yaml`, add the required middleware configuration.
|
||||
|
||||
- Use the `scripts` field to specify scripts that should be executed after the database is created.
|
||||
- Use the `extensions` field to add the corresponding extension in the database.
|
||||
|
||||
:::info Variable injection in scripts
|
||||
The OS provides two variables, `$databasename` and `$dbusername`, which will be replaced by Olares Application Runtime when the command is executed.
|
||||
:::
|
||||
|
||||
**Example**
|
||||
```yaml
|
||||
middleware:
|
||||
postgres:
|
||||
username: immich
|
||||
databases:
|
||||
- name: immich
|
||||
extensions:
|
||||
- vectors
|
||||
- earthdistance
|
||||
scripts:
|
||||
- BEGIN;
|
||||
- ALTER DATABASE $databasename SET search_path TO "$user", public, vectors;
|
||||
- ALTER SCHEMA vectors OWNER TO $dbusername;
|
||||
- COMMIT;
|
||||
```
|
||||
|
||||
## Inject environment variables
|
||||
|
||||
In your deployment YAML, map the injected `.Values.postgres.*` fields to the environment variables your app uses.
|
||||
|
||||
**Example**
|
||||
```yaml
|
||||
containers:
|
||||
- name: my-app
|
||||
env:
|
||||
# The database name configured in OlaresManifest, specified in middleware.postgres.databases[i].name
|
||||
# NOTE: Replace <dbname> with the actual name defined in the Manifest (e.g., immich)
|
||||
- name: DB_POSTGRESDB_DATABASE
|
||||
value: {{ .Values.postgres.databases.<dbname> }}
|
||||
|
||||
# Host
|
||||
- name: DB_POSTGRESDB_HOST
|
||||
value: {{ .Values.postgres.host }}
|
||||
|
||||
# Port
|
||||
- name: DB_POSTGRESDB_PORT
|
||||
value: "{{ .Values.postgres.port }}"
|
||||
|
||||
# Username
|
||||
- name: DB_POSTGRESDB_USER
|
||||
value: {{ .Values.postgres.username }}
|
||||
|
||||
# Password
|
||||
- name: DB_POSTGRESDB_PASSWORD
|
||||
value: {{ .Values.postgres.password }}
|
||||
```
|
||||
|
||||
## PostgreSQL Values reference
|
||||
|
||||
PostgreSQL Values are predefined environment variables injected into `values.yaml` during deployment. They are system-managed and not user-editable.
|
||||
| Key | Type | Description |
|
||||
|--|--|--|
|
||||
| `.Values.postgres.host` | String | PostgreSQL database host |
|
||||
| `.Values.postgres.port` | Number | PostgreSQL database port |
|
||||
| `.Values.postgres.username` | String | PostgreSQL database username |
|
||||
| `.Values.postgres.password` | String | PostgreSQL database password |
|
||||
| `.Values.postgres.databases` | Map<String,String> | The requested database name is used as the key. <br>For example, if you request `app_db`, the value is available at `.Values.postgres.databases.app_db`|
|
||||
91
docs/developer/develop/mw-integrate-with-rabbitmq.md
Normal file
91
docs/developer/develop/mw-integrate-with-rabbitmq.md
Normal file
@@ -0,0 +1,91 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to integrate your app with RabbitMQ service in Olares.
|
||||
---
|
||||
# Integrate with RabbitMQ
|
||||
|
||||
Use Olares RabbitMQ middleware by declaring it in `OlaresManifest.yaml`, then mapping the injected values to your container environment variables.
|
||||
|
||||
## Install RabbitMQ service
|
||||
|
||||
Install the RabbitMQ service from Market.
|
||||
|
||||
1. Open Market from Launchpad and search for "RabbitMQ".
|
||||
2. Click **Get**, then **Install**, and wait for the installation to complete.
|
||||
|
||||
Once installed, the service and its connection details will appear in the Middleware list in Control Hub.
|
||||
|
||||
## Configure `OlaresManifest.yaml`
|
||||
|
||||
In `OlaresManifest.yaml`, add the required middleware configuration.
|
||||
|
||||
- Use the `username` field to specify the RabbitMQ user.
|
||||
- Use the `vhosts` field to request one or more virtual hosts (vhosts). Each vhost name is used as the key in `.Values.rabbitmq.vhosts`.
|
||||
|
||||
**Example**
|
||||
```yaml
|
||||
middleware:
|
||||
rabbitmq:
|
||||
username: rabbitmquser
|
||||
vhosts:
|
||||
- name: aaa
|
||||
```
|
||||
|
||||
## Inject environment variables
|
||||
|
||||
In your deployment YAML, map the injected `.Values.rabbitmq.*` fields to the environment variables your app uses.
|
||||
|
||||
**Example**
|
||||
```yaml
|
||||
containers:
|
||||
- name: my-app
|
||||
# For RabbitMQ, the corresponding values are as follows
|
||||
env:
|
||||
- name: RABBITMQ_HOST
|
||||
value: "{{ .Values.rabbitmq.host }}"
|
||||
|
||||
- name: RABBITMQ_PORT
|
||||
value: "{{ .Values.rabbitmq.port }}"
|
||||
|
||||
- name: RABBITMQ_USER
|
||||
value: "{{ .Values.rabbitmq.username }}"
|
||||
|
||||
- name: RABBITMQ_PASSWORD
|
||||
value: "{{ .Values.rabbitmq.password }}"
|
||||
|
||||
# Vhost
|
||||
# The vhost name configured in OlaresManifest (e.g., aaa)
|
||||
- name: RABBITMQ_VHOST
|
||||
value: "{{ .Values.rabbitmq.vhosts.aaa }}"
|
||||
```
|
||||
|
||||
## Construct a RabbitMQ connection URI
|
||||
|
||||
After configuring the environment variables, you can read them in your application code to construct the connection string.
|
||||
|
||||
Below is an example of constructing an AMQP URL using the environment variables:
|
||||
|
||||
```Go
|
||||
// Read environment variables
|
||||
user := os.Getenv("RABBITMQ_USER")
|
||||
password := os.Getenv("RABBITMQ_PASSWORD")
|
||||
vhost := os.Getenv("RABBITMQ_VHOST")
|
||||
host := os.Getenv("RABBITMQ_HOST")
|
||||
portMQ := os.Getenv("RABBITMQ_PORT")
|
||||
|
||||
// Construct AMQP connection string
|
||||
// Format: amqp://user:password@host:port/vhost
|
||||
url := fmt.Sprintf("amqp://%s:%s@%s:%s/%s", user, password, host, portMQ, vhost)
|
||||
```
|
||||
|
||||
## RabbitMQ Values reference
|
||||
|
||||
RabbitMQ Values are predefined environment variables injected into `values.yaml` during deployment. They are system-managed and not user-editable.
|
||||
|
||||
| Key | Type | Description |
|
||||
|--|--|--|
|
||||
| `.Values.rabbitmq.host` | String | RabbitMQ service host |
|
||||
| `.Values.rabbitmq.port` | Number | RabbitMQ service port |
|
||||
| `.Values.rabbitmq.username` | String | RabbitMQ username |
|
||||
| `.Values.rabbitmq.password` | String | RabbitMQ password |
|
||||
| `.Values.rabbitmq.vhosts` | Map<String,String> | The requested vhost name is used as the key. <br/>For example, if you request `aaa`, the value is available at `.Values.rabbitmq.vhosts.aaa`. |
|
||||
65
docs/developer/develop/mw-integrate-with-redis.md
Normal file
65
docs/developer/develop/mw-integrate-with-redis.md
Normal file
@@ -0,0 +1,65 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to integrate your app with the built-in Redis service in Olares.
|
||||
---
|
||||
# Integrate with Redis
|
||||
|
||||
Use Olares Redis middleware by declaring it in `OlaresManifest.yaml`, then mapping the injected values to your container environment variables.
|
||||
|
||||
:::info Redis installed
|
||||
Redis service has been installed by default.
|
||||
:::
|
||||
|
||||
## Configure `OlaresManifest.yaml`
|
||||
|
||||
In `OlaresManifest.yaml`, add the required Redis middleware configuration.
|
||||
|
||||
- Use the `password` field to specify the Redis access password.
|
||||
- Use the `namespace` field to request a Redis namespace.
|
||||
|
||||
**Example**
|
||||
```yaml
|
||||
middleware:
|
||||
redis:
|
||||
password: password
|
||||
namespace: db0
|
||||
```
|
||||
|
||||
## Inject environment variables
|
||||
|
||||
In your deployment YAML, map the injected `.Values.redis.*` fields to the environment variables your app uses.
|
||||
|
||||
**Example**
|
||||
```yaml
|
||||
containers:
|
||||
- name: my-app
|
||||
env:
|
||||
# Host
|
||||
- name: REDIS_HOST
|
||||
value: {{ .Values.redis.host }}
|
||||
|
||||
# Port
|
||||
# Quote the value to ensure it's treated as a string
|
||||
- name: REDIS_PORT
|
||||
value: "{{ .Values.redis.port }}"
|
||||
|
||||
# Password
|
||||
# Quote the value to handle special characters correctly
|
||||
- name: REDIS_PASSWORD
|
||||
value: "{{ .Values.redis.password }}"
|
||||
|
||||
# Namespace
|
||||
# NOTE: Replace <namespace> with the actual namespace defined in OlaresManifest (e.g., db0)
|
||||
- name: REDIS_NAMESPACE
|
||||
value: {{ .Values.redis.namespaces.<namespace> }}
|
||||
```
|
||||
|
||||
## Redis Values reference
|
||||
|
||||
Redis Values are predefined environment variables injected into `values.yaml` during deployment. They are system-managed and not user-editable.
|
||||
| Key | Type | Description |
|
||||
|--|--|--|
|
||||
| `.Values.redis.host` | String | Redis service host |
|
||||
| `.Values.redis.port` | Number | Redis service port |
|
||||
| `.Values.redis.password`| String | Redis service password |
|
||||
| `.Values.redis.namespaces` | Map<String, String> | The requested namespace is used as the key. <br>For example, if you request `app_ns`, the value is available at `.Values.redis.namespaces.app_ns`. |
|
||||
64
docs/developer/develop/mw-overview.md
Normal file
64
docs/developer/develop/mw-overview.md
Normal file
@@ -0,0 +1,64 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn what middleware is in Olares and navigate to access and integration guides for each supported service.
|
||||
---
|
||||
# Middleware in Olares
|
||||
|
||||
Middleware refers to infrastructure services that sit between your application and the system, providing data storage, messaging, and other common capabilities.
|
||||
|
||||
Our middleware documentation is organized into two types of guides:
|
||||
- **Access and manage data**: Connect to a running service to inspect data and troubleshoot issues.
|
||||
- **App integrate**: Configure your app to use a middleware service in Olares using `OlaresManifest.yaml`.
|
||||
|
||||
## Document types
|
||||
|
||||
### Access and manage data
|
||||
|
||||
Access and manage data guides explain how to connect to a running middleware service for administration.
|
||||
|
||||
Use these guides when you want to:
|
||||
- Inspect stored data or indexes.
|
||||
- Run queries or commands.
|
||||
- Debug application behavior.
|
||||
- Verify service status.
|
||||
|
||||
The access method (e.g., CLI, Dashboard, or Bytebase) depends on the service.
|
||||
|
||||
### App integration
|
||||
|
||||
App integration guides explain how to connect your application to a middleware service.
|
||||
|
||||
Use these guides when you want your application to:
|
||||
- Declare dependencies in `OlaresManifest.yaml`.
|
||||
- Request service resources.
|
||||
- Read system-injected connection values in your application.
|
||||
|
||||
Integration is declarative and handled by Olares at deployment time.
|
||||
|
||||
## Supported services
|
||||
|
||||
### Databases and caching
|
||||
|
||||
| Service | Access and manage data | App integration |
|
||||
| --- | --- | --- |
|
||||
| Elasticsearch | [Access](./mw-view-es-data.md) | [Integrate](./mw-integrate-with-es.md) |
|
||||
| MariaDB | [Access](./mw-view-mariadb-data.md) | [Integrate](./mw-integrate-with-mariadb.md) |
|
||||
| MongoDB | [Access](./mw-view-mongodb-data.md) | [Integrate](./mw-integrate-with-mongodb.md) |
|
||||
| MySQL | [Access](./mw-view-mysql-data.md) | [Integrate](./mw-integrate-with-mysql.md) |
|
||||
| PostgreSQL | [Access](./mw-view-pg-data.md) | [Integrate](./mw-integrate-with-pg.md) |
|
||||
| Redis | [Access](./mw-view-redis-data.md) | [Integrate](./mw-integrate-with-redis.md) |
|
||||
|
||||
### Messaging and streaming
|
||||
|
||||
| Service | Access and manage data | App integration |
|
||||
| --- | --- | --- |
|
||||
| RabbitMQ | [Access](./mw-view-rabbitmq-data.md) | [Integrate](./mw-integrate-with-rabbitmq.md) |
|
||||
| NATS | [Access](./mw-view-nats-data.md) | — |
|
||||
|
||||
### Storage and observability
|
||||
|
||||
| Service | Access and manage data | App integration |
|
||||
| --- | --- | --- |
|
||||
| MinIO | [Access](./mw-view-minio-data.md) | [Integrate](./mw-integrate-with-minio.md) |
|
||||
| Grafana | [Access](./mw-view-grafana-data.md) | — |
|
||||
| OpenTelemetry | [Access](./mw-view-otel-data.md) | — |
|
||||
69
docs/developer/develop/mw-view-es-data.md
Normal file
69
docs/developer/develop/mw-view-es-data.md
Normal file
@@ -0,0 +1,69 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to connect to and manage Elasticsearch data in Olares using Bytebase.
|
||||
---
|
||||
# View Elasticsearch data
|
||||
|
||||
To use Elasticsearch in Olares, install it from Market first. This guide explains how to access and manage Elasticsearch data using Bytebase.
|
||||
|
||||
## Install Elasticsearch service
|
||||
|
||||
Before connecting, install the Elasticsearch service from Market.
|
||||
|
||||
1. Open Market from Launchpad and search for "Elasticsearch".
|
||||
2. Click **Get**, then **Install**, and wait for the installation to complete.
|
||||
|
||||
Once installed, the service and its connection details will appear in the Middleware list in Control Hub.
|
||||
|
||||
## Get connection information
|
||||
|
||||
Before connecting, obtain Elasticsearch connection details from Control Hub.
|
||||
|
||||
1. Open Control Hub from Launchpad.
|
||||
2. In the left navigation pane, go to Middleware and select **Elasticsearch**.
|
||||
3. On the Details panel, record the following information:
|
||||
- **Host**: Used for Bytebase connection.
|
||||
- **User**: Used for Bytebase connection.
|
||||
- **Password**: Used for Bytebase connection.
|
||||
|
||||
{width=60% style="margin-left:0"}
|
||||
|
||||
## Manage via Bytebase
|
||||
|
||||
Bytebase provides a graphical interface for database management and schema changes.
|
||||
|
||||
### Prerequisites
|
||||
|
||||
:::info MongoDB app required
|
||||
Bytebase uses MongoDB to store its metadata. Install MongoDB before installing Bytebase.
|
||||
:::
|
||||
|
||||
1. Open Market and search for "MongoDB".
|
||||
2. Click **Get**, then **Install**, and wait until the service is running.
|
||||
3. After MongoDB is installed, search for "Bytebase" in Market.
|
||||
4. Click **Get**, then **Install**.
|
||||
|
||||
### First-time setup
|
||||
|
||||
When launching Bytebase for the first time, you must configure an administrator account.
|
||||
|
||||
:::tip
|
||||
Remember these credentials. Only the admin account can create new database instances.
|
||||
:::
|
||||
|
||||
1. Open Bytebase from Launchpad.
|
||||
2. Follow the on-screen prompts to set up your admin account with email and password.
|
||||
|
||||
### Create an Elasticsearch instance
|
||||
|
||||
1. Log in to Bytebase with your admin account.
|
||||
2. In the left navigation pane, select **Instances**, then click **+ Add Instance**.
|
||||
3. Choose **Elasticsearch** as the database type.
|
||||
4. Fill in the connection fields using values from Control Hub:
|
||||
- **Host or Socket**: Enter the **Host** address and do not include the port.
|
||||
- **Port**: Keep the default, usually `9200`.
|
||||
- **Username**: Enter the **User** value from Control Hub.
|
||||
- **Password**: Enter the **Password** value from Control Hub.
|
||||
5. Click **Test Connection** to verify connectivity, then click **Create**.
|
||||
|
||||
Creating an instance in Bytebase does not create a new database. Once the instance is created, you can use the corresponding client tools to inspect and manage data.
|
||||
67
docs/developer/develop/mw-view-grafana-data.md
Normal file
67
docs/developer/develop/mw-view-grafana-data.md
Normal file
@@ -0,0 +1,67 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to visualize Prometheus metrics in Olares using Grafana dashboards.
|
||||
---
|
||||
# Use Grafana dashboards
|
||||
|
||||
To visualize system metrics in Olares, you can run Grafana and connect it to the built-in Prometheus service. This guide explains how to install Grafana, connect the data source, and import a standard dashboard.
|
||||
|
||||
## Install Grafana
|
||||
|
||||
Before using Grafana, install it from Market.
|
||||
|
||||
1. Open Market from Launchpad and search for "Grafana".
|
||||
2. Click **Get**, then **Install**.
|
||||
3. In the pop-up window, set your login credentials:
|
||||
- `GF_USERNAME`: Grafana login username.
|
||||
- `GF_PASSWORD`: Grafana login password.
|
||||
:::tip Remember your login credentials
|
||||
These are the login credentials for Grafana. You will need them if you access Grafana later.
|
||||
:::
|
||||
{width=90% style="margin-left:0"}
|
||||
4. Wait for the installation to complete.
|
||||
|
||||
## Access Grafana
|
||||
|
||||
1. Open **Grafana** from Launchpad, then click <i class="material-symbols-outlined">open_in_new</i> to open it in a new tab.
|
||||
2. On the login screen, enter the `GF_USERNAME` and `GF_PASSWORD` you configured during installation.
|
||||
|
||||
After logging in, you will see the Grafana home page.
|
||||
|
||||
## Add Prometheus data source
|
||||
|
||||
Olares runs a built-in Prometheus service that collects system metrics.
|
||||
|
||||
To connect Grafana to this internal service:
|
||||
|
||||
1. In the Grafana left navigation pane, go to **Connections** > **Data sources**.
|
||||
2. Click **Add data source**, then select **Prometheus**.
|
||||
3. For the **Prometheus server URL** field, enter:
|
||||
```text
|
||||
http://dashboard.<olaresid>.olares.com
|
||||
```
|
||||
Replace `<olaresid>` with your Olares ID.
|
||||
4. Click **Save & test** at the bottom of the page. If the connection is successful, you will see the prompt below.
|
||||
{width=90% style="margin-left:0"}
|
||||
|
||||
## Create a dashboard
|
||||
|
||||
This approach is suitable when you need custom metrics and visualizations and are familiar with PromQL.
|
||||
1. In the left navigation pane, click **Dashboards**.
|
||||
2. Click **+ Create dashboard**, then select **+ Add visualization**.
|
||||
3. Select **prometheus** as the data source.
|
||||
4. Configure panels, PromQL queries, and expressions as needed.
|
||||
5. Click **Save dashboard** in the top-right corner for future use.
|
||||
|
||||
## Import a dashboard (recommended)
|
||||
|
||||
If you do not need to build dashboards from scratch, you can import existing dashboards.
|
||||
|
||||
1. Visit the [Grafana Dashboard library](https://grafana.com/grafana/dashboards/).
|
||||
2. Download the required dashboard as a `JSON` file.
|
||||
3. In Grafana, click <i class="material-symbols-outlined">add_2</i> in the top-right corner and select **Import dashboard**.
|
||||
4. Upload the `JSON` file, and select **prometheus** as the data source.
|
||||
5. Click **Import** to complete the import.
|
||||
|
||||
Imported dashboards provide predefined panels and queries and can be customized after import.
|
||||
{width=90%}
|
||||
91
docs/developer/develop/mw-view-mariadb-data.md
Normal file
91
docs/developer/develop/mw-view-mariadb-data.md
Normal file
@@ -0,0 +1,91 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to connect to and manage MariaDB data in Olares using CLI or Bytebase.
|
||||
---
|
||||
# View MariaDB data
|
||||
|
||||
To use MariaDB in Olares, install it from Market first. This guide explains how to access and manage MariaDB data using CLI or Bytebase.
|
||||
|
||||
## Install MariaDB service
|
||||
|
||||
Before connecting, install the MariaDB service from Market.
|
||||
|
||||
1. Open Market from Launchpad and search for "MariaDB".
|
||||
2. Click **Get**, then **Install**, and wait for the installation to complete.
|
||||
|
||||
Once installed, the service and its connection details will appear in the Middleware list in Control Hub.
|
||||
|
||||
## Get connection information
|
||||
|
||||
Before connecting, obtain MariaDB connection details from Control Hub.
|
||||
|
||||
1. Open Control Hub from Launchpad.
|
||||
2. In the left navigation pane, go to Middleware and select **Mariadb**.
|
||||
3. On the Details panel, record the following information:
|
||||
- **Host**: Used for Bytebase connection.
|
||||
- **User**: Used for Bytebase connection.
|
||||
- **Password**: Used for both CLI and Bytebase.
|
||||
|
||||
{width=60% style="margin-left:0"}
|
||||
|
||||
## Access via CLI
|
||||
|
||||
You can use the Olares terminal to access the MariaDB container for debugging or data operations.
|
||||
|
||||
1. In Control Hub, open the Olares terminal at the bottom of the left navigation pane.
|
||||
2. Retrieve the Pod name for the middleware:
|
||||
|
||||
```bash
|
||||
kubectl get pods -n mariadb-middleware
|
||||
```
|
||||
3. Record the Pod name, then enter the container:
|
||||
|
||||
```bash
|
||||
kubectl exec -it -n mariadb-middleware <mariadb-pod> -- sh
|
||||
```
|
||||
4. Connect to MariaDB:
|
||||
|
||||
```bash
|
||||
mysql -u root -p
|
||||
```
|
||||
5. When prompted, enter the password you retrieved from Control Hub.
|
||||
|
||||
## Manage via Bytebase
|
||||
|
||||
Bytebase provides a graphical interface for database management and schema changes.
|
||||
|
||||
### Prerequisites
|
||||
|
||||
:::info MongoDB app required
|
||||
Bytebase uses MongoDB to store its metadata. Install MongoDB before installing Bytebase.
|
||||
:::
|
||||
|
||||
1. Open Market and search for "MongoDB".
|
||||
2. Click **Get**, then **Install**, and wait until the service is running.
|
||||
3. After MongoDB is installed, search for "Bytebase" in Market.
|
||||
4. Click **Get**, then **Install**.
|
||||
|
||||
### First-time setup
|
||||
|
||||
When launching Bytebase for the first time, you must configure an administrator account.
|
||||
|
||||
:::tip
|
||||
Remember these credentials. Only the admin account can create new database instances.
|
||||
:::
|
||||
|
||||
1. Open Bytebase from Launchpad.
|
||||
2. Follow the on-screen prompts to set up your admin account with email and password.
|
||||
|
||||
### Create a MariaDB instance
|
||||
|
||||
1. Log in to Bytebase with your admin account.
|
||||
2. In the left navigation pane, select **Instances**, then click **+ Add Instance**.
|
||||
3. Choose **MariaDB** as the database type.
|
||||
4. Fill in the connection fields using values from Control Hub:
|
||||
- **Host or Socket**: Enter the **Host** address and do not include the port.
|
||||
- **Port**: Keep the default, usually `3306`.
|
||||
- **Username**: Enter the **User** value from Control Hub.
|
||||
- **Password**: Enter the **Password** value from Control Hub.
|
||||
5. Click **Test Connection** to verify connectivity, then click **Create**.
|
||||
|
||||
Creating an instance in Bytebase does not create a new database. Once the instance is created, you can use the corresponding client tools to inspect and manage data.
|
||||
44
docs/developer/develop/mw-view-minio-data.md
Normal file
44
docs/developer/develop/mw-view-minio-data.md
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to install MinIO and manage object storage in Olares using the MinIO Dashboard.
|
||||
---
|
||||
# View MinIO data
|
||||
|
||||
This guide explains how to install MinIO and manage object storage using MinIO Dashboard in Olares.
|
||||
|
||||
## Install MinIO service
|
||||
|
||||
Before using object storage, install the MinIO service from Market.
|
||||
|
||||
1. Open Market from the Launchpad and search for "MinIO".
|
||||
2. Click **Get**, then **Install**, and wait for the installation to complete.
|
||||
|
||||
After installation, MinIO service and its connection details will appear in the Middleware list in Control Hub.
|
||||
|
||||
## Install MinIO Dashboard
|
||||
|
||||
MinIO Dashboard depends on the MinIO service and can only be installed after MinIO is available.
|
||||
|
||||
1. In Market, search for "MinIO Dashboard".
|
||||
2. Click **Get**, then **Install**, and wait for the installation to complete.
|
||||
|
||||
## Get connection information
|
||||
|
||||
Before connecting, obtain MinIO connection details from the Control Hub.
|
||||
|
||||
1. Open Control Hub from Launchpad.
|
||||
2. In the left navigation pane, go to Middleware and select **Minio**.
|
||||
3. On the Details panel, record the following information:
|
||||
- **User**: Used for MinIO Dashboard connection.
|
||||
- **Password**: Used for MinIO Dashboard connection.
|
||||
|
||||
{width=60% style="margin-left:0"}
|
||||
|
||||
## Manage via MinIO Dashboard
|
||||
|
||||
MinIO Dashboard provides a graphical interface for creating buckets, browsing files, and managing permissions.
|
||||
|
||||
1. Open MinIO Dashboard from the Launchpad.
|
||||
2. On the login screen, enter the **User** and **Password** values obtained from Control Hub.
|
||||
|
||||
Upon successful login, you can browse buckets and manage objects directly from the interface.
|
||||
83
docs/developer/develop/mw-view-mongodb-data.md
Normal file
83
docs/developer/develop/mw-view-mongodb-data.md
Normal file
@@ -0,0 +1,83 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to view and manage MongoDB data in Olares using CLI or Bytebase.
|
||||
---
|
||||
# View MongoDB data
|
||||
|
||||
To use MongoDB in Olares, install it from Market first. This guide walks you through the installation steps and shows how to access it from Olares.
|
||||
|
||||
## Install MongoDB service
|
||||
|
||||
Before connecting, install the MongoDB service from Market.
|
||||
1. Open Market from the Launchpad and search for "MongoDB".
|
||||
2. Click **Get**, then **Install**, and wait for the installation to complete.
|
||||
|
||||
Once installed, the service and its connection details will appear in the Middleware list in Control Hub.
|
||||
|
||||
## Get connection information
|
||||
|
||||
Before connecting, obtain MongoDB connection details from the Control Hub.
|
||||
|
||||
1. Open Control Hub from Launchpad.
|
||||
2. In the left navigation pane, go to Middleware and select **Mongodb**.
|
||||
3. On the Details panel, record the following information:
|
||||
- **Mongos**: The host address provided by Control Hub. Used for Bytebase connection.
|
||||
- **User**: Used for Bytebase connection.
|
||||
- **Password**: Used for both CLI and Bytebase.
|
||||
|
||||
{width=60% style="margin-left:0"}
|
||||
|
||||
## Access via CLI
|
||||
|
||||
You can use the Olares terminal to access the MongoDB container.
|
||||
|
||||
1. In Control Hub, open the Olares terminal at the bottom of the left navigation pane.
|
||||
2. Retrieve the Pod name for the middleware:
|
||||
|
||||
```bash
|
||||
kubectl get pods -n os-platform | grep tapr-middleware
|
||||
```
|
||||
3. Record the Pod name that starts with `tapr-middleware`, then enter the container:
|
||||
|
||||
```bash
|
||||
kubectl exec -it -n os-platform <tapr-middleware-pod> -- sh
|
||||
```
|
||||
4. Connect to MongoDB using `mongosh`:
|
||||
|
||||
```bash
|
||||
mongosh "mongodb://root:<your password from controlhub>@mongodb-mongodb-headless.mongodb-middleware:27017"
|
||||
```
|
||||
|
||||
## Manage via Bytebase
|
||||
|
||||
Bytebase provides a graphical interface for database management and schema changes.
|
||||
|
||||
### Install Bytebase
|
||||
|
||||
1. Open Market and search for "Bytebase".
|
||||
2. Click **Get**, then **Install**.
|
||||
|
||||
### First-time setup
|
||||
|
||||
When launching Bytebase for the first time, you must configure an administrator account.
|
||||
|
||||
:::tip
|
||||
Remember these credentials. Only the admin account can create new database instances.
|
||||
:::
|
||||
|
||||
1. Open Bytebase from Launchpad.
|
||||
2. Follow the on-screen prompts to set up your admin account with email and password.
|
||||
|
||||
### Create a MongoDB instance
|
||||
|
||||
1. Log in to Bytebase with your admin account.
|
||||
2. In the left navigation pane, select **Instances**, then click **+ Add Instance**.
|
||||
3. Choose **MongoDB** as the database type.
|
||||
4. Fill in the connection fields using values from Control Hub:
|
||||
- **Host or Socket**: Enter the **Mongos** host address and do not include the port.
|
||||
- **Port**: Keep the default, usually `27017`.
|
||||
- **Username**: Enter the **User** value from Control Hub.
|
||||
- **Password**: Enter the **Password** value from Control Hub.
|
||||
5. Click **Test Connection** to verify connectivity, then click **Create**.
|
||||
|
||||
Creating an instance in Bytebase does not create a new database. Once the instance is created, you can use the corresponding client tools to inspect and manage data.
|
||||
85
docs/developer/develop/mw-view-mysql-data.md
Normal file
85
docs/developer/develop/mw-view-mysql-data.md
Normal file
@@ -0,0 +1,85 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to view and manage MySQL data in Olares using CLI or Bytebase.
|
||||
---
|
||||
# View MySQL data
|
||||
|
||||
To use MySQL in Olares, install it from Market first. This guide walks you through the installation steps and shows how to access it from Olares.
|
||||
|
||||
## Install MySQL service
|
||||
|
||||
Before connecting, install the MySQL service from Market.
|
||||
1. Open Market from the Launchpad and search for "MySQL".
|
||||
2. Click **Get**, then **Install**, and wait for the installation to complete.
|
||||
|
||||
Once installed, the service and its connection details will appear in the Middleware list in Control Hub.
|
||||
|
||||
## Get connection information
|
||||
|
||||
Before connecting, obtain MySQL connection details from the Control Hub.
|
||||
|
||||
1. Open Control Hub from Launchpad.
|
||||
2. In the left navigation pane, go to Middleware and select **Mysql**.
|
||||
3. On the Details panel, record the following information:
|
||||
- **Host**: Used for Bytebase connection.
|
||||
- **User**: Used for Bytebase connection.
|
||||
- **Password**: Used for both CLI and Bytebase.
|
||||
|
||||
{width=60% style="margin-left:0"}
|
||||
|
||||
## Access via CLI
|
||||
|
||||
You can use the Olares terminal to access the MySQL container.
|
||||
|
||||
1. In Control Hub, open the Olares terminal at the bottom of the left navigation pane.
|
||||
2. Enter the MySQL container. The container name is fixed.
|
||||
|
||||
```bash
|
||||
kubectl exec -it -n mysql-middleware mysql-mysql-0 -- sh
|
||||
```
|
||||
3. Connect to MySQL:
|
||||
|
||||
```bash
|
||||
mysql -u root -p
|
||||
```
|
||||
4. When prompted, enter the password you retrieved from Control Hub.
|
||||
|
||||
## Manage via Bytebase
|
||||
|
||||
Bytebase provides a graphical interface for database management and schema changes.
|
||||
|
||||
### Prerequisites
|
||||
|
||||
:::info MongoDB app required
|
||||
Bytebase uses MongoDB to store its metadata. Install MongoDB before installing Bytebase.
|
||||
:::
|
||||
|
||||
1. Open Market and search for "MongoDB".
|
||||
2. Click **Get**, then **Install**, and wait until the service is running.
|
||||
3. After MongoDB is installed, search for "Bytebase" in Market.
|
||||
4. Click **Get**, then **Install**.
|
||||
|
||||
### First-time setup
|
||||
|
||||
When launching Bytebase for the first time, you must configure an administrator account.
|
||||
|
||||
:::tip
|
||||
Remember these credentials. Only the admin account can create new database instances.
|
||||
:::
|
||||
|
||||
1. Open Bytebase from Launchpad.
|
||||
2. Follow the on-screen prompts to set up your admin account with email and password.
|
||||
|
||||
### Create a MySQL instance
|
||||
|
||||
1. Log in to Bytebase with your admin account.
|
||||
2. In the left navigation pane, select **Instances**, then click **+ Add Instance**.
|
||||
3. Choose **MySQL** as the database type.
|
||||
4. Fill in the connection fields using values from Control Hub:
|
||||
- **Host or Socket**: Enter the **Host** address and do not include the port.
|
||||
- **Port**: Keep the default, usually `3306`.
|
||||
- **Username**: Enter the **User** value from Control Hub.
|
||||
- **Password**: Enter the **Password** value from Control Hub.
|
||||
5. Click **Test Connection** to verify connectivity, then click **Create**.
|
||||
|
||||
Creating an instance in Bytebase does not create a new database. Once the instance is created, you can use the corresponding client tools to inspect and manage data.
|
||||
76
docs/developer/develop/mw-view-nats-data.md
Normal file
76
docs/developer/develop/mw-view-nats-data.md
Normal file
@@ -0,0 +1,76 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to subscribe to and publish messages in Olares using NATS CLI, and understand the NATS Subject naming rules and permission model.
|
||||
---
|
||||
# Subscribe and publish messages with NATS
|
||||
|
||||
This guide explains how to use the `nats-box` CLI tool to test NATS message subscription and publication within the Olares cluster, and provides an overview of the NATS Subject naming rules and permission model.
|
||||
|
||||
## Get connection information
|
||||
|
||||
Before connecting, obtain NATS connection details from the Control Hub.
|
||||
|
||||
1. Open Control Hub from Launchpad.
|
||||
2. In the left navigation pane, go to Middleware and select **Nats**.
|
||||
3. On the Subject panel, select a target Subject and record the corresponding information from the same row:
|
||||
- **Subject**: The target message subject.
|
||||
- **User**: The connection username.
|
||||
- **Password**: The connection password.
|
||||
|
||||
{width=60% style="margin-left:0"}
|
||||
|
||||
## Access via CLI
|
||||
|
||||
`nats-box` provides a convenient way to test NATS subscriptions and publications from within the cluster.
|
||||
|
||||
### Deploy `nats-box`
|
||||
|
||||
1. Download the example [`nats-box.yaml`](http://cdn.olares.com/common/nats-box.yaml) file, then upload it to the Olares machine.
|
||||
2. Navigate to the directory containing the YAML file and deploy `nats-box`:
|
||||
```bash
|
||||
kubectl apply -f nats-box.yaml
|
||||
```
|
||||
3. Retrieve the name of the `nats-box` Pod:
|
||||
```bash
|
||||
kubectl get pods -n os-platform | grep nats-box
|
||||
```
|
||||
4. Enter the `nats-box` container:
|
||||
```bash
|
||||
kubectl exec -it -n os-platform <nats-box-pod> -- sh
|
||||
```
|
||||
|
||||
### Subscribe to messages
|
||||
|
||||
Use the Subject, User, and Password obtained from Control Hub to subscribe:
|
||||
```bash
|
||||
nats sub <subject-from-controlhub> --user=<user-from-controlhub> --password=<password-from-controlhub> --all
|
||||
```
|
||||
|
||||
### Publish messages
|
||||
|
||||
Publish a message to the specified Subject:
|
||||
```bash
|
||||
nats pub <subject-from-controlhub> '{"hello":"world"}' --user=<user-from-controlhub> --password=<password-from-controlhub>
|
||||
```
|
||||
|
||||
## Subject naming and permission reference
|
||||
|
||||
This section describes the Subject naming convention and permission model used in Olares.
|
||||
|
||||
### Subject structure
|
||||
|
||||
NATS Subjects use a three-level structure separated by dots (.): `<prefix>.<event>.<olaresId>`.
|
||||
|
||||
| Level | Name | Description |
|
||||
|--|--|--|
|
||||
| 1st |`<prefix>` | Source Identifier. <ul><li>**System services**: Fixed as `os`.</li><li>**Third-party apps**: Uses the corresponding `appId`. </li></ul>|
|
||||
| 2nd | `<event>` | Event type or Domain. <br>Examples: `users`, `groups`, `files`, `notification`. |
|
||||
| 3rd |`<olaresId>` | Represents the Olares ID of the user space. |
|
||||
|
||||
### Permission model
|
||||
Read and write permissions for Subjects vary depending on the application type.
|
||||
|
||||
| App type | Permission scope | Description |
|
||||
|--|--|--|
|
||||
| User space app| Read-only | Can only subscribe to Subjects with a three-level structure containing its own `<olaresId>`. |
|
||||
| System/Cluster app| System-level access | <ul><li>**Subscribe**: Can subscribe to system-level Subjects (e.g., `os.users`, `os.groups`).</li><li>**Write**: Can write to second-level Subjects within its own space.</li><li>**Global Read**: Requires separate approval to subscribe to all second-level Subjects.</li></ul> |
|
||||
188
docs/developer/develop/mw-view-otel-data.md
Normal file
188
docs/developer/develop/mw-view-otel-data.md
Normal file
@@ -0,0 +1,188 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to enable OpenTelemetry auto-instrumentation in an Olares cluster and view trace data in Jaeger.
|
||||
---
|
||||
# View OpenTelemetry data
|
||||
|
||||
This guide walks you through enabling OpenTelemetry auto-instrumentation for services running in an Olares cluster and viewing trace data in Jaeger.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Your target service runs as a Kubernetes workload (Deployment, StatefulSet, or DaemonSet).
|
||||
- You have access to run `kubectl` against the Olares cluster.
|
||||
- You can generate some traffic to the target service. Trace data is generated only when traffic exists.
|
||||
|
||||
## Install Jaeger
|
||||
|
||||
Jaeger is used to visualize trace data. Install Jaeger from Market.
|
||||
|
||||
1. Open Market from Launchpad and search for "Jaeger".
|
||||
2. Click **Get**, then **Install**, and wait for the installation to complete.
|
||||
|
||||
## Apply tracing configuration
|
||||
|
||||
Prepare the tracing backend configuration before enabling auto-instrumentation.
|
||||
|
||||
1. Click [`otc.yaml`](https://cdn.olares.com/common/otc.yaml) to download the configuration file.
|
||||
2. Upload the file to your Olares host.
|
||||
3. In the directory containing the file, apply it:
|
||||
```bash
|
||||
kubectl apply -f otc.yaml
|
||||
```
|
||||
|
||||
## Configure service access
|
||||
|
||||
To enable OpenTelemetry auto-instrumentation, add specific **annotations** to the **Pod template** of your workload.
|
||||
|
||||
Auto-instrumentation is triggered entirely by annotations. No code changes are required.
|
||||
|
||||
:::info Rules for service access configuration
|
||||
- Add annotations under `.spec.template.metadata.annotations` (Pod template, not top-level metadata).
|
||||
- Pods will be recreated (rollout) for injection to take effect.
|
||||
:::
|
||||
|
||||
:::tip Saving changes
|
||||
After you finish editing with `kubectl edit`, save and exit the editor. Kubernetes will roll out updated Pods automatically in most cases.
|
||||
:::
|
||||
|
||||
### BFL service (StatefulSet)
|
||||
|
||||
1. Edit the StatefulSet:
|
||||
```bash
|
||||
kubectl edit sts -n user-space-<olaresid> bfl
|
||||
```
|
||||
2. Under `.spec.template.metadata.annotations`, add:
|
||||
```yaml
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
tier: bfl
|
||||
# Locate here and add annotations
|
||||
annotations:
|
||||
instrumentation.opentelemetry.io/inject-go: "olares-instrumentation"
|
||||
instrumentation.opentelemetry.io/go-container-names: "api"
|
||||
instrumentation.opentelemetry.io/otel-go-auto-target-exe: "/bfl-api"
|
||||
instrumentation.opentelemetry.io/inject-nginx: "olares-instrumentation"
|
||||
instrumentation.opentelemetry.io/inject-nginx-container-names: "ingress"
|
||||
```
|
||||
|
||||
### ChartRepo (Deployment)
|
||||
|
||||
1. Edit the Deployment:
|
||||
```bash
|
||||
kubectl edit deploy -n os-framework chartrepo-deployment
|
||||
```
|
||||
2. Under `.spec.template.metadata.annotations`, add:
|
||||
|
||||
```yaml
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: chartrepo
|
||||
io.bytetrade.app: "true"
|
||||
# Locate here and add annotations
|
||||
annotations:
|
||||
instrumentation.opentelemetry.io/inject-go: "olares-instrumentation"
|
||||
instrumentation.opentelemetry.io/go-container-names: "chartrepo"
|
||||
instrumentation.opentelemetry.io/otel-go-auto-target-exe: "/root/app"
|
||||
```
|
||||
|
||||
### Olares app (Deployment)
|
||||
|
||||
1. Edit the Deployment:
|
||||
```bash
|
||||
kubectl edit deploy -n user-space-<olaresid> olares-app-deployment
|
||||
```
|
||||
2. Under `.spec.template.metadata.annotations`, add:
|
||||
```yaml
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: olares-app
|
||||
io.bytetrade.app: "true"
|
||||
# Locate here and add annotations
|
||||
annotations:
|
||||
instrumentation.opentelemetry.io/inject-nodejs: "olares-instrumentation"
|
||||
instrumentation.opentelemetry.io/nodejs-container-names: "user-service"
|
||||
instrumentation.opentelemetry.io/inject-nginx: "olares-instrumentation"
|
||||
instrumentation.opentelemetry.io/inject-nginx-container-names: "olares-app"
|
||||
```
|
||||
|
||||
### Files (DaemonSet)
|
||||
|
||||
1. Edit the DaemonSet:
|
||||
```bash
|
||||
kubectl edit ds -n os-framework files
|
||||
```
|
||||
2. Under `.spec.template.metadata.annotations`, add:
|
||||
```yaml
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: files
|
||||
# Locate here and add annotations
|
||||
annotations:
|
||||
instrumentation.opentelemetry.io/inject-nginx: "olares-instrumentation"
|
||||
instrumentation.opentelemetry.io/inject-nginx-container-names: "nginx"
|
||||
instrumentation.opentelemetry.io/inject-go: "olares-instrumentation"
|
||||
instrumentation.opentelemetry.io/go-container-names: "gateway,files,uploader"
|
||||
instrumentation.opentelemetry.io/otel-go-auto-target-exe: "/filebrowser"
|
||||
```
|
||||
|
||||
### Market (Deployment)
|
||||
|
||||
1. Edit the Deployment:
|
||||
```bash
|
||||
kubectl edit deploy -n os-framework market-deployment
|
||||
```
|
||||
2. Under `.spec.template.metadata.annotations`, add:
|
||||
```yaml
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: appstore
|
||||
io.bytetrade.app: "true"
|
||||
# Locate here and add annotations
|
||||
annotations:
|
||||
instrumentation.opentelemetry.io/inject-go: "olares-instrumentation"
|
||||
instrumentation.opentelemetry.io/go-container-names: "appstore-backend"
|
||||
instrumentation.opentelemetry.io/otel-go-auto-target-exe: "/opt/app/market"
|
||||
```
|
||||
|
||||
### System server (Deployment)
|
||||
|
||||
1. Edit the Deployment:
|
||||
```bash
|
||||
kubectl edit deploy -n user-system-<olaresid> system-server
|
||||
```
|
||||
2. Under `.spec.template.metadata.annotations`, add:
|
||||
```yaml
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: systemserver
|
||||
# Locate here and add annotations
|
||||
annotations:
|
||||
instrumentation.opentelemetry.io/go-container-names: "system-server"
|
||||
instrumentation.opentelemetry.io/inject-go: "olares-instrumentation:"
|
||||
instrumentation.opentelemetry.io/otel-go-auto-target-exe: "/system-server"
|
||||
```
|
||||
|
||||
## View traces in Jaeger
|
||||
|
||||
:::info Traces may appear with a delay
|
||||
After rollout, traces may take 1–5 minutes to appear. Make sure the service receives traffic.
|
||||
:::
|
||||
|
||||
Generate traffic to the service.
|
||||
|
||||
1. Open Jaeger from Launchpad.
|
||||
2. Select the service name from the **Service** dropdown.
|
||||
3. Click **Find Traces** to view trace data.
|
||||

|
||||
77
docs/developer/develop/mw-view-pg-data.md
Normal file
77
docs/developer/develop/mw-view-pg-data.md
Normal file
@@ -0,0 +1,77 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to view and manage PostgreSQL data in Olares using CLI or Bytebase.
|
||||
---
|
||||
# View PostgreSQL data
|
||||
|
||||
PostgreSQL is available by default in Olares. This guide walks you through accessing it from Olares.
|
||||
|
||||
## Get connection information
|
||||
|
||||
Before connecting, obtain PostgreSQL connection details from the Control Hub.
|
||||
|
||||
1. Open Control Hub from Launchpad.
|
||||
2. In the left navigation pane, go to Middleware and select **Postgres**.
|
||||
3. On the Details panel, record the following information:
|
||||
- **Host**: Used for Bytebase connection.
|
||||
- **User**: Used for Bytebase connection.
|
||||
- **Password**: Used for both CLI and Bytebase.
|
||||
|
||||
{width=60% style="margin-left:0"}
|
||||
|
||||
## Access via CLI
|
||||
|
||||
You can use the Olares terminal to access the database container.
|
||||
|
||||
1. In Control Hub, open the Olares terminal at the bottom of the left navigation pane.
|
||||
2. Enter the PostgreSQL container. The container name is fixed.
|
||||
|
||||
```bash
|
||||
kubectl exec -it -n os-platform citus-0 -- sh
|
||||
```
|
||||
3. Connect to the PostgreSQL database:
|
||||
|
||||
```bash
|
||||
psql -h citus-0 -U olares
|
||||
```
|
||||
4. When prompted, enter the password you retrieved from Control Hub.
|
||||
|
||||
## Manage via Bytebase
|
||||
|
||||
Bytebase provides a graphical interface for database management and schema changes.
|
||||
|
||||
### Prerequisites
|
||||
|
||||
:::info MongoDB app required
|
||||
Bytebase uses MongoDB to store its metadata. Install MongoDB before installing Bytebase.
|
||||
:::
|
||||
|
||||
1. Open Market and search for "MongoDB".
|
||||
2. Click **Get**, then **Install**, and wait until the service is running.
|
||||
3. After MongoDB is installed, search for "Bytebase" in Market.
|
||||
4. Click **Get**, then **Install**.
|
||||
|
||||
### First-time setup
|
||||
|
||||
When launching Bytebase for the first time, you must configure an administrator account.
|
||||
|
||||
:::tip
|
||||
Remember these credentials. Only the admin account can create new database instances.
|
||||
:::
|
||||
|
||||
1. Open Bytebase from Launchpad.
|
||||
2. Follow the on-screen prompts to set up your admin account with email and password.
|
||||
|
||||
### Create a PostgreSQL instance
|
||||
|
||||
1. Log in to Bytebase with your admin account.
|
||||
2. In the left navigation pane, select **Instances**, then click **+ Add Instance**.
|
||||
3. Choose **PostgreSQL** as the database type.
|
||||
4. Fill in the connection fields using values from Control Hub:
|
||||
- **Host or Socket**: Enter the **Host** address and do not include the port.
|
||||
- **Port**: Keep the default, usually `5432`.
|
||||
- **Username**: Enter the **User** value from Control Hub.
|
||||
- **Password**: Enter the **Password** value from Control Hub.
|
||||
5. Click **Test Connection** to verify connectivity, then click **Create**.
|
||||
|
||||
Creating an instance in Bytebase does not create a new database. Once the instance is created, you can use the corresponding client tools to inspect and manage data.
|
||||
44
docs/developer/develop/mw-view-rabbitmq-data.md
Normal file
44
docs/developer/develop/mw-view-rabbitmq-data.md
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to install RabbitMQ and manage RabbitMQ resources in Olares using RabbitMQ Dashboard.
|
||||
---
|
||||
# View RabbitMQ data
|
||||
|
||||
This guide explains how to install RabbitMQ and manage data using RabbitMQ Dashboard in Olares.
|
||||
|
||||
## Install RabbitMQ service
|
||||
|
||||
Before using RabbitMQ, install the RabbitMQ service from Market.
|
||||
|
||||
1. Open Market from the Launchpad and search for "RabbitMQ".
|
||||
2. Click **Get**, then **Install**, and wait for the installation to complete.
|
||||
|
||||
After installation, RabbitMQ service and its connection details will appear in the Middleware list in Control Hub.
|
||||
|
||||
## Install RabbitMQ Dashboard
|
||||
|
||||
RabbitMQ Dashboard depends on the RabbitMQ service and can only be installed after RabbitMQ is available.
|
||||
|
||||
1. In Market, search for "RabbitMQ Dashboard".
|
||||
2. Click **Get**, then **Install**, and wait for the installation to complete.
|
||||
|
||||
## Get connection information
|
||||
|
||||
Before connecting, obtain RabbitMQ connection details from the Control Hub.
|
||||
|
||||
1. Open Control Hub from Launchpad.
|
||||
2. In the left navigation pane, go to Middleware and select **Rabbitmq**.
|
||||
3. On the Details panel, record the following information:
|
||||
- **User**: Used for RabbitMQ Dashboard connection.
|
||||
- **Password**: Used for RabbitMQ Dashboard connection.
|
||||
|
||||
{width=60% style="margin-left:0"}
|
||||
|
||||
## Manage via RabbitMQ Dashboard
|
||||
|
||||
RabbitMQ Dashboard provides a graphical interface for viewing and managing RabbitMQ resources.
|
||||
|
||||
1. Open RabbitMQ Dashboard from the Launchpad.
|
||||
2. On the login screen, enter the **User** and **Password** values obtained from Control Hub.
|
||||
|
||||
Upon successful login, access the management interface to view and manage RabbitMQ resources.
|
||||
75
docs/developer/develop/mw-view-redis-data.md
Normal file
75
docs/developer/develop/mw-view-redis-data.md
Normal file
@@ -0,0 +1,75 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to view and manage Redis data in Olares using CLI or Bytebase.
|
||||
---
|
||||
# View Redis data
|
||||
|
||||
Redis is available by default in Olares. This guide walks you through accessing it from Olares.
|
||||
|
||||
## Get connection information
|
||||
|
||||
Before connecting, obtain Redis connection details from the Control Hub.
|
||||
|
||||
1. Open Control Hub from Launchpad.
|
||||
2. In the left navigation pane, go to Middleware and select **Redis**.
|
||||
3. On the Details panel, record the following information:
|
||||
- **Host**: Used for Bytebase connection.
|
||||
- **Password**: Used for both CLI and Bytebase.
|
||||
|
||||
{width=60% style="margin-left:0"}
|
||||
|
||||
## Access via CLI
|
||||
|
||||
You can use the Olares terminal to access the database container.
|
||||
|
||||
1. In Control Hub, open the Olares terminal at the bottom of the left navigation pane.
|
||||
2. Enter the Redis container. The container name is fixed.
|
||||
|
||||
```bash
|
||||
kubectl exec -it -n os-platform kvrocks-0 -- sh
|
||||
```
|
||||
3. Connect to the Redis database:
|
||||
|
||||
```bash
|
||||
redis-cli -p 6666 -a <your password from control-hub>
|
||||
```
|
||||
|
||||
## Manage via Bytebase
|
||||
|
||||
Bytebase provides a graphical interface for database management and schema changes.
|
||||
|
||||
### Prerequisites
|
||||
|
||||
:::info MongoDB app required
|
||||
Bytebase uses MongoDB to store its metadata. Install MongoDB before installing Bytebase.
|
||||
:::
|
||||
|
||||
1. Open Market and search for "MongoDB".
|
||||
2. Click **Get**, then **Install**, and wait until the service is running.
|
||||
3. After MongoDB is installed, search for "Bytebase" in Market.
|
||||
4. Click **Get**, then **Install**.
|
||||
|
||||
### First-time setup
|
||||
|
||||
When launching Bytebase for the first time, you must configure an administrator account.
|
||||
|
||||
:::tip
|
||||
Remember these credentials. Only the admin account can create new database instances.
|
||||
:::
|
||||
|
||||
1. Open Bytebase from Launchpad.
|
||||
2. Follow the on-screen prompts to set up your admin account with email and password.
|
||||
|
||||
### Create a Redis instance
|
||||
|
||||
1. Log in to Bytebase with your admin account.
|
||||
2. In the left navigation pane, select **Instances**, then click **+ Add Instance**.
|
||||
3. Choose **Redis** as the database type.
|
||||
4. Fill in the connection fields using values from Control Hub:
|
||||
- **Host or Socket**: Enter the **Host** address and do not include the port.
|
||||
- **Port**: Keep the default, usually `6379`.
|
||||
- **Username**: Leave it empty.
|
||||
- **Password**: Enter the **Password** value from Control Hub.
|
||||
5. Click **Test Connection** to verify connectivity, then click **Create**.
|
||||
|
||||
Creating an instance in Bytebase does not create a new database. Once the instance is created, you can use the corresponding client tools to inspect and manage data.
|
||||
234
docs/developer/develop/paid-apps.md
Normal file
234
docs/developer/develop/paid-apps.md
Normal file
@@ -0,0 +1,234 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to publish paid apps in Olares Market and manage sales using the Merchant app.
|
||||
---
|
||||
# Publish paid applications
|
||||
|
||||
Starting from Olares v1.12.3, Olares Market supports paid application distribution. To sell apps, developers must register their Olares ID (DID) on the blockchain and install the Merchant app to manage licenses, orders, and payout records.
|
||||
|
||||
:::info Closed Beta
|
||||
This feature is currently in Closed Beta. To publish paid apps, please contact us at [hi@olares.com](mailto:hi@olares.com) to apply for access.
|
||||
|
||||
Currently, only paid applications (pay-to-download) are supported. In-app purchases and subscriptions are under development.
|
||||
:::
|
||||
|
||||
This guide explains how to publish paid applications and configure Merchant.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before starting, ensure that you have:
|
||||
- Olares ID: A valid Olares ID (e.g., `alice123@olares.com`).
|
||||
- Olares OS: A working Olares host running v1.12.3 or later.
|
||||
- Developer access: Approved developer status (apply via email).
|
||||
- Environment: A local computer with Node.js installed.
|
||||
|
||||
## Set up a wallet and fund gas fees
|
||||
|
||||
To enable payments, you must register your Olares ID (DID) on the blockchain. This is an on-chain interaction and requires a small Gas Fee.
|
||||
|
||||
### Set up a crypto wallet
|
||||
|
||||
This guide uses MetaMask as an example. You may use other wallet apps.
|
||||
|
||||
1. Open LarePass on your phone.
|
||||
2. Go to **Settings** > **Safety** > **Mnemonic phrase** to view your mnemonic phrase.
|
||||
:::warning Security alert
|
||||
Your mnemonic phrase is a high-privilege credential for your account. Never share it or upload it to a public code repository. Perform the following steps in a secure local environment.
|
||||
:::
|
||||
3. Install the MetaMask extension in your browser.
|
||||
4. In MetaMask, select **Add wallet** > **Import a wallet**, and enter your Olares mnemonic phrase.
|
||||
|
||||
### Fund your wallet
|
||||
|
||||
Registration consumes a small amount of ETH on the Optimism network as gas fees.
|
||||
|
||||
1. In MetaMask, switch to **Optimism (OP Mainnet)**.
|
||||
2. Copy your wallet address. It should start with `0x`.
|
||||
{width=50%}
|
||||
3. Send a small amount of ETH to this address. At least 0.0005 ETH is recommended for subsequent gas fees.
|
||||
|
||||
## Generate and register RSA keys
|
||||
|
||||
To ensure transaction security and license uniqueness, generate an RSA key pair and register the public key on-chain under your Olares ID.
|
||||
|
||||
### Generate an RSA key pair
|
||||
|
||||
1. Install the `did-cli` tool:
|
||||
```bash
|
||||
npm install -g @beclab/olaresid
|
||||
```
|
||||
2. Generate a default 2048-bit RSA key pair:
|
||||
```bash
|
||||
did-cli rsa generate
|
||||
```
|
||||
When the command succeeds, you should see output similar to the following:
|
||||
{width=60%}
|
||||
3. View the generated keys:
|
||||
```bash
|
||||
cat ./rsa-public.pem
|
||||
cat ./rsa-private.pem
|
||||
```
|
||||
:::info Security alert
|
||||
Keep `rsa-private.pem` safe. You will need it later when configuring the Merchant app.
|
||||
:::
|
||||
### Register the RSA public key
|
||||
|
||||
Bind the generated public key to your Olares ID. It requires signing with your mnemonic phrase and will consume gas.
|
||||
|
||||
1. Export your mnemonic as a temporary environment variable and wrap the value in double quotes:
|
||||
```bash
|
||||
export PRIVATE_KEY_OR_MNEMONIC="xx xxx xx ..."
|
||||
echo $PRIVATE_KEY_OR_MNEMONIC
|
||||
```
|
||||
2. Check whether your Olares ID already has an RSA public key:
|
||||
```bash
|
||||
did-cli rsa get alice123@olares.com --network mainnet
|
||||
```
|
||||
If you see the following message, you can continue:
|
||||
|
||||
```text
|
||||
❌ No RSA public key set for this domain
|
||||
```
|
||||
3. Verify the owner wallet address and make sure it matches the wallet you funded previously:
|
||||
|
||||
```bash
|
||||
did-cli owner alice123@olares.com --network mainnet
|
||||
```
|
||||
|
||||
Example output:
|
||||
|
||||
```text
|
||||
👤 Owner: 0x3.....
|
||||
```
|
||||
4. Register the RSA public key on-chain:
|
||||
|
||||
```bash
|
||||
did-cli rsa set alice123@olares.com ./rsa-public.pem --network mainnet
|
||||
```
|
||||
5. Verify registration:
|
||||
```bash
|
||||
did-cli rsa get alice123@olares.com --network mainnet
|
||||
```
|
||||
6. Clear the mnemonic phrase from your environment:
|
||||
```bash
|
||||
unset PRIVATE_KEY_OR_MNEMONIC
|
||||
echo $PRIVATE_KEY_OR_MNEMONIC
|
||||
```
|
||||
If nothing is printed, it is cleared.
|
||||
|
||||
## Configure your app (OAC)
|
||||
|
||||
A paid app is almost the same as a free app. You only need two additional items:
|
||||
- Add a `price.yaml` file at the chart root (OAC root).
|
||||
- Expose `VERIFIABLE_CREDENTIAL` to the app so it can read the user's purchase credential.
|
||||
|
||||
### Add pricing configuration
|
||||
Create `price.yaml` at the chart root:
|
||||
```yaml
|
||||
# Developer's Olares instance address
|
||||
developer: alice123.olares.com
|
||||
|
||||
# Paid app
|
||||
paid:
|
||||
# product_id format: repoName-appName-productId
|
||||
product_id: apps-appname-paid
|
||||
price:
|
||||
- chain: optimism | eth
|
||||
token_symbol: USDC | USDT
|
||||
receive_wallet: "0xcbbcd55960eC62F1dCFBac17C2a2341E4f0e81c8"
|
||||
product_price: 100000
|
||||
description:
|
||||
- lang: en
|
||||
title: Purchase item title
|
||||
description: Purchase item description
|
||||
icon: https://item.icon.url
|
||||
|
||||
# In-app purchase or subscription items (not implemented yet)
|
||||
products: []
|
||||
```
|
||||
### Enable license checks
|
||||
Your app can read the user's purchase credential via an injected environment variable.
|
||||
|
||||
Add the env var in the pod template where you need purchase enforcement:
|
||||
```yaml
|
||||
- name: VERIFIABLE_CREDENTIAL
|
||||
value: "{{ .Values.olaresEnv.VERIFIABLE_CREDENTIAL }}"
|
||||
```
|
||||
|
||||
Declare the variable in `OlaresManifest.yaml`:
|
||||
```yaml
|
||||
envs:
|
||||
- envName: VERIFIABLE_CREDENTIAL
|
||||
required: true
|
||||
type: string
|
||||
editable: false
|
||||
applyOnChange: true
|
||||
```
|
||||
For detailed environment variable behavior, see [environment variables in `OlaresManifest.yaml`](/developer/develop/package/manifest.md#envs).
|
||||
|
||||
### Submit your app
|
||||
|
||||
Follow the [standard submission flow](/developer/develop/submit-apps.md) to create a Pull Request.
|
||||
|
||||
## Install and set up Merchant
|
||||
|
||||
The Merchant app is your checkout and management panel. It allows you to:
|
||||
- View developer info (product list, RSA keys, payout wallet, orders).
|
||||
- Issue product licenses.
|
||||
- Verify licenses when apps start.
|
||||
|
||||
:::info Keep Merchant online
|
||||
Purchase requests require real-time callbacks to your Olares host for verification. Keep the host running Merchant online 24/7 with a stable, fast network connection. Host offline or unstable network may directly prevent users from completing purchases.
|
||||
:::
|
||||
|
||||
### Install Merchant
|
||||
|
||||
1. Open Olares Market and search for "Merchant".
|
||||
2. Click **Get**, then **Install**.
|
||||
|
||||
### Initial setup
|
||||
|
||||
After installation completes, open Merchant from Launchpad.
|
||||
1. On the login screen, enter your developer Olares ID and click **Import Developer**.
|
||||
2. Merchant automatically loads your on-chain product info and RSA public key.
|
||||
3. Open your private key file:
|
||||
```bash
|
||||
cat ./rsa-private.pem
|
||||
```
|
||||
Copy the full content, paste it into the Merchant dialog, then click **Import private key**.
|
||||
|
||||
## Manage sales in Merchant
|
||||
|
||||
After setup, Merchant opens the Home dashboard, where you can monitor identity status, key configuration, wallet assets, and transaction history.
|
||||
|
||||
:::info
|
||||
The Store and Buy App pages in the left navigation are currently for debugging/testing only. You can ignore them in the current publishing workflow.
|
||||
:::
|
||||
|
||||
### Sync status
|
||||
|
||||
The status indicator above the transaction list supports manual refresh:
|
||||
- `Synced`: Up to date.
|
||||
- `Syncing`: Pulling data from chain.
|
||||
- `Not synced`: Not synchronized.
|
||||
- `Error`: Sync failed. Check network connectivity.
|
||||
|
||||
### Transaction fields
|
||||
|
||||
| Field | Description|
|
||||
|--|--|
|
||||
| Wallet | Developer wallet address managed by Merchant|
|
||||
| Type | Transaction type:<ul><li>`Incoming`: revenue as receiver</li><li>`Outgoing`: payment sent as sender</li></ul>|
|
||||
| Tx Hash | The hash of the transaction record, a unique identifier for the on-chain<br> transaction.|
|
||||
| From/To | Counterparty address, shown based on the transaction type:<ul><li>`Incoming`: sender address</li><li>`Outgoing`: recipient address </li></ul> |
|
||||
| Contract | Token contract address, indicating the asset type and source involved in <br>the transaction.<ul><li>**Native**: native ETH transfer with no contract interaction </li><li>**[Contract address]**: ERC-20 token smart contract address</li></ul> |
|
||||
| Amount | Transaction amount, denominated in the token specified by the Contract.|
|
||||
| Time | The timestamp when the transaction is confirmed and recorded on-chain.|
|
||||
| Product | <ul><li>**Product ID**: a transaction related to an Olares app purchase</li><li>**-**: a regular transfer not associated with app sales</li></ul> |
|
||||
|
||||
### Update developer information
|
||||
|
||||
To change RSA keys, product info, pricing, or receiving wallet:
|
||||
1. [Regenerate RSA keys](#generate-and-register-rsa-keys) or [update your app configurations](#configure-your-app-oac), then submit a PR with updated information.
|
||||
2. Wait for the PR to be reviewed and merged.
|
||||
3. After the PR is merged, open Merchant from Launchpad. When prompted, click **Update / Re-install** to apply the latest configuration. Changes take effect immediately.
|
||||
46
docs/developer/develop/promote-apps.md
Normal file
46
docs/developer/develop/promote-apps.md
Normal file
@@ -0,0 +1,46 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Optimize your app listing with images and icons in Olares Market.
|
||||
---
|
||||
# Promote your apps
|
||||
|
||||
High-quality visuals help your application stand out in Olares Market. This guide covers asset specifications and how to generate image URLs for your app listing.
|
||||
|
||||
## Application assets
|
||||
|
||||
Configure these assets in your [`OlaresManifest.yaml`](/developer/develop/package/manifest.md).
|
||||
|
||||
### Application icon
|
||||
|
||||
**Required**. Displayed on the Launchpad and in the Market list.
|
||||
- **Location**: Configure the icon URL in the icon field under `metadata` or `entrances` in `OlaresManifest.yaml`.
|
||||
- **Format**: PNG or WEBP
|
||||
- **Dimensions**: 256 × 256 pixels
|
||||
- **Size**: No larger than 512 KB
|
||||
|
||||
### Promote images
|
||||
|
||||
**Recommended**. Displayed on the application details page. We recommend uploading at least 2 images.
|
||||
- **Location**: Configure image URLs in the `promoteImage` field under `spec` in `OlaresManifest.yaml`.
|
||||
- **Format**: JPEG, PNG, or WEBP
|
||||
- **Dimensions**: 1440 × 900 pixels
|
||||
- **Size**: No larger than 8 MB per image
|
||||
- **Limit**: Up to 8 images
|
||||
|
||||
### Featured image
|
||||
|
||||
**Optional**. Used for recommendations in Olares Market or displayed on the "My Olares" section.
|
||||
- **Location**: Configure the image URL in the `featuredImage` field under `spec` in `OlaresManifest.yaml`.
|
||||
- **Format**: JPEG, PNG, or WEBP
|
||||
- **Dimensions**: 1440 × 900 pixels
|
||||
- **Size**: No larger than 8 MB
|
||||
- **Limit**: One image only
|
||||
|
||||
### Image hosting service
|
||||
|
||||
You can also host images on your own server or use the Olares image hosting service:
|
||||
|
||||
1. Open [Olares Market image hosting](https://imghost.olares.com/).
|
||||
2. Select the image type: **app icon**, **featured image** or **promotional image**.
|
||||
3. Upload and preview the image.
|
||||
4. Copy the generated URL and paste it into your `OlaresManifest.yaml`.
|
||||
89
docs/developer/develop/submit-apps.md
Normal file
89
docs/developer/develop/submit-apps.md
Normal file
@@ -0,0 +1,89 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to submit applications in Olares Market.
|
||||
---
|
||||
# Submit applications
|
||||
|
||||
This guide explains how to submit a new Olares application to the default index by creating a Pull Request (PR) against `beclab/apps:main`.
|
||||
|
||||
Terminus-Gitbot validates your PR based on the title, file scope, and ownership rules, and automatically close invalid PRs.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before submitting, make sure your application has been fully tested on Olares.
|
||||
|
||||
Recommended workflow:
|
||||
|
||||
- Use [Studio](/developer/develop/tutorial/develop.md) development container to test and debug in a real online environment.
|
||||
- [Install the app via Olares Market](/developer/develop/tutorial/package-upload.md) to test installation and upgrades as a user would.
|
||||
|
||||
## Submit a new application
|
||||
|
||||
### Step 1: Add your OAC to your fork
|
||||
|
||||
1. Fork the [official repository](https://github.com/beclab/apps) `beclab/apps`.
|
||||
2. In your fork, add your [Olares Application Chart (OAC)](/developer/develop/package/chart.md) under a new folder.
|
||||
3. Create an [`owners` file](/developer/develop/distribute-index.md#before-you-begin) (no extension) in your OAC root directory. Ensure your GitHub username is included.
|
||||
|
||||
:::info Folder naming convention
|
||||
The folder name is your OAC directory name (chart folder name). Terminus-Gitbot uses it in the PR title and for file-scope validation. It must:
|
||||
- Contain only lowercase letters and digits.
|
||||
- Not include hyphens (`-`).
|
||||
- Be no longer than 30 characters.
|
||||
:::
|
||||
|
||||
### Step 2: Create a draft PR
|
||||
|
||||
Create a draft PR targeting the `beclab/apps:main` branch.
|
||||
|
||||
Terminus-Gitbot checks both your PR metadata (such as the title and file scope) and your chart content (such as required files in the OAC root). Make sure you have completed Step 1 before proceeding.
|
||||
|
||||
To pass the Terminus-Gitbot automated checks, your PR must strictly follow these rules:
|
||||
1. **Title format**: The title must imply your intent and follow this exact format:
|
||||
```text
|
||||
[PR type][Chart folder name][Version] Title content
|
||||
```
|
||||
|
||||
| Field | Description|
|
||||
|--|--|
|
||||
| PR type | <ul><li>**NEW**: Submit a new application. </li><li>**UPDATE**: Update an already successfully merged application.</li><li>**REMOVE**: Remove an already successfully merged application.<br></li><li>**SUSPEND**: Suspend an already successfully merged application from<br> distribution through the application store.</li></ul> |
|
||||
| Chart folder name | The directory name of your OAC. Must match the naming convention. |
|
||||
| Version | Chart version of your app. It must match:<ul><li>`version` in `Chart.yaml`</li><li>`version` under `metadata` in `OlaresManifest.yaml`</li></ul> |
|
||||
| Title content | A brief summary of your PR. |
|
||||
|
||||
2. **File scope**: The PR only adds or modifies content under the chart folder name declared in the title.
|
||||
3. **No duplicate PR**: Ensure no other Open or Draft PR exists for this chart folder.
|
||||
4. **Clean structure (For new apps)**:
|
||||
- The folder name does not already exist in `beclab/apps:main`.
|
||||
- Your chart folder does not contain [control files](/developer/develop/manage-apps.md#control-files) (`.suspend` or `.remove`).
|
||||
|
||||
:::tip Draft PR is editable
|
||||
During the Draft stage, you can continue pushing commits to adjust your files.
|
||||
:::
|
||||
|
||||
When everything is ready, click **Ready for review**.
|
||||
|
||||
### Step 3: Wait for Terminus-Gitbot
|
||||
|
||||
After you submit, Terminus-Gitbot automatically validates the PR.
|
||||
|
||||
- If all checks pass, Terminus-Gitbot automatically merges the PR into `beclab/apps:main`.
|
||||
- After a short delay, your application appears in Olares Market.
|
||||
|
||||
## Track PR status
|
||||
|
||||
### Type labels
|
||||
|
||||
When your PR is labeled `NEW`, `UPDATE`, `REMOVE`, or `SUSPEND`, it indicates the PR type in the title is recognized.
|
||||
|
||||
:::warning No type change
|
||||
- Do not change the PR type after it is labeled.
|
||||
- If the type is wrong, close the PR and create a new PR.
|
||||
:::
|
||||
|
||||
### Status labels
|
||||
|
||||
- `waiting to submit`: Issues found. You may continue pushing commits. Terminus-Gitbot will re-check and update the status.
|
||||
- `waiting to merge`: All checks passed and the PR is queued for auto-merge. Do not push new commits or manually intervene.
|
||||
- `merged`: The PR has been merged into `beclab/apps:main`.
|
||||
- `closed`: The PR is invalid or contains unrecoverable issues. Do not reopen it. Fix the issues and submit a new PR.
|
||||
@@ -1,123 +1,81 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Understand how application distribution works in Olares.
|
||||
---
|
||||
# Distribute Olares applications
|
||||
|
||||
# Submit Application
|
||||
Distributing applications on Olares is based on open standards and automated validation.
|
||||
If your application is already packaged as an Olares Application Chart (OAC), you can publish it to Olares Market and make it available to users with minimal friction.
|
||||
|
||||
## Submitting Your Application
|
||||
This guide walks you through the distribution lifecycle of an Olares application, from understanding how Market indexing works to publishing, maintaining, and promoting your app.
|
||||
|
||||
**Brief Overview**
|
||||
## Before you begin
|
||||
|
||||
1. Test your application on Olares, create the Olares Application Chart according to [guideline](../package/chart.md).
|
||||
2. Fork the official [application repository of Olares Market](https://github.com/beclab/apps). Add your application's chart. Create a **PR** to `beclab/apps:main`.
|
||||
3. Wait for **GitBot** to check your PR. If needed, modify PR until it passes.
|
||||
4. Once the PR is merged, your application is ready to launch.
|
||||
Before distributing your application, it helps to understand a few core concepts:
|
||||
|
||||
- **[Olares Application Chart (OAC)](/developer/develop/package/chart.md)**
|
||||
|
||||
The packaging format used to describe an Olares application, including metadata, ownership, versioning, and installation configuration.
|
||||
|
||||
- **Application index**
|
||||
|
||||
A service that provides application metadata to Olares Market. Olares includes a default public index, and developers can deploy their own.
|
||||
|
||||
- **Terminus-Gitbot**
|
||||
|
||||
The automated validation system that checks application submissions and enforces distribution rules.
|
||||
|
||||
## App distribution workflow
|
||||
|
||||
### 1. Prepare your app package
|
||||
|
||||
Before an app can be distributed, it must be packaged as an **Olares Application Chart (OAC)**.
|
||||
|
||||
At this stage, developers typically:
|
||||
- Develop and test the app on an Olares host.
|
||||
- Verify installation and upgrade behavior.
|
||||
- Finalize chart metadata and structure.
|
||||
|
||||
For details on packaging and chart structure, see:
|
||||
- [Olares Application Chart (OAC)](/developer/develop/package/chart.md)
|
||||
|
||||
### 2. Submit the app to the default index
|
||||
|
||||
Olares Market indexes applications from Git repositories.
|
||||
To publish an app to the default public index, developers submit their OAC by opening a Pull Request (PR) to the official repository.
|
||||
|
||||
During submission:
|
||||
- The PR title declares the action type.
|
||||
- GitBot validates file scope, ownership, and version rules.
|
||||
- Valid PRs are merged automatically without manual review.
|
||||
|
||||
### 3. Automated validation and indexing
|
||||
|
||||
After a PR is submitted, **Terminus-Gitbot** performs automated checks to ensure the submission follows distribution rules.
|
||||
|
||||
If all checks pass, the PR is merged automatically.
|
||||
After a short delay, the application becomes visible in Olares Market.
|
||||
|
||||
### 4. Manage the application lifecycle
|
||||
|
||||
After an application is published, developers continue to manage its lifecycle through Pull Requests.
|
||||
|
||||
Lifecycle actions include:
|
||||
- Releasing new versions.
|
||||
- Temporarily suspending distribution.
|
||||
- Permanently removing an application from the Market.
|
||||
|
||||
These actions are controlled using PR types and special control files in the OAC.
|
||||
|
||||
|
||||
### 1. Develop and test your application
|
||||
### 5. Optimize your Market listing
|
||||
|
||||
Before submitting an application, please ensure that it has been thoroughly tested on your Olares.
|
||||
- Use Studio's dev-container to test and debug your application in a real online environment. [Learn more about Studio](../tutorial/develop.md).
|
||||
- Use the [custom installation](../tutorial/package-upload.md) in the Market app for user testing.
|
||||
Once published, you can improve how your app is presented in Olares Market by adding icons, screenshots, and featured images.
|
||||
|
||||
### 2. Submit an application
|
||||
The submission of the application needs to be completed through a **Pull Request**. Here's how:
|
||||
- Fork the official [application repository of Olares Market](https://github.com/beclab/apps) and add your application's chart in your forked repository.
|
||||
- Create a `Draft PR` pointing to `beclab/apps:main`.
|
||||
- Please edit your PR title and text according to the template.
|
||||
- **PR Title** must in this format: [PR Type][FolderName][version]Title Content
|
||||
- `PR Type` includes:
|
||||
- NEW: Submit a new application
|
||||
- UPDATE: Update an already successfully merged application
|
||||
- REMOVE: Remove an already successfully merged application
|
||||
- SUSPEND: Suspend an already successfully merged application from distribution through the application store
|
||||
- `FolderName` is your Olares Application Chart name. It must adhere to the naming requirements in [chart specification](../package/chart.md).
|
||||
- `version` refers to your application chart's `Chart Version`, which needs to be consistent with the `version` field in `Chart.yaml` and metadata section of `OlaresManifest.yaml`
|
||||
- To prevent your PR from being incorrectly parsed or closed, please adhere to the following rules:
|
||||
- Your PR title must contain only one `PR Type`, `FolderName`, and `version`.
|
||||
- Your `PR Type` must be one of the predefined types.
|
||||
- A PR should only add or modify content under the `FolderName` declared in the PR title.
|
||||
- Only one Open PR or Draft PR can exist at a time with the same `FolderName`.
|
||||
- You must be one of the owners of the folder you wish to modify. Owners are listed in the `owners` file within the chart. If you're submitting a new application, your GitHub username should be included in the `owners` file.
|
||||
|
||||
- During the Draft PR phase, you can continuously adjust your PR content and add new commits. Once everything is ready, click on the **'Ready for review'** button to submit the PR and call on **GitBot** to check.
|
||||
|
||||
:::info NOTE
|
||||
The title and content of the PR are crucial for **GitBot**. Please adhere to the template specifications when filling them out. **GitBot** may automatically close any invalid PRs.
|
||||
:::
|
||||
### 6. (Optional) Publish paid applications
|
||||
|
||||
### 3. Track your PR status
|
||||
- When your PR is labeled with `PR type`, it indicates that your PR title is valid. Please **do not modify the `PR Type` afterwards.** If it doesn't reflect your intentions, simply close it and create a new one.
|
||||
Olares Market also supports paid application distribution.
|
||||
Paid apps require additional identity registration, pricing configuration, and license management.
|
||||
|
||||
- You can track the progress of your PR through the status tags:
|
||||
- `waiting to submit`: your PR has an issue and requires further modification before merging.
|
||||
- `closed`: your PR is invalid or contains uncorrectable errors.
|
||||
- `waiting to merge`: Everything is progressing smoothly. Your PR has passed the check and is now awaiting auto-merge by the **GitBot**.
|
||||
- `merged`: your PR has been automatically merged into the `beclab/apps:main`.
|
||||
|
||||
- If **GitBot** automatically closes your PR, please **do not reopen** it. This implies that the PR has irreparable issues, and **GitBot** had to terminate the check process. You can submit a new PR after making necessary modifications.
|
||||
|
||||
- During the `waiting to submit` state, you can continue to submit commits to modify your application chart. **GitBot** will recheck the application chart files and update the PR status upon receiving a new commit.
|
||||
|
||||
- Once your PR passes all checks, it will be automatically merged into the `beclab/apps:main`. The application will be listed on **Olares Market** after a while.
|
||||
|
||||
- If you encounter any issues during the submission process, feel free to reach out to the Olares team or seek assistance from the community.
|
||||
|
||||
## Managing Your Application
|
||||
|
||||
You can continue managing and maintaining your application by creating a Pull Request to `beclab/apps:main`. You can upgrade your application, modify its availability, or completely remove it from the **Olares Market**.
|
||||
|
||||
The process of managing applications is similar to submission.You create a specific type of Pull Request, and GitBot takes care of the rest. Olares uses **special control files** in the root directory of application chart to manage the application's status. These **special control files** are empty files with specific suffix, such as `.suspend` and `.remove`
|
||||
|
||||
:::info NOTE
|
||||
No ".suspend" or ".remove" files should be included in the initial submission.
|
||||
:::
|
||||
|
||||
### Update
|
||||
When you need to update a published application, you need to create an `UPDATE` PR.
|
||||
|
||||
**Please note:**
|
||||
- Whenever you make changes to your application chart, such as upgrade the program, update metadata, or change owner list, be sure to upgrade your chart version.
|
||||
- The chart version in the updated application chart must be ***greater than*** the current version in the repository.
|
||||
- No `.suspend` or `.remove` files included in the root directory of updated application chart.
|
||||
- The **Olares Market** does not offer version rollback. If there are any issues with your application, you need to submit a new version to fix it.
|
||||
- To avoid potential conflicts, we recommend syncing your fork and rebase the commits of PR to the latest main branch.
|
||||
|
||||
### Suspend
|
||||
If for any reason you want to temporarily disable your application's download and installation from the **Olares Market**, submit a `SUSPEND` PR.
|
||||
|
||||
**Please note:**
|
||||
- The chart version in the submitted application chart must ***match*** the current version in the repository.
|
||||
- The root directory you submit should contain the `.suspend` file and should not contain the `.remove` file.
|
||||
- Once the suspend PR passes check and merges, the application store will stop listing your application.
|
||||
- Users who have already downloaded and installed the application can continue to use it after suspension.
|
||||
|
||||
### Remove
|
||||
If for any reason you want to remove your application from the **Olares Market**, submit a `REMOVE` PR.
|
||||
|
||||
**Please note:**
|
||||
- Completely empty the files in the current application directory and add a `.remove` file to the root directory.
|
||||
- Once the remove PR passes check and merges, the application store will remove your application.
|
||||
- You will not be able to reuse the same directory or application chart name in the future.
|
||||
- Users who have already downloaded and installed the application can continue to use it after removal.
|
||||
|
||||
## Promoting Your Application
|
||||
|
||||
Utilizing well-organized application descriptions, screenshots, and promotional images to highlight the features and functions of your application can help attract new users in the Market. Screenshots and previews can intuitively demonstrate the user experience, helping your application stand out.
|
||||
|
||||
To add promotional images on the application detail page, include links to these assets in the `promoteImage` fields within the `spec` section of the `OlaresManifest.yaml` file.
|
||||
|
||||
:::info **Assets Specifications for the Olares Market**
|
||||
|
||||
- The application's **icon** must be in PNG or WEBP format, up to 512 KB, with a size of 256x256 px.
|
||||
|
||||
- It is highly recommended to upload at least 2 **screenshots** for promotion. **Screenshots** must be in JPEG, PNG, or WEBP format, up to 8MB each, with a size of 1440x900 px. You can upload up to 8 **screenshots**.
|
||||
|
||||
- If you wish to have your application featured in the store, a **featured image** is required. Add a link to this image in the `featuredImage` field within the `spec` section of the `OlaresManifest.yaml` file. The image must be in JPEG, PNG, or WEBP format, up to 8MB, with a size of 1440x900 px
|
||||
:::
|
||||
|
||||
## Inviting Others to Collaborate
|
||||
|
||||
There are two ways to invite others to develop Olares applications together:
|
||||
1. Add others developer's GitHub usernames to the `owners` file. Each developer listed in `owners` can then fork the repository and submit their changes independently.
|
||||
2. Add others as collaborators to your forked repository. In this case, you create the Pull Request as a representative, and all others can jointly commit to the branch that is planned to merge.
|
||||
|
||||
@@ -16,7 +16,7 @@ Before uploading, ensure your images are in the correct format.
|
||||
|
||||
## Upload and link assets
|
||||
|
||||
1. Navigate to the [Olares Market Image Hosting service](https://imghost.joinolares.cn/).
|
||||
1. Navigate to the [Olares Market Image Hosting service](https://imghost.olares.com/).
|
||||
2. Select the type of asset you are uploading (e.g., Icon).
|
||||
3. Drag and drop your prepared file into the upload area, or click to select it.
|
||||
4. Click the image thumbnail to make simple edits if necessary.
|
||||
|
||||
@@ -5,7 +5,7 @@ description: Step-by-step guide to setting up a custom domain for your Olares en
|
||||
|
||||
# Set up a custom domain for your Olares
|
||||
|
||||
By default, when you create an account in LarePass, you get an Olares ID with the `olares.com` domain. This means you access your Olares services through URLs like `desktop.{your-username}.olares.com`. While this default setup saves you from common network and domain configuration hassles, you might want use your own domain instead, especially in these common scenarios:
|
||||
By default, when you create an account in LarePass, you get an Olares ID with the `olares.com` domain. This means you access your Olares services through URLs like `desktop.{your-username}.olares.com`. While this default setup saves you from common network and domain configuration hassles, you might want to use your own domain instead, especially in these common scenarios:
|
||||
|
||||
- **As an organization**: Use a company domain similar to your organizational email address for all team members, for example, `employee@company.com`.
|
||||
- **As an individual**: Use your personal domain for a more personalized experience.
|
||||
@@ -38,7 +38,7 @@ The table below outlines the steps involved in setting up a custom domain and wh
|
||||
|
||||
Ensure you have:
|
||||
- A registered domain name from a domain registrar.
|
||||
- A Gmail or G-Suit account. Currently, only these two formats are supported for organization domain membership.
|
||||
- A Gmail or G-Suite account. Currently, only these two formats are supported for organization domain membership.
|
||||
- LarePass app installed on your phone.<br>
|
||||
LarePass will be used later to sign in to Olares Space, and to bind your custom domain to Olares ID.
|
||||
|
||||
@@ -50,31 +50,33 @@ A DID (Decentralized Identifier) is a temporary account state before you get you
|
||||
|
||||
2. Tap **Create an account** to trigger a DID creation.
|
||||
|
||||

|
||||

|
||||
|
||||
This gets you an Olares account in the DID stage.
|
||||
This gets you an Olares account in the DID stage, which displays as "No Olares ID bound".
|
||||
|
||||

|
||||

|
||||
|
||||
3. Tap the Olares account in the DID stage that you just created.
|
||||
|
||||
## Step 2: Add your domain to Olares Space
|
||||
Add and verify your own domain in Olares Space before binding it.
|
||||
|
||||
1. In your browser, access Olares Space at https://space.olares.com/.
|
||||
2. In LarePass app, tap the scan button in the top-right corner, and scan the QR code on the login page to log in to Olares Space.
|
||||
2. In LarePass app, tap the scan icon in the top-right corner, and scan the QR code on the login page to log in to Olares Space.
|
||||
|
||||

|
||||

|
||||
|
||||
3. In Olares Space, go to **Domain Management** > **Domain Name Setup**, enter your domain and click **Confirm**.
|
||||
|
||||

|
||||

|
||||
|
||||
4. Verify your TXT record for your domain. This verifies your ownership of the domain.
|
||||
4. Add and verify a TXT record to prove ownership of the domain.
|
||||
|
||||
a. Click **Guide** in the **Action** column.
|
||||
|
||||
b. Follow the on-screen instructions to add a TXT record to your DNS provider configuration.
|
||||
|
||||

|
||||

|
||||
|
||||
Once verified, the domain setup status will update automatically to **Await NS Record for Your Domain**.
|
||||
5. Verify the Name Server (NS) Record for your domain. This delegates the DNS resolution for your domain to Olares's Cloudflare.
|
||||
@@ -85,7 +87,7 @@ Add and verify your own domain in Olares Space before binding it.
|
||||
|
||||
Once verified, the domain status will update to **Awaiting the application for the domain's Verifiable Credential**.
|
||||
|
||||

|
||||

|
||||
|
||||
:::tip
|
||||
- TXT verification typically completes within 30 minutes. NS record verification may take up to 2 hours. If the whole process exceeds 3 hours, check with your DNS provider.
|
||||
@@ -95,7 +97,7 @@ Add and verify your own domain in Olares Space before binding it.
|
||||
|
||||
Once TXT and NS records are verified, your domain is successfully added to Olares Space.
|
||||
|
||||
## Step 3: Create an org for the domain
|
||||
## Step 3: Create an organization for the domain
|
||||
|
||||
This step creates an organization for the domain. Specifically, it binds your domain to an organization in Olares and requests the Verifiable Credential (VC) for the domain.
|
||||
|
||||
@@ -106,10 +108,12 @@ A Verifiable Credential is a digital format proof that verifies certain attribut
|
||||
1. Create a new organization in LarePass app.
|
||||
|
||||
a. On the account creation page, tap <i class="material-symbols-outlined">display_settings</i> in the top-right corner to go to the **Advanced account creation** page.
|
||||

|
||||
|
||||
b. Go to **Organization Olares ID** > **Create a new organization**. The organization for your domain will automatically show in the list.
|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
c. Tap the organization name to apply for the VC. When it's done, you will see your domain name for confirmation.
|
||||
|
||||
@@ -119,9 +123,9 @@ A Verifiable Credential is a digital format proof that verifies certain attribut
|
||||
|
||||
2. On Olares Space, navigate to the **Domain management** page. The domain setup status should change to **Awaiting rule configuration**.
|
||||
|
||||
So far, you have successfully bound your custom domain with an organization, and is set for configuring the domain rules in Olares Space.
|
||||
So far, you have successfully bound your custom domain to an organization, and you are set to configure the domain rules in Olares Space.
|
||||
|
||||
## Step 4: Add new member
|
||||
## Step 4: Add a new member
|
||||
|
||||
The domain rules specify how you add the members for the organization. Only members in the organization can apply for Olares ID under the organization domain (or, your custom domain). To configure domain rules:
|
||||
|
||||
@@ -129,7 +133,7 @@ The domain rules specify how you add the members for the organization. Only memb
|
||||
2. Under **Domain Invitation Rule**, select **Specified email address**, and click **Save**.
|
||||
:::tip Invitation rules
|
||||
Two types of rules are available:
|
||||
- **Fixed email suffix**: Suitable for large teams who share the same corporation email domain (e.g., `@company.com`). Any email matching the specified suffix is valid to apply for Olares ID under the organization. Currently, only single suffix is supported. Must follow G-Suite format.
|
||||
- **Fixed email suffix**: Suitable for large teams that share the same corporate email domain (e.g., `@company.com`). Any email matching the specified suffix can apply for an Olares ID under the organization. Only a single suffix is supported and must follow the G-Suite format.
|
||||
- **Specified email address**: Allows you to add members by specifying their email addresses. This option is recommended if you do not have a corporate email domain and only need to invite a small number of members to your organization. Both Gmail and G-Suite accounts are supported.
|
||||
:::
|
||||
|
||||
@@ -137,10 +141,10 @@ The domain rules specify how you add the members for the organization. Only memb
|
||||
|
||||

|
||||
|
||||
4. Click **Submit** to finalize the member addition. Repeat step 3 and step 4 if you want to add multiple users
|
||||
4. Click **Submit** to finalize the member addition. Repeat steps 3 and 4 to add more users.
|
||||
|
||||
:::tip Maintain member list
|
||||
For organization admin, you can manage your organization's member list anytime through the **Domain management** page.
|
||||
As an organization admin, you can manage your organization's member list at any time from the **Domain Management** page.
|
||||
:::
|
||||
|
||||
## Step 5: Create an Olares ID with the custom domain
|
||||
@@ -156,9 +160,9 @@ To use the domain, apply for an Olares ID under the organization.
|
||||
|
||||
b. Log in with the Gmail account you added in the previous step and grant access for VC.
|
||||
|
||||

|
||||

|
||||
|
||||
After successful authorization, an Olares ID with the custom domain, `justtest1953@xxxx.cloud`, is successfully created.
|
||||
After successful authorization, an Olares ID with your custom domain (for example, `justtest1953@xxxx.cloud`) is created.
|
||||
|
||||
## Step 6: Install and activate Olares
|
||||
Almost there! Now you are all set to install and activate Olares with your Olares ID.
|
||||
@@ -168,7 +172,7 @@ Almost there! Now you are all set to install and activate Olares with your Olare
|
||||
|
||||
1. In the terminal, run the following script to start the installation:
|
||||
|
||||
```bash {1,2}
|
||||
```bash
|
||||
curl -sSfL https://olares.sh | bash -
|
||||
```
|
||||
|
||||
@@ -189,7 +193,7 @@ Almost there! Now you are all set to install and activate Olares with your Olare
|
||||
2024-12-17T21:00:58.086+0800 Password: 2uO5PZ2X
|
||||
```
|
||||
|
||||
3. Open the Olares activation wizard in your browser using the given URL, and follow the on-screen instructions to complete the activation.
|
||||
4. Open the Olares activation wizard in your browser using the given URL, and follow the on-screen instructions to complete the activation.
|
||||
|
||||
See [Install Olares](../get-started/install-olares.md) for more detailed steps.
|
||||
|
||||
@@ -202,46 +206,66 @@ Before proceeding with the following steps, ensure that your Windows environment
|
||||
If the setup is incomplete, the installation script will not work as expected. For detailed instructions, refer to the dedicated [installation guide for Windows](../get-started/install-windows-script.md).
|
||||
:::
|
||||
|
||||
1. Click https://windows.olares.sh to download the installation script `publicInstall.latest.ps1`.
|
||||
1. Click https://windows.olares.sh to download the installation script `publicInstaller.latest.ps1`.
|
||||
|
||||
2. Open `publicInstall.latest.ps1` with Notepad, and add the environment variables to the beginning:
|
||||
2. Run the installation script.
|
||||
|
||||
```bash {1,2}
|
||||
$env:TERMINUS_OS_DOMAINNAME = "xxxx.cloud"
|
||||
$env:TERMINUS_OS_USERNAME= "justtest1953"
|
||||
$env:WSL_UTF8 = 1
|
||||
$OutputEncoding = [System.Text.Encoding]::UTF8
|
||||
$currentPath = Get-Location
|
||||
$architecture = $env:PROCESSOR_ARCHITECTURE
|
||||
$downloadCdnUrlFromEnv = $env:DOWNLOAD_CDN_URL
|
||||
$version = "1.11.1"
|
||||
$downloadUrl = "https://dc3p1870nn3cj.cloudfront.net"
|
||||
```
|
||||
- `$env:TERMINUS_OS_DOMAINNAME=xxxx.cloud`: Specify your custom domain. Replace `xxxx.cloud` with the actual one.
|
||||
- `$env:TERMINUS_OS_USERNAME=justtest1953`: Specify the prefix of your Olares ID. Replace `justtest1953` with the actual one.
|
||||
|
||||
3. Execute the script.
|
||||
|
||||
a. Open PowerShell as administrator, then navigate to the folder where the script is located. For example, if the script is in the `Downloads` folder, run the following command:
|
||||
a. Launch PowerShell as an administrator and navigate to the folder where you downloaded the script. For example, if the script is in your `Downloads` folder, enter:
|
||||
```powershell
|
||||
# Replace <YourUsername> with your actual Windows username
|
||||
cd C:\Users\<YourUsername>\Downloads
|
||||
```
|
||||
|
||||
b. Once in the correct folder, run the following command:
|
||||
b. Run the script:
|
||||
|
||||
```powershell
|
||||
.\publicInstall.latest.ps1
|
||||
.\publicInstaller.latest.ps1
|
||||
```
|
||||
|
||||
4. When prompted with security warning, type `R` and press **Enter** to run the script once. The installation process for Olares will start.
|
||||
3. When you see the security warning, type `R` and press **Enter** to run the script once. The Olares installation will start.
|
||||
|
||||
```powershell
|
||||
Security warning
|
||||
Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run
|
||||
publicInstall.latest.ps1?
|
||||
publicInstaller.latest.ps1?
|
||||
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D"):
|
||||
```
|
||||
|
||||
5. Wait for the installation to finish. Depending on your network, the process can take 20-30 minutes. When the installation completes, you will see the wizard URL and login credentials:
|
||||
4. When prompted to choose the drive for the WSL Ubuntu distro, enter the letter of a drive with at least 80 GB free space.
|
||||
|
||||
```powershell{8}
|
||||
Installing Olares will create a WSL Ubuntu Distro and occupy at least 80 GB of disk space.
|
||||
Please select the drive where you want to install it.
|
||||
|
||||
Available drives and free space:
|
||||
C:\ Free Disk: 391.07 GB
|
||||
D:\ Free Disk: 281.32 GB
|
||||
|
||||
Please enter the drive letter (e.g., C):
|
||||
```
|
||||
|
||||
5. When prompted to set up firewall rules, type `yes` to configure them automatically, or `no` to skip. If you skip, you must either [disable Windows Defender Firewall](../get-started/install-windows-script.md#how-to-disable-windows-defender-firewall) or [add the TCP inbound rules manually](../get-started/install-windows-script.md#how-to-manually-set-firewall-rules).
|
||||
|
||||
```powershell{2}
|
||||
Accessing Olares requires setting up firewall rules, specifically adding TCP inbound rules for ports 80, 443, and 30180.
|
||||
Do you want to set up the firewall rules? (yes/no):
|
||||
```
|
||||
|
||||
6. When prompted to confirm the Windows (NAT gateway) IP address, type **Y** to confirm or **R** to re-enter.
|
||||
|
||||
```powershell
|
||||
The NAT gateway (the Windows host)'s IP is 192.168.50.136. Confirm [Y] or Re-enter [R]?
|
||||
```
|
||||
|
||||
::: tip Obtain the IPv4 address of Windows
|
||||
You can get the IPv4 address in advance by running `ipconfig` in the Windows command line.
|
||||
:::
|
||||
|
||||
7. When prompted for domain and Olares ID, enter your custom domain and the Olares ID prefix you created earlier separately. For example, if your Olares ID is `justtest1953@xxxx.cloud`, enter `xxxx.cloud` for the domain and `justtest1953` for the Olares ID.
|
||||
|
||||

|
||||
|
||||
8. Wait for the installation to finish. Depending on your network, this can take 10–30 minutes. When it completes, the wizard URL and login credentials will be shown:
|
||||
|
||||
```bash
|
||||
2024-12-17T21:00:58.086+0800 Olares is running at:
|
||||
@@ -254,7 +278,9 @@ If the setup is incomplete, the installation script will not work as expected. F
|
||||
2024-12-17T21:00:58.086+0800 Password: 2uO5PZ2X
|
||||
```
|
||||
|
||||
6. Open the Olares activation wizard in your browser using the given URL, and follow the on-screen instructions to complete the activation.
|
||||
9. Open the Olares activation wizard in your browser using the URL shown, and follow the on-screen instructions to complete the activation.
|
||||
|
||||
For more details and troubleshooting, see the [installation guide for Windows](../get-started/install-windows-script.md).
|
||||
|
||||
</template>
|
||||
</tabs>
|
||||
|
||||
@@ -67,25 +67,26 @@ A GPU is not required to install Olares, but is necessary for AI applications.
|
||||
```
|
||||
|
||||
## Install Olares
|
||||
1. Click https://windows.olares.sh to download the installation script `publicInstall.latest.ps1`.
|
||||
1. Click https://windows.olares.sh to download the installation script `publicInstaller.latest.ps1`.
|
||||
|
||||
2. Execute the script.
|
||||
|
||||
a. Open PowerShell as administrator, then navigate to the folder where the script is located. For example, if the script is in the `Downloads` folder, run the following command:
|
||||
2. Run the installation script.
|
||||
|
||||
a. Launch PowerShell as an administrator and navigate to the folder where you downloaded the script. For example, if the script is in your `Downloads` folder, enter:
|
||||
```powershell
|
||||
# Replace <YourUsername> with your actual Windows username
|
||||
cd C:\Users\<YourUsername>\Downloads
|
||||
```
|
||||
|
||||
b. Once in the correct folder, run the following command:
|
||||
|
||||
b. In the appropriate directory, execute the script with:
|
||||
```powershell
|
||||
.\publicInstall.latest.ps1
|
||||
.\publicInstaller.latest.ps1
|
||||
```
|
||||
|
||||
:::warning Administrator privileges required
|
||||
Running PowerShell without administrator privileges will cause the installation to fail. See [How to make sure I am using PowerShell as administrator](#how-to-make-sure-i-am-using-powershell-as-administrator).
|
||||
:::
|
||||
|
||||
3. When prompted with security warning, type `R` and press **Enter** to run the script once. The installation process for Olares will start.
|
||||
3. When you see the security warning, type `R` and press **Enter** to run the script once. The installation process for Olares will start.
|
||||
|
||||
```powershell{4}
|
||||
Security warning
|
||||
@@ -94,7 +95,7 @@ A GPU is not required to install Olares, but is necessary for AI applications.
|
||||
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D"):
|
||||
```
|
||||
|
||||
4. When prompted to select the drive to store the WSL Ubuntu distro, type the drive letter of an available disk. Ensure the selected drive has at least **80 GB** of free space.
|
||||
4. When prompted to select the drive to store the WSL Ubuntu distro, type the drive letter of an available disk. Ensure the selected drive has at least 80 GB of free space.
|
||||
```powershell{8}
|
||||
Installing Olares will create a WSL Ubuntu Distro and occupy at least 80 GB of disk space.
|
||||
Please select the drive where you want to install it.
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
outline: [2, 3]
|
||||
description: Find answers to common questions during the installation and activation of Olares.
|
||||
---
|
||||
# Olares installation and activation FAQs
|
||||
# Olares installation, activation & login FAQs
|
||||
|
||||
This page lists the FAQs about installing, configuring, and activating Olares on your hardware.
|
||||
This page lists the FAQs about installing, configuring, activating, and logging into Olares on your hardware.
|
||||
|
||||
## Installation
|
||||
### What platforms does Olares support?
|
||||
@@ -75,4 +75,50 @@ Ensure both your phone and Olares device are on the same network. If they are no
|
||||
|
||||
In situations where you cannot connect via Wi-Fi, you can use the Bluetooth network setup in the LarePass app to connect Olares to the same network as your phone.
|
||||
|
||||
For details, see [Activate Olares using Bluetooth](../../manual/larepass/activate-olares.md#activate-olares-using-bluetooth).
|
||||
For details, see [Activate Olares using Bluetooth](../../manual/larepass/activate-olares.md#activate-olares-using-bluetooth).
|
||||
|
||||
### I received the MFA binding error. How can I resolve it?
|
||||
|
||||
The request to bind Multi-Factor Authentication (MFA) failed due to a network timeout. Check your network connection and retry the setup process.
|
||||
|
||||
### I received a DID binding error. How to resolve it?
|
||||
|
||||
The request to the binding-zone interface failed due to a network timeout. This usually happens during account activation. Ensure your network is stable and retry.
|
||||
|
||||
### What does this error message mean: "Invalid jws, timestamp is out of range"?
|
||||
|
||||
This occurs when there is a significant time difference (greater than 20 minutes) between the device running LarePass and the Olares device. Check the system time on your computer or phone and ensure it is synced correctly with internet time.
|
||||
|
||||
### I see this error message during setup: "Resolve name error". How to fix it?
|
||||
|
||||
This error means your Olares device cannot connect to the Olares identity service, which is usually caused by the network issue. Check your internet connection and ensure your Olares device has proper network access.
|
||||
|
||||
## Login and authentication
|
||||
|
||||
### What should I do when I see "Authentication failed, incorrect password"?
|
||||
|
||||
This indicates the password entered is not accurate. Double-check your password for issues like typos or case sensitivity and try again.
|
||||
|
||||
### What does this mean: "Authentication failed, user not found"?
|
||||
|
||||
The system cannot find an account associated with the username entered. Verify that the username is correct and this username is already registered on Olares.
|
||||
|
||||
### I received an error saying "Authentication failed, failed to query user from lldap service". How to resolve it?
|
||||
|
||||
The system was unable to retrieve user details from the internal directory. This might happen if the user data is corrupted or if the service is momentarily busy. Try again or contact your administrator.
|
||||
|
||||
### I am locked out with the message "too many failed login attempts, retry again later after 5 minutes". What should I do?
|
||||
|
||||
For security reasons, the system temporarily locks logins after multiple incorrect attempts. Wait for 5 minutes and then try logging in again.
|
||||
|
||||
### Why am I getting "Authentication failed, disk space is full"?
|
||||
|
||||
Your Olares device storage is completely full, which prevents the authentication service from running correctly. Free up disk space on the device to resolve this issue.
|
||||
|
||||
### What does this error message mean: "Authentication failed, lldap service is unavailable"?
|
||||
|
||||
The internal identity service "LLDAP" on your Olares device is not running or is experiencing issues. Restart the Olares device and try again, or contact your administrator.
|
||||
|
||||
### What does this error message mean: "Authentication failed, citus service is unavailable"?
|
||||
|
||||
The internal database service "Citus" is currently unavailable. This is usually a temporary system issue. Restart your Olares device.
|
||||
|
||||
80
docs/manual/help/ts-free-memory.md
Normal file
80
docs/manual/help/ts-free-memory.md
Normal file
@@ -0,0 +1,80 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Troubleshoot memory not freeing after stopping apps.
|
||||
---
|
||||
|
||||
# Memory insufficient or not freed after stopping an app
|
||||
|
||||
Use this guide when you stop an app (for example in Settings) but system memory is not freed, or when installation or restore fails because of insufficient memory.
|
||||
|
||||
## Condition
|
||||
- Market reports that there is not enough memory to install or restore an app.
|
||||
- You stop an application manually in Settings, but memory usage does not drop.
|
||||
|
||||
## Cause
|
||||
|
||||
In Olares, some applications (for example Ollama and many LLM apps) are deployed as [shared applications](../../developer/concepts/application.md#shared-application). They provide centralized resources or services to all users in the cluster.
|
||||
|
||||
Resource use for these apps is mainly on the server side. In Olares OS 1.12.4 and earlier, stopping a shared app from Settings only stops its user-facing client. The system-side service is not stopped by default, so the memory it uses is not released.
|
||||
|
||||
## Solution: Free memory via Market
|
||||
|
||||
To free memory, stop apps and their server side from Market instead of only from Settings, then verify in Dashboard and Control Hub as needed.
|
||||
|
||||
:::info
|
||||
This guide applies when you have admin privileges and the system currently does not have sub-accounts created.
|
||||
:::
|
||||
### Step 1: Check current memory in Dashboard
|
||||
|
||||
Open Dashboard and check current memory usage.
|
||||
|
||||

|
||||
|
||||
### Step 2: Check the app's memory requirements in Market
|
||||
|
||||
In Market, open the app you want to install or resume and check its memory requirements. If the sum of used and required memory is greater than about 90% of total memory, installation or restore might fail.
|
||||
|
||||

|
||||
|
||||
### Step 3: Identify apps using the most memory in Dashboard
|
||||
|
||||
1. Back to Dashboard and navigate to the **Applications** section.
|
||||
2. At the top right, use the sorting option to sort apps by memory usage.
|
||||
3. Review the list to see which applications are consuming the most memory. Note apps you can close or temporarily stop to free up memory for your new app.
|
||||
|
||||

|
||||
|
||||
### Step 4: Stop apps from Market
|
||||
|
||||
Stopping from Market allows you to stop the shared server and release its memory.
|
||||
|
||||
1. Open Market and go to **My Olares**.
|
||||
2. Find the app you want to stop, click <i class="material-symbols-outlined">keyboard_arrow_down</i> next to the app's operation button and select **Stop**.
|
||||

|
||||
|
||||
3. If a dialog appears when you stop the app, check **Also stops the shared server (affects all users)**.
|
||||
|
||||

|
||||
|
||||
:::tip Uninstalling a shared app
|
||||
If you are uninstalling a shared app, check **Also uninstall the shared server (affects all users)** so the server side is fully removed.
|
||||
:::
|
||||
|
||||
### Step 5: Verify that memory has been released
|
||||
|
||||
After stopping apps, wait about 5 minutes, then reopen the Dashboard to review current memory usage.
|
||||
|
||||
If you notice that most memory-intensive apps are no longer listed at the top, but total memory usage remains high:
|
||||
|
||||
1. Open Control Hub and navigate to the **Namespaces** section.
|
||||
2. Click the **Memory usage** column to sort namespaces by memory consumption.
|
||||
3. Look for any namespaces with a name ending in `server-shared`. This indicates the server side of a shared app is still be running and holding onto memory.
|
||||
|
||||
|
||||

|
||||
|
||||
4. For any shared app that is still holding memory:
|
||||
|
||||
a. Go to **Market** > **My Olares**, resume the app, then stop it.
|
||||
|
||||
b. In the stop dialog, check **Also stops the shared server (affects all users)** so the server is fully stopped and memory is released.
|
||||
33
docs/manual/help/ts-missing-apps.md
Normal file
33
docs/manual/help/ts-missing-apps.md
Normal file
@@ -0,0 +1,33 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Troubleshoot when apps from the Market website are missing on your device.
|
||||
---
|
||||
|
||||
# Missing apps in Market
|
||||
|
||||
Use this guide when an app listed on the official Market website is missing from the Market on your device and the issue persists after your device has been running for more than 2 hours.
|
||||
|
||||
## Condition
|
||||
|
||||
- Some apps listed on the official [Olares Market website](https://market.olares.com) are missing from the Market on your device.
|
||||
- Your device has been running for more than 2 hours and the apps are still missing.
|
||||
|
||||
## Cause
|
||||
|
||||
The system might not have finished downloading the full app list during your initial setup. Restarting the chart repository and Market deployments can refresh the app catalog.
|
||||
|
||||
## Solution
|
||||
|
||||
Restart the chart repository and Market services from Control Hub, then wait for them to come back up and refresh the Market app.
|
||||
|
||||
1. Open Control Hub and go to **Browse** > **System** > **os-framework**.
|
||||
2. In the **Deployments** list, find **chartrepo-deployment**, and then click **Restart**. Wait until its status turns to **Running**.
|
||||
|
||||

|
||||
|
||||
3. In the same list, find **market-deployment**, and then click **Restart**. Wait until its status turns to **Running**.
|
||||
|
||||

|
||||
|
||||
4. Wait 2 to 3 minutes for the services to initialize.
|
||||
5. Refresh the Market app.
|
||||
@@ -12,13 +12,12 @@ This guide helps users understand how to install, update, and uninstall applicat
|
||||
## Before you begin
|
||||
Before you start, it is recommended to familiarize yourself with a few concepts for Olares applications:
|
||||
|
||||
| Terminology | Description |
|
||||
|-----------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| [System application](../../../developer/concepts/application.md#system-applications) | Built-in applications that come pre-installed with Olares,<br/> such as Profile, Files, and Vault. [](../../../developer/concepts/) |
|
||||
| [Community application](../../../developer/concepts/application.md#community-applications) | Applications that are created and maintained by third-party<br/> developers. |
|
||||
| [Shared application](../../../developer/concepts/application.md#cluster-scoped-applications) | A special category of community applications on Olares<br/> designed to provide unified, shared resources or services to all <br/>users within an Olares cluster. Only one <br/>instance is allowed per cluster. |
|
||||
| [Reference application](../../../developer/concepts/application.md#reference-applications) | The applications that have been granted access to specific<br/> shared applications |
|
||||
| [Dependencies](../../../developer/concepts/application.md#dependencies) | Prerequisite applications that must already be<br/> installed before a user can access an application <br/>that requires them. |
|
||||
| Terminology | Description |
|
||||
|:------------|:--------------|
|
||||
| [System application](../../../developer/concepts/application.md#system-applications) | Built-in applications that come pre-installed with Olares,<br/> such as Profile, Files, and Vault. |
|
||||
| [Community application](../../../developer/concepts/application.md#community-applications) | Applications that are created and maintained by third-party<br/> developers. |
|
||||
| [Shared application](../../../developer/concepts/application.md#shared-applications) | A special category of community applications on Olares designed<br/> to provide unified, shared resources or services to all users within<br/> an Olares cluster. <br/><br/>Shared applications expose standard APIs or shared entrances that<br/> can be directly invoked by any application in the cluster. |
|
||||
| [Dependencies](../../../developer/concepts/application.md#dependencies) | Prerequisite applications that must already be<br/> installed before a user can access an application <br/>that requires them. |
|
||||
|
||||
## Find applications
|
||||
|
||||
@@ -60,8 +59,8 @@ You can switch market sources to speed up browsing, searching, and downloading,
|
||||
|
||||
1. Open **Market**, and navigate to **My Olares** > **Settings** from the left sidebar.
|
||||
2. Under **Market sources**, click **Add source** to add a new app source. The current official sources include:
|
||||
* Global: `https://appstore-server-prod.bttcdn.com`
|
||||
* China: `https://appstore-china-server-prod.api.jointerminus.cn`
|
||||
* Global: `https://api.olares.com/market`
|
||||
* China: `https://api.olares.cn/market`
|
||||
3. Fill in the source name, URL, and description as required, then click **Confirm** to finish adding.
|
||||
4. In the source list, select the target source to activate it. Wait for about 10 minutes for the store page to switch.
|
||||
|
||||
@@ -76,32 +75,36 @@ To install an application from Market:
|
||||
1. Open Market from Dock or Launchpad.
|
||||
2. Navigate to the app you want, and click **Get**.
|
||||
3. When the operation button changes to **Install**, click it to start the installation.
|
||||
4. Once finished, the button will change to **Open**.
|
||||
4. (Optional) To cancel the installation, click <i class="material-symbols-outlined">close_small</i> on the right of the button.
|
||||
5. Once finished, the button will change to **Open**.
|
||||
|
||||
:::tip
|
||||
To cancel an installation, hover over the operation button and click **Cancel** when it appears.
|
||||
:::
|
||||
### Install shared applications
|
||||
|
||||
### Install shared and reference applications
|
||||
|
||||
To ensure a shared service is running and accessible within the cluster, follow this general installation process based on the type of Shared App:
|
||||
To ensure a shared service is running and accessible within the cluster, follow the installation process based on the type of shared application:
|
||||
|
||||
* **Headless backend service**:
|
||||
This type of shared applications typically require third-party reference applications to access its service. Take Ollama for example:
|
||||
1. The administrator installs the shared application first. This makes the core service available in the cluster.
|
||||
|
||||
2. Members (including the administrator) install the corresponding reference application (e.g., Open WebUI or LobeChat) to access the Ollama service.
|
||||
|
||||
* **Complete application with built-in UI**:
|
||||
This type of shared applications can provide service to itself. Typical examples are Dify Shared and ComfyUI Shared.
|
||||
This type of shared application provides API services and does not include a graphical user interface. No dedicated reference application is required. Any client that supports the corresponding API can directly invoke the service. Take Ollama as an example:
|
||||
|
||||
1. The administrator installs Ollama first. Once installed, the shared service starts within the cluster and exposes a standard API endpoint.
|
||||
|
||||
1. The administrator installs the shared application first. This not only launches the shared service for the cluster, but also installs the client-side interface as the reference application.
|
||||
2. Cluster members access the shared service:
|
||||
|
||||
a. Retrieve the access address of Ollama in Olares **Settings** > **Applications** > **Ollama** > **Shared entrances**.
|
||||
|
||||
b. Install a third-party client that supports the Ollama API, such as LobeChat or Open WebUI, and enter the access address in the client's configuration settings.
|
||||
|
||||
* **Applications with built-in UI**:
|
||||
|
||||
This type of shared applications include both a backend service and a Web UI. They can provide services to users independently. Typical examples are Dify Shared and ComfyUI Shared.
|
||||
|
||||
1. The administrator installs the shared application first. This not only launches the shared service for the cluster, but also installs the client-side interface as the access point.
|
||||
|
||||
::: tip ComfyUI Launcher
|
||||
ComfyUI Shared contains a web launcher component to facilitate the management of related services and resources. The administrator needs to configure and start the service from the ComfyUI Launcher.
|
||||
:::
|
||||
|
||||
2. Other members in the cluster install the same application. For these users, only the access point to the shared application is installed.
|
||||
2. Cluster members install the same application. For these users, only the access point to the shared application is installed.
|
||||
|
||||
### Install custom applications
|
||||
|
||||
@@ -133,21 +136,45 @@ To update an application from Market:
|
||||
|
||||
## Uninstall applications
|
||||
|
||||
### Uninstall from Market
|
||||
Uninstall an application from Market or LaunchPad.
|
||||
|
||||
To uninstall an application from Market:
|
||||
<tabs>
|
||||
<template #Uninstall-from-Market>
|
||||
|
||||
1. Open Market from Dock or Launchpad.
|
||||
2. In the left sidebar, navigate to the **My Olares** section. Use the source tabs to filter and find your installed applications.
|
||||
3. Click <i class="material-symbols-outlined">keyboard_arrow_down</i> next to the application's operation button, and select **Uninstall**.
|
||||
4. In the **Uninstall** window, select the removal option as needed:
|
||||
|
||||
### Uninstall from Launchpad
|
||||
- **Also remove all local data**
|
||||
|
||||
You can also uninstall an application from LaunchPad:
|
||||
- If you select this option, app data (in the Data directory) and cache data (in the Cache directory) will be permanently deleted and cannot be recovered.
|
||||
- If you do not select this option, app data (in the Data directory) will be retained and can be restored upon re-installation, while cache data (in the Cache directory) will be permanently deleted and cannot be recovered.
|
||||
- **Also uninstall the shared server (affects all users)**
|
||||
|
||||
- If this is a shared application, select this option to remove it for all users in the cluster.
|
||||
- If you have uninstalled the user-facing app before removing the share app, you must re-install the user-facing app first, and then uninstall the shared application.
|
||||
|
||||
5. Click **Confirm**.
|
||||
</template>
|
||||
<template #Uninstall-from-Launchpad>
|
||||
|
||||
1. In Olares, click the Launchpad icon in the Dock to display all installed apps.
|
||||
2. Click and hold the app icon until all the apps begin to jiggle.
|
||||
3. Click <i class="material-symbols-outlined">cancel</i> on the app icon to uninstall it.
|
||||
3. In the **Uninstall** window, select the removal option as needed:
|
||||
|
||||
- **Also remove all local data**
|
||||
|
||||
- If you select this option, app data (in the Data directory) and cache data (in the Cache directory) will be permanently deleted and cannot be recovered.
|
||||
- If you do not select this option, app data (in the Data directory) will be retained and can be restored upon re-installation, while cache data (in the Cache directory) will be permanently deleted and cannot be recovered.
|
||||
- **Also uninstall the shared server (affects all users)**
|
||||
|
||||
- If this is a shared application, select this option to remove it for all users in the cluster.
|
||||
- If you have uninstalled the user-facing app before removing the share app, you must re-install the user-facing app first, and then uninstall the shared application.
|
||||
|
||||
4. Click **Confirm**.
|
||||
</template>
|
||||
</tabs>
|
||||
|
||||
## View app operation logs
|
||||
|
||||
@@ -166,23 +193,19 @@ If you can't install an application, it might be due to:
|
||||
* **Insufficient system resources**: Try freeing up system resources, or increasing your resource quota.
|
||||
* **Missing dependencies**: Check the **Dependency** section on the application details page and make sure all required apps are installed.
|
||||
* **Incompatible system version**: Try upgrading Olares to the latest version.
|
||||
* **Shared application restrictions** (for Olares member): Install the reference app, and contact your Olares admin to install the corresponding shared application.
|
||||
* **Shared service dependency** (for Olares members): The application requires a shared service to be running in the cluster. Contact your admin to install the shared application first before you can install it.
|
||||
|
||||
### Why can't I resume my application?
|
||||
|
||||
When you try to resume an application in Olares and receive an error message about insufficient CPU, memory, or disk, it means the system's current available resources cannot support running the application. You need to close other applications to free up resources.
|
||||
|
||||
#### Why was my application stopped?
|
||||
### Why was my application stopped?
|
||||
|
||||
An application is usually stopped due to one of the following reasons:
|
||||
* **System auto stop**: To ensure Olares's stability, the Olares system monitors resource usage. If an application consumes excessive resources (such as CPU or memory) causing a high system load, the system might automatically pause it to prevent the entire device from freezing or crashing.
|
||||
* **Manual stop**: You or an administrator might have manually stopped the application previously, and the application has not been resumed yet.
|
||||
|
||||
#### Why can't I resume my application now?
|
||||
### Why can't I resume my application?
|
||||
|
||||
Starting an application requires reserving a specific amount of computing resources. If other running applications are already occupying most of the resources, the remaining free resources are not enough for the application you want to start.
|
||||
|
||||
Therefore, when you try to resume the application, you might encounter the following messages:
|
||||
Therefore, when you try to resume the application, you might encounter the following messages, and you need to stop other applications to free up resources.
|
||||
|
||||
| Error message | Description |
|
||||
| :--- | :--- |
|
||||
@@ -190,11 +213,46 @@ Therefore, when you try to resume the application, you might encounter the follo
|
||||
| Insufficient disk space | The hard drive is full, and new data cannot be written. |
|
||||
| Available CPU/memory insufficient | There are some resources left, they are less than the minimum<br> amount required by this specific application. |
|
||||
|
||||
#### How to resume my application?
|
||||
### How to resume my application?
|
||||
|
||||
To resume your application, you need to free up some occupied resources:
|
||||
|
||||
1. Go to **Settings** > **Application** to view the applications that are currently **Running**.
|
||||
2. Find applications that you do not need to use right now.
|
||||
3. Stop each application by clicking the app and clicking <i class="material-symbols-outlined">toggle_on</i> to toggle off **Running**.
|
||||
3. Stop each application by clicking the app and clicking **Stop**.
|
||||
4. After resources are freed, go back to your target application and click **Resume** again.
|
||||
|
||||
### How to free up resources from unused apps?
|
||||
|
||||
If certain applications are not in use and you want to free up the system resources they are using, you can stop them from Market or Settings.
|
||||
|
||||
<tabs>
|
||||
<template #Stop-apps-from-Market>
|
||||
|
||||
1. Open Market from Dock or Launchpad.
|
||||
2. In the left sidebar, click **My Olares**. Use the source tabs to filter and find the app you want to stop.
|
||||
3. Click <i class="material-symbols-outlined">keyboard_arrow_down</i> next to the application's operation button, and then select **Stop**.
|
||||
</template>
|
||||
<template #Stop-apps-from-Settings>
|
||||
|
||||
1. Go to **Settings** > **Application**.
|
||||
2. Click the target application you want to stop from the list.
|
||||
3. Click <i class="material-symbols-outlined">toggle_on</i>.
|
||||
|
||||
</template>
|
||||
</tabs>
|
||||
|
||||
#### Free up shared application resources
|
||||
|
||||
To fully release resources for shared applications such as Ollama, the system-side service must be stopped. This action can only be performed by an administrator.
|
||||
|
||||
When the admin stops a shared application, the **Also uninstall the shared server (affects all users)** checkbox appears:
|
||||
- To fully release the resources, this checkbox must be selected.
|
||||
- Once selected, the service is disabled for the entire cluster, and other users will no longer be able to use the application.
|
||||
- This checkbox only appears in multi-user clusters. In a single-user scenario, the system automatically stops both the user-facing application and the system-side service by default.
|
||||
|
||||
:::info Notes for Olares V1.12.4 and earlier
|
||||
In Olares 1.12.4 and earlier versions, to fully release resources, you must use Market:
|
||||
- Stop the app in Market and ensure that the **Also uninstall the shared server (affects all users)** option is selected.
|
||||
- If the user-facing application has already been stopped through Settings, you must first resume it in Market, and then stop the shared application while ensuring the **Also uninstall the shared server (affects all users)** option is selected.
|
||||
:::
|
||||
|
||||
@@ -1,88 +1,110 @@
|
||||
---
|
||||
description: Learn how to manage repositories, view downloaded images, and export system logs for troubleshooting.
|
||||
outline: [2, 3]
|
||||
description: Learn how to manage repositories, view downloaded images, export system logs, and configure system-level environment variables.
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: Olares OS, advanced settings, repo management, image management, system logs, system-level environment variables
|
||||
---
|
||||
|
||||
# Developer resources
|
||||
# Advanced settings
|
||||
|
||||
The **Developer** page in Olares **Settings** is designed for developers and advanced users to manage core system resources and diagnose issues. Key functions include:
|
||||
The **Advanced** page in **Settings** is designed for developers and advanced users to manage core system resources and diagnose issues.
|
||||
|
||||
* **Repository Management**
|
||||
* **Image Management**
|
||||
* **Export System Logs**
|
||||
* **Set System Environment Variables**
|
||||
## Manage repositories
|
||||
|
||||
## Repository management
|
||||
The **Repository management** page allows you to view the source repositories that Olares uses to download system images and software packages. You can also configure mirror endpoints to optimize download speeds and stability.
|
||||
|
||||
**Repository management** is where you maintain the source repositories for Olares to download essential system images and other software packages. You can view existing repositories, add new ones, and manage endpoints to optimize Olares' package retrieval performance.
|
||||
### View repositories
|
||||
|
||||
On the repository list page, you can view the name of the repository, number of related images, and image size for each repository.
|
||||
1. Go to **Settings** > **Advanced** > **Repository management**.
|
||||
2. In the repository list, you can view the name of the repository, number of related images, and image size for each repository.
|
||||
|
||||

|
||||
{width=65%}
|
||||
|
||||
### Add a new repository
|
||||
### Manage repository mirrors
|
||||
|
||||
Follow these steps to add a new repository:
|
||||
Manage mirror endpoints for repositories to improve access speed and stability.
|
||||
|
||||
1. Navigate to **Settings** > **Developer** > **Repository management**.
|
||||
2. Click the **+ Add repository** button in the top-right corner.
|
||||
3. In the pop-up dialog, fill in the following information:
|
||||
* **Repository Name**: Enter a unique name for the repository, such as `docker.io` or `quay.io`.
|
||||
* **Starting endpoint**: Enter the initial URL for the repository.
|
||||
4. Click **Confirm** to complete the addition.
|
||||
1. On the **Repository management** page, find the target repo, and then click <i class="material-symbols-outlined">chevron_forward</i> in the **Action** column.
|
||||
2. On the **Mirror management** page, you can perform the following actions:
|
||||
|
||||
### Manage repository endpoints
|
||||
{width=68%}
|
||||
|
||||
- To re-order the mirror endpoints, click <i class="material-symbols-outlined">keyboard_control_key</i> or <i class="material-symbols-outlined">keyboard_arrow_down</i>. Olares prioritizes endpoints higher on the list.
|
||||
- To delete an endpoint you no longer need, click <i class="material-symbols-outlined">delete</i>.
|
||||
- To add a new mirror endpoint, click **Add mirror**, enter the mirror URL, and then click **Confirm**.
|
||||
|
||||
You can reorder a repository's access endpoints to optimize its access speed and stability.
|
||||
## Manage images
|
||||
|
||||

|
||||
The **Image management** page provides a comprehensive view of all downloaded and cached application and software package images on your Olares system. You can filter or search to quickly find specific images.
|
||||
|
||||
1. On the **Repository management** page, click the <i class="material-symbols-outlined">table_edit</i> button to the right of the target repository.
|
||||
2. On the **Endpoint management** page, you can:
|
||||
* **Reorder**: Use the up and down arrows to sort the endpoints. Olares will prioritize the endpoints higher on the list.
|
||||
* **Delete**: Click the <i class="material-symbols-outlined">delete</i> button to delete an endpoint you no longer need.
|
||||
|
||||
## Image management
|
||||
|
||||
The **Image Management** page provides a comprehensive view of all downloaded and cached application and software package images on your Olares system.
|
||||
|
||||
|
||||

|
||||
{width=65%}
|
||||
|
||||
## Export system logs
|
||||
|
||||
Logs record the operational status of various system components. When troubleshooting Olares issues, system logs can provide crucial diagnostic information. To download system logs:
|
||||
System logs record the operational status of various system components and provide crucial diagnostic information for troubleshooting.
|
||||
|
||||
1. Navigate to **Settings** > **Developer** > **Logs**.
|
||||
2. Click **Collect** to generate the log file. The log will automatically be saved to the `/Home/pod_logs` directory.
|
||||
3. Click **Open** to open the logs directory in a new window.
|
||||
To export system logs:
|
||||
1. Go to **Settings** > **Advanced** > **Logs**.
|
||||
2. Click **Collect** to generate the log file. The log is automatically saved to the `/Home/pod_logs` directory.
|
||||
3. Click **Open** to open the logs directory in a new window.
|
||||
|
||||

|
||||
{width=65%}
|
||||
|
||||
4. Right-click the generated log file and select **Download** to save it to your local machine.
|
||||
|
||||
{width=70%}
|
||||
Once downloaded, you can attach the log file to a GitHub feedback post and share it with the Olares team to help them locate the issue faster.
|
||||
:::tip
|
||||
You can attach this log file to a GitHub issue to help the Olares team locate and resolve your problem faster.
|
||||
:::
|
||||
|
||||
## Set system environment variables
|
||||
|
||||
Starting from Olares version 1.12.2, Olares supports system environment variables declared by applications. This allows users to configure common settings for applications at the system level, eliminating the need to modify each application individually. Typical categories are:
|
||||
Starting from Olares version 1.12.2, you can configure system-level environment variables for applications. This allows you to apply common settings globally without having to configure them for each application individually.
|
||||
|
||||
- User information, for example, `OLARES_USER_USERNAME`.
|
||||
- SMTP services, for example, `OLARES_USER_SMTP_PORT`.
|
||||
- Image/proxy settings, for example, `OLARES_SYSTEM_CDN_SERVICE`.
|
||||
- Third-party service API-KEYs, for example, `OLARES_USER_CUSTOM_OPENAI_APIKEY`, and `OLARES_USER_HUGGINGFACE_TOKEN`.
|
||||
The variables are divided into two main categories:
|
||||
|
||||
:::tip Note
|
||||
- You cannot add or delete system environment variables, nor can you modify their attributes.
|
||||
- When installing and activating Olares, the system automatically sets some environment variables based on your Olares ID to ensure optimal performance and connectivity.
|
||||
:::
|
||||
| Category | Description | Permissions |
|
||||
|:-------- |:----------- |:----------- |
|
||||
| System config | Predefined variables required<br> for core system operations. <br><br>Example: `OLARES_SYSTEM_CDN_SERVICE` | You cannot delete them. The system locks and grays out some variables to ensure stability, but you can edit the values of others. |
|
||||
| User information | Custom or predefined user-level<br> variables, such as third-party API keys.<br><br>Example: `OLARES_USER_CUSTOM_OPENAI_APIKEY`| You can add, edit, and delete them. The system automatically applies the `OLARES_USER_` prefix to any custom keys you create. |
|
||||
|
||||
To manually adjust system environment variables, follow these steps:
|
||||
To manage environment variables:
|
||||
|
||||

|
||||
1. Go to **Settings** > **Advanced** > **System environment variables**.
|
||||
|
||||
1. From the Olares desktop, navigate to **Settings > Developer > System Environment Variables**.
|
||||
2. Find the variable you want to modify in the list.
|
||||
3. Click the <i class="material-symbols-outlined">edit_square</i> icon and enter the variable's value in the pop-up dialog. Variables that are grayed out cannot be modified.
|
||||
4. Click **Confirm** to save your changes.
|
||||
{width=65%}
|
||||
|
||||
2. To add a new custom variable:
|
||||
|
||||
a. Click **Add environment variables**.
|
||||
|
||||
b. In the **Key** field, enter your custom key name which is appended to the `OLARES_USER_` prefix.
|
||||
|
||||
c. In the **Value** field, fill in the value.
|
||||
|
||||
d. From the **Type** list, select the data type.
|
||||
|
||||
e. Provide an optional description.
|
||||
|
||||
f. Click **Save**.
|
||||
|
||||
g. Click **Apply** at the bottom of **System environment varuables**.
|
||||
|
||||
3. To modify a variable:
|
||||
|
||||
a. Find the target variable from the list, and then click <i class="material-symbols-outlined">edit_square</i>. Variables without this icon are locked and cannot be changed.
|
||||
|
||||
b. In the **Edit environment variable** window, update the variable's value.
|
||||
|
||||
c. Click **Confirm** to save your changes.
|
||||
|
||||
d. Click **Apply** at the bottom of **System environment varuables**.
|
||||
|
||||
4. To delete a variable:
|
||||
|
||||
a. Locate a user-level variable and click <i class="material-symbols-outlined">delete</i>.
|
||||
|
||||
b. Click **Confirm**.
|
||||
|
||||
c. Click **Apply** at the bottom of **System environment varuables**.
|
||||
|
||||
@@ -7,17 +7,15 @@ description: Configure and manage Olares with Settings, your central hub for per
|
||||
The Settings application in Olares provides a clean, intuitive interface for configuring and managing your system. It serves as the central hub for personalizing your experience, securing your environment, integrating services, and more.
|
||||
|
||||
Settings is organized into the following sections:
|
||||
|
||||
- Manage security – Manage login devices and system security settings.
|
||||
- Manage accounts – Create and manage users within your Olares cluster.
|
||||
- Manage applications – Monitor and configure application status and behavior.
|
||||
- Manage integrations – Connect Olares to external web services and tools.
|
||||
- Customize appearance – Set system language and background preferences.
|
||||
- Configure network – Set up FRP, VPN, and edit the hosts file.
|
||||
- Configure search - Configure indexing rules to optimize your search experience.
|
||||
- Backup and restore – Create and manage backup and restore tasks for selected directories.
|
||||
- Update system – View system details and install updates.
|
||||
- Export system log – Generate and export system logs for diagnostics.
|
||||
|
||||
|
||||
|
||||
- **Users**: Manage user accounts within your Olares system.
|
||||
- **Appearance**: Personalize your system by setting the language, theme, and background wallpaper.
|
||||
- **Applications**: Configure application entrances, customize app domains, and manage app environment variables.
|
||||
- **Integration**: Centralize external connections, including cloud storages, website cookies, and SMB network credentials.
|
||||
- **VPN**: Configure secure remote access to your Olares device.
|
||||
- **Network**: Manage network routing by changing the reverse proxy and setting up the hosts file.
|
||||
- **GPU**: Allocate and monitor GPU resources for hardware-accelerated tasks.
|
||||
- **Video**: Configure system-level video playback and transcoding preferences.
|
||||
- **Search**: Set up indexing rules to optimize your global file search experience.
|
||||
- **Backup**: Create and manage backup tasks to safeguard your system data.
|
||||
- **Restore**: Recover your system data from previous backups.
|
||||
- **Advanced**: Manage repositories, view downloaded images, export system logs, and configure system-level environment variables.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Connect Olares with different services and manage cookies for web access and subscriptions — all from Integrations in Settings.
|
||||
description: Centralize third-party service connections, SMB network storage credentials, and website cookies in Olares. Extend file storage capabilities and ensure smooth access to subscriptions and automated tasks.
|
||||
---
|
||||
|
||||
# Manage integrations in Settings
|
||||
@@ -9,6 +9,7 @@ The **Integrations** section in **Settings** centralizes all services and authen
|
||||
|
||||
- **Connect services** – Link cloud storage services such as **Olares Space**, **AWS S3**, and **Tencent Cloud COS** to extend Olares’ storage capabilities.
|
||||
- **Manage cookies** – Store, import, and delete website cookies to support Olares’ access to subscription-based or restricted content.
|
||||
- **Manage SMB accounts** – Store and manage usernames and passwords for SMB network shares, making it easier to reference them when mounting SMB shares in Files.
|
||||
|
||||
## View and manage connected services
|
||||
|
||||
@@ -65,14 +66,22 @@ When a cookie expires, the system will highlight it in red.
|
||||
Expired or missing cookies may cause some subscription or web automation tasks to fail. It’s recommended to check and update cookies periodically.
|
||||
:::
|
||||
|
||||
## Manage SMB accounts
|
||||
|
||||
SMB account management allows you to centrally store usernames and passwords for accessing SMB network shares. You can view, add, or delete accounts here for easy reference when mounting SMB shares in Files.
|
||||
|
||||
1. To view SMB accounts, go to **Settings** > **Integration** > **SMB account management**. All saved SMB accounts are listed.
|
||||
2. To add an SMB account:
|
||||
|
||||
a. In **SMB account management**, click **Add account**.
|
||||
|
||||
b. In the **Add account** window, enter the username and password required to access the SMB share.
|
||||
|
||||
c. Click **Confirm**. The information is saved and displayed as a new record in the SMB account list.
|
||||
|
||||
3. To delete an account, click <i class="material-symbols-outlined">delete</i> on the right of the account record, and then click **Confirm**. The account and its credentials are removed.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
:::tip Use SMB accounts to mount shares
|
||||
- SMB credentials are stored locally and are not uploaded to the cloud. It is recommended to periodically check and update saved credentials to keep them in sync with the server.
|
||||
- Saved SMB accounts do not automatically mount shared folders, and you cannot select them directly in Files. To mount an SMB share, manually enter the server address along with the username and password saved here in Files. For more information, see [Mount SMB shares](../files/mount-SMB.md).
|
||||
:::
|
||||
|
||||
@@ -7,12 +7,6 @@ description: Learn about Olares, an open-source sovereign cloud OS for local AI.
|
||||
|
||||
Olares is an open-source personal cloud operating system designed to empower you to own and manage your digital assets locally. Instead of relying on public cloud services, you can deploy powerful open-source alternatives locally on Olares, such as Ollama for hosting LLMs, ComfyUI for image generation, and Perplexica for private, AI-driven search and reasoning. Imagine the power of the cloud, but with you in complete command.
|
||||
|
||||
:::info Open source & monetization model
|
||||
Olares follows a model similar to **Android**:
|
||||
- The **Olares OS** (the software) is fully **open source**, ensuring transparency, community collaboration, and extensibility. Check out our [GitHub](https://github.com/beclab/Olares).
|
||||
- The **hardware** (devices running Olares) can be licensed and distributed by manufacturers, enabling sustainable growth through hardware offerings and ecosystem partnerships.
|
||||
:::
|
||||
|
||||
<div class="cta">
|
||||
<a href="./get-started/">
|
||||
<div class="content">
|
||||
|
||||
51
docs/manual/space/backup-restore.md
Normal file
51
docs/manual/space/backup-restore.md
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
description: Protect your Olares instances with cloud backup and restore features. Handle snapshots, perform restore operations, and manage storage quotas in Olares Space.
|
||||
---
|
||||
:::warning Documentation does not match current experience
|
||||
We are currently updating this documentation to match the latest experience on the Olares Space platform. If there are differences, follow the actual platform.
|
||||
:::
|
||||
# Back up and restore
|
||||
|
||||
Olares Space is the official solution to back up snapshots for your Olares instances. You can restore an Olares to its most recent state whenever needed. This section provides instructions for managing backups and restores in Olares Space.
|
||||
|
||||
## View backup list
|
||||
|
||||
The backup task list shows information for each backup task, including:
|
||||
|
||||
- Initial creation time
|
||||
- Most recent snapshot time
|
||||
- Overall storage usage
|
||||
|
||||

|
||||
|
||||
Click **View Details** on a task to see its detail page. The detail page shows the storage usage since the task was created and a list of all successful snapshots.
|
||||
|
||||
:::info
|
||||
Currently, only restoring from the most recent snapshot is supported.
|
||||
:::
|
||||
|
||||
## Restore backup to the Olares Space
|
||||
|
||||

|
||||
|
||||
Restoring a snapshot to the cloud is similar to setting up a new cloud-based Olares.
|
||||
|
||||
1. Set up relevant details.
|
||||
|
||||
a. Select the cloud service provider and their data center location.
|
||||
|
||||
b. Choose the hardware configuration for the instance.
|
||||
|
||||
c. Confirm the snapshot details and enter the backup password.
|
||||
|
||||
2. Understand charges for storage and bandwidth. <br>Each instance includes a certain amount of free traffic. Any usage exceeding the quota will incur charges. For more information, see [Billing](billing.md).
|
||||
|
||||
3. Confirm the order and complete the payment. After that, the Olares begins to install.
|
||||
|
||||
:::info
|
||||
During the installation process, Olares will verify the backup password. If it is incorrect, you'll be asked to re-enter the correct one. If you forget the backup password, the restoration process won't be able to continue. In this case, please return your instance and try restoring again.
|
||||
:::
|
||||
|
||||
:::info
|
||||
To avoid conflicts or other unforeseeable problem, you must return the existing Olares that uses the same name before restoring to a cloud-based Olares.
|
||||
:::
|
||||
66
docs/manual/space/billing.md
Normal file
66
docs/manual/space/billing.md
Normal file
@@ -0,0 +1,66 @@
|
||||
---
|
||||
description: Understand Olares Space billing system with service charges and payment workflows. Learn about cloud hosting fees, usage based pricing, and promotional credit applications.
|
||||
---
|
||||
:::warning Documentation does not match current experience
|
||||
We are currently updating this documentation to match the latest experience on the Olares Space platform. If there are differences, follow the actual platform.
|
||||
:::
|
||||
# Billing
|
||||
|
||||
Olares partners with Stripe for secure payment processing. Your invoices and receipts will be sent via email, allowing you to keep records for analysis. If you have any questions during the payment process, please contact support.
|
||||
|
||||
## The scope of billing
|
||||
|
||||
The following services or products are billed:
|
||||
|
||||
- **Hosted Olares**: Prepaid product required for setting up an Olares on a cloud provider like AWS or GCS. Pricing varies depends on the provider you choose.
|
||||
- **Host instance traffic**: Postpaid charges for external traffic generated by cloud hosting out of assigned regions.
|
||||
- **Worker instance**: Adding a Worker node to a hosted Olares also incurs monthly charges. Charges will be combined to the monthly bill.
|
||||
- **Cloud storage**: Postpaid product storing system data via JuiceFS. Billed based on usage at the end of the billing cycle.
|
||||
- **Cloud backup/restore**: Backs up host data to public storage. Billed based on usage at the end of the billing cycle.
|
||||
- **Cloudflare tunnel (FRP) traffic**: Postpaid for traffic incurred by self-hosted Olares when services are accessed via public links.
|
||||
- **GPU unit**: Prepaid for GPU-related services. Charges are deducted from prepaid units based on usage.
|
||||
|
||||
|
||||
### Bill generation and payment scenarios
|
||||
|
||||
The following actions generate bills:
|
||||
|
||||
- **Creating an Olares in the cloud**: An invoice is generated immediately after you select a cloud provider and configuration. Payment is required for installation to begin.
|
||||
- **Adding/Removing workers**: Bills are generated for adding workers based on the remaining time in the billing period. Similarly, refunds are calculated when removing workers.
|
||||
- **Restoring a snapshot**: Equivalent to creating a new Olares, with monthly charges applied.
|
||||
- **Destroying an Olares**: Fees are settled up to the destruction date. Refunds are processed as applicable.
|
||||
|
||||
The monthly bill updated once per month. It includes the base subscription fees as well as any additional charges incurred during the month, such as adding a Worker, or extra traffic and storage fees.
|
||||
|
||||
## How fees are deducted monthly
|
||||
|
||||
Olares operates on a monthly billing cycle:
|
||||
- **Automatic deduction**: Your first payment will authorize automatic deductions, with the first payment method set as default. You can disable auto-deductions from the control panel if you prefer to pay manually, but make sure to settle your bills on time to avoid service interruption.
|
||||
- **Payment validity period**: For each purchase, you'll receive a bill valid for 24 hours.
|
||||
|
||||
|
||||
## Use promotional credits or coupons
|
||||
|
||||
We distribute trial credits or coupons through promotions.
|
||||
|
||||
- Once you have received trial credits, you can view them in **Billing** > **Balance History**, and apply directly to specific products when you pay.
|
||||
- Once you receive a promotional coupon codes, you can redeem them in **Billing** > **Coupons**. It could be a discount to your plans, plan subscriptions, Olares memberships, and more.
|
||||
|
||||
:::info
|
||||
Trial credits or coupons are non-refundable. If you request a refund, the system will only refund your actual payment.
|
||||
:::
|
||||
|
||||
## FAQs
|
||||
|
||||
### Will I be charged if someone accesses the WordPress site deployed on Olares?
|
||||
|
||||
Yes, charges will occur from both Cloudflare for the traffic going through Cloudflare FRP tunnel. It mainly helps to hide the real IP of Olares and provides security protection against Distributed Denial of Service (DDoS) and other threats. If you host Olares on the cloud, traffic fee from your chosen vendor will apply.
|
||||
|
||||
|
||||
### What happens if my bill is less than $1?
|
||||
|
||||
If your total bill is under $1, it won't trigger a card charge. Instead, this amount will be added to your balance and rolled into the next bill.
|
||||
|
||||
### How do I resolve a negative balance?
|
||||
|
||||
A negative balance doesn't always mean you owe money. If you have a negative balance, check the **Billing** > **Balance** section for details. Pay any outstanding amounts to avoid service interruptions.
|
||||
89
docs/manual/space/create-olares.md
Normal file
89
docs/manual/space/create-olares.md
Normal file
@@ -0,0 +1,89 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Set up your cloud based Olares instance in Olares Space. Configure system resources, monitor installation progress, and activate your instance with proper credentials.
|
||||
---
|
||||
:::warning Documentation does not match current experience
|
||||
We are currently updating this documentation to match the latest experience on the Olares Space platform. If there are differences, follow the actual platform.
|
||||
:::
|
||||
# Create a cloud-based Olares
|
||||
|
||||
Cloud-based Olares offer a convenient deployment option, enabling you to set up an Olares environment without managing hardware directly.
|
||||
This section provides a step-by-step guide to creating and managing your cloud-based Olares.
|
||||
|
||||
:::info
|
||||
- The **Host Service** is currently in an invite-only beta phase. To access the cloud-based Olares, contact us for an invitation.
|
||||
- If you are looking for information about setting up a self-hosted Olares, refer to the [Getting Started Guide](../get-started/index.md).
|
||||
:::
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Ensure you get an Olares ID to log in to Olares Space and activate the Olares instance.
|
||||
|
||||
## Create an Olares
|
||||
|
||||
1. Log in to [Olares Space](https://space.olares.com/) by scanning the QR code using LarePass.
|
||||
2. Navigate to the **Cluster** page and select the second option to start creating.
|
||||
|
||||

|
||||
3. Configure the environment for installation as below:
|
||||
- **Select Cloud Provider**: Choose a cloud service provider and the data center location closest to your users or workloads.
|
||||
- **Hardware Configuration**: Select the instance's CPU, RAM, and storage resources.
|
||||
- **Olares Version & Kubernetes Setup**: Choose the appropriate version of Olares and the Kubernetes/K3S solution to be installed.
|
||||
|
||||
:::info
|
||||
If you intend to host large language models (LLMs), select the **Alibaba Cloud Hong Kong** region. Currently, it is the only region that offers instances with shared GPU services.
|
||||
:::
|
||||
|
||||
4. Review the fees for storage and traffic.
|
||||
|
||||

|
||||
|
||||
:::info
|
||||
Each instance comes with a set amount of free storage and bandwidth. If your usage exceeds these quotas, additional fees will apply based on your cloud provider's pricing.
|
||||
:::
|
||||
5. Review your order details, including instance configuration, selected options, and fees.
|
||||
6. Complete the payment to initiate the installation process.
|
||||
|
||||
## Monitor installation
|
||||
|
||||
The creation and installation of your cloud-based Olares typically take around 10 minutes. During this time, you can monitor the progress and logs in real-time.
|
||||
|
||||
### System statuses
|
||||
|
||||
The installation follows several key stages, represented by different statuses:
|
||||
|
||||
| Status | Description |
|
||||
|------------------------|-------------------------------------------------------------------------------|
|
||||
| **Unpaid** | Instance created but pending payment. Can be canceled. |
|
||||
| **Fetching** | Payment confirmed. System is creating resources. |
|
||||
| **Queuing** | Resource creation request has been submitted. |
|
||||
| **Pending** | Resources created. Waiting for OS installation. |
|
||||
| **Installing** | OS installation is in progress. |
|
||||
| **Restoring** | OS restoration is in progress from backup. |
|
||||
| **Restore_error** | Restoration failed because of incorrect snapshot password. |
|
||||
| **Restarting** | System is restarting. |
|
||||
| **Stopping** | System is shutting down. |
|
||||
| **Starting** | System is starting up. |
|
||||
| **Running** | System is operating normally. You can restart, stop, or destroy the instance. |
|
||||
| **Stopped** | System is not running. You can restart or destroy the instance. |
|
||||
| **Errored** | System encountered an error during resource creation or installation. |
|
||||
| **Destroying** | Instance is being destroyed. |
|
||||
| **Destroyed** | Instance has been destroyed. |
|
||||
| **Canceled** | Instance is terminated due to cancellation or payment issues. |
|
||||
| **Pending Activation** | System is waiting for activation. Will start after activations. |
|
||||
|
||||
### Real-time logs
|
||||
|
||||
Click **Log** to view detailed logs and monitor the installation process in real time.
|
||||
|
||||
## Activate Olares
|
||||
|
||||
When the installation enters the **Pending Activation** state, activate Olares:
|
||||
|
||||
1. Click **Activation**. A pop-up window will display Olares ID, one-time password, and a wizard URL.
|
||||
|
||||

|
||||
|
||||
2. Access the wizard URL in your browser, and use the one-time password to log into Olares for the first time.
|
||||
3. Change the Olares password via LarePass when prompted.
|
||||
4. Follow the on-screen instructions to finish the rest of activation process.
|
||||
85
docs/manual/space/host-domain.md
Normal file
85
docs/manual/space/host-domain.md
Normal file
@@ -0,0 +1,85 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Set up custom domains in Olares Space with domain verification and DNS configuration. Create organizational Olares IDs and manage domain settings for your team.
|
||||
---
|
||||
:::warning Documentation does not match current experience
|
||||
We are currently updating this documentation to match the latest experience on the Olares Space platform. If there are differences, follow the actual platform.
|
||||
:::
|
||||
# Set up a custom domain
|
||||
|
||||
Whether you're an organizational user wanting employees to use a company-specific domain for login, or you simply wish to use a domain that you own, Olares Space allows you to set up a custom domain for easy access.
|
||||
|
||||
This guide walks you through adding your own domain for your Olares system on Olares Space.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
:::info
|
||||
A new domain can only be bound if the account is in the DID stage. If the account has already been bound with an Olares ID, it means that the account is already associated with a Domain.
|
||||
:::
|
||||
|
||||
Before creating and configuring your own domain, make sure that:
|
||||
|
||||
- **DID account status**: Ensure your account is in DID status (i.e., not yet bound to an Olares ID).
|
||||
|
||||
- **Domain Name**: Ensure you have a domain name registered through a domain registrar. The domain should not already be bound to another account in Olares Space.
|
||||
|
||||
- **LarePass app**: Make sure the LarePass app is installed on your phone, as it is required for Verifiable Credential and domain management tasks.
|
||||
|
||||
- **Access to the DNS settings of your domain**: This is for configuring the TXT record and NS record.
|
||||
|
||||
## Add your domain
|
||||
|
||||
When you have everything ready, take the steps below to add your domain in Olares Space.
|
||||
|
||||
1. In the Olares Space console, navigate to **Domain** > **Domain Name Setup**, and enter your custom domain as instructed.
|
||||
|
||||

|
||||
|
||||
2. Add a TXT record for your domain to confirm your domain ownership. The system will verify your configuration. Once verified, the domain setup status will update automatically to **Await NS Record for Your Domain**.
|
||||
|
||||

|
||||
|
||||
3. Add NS records to allow Olares Space to configure DNS for your domain.
|
||||
|
||||

|
||||
|
||||
The system will verify your configuration. Once verified, the domain status will update to **Awaiting the application for the domain's Verifiable Credential**.
|
||||
:::tip Note
|
||||
Once verification is successful, do not modify the NS record. Doing so will cause the custom domain resolution to fail, making it inaccessible.
|
||||
:::
|
||||
|
||||

|
||||
|
||||
4. Launch your LarePass app, and navigate to **Organization Olares ID** > **Create an Organization**. You should see your domain listed.
|
||||
|
||||
5. Click on the domain name to store the domain name on blockchain. When it's done, the domain setup status should change to **Awaiting rule configuration** on Olares Space.
|
||||
|
||||
So far you have successfully associated your domain with your DID. You can now continue to [set the email invitation rule](manage-domain.md#set-email-invitation-rules) and create an organization Olares ID using the domain.
|
||||
|
||||
## Create an Org Olares ID
|
||||
|
||||
Now that your organization has a verified domain name, you or other members you invite can create an Olares ID using this domain.
|
||||
|
||||

|
||||
|
||||
1. In the LarePass app, navigate to **Organization Olares ID** > **Join an existing organization**.
|
||||
2. Enter your organization's domain name and click **Continue**. Recheck whether your domain name has been verified and configured if an error occurs.
|
||||
3. Bind the VC via your email accounts. Currently, only Gmail and Google Workspace email are supported.
|
||||
|
||||
Upon completion, you will receive an Organization Olares ID. Now you can go ahead to [Activate Olares](../get-started/activate-olares).
|
||||
|
||||
## Domain status and processing
|
||||
|
||||
After submitting a domain name, several steps are necessary to validate the entered domain.
|
||||
|
||||
The table below explains different domain statuses and the corresponding actions required:
|
||||
|
||||
| Status | Action Required |
|
||||
|-----------------------------------------------------------------|---------------------------------------------------------------|
|
||||
| Awaiting TXT record configuration | Add a TXT record |
|
||||
| Awaiting NS record configuration | Add NS records |
|
||||
| Awaiting the application for the domain's Verifiable Credential | Complete blockchain domain application on mobile |
|
||||
| Awaiting submission of the domain's Verifiable Presentation | Complete blockchain domain application on mobile |
|
||||
| Awaiting rule configuration | Set up email invitation rules for organization members |
|
||||
| Binding | Wait for binding with Olares, you can access the details page |
|
||||
| Allocated | Bound to Olares, you can access the details page |
|
||||
23
docs/manual/space/index.md
Normal file
23
docs/manual/space/index.md
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
description: Discover Olares Space platform for managed cloud hosting of Olares instances. Explore infrastructure services, host services, account management, and billing features for efficient cloud deployment.
|
||||
---
|
||||
# Olares Space overview
|
||||
|
||||
Olares Space is the fully managed offering of Olares on public clouds. It provides two categories of services:
|
||||
|
||||
- **Infrastructure service** – Manages data backup, custom domain configuration, reverse proxy, and shared GPU resources.
|
||||
- **Host service** – Hosts and manage Olares instances on public cloud platforms.
|
||||
|
||||
Olares Space account is associated with your Olares IDs or DIDs. You can log in to Olares Space by scanning QR code using LarePass.
|
||||
|
||||
This section walks you through usages of Olares Space, covering:
|
||||
|
||||
- [Log in to/off Olares Space](manage-accounts.md)
|
||||
- [Host Olares](create-olares.md)
|
||||
- [Manage Olares](manage-olares.md)
|
||||
- [Host custom domains](host-domain.md)
|
||||
- [Manage organization domains](manage-domain.md)
|
||||
- [Back up & Restore Olares](backup-restore.md)
|
||||
- [Usage and Billing](billing.md)
|
||||
|
||||
|
||||
51
docs/manual/space/manage-accounts.md
Normal file
51
docs/manual/space/manage-accounts.md
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
description: Learn how to access and manage Olares Space accounts using LarePass authentication.
|
||||
---
|
||||
:::warning Documentation does not match current experience
|
||||
We are currently updating this documentation to match the latest experience on the Olares Space platform. If there are differences, follow the actual platform.
|
||||
:::
|
||||
# Manage accounts in Olares Space
|
||||
|
||||
This guide walks you through common account operations with Olares Space, including logging in, managing multiple accounts, and logging out.
|
||||
|
||||
## Log in to Olares Space
|
||||
|
||||
Olares Space uses a decentralized ID (DID) or Olares ID for authentication. Make sure you already have obtained your credentials on your LarePass.
|
||||
|
||||
1. In the LarePass app, select the DID or Olares ID you wish to use to log in.
|
||||
2. Open https://space.olares.com/ in your browser.
|
||||
3. Scan the QR code using LarePass.
|
||||
|
||||
:::info
|
||||
The features and services available on Olares Space vary depending on whether you use a DID or Olares ID for login.
|
||||
- **Logging in with a DID** allows you to set your own domain since no domain is associated to the account. However, you must bind the DID to an Olares ID before you can activate an Olares device.
|
||||
- **Logging in with an Olares ID** enables you to create an Olares, provided the name isn't already linked to another Olares device. However, you cannot use your custom domain since your Olares ID already corresponds to a unique domain.
|
||||
:::
|
||||
|
||||
|
||||
## Log out
|
||||
|
||||
To log out of your account:
|
||||
|
||||
1. Click your avatar in the top-right corner.
|
||||
2. Select **Log Out**.
|
||||
|
||||
Alternatively, you can:
|
||||
|
||||
1. Choose **Switch Account** from the menu.
|
||||
2. Click <i class="material-symbols-outlined">logout</i> next to any listed account.
|
||||
|
||||
|
||||
## Manage multiple accounts
|
||||
|
||||
Each Olares ID is linked to only one Olares. With multi-account management in Olares Space, you can switch between accounts effortlessly — perfect for managing multiple Olares IDs and instances.
|
||||
|
||||
To add an account:
|
||||
|
||||
1. Click your avatar in the top-right corner.
|
||||
2. In the pop-up menu, select **Import Account**.
|
||||
3. Launch LarePass, and scan the QR code to log in.
|
||||
|
||||
Once you've added multiple accounts, switch between them using the **Switch Account** option in the menu. If the account is logged out, you'll be redirected to the QR code login page.
|
||||
|
||||
|
||||
43
docs/manual/space/manage-domain.md
Normal file
43
docs/manual/space/manage-domain.md
Normal file
@@ -0,0 +1,43 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Configure domain settings in Olares Space with email invitation rules and member management. Administrate organizational Olares IDs for seamless team collaboration.
|
||||
---
|
||||
:::warning Documentation does not match current experience
|
||||
We are currently updating this documentation to match the latest experience on the Olares Space platform. If there are differences, follow the actual platform.
|
||||
:::
|
||||
# Manage your domain
|
||||
|
||||
You must [add a domain](host-domain.md#add-your-domain) before managing it. Once your domain is set up, you can configure email invitation rules for organization members and invite them to create their own organizational **Olares ID** via email.
|
||||
|
||||
## Set email invitation rules
|
||||
|
||||
Most companies use a standard domain suffix for their team members' emails, like `A@myteam.com` for person A or `B@myteam.com` for person B. However, sometimes, team members might use emails in different domains. To accommodate these scenarios, Olares provides two types of rules for adding organization members' emails:
|
||||
|
||||

|
||||
|
||||
- **Fixed email suffix**: Use this option when all team members share the same email domain. Enter your organization's domain suffix (example: @company.com). Any email matching this suffix can be associated with your organization's Olares ID.
|
||||
|
||||
- **Specified email address**: Use this option if your organization doesn't have a corporate email suffix. You need to manually add the email address for each member of the organization.
|
||||
|
||||
:::info
|
||||
- Currently, only Gmail is supported for both rule types.
|
||||
- Emails that have been used to create organizational Olares IDs will appear in the member list and cannot be deleted.
|
||||
- Emails that are manually added and have not been used to create the Olares ID appear as "unbound" and can be removed.
|
||||
:::
|
||||
|
||||
## Manage members
|
||||
|
||||
After setting email rules, you can add or remove members under your organization.
|
||||
|
||||

|
||||
|
||||
### Add a member
|
||||
|
||||
To add a member:
|
||||
|
||||
1. On the domain management page, add members to the organization by entering their email address.
|
||||
2. Notify the corresponding users to use their email addresses to [create an organizational Olares ID](host-domain.md#create-an-org-olares-id).
|
||||
|
||||
### Remove a member
|
||||
|
||||
You can remove email addresses that haven't been used to create an Olares ID. Once an email address is associated with an organization's Olares ID, it cannot be removed.
|
||||
54
docs/manual/space/manage-olares.md
Normal file
54
docs/manual/space/manage-olares.md
Normal file
@@ -0,0 +1,54 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Control your Olares instances through system monitoring, worker node management, and shared GPU solutions. Track storage usage, traffic consumption and maintain instance health.
|
||||
---
|
||||
:::warning Documentation does not match current experience
|
||||
We are currently updating this documentation to match the latest experience on the Olares Space platform. If there are differences, follow the actual platform.
|
||||
:::
|
||||
# Manage Olares
|
||||
|
||||
This page covers Olares management tasks in Olares Space, including monitoring system data, adding worker nodes, and managing cloud services.
|
||||
|
||||
## View system status
|
||||
|
||||
You can monitor the system status of Olares through **Olares Space**:
|
||||
|
||||
1. In your LarePass app, go to **Settings** > **Integration**.
|
||||
2. Click <i class="material-symbols-outlined">add</i> in the top right corner and link your Olares Space account to the Olares device. This authorizes Olares Space's access to your system data.
|
||||
3. Log into [**Olares Space**](https://space.olares.com/).
|
||||
4. On the **Olares** page, view **Storage usage** and **Traffic consumption** in the system panel.
|
||||
|
||||

|
||||
|
||||
:::info
|
||||
For self-hosted Olares users, it's important to monitor **Traffic statistics** for intranet penetration services, and **Storage usage** for backup services. These services may incur charges based on usage.
|
||||
:::
|
||||
|
||||
## Add worker nodes
|
||||
|
||||
For cloud Olares users, you can improve performance by adding worker nodes:
|
||||
|
||||
1. Click <i class="material-symbols-outlined">more_horiz</i> in the upper right corner, and select **Add Worker**.
|
||||
2. On the guide page, choose your preferred hardware configuration.
|
||||
3. Review the fees for storage and traffic.
|
||||
4. Confirm your order and submit.
|
||||
|
||||
## Return Olares
|
||||
|
||||
If you no longer need your Olares service, you can return the instance by following these steps:
|
||||
|
||||
1. Click <i class="material-symbols-outlined">more_horiz</i> in the upper right corner.
|
||||
2. Select **Destroy Olares**.
|
||||
3. Confirm the action and settle your usage:
|
||||
- If you are eligible for a refund, the amount will be credited back to your account balance.
|
||||
- If additional payment is required, please confirm and settle the payment.
|
||||
|
||||
## Shared GPU solution
|
||||
|
||||
Currently, we do not offer cloud instances that include GPUs. However, for users who need GPU capabilities, we provide a shared GPU solution via rCuda. This solution is ideal for applications like Stable Diffusion, costing approximately $0.02 per image.
|
||||
|
||||
:::info
|
||||
For Large Language Models (LLMs), the shared GPU solution is still under development and may require further enhancements.
|
||||
:::
|
||||
|
||||
If you need GPU support, please reach us on [Discord](https://discord.gg/olares).
|
||||
95
docs/one/access-olares-via-vpn.md
Normal file
95
docs/one/access-olares-via-vpn.md
Normal file
@@ -0,0 +1,95 @@
|
||||
---
|
||||
outline: [2,3]
|
||||
description: Learn how to access your Olares services securely using the LarePass VPN.
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: Olares, LarePass VPN, local access
|
||||
---
|
||||
|
||||
# Access Olares services securely using LarePass VPN
|
||||
|
||||
Typically, you access Olares services through a browser using a URL like `https://desktop.<username>.olares.com`. This way, you can reach your services from any device at any time.
|
||||
|
||||
While this address works from anywhere, it's recommended to enable the LarePass VPN to ensure your connection is always secure and efficient. The client automatically detects your network environment and selects the best connection method:
|
||||
- **At home**: It establishes a direct **Intranet** connection to allow faster file transfers on your local network.
|
||||
- **From remote**: It switches to a secure encrypted tunnel to ensure you remain connected safely when accessing remotely.
|
||||
|
||||
## Prerequisites
|
||||
**Hardware** <br>
|
||||
- Your Olares One is set up and accessible.
|
||||
- A client device (computer or mobile phone) with internet access.
|
||||
|
||||
## Step 1: Download LarePass
|
||||
To use the secure VPN connection, the LarePass client must be installed on the device you are using to access Olares.
|
||||
|
||||
- **Mobile**: Use the LarePass app installed during the Olares ID creation process.
|
||||
- **Desktop**: Download and install the LarePass desktop client.
|
||||
|
||||
1. Visit <AppLinkGlobal />.
|
||||
2. Download the version compatible with your operating system.
|
||||
3. Install the application and log in with your Olares ID.
|
||||
|
||||
## Step 2: Enable LarePass VPN
|
||||
Once installed, enable the VPN directly on the device.
|
||||
|
||||
:::tip Always enable VPN for remote access
|
||||
Keep LarePass VPN enabled. It automatically prioritizes the fastest available route to ensure you always get the best speed possible without manual switching.
|
||||
:::
|
||||
:::info iOS and macOS setup
|
||||
On iOS or macOS, you may be prompted to add a VPN Configuration to your system settings the first time you enable the feature. Allow this to complete the setup.
|
||||
:::
|
||||
|
||||
<tabs>
|
||||
<template #On-LarePass-mobile-client>
|
||||
|
||||
1. Open the LarePass app and go to **Settings**.
|
||||
2. In the **My Olares** card, toggle on the VPN switch.
|
||||
|
||||

|
||||
</template>
|
||||
<template #On-LarePass-desktop-client>
|
||||
|
||||
1. Open the LarePass app and click your avatar in the top-left corner to open the user menu.
|
||||
2. Toggle on the switch for **VPN connection**.
|
||||
|
||||

|
||||
</template>
|
||||
</tabs>
|
||||
|
||||
## Step 3: Verify the connection type
|
||||
Once enabled, check the status indicator in LarePass to confirm how you are connected:
|
||||
|
||||
| Status | Description |
|
||||
|:-------------|:---------------------------------------------------------|
|
||||
| **Intranet** | Direct connection via your local LAN IP. Fastest speeds. |
|
||||
| **P2P** | Direct encrypted tunnel between devices. High speed. |
|
||||
| **DERP** | Routed via a secure relay server. Used as a fallback. |
|
||||
|
||||
## Troubleshooting
|
||||
### Why doesn't LarePass VPN work on my Mac anymore?
|
||||
If the VPN was working previously but has stopped, you might need to reset the system extension.
|
||||
|
||||
:::info
|
||||
Depending on your macOS version, the UI might look slightly different.
|
||||
:::
|
||||
1. Open System Settings, search for "Extension", and select **Login Items & Extensions**.
|
||||
2. Scroll to the **Network Extensions** section and click the info icon (ⓘ) to view loaded extensions.
|
||||
3. Find LarePass, click the three dots (...), and select **Delete Extension**.
|
||||
4. Restart your Mac.
|
||||
5. Open the LarePass desktop client and re-enable the VPN.
|
||||
|
||||
### Why can't I enable LarePass VPN on Windows?
|
||||
Third-party antivirus software may mistakenly flag the LarePass client, blocking the VPN service.
|
||||
|
||||
If prompted by your antivirus when opening LarePass for the first time, allow the application to continue.
|
||||
|
||||
If the VPN still fails to enable:
|
||||
1. Check your antivirus software to see if LarePass was blocked.
|
||||
2. Add the main LarePass executable to the allowlist or exclusions of your antivirus.
|
||||
3. Restart LarePass and try enabling the VPN again.
|
||||
|
||||
## Learn more
|
||||
- [Access Olares locally](../manual/best-practices/local-access.md): Explore detailed instructions for all available local network connection methods.
|
||||
- [Access Olares terminal](access-terminal-ssh.md): Learn how to connect to the host shell using SSH or the Control Hub web terminal.
|
||||
- [Network](../developer/concepts/network.md): Learn about the different entry points in Olares.
|
||||
75
docs/one/access-terminal-ssh.md
Normal file
75
docs/one/access-terminal-ssh.md
Normal file
@@ -0,0 +1,75 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to access the Olares One host terminal for command-line usage via Control Hub or SSH.
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: SSH, Olares Terminal, Control Hub
|
||||
---
|
||||
|
||||
# Connect to Olares One via SSH <Badge type="tip" text="10 min" />
|
||||
|
||||
Certain development and operational tasks, such as connecting Olares One with other devices to form a cluster, require direct command-line access.
|
||||
|
||||
Olares One is primarily used as a headless device, so you can access the terminal remotely without a monitor or keyboard connected to it.
|
||||
|
||||
You can connect to the host shell using one of the following methods:
|
||||
- **Control Hub Terminal** is a web-based interface for direct root access. It is recommended for quick tasks.
|
||||
- **Secure Shell (SSH)** is the standard protocol for remote management and complex operations.
|
||||
|
||||
## Prerequisites
|
||||
**Hardware**
|
||||
- Your Olares One is set up and connected to a network.
|
||||
- A client device, such as a computer, is required to access the terminal.
|
||||
|
||||
**Experience**
|
||||
- Basic familiarity with terminal commands and the command-line interface (CLI).
|
||||
|
||||
## Method 1: Access via Control Hub
|
||||
For quick access without configuring SSH clients, you can use the web-based terminal built directly into Control Hub.
|
||||
|
||||
1. Open the Control Hub app.
|
||||
2. In the left sidebar, under the **Terminal** section, click **Olares**.
|
||||

|
||||
|
||||
You can now execute system commands directly in the embedded terminal.
|
||||
|
||||
:::tip Run as `root`
|
||||
The Control Hub terminal runs as `root` by default. You do not need to use `sudo` before commands.
|
||||
:::
|
||||
|
||||
## Method 2: Access via SSH
|
||||
|
||||
SSH establishes a secure session over the network, allowing you to use command-line operations for Olares One on your current device.
|
||||
|
||||
### Step 1: Get IP address of Olares One
|
||||
To connect via SSH, you first need to find the internal IP address of your Olares One.
|
||||
|
||||
1. Open the LarePass app, and go to **Settings** > **System** to navigate to the **Olares management** page.
|
||||

|
||||
|
||||
2. Tap on the device card.
|
||||
3. Scroll down to the **Network** section. You can find the **Intranet IP** there.
|
||||
|
||||
:::tip Check via Control Hub
|
||||
You can check the IP using the `ifconfig` command in the Control Hub terminal.
|
||||
|
||||
Look for your active connection, typically named `enp3s0` (wired) or `wlo1` (wireless). The IP address follows `inet`.
|
||||
:::
|
||||
|
||||
### Step 2: Check SSH password in Vault
|
||||
|
||||
<!--@include: ./reusables-reset-ssh.md{7,16}-->
|
||||
|
||||
### Step 3: Connect via SSH
|
||||
|
||||
1. Open a terminal on your computer.
|
||||
2. Run the `ssh` command using Olares One's local IP address:
|
||||
```bash
|
||||
# The default username for Olares One is olares.
|
||||
ssh olares@<host_ip_address>
|
||||
```
|
||||
3. Enter the password when prompted.
|
||||
|
||||
## Reset SSH password
|
||||
<!--@include: ./reusables-reset-ssh.md{19,}-->
|
||||
182
docs/one/ace-step.md
Normal file
182
docs/one/ace-step.md
Normal file
@@ -0,0 +1,182 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Step-by-step guide to installing ACE-Step AI on Olares, generating songs with lyrics or instrumentals, optimizing audio with retake and repainting, and using Audio2Audio to transform reference audio into new music.
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: ACE-Step, AI music
|
||||
---
|
||||
# Create AI-generated music with ACE-Step <Badge type="tip" text="15 min" />
|
||||
|
||||
ACE-Step is an open-source music generation model developed by ACE Studio and StepFun. It generates music from lyrics and style tags, and supports editing tools such as retake, repainting, and Audio2Audio.
|
||||
|
||||
This guide walks you through installation, first-time generation, and basic editing workflows on Olares One.
|
||||
|
||||
## Learning objectives
|
||||
|
||||
By the end of this tutorial, you will learn how to:
|
||||
- Generate songs with lyrics, tags, and stylistic controls.
|
||||
- Locate and download your generated audio files.
|
||||
- Refine tracks by adjusting the style, editing sections, extending the song, or using a reference clip to reshape it.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before you begin, make sure you have:
|
||||
- Olares One connected to a stable network.
|
||||
- Sufficient disk space to download models.
|
||||
|
||||
## Install and set up ACE-Step
|
||||
|
||||
With your Olares device ready, follow these steps to install ACE-Step and begin generating music.
|
||||
|
||||
### Install ACE-Step
|
||||
|
||||
Follow these steps to install ACE-Step.
|
||||
|
||||
1. Open Market, and search for "ACE-Step".
|
||||

|
||||
|
||||
2. Click **Get**, then **Install**.
|
||||
3. Wait a few minutes for the installation to complete.
|
||||
|
||||
### Download required models on first-time launch
|
||||
|
||||
Once installation finishes, open ACE-Step from Launchpad.
|
||||
|
||||
Olares will automatically download and install required models. A **Download Manager** window will appear, showing model size and download progress.
|
||||
{width=500}
|
||||
|
||||
After the download completes, the ACE-Step generation interface will open automatically.
|
||||
|
||||
## Generate your first track
|
||||
|
||||
Follow these steps to set your parameters and begin music generation.
|
||||
|
||||
### Set basic parameters
|
||||
|
||||
- **Audio Duration**: Drag the slider to choose the track length (up to 240 seconds). If left at the default (`-1`), the audio length will be random.
|
||||
- **Format**: Select the audio format from `MP3`, `ogg`, `wav`, and `flac`.
|
||||
:::tip MP3 recommended
|
||||
It's recommended to change the default output format to MP3. This results in much smaller file sizes, faster loading, and a better overall experience.
|
||||
:::
|
||||
- **Lora Name or Path**: Select a LoRA model if available. Currently, only a Chinese rap LoRA is available by default.
|
||||
- **Tags**: Enter descriptors for style, mood, rhythm, or instruments, separated by commas. For example:
|
||||
|
||||
```plain
|
||||
Chinese Rap, J-Pop, Anime, kawaii future bass, Female vocals, EDM, Super Fast
|
||||
```
|
||||
- **Lyrics**: Enter your lyrics. Use structural tags to organize the song flow:
|
||||
- `[verse]` for the main verse.
|
||||
- `[chorus]` for the chorus.
|
||||
- `[bridge]` for the bridge.
|
||||
|
||||
:::tip Generate an **instrumental-only** track
|
||||
Enter the tag `[instrumental]` or `[inst]` in the **Lyrics** area to generate music without vocals.
|
||||
:::
|
||||
|
||||
### Start generation
|
||||
|
||||
1. Click **Generate** when all parameters are set.
|
||||
2. Once generation is complete, click the **Play** button to preview your track.
|
||||
{width=80%}
|
||||
|
||||
### Save the generated music
|
||||
|
||||
You can save your generated music via two methods.
|
||||
|
||||
<tabs>
|
||||
<template #Direct-download>
|
||||
|
||||
Click the <i class="material-symbols-outlined">download</i> button in the upper right corner to save the audio file directly to your local device.
|
||||
</template>
|
||||
<template #From Olares Files>
|
||||
|
||||
1. Open Files.
|
||||
2. Navigate to: `/Home/AI/output/acestepv2`.
|
||||
3. Right-click the generated audio file and save it to your local device.
|
||||
</template>
|
||||
</tabs>
|
||||
|
||||
## Optimize your audio
|
||||
|
||||
ACE-Step offers powerful tools to refine and modify specific parts of your generated track.
|
||||
|
||||
### Regenerate the entire segment
|
||||
|
||||
You can generate a new version of the entire track.
|
||||
|
||||
1. Click the **retake** tab.
|
||||
2. Adjust the **variance** slider:
|
||||
- Higher values: Create a significantly different version.
|
||||
- Lower values: Keep the new version closer to the original.
|
||||
3. Click **Retake** and wait for the generation.
|
||||
|
||||
{width=90%}
|
||||
|
||||
### Regenerate a specific section
|
||||
|
||||
You can update only a selected time range while keeping the rest of the track unchanged.
|
||||
|
||||
1. Click the **repainting** tab.
|
||||
2. Adjust the **variance** slider:
|
||||
- Higher values: Create a significantly different version of the selected section.
|
||||
- Lower values: Keep the new section closer to the original.
|
||||
3. Adjust the **Repaint Start Time** and **Repaint End Time** sliders to select the section you want to regenerate.
|
||||
4. Select the source for repainting:
|
||||
- `text2music`: The original song generated via Text2Music.
|
||||
- `last_repaint`: The previous repainted version.
|
||||
- `upload`: The audio you uploaded.
|
||||
5. Click **Repaint** and wait for the generation.
|
||||
|
||||
{width=90%}
|
||||
|
||||
### Edit lyrics
|
||||
|
||||
You can edit lyrics to modify specific lines without affecting the rest of the track.
|
||||
|
||||
1. Click the **edit** tab.
|
||||
2. Copy the original lyrics and paste them into the **Edit Lyrics** area.
|
||||
3. Modify only the specific lines you wish to change.
|
||||
4. Under **Edit Type**, select `only_lyrics`.
|
||||
5. Click **Edit** and wait for the generation.
|
||||
|
||||
{width=90%}
|
||||
|
||||
### Edit tags
|
||||
|
||||
You can edit tags to reset the style or timbre of the track.
|
||||
|
||||
1. Click the **edit** tab.
|
||||
2. Enter the new style or timbre tags (e.g., `hard rock` or `male tenor vocals`) in the **Edit Tags** area.
|
||||
3. In **Edit Type**, select `remix`.
|
||||
4. Click **Edit** and wait for the generation.
|
||||
|
||||

|
||||
|
||||
### Extend the audio
|
||||
|
||||
You can extend the length of the original track by adding new audio before or after it.
|
||||
|
||||
1. Click the **extend** tab.
|
||||
2. Adjust the sliders:
|
||||
- **Left Extend Length**: Add new audio *before* the original audio.
|
||||
- **Right Extend Length**: Add new audio *after* the original audio.
|
||||
3. Select the source to extend:
|
||||
- `text2music`: The original song generated via Text2Music.
|
||||
- `last_extend`: The previous extended version.
|
||||
- `upload`: The audio you uploaded.
|
||||
4. Click **Extend** and wait for the generation.
|
||||
|
||||

|
||||
|
||||
## Audio2Audio
|
||||
|
||||
You can create a new track based on a **reference audio** clip you upload. The AI analyzes characteristics such as timbre, rhythm, and style to produce a track with a similar feel.
|
||||
1. Check the box to **Enable Audio2Audio**.
|
||||
2. Upload an existing music clip to serve as the reference.
|
||||
3. Adjust the **Refer audio strength** slider. A higher value results in music more similar to the reference track.
|
||||
4. Select a **Preset** style, or keep the default.
|
||||
5. Set other parameters as needed.
|
||||
6. Click **Generate** to create new music with an atmosphere similar to the reference audio.
|
||||
|
||||

|
||||
136
docs/one/backup-resotre.md
Normal file
136
docs/one/backup-resotre.md
Normal file
@@ -0,0 +1,136 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to back up and restore files and app data on Olares One.
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: Back up, restore
|
||||
---
|
||||
# Back up and restore data <Badge type="tip" text="15 min" />
|
||||
|
||||
Olares One provides a built-in backup feature to protect important files and app data. You can create full and incremental backups, store them on local or network storage, and restore data from any available snapshot when needed.
|
||||
|
||||
## Learning objectives
|
||||
|
||||
By the end of this tutorial, you will learn how to:
|
||||
- Create backup tasks for folders and supported applications.
|
||||
- Configure backup locations, schedules, and password protection.
|
||||
- Manage existing backup tasks.
|
||||
- Restore files to a specific directory or recover app data from a snapshot.
|
||||
|
||||
## Back up your data
|
||||
|
||||
A backup task defines what to back up, where to store it, and when it runs.
|
||||
|
||||
### Create a backup task
|
||||
|
||||
1. Go to **Settings** > **Backup**.
|
||||
2. Click **Add backup task**. If prompted, select **Back up files** or **Back up apps** to proceed.
|
||||
3. On the Add backup task page, configure the following settings:
|
||||
|
||||
| Field | Description |
|
||||
|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| **Backup location** | <ul><li>**Local path**: Select an external device such as a USB drive, SMB <br>share, or external hard drive.</li><br><li>**Olares Space**: Scan the QR code in **Settings** > your avatar > **Olares<br> Space** via LarePass.<br></li><li> **AWS S3 or Tencent COS**: Click **Add account** in the dialog, or go to <br>**Settings** > **Integrations** > **Link your accounts & data**.</li></ul> |
|
||||
| **Region** | Cloud only. Select the region of your storage bucket. |
|
||||
| **Backup path** | File backup only. Browse and select the specific directory to back up. |
|
||||
| **Select application** | App backup only. Select the app to back up. Currently, only Wise is<br> supported. |
|
||||
| **Backup name** | Enter a recognizable task name. We recommend including the<br> purpose and a timestamp. |
|
||||
| **Snapshot frequency** | Choose **Every day**, **Every week**, or **Every month**. |
|
||||
| **Run backup at** | Set the specific time of day for the backup to run. |
|
||||
| **Backup password** | Set a password to encrypt your snapshots. |
|
||||
| **Confirm password** | Re-enter the password you set. |
|
||||
|
||||

|
||||
4. Click **Submit** to create and start the task.
|
||||
- The first run will be a full backup.
|
||||
- Subsequent runs will be incremental backups (saving only changes).
|
||||
|
||||
### Manage backup tasks
|
||||
|
||||
Once created, tasks appear in the list. Click the arrow <i class="material-symbols-outlined">chevron_right</i> next to a task to view details.
|
||||
|
||||
| Action | Description |
|
||||
|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| **Manage** | <ul><li> **Edit**: Modify snapshot frequency and time.<br></li><li> **Pause**: Pause the task.<br></li><li> **Delete**: Remove the task and all associated snapshots.</li></ul> |
|
||||
| **Snapshot now** | Run a backup immediately. |
|
||||
|
||||
{width=85% style="display:block;margin-left:0;margin-right:auto;"}
|
||||
|
||||
### View snapshot records
|
||||
|
||||
At the bottom of the backup detail page, you can review snapshots for this task:
|
||||
|
||||
| Field | Description |
|
||||
|-------------------|---------------------------------------------|
|
||||
| **Creation time** | When the snapshot was created. |
|
||||
| **Size** | Total size of the snapshot data. |
|
||||
| **Status** | The execution status of the snapshot. |
|
||||
| **Backup type** | Whether it is a full or incremental backup. |
|
||||
|
||||
{width=70% style="display:block;margin-left:0;margin-right:auto;"}
|
||||
|
||||
## Restore data
|
||||
|
||||
You can restore files to a specific folder or recover application data using any valid snapshot.
|
||||
|
||||
### Create a restore task
|
||||
|
||||
1. Go to **Settings** > **Restore**.
|
||||
2. Click **Add restore task**.
|
||||
3. Choose the method below that matches where your backup is stored.
|
||||
|
||||
### Restore from a local path
|
||||
|
||||
Use this method for backups stored on USB drives or SMB shares connected to Olares.
|
||||
|
||||
1. Select the local backup path. The path must point to the specific backup task folder.
|
||||
|
||||
If the backup name is `demo`, and the backup location is `/documents`, the path should be:
|
||||
```text
|
||||
/documents/olares-backups/demo-xxxx
|
||||
```
|
||||
2. Enter your backup password.
|
||||
3. Click **Query snapshots** to load available snapshots.
|
||||
4. Click **Restore** next to your target snapshot.
|
||||
5. Start the restore:
|
||||
- Files: Select the restore location then click **Start restore**.
|
||||
- Wise: Click **Start restore** directly (no destination path required).
|
||||
|
||||
### Restore from Olares Space
|
||||
|
||||
Use this method if you backed up to Olares Space. You will need the LarePass mobile app.
|
||||
|
||||
1. Open LarePass and scan to sign in to [Olares Space](https://space.olares.com).
|
||||
2. On the **Backup** page, locate the backup task and click **View Details**.
|
||||
3. Get a snapshot URL:
|
||||
- Click **Restore** (top right) to get the latest snapshot URL, or
|
||||
- Select a specific snapshot and click **Restore** next to it.
|
||||
4. Copy the URL and paste it into the **Backup URL** field in the From Space URL page.
|
||||
5. Enter your backup password.
|
||||
6. Start the restore:
|
||||
- Files: Select the restore location and destination folder, then click **Start restore**.
|
||||
- Wise: Click **Start restore** directly.
|
||||
|
||||
### Restore from cloud storage (AWS S3 / Tencent COS)
|
||||
|
||||
Use this method for backups stored on AWS S3 or Tencent COS.
|
||||
|
||||
1. Open your cloud storage console and locate the `olares-backups` directory.
|
||||
2. Select the target backup folder and generate a **pre-signed URL**.
|
||||
- For AWS S3, see the [AWS S3 documentation](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html) on pre-signed URLs.
|
||||
- For Tencent COS, follow [Tencent Cloud documentation](https://cloud.tencent.com/document/product/436/68284) for generating temporary access URLs.
|
||||
3. Copy the generated URL.
|
||||
4. Paste it into the **Backup URL** field on the From AWS S3 URL or From Tencent COS URL page.
|
||||
5. Enter your backup password.
|
||||
6. Click **Query snapshots** to load available snapshots.
|
||||
7. Click **Restore** next to your target snapshot.
|
||||
8. Start the restore:
|
||||
- Files: Select the restore location and destination folder, then click **Start restore**.
|
||||
- Wise: Click **Start restore** directly.
|
||||
|
||||
## Monitor restore tasks
|
||||
|
||||
Once created, the restore task appears in the task list on the Restore page. Click the arrow <i class="material-symbols-outlined">chevron_right</i> next to a task to view details and manage restore tasks.
|
||||
|
||||
- Cancel: Stop the process while it is running.
|
||||
- View data: Once the status shows `Completed`, click **Open folder** or **Open app** to access the restored data.
|
||||
124
docs/one/comfyui.md
Normal file
124
docs/one/comfyui.md
Normal file
@@ -0,0 +1,124 @@
|
||||
---
|
||||
outline: [2,3]
|
||||
description: Learn how to install ComfyUI, manage models via the ComfyUI Launcher, and generate high-performance images and videos on Olares One.
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: local ai, comfyui, nunchaku, wan
|
||||
---
|
||||
# Generate images and videos with ComfyUI <Badge type="tip" text="1 h" />
|
||||
ComfyUI is a powerful, node-based interface for Stable Diffusion that transforms AI media generation into a visual programming experience.
|
||||
|
||||
Olares provides ComfyUI Shared to allow multiple users to share models, plugins, and workflow resources within the cluster. It also features ComfyUI Launcher, providing administrator users with a simple way to manage ComfyUI resources and runtime environments.
|
||||
|
||||
## Learning objectives
|
||||
- Install and configure the ComfyUI service.
|
||||
- Use ComfyUI Launcher to download optimized model packages.
|
||||
- Generate high-quality images using the Nunchaku Flux.1-dev workflow.
|
||||
- Generate videos using the Wan 2.2 model.
|
||||
|
||||
## Before you begin
|
||||
For image generation:
|
||||
- Olares One is equipped with an NVIDIA RTX 5090 mobile GPU. This allows you to leverage the Nunchaku Flux.1-dev model to generate images significantly faster than standard FP16 or FP8 versions.
|
||||
- Nunchaku Flux.1-dev is an optimized model utilizing SVDQuant quantization (NVFP4). It is designed to deliver high-performance inference on this specific hardware while maintaining minimal loss in visual quality.
|
||||
|
||||
## Prerequisites
|
||||
**Hardware** <br>
|
||||
- Olares One connected to a stable network.
|
||||
- Sufficient disk space to download models.
|
||||
|
||||
**User permissions**
|
||||
- Admin privileges to install ComfyUI from the Market, and to start or stop the ComfyUI service for the cluster.
|
||||
|
||||
## Step 1: Install ComfyUI
|
||||
1. Open Market, and search for "ComfyUI".
|
||||
2. Click **Get**, then **Install**, and wait for installation to complete.
|
||||
|
||||

|
||||
|
||||
After it finished, you can see two icons for ComfyUI on Launchpad:
|
||||
- **ComfyUI**: The client interface for ComfyUI.
|
||||
- **ComfyUI Launcher**: The core management dashboard. You must use this tool to start the ComfyUI service before you can use the client.
|
||||
|
||||
## Step 2: Download model package
|
||||
To generate content, you must first download the specific model package.
|
||||
|
||||
1. Open ComfyUI Launcher, and scroll down to **Package installation**.
|
||||
2. For image generation, select **Nunchaku Flux FP4 Package** and click **GET ALL**. This downloads the necessary Nunchaku plugin and quantized models.
|
||||
3. For video generation, select **Wan 2.2 Text to Video 14B Package** and click **GET ALL** to download necessary models.
|
||||
|
||||

|
||||
|
||||
:::info ComfyUI service restart required
|
||||
Whenever you install a new model package or custom node, you must restart the ComfyUI service for the changes to take effect.
|
||||
:::
|
||||
|
||||
## Step 3: Start the ComfyUI service
|
||||
1. In ComfyUI Launcher, click **START** in the upper-right corner.
|
||||

|
||||
:::tip Initialization time
|
||||
The initial startup typically takes 10–20 seconds as the environment initializes.
|
||||
:::
|
||||
2. Once the status changes to "Running," click **OPEN**. This will launch the ComfyUI client in a new browser tab.
|
||||
|
||||
## Step 4: Generate images
|
||||
This section uses the `nunchaku-flux.1-dev-qencoder` workflow to help you get started.
|
||||
|
||||
1. In the ComfyUI client, click the **ComfyUI** icon in the top-left corner to open the menu.
|
||||
2. Select **View** > **Browse Templates**.
|
||||
3. Under **EXTENSIONS**, select **ComfyUI-nunchaku**.
|
||||
4. Choose the template: **nunchaku-flux.1-dev-qencoder**.
|
||||

|
||||
|
||||
5. Prepend `public/` to the filename in each model loader node. For example:
|
||||
- **Default**: `clip_I.safetensors`
|
||||
- **Change to**: `public/clip_I.safetensors`
|
||||
:::info Shared model path
|
||||
ComfyUI in Olares uses a file structure that differs from the standard installation. This change allows models to be shared between ComfyUI and SD Web UI.
|
||||
:::
|
||||

|
||||
|
||||
6. Replace the text in **CLIP Text Encode** to update the prompt for your image. For example:
|
||||
```plain
|
||||
8-bit cyberpunk: Blocky pixel cat holds "olares is fast!" neon on pixel street.
|
||||
```
|
||||
7. Click **Run** in the toolbar to start generation.
|
||||
|
||||
## Step 5: Generate videos
|
||||
This section uses the Wan 2.2 workflow.
|
||||
|
||||
1. In ComfyUI, open the ComfyUI menu and select **View** > **Browse Templates**.
|
||||
2. Under the **GENERATION TYPE** category, select **Video**.
|
||||
3. Select the template: **Wan 2.2 14B Text to Video**.
|
||||

|
||||
|
||||
4. Prepend `public/` to the filename in each model loader node. For example:
|
||||
- **Default**: `wan_2.1_vae.safetensors`
|
||||
- **Change to**: `public/wan_2.1_vae.safetensors`
|
||||
:::info Shared model path
|
||||
ComfyUI in Olares uses a file structure that differs from the standard installation. This change allows models to be shared between ComfyUI and SD Web UI.
|
||||
:::
|
||||
{width=90%}
|
||||
|
||||
5. Locate the **CLIP Text Encode** node and enter a detailed prompt for your video.
|
||||
```plain
|
||||
A woman with long brown hair and light skin smiles at another woman with long blonde hair. The woman with brown hair wears a black jacket and has a small, barely noticeable mole on her right cheek. The camera angle is a close-up, focused on the woman with brown hair's face. The lighting is warm and natural, likely from the setting sun, casting a soft glow on the scene. The scene appears to be real-life footage.
|
||||
```
|
||||
6. Click **Run** in the toolbar to start generation. Video generation takes significantly longer than image generation.
|
||||
|
||||
|
||||
## Step 6: Download output files
|
||||
You can download all output images and videos from Olares One to your local computer.
|
||||
1. Open the Files app.
|
||||
2. Navigate to the following directory:
|
||||
```plain
|
||||
External/olares/ai/output/comfyui
|
||||
```
|
||||

|
||||
3. Select the files you wish to save.
|
||||
4. Right-click and select **Download** to save them to your local computer.
|
||||
|
||||
## Resources
|
||||
- [ComfyUI official docs](https://docs.comfy.org/)
|
||||
- [ComfyUI-nunchaku docs](https://nunchaku.tech/docs/ComfyUI-nunchaku/index.html)
|
||||
- [Manage ComfyUI using ComfyUI Launcher](../use-cases/comfyui-launcher.md)
|
||||
141
docs/one/connect-two-olares-one.md
Normal file
141
docs/one/connect-two-olares-one.md
Normal file
@@ -0,0 +1,141 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: A technical guide for deploying a scalable Olares cluster. Learn how to configure a master node, resolve hostname conflicts, and join worker nodes to the cluster.
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: Cluster, Kubernetes, Multi-node, Worker node, Master node
|
||||
---
|
||||
# Set up a multi-node Olares cluster <Badge type="tip" text="1.5 h" />
|
||||
For advanced use cases requiring higher availability and distributed storage, you can physically connect two Olares One units to form a single, unified cluster.
|
||||
|
||||
## Learning objectives
|
||||
- Configure a master node with distributed storage support.
|
||||
- Resolve hostname conflicts between nodes.
|
||||
- Join a worker node to the cluster using the Olares CLI.
|
||||
|
||||
## Before you begin
|
||||
- The default username and password for Olares One are both `olares`.
|
||||
:::warning Reset default SSH password
|
||||
Even if you primarily use the Control Hub terminal, you must reset this password immediately in **Settings** > **My hardware** to secure your device against unauthorized access.
|
||||
:::
|
||||
- SSH access grants powerful control over the system. Ensure you keep your credentials secure.
|
||||
|
||||
## Prerequisites
|
||||
**Hardware**<br>
|
||||
- Two Olares One units connected to the same local area network.
|
||||
- Both units running the same version of Olares OS.
|
||||
- You know the local IP addresses of both units.
|
||||
|
||||
**Experience**<br>
|
||||
- Familiarity with terminal commands.
|
||||
- Basic understanding of Kubernetes node management.
|
||||
|
||||
**Software**<br>
|
||||
- LarePass installed on your mobile phone.
|
||||
|
||||
## Step 1: Set up the master node
|
||||
:::danger Clean installation required
|
||||
Setting up a cluster requires a clean environment. If Olares OS is already installed on this device, you must uninstall it first:
|
||||
```bash
|
||||
sudo olares-cli uninstall --all
|
||||
```
|
||||
:::
|
||||
|
||||
The first Olares One unit will serve as the master node.
|
||||
|
||||
1. Access the master node via SSH using its local IP address.
|
||||
```bash
|
||||
ssh olares@<Master-IP-Address>
|
||||
```
|
||||
2. Initialize the local storage service MinIO which backs the distributed file system.
|
||||
```bash
|
||||
sudo olares-cli install storage
|
||||
```
|
||||
3. Install Olares with JuiceFS enabled. This allows data to be shared across multiple nodes.
|
||||
```bash
|
||||
sudo olares-cli install --with-juicefs=true
|
||||
```
|
||||
4. The installation script will prompt you for your Olares ID details.
|
||||
|
||||
For example, if your full Olares ID is `alice123@olares.com`:
|
||||
|
||||
- **Domain name**: Press `Enter` to use the default domain name or type `olares.com`.
|
||||
- **Olares ID**: Enter the prefix of your Olares ID. In this example, enter `alice123`.
|
||||
|
||||
Upon completion of the installation, the initial system information, including the Wizard URL and the initial login password, will appear on the screen. You will need them later in the activation stage.
|
||||
|
||||

|
||||
|
||||
5. Use the Wizard URL and initial one-time password to activate. This process connects the Olares device with your Olares ID using LarePass.
|
||||
|
||||
a. Enter the Wizard URL in your browser. You will be directed to the welcome page. Press any key to continue.
|
||||

|
||||
|
||||
b. Follow the on-screen instructions to continue the activation.
|
||||
|
||||
After setup is complete, the LarePass app returns to the home screen, and the Wizard redirects you to the Olares login page.
|
||||
|
||||
## Step 2: Set up the worker node
|
||||
|
||||
1. Access the worker node via SSH.
|
||||
```bash
|
||||
ssh olares@<Worker-IP-Address>
|
||||
```
|
||||
2. Update the hostname:
|
||||
```bash
|
||||
sudo hostnamectl set-hostname olares-worker
|
||||
```
|
||||
:::info
|
||||
By default, all Olares One units have the hostname `olares`. Kubernetes requires unique hostnames for every node in a cluster. Before joining it to the cluster, you must ensure it has a unique hostname.
|
||||
:::
|
||||
|
||||
3. Verify that the worker node can communicate with the master and that versions are compatible.
|
||||
```bash
|
||||
sudo olares-cli node masterinfo \
|
||||
--master-host=<Master-IP-Address> \
|
||||
--master-ssh-user=olares \
|
||||
--master-ssh-password=<Password>
|
||||
```
|
||||
|
||||
Example output:
|
||||
```bash
|
||||
current: root
|
||||
2026-01-13T06:10:41.874Z [Job] [Get Master Info] start ...
|
||||
2026-01-13T06:10:41.874Z [Module] GetMasterInfo
|
||||
2026-01-13T06:10:42.528Z Got master info:
|
||||
OlaresVersion: 1.12.3
|
||||
JuiceFSEnabled: true
|
||||
KubernetesType: k3s
|
||||
MasterNodeName: olares
|
||||
AllNodes: olares
|
||||
|
||||
2026-01-13T06:10:42.528Z [A] olares: GetMasterInfo success (654.711582ms)
|
||||
2026-01-13T06:10:42.529Z [A] olares-worker: AddNodePrecheck success (37.084µs)
|
||||
2026-01-13T06:10:42.529Z [Job] Get Master Info execute successfully!!! (654.871193ms)
|
||||
```
|
||||
|
||||
4. Run the add node command. Ensure the `--version` matches the version found in the pre-check output (e.g., `1.12.3`):
|
||||
|
||||
```bash
|
||||
sudo olares-cli node add \
|
||||
--master-host=<Master-IP-Address> \
|
||||
--master-ssh-user=olares \
|
||||
--master-ssh-password=<Password> \
|
||||
--version=<Olares-Version>
|
||||
```
|
||||
|
||||
5. Perform the same installation and activation steps for the worker node.
|
||||
|
||||
## Step 3: Verify the cluster
|
||||
|
||||
Once the join command completes, verify that the nodes are communicating correctly.
|
||||
|
||||
Check the status of all nodes in the Kubernetes cluster with the following command:
|
||||
```bash
|
||||
kubectl get nodes
|
||||
```
|
||||
|
||||
## Resources
|
||||
- [Olares CLI](../developer/install/cli/node.md): Explore the Olares CLI.
|
||||
- [Olares environment variables](../developer/install/environment-variables.md): Learn about the environment variables that enable advanced configurations of Olares.
|
||||
81
docs/one/create-drive.md
Normal file
81
docs/one/create-drive.md
Normal file
@@ -0,0 +1,81 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Reinstall Olares OS on Olares One using a bootable USB to restore the device to factory state.
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: Olares One, reinstall, factory reset, bootable USB, installation USB
|
||||
---
|
||||
|
||||
# Reset to factory settings using installation USB <Badge type="tip" text="15 min"/>
|
||||
|
||||
Resetting to factory settings returns your Olares One to the initial setup state. You can reinstall Olares OS using the bootable USB drive included with Olares One.
|
||||
|
||||
:::warning Data loss
|
||||
This will permanently delete all accounts, settings, and data on the device. This action cannot be undone.
|
||||
:::
|
||||
|
||||
## Prerequisites
|
||||
**Hardware**<br>
|
||||
- The bootable USB drive that came with Olares One.
|
||||
- A monitor and keyboard connected to Olares One.
|
||||
|
||||
## Step 1: Boot from the USB drive
|
||||
|
||||
1. Insert the bootable USB drive into Olares One.
|
||||
2. Power on Olares One or restart it if it is already running.
|
||||
3. When the Olares logo appears, immediately press the **Delete** key repeatedly to enter **BIOS setup**.
|
||||

|
||||
|
||||
4. Navigate to the **Boot** tab, set **Boot Option #1** to the USB drive, and then press **Enter**.
|
||||

|
||||
|
||||
5. Press **F10**, then select **Yes** to save and exit.
|
||||

|
||||
|
||||
|
||||
Olares One will restart and boot into the Olares installer interface.
|
||||
|
||||
## Step 2: Install Olares to disk
|
||||
|
||||
1. From the installer interface, select **Install Olares to Hard Disk** and press **Enter**.
|
||||

|
||||
|
||||
2. When prompted for the installation target, the installer shows a list of available disks. Type `/dev/` followed by the disk name (e.g. `nvme0n1`) from that list and press **Enter**.
|
||||

|
||||
|
||||
For example, to install to `nvme0n1`, enter:
|
||||
```bash
|
||||
/dev/nvme0n1
|
||||
```
|
||||
|
||||
3. When you see prompts about NVIDIA GPU drivers, press **Enter** to accept the default.
|
||||

|
||||
|
||||
4. When you see the message below, the reinstallation is complete:
|
||||
```bash
|
||||
Installation completed successfully!
|
||||
```
|
||||
|
||||
5. Remove the USB drive, then press **Ctrl + Alt + Delete** to restart.
|
||||
|
||||
## Step 3: Verify the installation
|
||||
|
||||
After the reboot, the system starts in a clean factory state and shows a text-based Ubuntu login prompt.
|
||||
|
||||
1. Log in with the default credentials:
|
||||
- **Username**: `olares`
|
||||
- **Password**: `olares`
|
||||

|
||||
|
||||
2. (Optional) Run the following command to verify the installation:
|
||||
```bash
|
||||
sudo olares-check
|
||||
```
|
||||
Example output:
|
||||

|
||||
|
||||
|
||||
## Step 4: Complete activation via LarePass
|
||||
|
||||
You can then activate Olares One again via LarePass. For detailed instructions, see [First boot](first-boot.md).
|
||||
110
docs/one/customize.md
Normal file
110
docs/one/customize.md
Normal file
@@ -0,0 +1,110 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to personalize your Olares experience by customizing your desktop background, system theme, and designing your public profile page.
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: Profile, personal webpage, decentralized webpage
|
||||
---
|
||||
|
||||
# Customize Olares <Badge text="15 min"/>
|
||||
|
||||
Olares allows you to customize both your private workspace and your public identity. This guide shows you how to set up your desktop appearance and design a profile page to share with others.
|
||||
|
||||
## Learning objectives
|
||||
|
||||
By the end of this tutorial, you will learn how to:
|
||||
- Switch between light and dark system themes.
|
||||
- Customize your desktop and login screen wallpapers.
|
||||
- Design your public profile with social links and content blocks.
|
||||
- Style your page and share it.
|
||||
|
||||
## Customize Olares desktop
|
||||
|
||||
You can adjust the look and feel of your local Olares environment through the system settings.
|
||||
|
||||
1. Open Settings from the Dock.
|
||||
2. Select **Appearance** in the sidebar.
|
||||
|
||||
{width=80%}
|
||||
|
||||
### Set system theme
|
||||
|
||||
In **Theme**, choose between **Light** or **Dark** mode.
|
||||
|
||||
The change takes effect immediately.
|
||||
|
||||
### Change wallpaper
|
||||
|
||||
You can set a distinct look for your desktop and login screen.
|
||||
|
||||
1. In **Wallpaper** , select the target: **Desktop background** or **Login background**.
|
||||
2. Choose a background:
|
||||
- Built-in: Browse and select from the provided images.
|
||||
- Custom: Click <i class="material-symbols-outlined">add_photo_alternate</i>, select an image file from your computer, then click **Open**.
|
||||
|
||||
## Design your public profile
|
||||
|
||||
Your Olares profile is a public homepage available at `https://{your-olares-id}.olares.com`. You can use it as a landing page, portfolio, or digital business card.
|
||||
|
||||

|
||||
|
||||
Open Profile from the Dock to start editing. The editor has four tabs: **Header**, **Social**, **Blocks**, and **Appearance**.
|
||||
|
||||
{width=95%}
|
||||
|
||||
:::tip Automatic save
|
||||
All changes are saved automatically as you make them.
|
||||
:::
|
||||
|
||||
### Set up header
|
||||
|
||||
Use the **Header** tab to define your identity at the top of the page. You can choose a layout style, upload your avatar, and set your display name.
|
||||
|
||||
{width=95%}
|
||||
|
||||
:::tip Keep it simple
|
||||
A clear name plus a one-line description is usually enough to make a good first impression.
|
||||
:::
|
||||
|
||||
### Add social links
|
||||
|
||||
Use the **Social** tab to display icons under your header. This connects visitors to your presence on other platforms such as X, GitHub, or LinkedIn.
|
||||
|
||||
You can add links for multiple platforms and choose which ones to display. To hide a link temporarily, toggle it off without deleting the saved value.
|
||||
|
||||
{width=95%}
|
||||
|
||||
### Build with blocks
|
||||
|
||||
Use the **Blocks** tab to construct the main body of your page. Click **+ Add Block** and select a type to enter the editing screen.
|
||||
|
||||
Each block type helps you share different content:
|
||||
- **Text:** Add a title or paragraph. You can adjust text alignment and background transparency.
|
||||
- **Link:** Enter a website URL or email address. You can customize the button title, subtitle, and shadow style.
|
||||
- **Image:** Upload a photo. You can add a description and choose the aspect ratio that fits your image best.
|
||||
|
||||
{width=95%}
|
||||
|
||||
Once you have added your blocks, you can manage the layout directly in the list:
|
||||
- Drag items to reorder them.
|
||||
- Toggle a block off to hide it temporarily.
|
||||
- Copy a block to reuse its style.
|
||||
|
||||
### Configure appearance
|
||||
|
||||
Use the **Appearance** tab to define the visual style. You can select a preset theme, and manually fine-tune the fonts and block shapes to match your style.
|
||||
|
||||
{width=95%}
|
||||
|
||||
## Share your profile
|
||||
|
||||
Your profile is available at `https://{your-olares-id}.olares.com`.
|
||||
|
||||
When you are ready, click the **<i class="material-symbols-outlined">share</i> Share** button. You can:
|
||||
|
||||
- Share directly to social platforms.
|
||||
- Generate a QR code.
|
||||
- Export a shareable image card that works as a digital business card.
|
||||
|
||||
{width=95%}
|
||||
142
docs/one/dashboard.md
Normal file
142
docs/one/dashboard.md
Normal file
@@ -0,0 +1,142 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Monitor your Olares system health. Learn how to check CPU and memory usage, manage disk storage, and identify resource-heavy applications.
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: Olares, Olares One, monitor system, system resources, app status, CPU usage, memory usage, disk space, fan speed
|
||||
---
|
||||
|
||||
# Monitor system and application status <Badge type="tip" text="10 min" />
|
||||
|
||||
The Dashboard app provides a centralized, real-time view of your system's status. Use it to check available storage, monitor hardware temperatures, and identify which applications are using the most resources.
|
||||
|
||||
This guide walks you through the most common tasks for maintaining a healthy system.
|
||||
|
||||
## Learning objectives
|
||||
|
||||
- View the system status overview.
|
||||
- Check detailed usage for specific hardware. This guide uses "Disk" as the example.
|
||||
- Monitor fan speed and temperature.
|
||||
- Identify and manage resource-intensive applications.
|
||||
|
||||
## Before you begin
|
||||
|
||||
Familiarize yourself with the key metrics used to measure system performance.
|
||||
|
||||
| Metric | Description | why it matters |
|
||||
|:-----------------|:----------------------------------------|:-------------------------------------------------------------------|
|
||||
| CPU usage | Percentage of processor power used | Prolonged high usage makes the system slow and unresponsive. |
|
||||
| Memory usage | Percentage of RAM in use | If RAM is full, apps might crash or freeze. |
|
||||
| Average CPU load | Average number of active processes | High load indicates system overload. |
|
||||
| Disk usage | Percentage of storage space filled | Running out of space prevents saving new files or installing apps. |
|
||||
| Inode usage | Percentage of index nodes (inodes) used | Exhaustion prevents new file creation. |
|
||||
| Disk throughput | Data transfer rate (MB/s) | Important for large file transfers. |
|
||||
| IOPS | Input/Output Operations Per Second | Critical for small file or random data access. |
|
||||
| Network traffic | Internet usage (Mbps) | High traffic can slow down remote access and downloads. |
|
||||
| Pod status | Number of active app containers | Indicates if your applications are running, pending, or failed. |
|
||||
| Fan speed | Cooling fan speed (RPM) | Higher speeds indicate the system is working hard to cool down. |
|
||||
|
||||
## Check system health
|
||||
|
||||
The **Overview** page shows you the health of your device at a glance.
|
||||
|
||||
1. Open the Dashboard app from the Launchpad.
|
||||
|
||||

|
||||
|
||||
You are on the **Overview** page by default.
|
||||
|
||||

|
||||
|
||||
2. Check the **Cluster's physical resources** section. Cards in this section provide an instant snapshot of your hardware status:
|
||||
|
||||
- **CPU core**: The "brain" of your system. High percentages indicate heavy processing.
|
||||
- **Memory Gi**: The "workspace" for running apps. If this is full, the system might become slow or unresponsive.
|
||||
- **Disk**: Your local storage space usage.
|
||||
- **Pods**: The total number of active application units running on your system.
|
||||
- **GPU**: Graphics processing power, used for AI tasks or media rendering.
|
||||
- **Network**: Real-time upload and download speeds.
|
||||
- **Fan**: Current cooling status.
|
||||
|
||||
## View resource details
|
||||
|
||||
Click on any resource card to see detailed metrics. Take the common task "managing storage (Disk)" for example.
|
||||
|
||||
1. On the **Overview** page, in the **Cluster's physical resources** section, click the **Disk Gi** card.
|
||||
|
||||

|
||||
|
||||
2. On the **Disk details** panel, you can view the following information:
|
||||
|
||||
- Identity and status: The disk name (e.g., nvme0n1), type (SSD), and overall health status (e.g., Normal).
|
||||
- Storage usage: A visual bar chart displaying the exact amount of used space versus available space.
|
||||
- Hardware specifications: Technical details including the model name, serial number, interface protocol (e.g., NVMe), and total capacity.
|
||||
- Health metrics: Statistics such as the current temperature, total power-on duration, and total data written.
|
||||
|
||||

|
||||
|
||||
3. To view exactly which folders are taking up space, click **Occupancy analysis** in the top right corner.
|
||||
|
||||

|
||||
|
||||
This view lists every file system, helping you see exactly where your storage is being allocated.
|
||||
|
||||
{width=90%}
|
||||
|
||||
You can follow this same pattern to check other resources.
|
||||
|
||||
## Monitor hardware status
|
||||
|
||||
The dedicated **Fan** panel helps you ensure your Olares One is not overheating.
|
||||
|
||||
1. On the **Overview** page, find the **Fan** card.
|
||||
|
||||

|
||||
|
||||
2. Click it to view real-time statistics:
|
||||
|
||||
- Fan speed: Current RPM (Revolutions Per Minute).
|
||||
- Temperature: Current temperature of the main hardware components.
|
||||
- Power: Current power consumption of the GPU.
|
||||
|
||||

|
||||
|
||||
:::tip Adjust cooling mode
|
||||
To change the fan profile (e.g., from **Silent mode** to **Performance mode**), go to **Settings** > **My hardware** > **Power mode**.
|
||||
:::
|
||||
|
||||
## Track application performance
|
||||
|
||||
If your system feels slow, a specific application might be consuming too many resources.
|
||||
|
||||
### Quick ranking
|
||||
|
||||
On the **Overview** page, scroll down to the **Usage ranking** section. This lists the top 5 applications currently using the most CPU or memory.
|
||||
|
||||

|
||||
|
||||
### Detailed application list
|
||||
|
||||
For a complete view of all running services:
|
||||
|
||||
1. From the left navigation pane, click **Applications**.
|
||||
2. Sort the list using the dropdown menu in the top right:
|
||||
|
||||
- Sort by CPU usage: Find processor-heavy apps.
|
||||
- Sort by memory usage: Find memory-hungry apps.
|
||||
- Sort by inbound traffic: Find apps downloading the most data.
|
||||
- Sort by outbound traffic: Find apps uploading the most data.
|
||||
|
||||

|
||||
|
||||
## Next steps
|
||||
|
||||
If you identify an application consuming excessive resources, you can take actions to restore system speed. For example,
|
||||
- Restart the app: Often, apps consume excess resources due to a temporary error. Restarting it usually fixes the problem.
|
||||
- Stop or uninstall the app: If an app consistently slows down your system and you don't need it, you can stop it or uninstall it completely to free up resources for other tasks.
|
||||
|
||||
## Resources
|
||||
|
||||
- [Uninstall applications](../manual/olares/market/market.md#uninstall-applications)
|
||||
- [My hardware](../manual/olares/settings/my-olares.md#my-hardware)
|
||||
280
docs/one/deerflow.md
Normal file
280
docs/one/deerflow.md
Normal file
@@ -0,0 +1,280 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Learn how to set up DeerFlow on your Olares device, complete with Ollama integration and Tavily for web research.
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: Deerflow, Ollama, Deep research
|
||||
---
|
||||
|
||||
# Deep research with DeerFlow <Badge type="tip" text="20 min" />
|
||||
DeerFlow is an open-source framework that transforms a simple research topic into a comprehensive, detailed report.
|
||||
|
||||
This guide will walk through the process of setting up DeerFlow on your Olares device, integrating it with a local Ollama model and the Tavily search engine for web-enabled research.
|
||||
|
||||
## Learning objectives
|
||||
- Configure DeerFlow to communicate with a local LLM via Ollama.
|
||||
- Configure the Tavily search API for web access.
|
||||
- Execute deep research tasks and manage reports.
|
||||
|
||||
## Before you begin
|
||||
DeerFlow connects to Ollama using the `.com` domain.
|
||||
* For local access: If the **Authentication model** for the Ollama API is **None**, LarePass VPN is not required.
|
||||
* For remote access: You must enable LarePass VPN.
|
||||
|
||||
## Prerequisites
|
||||
**Hardware** <br>
|
||||
- Olares One connected to a stable network.
|
||||
- Sufficient disk space to download models.
|
||||
|
||||
**User permissions**
|
||||
- Admin privileges to install Ollama from the Market.
|
||||
|
||||
**External services** <br>
|
||||
- A [Tavily](https://www.tavily.com/) account is required to generate an API key for web search. The free plan is sufficient.
|
||||
|
||||
**LarePass** (Required for remote access)
|
||||
- The LarePass app is installed on your device. This guide uses the desktop application to demonstrate the configuration and usage from desktop.
|
||||
|
||||
## Step 1: Install Ollama and DeerFlow
|
||||
1. Open Market, and search for "Ollama".
|
||||

|
||||
|
||||
2. Click **Get**, then **Install**, and wait for installation to complete.
|
||||
|
||||
3. Repeat the same steps to install "DeerFlow".
|
||||

|
||||
|
||||
## Step 2: Install models and configure Ollama
|
||||
|
||||
### Install language models
|
||||
1. Open Ollama from the Launchpad.
|
||||
2. Download a model using the `pull` command:
|
||||
```bash
|
||||
ollama pull [model]
|
||||
```
|
||||
For example:
|
||||
```bash
|
||||
ollama pull cogito:14b
|
||||
```
|
||||
:::warning Reasoning models are not supported
|
||||
DeerFlow currently supports non-reasoning models only. Additionally, Gemma-3 models are unsupported due to the lack of tool usage capabilities.
|
||||
:::
|
||||
:::tip Check Ollama library
|
||||
If you are unsure which model to download, check the [Ollama Library](https://ollama.com/library) to explore available models.
|
||||
:::
|
||||
|
||||
3. Verify the download:
|
||||
```bash
|
||||
ollama ls
|
||||
```
|
||||
If the model appears in the list, it is ready to use.
|
||||
|
||||
### Configure API access
|
||||
To use Ollama as the backend for DeerFlow, you must configure the API to allow access for other applications.
|
||||
|
||||
### Verify authentication level
|
||||
By default, Ollama API's authentication level is set to **Internal**, allowing applications on the same local network to access it.
|
||||
|
||||
As Super Admin, you can verify or modify the authentication level:
|
||||
1. Open Settings, then navigate to **Applications** > **Ollama** > **Ollama API**.
|
||||
2. Confirm that **Authentication level** is set to **Internal**.
|
||||
3. (Optional) If you prefer not to enable LarePass VPN, set **Authentication model** to **None**.
|
||||
4. Click **Submit** if you made changes.
|
||||

|
||||
|
||||
### Get the endpoint
|
||||
|
||||
1. On the same settings page, click **Set up endpoint**.
|
||||
2. Copy the address for later use.
|
||||
|
||||

|
||||
|
||||
### Optinal: Enable LarePass VPN
|
||||
|
||||
If you are accessing Olares from a remote network, or if you have selected an authentication model other than **None**, you must enable LarePass VPN on your client device to establish a connection.
|
||||
|
||||
1. Open the LarePass app, and click your avatar in the top-left corner to open the user menu.
|
||||
2. Toggle on the switch for **VPN connection**.
|
||||
|
||||

|
||||
|
||||
|
||||
## Step 3: Configure DeerFlow
|
||||
DeerFlow requires connection details for the LLM. You will configure this by editing the `conf.yaml` file using either the graphical interface or the command line.
|
||||
|
||||
### Configure DeerFlow to use Ollama
|
||||
|
||||
<tabs>
|
||||
<template #Use-graphical-interface>
|
||||
|
||||
1. Open the Files app and navigate to `/Applications/Data/Deerflow/app/`.
|
||||
2. Locate the `conf.yaml` file and double-click to open it.
|
||||

|
||||
|
||||
3. Click <span class="material-symbols-outlined">box_edit</span> in the top-right corner to open the text editor.
|
||||
4. Modify the default model settings:
|
||||
```yaml
|
||||
BASIC_MODEL:
|
||||
base_url: # Your Ollama API endpoint (ensure /v1 suffix is included)
|
||||
model: # The model name
|
||||
api_key: # Any non-empty string
|
||||
```
|
||||
For example:
|
||||
```yaml
|
||||
BASIC_MODEL:
|
||||
base_url: https://a5be22681.laresprime.olares.com
|
||||
model: "cogito:14b"
|
||||
api_key: ollama
|
||||
```
|
||||
5. Click <span class="material-symbols-outlined">box_edit</span> to save the file.
|
||||
|
||||
</template>
|
||||
|
||||
<template #Use-command-line>
|
||||
|
||||
You can edit the configuration file directly on the host machine via the terminal.
|
||||
1. Open Control Hub and select the DeerFlow project from the sidebar.
|
||||
2. Navigate to **Deployments** > **deerflow** and click the running pod.
|
||||
3. Expand the **deerflow** container details to view the **Volumes** section.
|
||||

|
||||
|
||||

|
||||
|
||||
4. Copy this path.
|
||||
5. Open the Olares terminal from Control Hub, and change directory to the copied path using the `cd` command:
|
||||
```bash
|
||||
# Replace with your actual path
|
||||
cd /olares/rootfs/userspace/pvc-userspace-laresprime-raizlofhiszoin5c/Data/deerflow/app
|
||||
```
|
||||
6. Edit the `conf.yaml` file using a command-line text editor like `nano` or `vi`. For example:
|
||||
```Bash
|
||||
nano conf.yaml
|
||||
```
|
||||
7. Modify the default model settings:
|
||||
```yaml
|
||||
BASIC_MODEL:
|
||||
base_url: # Your Ollama API endpoint (ensure /v1 suffix is included)
|
||||
model: # The model name
|
||||
api_key: # Any non-empty string
|
||||
```
|
||||
For example:
|
||||
```yaml
|
||||
BASIC_MODEL:
|
||||
base_url: https://a5be22681.laresprime.olares.com/v1
|
||||
model: "cogito:14b"
|
||||
api_key: ollama
|
||||
```
|
||||
8. Save the changes and exit the editor.
|
||||
</template>
|
||||
</tabs>
|
||||
|
||||
|
||||
### Configure DeerFlow to use Tavily
|
||||
To enable web search, add your Tavily API key to the application configuration.
|
||||
1. In Control Hub, select the DeerFlow project.
|
||||
2. Click **Configmaps** in the resource list and select **deerflow-config**.
|
||||

|
||||
|
||||
3. Click <span class="material-symbols-outlined">edit_square</span> in the top-right to open the editor.
|
||||
4. Add the following key-value pairs under the `data` section:
|
||||
```yaml
|
||||
SEARCH_API: tavily
|
||||
TAVILY_API_KEY: tvly-xxx # Your Tavily API Key
|
||||
```
|
||||

|
||||
|
||||
5. Click **Confirm** to save the changes.
|
||||
|
||||
### Restart DeerFlow
|
||||
Restart the service to apply the new model and search configurations.
|
||||
|
||||
1. In Control Hub, select the DeerFlow project.
|
||||
2. Under **Deployments**, locate **deerflow** and click **Restart**.
|
||||

|
||||
|
||||
3. In the confirmation dialog, type `deerflow` and click **Confirm**.
|
||||
4. Wait for the status icon to turn green, which indicates the service has successfully restarted.
|
||||
|
||||
## Step 4: Run DeerFlow
|
||||
### Run a deep research task
|
||||
1. Open DeerFlow from the Olares Launchpad.
|
||||
2. Click **Get Started** and enter your research topic in the prompt box.
|
||||

|
||||
|
||||
3. (Optional) Click the wand icon to have DeerFlow refine your prompt for better results.
|
||||
4. Enable **Investigation**.
|
||||
5. (Optional) Select your preferred writing style (e.g., **Popular Science**).
|
||||
6. Click <span class="material-symbols-outlined">arrow_upward</span> to send the request.
|
||||
|
||||
DeerFlow will generate a preliminary research plan. Review and edit this plan if necessary, or allow it to proceed.
|
||||

|
||||
|
||||
Once the process is complete, a detailed analysis report will be displayed.
|
||||

|
||||
|
||||
To audit the sources and steps taken, click the **Activities** tab.
|
||||

|
||||
|
||||
### Edit and save the report
|
||||
:::info Verify citations
|
||||
AI models may occasionally generate inaccurate citations or "hallucinated" links. Be sure to manually verify important sources in the citations section.
|
||||
:::
|
||||
|
||||
1. Click <span class="material-symbols-outlined">edit</span> in the top-right corner to enter editing mode.
|
||||
2. You can adjust formatting using Markdown or select a section and ask the AI to improve or expand it.
|
||||

|
||||
3. Click <span class="material-symbols-outlined">undo</span> in the top-right corner to exit editing mode.
|
||||
4. Click <span class="material-symbols-outlined">download</span> to save the report to your local machine as a Markdown file.
|
||||
|
||||
## Advanced usage
|
||||
### Add an MCP server
|
||||
The Model Context Protocol (MCP) extends DeerFlow's capabilities by integrating external tools. For example, adding the Fetch server allows the agent to scrape and convert web content into Markdown for analysis.
|
||||
|
||||
1. Open your DeerFlow app, and click <span class="material-symbols-outlined">settings</span> to open the **Settings** dialog.
|
||||
2. Select the **MCP** tab and click **Add Servers**.
|
||||
3. Paste the JSON configuration for the server. The following example adds the fetch server:
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"fetch": {
|
||||
"command": "uvx",
|
||||
"args": ["mcp-server-fetch"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
4. Click **Add**. The server is automatically enabled and available for research agents.
|
||||

|
||||
|
||||
### Turn research report to a podcast (TTS)
|
||||
DeerFlow can convert reports into MP3 audio using a Text-to-Speech (TTS) service, such as Volcengine TTS. This requires adding API credentials to the application environment.
|
||||
|
||||
1. Obtain your **Access Token** and **App ID** from the [Volcengine](https://console.volcengine.com) console.
|
||||
2. In Control Hub, select the DeerFlow project and go to **Configmaps** > **deerflow-config**.
|
||||
3. Click the **Edit** icon in the top-right corner.
|
||||
4. Add the following keys under the `data` section:
|
||||
```yaml
|
||||
VOLCENGINE_TTS_ACCESS_TOKEN: # Your Access Token
|
||||
VOLCENGINE_TTS_APPID: # Your App ID
|
||||
```
|
||||
5. Click **Confirm** to save the changes.
|
||||
6. Navigate to **Deployments** > **deerflow** and click **Restart**.
|
||||
|
||||
Once restarted, DeerFlow should detect these keys and the podcast/TTS feature will be available.
|
||||
|
||||
## Troubleshooting
|
||||
### DeerFlow does not generate a response
|
||||
If the agent fails to start or hangs:
|
||||
* **Restart Ollama**: Restart the Ollama service in **Control Hub**.
|
||||
- **Check model compatibility**: DeerFlow does not support reasoning models (e.g., DeepSeek R1). Switch to a standard chat model and try again.
|
||||
- **Check endpoint configuration**: Ensure the Ollama API endpoint in `conf.yaml` includes the `/v1` suffix.
|
||||
|
||||
### No web search results during the research
|
||||
If the report is generic and lacks external data:
|
||||
- **Check model capabilities**: The selected LLM may lack strong tool-calling capabilities. Switch to a model known for effective tool use, such as Qwen 2.5 or Llama 3.1.
|
||||
- **Verify API Key**: Ensure the `TAVILY_API_KEY` in the ConfigMap is correct and the account has remaining quota.
|
||||
|
||||
## Resources
|
||||
- [DeerFlow GitHub](https://github.com/bytedance/deer-flow)
|
||||
- [Download and run local AI models via Ollama](../use-cases/ollama.md)
|
||||
260
docs/one/deploy.md
Normal file
260
docs/one/deploy.md
Normal file
@@ -0,0 +1,260 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
description: Deploy a single-container Docker app to Olares using Studio.
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: Olares Studio, Docker, Container
|
||||
---
|
||||
# Deploy an app <Badge type="tip" text="20 min" />
|
||||
|
||||
Studio is the easiest way to run a single-container Docker app on Olares. You do not need to write code.
|
||||
|
||||
In this tutorial, you will deploy [Wallos](https://hub.docker.com/r/bellamy/wallos) (a personal subscription tracker) and learn how to translate a standard Docker configuration into Studio settings.
|
||||
|
||||
:::tip Recommended for testing
|
||||
Studio-created deployments are best suited for development, testing, or temporary use.
|
||||
:::
|
||||
|
||||
## Learning objectives
|
||||
|
||||
By the end of this tutorial, you will learn how to:
|
||||
- Translate a standard `docker run` command or `docker-compose.yaml` into Olares Studio settings.
|
||||
- Configure CPU and memory, and add environment variables.
|
||||
- Map storage volumes so data persists, or is intentionally temporary.
|
||||
- Customize the application's name and icon after deployment.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before you begin, ensure you have:
|
||||
- Olares version 1.12.2 or later.
|
||||
- A container image for the app that exists and is accessible from the Olares host.
|
||||
- The app's `docker run` command or `docker-compose.yaml` for reference.
|
||||
|
||||
## Install Studio
|
||||
|
||||
1. Open Market and search for "Studio".
|
||||
2. Click **Get**, then **Install**.
|
||||
|
||||
## Reference: Docker configuration
|
||||
|
||||
Use either format below as a reference. You will copy the same values into Studio fields.
|
||||
|
||||
::: code-group
|
||||
```docker{3-6,8} [docker run command]
|
||||
docker run -d \
|
||||
--name wallos \
|
||||
-v /path/to/config/wallos/db:/var/www/html/db \
|
||||
-v /path/to/config/wallos/logos:/var/www/html/images/uploads/logos \
|
||||
-e TZ=America/Toronto \
|
||||
-p 8282:80 \
|
||||
--restart unless-stopped \
|
||||
bellamy/wallos:latest
|
||||
```
|
||||
|
||||
```yaml{5-6,7-10,12-14} [docker compose]
|
||||
version: '3.0'
|
||||
|
||||
services:
|
||||
wallos:
|
||||
container_name: wallos
|
||||
image: bellamy/wallos:latest
|
||||
ports:
|
||||
- "8282:80/tcp"
|
||||
environment:
|
||||
TZ: 'America/Toronto'
|
||||
# Volumes store your data between container upgrades
|
||||
volumes:
|
||||
- './db:/var/www/html/db'
|
||||
- './logos:/var/www/html/images/uploads/logos'
|
||||
restart: unless-stopped
|
||||
```
|
||||
:::
|
||||
|
||||
## Create and configure the app
|
||||
|
||||
### Create the project
|
||||
|
||||
1. Open Studio and select **Create a new application**.
|
||||
2. Enter an app name, for example: `wallos`, and click **Confirm**.
|
||||
3. Select **Port your own container to Olares**.
|
||||

|
||||
|
||||
### Configure image and port
|
||||
|
||||
These fields define the app's core runtime settings. You can find the values in the Docker configuration above.
|
||||
|
||||
| Studio field | Value to enter | Source: `docker run` | Source: `docker-compose.yaml`|
|
||||
| -- | -- | -- | -- |
|
||||
| Image | `bellamy/wallos:latest` | Last token in the command | Value of `image:`|
|
||||
| Port | `80` | Container port in `-p HOST:CONTAINER`, which is the value after `:` | Container port in `ports:`, which is the value after `:` and before `/` if present|
|
||||
|
||||
:::info Why only the container port
|
||||
A port mapping is HOST:CONTAINER. The container port is the internal port the app listens on. The host port is the external port you access. Studio manages external access automatically, so you only need to enter the container port.
|
||||
:::
|
||||
1. For the **Image** field, paste `bellamy/wallos:latest`.
|
||||
2. For the **Port** field, enter `80`.
|
||||
|
||||
### Configure instance specifications
|
||||
|
||||
Instance specifications define the CPU and memory allocated to this app.
|
||||
|
||||
In the **Instance Specifications** section, enter the minimum CPU and memory requirements. For example:
|
||||
- **CPU**: 2 core
|
||||
- **Memory**: 1 G
|
||||

|
||||
|
||||
### Add environment variables
|
||||
|
||||
Environment variables pass configuration values into the container.
|
||||
|
||||
| Studio field | Value to enter | Source: `docker run` | Source: `docker-compose.yaml`|
|
||||
| -- | -- | -- | -- |
|
||||
| key | `TZ` | Find `-e KEY=VALUE`, use the text before `=` | Under `environment:`, use the left side of `KEY: VALUE`|
|
||||
| value | `America/Toronto` | Find `-e KEY=VALUE`, use the text after `=` | Under `environment:`, use the right side of `KEY: VALUE`|
|
||||
|
||||
1. Scroll down to **Environment Variables**, and click **+ Add**.
|
||||
2. In this example, enter the key-value pair:
|
||||
- **key**: `TZ`
|
||||
- **value**: `America/Toronto`
|
||||
3. Click **Submit**. Repeat this process for any other variables.
|
||||

|
||||
|
||||
### Add storage volumes
|
||||
|
||||
Volumes keep data after restarts and reinstalls.
|
||||
|
||||
#### Before you begin
|
||||
|
||||
In Studio, you need to fill in two fields for each volume:
|
||||
|
||||
1. **Mount path**: In Docker, a volume looks like `HOST:CONTAINER`. Use the part after `:` as the mount path.
|
||||
|
||||
2. **Host path**: In Studio, host path has two inputs:
|
||||
- Prefix: `/app/data`, `/app/cache`, or `/app/Home`.
|
||||
| Host path prefix | Description |
|
||||
| --- | --- |
|
||||
| `/app/data` | Persistent app data. Data can be accessed across nodes and is not deleted<br> when the app is uninstalled. Appears under `/Data/studio` in Files. |
|
||||
| `/app/cache` | Temporary app data. Data is stored in the node's local disk and is deleted<br> when the app is uninstalled. Appears under `/Cache/<device-name>/studio` <br>in Files. |
|
||||
| `/app/Home` | User data directory. Mainly used for reading external user files. Data is <br>not deleted.|
|
||||
- Host path: Enter the target folder, starting with `/`, for example `/db` or `/logos`.
|
||||
:::info Host path rules
|
||||
Studio automatically prefixes the full path with the app name. If the app name is `test` and you set host path `/app/data/folder1`, the actual path becomes `/Data/studio/test/folder1` in Files.
|
||||
:::
|
||||
|
||||
#### Configure volumes for Wallos
|
||||
|
||||
Wallos requires two volumes. Add them one by one.
|
||||
|
||||
**Volume A: Database**
|
||||
|
||||
Source mapping:
|
||||
- In `docker run`: `/path/to/config/wallos/db:/var/www/html/db`
|
||||
- In `docker-compose.yaml`: `./db:/var/www/html/db`.
|
||||
|
||||
This data is for high-frequency I/O and does not need to be saved permanently. Map it to `/app/cache` so it will be deleted when the app is uninstalled.
|
||||
1. Click **+ Add** next to **Storage Volume**.
|
||||
2. For **Host path**, select `/app/cache`, then enter `/db`.
|
||||
3. For **Mount path**, enter `/var/www/html/db`.
|
||||
4. Click **Submit**.
|
||||
|
||||
**Volume B: Logos**
|
||||
|
||||
Source mapping:
|
||||
- In `docker run`: `/path/to/config/wallos/logos:/var/www/html/images/uploads/logos`
|
||||
- In `docker-compose.yaml`: `./logos:/var/www/html/images/uploads/logos`.
|
||||
|
||||
This is user-uploaded data that should be persistent and reusable, even if the app is reinstalled. Map it to `/app/data`.
|
||||
|
||||
1. Click **+ Add** next to **Storage Volume**.
|
||||
2. For **Host path**, select `/app/data`, then enter `/logos`.
|
||||
3. For **Mount path**, enter `/var/www/html/images/uploads/logos`.
|
||||
4. Click **Submit**.
|
||||
{width=90%}
|
||||
|
||||
You can check Files later to verify the mounted paths.
|
||||
{width=90%}
|
||||
|
||||
### Optional: Configure GPU or database middleware
|
||||
|
||||
If your app needs GPU, enable the **GPU** option under **Instance Specifications** and select the GPU vendor.
|
||||
{width=90%}
|
||||
|
||||
If your app needs Postgres or Redis, enable it under **Instance Specifications**.
|
||||
{width=90%}
|
||||
|
||||
When enabled, Studio provides dynamic variables. You must use these variables in the **Environment Variables** section for your app to connect to the database.
|
||||
- **Postgres variables:**
|
||||
|
||||
| Variables | Description |
|
||||
|--------------|-----------------------|
|
||||
| $(PG_USER) | PostgreSQL username |
|
||||
| $(PG_DBNAME) | Database name |
|
||||
| $(PG_PASS) | Postgres Password |
|
||||
| $(PG_HOST) | Postgres service host |
|
||||
| $(PG_PORT) | Postgres service port |
|
||||
|
||||
- **Redis variables:**
|
||||
|
||||
| Variables | Description |
|
||||
|---------------|--------------------|
|
||||
| $(REDIS_HOST) | Redis service host |
|
||||
| $(REDIS_PORT) | Redis service port |
|
||||
| $(REDIS_USER) | Redis username |
|
||||
| $(REDIS_PASS) | Redis password |
|
||||
|
||||
### Deploy and test the app
|
||||
1. Click **Create** at the bottom of the page. Studio will generate the project files and deploy the app automatically.
|
||||
2. Wait for Studio to generate the package files for your app. You can check the status in the bottom bar.
|
||||
3. When the app is successfully deployed, click **Preview** in the top-right corner to launch it. If **Preview** does not appear, refresh the page.
|
||||

|
||||
|
||||
## Manage the app
|
||||
|
||||
### Update name and icon
|
||||
|
||||
Apps deployed from Studio include a `-dev` suffix and a default icon. You can polish this by editing the manifest file.
|
||||

|
||||
|
||||
1. In Studio, click **<span class="material-symbols-outlined">box_edit</span>Edit** in the top-right to open the editor.
|
||||
2. Click `OlaresManifest.yaml` to view the content.
|
||||
3. Change the `title` field under `entrance` and `metadata`. For example, change `wallos` to `Wallos`.
|
||||
4. Replace the default icon image address of field `icon` under `entrance` and `metadata`.
|
||||

|
||||
5. Click <span class="material-symbols-outlined">save</span> in the top-right to save changes.
|
||||
6. Click **Apply** to reinstall with the updated package.
|
||||
|
||||
:::info
|
||||
If no changes are detected since the last deployment, clicking **Apply** will simply return to the app status page without reinstalling.
|
||||
:::
|
||||

|
||||
|
||||
### Remove the app
|
||||
|
||||
If you no longer need the app, you can remove it.
|
||||
1. In Studio, click <span class="material-symbols-outlined">more_vert</span> in the top-right corner.
|
||||
2. You can choose to:
|
||||
- **Uninstall**: Removes the running app from Olares, but keeps the project in Studio so you can continue editing the package.
|
||||
- **Delete**: Uninstalls the app and removes the project from Studio. This action is irreversible.
|
||||
|
||||
## Troubleshoot problems
|
||||
|
||||
### Cannot install the app
|
||||
|
||||
If installation fails, review the error at the bottom right of the page and click **View** to expand details.
|
||||

|
||||
|
||||
### App runs but does not work
|
||||
|
||||
Once running, you can manage the app from its deployment details page in Studio. The interface of this page is similar to Control Hub. If details don't appear, refresh the page. You can:
|
||||
|
||||
- Use **Stop** and **Restart** controls to reset the process. This action can often resolve runtime issues like a frozen process.
|
||||
- Check events or logs to investigate runtime errors. See [Export container logs for troubleshooting](/manual/olares/controlhub/manage-container.md#export-container-logs-for-troubleshooting) for details.
|
||||
|
||||

|
||||
|
||||
## Resources
|
||||
|
||||
- [Package and upload your app to Market](/developer/develop/tutorial/package-upload.md): Learn how to package and upload an app for Market.
|
||||
- [Develop in a dev container](/developer/develop/tutorial/develop.md): Develop in an isolated environment identical to the production runtime.
|
||||
- [Add icons, feature image, and promotional images](/developer/develop/tutorial/assets.md): Prepare and upload icons, feature image, and promotional images for your Olares apps.
|
||||
66
docs/one/dual-boot-dual-drive.md
Normal file
66
docs/one/dual-boot-dual-drive.md
Normal file
@@ -0,0 +1,66 @@
|
||||
---
|
||||
outline: [2,3]
|
||||
description: Learn how to install Windows on a secondary SSD to create a dual-boot system on Olares One.
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: Dual-boot, Windows, NVMe SSD, BIOS, Windows installation
|
||||
---
|
||||
|
||||
# Dual-boot Windows on a secondary SSD <Badge type="tip" text="30 min" />
|
||||
For competitive gaming or Windows-exclusive software, you can add a secondary NVMe SSD to create a dual-boot system.
|
||||
|
||||
This dual-drive configuration physically isolates the systems. This ensures Olares OS remains stable and secure while providing full native performance for your Windows applications.
|
||||
|
||||
## Prerequisites
|
||||
**Hardware**<br>
|
||||
- A secondary NVMe M.2 SSD physically installed in Olares One.
|
||||
- A USB flash drive containing a bootable Windows installation media.
|
||||
- A wired keyboard and mouse.
|
||||
- A monitor connected to Olares One.
|
||||
|
||||
## Step 1: Boot into BIOS
|
||||
1. Insert the Windows USB boot drive into a USB port on Olares One.
|
||||
2. Power on Olares One or restart it if it is already running.
|
||||
3. When the Olares logo appears, immediately press the **Delete** key repeatedly to enter **BIOS setup**.
|
||||

|
||||
|
||||
## Step 2: Boot from USB
|
||||
|
||||
1. Navigate to the **Boot** tab using the arrow keys on your keyboard.
|
||||
2. Set **Boot Option #1** to your Windows USB flash drive, and press **Enter**.
|
||||
3. Press **F10**, then select **Yes** to save and exit BIOS.
|
||||
4. The system restarts and boots from the USB drive into the Windows installation interface.
|
||||
|
||||
## Step 3: Install Windows
|
||||
1. Follow the on-screen prompts to begin the Windows installation.
|
||||
:::danger Select the correct drive
|
||||
You must carefully identify the secondary SSD.
|
||||
|
||||
Selecting the wrong drive will permanently erase your Olares data.
|
||||
:::
|
||||
|
||||
2. When the installation finishes and the system restarts, unplug the Windows USB drive.
|
||||
|
||||
Once installation is complete, the system will restart into Windows automatically.
|
||||
|
||||
## Switch between operating systems
|
||||
|
||||
Because the operating systems are on separate physical drives, you switch between them using the BIOS boot priority.
|
||||
|
||||
### Switch to Olares OS
|
||||
1. Restart Olares One.
|
||||
2. Press the **Delete** key repeatedly to enter **BIOS setup**.
|
||||
3. Go to the **Boot** tab.
|
||||
4. Set **Boot Option #1** to the SSD containing Olares OS.
|
||||
5. Press **F10** to save and exit BIOS.
|
||||
|
||||
### Switch to Windows
|
||||
1. Restart Olares One.
|
||||
2. Press the **Delete** key repeatedly to enter **BIOS setup**.
|
||||
3. Set **Boot Option #1** to the secondary SSD containing Windows.
|
||||
4. Press **F10** to save and exit BIOS.
|
||||
|
||||
## Resources
|
||||
- [Install NVIDIA drivers on Windows](install-nvidia-driver.md)
|
||||
- [Run a Windows VM on Olares One](windows.md)
|
||||
157
docs/one/dual-boot-single-drive.md
Normal file
157
docs/one/dual-boot-single-drive.md
Normal file
@@ -0,0 +1,157 @@
|
||||
---
|
||||
outline: [2,3]
|
||||
description: Install Windows and Olares OS on a single SSD using a dual-boot configuration.
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: Dual-boot, Single SSD, Windows, Ubuntu, Olares OS, Partitioning
|
||||
---
|
||||
|
||||
# Dual-boot Windows on a single SSD <Badge type="tip" text="45 min" />
|
||||
|
||||
Run both Windows and Olares OS on Olares One without adding a second drive.
|
||||
|
||||
This configuration installs Windows first, then sets up Ubuntu Linux alongside it, and finally deploys Olares OS.
|
||||
|
||||
## Prerequisites
|
||||
**Hardware**<br>
|
||||
- Olares One connected to Power.
|
||||
- Wired keyboard and mouse connected to Olares One.
|
||||
- (Recommended) An Ethernet cable connecting Olares One to your router.
|
||||
- A USB flash drive contains Windows installation media.
|
||||
- A USB flash drive contains Ubuntu Server or Desktop (24.04 LTS or newer) installation media.
|
||||
|
||||
**Network**<br>
|
||||
- A reliable internet connection.
|
||||
- Your mobile phone connected to the same network.
|
||||
|
||||
**Software**<br>
|
||||
- [You have downloaded the LarePass app and created an Olares ID](first-boot.md#step-1-power-on-and-install-larepass).
|
||||
|
||||
:::danger Backup required
|
||||
Partitioning a drive carries a risk of data loss. If you have important data on your current drive, backup everything to an external source before proceeding.
|
||||
:::
|
||||
|
||||
## Step 1: Install Windows
|
||||
1. Insert the Windows USB boot drive into a USB port on Olares One.
|
||||
2. Power on Olares One or restart it if it is already running.
|
||||
3. When the Olares logo appears, immediately press the **Delete** key repeatedly to enter **BIOS setup**.
|
||||

|
||||
|
||||
4. Navigate to the **Boot** tab using the arrow keys on your keyboard.
|
||||
5. Set **Boot Option #1** to your Windows USB flash drive, and press **Enter**.
|
||||
6. Press **F10**, then select **Yes** to save and exit BIOS. The system restarts and boots from the USB drive into the Windows installation interface.
|
||||
7. Follow the on-screen prompts to begin the Windows installation.
|
||||
8. When the installation finishes and the system restarts, unplug the Windows USB drive.
|
||||
|
||||
The system will boot into Windows automatically.
|
||||
|
||||
## Step 2: Create a partition for Ubuntu
|
||||
|
||||
1. Once Windows is running, right-click the **Start** button and select **Disk Management**.
|
||||
2. Right-click your main `C:` partition and select **Shrink Volume**.
|
||||
3. Enter the amount of space to free up for Olares. Minimum 150 GB is required.
|
||||
:::tip
|
||||
Avoid splitting the drive into two equal sizes. Using distinct sizes makes it easier to identify the correct partition later during the Ubuntu installation.
|
||||
:::
|
||||
4. Click **Shrink** to create a block of unallocated space.
|
||||
|
||||
## Step 3: Install Ubuntu
|
||||
|
||||
Olares OS runs on top of a Linux kernel. You will install Ubuntu to serve as the host system.
|
||||
|
||||
1. Insert the Ubuntu USB drive and restart Olares One.
|
||||
2. When the Olares logo appears, press the **Delete** key repeatedly to enter **BIOS setup**.
|
||||
3. Navigate to the **Boot** tab, set **Boot Option #1** to your Ubuntu USB flash drive, and then press **Enter**.
|
||||
4. Press **F10**, then select **Yes** to save and exit BIOS. The system restarts and boots from the USB drive into the Ubuntu installer.
|
||||
5. Follow the installer prompts until you reach the **Installation type** screen.
|
||||
:::tip
|
||||
If this option does not appear, select the manual installation option to manually assign the unallocated space to Ubuntu.
|
||||
:::
|
||||
6. When the installation finishes and the system restarts, unplug the Ubuntu USB drive.
|
||||
|
||||
The system will boot into Ubuntu automatically.
|
||||
|
||||
## Step 4: Install Olares OS
|
||||
|
||||
1. Log in to Ubuntu using your username and password.
|
||||
2. Open a terminal window if using Ubuntu Desktop or use the command line directly.
|
||||
3. Run the official installation script:
|
||||
```bash
|
||||
curl -fsSL https://olares.sh | bash
|
||||
```
|
||||
|
||||
4. At the end of the installation process, you will be prompted to enter your domain name and Olares ID.
|
||||
|
||||

|
||||
|
||||
For example, if your full Olares ID is `alice123@olares.com`:
|
||||
|
||||
- **Domain name**: Press `Enter` to use the default domain name or type `olares.com`.
|
||||
- **Olares ID**: Enter the prefix of your Olares ID. In this example, enter `alice123`.
|
||||
|
||||
Upon completion of the installation, the initial system information, including the Wizard URL and the initial login password, will appear on the screen. You will need them later in the activation stage.
|
||||

|
||||
|
||||
## Step 5: Activate Olares OS
|
||||
|
||||
1. Enter the Wizard URL in the browser on Ubuntu, or use a browser on another computer connected to the same network.
|
||||

|
||||
2. Enter the one-time password and click **Continue**.
|
||||
|
||||

|
||||
3. Select the system language.
|
||||
|
||||

|
||||
4. Select a reverse proxy node that is geographically closest to your location.
|
||||
|
||||

|
||||
|
||||
5. Activate Olares using LarePass app.
|
||||
|
||||
a. Open LarePass app, and tap **Scan QR code** to scan the QR code on the Wizard page and complete the activation.
|
||||
|
||||

|
||||
|
||||
b. Reset the login password.
|
||||
|
||||
|
||||
After setup is complete, the LarePass app returns to the home screen, and the browser redirects you to the Olares login page.
|
||||
|
||||
## Switch between operating systems
|
||||
|
||||
You switch between Windows and Olares using the BIOS boot priority.
|
||||
### Switch to Olares OS
|
||||
1. Restart Olares One.
|
||||
2. Press the **Delete** key repeatedly to enter **BIOS setup**.
|
||||
3. Go to the **Boot** tab.
|
||||
4. Set **Boot Override** to Ubuntu.
|
||||
5. Press **F10** to save and exit BIOS.
|
||||
|
||||
### Switch to Windows
|
||||
1. Restart Olares One.
|
||||
2. Press the **Delete** key repeatedly to enter **BIOS setup**.
|
||||
3. Go to the **Boot** tab.
|
||||
4. Set **Boot Override** to Windows.
|
||||
5. Press **F10** to save and exit BIOS.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### An error occurs during installation
|
||||
|
||||
If an error occurs during installation, use the following command to uninstall first:
|
||||
|
||||
```bash
|
||||
olares-cli uninstall --all
|
||||
```
|
||||
|
||||
After uninstalling, retry the installation by running the original installation command.
|
||||
|
||||
### The Ubuntu interface is lagging
|
||||
When you first boot into the Ubuntu desktop, the interface might feel laggy. This is because the GPU drivers for Ubuntu are not yet installed.
|
||||
|
||||
Proceed with the Olares OS installation. The installation script automatically installs the necessary GPU drivers, which will resolve the lag.
|
||||
|
||||
|
||||
## Resources
|
||||
- [Install NVIDIA drivers on Windows](install-nvidia-driver.md)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user