ITADN
iragm/fishauctions
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

鱼类俱乐部拍卖

一个免费且功能齐全的拍卖平台:

  • 支持在线或现场拍卖
  • 保留价和立即购买价格
  • 自动开票
  • 集成 PayPal 和 Square 的支付处理
  • 使用投影仪,在拍卖过程中展示拍品图片
  • 现场拍卖无需用户创建账户
  • 支持育种者奖励计划/育种者参与计划
  • 轻松在拍卖之间复制拍品、规则和用户
  • 一键导出数据以生成营销列表
  • 为俱乐部成员提供不同的卖家和俱乐部分成比例
  • 支持多地点拍卖和拍品邮寄
  • 推荐系统,用于在大型拍卖中查找拍品
  • 数十项统计数据,包括网站流量、拍卖师速度、拍品随时间变化的销售价格等,以帮助您优化下一次拍卖
  • 等等!

最初,这是一个免费且开源的工具,旨在让鱼类俱乐部在新冠疫情期间进行在线拍卖,如今已发展成为可用的最佳俱乐部拍卖平台,被数十个俱乐部和数千名用户使用! 如果您是希望举办拍卖的俱乐部成员,请在此访问网站

如果您有建议,或者是一位希望贡献代码的开发者,请继续阅读。

功能和问题

我乐于添加使网站变得更好的新功能——无论大小。 打开一个新问题 提出您的建议或错误报告。 请尽可能包含详细信息。

开发

快速入门

本项目已打包为 Docker,因此假设你已安装 docker,你应该只需执行:

git clone https://github.com/iragm/fishauctions
cd fishauctions
./update.sh
docker compose --profile "*" build
docker compose up -d

现在你应该能够访问位于 127.0.0.1 的开发站点(注意:与大多数 Django 项目不同,你很可能不会使用 8000 端口)

输入用户名 admin 和密码 example,即可开始使用。

设置清单:登录后,打开 Admin → Setup Checklist,并按照其中列出的步骤启用任何你需要的功能

演示数据:在开发模式(DEBUG=True)下,当数据库为空时会自动加载演示数据(当 SINGLE_CLUB_MODE 开启时跳过)。

创建用户:此操作会自动完成,但你可以通过以下方式创建额外用户(以下示例为 admin/example):

docker exec -it django python3 manage.py shell -c "from django.contrib.auth import get_user_model; User=get_user_model(); u=User.objects.create_superuser('admin', 'admin@example.com', 'example'); u.emailaddress_set.create(email=u.email, verified=True, primary=True)"

关于开发环境的几点说明

.env.example 并未记录所有配置,但它包含了最常见的设置。 例如,如果你使用 80 端口用于其他用途,可以通过编辑 .env 文件添加 HTTP_PORT=81 这一行,将开发站点部署在不同的端口上

某些功能(如 Google Maps)在没有 API 密钥的情况下无法工作。 在生成 API 密钥时,如果使用的不是 80 端口,请确保包含你使用的端口号,例如,如果你使用 81 端口,则为 http://127.0.0.1:81

生产环境差异

目前,我只知道一个生产部署,但由于这是开源项目,欢迎你自己搭建一个竞争网站。

遵循 12 Factor 原则,所有配置均通过 .env 文件完成,其余环境保持极度相似,但:

  • 生产环境使用 SWAG 添加证书,开发环境使用普通的 Nginx 仅提供 http 内容。
  • 生产环境使用 Gunicorn 配合 Uvicorn worker 进程,开发环境使用带有 --reload 标志的 Uvicorn(此配置位于 entrypoint.sh 中)

添加包

新的包可以添加到 requirements.in(除了标准的 Django 设置文件外)用于生产依赖,或添加到 requirements-test.in 用于测试依赖。 然后运行 ./.github/scripts/update-packages.sh 以生成更新后的 requirements.txt 文件。

如果您希望将所有包升级到最新支持的版本,请运行 ./.github/scripts/update-packages.sh --upgrade

运行测试和 Lint

要运行与 CI 中相同的测试和 Lint 集合,请运行 docker compose run --rm test --ci。 如果需要更改,这将失败。 下面有额外的命令,可用于运行单个测试/Lint 组件,并在可能的情况下自动修复问题。

自动格式化

要格式化代码,请运行 docker compose run --rm test --format。 这将尝试自动修复问题(如果可能)。

要检查代码是否已正确格式化,而修改磁盘上的任何文件,请运行 docker compose run --rm test --format-check。 该命令将输出失败项(如果有),并在需要更改时以错误退出。

Lint

要对代码进行 Lint,请运行 docker compose run --rm test --lint。 这将运行完整的 Lint 套件并尝试自动修复问题。

要检查代码是否通过 linting 检查,同时修改磁盘上的任何文件,请运行 docker compose run --rm test --lint-check。该命令会输出失败项(如果有),并在需要做出更改时以错误状态退出。

管理命令

在 docker compose 启动后,使用 docker exec 运行这些命令。 例如:docker exec -it django python3 manage.py makemigrations

在 VSCode 中开发

本项目针对在 Visual Studio Code 中进行开发进行了优化。 如果你正在使用 VSCode,请首先安装 "Remote Development" 扩展包,并确保已安装 Docker。

在 VSCode 开发容器中工作将确保所有项目依赖项均已安装——有助于运行 Python 语言服务器、IDE 自动补全、自动运行测试等。

要开始,请按照 VS Code 的提示 Reopen in Container。首次运行此命令需要一些时间,因为远程开发容器正在构建。 你还可以通过打开命令面板 (CMD+Shift+P) 并导航到 Dev Containers: Reopen in Container 来在远程容器中打开此项目。

Pre-Commit Hook

你可以选择启用一个 pre-commit hook,以确保在提交更改之前已运行代码自动格式化和 linting。虽然这不是必需的,但它可以帮助确保提交在推送之前能通过 CI。

要在本地机器上安装,请通过 pip install pre-commit 安装,然后运行 pre-commit install 以注册此项目的 pre-commit hooks。

默认情况下,pre-commit 仅针对已更改的文件运行。首次安装 pre-commit 时,你可以选择运行 pre-commit run --all-files 以针对所有文件运行 hooks。

运营你自己的拍卖网站

对于你运营自己的拍卖网站的支持极其有限(读作:不存在)。 话虽如此,以下是入门的基础知识。

预配置清单:

  • 在你喜欢的域名注册商处注册一个域名。 我喜欢 Cloudflare,它还提供免费 DDOS 防护和缓存。
  • 购买一台 VM。 我使用 Hostinger。 我不太喜欢他们,但他们很便宜。 他们没问题。 获取一台 KVM2 并使用此推荐码享受 20% 折扣。 我使用并推荐 Ubuntu 作为操作系统。

部署网站

登录你的 VM 并输入以下内容:

git clone https://github.com/iragm/fishauctions
cd fishauctions
./update.sh

./update.sh 将为你初始化环境,包括生成安全密钥。

网站启动后,以超级用户身份登录(username=admin, password=example,请务必更改这些!)并打开 Admin → Setup Checklist。 该页面指向 .env 文件,显示哪些设置和集成已配置,并提供 Gmail、SES、PayPal、Square、Google Maps、Google 登录、reCAPTCHA、Mailchimp、Google Calendar、Discord、数字会员卡以及自然语言命令面板助手的复制/粘贴 .env 示例以及获取密钥的链接。

该页面上的所有内容都是免费的,除了命令面板助手,它按使用次数向你指向的模型提供商计费。 除非你设置 OPENAI_API_KEY,否则它是关闭的;Admin → Command palette 显示其成本。

完成该页面的操作,至少你需要 Gmail 用于邮件、Google Maps 和 Recaptcha v2,其他都是可选的(但推荐)。

设置后:

前往 Django 管理站点(它在 admin 下拉菜单中),并根据你的喜好更新分类和 FAQ 文章。

请注意,Django 管理站点在生产环境中几乎不使用。我使用它来:

  • 添加博客文章、分类和 FAQ
  • 授予用户超级用户权限,以及创建大量/拍卖的权限

其他所有操作都可以通过 UI 完成。

注意:不要删除默认的 "Uncategorized" 分类,它在代码的多个地方被引用。删除其他默认分类是没问题的。

更新:

通过在 VM 中输入 ./update.sh 来运行更新。

在更新后,我很少需要运行 docker compose down && docker compose up -d 而不是仅仅运行 update,因此如果更新后站点没有恢复,请在回滚到快照之前尝试此操作。