diff --git a/apps/fizzy/README.md b/apps/fizzy/README.md new file mode 100644 index 000000000000..4dbbc06fe7d1 --- /dev/null +++ b/apps/fizzy/README.md @@ -0,0 +1,51 @@ +# Fizzy + +Fizzy 是 37signals 推出的 Kanban 项目管理工具,用于组织议题、想法和团队工作。 +该应用包使用 Fizzy 官方 Docker 镜像,并将数据库、队列、缓存和附件统一保存在 +安装实例的 `data` 目录中。 + +## 安装和首次登录 + +1. 选择一个未占用的 HTTP 端口。 +2. 将 `BASE_URL` 设置为浏览器实际访问 Fizzy 的完整地址。 +3. `SECRET_KEY_BASE` 由 1Panel 自动生成,安装后不要修改。 +4. 必须填写可用的 SMTP 配置。Fizzy 的注册和登录通过电子邮件验证码完成,只有 + 邮件投递正常后用户才能完成登录。 + +## SMTP + +Fizzy 自身后台不提供 SMTP 服务器配置页面。请在 1Panel 的 Fizzy 应用参数中填写 +发件地址、SMTP 服务器和端口;用户名、密码和 TLS 选项按 SMTP 服务商要求填写。 +这些 SMTP 设置以后仍可在 1Panel 中编辑,但每次修改后都必须重启应用;在邮件投递 +恢复正常前,用户无法完成邮件验证码登录。 + +`SMTP_TLS=true` 仅用于要求隐式 TLS 的 SMTPS 服务器,通常使用端口 `465`。 +大多数使用 STARTTLS 的服务器应保持 `SMTP_TLS=false`,通常使用端口 `587`。 + +## 域名和 HTTPS + +直接通过 HTTP 端口访问时,请选择 HTTP 模式(`DISABLE_SSL=true`),并将 +`BASE_URL` 设置为 `http://` 地址。 + +Fizzy 容器内部只提供 HTTP。若在 1Panel 网站中创建 HTTPS 反向代理并配置证书, +请在应用参数中选择 HTTPS 模式(`DISABLE_SSL=false`),将 `BASE_URL` 改为最终的 +`https://` 地址(例如 `https://fizzy.example.com`),确认反向代理发送 +`X-Forwarded-Proto`,然后重启应用。HTTPS 模式会启用 Rails 安全 Cookie、HSTS 和 +HTTP 到 HTTPS 的重定向,因此容器的原始 HTTP 端口不再是正常访问路径。 + +## 数据和备份 + +所有持久化内容都位于安装实例的 `data` 目录,对应容器内的 +`/rails/storage`。备份前建议停止应用,并完整备份该目录。恢复时应恢复完整目录 +并保留 UID/GID `1000:1000` 的写权限。 + +## 版本说明 + +该应用使用 `ghcr.io/basecamp/fizzy:latest` 滚动镜像。上游更新可能在重新拉取 +镜像后直接生效,因此升级前必须备份 `data` 目录。 + +## 许可证 + +Fizzy 的源代码采用 O’Saasy License。该许可证允许自托管、修改和分发,但限制将 +Fizzy 作为竞争性的托管或 SaaS 服务提供。它不是 OSI 批准的标准开源许可证; +部署前请阅读上游 `LICENSE.md`。 diff --git a/apps/fizzy/README_en.md b/apps/fizzy/README_en.md new file mode 100644 index 000000000000..0bddcc871bf0 --- /dev/null +++ b/apps/fizzy/README_en.md @@ -0,0 +1,61 @@ +# Fizzy + +Fizzy is a Kanban project management tool from 37signals for organizing issues, +ideas, and team work. This package uses the official Fizzy Docker image and +stores its databases, queues, cache, and attachments in the installation's +`data` directory. + +## Installation and first sign-in + +1. Choose an unused HTTP port. +2. Set `BASE_URL` to the complete URL that browsers use to reach Fizzy. +3. 1Panel generates `SECRET_KEY_BASE`; do not change it after installation. +4. A working SMTP configuration is required. Fizzy uses email verification + codes for sign-up and sign-in, so users cannot complete email-code login + until mail delivery works. + +## SMTP + +Fizzy does not provide an SMTP server configuration page in its own +administration UI. In the Fizzy application parameters in 1Panel, enter the +sender address, SMTP server, and port; provide the username, password, and TLS +option as required by your SMTP provider. These settings may be edited later in +1Panel, but restart the application after every change; users cannot complete +email-code login until mail delivery works. + +Set `SMTP_TLS=true` only for an SMTP server that requires implicit TLS, usually +on port `465`. Most servers using STARTTLS should keep `SMTP_TLS=false`, usually +on port `587`. + +## Domain and HTTPS + +For direct access through the HTTP port, select HTTP mode (`DISABLE_SSL=true`) +and set `BASE_URL` to an `http://` address. + +The Fizzy container serves HTTP only. When deploying behind a 1Panel HTTPS +reverse proxy with a managed certificate, select HTTPS mode +(`DISABLE_SSL=false`), set `BASE_URL` to the final `https://` address (for +example, `https://fizzy.example.com`), ensure the proxy sends +`X-Forwarded-Proto`, and restart the application. HTTPS mode enables Rails +secure cookies, HSTS, and HTTP-to-HTTPS redirects, so the raw HTTP port is no +longer the normal access path. + +## Data and backups + +All persistent content is in the installation's `data` directory, mounted at +`/rails/storage` inside the container. Stop the application before a backup, +copy the complete directory, and preserve write access for UID/GID `1000:1000` +when restoring it. + +## Version policy + +This application uses the rolling image `ghcr.io/basecamp/fizzy:latest`. +Upstream changes can take effect after the image is pulled again, so back up the +`data` directory before updating. + +## License + +Fizzy's source is available under the O'Saasy License. It permits self-hosting, +modification, and distribution, but restricts offering Fizzy as a competing +hosted or SaaS service. It is not an OSI-approved open-source license; read the +upstream `LICENSE.md` before deployment. diff --git a/apps/fizzy/data.yml b/apps/fizzy/data.yml new file mode 100644 index 000000000000..237b6b8e200f --- /dev/null +++ b/apps/fizzy/data.yml @@ -0,0 +1,34 @@ +name: Fizzy +tags: + - 实用工具 +title: 可自托管的 Kanban 项目管理工具 +description: 可自托管的 Kanban 项目管理工具 +additionalProperties: + key: fizzy + name: Fizzy + tags: + - Tool + shortDescZh: 可自托管的 Kanban 项目管理工具 + shortDescEn: A self-hosted Kanban project management tool + description: + en: A self-hosted Kanban project management tool + es-es: Una herramienta de gestión de proyectos Kanban autoalojada + fa: 'ابزار مدیریت پروژه کانبان خودمیزبان' + ja: セルフホスト型のカンバンプロジェクト管理ツール + ms: Alat pengurusan projek Kanban hos sendiri + pt-br: Uma ferramenta de gerenciamento de projetos Kanban auto-hospedada + ru: Самостоятельно размещаемый инструмент управления проектами Kanban + ko: 셀프 호스팅 Kanban 프로젝트 관리 도구 + zh-Hant: 可自託管的 Kanban 專案管理工具 + zh: 可自托管的 Kanban 项目管理工具 + tr: Kendi sunucunuzda barındırabileceğiniz Kanban proje yönetim aracı + type: website + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://fizzy.do/ + github: https://github.com/basecamp/fizzy + document: https://github.com/basecamp/fizzy/blob/main/docs/docker-deployment.md + architectures: + - amd64 + - arm64 diff --git a/apps/fizzy/latest/data.yml b/apps/fizzy/latest/data.yml new file mode 100644 index 000000000000..77b574e47580 --- /dev/null +++ b/apps/fizzy/latest/data.yml @@ -0,0 +1,205 @@ +additionalProperties: + formFields: + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: HTTP Port + labelZh: HTTP 端口 + label: + en: HTTP Port + es-es: Puerto HTTP + fa: 'پورت HTTP' + ja: HTTP ポート + ms: Port HTTP + pt-br: Porta HTTP + ru: HTTP-порт + ko: HTTP 포트 + zh-Hant: HTTP 埠 + zh: HTTP 端口 + tr: HTTP Bağlantı Noktası + required: true + rule: paramPort + type: number + - default: http://localhost:3000 + edit: true + envKey: BASE_URL + labelEn: Base URL + labelZh: 外部访问地址 + label: + en: Base URL + es-es: URL base + fa: 'نشانی پایه' + ja: ベース URL + ms: URL Asas + pt-br: URL base + ru: Базовый URL + ko: 기본 URL + zh-Hant: 外部訪問地址 + zh: 外部访问地址 + tr: Temel URL + required: true + rule: paramHttp + type: text + - default: fizzy + envKey: SECRET_KEY_BASE + labelEn: Secret Key Base + labelZh: 加密密钥 + label: + en: Secret Key Base + es-es: Clave secreta base + fa: 'کلید رمزنگاری پایه' + ja: シークレットキーベース + ms: Asas Kunci Rahsia + pt-br: Chave secreta base + ru: Базовый секретный ключ + ko: 기본 비밀 키 + zh-Hant: 加密金鑰 + zh: 加密密钥 + tr: Temel Gizli Anahtar + random: true + required: true + type: password + - default: "true" + edit: true + envKey: DISABLE_SSL + labelEn: HTTPS Mode + labelZh: HTTPS 模式 + label: + en: HTTPS Mode + es-es: Modo HTTPS + fa: 'حالت HTTPS' + ja: HTTPS モード + ms: Mod HTTPS + pt-br: Modo HTTPS + ru: Режим HTTPS + ko: HTTPS 모드 + zh-Hant: HTTPS 模式 + zh: HTTPS 模式 + tr: HTTPS Modu + required: true + type: select + values: + - label: Direct HTTP (true) + value: "true" + - label: HTTPS Reverse Proxy (false) + value: "false" + - default: "" + edit: true + envKey: MAILER_FROM_ADDRESS + labelEn: Mail From Address + labelZh: 发件地址 + label: + en: Mail From Address + es-es: Dirección del remitente + fa: 'نشانی فرستنده ایمیل' + ja: メール送信元アドレス + ms: Alamat Pengirim E-mel + pt-br: Endereço do remetente + ru: Адрес отправителя + ko: 메일 발신 주소 + zh-Hant: 發件地址 + zh: 发件地址 + tr: Gönderen E-posta Adresi + required: true + type: text + - default: "" + edit: true + envKey: SMTP_ADDRESS + labelEn: SMTP Server + labelZh: SMTP 服务器 + label: + en: SMTP Server + es-es: Servidor SMTP + fa: 'سرور SMTP' + ja: SMTP サーバー + ms: Pelayan SMTP + pt-br: Servidor SMTP + ru: SMTP-сервер + ko: SMTP 서버 + zh-Hant: SMTP 伺服器 + zh: SMTP 服务器 + tr: SMTP Sunucusu + required: true + type: text + - default: 587 + edit: true + envKey: SMTP_PORT + labelEn: SMTP Port + labelZh: SMTP 端口 + label: + en: SMTP Port + es-es: Puerto SMTP + fa: 'پورت SMTP' + ja: SMTP ポート + ms: Port SMTP + pt-br: Porta SMTP + ru: SMTP-порт + ko: SMTP 포트 + zh-Hant: SMTP 埠 + zh: SMTP 端口 + tr: SMTP Bağlantı Noktası + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: SMTP_USERNAME + labelEn: SMTP Username + labelZh: SMTP 用户名 + label: + en: SMTP Username + es-es: Usuario SMTP + fa: 'نام کاربری SMTP' + ja: SMTP ユーザー名 + ms: Nama Pengguna SMTP + pt-br: Usuário SMTP + ru: Имя пользователя SMTP + ko: SMTP 사용자 이름 + zh-Hant: SMTP 使用者名稱 + zh: SMTP 用户名 + tr: SMTP Kullanıcı Adı + required: false + type: text + - default: "" + edit: true + envKey: SMTP_PASSWORD + labelEn: SMTP Password + labelZh: SMTP 密码 + label: + en: SMTP Password + es-es: Contraseña SMTP + fa: 'رمز عبور SMTP' + ja: SMTP パスワード + ms: Kata Laluan SMTP + pt-br: Senha SMTP + ru: Пароль SMTP + ko: SMTP 비밀번호 + zh-Hant: SMTP 密碼 + zh: SMTP 密码 + tr: SMTP Parolası + required: false + type: password + - default: "false" + edit: true + envKey: SMTP_TLS + labelEn: SMTP Implicit TLS + labelZh: SMTP 隐式 TLS + label: + en: SMTP Implicit TLS + es-es: TLS implícito SMTP + fa: 'TLS ضمنی SMTP' + ja: SMTP 暗黙的 TLS + ms: TLS Tersirat SMTP + pt-br: TLS implícito SMTP + ru: Неявный TLS для SMTP + ko: SMTP 암시적 TLS + zh-Hant: SMTP 隱式 TLS + zh: SMTP 隐式 TLS + tr: SMTP Örtük TLS + required: false + type: select + values: + - label: "false" + value: "false" + - label: "true" + value: "true" diff --git a/apps/fizzy/latest/data/.gitkeep b/apps/fizzy/latest/data/.gitkeep new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/apps/fizzy/latest/docker-compose.yml b/apps/fizzy/latest/docker-compose.yml new file mode 100644 index 000000000000..ba6d3a9389b5 --- /dev/null +++ b/apps/fizzy/latest/docker-compose.yml @@ -0,0 +1,28 @@ +services: + fizzy: + image: ghcr.io/basecamp/fizzy:latest + container_name: ${CONTAINER_NAME} + restart: unless-stopped + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + entrypoint: ["/usr/local/bin/fizzy-entrypoint", "./bin/thrust", "./bin/rails", "server"] + environment: + - SECRET_KEY_BASE=${SECRET_KEY_BASE} + - DISABLE_SSL=${DISABLE_SSL} + - BASE_URL=${BASE_URL} + - MAILER_FROM_ADDRESS=${MAILER_FROM_ADDRESS} + - SMTP_ADDRESS=${SMTP_ADDRESS} + - SMTP_PORT=${SMTP_PORT} + - SMTP_USERNAME=${SMTP_USERNAME} + - SMTP_PASSWORD=${SMTP_PASSWORD} + - SMTP_TLS=${SMTP_TLS} + volumes: + - ./data:/rails/storage + - ./scripts/entrypoint.sh:/usr/local/bin/fizzy-entrypoint:ro + labels: + createdBy: "Apps" +networks: + 1panel-network: + external: true diff --git a/apps/fizzy/latest/scripts/entrypoint.sh b/apps/fizzy/latest/scripts/entrypoint.sh new file mode 100755 index 000000000000..d4d1d1ad9eb4 --- /dev/null +++ b/apps/fizzy/latest/scripts/entrypoint.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +if [ "${SMTP_USERNAME-}" = "" ]; then + unset SMTP_USERNAME +fi + +if [ "${SMTP_PASSWORD-}" = "" ]; then + unset SMTP_PASSWORD +fi + +exec /rails/bin/docker-entrypoint "$@" diff --git a/apps/fizzy/latest/scripts/init.sh b/apps/fizzy/latest/scripts/init.sh new file mode 100755 index 000000000000..f807ec725400 --- /dev/null +++ b/apps/fizzy/latest/scripts/init.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +set -e + +mkdir -p data +chown -R 1000:1000 data diff --git a/apps/fizzy/logo.png b/apps/fizzy/logo.png new file mode 100644 index 000000000000..d71d883068c8 Binary files /dev/null and b/apps/fizzy/logo.png differ