Skip to content

Commit

Permalink
refactor: 支持并默认sqlite
Browse files Browse the repository at this point in the history
  • Loading branch information
twbworld committed Jan 8, 2024
1 parent 2f9f170 commit 9a0297b
Show file tree
Hide file tree
Showing 22 changed files with 289 additions and 287 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ jobs:
steps:
- uses: actions/checkout@v3

- name: save-data
run: sudo mysql -uroot -h 127.0.0.1 < dao/db.sql
# - name: save-data
# run: sudo mysql -uroot -h 127.0.0.1 < dao/db.sql

- name: add-envFile
run: sudo cp config/.env.example config/.env
Expand Down
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -78,5 +78,4 @@ ehthumbs_vista.db
/tests/report/*
tmp/
/server
/config/.trojan-go
!.gitkeep
63 changes: 12 additions & 51 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@
## 简介
**翻墙订阅链接服务 和 用户管理**

> 本项目配合 [trojan-go](https://github.com/p4gefau1t/trojan-go) 的数据库进行用户管理, 后期会改用原本xray的grpc管理用户
> 翻墙服务端端建议使用xray
### 本项目有两个作用:

1. 用户管理(增删改查)
Expand Down Expand Up @@ -39,18 +36,15 @@
├── config/
│   ├── appConfig.go #项目配置
│   ├── clash.ini #clash配置模板
│   ├── .trojan-go #数据库的配置文件,需自行新增
│   ├── config.go
│   ├── trojanGoConfig.go #trojan-go配置
│   ├── .env #机密配置文件,数据库之类的
│   ├── .env.example #配置模板
│   └── env.go
├── controller/ #MVC模式的C
│   └── index.go
├── dao/
│   ├── db_handle.go #用户数据操作
│   ├── mysql.go
│   └── db.sql #数据库文件
│   ├── db.go #数据库初始化
│   └── dbHandle.go #用户数据操作
├── global/
│   ├── app.go #全局变量的初始化
│   ├── config.go
Expand All @@ -68,8 +62,7 @@
├── main.go #入口
├── model/
│   ├── users.go
│   ├── system_info.go
│   └── usersJson.go
│   └── systemInfo.go
├── router/
│   └── router.go #gin路由
├── server
Expand All @@ -83,64 +76,31 @@
```

## 准备
* 请准备数据库, 点击查看[数据库结构](https://github.com/twbworld/proxy/blob/main/dao/db.sql); 如已安装 [数据库](https://p4gefau1t.github.io/trojan-go/basic/full-config/#mysql数据库选项),则自行新增余下的表
* 配置数据库有两种方式; 程序首先会识别config目录下是否存在名为`.trojan-go`的数据库配置文件, 如果文件不存在, 则读取相关环境变量, 如下
### 环境变量参数
| 变量值 | 解释 | 默认 |
| ---- | ---- | ---- |
| MYSQL_HOST | 地址 | "127.0.0.1" |
| MYSQL_PORT | 端口 | "3306" |
| MYSQL_DBNAME | 库名 | "trojan" |
| MYSQL_USERNAME | 用户名 | "root" |
| MYSQL_PASSWORD | 密码 | "" |
* 自行创建`telegram-bot`, 将token/id/domain信息配置到`config/.env`
* 配置订阅相关信息: `config/.env`

* 配置监听端口等信息: `config/trojanGoConfig.go`

* 请准备数据库(默认使用sqlite, 没有db文件则自动在dao目录下新增proxy.db文件, 数据库结构参考`dao/db.go`), 并配置`config/.env` db选项, 可用mysql, 甚至直接配置trojan-go的mysql数据库, 参考 `config/.env.example`
* 自行创建`telegram-bot`, 将token/id/domain信息配置到`config/.env`, 可实现tg交互管理用户
* 配置监听端口(默认80)等信息: `config/appConfig.go`
* 建议使用的xray很难做用户管理, 故项目不依赖其数据而是外置数据库, 缺点是不能利用xray的流量统计功能(使用trojan-go和其数据库, 则流量统计可用); 未来会对接xray数据, 也许吧!
* 未来支持环境变量配置, 也许吧!

## 安装

### docker-compose
``` yaml
version: "3"
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: true
volumes:
- ${PWD}/dao/db.sql:/docker-entrypoint-initdb.d/db.sql:ro
xray:
image: ghcr.io/xtls/xray-core:latest
depends_on:
- mysql
ports:
- 443:443
volumes:
- xray_config.json:/etc/xray/config.json:rw

proxy:
image: ghcr.io/twbworld/proxy:latest
container_name: proxy
depends_on:
- mysql
ports:
- 80:80
# environment:
# MYSQL_HOST: mysql
# MYSQL_DBNAME: trojan
volumes:
- ${PWD}/config/.env.example:/app/config/.env:ro
- ${PWD}/trojan-go.json:config/.trojan-go:rw #mysql配置
- ${PWD}/config/.env:/app/config/.env:ro
- ${PWD}/dao/proxy.db:dao/proxy.db:rw
```
### 打包本地运行
```sh
$ cp config/.env.example config/.env

$ cp trojan-go.json config/.trojan-go

$ go mod tidy && go build -o server main.go

$ ./server
Expand Down Expand Up @@ -170,6 +130,7 @@ $ ./server -a expiry

### 客户端订阅
* `v2ray`订阅地址例子: `www.domain.com/username.html`
> 其中`www.domain.com`是自己的域名,指向该项目监听的端口; `username`是用户名, 如果数据库中存在该用户, 则显示在`config/.env``proxy`选项所配置的vpn信息
* `clash`订阅地址例子: `clash.domain.com/username.html`
> `clash`与前两者不同, 其识别的是配置文件, 所以clash需不同的网址, 且以clash开头的域名, 请自行解析域名, 而前两者则不要求;[相关代码](https://github.com/twbworld/proxy/blob/main/controller/index.go)
> `clash`与前两者不同, 其识别的是配置文件, 所以clash需不同的网址, 且以clash开头的域名, 请自行解析域名;[相关代码](https://github.com/twbworld/proxy/blob/main/controller/index.go)
> 提示: 这个客户端使用的`订阅域名`, 跟`连接xray等服务端的域名`是不一样哦; 可以理解为: 利用`订阅域名`获取连接信息, 这些连接信息就包含了用于连接xray服务的域名;
9 changes: 9 additions & 0 deletions config/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,15 @@
}
}
],
"db": {
"type": "sqlite",
"sqlite_path": "./dao/proxy.db"
"mysql_host": "",
"mysql_port": 0,
"mysql_dbname": "",
"mysql_username": "",
"mysql_password": "",
},
"telegram": {
"token": "0123456789:AAxxxx",
"id": 123456789
Expand Down
1 change: 0 additions & 1 deletion config/appConfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ type AppConfig struct {
ProjectName string `default:"VPN会员系统" json:"projectName" mapstructure:"projectName" info:"本项目名称"`
GinAddr string `default:":80" json:"ginAddr" mapstructure:"ginAddr" info:"gin监听的地址"`
EnvPath string `default:"config/.env" json:"envPath" mapstructure:"envPath" info:"敏感配置文件的路径"`
TrojanGoConfigParh string `default:"config/.trojan-go" json:"trojanGoConfigParh" mapstructure:"trojanGoConfigParh" info:"trojan-go配置文件的路径"`
ClashPath string `default:"config/clash.ini" json:"clashPath" mapstructure:"clashPath" info:"clash默认配置文件"`
GinLogPath string `default:"log/gin.log" json:"ginLogPath" mapstructure:"ginLogPath" info:"gin日志文件"`
RunLogPath string `default:"log/run.log" json:"runLogPath" mapstructure:"runLogPath" info:"运行日志文件"`
Expand Down
2 changes: 1 addition & 1 deletion config/clash.ini
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ proxy-groups:
- name: Ⓜ️ 微软服务
type: select
proxies:
- DIRECT
- 🚀 节点选择
- 🇺🇲 美国节点
- 🇭🇰 香港节点
Expand All @@ -165,7 +166,6 @@ proxy-groups:
- 🇯🇵 日本节点
- 🇰🇷 韩国节点
- 🚀 手动切换
- DIRECT
- name: 🍎 苹果服务
type: select
proxies:
Expand Down
1 change: 0 additions & 1 deletion config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,4 @@ package config
type Configuration struct {
Env Env
AppConfig AppConfig
TrojanGoConfig TrojanGoConfig
}
11 changes: 11 additions & 0 deletions config/env.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,16 @@ type Proxy struct {
Root bool `json:"root,omitempty" mapstructure:"root" info:"是否管理员(quota=-1)用户使用"`
}

type Db struct {
Type string `default:"sqlite" json:"type" mapstructure:"type" env:"DB_TYPE" info:"数据库类型"`
SqlitePath string `default:"./dao/proxy.db" json:"sqlite_path" mapstructure:"sqlite_path" env:"SQLITE_PATH" info:"sqlite文件路径"`
MysqlHost string `json:"mysql_host" mapstructure:"mysql_host" env:"MYSQL_HOST" info:"地址"`
MysqlPort string `json:"mysql_port" mapstructure:"mysql_port" env:"MYSQL_PORT" info:"端口"`
MysqlDbname string `json:"mysql_dbname" mapstructure:"mysql_dbname" env:"MYSQL_DBNAME" info:"数据库名"`
MysqlUsername string `json:"mysql_username" mapstructure:"mysql_username" env:"MYSQL_USERNAME" info:"用户名"`
MysqlPassword string `json:"mysql_password" mapstructure:"mysql_password" env:"MYSQL_PASSWORD" info:"密码"`
}

type Telegram struct {
Token string `json:"token" mapstructure:"token" info:"BotFather新建的聊天室"`
Id int64 `json:"id" mapstructure:"id" info:"userinfobot获取"`
Expand All @@ -39,5 +49,6 @@ type Env struct {
Debug bool `json:"debug" mapstructure:"debug" info:"项目环境"`
Domain string `json:"domain" mapstructure:"domain" info:"项目域名,端口默认80, webhook需要"`
Proxy []Proxy `json:"proxy" mapstructure:"proxy" info:"代理配置"`
Db Db `json:"db" mapstructure:"db" info:"数据库配置"`
Telegram Telegram `json:"telegram" mapstructure:"telegram" info:"Telegram聊天室配置"`
}
13 changes: 0 additions & 13 deletions config/trojanGoConfig.go

This file was deleted.

Loading

0 comments on commit 9a0297b

Please sign in to comment.