راهاندازی MySQL
به کمک این آموزش، شما میتوانید دیتابیس پیشفرض مرزبان (SQLite) را به MySQL تغییر دهید.
توجه
MySQL در نسخه v0.3.2
و بالاتر پشتیبانی میشود.
نکته
در تمام آموزش های پایین، فایل های docker-compose.yml
و .env
در مسیر /opt/marzban
و xray_config.json
در مسیر /var/lib/marzban
میتوانید پیدا کنید.
در صورتی که مرزبان را به صورت دستی نصب کردهاید، باید تغییرات مورد نیاز را شخصاً انجام دهید.
تغییر دیتابیس به MySQL (نصب تازه)
- باید یک سرویس برای MySQL ایجاد کنید. برای این کار، فایل
docker-compose.yml
به شکل زیر تغییر دهید.
services:
marzban:
image: gozargah/marzban:latest
restart: always
env_file: .env
network_mode: host
volumes:
- /var/lib/marzban:/var/lib/marzban
depends_on:
- mysql
mysql:
image: mysql:latest
restart: always
env_file: .env
network_mode: host
environment:
MYSQL_DATABASE: marzban
volumes:
- /var/lib/marzban/mysql:/var/lib/mysql
فعالسازی phpMyAdmin
برای فعال کردن phpMyAdmin، سرویس آن را مانند زیر به فایل docker-compose.yml
اضافه کنید.
services:
marzban:
image: gozargah/marzban:latest
restart: always
env_file: .env
network_mode: host
volumes:
- /var/lib/marzban:/var/lib/marzban
depends_on:
- mysql
mysql:
image: mysql:latest
restart: always
env_file: .env
network_mode: host
command: --bind-address=127.0.0.1 --mysqlx-bind-address=127.0.0.1 --disable-log-bin
environment:
MYSQL_DATABASE: marzban
volumes:
- /var/lib/marzban/mysql:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
restart: always
env_file: .env
network_mode: host
environment:
PMA_HOST: 127.0.0.1
APACHE_PORT: 8010
UPLOAD_LIMIT: 1024M
depends_on:
- mysql
با این سرویس، phpMyAdmin روی پورت 8010 سرور شما در دسترس خواهد بود.
نام کاربری ورود، root خواهد بود. password را در ادامه آموزش شما تعیین خواهید کرد.
- متغیر های زیر را در فایل
.env
مقداردهی کنید.
DB_PASSWORD
را به پسورد دلخواه خود برای دیتابیس تغییر دهید.
توجه
-
DB_PASSWORD
در هر دو متغییر باید به یک مقدار یکسان تغییر کند. - متغیر
MYSQL_ROOT_PASSWORD
در سرویس MySQL استفاده میشود و در متغیر های پیشفرض مرزبان وجود ندارد، در نتیجه خودتان باید آن را به فایل.env
اضافه کنید.
SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:DB_PASSWORD@127.0.0.1/marzban"
MYSQL_ROOT_PASSWORD = DB_PASSWORD
- بعد کد زیر رو که مربوط به دیتابیس sqlite هست رو با اضافه کردن # به اول آن کامنت کنین.
#SQLALCHEMY_DATABASE_URL = "sqlite:////var/lib/marzban/db.sqlite3"
- مرزبان را ریاستارت کنید.
marzban restart
از این پس، اطلاعات مرزبان در MySQL (در مسیر /var/lib/marzban/mysql
) ذخیره خواهد شد.
مهاجرت به MySQL (انتقال اطلاعات)
توجه
این عملیات ممکن است کمی طول بکشد، در نتیجه از قبل هاهنگی های لازم را انجام دهید.
برای انتقال اطلاعات و تغییر دیتابیس مرزبان از SQLite به MySQL باید مراحل زیر را انجام دهید.
- مراحل ذکر شده تغییر دیتابیس به MySQL را انجام دهید.
- پس از ریاستارت شدن مرزبان، دستور زیر را اجرا کنید تا از دیتابیس قبلی خروجی بسازید.
sqlite3 /var/lib/marzban/db.sqlite3 '.dump --data-only' | sed "s/INSERT INTO \([^ ]*\)/REPLACE INTO \`\\1\`/g" > /tmp/dump.sql
- وارد دایرکتوری
/opt/marzban
شوید.
cd /opt/marzban
- دستور زیر را اجرا کنید تا یک کپی از فایل
dump.sql
در کانتینر MySQL ایجاد کنید.
docker compose cp /tmp/dump.sql mysql:/dump.sql
- دستور زیر را اجرا کنید تا اطلاعات را به MySQL انتقال دهید.
راهنما
در این مرحله شما نیاز دارید تا password دیتابیس که قبلتر به جای DB_PASSWORD
قرار دادهاید را وارد کنید.
docker compose exec mysql mysql -u root -p -h 127.0.0.1 marzban -e "SET FOREIGN_KEY_CHECKS = 0; SET NAMES utf8mb4; SOURCE dump.sql;"
- فایل
/tmp/dump.sql
را پاک کنید.
rm /tmp/dump.sql
- مرزبان را ریاستارت کنید.
marzban restart
حالا اطلاعات دیتابیس قبلی شما به MySQL انتقال داده شده است.
نکته
ممکن است پس از ریاستارت کردن مرزبان فرآیند مایگریشن کامل انجام نشده باشد، میتوانید به جای ریاستارت کردن، مرزبان را با دستور زیر خاموش و روشن کنید.
marzban down && marzban up
نکته
اگر از اسکریپت بکآپ استفاده میکنید، لازم هست پس مهاجرت به MySQL
اسکریپت بکآپ را مجدد اجرا کنید، در غیر این صورت بکآپ دیتابیس MySQL
را در فایل بکآپ نخواهید داشت.
تغییر رمز پنل PhpMyAdmin
1
ابتدا به پنل مدیریت دیتابیس خودتون که بصورت پیش فرض روی پورت 8010
ران شده لاگین کنید.
2
قسمت User accounts
را بزنید.
3
سپس در دو قسمتی که مربوط به root
هستند روی Edit Privileges
بزنید، دقت کنید که این فرایند که در مراحل بعد نیز توضیح داده میشود را باید برای هر دو قسمت انجام دهید.
4
سپس روی قسمت Change password
بزنید.
5
در نهایت رمز جدید خودتون رو در دو باکس Enter
و Re-type
بزنید بعد دکمه Go
را بزنید.
6
پس از انجام مراحل بالا رمز جدید را در فایل env
در دو متغیر مربوط به دیتابیس MySQL
جایگزین کنین و بعد حتما مرزبان را ریاستارت کنید.
نکته
اگر از اسکریپت بکآپ استفاده میکنید بعد از تغییر رمز دیتابیس MySQL
لازم هست که اسکریپت رو مجدد اجرا کنید در غیر این صورت فرایند بکاپ گرفتن به علت تغییر رمز انجام نخواهد شد.
نکته
پیشنهاد میشود پورت پیشفرض پنل مدیریت دیتابیس PhpMyAdmin
را به پورت دیگری تغییر دهید تا یک قدم در جهت حفظ امنیت دیتابیس خود بردارید.
راهاندازی سرویس PhpMyAdmin برای سرورهای ARM
اگر معماری
CPU
سرور شماARM
باشد که شاملarm64
یاaarch64
است، و سرویسPhpMyAdmin
را با نمونه بالا فعال سازی کردین، در لاگ های مرزبان که با دستورmarzban logs
قابل مشاهده است ارورهایی را خواهید دید که مربوط به ساپورت نشدنPhpMyAdmin
برایCPU
سرور شماست. همچنین اگر دستورmarzban status
را بزنید، سرویسPhpMyAdmin
در حالتrestarting
قرار دارد.برای اطمینان کامل از نوع معماری
CPU
سرور می توانید با اسکریپت زیر یک نمای کلی از مشخصات سرور خودتان را مشاهده کنید که جلوی بخشArch
نوعCPU
قابل مشاهده است.
wget -qO- bench.sh | bash
- از این رو، باید سرویس
PhpMyAdmin
را در فایلdocker-compose.yml
مانند زیر قرار دهید که در آن از ایمیج متفاوت استفاده شده است.
services:
marzban:
image: gozargah/marzban:latest
restart: always
env_file: .env
network_mode: host
volumes:
- /var/lib/marzban:/var/lib/marzban
depends_on:
- mysql
mysql:
image: mysql:latest
restart: always
env_file: .env
network_mode: host
command: --bind-address=127.0.0.1 --mysqlx-bind-address=127.0.0.1 --disable-log-bin
environment:
MYSQL_DATABASE: marzban
volumes:
- /var/lib/marzban/mysql:/var/lib/mysql
phpmyadmin:
image: arm64v8/phpmyadmin:latest
restart: always
env_file: .env
network_mode: host
environment:
PMA_HOST: 127.0.0.1
APACHE_PORT: 8010
UPLOAD_LIMIT: 1024M
depends_on:
- mysql
- در نهایت مرزبان را با دستور زیر ریستارت کنید تا ایمیج ذکر شده
Pull
شود.
marzban restart
حالا اگر دستور زیر را وارد کنید سرویس PhpMyAdmin
باید در حالت running
قرار داشته باشد.
marzban status
رفع ارور موقع خروجی گرفتن از دیتابیس SQLite
اگر موقع مهاجرت به MySQL برای خروجی گرفتن از دیتابیس قبلی با ارور زیر مواجه شدید:
Unknown option "--data-only" on ".dump"
به این معناست که نسخه قدیمی از sqlite
روی سرور شما نصب است. برای حل این مشکل باید از راه دیگری ورژن بالاتری از sqlite
را نصب کنیم.
- دستور اول
sudo apt update && sudo apt upgrade -y
- دستور دوم
sudo apt-get install build-essential
- دستور سوم
wget https://www.sqlite.org/2023/sqlite-autoconf-3430200.tar.gz
- دستور چهارم
tar -xvf sqlite-autoconf-3430200.tar.gz && cd sqlite-autoconf-3430200
- پیکربندی و کامپایل سورس کد (این مرحله ممکن است 3 الی 4 دقیقه طول بکشد)
./configure
make
- حذف نسخه قدیمی
SQLite
sudo apt-get purge sqlite3
- نصب نسخه جدید
sudo make install
- بهروزرسانی متغیر
PATH
export PATH="/usr/local/bin:$PATH"
- بررسی نسخه نصب شده
sqlite3 --version
اگر همه چیز را درست انجام داده باشید، نسخه جدید باید 3.43.2
باشد.
- اضافه کردن متغیر
PATH
به فایلbashrc
برای ماندگاری
فایل ~/.bashrc
را با nano
باز کنید.
nano ~/.bashrc
- سپس خط زیر را به انتهای فایل اضافه کنید.
export PATH="/usr/local/bin:$PATH"
- اعمال تغییرات فایل
bashrc
source ~/.bashrc
- حالا مجدد خروجی بگیرید و ادامه مراحل آموزش مهاجرت به MySQL را انجام دهید.