Skip to content

Latest commit

 

History

History
189 lines (108 loc) · 4.67 KB

README.md

File metadata and controls

189 lines (108 loc) · 4.67 KB

关于 Waterway

Waterway 是使用 go 语言开发的全栈 Web 框架,受到 Ruby on Rails 框架的启发。

在开发 Waterway 之前,作者有 10 年以上 Rails 开发经验,对于 Rails 框架的优点和缺点,有比较深入的理解。

Rails 框架的优点之一,在于清晰固定的目录结构。这样的好处是,对于接触一个新的 Rails 项目,可以很快的上手。

Rails 框架的优点其二,在于【约定胜于配置】的设计思想,其默认的规则,往往就满足了开发需求,而不需要写大量的配置文件。

Rails 框架的缺点,有以下几点:

  1. 缺少业务逻辑层抽象,导致业务逻辑散落在控制器和 Model 之间。对于复杂的项目,你也许能看到几百行的 Model 定义。
  2. 不够模块化。
  3. 有些设计,属于黑魔法,对于第一次接触的人来说,有点难以掌握。

另外,由于 Rails 是基于 Ruby 语言开发的,其命令行工具,在生成框架代码时,运行速度非常慢(相比于 go 来说)。

所以,在吸取了 Rails 框架的优点,结合 Go 语言的特性,针对性的改进 Rails 框架的缺点,就这样,我开发出了 Waterway

快速上手

提示:目前 waterway 还处于开发阶段,以下内容仅适用于当前的版本。如果有不完善的地方,或者好的点子和改进意见,欢迎提 issue。

1. 创建目录结构

我们使用gonew工具,来创建新的 go 项目:

$ gonew github.com/daqing/waterway example.com/foo/bar

针对你的项目情况,替换 example.com/foo/bar 为真实的模块名称。

2. 搭建开发环境

2.1

首先,项目使用 just 来执行一些脚本命令。

关于如何安装 just 请参考其中文文档:https://github.com/casey/just/blob/master/README.中文.md

除了 just, 项目还用到了以下软件:

对于 macOS 系统,只需要执行:

$ just install-deps

就可以把上述依赖的软件安装好。

2.2

其次,项目使用了 .env 作为配置。

需要创建 .env 文件:

$ cp .env.example .env

这个文件,定义了几个环境变量,说明如下:

  • WATERWAY_PG_URL

    • 连接PostgreSQL字符串,类似这样的形式:

    • postgres://daqing:passwd@127.0.0.1:5432/waterway

  • WATERWAY_PORT

    • 服务器监听的端口,默认为 "2000"
  • WATERWAY_STORAGE_DIR

    • 存储用户上传文件的绝对路径

    • 例如: /var/www/storage(不要以'/'结尾)

  • WATERWAY_ASSET_HOST

    • 静态资源的托管域名(可用于配置CDN)

    • 例如: https://assets.example.com"

  • APP_PWD

    • 项目所在的绝对路径(不要以'/'结尾)

    • 例如: /Users/joe/projects/waterway

2.3

替换掉 justfile 中硬编码的 waterway 字符。

例如,justfile 里面有这样的文字:

createdb:
  psql -U $POSTGRES_USER -d postgres -c "create database waterway"

需要把 waterway,替换成当前项目所用的数据库名字。

2.4

创建数据库和表结构。

执行以下命令:

$ just createdb
$ just migrate

这样,数据库和表结构,就准备好了。

2.5

初始化 JavaScript 环境。

Waterway 通过集成 bun 工具,支持在页面中使用 React 代码库。

执行以下命令:

$ just bun

就可以准备好 React 环境。

2.6

修改 Dockerfile,把里面的waterway,替换为项目名称。

FROM alpine

WORKDIR /app

RUN mkdir /app/bin
RUN mkdir /app/core
RUN mkdir /app/public

COPY ./bin/waterway /app/bin
COPY ./bin/cli_amd /app/bin
COPY ./core /app/core
COPY ./public /app/public

ENV WATERWAY_ENV=production
ENV WATERWAY_PORT=2000
ENV APP_PWD=/app

ENV AW_ASSET_VERSION=1
ENV TZ="Asia/Shanghai"

EXPOSE 2000

CMD ["/app/bin/waterway"]

假设你的项目目录是 foobar-site,那么,当执行 go build 时,所生成的二进制名称就是 foobar-site

那么,你需要把上面内容中的 waterway,替换为 foobar-site

3. 启动本地开发服务器

执行以下命令:

$ just

就可以启动本地开发服务器。

根据你的 .env 中配置的端口,就可以访问对应的网址。

假设你配置的端口是 2023, 那么,访问 http://localhost:2023 即可。