Add Go WireGuard panel with PostgreSQL 17 and Dokploy compose.

This commit is contained in:
2026-07-29 09:15:00 +03:00
parent 370e2455d4
commit 31ce2af622
25 changed files with 2423 additions and 0 deletions
+167
View File
@@ -0,0 +1,167 @@
-- PostgreSQL 17 schema (converted from MySQL wg.sql)
CREATE TABLE IF NOT EXISTS users (
id BIGSERIAL PRIMARY KEY,
username VARCHAR(64) NOT NULL UNIQUE,
email VARCHAR(128) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
role VARCHAR(16) NOT NULL DEFAULT 'user' CHECK (role IN ('user', 'admin')),
is_approved BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ
);
CREATE TABLE IF NOT EXISTS site_status (
id BIGSERIAL PRIMARY KEY,
is_online BOOLEAN NOT NULL DEFAULT TRUE,
message TEXT NOT NULL DEFAULT '',
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS servers (
id BIGSERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
ip VARCHAR(45) NOT NULL,
port INTEGER NOT NULL DEFAULT 54321,
panel_username VARCHAR(64) NOT NULL,
panel_password VARCHAR(255) NOT NULL,
status VARCHAR(16) NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'inactive')),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ,
inbound_id INTEGER NOT NULL DEFAULT 1
);
CREATE TABLE IF NOT EXISTS servers_simple (
id BIGSERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
host VARCHAR(255) NOT NULL,
port INTEGER NOT NULL,
country VARCHAR(255) DEFAULT '?',
status VARCHAR(16) DEFAULT 'active',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS countries (
id BIGSERIAL PRIMARY KEY,
code VARCHAR(8) NOT NULL UNIQUE,
name_ru VARCHAR(128) NOT NULL,
name_en VARCHAR(128) NOT NULL,
flag VARCHAR(16) NOT NULL DEFAULT '',
sort_order INTEGER DEFAULT 0
);
CREATE TABLE IF NOT EXISTS wg_configs (
id BIGSERIAL PRIMARY KEY,
token VARCHAR(32) UNIQUE,
user_id BIGINT REFERENCES users(id) ON DELETE SET NULL,
config_content TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
original_filename VARCHAR(255) NOT NULL DEFAULT 'wg_config.conf',
is_demo BOOLEAN DEFAULT FALSE
);
CREATE INDEX IF NOT EXISTS idx_wg_configs_user_id ON wg_configs(user_id);
CREATE TABLE IF NOT EXISTS wg_config_settings (
setting_key VARCHAR(50) PRIMARY KEY,
setting_value VARCHAR(10) NOT NULL,
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS demo_keys (
id BIGSERIAL PRIMARY KEY,
config_id BIGINT NOT NULL REFERENCES wg_configs(id) ON DELETE CASCADE,
token VARCHAR(32) NOT NULL UNIQUE,
expires_at TIMESTAMPTZ NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS awg_configs (
id BIGSERIAL PRIMARY KEY,
config_name VARCHAR(100) NOT NULL,
config_content TEXT NOT NULL,
qr_code_url VARCHAR(512) NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS amnezia_configs (
id BIGSERIAL PRIMARY KEY,
config_name VARCHAR(255) NOT NULL,
original_filename VARCHAR(255) NOT NULL,
file_path VARCHAR(512) NOT NULL,
file_url VARCHAR(512) NOT NULL,
config_content TEXT NOT NULL,
host VARCHAR(255) NOT NULL,
port INTEGER NOT NULL DEFAULT 51820,
username VARCHAR(255),
password VARCHAR(255),
description TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS vless_configs (
id BIGSERIAL PRIMARY KEY,
vless_uri TEXT NOT NULL,
subscription_url TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS admin_uploads (
id BIGSERIAL PRIMARY KEY,
original_name VARCHAR(255) NOT NULL,
stored_name VARCHAR(255) NOT NULL,
file_path VARCHAR(512) NOT NULL,
file_url VARCHAR(512) NOT NULL DEFAULT '',
file_size INTEGER NOT NULL,
uploaded_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS user_servers (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
server_id BIGINT NOT NULL REFERENCES servers(id) ON DELETE CASCADE,
inbound_id INTEGER NOT NULL,
protocol VARCHAR(20) NOT NULL,
client_id VARCHAR(64) NOT NULL,
email VARCHAR(128) NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_user_servers_user ON user_servers(user_id);
CREATE INDEX IF NOT EXISTS idx_user_servers_server ON user_servers(server_id);
CREATE TABLE IF NOT EXISTS license_keys (
id BIGSERIAL PRIMARY KEY,
key_value CHAR(36) NOT NULL UNIQUE,
server_id BIGINT NOT NULL REFERENCES servers(id) ON DELETE CASCADE,
protocol VARCHAR(20) NOT NULL DEFAULT 'vless',
client_id VARCHAR(64) NOT NULL,
email VARCHAR(128) NOT NULL DEFAULT 'license@ultravpn.cc',
used_by BIGINT REFERENCES users(id) ON DELETE SET NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
expires_at TIMESTAMPTZ
);
CREATE TABLE IF NOT EXISTS rate_limits (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
action VARCHAR(100) NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_rate_limits_user_action_time ON rate_limits(user_id, action, created_at);
CREATE TABLE IF NOT EXISTS app_meta (
key VARCHAR(64) PRIMARY KEY,
value TEXT NOT NULL DEFAULT '',
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
INSERT INTO site_status (id, is_online, message)
VALUES (1, TRUE, 'Сайт работает в штатном режиме.')
ON CONFLICT (id) DO NOTHING;
INSERT INTO wg_config_settings (setting_key, setting_value) VALUES
('show_zip_full', '0'),
('show_zip_conf', '1')
ON CONFLICT (setting_key) DO NOTHING;