部署安装casdoor统一认证服务

Apr 14, 2024·
Sam.C
Sam.C
· 6 min read

要求

操作系统

支持所有主流操作系统,包括 Windows、Linux 和 macOS。

环境

Go 1.17+  
Node.js LTS (18)  
Yarn 1.x  
我们强烈建议使用 Yarn 1.x 运行和构建 Casdoor 前端。使用 NPM 可能会导致用户界面样式问题。更多详情,请参阅:Casdoor#294
如果网络无法直接同步 Go 依赖包,则需要通过配置 GOPROXY 环境变量来使用 Go 代理。我们强烈建议使用:https://goproxy.cn/

数据库

Casdoor使用XORM与数据库通信。基于 Xorm 驱动程序支持,Casdoor 目前支持以下数据库:

  • MySQL
  • MariaDB
  • PostgreSQL
  • CockroachDB
  • SQL Server
  • Oracle
  • SQLite 3
  • TiDB

下载

Casdoor 的源代码托管在 GitHub 上。Go 后端代码和 React 前端代码都包含在一个源代码库中。

NameDescriptionLanguageSource code
FrontendWeb frontend UI for CasdoorJavaScript + Reactgithub repository
BackendRESTful API backend for CasdoorGolang + Beego + XORMgithub repository

Casdoor 支持 Go 模块。要下载代码,只需使用 git 克隆代码即可:

$ cd path/to/folder  
$ git clone https://github.com/casdoor/casdoor

配置

配置数据库

Casdoor支持MySQL、MSSQL、SQLite3和PostgreSQL。默认情况下,Casdoor 使用 MySQL。这里,我们使用PostgreSQL。

Casdoor 在名为 casdoor 的数据库中存储用户、节点和主题信息。如果数据库不存在,则必须手动创建

假设你已经准备了一个名为 casdoor 的数据库,像下面这样配置 app.conf

driverName = postgres  
dataSourceName = "user=postgres password=postgres host=localhost port=5432 sslmode=disable dbname=casdoor"  
dbName =
对于 PostgreSQL,请确保 dataSourceName 具有非空的 dbName,并将独立 dbName 字段留空,如上例所示。

通过 ini 文件

Casdoor 可通过一个文件进行配置:conf/app.conf,默认包含以下内容:

appname = casdoor
httpport = 8000
runmode = dev
SessionOn = true
copyrequestbody = true
driverName = mysql
dataSourceName = root:123456@tcp(localhost:3306)/
dbName = casdoor
tableNamePrefix =
showSql = false
redisEndpoint =
defaultStorageProvider =
isCloudIntranet = false
authState = "casdoor"
socks5Proxy = "127.0.0.1:10808"
verificationCodeTimeout = 10
initScore = 2000
logPostOnly = true
origin = "https://door.casdoor.com"
staticBaseUrl = "https://cdn.casbin.org"
enableGzip = true
  • appname 是应用程序名称,目前没有实际用途。
  • httpport 是后端应用程序监听的端口。
  • runmode 可以设置为 dev 或 prod。
  • SessionOn 决定是否启用会话,默认为启用。
  • driverName、dataSourceName 和 dbName 在前面已经介绍过。有关详细信息,请参阅配置数据库。
  • verificationCodeTimeout 设置验证码的过期时间。过期后,用户需要重新获取验证码。

作为初学者,您只需根据您的数据库修改两个项目:driverName 和 dataSourceName。Casdoor 将使用该数据库存储所有数据,包括用户、组织和应用程序。

  • tableNamePrefix 是使用适配器时表的前缀。
  • showSql 决定日志级别大于 INFO 时是否在日志中显示 SQL 语句。
  • redisEndpoint 是 Beego 会话存储使用的 Redis 端点。如果该参数为空,会话数据将以文件形式存储在本地的 ./tmp 文件夹中。若要使用 Redis 作为 Beego 会话存储,其值应为:redis.example.com:6379。如果 Redis 部署在本地,则可使用 localhost:6379。如果启用了 Redis 密码,则使用 redis.example.com:6379,db,password。更多详情,请访问:https://github.com/beego/beedoc/blob/master/en-US/module/session.md#saving-provider-config
  • defaultStorageProvider 是默认文件存储服务名称。如果需要使用文件存储服务(如上传头像),则需要设置存储提供程序并将其应用到应用程序中。详情请参阅存储。
  • isCloudIntranet 用于识别提供程序端点是否为内网端点。
  • authState 是授权应用程序名称。登录时将检查该参数。
  • socks5Proxy 是 SOCKS 代理服务器 IP 地址。设置代理端口是因为我们有与 Google 相关的服务,或使用 Google、GitHub、Facebook、LinkedIn 或 Steam 作为 OAuth 提供商,而这些服务在某些地区可能会受到网络限制。
  • initScore 是每个用户的初始分数。每个用户都有一个分数属性。分数由 Casnode 使用,不控制 Casdoor 中的任何内容。
  • logPostOnly 用于确定是否仅使用 post 方法添加记录。
  • origin 是起源后端域名。
  • staticBaseUrl 是系统初始化数据库时使用的静态图像地址。
  • enableGzip 将在请求头包含 Accept-Encoding=gzip 时接受并响应 gzip 编码。

通过环境变量

Casdoor 在上述 ini 文件中定义的所有配置项,以及一些 beego 配置项(httpport、appname),都可以通过环境变量进行配置。

例如,当你尝试启动 Casdoor 时,可以使用类似下面的方法通过环境变量传递配置:

$ appname=casbin go run main.go

此外,导出衍生变量也是一种可行的方法。环境变量的名称应与你想在 ini 文件中使用的名称完全一致。

注意:环境变量中的配置可以覆盖 ini 文件中的配置。

运行

目前有两种启动方法,您可以根据自己的情况选择其中一种。

开发模式

后台

Casdoor 的 Go 后端默认运行在 8000 端口。您可以使用以下命令启动 Go 后端:

$ go run main.go

服务器成功运行后,就可以启动前端部分了。

前台

Casdoor 的前台是一个非常经典的 Create-React-App (CRA) 项目。它默认运行于 7001 端口。使用以下命令运行前端:

$ cd web
$ yarn install
$ yarn start

在浏览器中访问 http://localhost:7001。使用默认的全局管理员账户登录 Casdoor 面板:built-in/admin。

admin
123

生产模式

后台

将 Casdoor Go 后端代码编译成可执行文件并启动它。

对于 Linux:

$ go build
$ ./casdoor

可以编写一个 systemd service 文件,使 systemd 守护服务,开机自动运行,必要时自动重启。

适用于 Windows:

> go build  
> casdoor.exe
前台

将 Casdoor 前端代码构建为静态资源(.html、.js、.css 文件):

$ cd web
$ yarn install
$ yarn build

在浏览器中访问 http://localhost:8000。使用默认的全局管理员账户登录 Casdoor 面板:built-in/admin。

admin
123

要使用其他端口,请编辑 conf/app.conf,修改 httpport,然后重启 Go 后台。

在 dev 环境中,前端由 yarn run 在 7001 端口上运行,因此如果要进入 Casdoor 登录页面,需要将 Casdoor 链接设置为 http://localhost:7001

在 prod 环境中,前端文件首先由 yarn build 构建,并通过 8000 端口提供服务,因此如果要访问 Casdoor 登录页面,需要将 Casdoor 链接设置为 https://your-casdoor-url.com:8000(如果使用反向代理,则需要将链接设置为您的域名)。

以我们的官方论坛 Casnode 为例

Casnode 使用 Casdoor 进行身份验证。

当我们在开发环境中测试 Casnode 时,我们将 serverUrl 设置为 http://localhost:7001,因此当我们使用 Casdoor 测试登录和注册功能时,它将转到 localhost 7001,即 Casdoor 端口。

而当我们将 Casnode 放入 prod 环境时,我们会将 serverUrl 设置为 https://door.casdoor.com,这样用户就可以使用 Casdoor 登录或注册了。

export const config = {
  serverUrl: "https://door.casdoor.com", //这是指前端使用casdoor时,需要进行的配置文件的内容,可以查看[示例](https://github.com/casdoor/casdoor-nodejs-react-example/blob/master/src/Setting.js):
  clientId: "014ae4bd048734ca2dea",
  organizationName: "casbin",
  appName: "app-casnode",
  redirectPath: "/callback", // in accordance with casdoor configuration
};