PasarGuard
迁移

Marzban 到 PasarGuard

本指南适用于 Marzban beta-3 及以下版本。

本指南将帮助您将数据、设置和用户帐户从 Marzban 迁移到 PasarGuard,且不会丢失任何内容。

解释了两种迁移方法。您可以选择您更舒服的一个。

保留所有现有设置和文件。不需要新服务器。但稍微复杂一些,涉及更多命令。

更简单、更快,命令更少。但需要新的服务器,并且迁移后需要手动配置一些设置。

先决条件

⚠️ 重要:在开始迁移过程之前,请务必完整备份您的数据。

  • 确保您拥有服务器的 root 权限。
  • 备份您当前的 Marzban 安装。
  • 检查 Docker 和 Docker Compose 是否已安装。

迁移步骤:当前安装

1. 停止 Marzban 服务

首先,停止所有正在运行的 Marzban 容器:

停止服务命令

cd /opt/marzban
docker compose down

2. 重命名主目录

如果 PasarGuard 目录已存在,请删除它们:

目录删除命令

rm -r /opt/pasarguard /var/lib/pasarguard /var/lib/mysql/pasarguard

将 Marzban 主目录名称更改为 PasarGuard:

目录重命名命令

sudo mv /opt/marzban /opt/pasarguard

3. 重命名数据目录

同时更改数据目录名称:

数据目录重命名命令

sudo mv /var/lib/marzban /var/lib/pasarguard

4. 重命名 MySQL 目录(如果使用)

如果您使用的是 MySQL 或 MariaDB,并且有专门用于 Marzban 数据库的目录:

MySQL 目录重命名命令

sudo mv /var/lib/mysql/marzban /var/lib/mysql/pasarguard

如果您遇到“无此文件或目录”错误,可能是因为 MySQL 目录不同。请改用以下命令:

mkdir -p /var/lib/mysql/pasarguard
mv /var/lib/pasarguard/mysql/* /var/lib/mysql/pasarguard
rm -r /var/lib/pasarguard/mysql

5. 更新环境变量

进入新的 PasarGuard 目录并更新环境变量文件:

cd /opt/pasarguard

使用以下命令更新 .env 文件中引用的所有路径:

sudo sed -i 's|/var/lib/marzban|/var/lib/pasarguard|g' .env

如果您使用的是旧版本(0.8.4 或更低版本),则还需要更改 SQL 驱动程序:

打开 .env 文件文件:

nano.env

SQLite 驱动程序更新

❌ 旧版本

SQLALCHEMY_DATABASE_URL = "sqlite:////var/lib/marzban/db.sqlite3"

✅ 新版本

SQLALCHEMY_DATABASE_URL = "sqlite+aiosqlite:////var/lib/pasarguard/db.sqlite3"

MySQL 驱动程序更新

对于 MariaDB,请遵循与 MySQL 相同的步骤。

⚠️ 警告:在此示例中,MYSQL_ROOT_PASSWORD 应替换为 .env 文件中的值。

❌ 旧版本

SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:MYSQL_ROOT_PASSWORD@127.0.0.1/marzban"

✅ 新版本

SQLALCHEMY_DATABASE_URL = "mysql+asyncmy://root:MYSQL_ROOT_PASSWORD@127.0.0.1/pasarguard"

其他变更

如果您在 .env 文件中使用了 V2RAY_SUBSCRIPTION_TEMPLATE 或配置了 TLS Inbound,则需要更新它们;否则,您可以跳过此步骤。

将 v2ray 目录重命名为 xray 目录命令

使用以下命令将 v2ray 目录更改为 xray:

mv /var/lib/pasarguard/templates/v2ray /var/lib/pasarguard/templates/xray

更新 xray-config 证书目录

xray_config.json 文件中,将证书目录从 marzban 更新为 pasarguard:

nano /var/lib/pasarguard/xray_config.json

更改后,您的 .env 文件和 xray_config.json 应如下所示:

更新 .env 文件中的 Xray 订阅模板

❌ 旧版本

V2RAY_SUBSCRIPTION_TEMPLATE = "v2ray/default.json"

✅ 全新版本

XRAY_SUBSCRIPTION_TEMPLATE = "xray/default.json"

更新 xray_config.json 中的证书目录

❌ 旧版本

      "certificates": [
        {
          "certificateFile": "/var/lib/marzban/certs/example.com/fullchain.pem",
          "keyFile": "/var/lib/marzban/certs/example.com/key.pem"
        }
      ],

✅ 全新版本

      "certificates": [
        {
          "certificateFile": "/var/lib/pasarguard/certs/example.com/fullchain.pem",
          "keyFile": "/var/lib/pasarguard/certs/example.com/key.pem"
        }
      ],

6. 更新 Docker Compose 文件

更新 docker-compose.yml 文件以反映新路径。您需要手动编辑此文件:

sudo nano docker-compose.yml

Docker Compose 更改

以下是每个数据库所需更改的比较:

关键更改摘要:

部分之前之后
服务名称marzbanpasarguard
Docker 镜像gozargah/marzban:latestpasarguard/panel:latest
应用卷/var/lib/marzban:/var/lib/marzban/var/lib/pasarguard:/var/lib/pasarguard
MySQL 数据库marzbanpasarguard
MySQL 卷/var/lib/mysql/marzban:/var/lib/mysql/var/lib/mysql/pasarguard:/var/lib/mysql

7. 将 Marzban MySQL 数据库更改为 PasarGuard(如果使用)

如果您使用的是 SQLite 数据库,请跳过此步骤。

如果您使用的是 MySQL 或 MariaDB 数据库,请使用以下命令导出 Marzban 数据库,以便稍后将其导入为 PasarGuard 数据库。

⚠️ 注意:所有以下数据库迁移命令都应在 /opt/pasarguard/ 目录中执行。

启动 MySQL 或 MariaDB

首先,根据您使用的 MySQL 或 MariaDB 服务启动相应的服务。

cd /opt/pasarguard && docker compose up -d mysql
cd /opt/pasarguard && docker compose up -d mariadb

导出数据库

导出 Marzban 数据库。系统将提示您输入数据库密码——请使用 .env 文件中 MYSQL_ROOT_PASSWORD 的值。

docker compose exec mysql mysqldump -u root -p -h 127.0.0.1 --databases marzban > "/opt/pasarguard/marzban.sql"
docker compose exec mariadb mariadb-dump -u root -p -h 127.0.0.1 --databases marzban > "/opt/pasarguard/marzban.sql"

如果您遇到“访问被拒绝”错误,请尝试使用“marzban”用户并使用.env文件中的“MYSQL_PASSWORD”值:

docker compose exec mysql mysqldump -u marzban -p -h 127.0.0.1 --databases marzban > "/opt/pasarguard/marzban.sql"
docker compose exec mariadb mariadb-dump -u marzban -p -h 127.0.0.1 --databases marzban > "/opt/pasarguard/marzban.sql"

编辑数据库信息

此步骤对于确保在 MySQL 中创建 pasarguard 数据库至关重要。 以下命令将在两行重要内容中将“marzban”替换为“pasarguard”:

sed -i '/^CREATE DATABASE/s/marzban/pasarguard/;/^USE/s/marzban/pasarguard/' /opt/pasarguard/marzban.sql

导入 PasarGuard 数据库

要导入新数据库,请将 MYSQL_ROOT_PASSWORD 替换为 .env 文件中的值,然后执行以下命令:

docker compose exec -T mysql mysql -u root -p"MYSQL_ROOT_PASSWORD" -h 127.0.0.1 < "/opt/pasarguard/marzban.sql"
docker compose exec -T mariadb mariadb -u root -p"MYSQL_ROOT_PASSWORD" -h 127.0.0.1 < "/opt/pasarguard/marzban.sql"

此过程可能需要一些时间才能完成。

如果您没有看到任何输出,这是一个好兆头。 要验证数据库导入是否成功,请列出 MySQL 数据库——您应该在其中看到 pasarguard

MYSQL_ROOT_PASSWORD 替换为 .env 文件中的值,然后运行该命令。

docker compose exec mysql mysql -u root -p"MYSQL_ROOT_PASSWORD" -e "SHOW DATABASES;"
docker compose exec mariadb mariadb -u root -p"MYSQL_ROOT_PASSWORD" -e "SHOW DATABASES;"

如果您在运行数据库导入命令时遇到任何错误,则表示出现了问题——请检查您的数据库凭据,然后重试。

删除 Marzban 数据库

由于我们不再需要 Marzban 数据库,因此可以将其删除。 系统将提示您输入数据库密码——请使用 .env 文件中 MYSQL_ROOT_PASSWORD 的值。

⚠️ 注意: 以下命令将删除 Marzban 数据库。 请确保您已完整备份数据,以便在出现任何问题时进行恢复。

rm /opt/pasarguard/marzban.sql
docker compose exec mysql mysql -u root -p -e "DROP DATABASE marzban;"
rm /opt/pasarguard/marzban.sql
docker compose exec mariadb mariadb -u root -p -e "DROP DATABASE marzban;"

8. 安装 PasarGuard 管理脚本

安装 PasarGuard 管理脚本以便于管理:

脚本安装命令

curl -sL https://github.com/PasarGuard/scripts/raw/main/pasarguard.sh | sudo bash -s -- @ install-script

此脚本为管理您的 PasarGuard 安装提供有用的命令。

9. 启动 PasarGuard

现在使用新配置启动 PasarGuard:

启动命令

pasarguard restart

10. 验证迁移

检查所有服务是否正常运行:

验证命令

pasarguard status

打开您的面板 URL 以确保一切正常工作。

迁移步骤:全新安装

💬 注意

在此迁移方法中,您之前在 .env 文件中的设置将不会迁移到 PasarGuard,您需要手动配置。

您可以查看 .env 文件中所有可配置变量,或参阅 面板配置文档 了解更多详情。

某些设置(例如 Telegram 机器人、订阅 URL 前缀等)现在可以直接从仪表板设置中进行配置。

1. 安装 PasarGuard

首先,使用与当前数据库对应的命令在新服务器上安装 PasarGuard,具体操作请参见 Panel 安装文档。 请务必仔细阅读相关说明。

2. SSL 认证

您需要在 PasarGuard 上启用 SSL 才能安全地访问仪表板。
请将您的 SSL 证书文件上传到您的服务器,并将其放置在 /var/lib/pasarguard/certs/ 目录中。
如果您还没有 SSL 证书,您可以申请一个——请参阅 SSL 激活文档

SSL 证书准备就绪后,请在 .env 文件中使用 UVICORN_SSL 变量启用它。

pasarguard edit-env

3. 上传数据库

现在,您需要将数据库上传到您的服务器。具体步骤取决于您使用的数据库。

导入 SQLite 数据库

  • 只需将 Marzban 中的 db.sqlite3 文件放入 /var/lib/pasarguard/ 目录即可。

导入 MySQL 或 MariaDB 数据库

如果您使用的是 MySQL 或 MariaDB 数据库,则需要使用 phpMyAdmin 应用程序导入数据库。请仔细遵循以下步骤:

  • 编辑数据库文件:

您需要编辑 MySQL 或 MariaDB 数据库文件。 使用文本编辑器打开 Marzban 备份中的 marzban.sql 文件。 按照图中所示,将这两行中的 marzban 替换为 pasarguard,然后保存文件。

如果您的文件中没有这两行,请继续执行下一步。

❌ 之前

Edit MySQL Database 1

✅ 修改后

Edit MySQL Database 2
  • 打开 phpMyAdmin

您可以在浏览器中通过 http://YOUR_SERVER_IP:8010 访问 phpMyAdmin。 使用 root 用户和 .env 文件中的 MYSQL_ROOT_PASSWORD 值登录。

  • 删除表:

如图所示,删除现有表:

Drop MySQL Tables
  • 导入数据库:

现在,在 phpMyAdmin 中导航到“导入”选项卡。在“选择文件”部分中选择您的 marzban.sql 文件,然后点击“导入”按钮。

4. 重启 PasarGuard

最后,重启 PasarGuard:

pasarguard restart

故障排除

常见问题

💡 提示: 大多数问题可以通过检查文件权限和路径配置来解决。

1. 权限被拒绝: 确保您使用适当的权限运行命令(需要时使用 sudo)。

2. 数据库连接问题: 如果您使用 MySQL,请检查数据库路径和登录信息是否正确更新。

3. 端口冲突: 确保没有其他服务使用相同的端口。

4. 缺少环境变量: 再次检查 .env 文件中的所有环境变量是否正确更新。

回滚

⚠️ 紧急回滚: 如果您遇到严重问题并需要恢复到以前版本

# 停止 PasarGuard
cd /opt/pasarguard
docker compose down

# 恢复原始目录
sudo mv /opt/pasarguard /opt/marzban
sudo mv /var/lib/pasarguard /var/lib/marzban
sudo mv /var/lib/mysql/pasarguard /var/lib/mysql/marzban  # 如果使用

# 从备份恢复原始 docker-compose.yml 和 .env 文件
# 然后启动 Marzban
marzban up

迁移后

成功迁移后:

  • 📡 PasarGuard 节点:安装并连接 PasarGuard 节点。PasarGuard 本身不运行 Xray-Core。
  • 📊 更新监控: 如果您有监控工具,请将它们连接到新路径。
  • 💾 更新备份: 确保您的备份脚本已更新为从新目录进行备份。
  • 🧪 测试所有功能: 彻底测试所有面板功能以确保一切正常工作。

支持

🔗 链接

  • 讨论组: Telegram
  • 问题: 如果您在迁移过程中遇到任何问题,请创建 issue。

📝 注意: 此指南假设标准 Marzban 安装。自定义配置可能需要额外步骤。