CasWAF
入门

快速上手

本页从master分支编译CasWAF,在一台机器上运行,并把一个Web应用放到它后面。大约需要十五分钟。

需要什么

  • Go 1.20或更新版本
  • 编译管理界面用的Node.js 20和Yarn 1
  • MySQL 5.7或8
  • 一个用来登录的Casdoor实例,并且有权限在里面添加应用
  • 机器上的端口80、443和17000没有被占用

警告:CasWAF启动时会结束正在监听端口80、443和17000的进程,包括你还在运行的Nginx或Apache。请先把它们移到别的端口,再让CasWAF转发过去。

1. 获取代码

git clone https://github.com/caswaf/caswaf
cd caswaf

2. 创建Casdoor应用

在Casdoor里为CasWAF添加一个应用,并给它加上这个回调地址:

http://localhost:17000/callback

记下组织、应用名、Client ID和Client secret。用Casdoor登录解释了每一项设置以及谁能登录。

3. 配置CasWAF

编辑conf/app.conf:

driverName = mysql
dataSourceName = root:your-password@tcp(localhost:3306)/
dbName = caswaf

casdoorEndpoint = https://your-casdoor.example.com
clientId = <client ID>
clientSecret = <client secret>
casdoorOrganization = <organization>
casdoorApplication = <application>

管理界面自己的登录按钮读的是web/src/Conf.js,它会编译进前端,所以在那里也填上相同的值:

export const AuthConfig = {
  serverUrl: "https://your-casdoor.example.com",
  clientId: "<client ID>",
  appName: "<application>",
  organizationName: "<organization>",
  redirectPath: "/callback",
};

4. 编译管理界面

cd web
yarn install
yarn build
cd ..

5. 运行

CasWAF启动时会建表,但不会建数据库。可以先在MySQL里建一个空的caswaf数据库,或者第一次运行时加上-createDatabase=true:

go build -o caswaf .
sudo ./caswaf -createDatabase=true

在Linux上,绑定端口80和443需要root或CAP_NET_BIND_SERVICE权限。要在仓库目录下运行:它从工作目录读取conf/app.conf和web/build。

注意:在Windows上,以及在Linux上以systemd服务运行时,CasWAF还会把自己注册为开机自启:Windows上是Desktop\run下的一个<dbName>.bat,加上“启动”文件夹里的一个快捷方式;Linux上是一个systemd unit。见节点。

6. 登录

打开http://localhost:17000,通过Casdoor登录。登录后进入站点列表。

7. 把站点放到它后面

假设同一台机器上有一个应用监听端口3000,要通过app.example.com访问。

  1. 打开Sites,点Add,再点新行上的Edit。
  2. 把Domain设为app.example.com。
  3. 把Port设为3000,或者把Host设为http://127.0.0.1:3000。
  4. 在有证书之前把Mode设为HTTP,把Status设为Active。
  5. 点Save。

网关几秒内就会生效。在DNS指向这台机器之前可以先这样试:

curl -H "Host: app.example.com" http://127.0.0.1/

然后把DNS指向这台机器,添加证书(证书或Let's Encrypt),把Mode改成HTTPS Only,再挂上一些规则。

在GitHub上编辑

本页内容