Update repository URL to git.tzim.uz/markmorado/pvemanager
This commit is contained in:
@@ -52,7 +52,7 @@ PVEmanager is a self-hosted web panel that provides a unified interface for mana
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. Clone
|
# 1. Clone
|
||||||
git clone https://github.com/markmorado/pvemanager.git
|
git clone https://git.tzim.uz/markmorado/pvemanager.git
|
||||||
cd pvemanager
|
cd pvemanager
|
||||||
|
|
||||||
# 2. Configure
|
# 2. Configure
|
||||||
@@ -152,6 +152,6 @@ Configured via the web interface — **Settings → Notifications**:
|
|||||||
|
|
||||||
Made with ❤️ for Proxmox users
|
Made with ❤️ for Proxmox users
|
||||||
|
|
||||||
[Issues](https://github.com/markmorado/pvemanager/issues) · [Changelog](CHANGELOG.md) · [Wiki](WIKI.md)
|
[Issues](https://git.tzim.uz/markmorado/pvemanager/issues) · [Changelog](CHANGELOG.md) · [Wiki](WIKI.md)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
241
WIKI.md
241
WIKI.md
@@ -1,6 +1,6 @@
|
|||||||
# 📖 PVEmanager - Documentation
|
# 📖 PVEmanager - Documentation
|
||||||
|
|
||||||
> Complete guide for installation, configuration and usage of PVEmanager v1.0
|
> Complete guide for installation, configuration and usage of PVEmanager v1.0.3
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -15,17 +15,18 @@
|
|||||||
7. [OS Templates](#-os-templates)
|
7. [OS Templates](#-os-templates)
|
||||||
8. [Proxmox Clusters](#-proxmox-clusters)
|
8. [Proxmox Clusters](#-proxmox-clusters)
|
||||||
9. [Snapshots](#-snapshots)
|
9. [Snapshots](#-snapshots)
|
||||||
10. [IPAM](#-ipam)
|
10. [Backups](#-backups)
|
||||||
11. [Remote Command Execution](#-remote-command-execution)
|
11. [IPAM](#-ipam)
|
||||||
12. [Monitoring](#-monitoring)
|
12. [Remote Command Execution](#-remote-command-execution)
|
||||||
13. [Security (RBAC v2)](#-security)
|
13. [Monitoring](#-monitoring)
|
||||||
14. [Localization](#-localization)
|
14. [Security (RBAC v2)](#-security)
|
||||||
15. [Settings](#-settings)
|
15. [Localization](#-localization)
|
||||||
16. [API Reference](#-api-reference)
|
16. [Settings](#-settings)
|
||||||
17. [Deployment Guide](#-deployment-guide)
|
17. [API Reference](#-api-reference)
|
||||||
18. [Private Repo Updates](#-private-repo-updates)
|
18. [Deployment Guide](#-deployment-guide)
|
||||||
19. [Troubleshooting](#-troubleshooting)
|
19. [Private Repo Updates](#-private-repo-updates)
|
||||||
20. [FAQ](#-faq)
|
20. [Troubleshooting](#-troubleshooting)
|
||||||
|
21. [FAQ](#-faq)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -99,11 +100,36 @@ docker compose up -d
|
|||||||
# Database
|
# Database
|
||||||
POSTGRES_PASSWORD=your_secure_password
|
POSTGRES_PASSWORD=your_secure_password
|
||||||
|
|
||||||
# Secret key (generate unique!)
|
|
||||||
SECRET_KEY=your-very-long-secret-key-change-me
|
|
||||||
|
|
||||||
# Timezone
|
# Timezone
|
||||||
TZ=Your/Timezone
|
TZ=Your/Timezone
|
||||||
|
|
||||||
|
# Disable update checks (for private repos without token)
|
||||||
|
DISABLE_UPDATE_CHECK=false
|
||||||
|
|
||||||
|
# GitHub token for private repository access (optional)
|
||||||
|
GITHUB_TOKEN=
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Backend (`backend/.env`)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Secret key (generate unique! minimum 32 characters)
|
||||||
|
SECRET_KEY=your-very-long-secret-key-change-me
|
||||||
|
|
||||||
|
# Default admin password — MUST be changed before first deployment!
|
||||||
|
ADMIN_PASSWORD=admin123
|
||||||
|
|
||||||
|
# Fernet encryption key for sensitive DB fields (Proxmox/cloud-init passwords).
|
||||||
|
# Generate: python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
|
||||||
|
# WARNING: Keep this key safe — losing it means losing access to encrypted passwords.
|
||||||
|
# If not set, passwords are stored as plaintext (insecure).
|
||||||
|
FERNET_KEY=
|
||||||
|
|
||||||
|
# JWT token lifetime (minutes). Default: 480 (8 hours)
|
||||||
|
ACCESS_TOKEN_EXPIRE_MINUTES=480
|
||||||
|
|
||||||
|
# CORS origins (comma-separated). Use actual domain(s) in production.
|
||||||
|
CORS_ORIGINS=*
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Email and Telegram Notifications
|
#### Email and Telegram Notifications
|
||||||
@@ -201,12 +227,34 @@ This section summarizes key API endpoints. All require JWT authentication.
|
|||||||
- `GET /settings/api/notifications` — get notification settings
|
- `GET /settings/api/notifications` — get notification settings
|
||||||
- `PUT /settings/api/notifications` — update notification settings
|
- `PUT /settings/api/notifications` — update notification settings
|
||||||
|
|
||||||
### Logs
|
### Backups & Storages
|
||||||
|
|
||||||
|
- `GET /api/backups/storages/{server_id}` — list storages
|
||||||
|
- `POST /api/backups/storages/{server_id}` — add storage
|
||||||
|
- `PUT /api/backups/storages/{server_id}/{storage_id}` — update storage
|
||||||
|
- `DELETE /api/backups/storages/{server_id}/{storage_id}` — delete storage
|
||||||
|
- `GET /api/backups/list/{server_id}?node=&storage=` — list backup files
|
||||||
|
- `DELETE /api/backups/{server_id}/backup` — delete backup file
|
||||||
|
- `POST /api/backups/create` — create VM/LXC backup (vzdump)
|
||||||
|
- `POST /api/backups/restore` — restore VM/LXC from backup
|
||||||
|
- `GET /api/backups/task/{server_id}/{node}/{upid}` — get task status/log
|
||||||
|
- `GET /api/backups/jobs` — list scheduled backup jobs
|
||||||
|
- `POST /api/backups/jobs` — create scheduled backup job
|
||||||
|
- `PUT /api/backups/jobs/{id}` — update scheduled backup job
|
||||||
|
- `DELETE /api/backups/jobs/{id}` — delete scheduled backup job
|
||||||
|
|
||||||
|
### High Availability (HA)
|
||||||
|
|
||||||
|
- `GET /api/{server_id}/ha/status` — get HA status for all VMs
|
||||||
|
- `GET /api/{server_id}/ha/{vm_type}/{vmid}` — get HA status for a VM
|
||||||
|
- `POST /api/{server_id}/ha/{vm_type}/{vmid}/add` — add VM to HA
|
||||||
|
- `DELETE /api/{server_id}/ha/{vm_type}/{vmid}/remove` — remove VM from HA
|
||||||
|
|
||||||
|
### Misc
|
||||||
|
|
||||||
|
- `POST /api/sync-vms` — force immediate VM sync from all Proxmox servers
|
||||||
|
|
||||||
- `GET /logs/api/logs` — get audit logs
|
|
||||||
- `GET /logs/api/stats` — get log statistics
|
|
||||||
|
|
||||||
## 🎯 Main Features
|
|
||||||
|
|
||||||
### Dashboard
|
### Dashboard
|
||||||
|
|
||||||
@@ -249,6 +297,22 @@ This section summarizes key API endpoints. All require JWT authentication.
|
|||||||
- Snapshot operation queue system
|
- Snapshot operation queue system
|
||||||
- Snapshot archival on VM deletion
|
- Snapshot archival on VM deletion
|
||||||
|
|
||||||
|
### Backups
|
||||||
|
|
||||||
|
- Manual backup creation (vzdump) for VMs and containers
|
||||||
|
- Backup listing and deletion by storage/node
|
||||||
|
- Restore VM/LXC from backup with optional new VMID
|
||||||
|
- **Scheduled backup jobs** with cron expressions
|
||||||
|
- Backup retention policies (keep_last, keep_daily, keep_weekly, keep_monthly)
|
||||||
|
- Storage pool management (add, edit, delete)
|
||||||
|
- Task progress tracking via UPID
|
||||||
|
|
||||||
|
### High Availability (HA)
|
||||||
|
|
||||||
|
- View HA status for all VMs on a server
|
||||||
|
- Add/remove VMs from Proxmox HA groups
|
||||||
|
- Per-VM HA status and group information
|
||||||
|
|
||||||
### IPAM (IP Address Management)
|
### IPAM (IP Address Management)
|
||||||
|
|
||||||
- Network and subnet management
|
- Network and subnet management
|
||||||
@@ -396,6 +460,17 @@ RAM: 512MB - 128GB
|
|||||||
Disk: Increase size (decrease not possible)
|
Disk: Increase size (decrease not possible)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### High Availability (HA)
|
||||||
|
|
||||||
|
Requires a Proxmox cluster with HA manager configured.
|
||||||
|
|
||||||
|
1. Open VM or container details
|
||||||
|
2. Go to **HA** tab
|
||||||
|
3. Click **Add to HA** and choose HA group (optional)
|
||||||
|
4. To remove — click **Remove from HA**
|
||||||
|
|
||||||
|
> Panel operations currently reflect HA status but do not replace Proxmox HA manager configuration.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ⚡ Bulk Operations
|
## ⚡ Bulk Operations
|
||||||
@@ -562,6 +637,116 @@ See [OS Templates - Cross-Node Template Deployment](#cross-node-template-deploym
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 💾 Backups
|
||||||
|
|
||||||
|
### Overview
|
||||||
|
|
||||||
|
PVEmanager provides a full backup management interface powered by Proxmox `vzdump`. You can create, browse, restore and delete backups, as well as configure automated scheduled jobs.
|
||||||
|
|
||||||
|
### Storage Management
|
||||||
|
|
||||||
|
Before creating backups, make sure the target storage is configured in Proxmox.
|
||||||
|
|
||||||
|
| Action | Description |
|
||||||
|
|--------|-------------|
|
||||||
|
| List storages | View all storages on a server |
|
||||||
|
| Add storage | Add a new storage pool (directory, NFS, CIFS, etc.) |
|
||||||
|
| Edit storage | Modify storage configuration |
|
||||||
|
| Delete storage | Remove storage from Proxmox |
|
||||||
|
|
||||||
|
### Creating a Backup
|
||||||
|
|
||||||
|
1. Navigate to **Backups** page
|
||||||
|
2. Select **Server** and **Node**
|
||||||
|
3. Choose **Storage** where the backup will be saved
|
||||||
|
4. Select **VM/Container** (by VMID)
|
||||||
|
5. Configure options:
|
||||||
|
- **Mode**: `snapshot` (default), `suspend`, or `stop`
|
||||||
|
- **Compress**: `zstd` (default), `lzo`, `gzip`, `none`
|
||||||
|
6. Click **Create Backup**
|
||||||
|
7. A UPID is returned — use it to track task progress
|
||||||
|
|
||||||
|
### Backup Modes
|
||||||
|
|
||||||
|
| Mode | Description | Downtime |
|
||||||
|
|------|-------------|----------|
|
||||||
|
| `snapshot` | Live snapshot (requires QEMU agent or LVM) | None |
|
||||||
|
| `suspend` | Suspend VM during backup | Brief |
|
||||||
|
| `stop` | Stop VM, backup, start again | Full stop |
|
||||||
|
|
||||||
|
### Listing & Deleting Backups
|
||||||
|
|
||||||
|
- Browse existing backups by server, node and storage
|
||||||
|
- Filter by VMID
|
||||||
|
- Delete individual backup files
|
||||||
|
|
||||||
|
### Restore
|
||||||
|
|
||||||
|
1. Select a backup file from the list
|
||||||
|
2. Click **Restore**
|
||||||
|
3. Specify:
|
||||||
|
- **Target storage** for restoration
|
||||||
|
- **New VMID** (optional, keep original or assign new)
|
||||||
|
- **Start after restore** (optional)
|
||||||
|
4. Restoration runs as a Proxmox task (UPID returned for tracking)
|
||||||
|
|
||||||
|
> ⚠️ Restoring to an existing VMID will overwrite it!
|
||||||
|
|
||||||
|
### Scheduled Backup Jobs
|
||||||
|
|
||||||
|
Automate recurring backups using cron-style scheduling.
|
||||||
|
|
||||||
|
#### Creating a Backup Job
|
||||||
|
|
||||||
|
```
|
||||||
|
Server: select Proxmox server
|
||||||
|
Node: target node
|
||||||
|
VMIDs: comma-separated list (e.g., 100,101,102)
|
||||||
|
Storage: backup destination
|
||||||
|
Mode: snapshot / suspend / stop
|
||||||
|
Compress: zstd / lzo / gzip / none
|
||||||
|
Cron: standard 5-field cron expression
|
||||||
|
Enabled: on/off toggle
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Cron Expression Examples
|
||||||
|
|
||||||
|
| Expression | Meaning |
|
||||||
|
|------------|---------|
|
||||||
|
| `0 2 * * *` | Every day at 02:00 |
|
||||||
|
| `0 3 * * 0` | Every Sunday at 03:00 |
|
||||||
|
| `0 1 * * 1-5` | Weekdays at 01:00 |
|
||||||
|
| `30 4 1 * *` | First day of each month at 04:30 |
|
||||||
|
|
||||||
|
#### Retention Policies
|
||||||
|
|
||||||
|
Configure how many backups to keep automatically:
|
||||||
|
|
||||||
|
| Parameter | Description | Default |
|
||||||
|
|-----------|-------------|---------|
|
||||||
|
| `keep_last` | Keep N most recent backups | 3 |
|
||||||
|
| `keep_daily` | Keep one per day for N days | 7 |
|
||||||
|
| `keep_weekly` | Keep one per week for N weeks | 4 |
|
||||||
|
| `keep_monthly` | Keep one per month for N months | 6 |
|
||||||
|
|
||||||
|
#### Managing Jobs
|
||||||
|
|
||||||
|
- **List jobs** — All backup jobs (admins see all; users see own)
|
||||||
|
- **Enable/disable** — Toggle job without deleting it
|
||||||
|
- **Edit** — Change schedule, retention, storage
|
||||||
|
- **Delete** — Remove job and its APScheduler entry
|
||||||
|
|
||||||
|
### Task Tracking
|
||||||
|
|
||||||
|
Every backup operation (create / restore / delete) returns a Proxmox UPID. Use it to poll task status and logs:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Get task status
|
||||||
|
GET /api/backups/task/{server_id}/{node}/{upid}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 🌐 IPAM
|
## 🌐 IPAM
|
||||||
|
|
||||||
### Networks
|
### Networks
|
||||||
@@ -968,6 +1153,7 @@ Access via **Settings → Security**:
|
|||||||
- Full name
|
- Full name
|
||||||
- Email (for notifications)
|
- Email (for notifications)
|
||||||
- Password change
|
- Password change
|
||||||
|
- **SSH Public Key** — stored in user profile and automatically injected into VM/LXC during cloud-init deployment
|
||||||
|
|
||||||
### Panel Settings
|
### Panel Settings
|
||||||
|
|
||||||
@@ -982,7 +1168,7 @@ Access via **Settings → Security**:
|
|||||||
The panel supports automatic updates from a Git repository. You can choose which repository to use:
|
The panel supports automatic updates from a Git repository. You can choose which repository to use:
|
||||||
|
|
||||||
**Available Options:**
|
**Available Options:**
|
||||||
1. **git.tzim.uz/dilshod/pve_manager** (Default) — Primary repository
|
1. **git.tzim.uz/markmorado/pvemanager** (Default) — Primary repository
|
||||||
2. **github.com/markmorado/pvemanager** — Mirror repository
|
2. **github.com/markmorado/pvemanager** — Mirror repository
|
||||||
3. **Custom Repository** — Your own fork or mirror
|
3. **Custom Repository** — Your own fork or mirror
|
||||||
|
|
||||||
@@ -1069,6 +1255,17 @@ curl -H "Authorization: Bearer eyJ..." \
|
|||||||
| PUT | `/settings/api/panel` | Update panel settings |
|
| PUT | `/settings/api/panel` | Update panel settings |
|
||||||
| GET | `/logs/api/logs` | Get audit logs |
|
| GET | `/logs/api/logs` | Get audit logs |
|
||||||
| GET | `/logs/api/stats` | Get log statistics |
|
| GET | `/logs/api/stats` | Get log statistics |
|
||||||
|
| GET | `/api/backups/storages/{server_id}` | List Proxmox storages |
|
||||||
|
| POST | `/api/backups/create` | Create VM/LXC backup |
|
||||||
|
| POST | `/api/backups/restore` | Restore VM/LXC from backup |
|
||||||
|
| GET | `/api/backups/list/{server_id}` | List backup files |
|
||||||
|
| DELETE | `/api/backups/{server_id}/backup` | Delete backup file |
|
||||||
|
| GET | `/api/backups/jobs` | List scheduled backup jobs |
|
||||||
|
| POST | `/api/backups/jobs` | Create scheduled backup job |
|
||||||
|
| GET | `/api/{server_id}/ha/status` | HA status for all VMs |
|
||||||
|
| POST | `/api/{server_id}/ha/{vm_type}/{vmid}/add` | Add VM to HA group |
|
||||||
|
| DELETE | `/api/{server_id}/ha/{vm_type}/{vmid}/remove` | Remove VM from HA |
|
||||||
|
| POST | `/api/sync-vms` | Force VM sync from Proxmox |
|
||||||
|
|
||||||
### Swagger Documentation
|
### Swagger Documentation
|
||||||
|
|
||||||
@@ -1306,5 +1503,5 @@ A: Not yet, but planned for future versions.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
*Last updated: December 2025*
|
*Last updated: March 2026*
|
||||||
*Version: 1.0*
|
*Version: 1.0.3*
|
||||||
|
|||||||
@@ -706,7 +706,7 @@ async def get_repository_url(
|
|||||||
setting = db.query(PanelSettings).filter(PanelSettings.key == "git_repository_url").first()
|
setting = db.query(PanelSettings).filter(PanelSettings.key == "git_repository_url").first()
|
||||||
if setting:
|
if setting:
|
||||||
return {"repository_url": setting.value}
|
return {"repository_url": setting.value}
|
||||||
return {"repository_url": "https://github.com/markmorado/pvemanager"}
|
return {"repository_url": "https://git.tzim.uz/markmorado/pvemanager"}
|
||||||
|
|
||||||
|
|
||||||
@router.put("/api/updates/repository")
|
@router.put("/api/updates/repository")
|
||||||
|
|||||||
@@ -131,8 +131,8 @@ def configure_git_for_public_access():
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
CORRECT_REPO_URL = "https://github.com/markmorado/pvemanager"
|
CORRECT_REPO_URL = "https://git.tzim.uz/markmorado/pvemanager"
|
||||||
_LEGACY_URLS = {"https://git.tzim.uz/dilshod/pve_manager"}
|
_LEGACY_URLS = {"https://git.tzim.uz/dilshod/pve_manager", "https://github.com/markmorado/pvemanager"}
|
||||||
|
|
||||||
|
|
||||||
def get_repository_url_from_settings():
|
def get_repository_url_from_settings():
|
||||||
@@ -168,7 +168,7 @@ def parse_repo_url(url: str) -> tuple:
|
|||||||
return owner_repo[0], owner_repo[1], "github"
|
return owner_repo[0], owner_repo[1], "github"
|
||||||
|
|
||||||
# GitLab or other Git hosting (Gitea, etc.)
|
# GitLab or other Git hosting (Gitea, etc.)
|
||||||
# https://git.tzim.uz/dilshod/pve_manager
|
# https://git.tzim.uz/markmorado/pvemanager
|
||||||
parts = url.split("://")
|
parts = url.split("://")
|
||||||
if len(parts) == 2:
|
if len(parts) == 2:
|
||||||
path_parts = parts[1].split("/")
|
path_parts = parts[1].split("/")
|
||||||
|
|||||||
@@ -616,7 +616,7 @@ body.update-in-progress .layout {
|
|||||||
<h2>{{ page_title or title or t('nav_dashboard') }}</h2>
|
<h2>{{ page_title or title or t('nav_dashboard') }}</h2>
|
||||||
<div class="header-actions">
|
<div class="header-actions">
|
||||||
<!-- GitHub Stars Button -->
|
<!-- GitHub Stars Button -->
|
||||||
<a href="https://github.com/markmorado/pvemanager" target="_blank" rel="noopener noreferrer" class="github-btn" title="Star us on GitHub">
|
<a href="https://git.tzim.uz/markmorado/pvemanager" target="_blank" rel="noopener noreferrer" class="github-btn" title="Star us on Gitea">
|
||||||
<i class="fa-brands fa-github"></i>
|
<i class="fa-brands fa-github"></i>
|
||||||
<span class="github-text">pvemanager</span>
|
<span class="github-text">pvemanager</span>
|
||||||
<svg class="github-star-icon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
|
<svg class="github-star-icon" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
|
||||||
@@ -869,9 +869,9 @@ body.update-in-progress .layout {
|
|||||||
// Load GitHub stars count
|
// Load GitHub stars count
|
||||||
async function loadGitHubStars() {
|
async function loadGitHubStars() {
|
||||||
try {
|
try {
|
||||||
const response = await fetch('https://api.github.com/repos/markmorado/pvemanager', {
|
const response = await fetch('https://git.tzim.uz/api/v1/repos/markmorado/pvemanager', {
|
||||||
headers: {
|
headers: {
|
||||||
'Accept': 'application/vnd.github.v3+json'
|
'Accept': 'application/json'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -880,7 +880,7 @@ body.update-in-progress .layout {
|
|||||||
const starsElement = document.getElementById('githubStars');
|
const starsElement = document.getElementById('githubStars');
|
||||||
if (starsElement) {
|
if (starsElement) {
|
||||||
// Format number with K for thousands
|
// Format number with K for thousands
|
||||||
const stars = data.stargazers_count;
|
const stars = data.stars_count;
|
||||||
const formatted = stars >= 1000
|
const formatted = stars >= 1000
|
||||||
? (stars / 1000).toFixed(1) + 'K'
|
? (stars / 1000).toFixed(1) + 'K'
|
||||||
: stars.toString();
|
: stars.toString();
|
||||||
|
|||||||
@@ -329,7 +329,7 @@
|
|||||||
<i class="fab fa-git-alt"></i> {{ t('git_repository') }}
|
<i class="fab fa-git-alt"></i> {{ t('git_repository') }}
|
||||||
</label>
|
</label>
|
||||||
<select id="git-repository-select" class="form-control" onchange="handleRepositoryChange()">
|
<select id="git-repository-select" class="form-control" onchange="handleRepositoryChange()">
|
||||||
<option value="https://git.tzim.uz/dilshod/pve_manager">git.tzim.uz/dilshod/pve_manager (Default)</option>
|
<option value="https://git.tzim.uz/markmorado/pvemanager">git.tzim.uz/markmorado/pvemanager (Default)</option>
|
||||||
<option value="https://github.com/markmorado/pvemanager">github.com/markmorado/pvemanager</option>
|
<option value="https://github.com/markmorado/pvemanager">github.com/markmorado/pvemanager</option>
|
||||||
<option value="custom">{{ t('custom_repository') }}...</option>
|
<option value="custom">{{ t('custom_repository') }}...</option>
|
||||||
</select>
|
</select>
|
||||||
|
|||||||
@@ -922,7 +922,7 @@ def migrate_git_repository_setting(conn):
|
|||||||
INSERT INTO panel_settings (key, value, description, created_at, updated_at)
|
INSERT INTO panel_settings (key, value, description, created_at, updated_at)
|
||||||
VALUES (
|
VALUES (
|
||||||
'git_repository_url',
|
'git_repository_url',
|
||||||
'https://git.tzim.uz/dilshod/pve_manager',
|
'https://git.tzim.uz/markmorado/pvemanager',
|
||||||
'Git repository URL for panel updates',
|
'Git repository URL for panel updates',
|
||||||
NOW(),
|
NOW(),
|
||||||
NOW()
|
NOW()
|
||||||
|
|||||||
Reference in New Issue
Block a user