Skip to content

Commit 64aeb99

Browse files
committed
feat: added MariaDB setup document
- added MariaDB setup document - added command to setup MySQL from the start
1 parent b30a062 commit 64aeb99

File tree

7 files changed

+286
-0
lines changed

7 files changed

+286
-0
lines changed

marzban/en/config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export const config = {
4444
{ text: 'Rules configuration', link: '/en/examples/blocking-rules' },
4545
{ text: 'All on one port', link: '/en/examples/all-on-one-port' },
4646
{ text: 'MySQL setup', link: '/en/examples/mysql' },
47+
{ text: 'MariaDB setup', link: '/en/examples/mariadb' },
4748
{ text: 'Practical SQL queries', link: '/en/examples/mysql-queries' },
4849
{ text: 'Backup', link: '/en/examples/backup' },
4950
{ text: 'Change Xray-core', link: '/en/examples/change-xray-version' },

marzban/en/examples/mariadb.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
---
2+
title: MariaDB setup
3+
---

marzban/fa/config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export const config: DefaultTheme.Config = {
4646
{ text: 'مسدودسازی سایت ها', link: '/fa/examples/blocking-rules' },
4747
{ text: 'همه چیز روی یک پورت', link: '/fa/examples/all-on-one-port' },
4848
{ text: 'راه‌اندازی MySQL', link: '/fa/examples/mysql' },
49+
{ text: 'راه‌اندازی MariaDB', link: '/fa/examples/mariadb' },
4950
{ text: 'کوئری های کاربردی SQL', link: '/fa/examples/mysql-queries' },
5051
{ text: 'بک‌آپ گرفتن', link: '/fa/examples/backup' },
5152
{ text: 'تغییر ورژن Xray-core', link: '/fa/examples/change-xray-version' },

marzban/fa/examples/mariadb.md

Lines changed: 261 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,261 @@
1+
---
2+
title: راه‌اندازی MariaDB
3+
---
4+
5+
# راه‌اندازی MariaDB
6+
7+
::: tip نکته
8+
در واقع دیتابیس MariaDB یک فورک از دیتابیس MySQL است و با توجه به اینکه منابع سرور را کمتر درگیر می‌کند به نظر میرسد تا حدودی بهینه‌تر است.
9+
:::
10+
11+
::: warning توجه
12+
MariaDB در نسخه `v0.3.2` و بالاتر پشتیبانی می‌شود.
13+
:::
14+
15+
## راه‌اندازی سریع دیتابیس MariaDB
16+
17+
- اگر هنوز مرزبان را نصب نکرده‌اید، با دستور زیر مرزبان را با دیتابیس `MariaDB` روی سرور خود نصب کنید.
18+
```bash
19+
sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install --database mariadb
20+
```
21+
22+
::: tip نکته
23+
رمز برای دیتابیس `MariaDB` در حین راه‌اندازی از شما پرسیده خواهد شد، پیشنهاد می‌شود برای حفظ امنیت دیتابیس خود رمز نسبتا قوی لنتخاب کنید، همچنین می‌توانید اینتر را بزنید تا یک رمز بصورت رندوم تعیین شود.
24+
:::
25+
26+
::: tip نکته
27+
اگر با دستور بالا مرزبان را با دیتابیس `MariaDB` راه‌اندازی کنید، بصورت پیش‌فرض پنل مدیریت دیتابیس `phpMyAdmin` فعال نشده است، از این رو اگر به آن احتیاج دارید طبق توضیحات زیر فقط سرویس `phpMyAdmin` را به انتهای فایل داکر مرزبان اضافه کنید.
28+
:::
29+
30+
31+
## تغییر دیتابیس به MariaDB (نصب تازه)
32+
33+
- اگر مرزبان را با دیتابیس `SQLite` نصب کرده‌اید با کمک این آموزش می‌توانید دیتابیس‌ را بصورت دستی به `MariaDB` تغییر دهید.
34+
35+
- باید یک سرویس برای `MariaDB` ایجاد کنید. برای این کار، فایل `docker-compose.yml` به شکل زیر تغییر دهید.
36+
37+
::: code-group
38+
```yml{10-12,14-48} [docker-compose.yml]
39+
services:
40+
marzban:
41+
image: gozargah/marzban:latest
42+
restart: always
43+
env_file: .env
44+
network_mode: host
45+
volumes:
46+
- /var/lib/marzban:/var/lib/marzban
47+
- /var/lib/marzban/logs:/var/lib/marzban-node
48+
depends_on:
49+
mariadb:
50+
condition: service_healthy
51+
52+
mariadb:
53+
image: mariadb:lts
54+
env_file: .env
55+
network_mode: host
56+
restart: always
57+
environment:
58+
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
59+
MYSQL_ROOT_HOST: '%'
60+
MYSQL_DATABASE: ${MYSQL_DATABASE}
61+
MYSQL_USER: ${MYSQL_USER}
62+
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
63+
command:
64+
- --bind-address=127.0.0.1 # Restricts access to localhost for increased security
65+
- --character_set_server=utf8mb4 # Sets UTF-8 character set for full Unicode support
66+
- --collation_server=utf8mb4_unicode_ci # Defines collation for Unicode
67+
- --host-cache-size=0 # Disables host cache to prevent DNS issues
68+
- --innodb-open-files=1024 # Sets the limit for InnoDB open files
69+
- --innodb-buffer-pool-size=256M # Allocates buffer pool size for InnoDB
70+
- --binlog_expire_logs_seconds=1209600 # Sets binary log expiration to 14 days (2 weeks)
71+
- --innodb-log-file-size=64M # Sets InnoDB log file size to balance log retention and performance
72+
- --innodb-log-files-in-group=2 # Uses two log files to balance recovery and disk I/O
73+
- --innodb-doublewrite=0 # Disables doublewrite buffer (reduces disk I/O; may increase data loss risk)
74+
- --general_log=0 # Disables general query log to reduce disk usage
75+
- --slow_query_log=1 # Enables slow query log for identifying performance issues
76+
- --slow_query_log_file=/var/lib/mysql/slow.log # Logs slow queries for troubleshooting
77+
- --long_query_time=2 # Defines slow query threshold as 2 seconds
78+
volumes:
79+
- /var/lib/marzban/mysql:/var/lib/mysql
80+
healthcheck:
81+
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
82+
start_period: 10s
83+
start_interval: 3s
84+
interval: 10s
85+
timeout: 5s
86+
retries: 3
87+
```
88+
:::
89+
90+
::: details فعال‌سازی phpMyAdmin
91+
برای فعال کردن phpMyAdmin، سرویس آن را مانند زیر به فایل `docker-compose.yml` اضافه کنید.
92+
93+
::: code-group
94+
```yml{50-60} [docker-compose.yml]
95+
services:
96+
marzban:
97+
image: gozargah/marzban:latest
98+
restart: always
99+
env_file: .env
100+
network_mode: host
101+
volumes:
102+
- /var/lib/marzban:/var/lib/marzban
103+
- /var/lib/marzban/logs:/var/lib/marzban-node
104+
depends_on:
105+
mariadb:
106+
condition: service_healthy
107+
108+
mariadb:
109+
image: mariadb:lts
110+
env_file: .env
111+
network_mode: host
112+
restart: always
113+
environment:
114+
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
115+
MYSQL_ROOT_HOST: '%'
116+
MYSQL_DATABASE: ${MYSQL_DATABASE}
117+
MYSQL_USER: ${MYSQL_USER}
118+
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
119+
command:
120+
- --bind-address=127.0.0.1 # Restricts access to localhost for increased security
121+
- --character_set_server=utf8mb4 # Sets UTF-8 character set for full Unicode support
122+
- --collation_server=utf8mb4_unicode_ci # Defines collation for Unicode
123+
- --host-cache-size=0 # Disables host cache to prevent DNS issues
124+
- --innodb-open-files=1024 # Sets the limit for InnoDB open files
125+
- --innodb-buffer-pool-size=256M # Allocates buffer pool size for InnoDB
126+
- --binlog_expire_logs_seconds=1209600 # Sets binary log expiration to 14 days (2 weeks)
127+
- --innodb-log-file-size=64M # Sets InnoDB log file size to balance log retention and performance
128+
- --innodb-log-files-in-group=2 # Uses two log files to balance recovery and disk I/O
129+
- --innodb-doublewrite=0 # Disables doublewrite buffer (reduces disk I/O; may increase data loss risk)
130+
- --general_log=0 # Disables general query log to reduce disk usage
131+
- --slow_query_log=1 # Enables slow query log for identifying performance issues
132+
- --slow_query_log_file=/var/lib/mysql/slow.log # Logs slow queries for troubleshooting
133+
- --long_query_time=2 # Defines slow query threshold as 2 seconds
134+
volumes:
135+
- /var/lib/marzban/mysql:/var/lib/mysql
136+
healthcheck:
137+
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
138+
start_period: 10s
139+
start_interval: 3s
140+
interval: 10s
141+
timeout: 5s
142+
retries: 3
143+
144+
phpmyadmin:
145+
image: phpmyadmin/phpmyadmin:latest
146+
restart: always
147+
env_file: .env
148+
network_mode: host
149+
environment:
150+
PMA_HOST: 127.0.0.1
151+
APACHE_PORT: 8010
152+
UPLOAD_LIMIT: 1024M
153+
depends_on:
154+
- mariadb
155+
```
156+
157+
با این سرویس، phpMyAdmin روی پورت 8010 سرور شما در دسترس خواهد بود.
158+
159+
نام کاربری ورود، root خواهد بود. password را در ادامه آموزش شما تعیین خواهید کرد.
160+
:::
161+
162+
- متغیر های زیر را در فایل `.env` مقداردهی کنید.
163+
164+
`DB_PASSWORD` را به پسورد دلخواه خود برای دیتابیس تغییر دهید.
165+
166+
::: warning توجه
167+
- ‍‍`DB_PASSWORD` در هر دو متغییر باید به یک مقدار یکسان تغییر کند.
168+
- `STRONG_PASSWORD` را یک رمز متفاوت تعیین کنید.
169+
- متغیرهای زیر در سرویس MariaDB استفاده می‌شود و در متغیر های پیش‌فرض مرزبان وجود ندارد، در نتیجه خودتان باید آن‌ها را به فایل `.env‍` اضافه کنید.
170+
:::
171+
172+
```env
173+
SQLALCHEMY_DATABASE_URL="mysql+pymysql://marzban:[email protected]:3306/marzban"
174+
MYSQL_ROOT_PASSWORD=STRONG_PASSWORD
175+
MYSQL_DATABASE=marzban
176+
MYSQL_USER=marzban
177+
MYSQL_PASSWORD=DB_PASSWORD
178+
```
179+
- بعد کد زیر رو که مربوط به دیتابیس `SQLite` هست رو با اضافه کردن `#` به اول آن کامنت کنید.
180+
```
181+
# SQLALCHEMY_DATABASE_URL = "sqlite:////var/lib/marzban/db.sqlite3"
182+
```
183+
184+
- مرزبان را ری‌استارت کنید.
185+
186+
```bash
187+
marzban restart
188+
```
189+
190+
از این پس، اطلاعات مرزبان در MariaDB (در مسیر `/var/lib/marzban/mysql`) ذخیره خواهد شد.
191+
192+
193+
## مهاجرت به MariaDB (انتقال اطلاعات)
194+
195+
::: warning توجه
196+
این عملیات ممکن است کمی طول بکشد، در نتیجه از قبل هاهنگی های لازم را انجام دهید.
197+
:::
198+
199+
برای انتقال اطلاعات و تغییر دیتابیس مرزبان از SQLite به MariaDB باید مراحل زیر را انجام دهید.
200+
201+
‍- مراحل ذکر شده [تغییر دیتابیس به MariaDB](mariadb.md#تغییر-دیتابیس-به-mariadb-نصب-تازه) را انجام دهید.
202+
203+
- پس از ری‌استارت شدن مرزبان، دستور زیر را اجرا کنید تا از دیتابیس قبلی خروجی بسازید.
204+
205+
``` bash
206+
sqlite3 /var/lib/marzban/db.sqlite3 '.dump --data-only' | sed "s/INSERT INTO \([^ ]*\)/REPLACE INTO \`\\1\`/g" > /tmp/dump.sql
207+
```
208+
209+
- وارد دایرکتوری `/opt/marzban` شوید.
210+
211+
``` bash
212+
cd /opt/marzban
213+
```
214+
215+
- دستور زیر را اجرا کنید تا یک کپی از فایل `dump.sql` در کانتینر MariaDB ایجاد کنید.
216+
217+
``` bash
218+
docker compose cp /tmp/dump.sql mariadb:/dump.sql
219+
```
220+
221+
- دستور زیر را اجرا کنید تا اطلاعات را به MariaDB انتقال دهید.
222+
223+
::: tip راهنما
224+
در این مرحله شما نیاز دارید تا password دیتابیس که قبل‌تر به جای `STRONG_PASSWORD` قرار داده‌اید را وارد کنید.
225+
:::
226+
``` bash
227+
docker compose exec mariadb mysql -u root -p -h 127.0.0.1 marzban -e "SET FOREIGN_KEY_CHECKS = 0; SET NAMES utf8mb4; SOURCE dump.sql;"
228+
```
229+
230+
- فایل `/tmp/dump.sql` را پاک کنید.
231+
232+
``` bash
233+
rm /tmp/dump.sql
234+
```
235+
236+
- مرزبان را ری‌استارت کنید.
237+
238+
``` bash
239+
marzban restart
240+
```
241+
242+
حالا اطلاعات دیتابیس قبلی شما به MariaDB انتقال داده شده است.
243+
244+
::: tip نکته
245+
ممکن است پس از ری‌استارت کردن مرزبان فرآیند مایگریشن کامل انجام نشده باشد، می‌توانید به جای ری‌استارت کردن، مرزبان را با دستور زیر خاموش و روشن کنید.
246+
```bash
247+
marzban down && marzban up
248+
```
249+
:::
250+
251+
::: tip نکته
252+
اگر از [اسکریپت بک‌آپ](https://gozargah.github.io/marzban/fa/examples/backup) استفاده می‌کنید، لازم هست پس مهاجرت به `MariaDB` اسکریپت بک‌آپ را مجدد اجرا کنید، در غیر این صورت بک‌آپ دیتابیس `MariaDB` را در فایل بک‌آپ نخواهید داشت.
253+
:::
254+
255+
256+
257+
## نکات تکمیلی
258+
259+
::: tip نکته
260+
سایر نکات در خصوص پنل مدیریت دیتابیس `phpMyAdmin` و همچنین رفع ارورها در داکیومنت [راه‌اندازی MySQL](https://gozargah.github.io/marzban/fa/examples/mysql) وجود دارند و مراحل‌ها کاملا مشابه با دیتابیس `MariaDB` می‌باشد.
261+
:::

marzban/fa/examples/mysql.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,22 @@ MySQL در نسخه `v0.3.2` و بالاتر پشتیبانی می‌شود.
1616
:::
1717

1818

19+
## راه‌اندازی با دیتابیس MySQL
20+
21+
- اگر هنوز مرزبان را نصب نکرده‌اید، با دستور زیر می‌توانید مرزبان را از ابتدا با دیتابیس `MySQL` راه‌اندازی کنید.
22+
23+
```bash
24+
sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install --database mysql
25+
```
26+
27+
::: tip نکته
28+
رمز برای دیتابیس `MySQL` در حین راه‌اندازی از شما پرسیده خواهد شد، پیشنهاد می‌شود برای حفظ امنیت دیتابیس خود رمز نسبتا قوی لنتخاب کنید، همچنین می‌توانید اینتر را بزنید تا یک رمز بصورت رندوم تعیین شود.
29+
:::
30+
31+
::: tip نکته
32+
اگر با دستور بالا مرزبان را با دیتابیس `MySQL` راه‌اندازی کنید، بصورت پیش‌فرض پنل مدیریت دیتابیس `phpMyAdmin` فعال نشده است، از این رو اگر به آن احتیاج دارید طبق توضیحات زیر فقط سرویس `phpMyAdmin` را به انتهای فایل داکر مرزبان اضافه کنید.
33+
:::
34+
1935
## تغییر دیتابیس به MySQL (نصب تازه)
2036

2137
- باید یک سرویس برای MySQL ایجاد کنید. برای این کار، فایل `docker-compose.yml` به شکل زیر تغییر دهید.

marzban/ru/config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export const config = {
4343
{ text: 'Настройка правил', link: '/ru/examples/blocking-rules' },
4444
{ text: 'Все на одном порту', link: '/ru/examples/all-on-one-port' },
4545
{ text: 'Настройка MySQL', link: '/ru/examples/mysql' },
46+
{ text: 'Настройка MariaDB', link: '/ru/examples/mariadb' },
4647
{ text: 'Практичные SQL-запросы', link: '/ru/examples/mysql-queries' },
4748
{ text: 'Резервное копирование', link: '/ru/examples/backup' },
4849
{ text: 'Изменение версии Xray-core', link: '/ru/examples/change-xray-version' },

marzban/ru/examples/mariadb.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
---
2+
title: Настройка MariaDB
3+
---

0 commit comments

Comments
 (0)