mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-09-18 04:37:14 +07:00
Fold the standalone 3x-ui-docs project (Next.js 16 + Fumadocs, deployed to docs.sanaei.dev) into docs/ so the panel and its documentation share a single source of truth, the way sing-box keeps its docs in-tree. The old repo becomes redundant and can be retired. - Import the full site under docs/ (app, components, content, lib, public, scripts, config). The self-contained pnpm project sits alongside the existing engineering notes with no filename collisions. - Re-point "Edit on GitHub" links from MHSanaei/3x-ui-docs to this repo's docs/content/docs path (docs/lib/shared.ts, docs/app/.../page.tsx). - Add docs-ci.yml and docs-deploy.yml under .github/workflows/, scoped to docs/** and run with working-directory: docs, since GitHub only runs workflows from the repo-root .github/. deploy-static.yml's GitHub Pages publish (CNAME docs.sanaei.dev) carries over unchanged. Follow-up (outside this commit): attach the docs.sanaei.dev custom domain to this repository's Pages (or set the Vercel project's root directory to docs), confirm the site is live from the monorepo, then delete MHSanaei/3x-ui-docs.
65 lines
1.8 KiB
Plaintext
65 lines
1.8 KiB
Plaintext
---
|
|
title: Database
|
|
description: 3x-ui storage backends — SQLite (default) and PostgreSQL — the database path, connection pool, and SQLite-to-PostgreSQL migration.
|
|
icon: Database
|
|
---
|
|
|
|
3x-ui stores everything — inbounds, clients, settings — in a database. You choose
|
|
the backend at install time; both are first-class.
|
|
|
|
## SQLite (default)
|
|
|
|
A single file at `/etc/x-ui/x-ui.db`. Zero setup, ideal for small and medium
|
|
deployments. The folder is configurable with
|
|
[`XUI_DB_FOLDER`](/docs/reference/env-vars#database) (on Windows it defaults next
|
|
to the binary).
|
|
|
|
## PostgreSQL
|
|
|
|
Recommended for high client counts or multi-node setups. The installer can
|
|
install PostgreSQL locally for you, or accept a DSN to an existing server. At
|
|
runtime the backend is selected via environment variables, which the installer
|
|
writes to `/etc/default/x-ui`:
|
|
|
|
```bash title="/etc/default/x-ui"
|
|
XUI_DB_TYPE=postgres
|
|
XUI_DB_DSN=postgres://xui:password@127.0.0.1:5432/xui?sslmode=disable
|
|
```
|
|
|
|
Tune the connection pool with `XUI_DB_MAX_OPEN_CONNS` and
|
|
`XUI_DB_MAX_IDLE_CONNS`.
|
|
|
|
### Docker
|
|
|
|
`docker compose up -d` keeps using SQLite. To run with the bundled PostgreSQL
|
|
service, uncomment the two `XUI_DB_*` lines in `docker-compose.yml` and start
|
|
with the profile:
|
|
|
|
```bash
|
|
docker compose --profile postgres up -d
|
|
```
|
|
|
|
## Migrate SQLite → PostgreSQL
|
|
|
|
Move an existing SQLite install to PostgreSQL with the built-in command:
|
|
|
|
```bash
|
|
x-ui migrate-db --dsn "postgres://xui:password@127.0.0.1:5432/xui?sslmode=disable"
|
|
```
|
|
|
|
Then set `XUI_DB_TYPE` and `XUI_DB_DSN` in `/etc/default/x-ui` and restart:
|
|
|
|
```bash
|
|
systemctl restart x-ui
|
|
```
|
|
|
|
<Callout type="info">
|
|
The source SQLite file is left untouched — remove it manually only after you've
|
|
verified the new backend works.
|
|
</Callout>
|
|
|
|
## Backups
|
|
|
|
Whichever backend you use, back it up regularly — see
|
|
[Backup & restore](/docs/operations/backup-restore).
|