mirror of
https://github.com/okxlin/appstore.git
synced 2026-09-27 08:01:06 +00:00
Merge pull request #5270 from okxlin/feat/flagsmith-1panel-batch52
feat: add Flagsmith app
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
CONTAINER_NAME="flagsmith"
|
||||
PANEL_APP_BIND_ADDRESS="127.0.0.1"
|
||||
PANEL_APP_PORT_HTTP="8000"
|
||||
PANEL_DB_TYPE="postgresql"
|
||||
PANEL_DB_HOST="postgresql"
|
||||
PANEL_DB_PORT="5432"
|
||||
PANEL_DB_NAME="flagsmith"
|
||||
PANEL_DB_USER="flagsmith"
|
||||
PANEL_DB_USER_PASSWORD="change-me"
|
||||
DJANGO_SECRET_KEY="generate"
|
||||
FLAGSMITH_DOMAIN="localhost:8000"
|
||||
FLAGSMITH_ALLOWED_HOSTS="*"
|
||||
PREVENT_SIGNUP="false"
|
||||
@@ -0,0 +1,208 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 127.0.0.1
|
||||
edit: true
|
||||
envKey: PANEL_APP_BIND_ADDRESS
|
||||
labelEn: Bind Address
|
||||
labelZh: 绑定地址
|
||||
label:
|
||||
en: Bind Address
|
||||
zh: 绑定地址
|
||||
zh-Hant: 綁定位址
|
||||
ja: バインドアドレス
|
||||
ko: 바인드 주소
|
||||
ru: Адрес привязки
|
||||
ms: Alamat ikatan
|
||||
pt-br: Endereco de vinculacao
|
||||
required: true
|
||||
type: text
|
||||
- default: 8000
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: HTTP Port
|
||||
labelZh: HTTP 端口
|
||||
label:
|
||||
en: HTTP Port
|
||||
zh: HTTP 端口
|
||||
zh-Hant: HTTP 連接埠
|
||||
ja: HTTP ポート
|
||||
ko: HTTP 포트
|
||||
ru: HTTP-порт
|
||||
ms: Port HTTP
|
||||
pt-br: Porta HTTP
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: postgresql
|
||||
envKey: PANEL_DB_TYPE
|
||||
labelEn: Database Runtime
|
||||
labelZh: 数据库运行环境
|
||||
label:
|
||||
en: Database Runtime
|
||||
zh: 数据库运行环境
|
||||
zh-Hant: 資料庫執行環境
|
||||
ja: データベース実行環境
|
||||
ko: 데이터베이스 런타임
|
||||
ru: Среда базы данных
|
||||
ms: Masa jalan pangkalan data
|
||||
pt-br: Ambiente de banco de dados
|
||||
required: true
|
||||
type: apps
|
||||
values:
|
||||
- label: PostgreSQL
|
||||
value: postgresql
|
||||
child:
|
||||
default: ""
|
||||
envKey: PANEL_DB_HOST
|
||||
labelEn: PostgreSQL Service
|
||||
labelZh: PostgreSQL 服务
|
||||
label:
|
||||
en: PostgreSQL Service
|
||||
zh: PostgreSQL 服务
|
||||
zh-Hant: PostgreSQL 服務
|
||||
ja: PostgreSQL サービス
|
||||
ko: PostgreSQL 서비스
|
||||
ru: Сервис PostgreSQL
|
||||
ms: Perkhidmatan PostgreSQL
|
||||
pt-br: Servico PostgreSQL
|
||||
required: true
|
||||
type: service
|
||||
- default: 5432
|
||||
edit: true
|
||||
envKey: PANEL_DB_PORT
|
||||
labelEn: Database Port
|
||||
labelZh: 数据库端口
|
||||
label:
|
||||
en: Database Port
|
||||
zh: 数据库端口
|
||||
zh-Hant: 資料庫連接埠
|
||||
ja: データベースポート
|
||||
ko: 데이터베이스 포트
|
||||
ru: Порт базы данных
|
||||
ms: Port pangkalan data
|
||||
pt-br: Porta do banco de dados
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: flagsmith
|
||||
edit: true
|
||||
envKey: PANEL_DB_NAME
|
||||
labelEn: Database Name
|
||||
labelZh: 数据库名称
|
||||
label:
|
||||
en: Database Name
|
||||
zh: 数据库名称
|
||||
zh-Hant: 資料庫名稱
|
||||
ja: データベース名
|
||||
ko: 데이터베이스 이름
|
||||
ru: Имя базы данных
|
||||
ms: Nama pangkalan data
|
||||
pt-br: Nome do banco de dados
|
||||
random: true
|
||||
required: true
|
||||
rule: paramCommon
|
||||
type: text
|
||||
- default: flagsmith
|
||||
edit: true
|
||||
envKey: PANEL_DB_USER
|
||||
labelEn: Database User
|
||||
labelZh: 数据库用户
|
||||
label:
|
||||
en: Database User
|
||||
zh: 数据库用户
|
||||
zh-Hant: 資料庫使用者
|
||||
ja: データベースユーザー
|
||||
ko: 데이터베이스 사용자
|
||||
ru: Пользователь базы данных
|
||||
ms: Pengguna pangkalan data
|
||||
pt-br: Usuario do banco de dados
|
||||
random: true
|
||||
required: true
|
||||
rule: paramCommon
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: PANEL_DB_USER_PASSWORD
|
||||
labelEn: Database Password
|
||||
labelZh: 数据库密码
|
||||
label:
|
||||
en: Database Password
|
||||
zh: 数据库密码
|
||||
zh-Hant: 資料庫密碼
|
||||
ja: データベースパスワード
|
||||
ko: 데이터베이스 비밀번호
|
||||
ru: Пароль базы данных
|
||||
ms: Kata laluan pangkalan data
|
||||
pt-br: Senha do banco de dados
|
||||
required: true
|
||||
rule: paramComplexity
|
||||
type: password
|
||||
- default: generate
|
||||
edit: true
|
||||
envKey: DJANGO_SECRET_KEY
|
||||
labelEn: Application Secret
|
||||
labelZh: 应用密钥
|
||||
label:
|
||||
en: Application Secret
|
||||
zh: 应用密钥
|
||||
zh-Hant: 應用程式密鑰
|
||||
ja: アプリケーションシークレット
|
||||
ko: 애플리케이션 비밀 키
|
||||
ru: Секрет приложения
|
||||
ms: Rahsia aplikasi
|
||||
pt-br: Segredo do aplicativo
|
||||
required: true
|
||||
type: password
|
||||
- default: localhost:8000
|
||||
edit: true
|
||||
envKey: FLAGSMITH_DOMAIN
|
||||
labelEn: Public Host
|
||||
labelZh: 公开访问主机
|
||||
label:
|
||||
en: Public Host
|
||||
zh: 公开访问主机
|
||||
zh-Hant: 公開存取主機
|
||||
ja: 公開ホスト
|
||||
ko: 공개 호스트
|
||||
ru: Публичный хост
|
||||
ms: Hos awam
|
||||
pt-br: Host publico
|
||||
required: true
|
||||
type: text
|
||||
- default: "*"
|
||||
edit: true
|
||||
envKey: FLAGSMITH_ALLOWED_HOSTS
|
||||
labelEn: Allowed Hosts
|
||||
labelZh: 允许的主机
|
||||
label:
|
||||
en: Allowed Hosts
|
||||
zh: 允许的主机
|
||||
zh-Hant: 允許的主機
|
||||
ja: 許可するホスト
|
||||
ko: 허용된 호스트
|
||||
ru: Разрешенные хосты
|
||||
ms: Hos yang dibenarkan
|
||||
pt-br: Hosts permitidos
|
||||
required: true
|
||||
type: text
|
||||
- default: "false"
|
||||
edit: true
|
||||
envKey: PREVENT_SIGNUP
|
||||
labelEn: Prevent New Signups
|
||||
labelZh: 禁止新用户注册
|
||||
label:
|
||||
en: Prevent New Signups
|
||||
zh: 禁止新用户注册
|
||||
zh-Hant: 禁止新使用者註冊
|
||||
ja: 新規登録を禁止
|
||||
ko: 신규 가입 방지
|
||||
ru: Запретить новые регистрации
|
||||
ms: Halang pendaftaran baharu
|
||||
pt-br: Impedir novos cadastros
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "false"
|
||||
value: "false"
|
||||
- label: "true"
|
||||
value: "true"
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
services:
|
||||
flagsmith-migrate:
|
||||
image: "flagsmith/flagsmith:2.257.0@sha256:e3b2cfca0dd268cc7af320becfd3a3ed928a58ae424c5c69b00a600bdf2a36b3"
|
||||
container_name: ${CONTAINER_NAME}-migrate
|
||||
restart: unless-stopped
|
||||
entrypoint: ["/bin/sh", "-c"]
|
||||
command:
|
||||
- flagsmith migrate && touch /tmp/flagsmith-migration-complete && exec sleep infinity
|
||||
networks:
|
||||
- 1panel-network
|
||||
environment:
|
||||
DJANGO_DB_HOST: ${PANEL_DB_HOST}
|
||||
DJANGO_DB_PORT: ${PANEL_DB_PORT}
|
||||
DJANGO_DB_NAME: ${PANEL_DB_NAME}
|
||||
DJANGO_DB_USER: ${PANEL_DB_USER}
|
||||
DJANGO_DB_PASSWORD: ${PANEL_DB_USER_PASSWORD}
|
||||
USE_POSTGRES_FOR_ANALYTICS: "true"
|
||||
ENVIRONMENT: production
|
||||
DJANGO_ALLOWED_HOSTS: ${FLAGSMITH_ALLOWED_HOSTS}
|
||||
FLAGSMITH_DOMAIN: ${FLAGSMITH_DOMAIN}
|
||||
DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY}
|
||||
PREVENT_SIGNUP: ${PREVENT_SIGNUP}
|
||||
TASK_RUN_METHOD: TASK_PROCESSOR
|
||||
PROMETHEUS_ENABLED: "true"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "test -f /tmp/flagsmith-migration-complete"]
|
||||
interval: 5s
|
||||
timeout: 2s
|
||||
start_period: 20s
|
||||
retries: 60
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
flagsmith:
|
||||
image: "flagsmith/flagsmith:2.257.0@sha256:e3b2cfca0dd268cc7af320becfd3a3ed928a58ae424c5c69b00a600bdf2a36b3"
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: unless-stopped
|
||||
command: ["serve"]
|
||||
depends_on:
|
||||
flagsmith-migrate:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_BIND_ADDRESS}:${PANEL_APP_PORT_HTTP}:8000"
|
||||
environment:
|
||||
DJANGO_DB_HOST: ${PANEL_DB_HOST}
|
||||
DJANGO_DB_PORT: ${PANEL_DB_PORT}
|
||||
DJANGO_DB_NAME: ${PANEL_DB_NAME}
|
||||
DJANGO_DB_USER: ${PANEL_DB_USER}
|
||||
DJANGO_DB_PASSWORD: ${PANEL_DB_USER_PASSWORD}
|
||||
USE_POSTGRES_FOR_ANALYTICS: "true"
|
||||
ENVIRONMENT: production
|
||||
DJANGO_ALLOWED_HOSTS: ${FLAGSMITH_ALLOWED_HOSTS}
|
||||
FLAGSMITH_DOMAIN: ${FLAGSMITH_DOMAIN}
|
||||
DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY}
|
||||
PREVENT_SIGNUP: ${PREVENT_SIGNUP}
|
||||
TASK_RUN_METHOD: TASK_PROCESSOR
|
||||
PROMETHEUS_ENABLED: "true"
|
||||
healthcheck:
|
||||
test: ["CMD", "flagsmith", "healthcheck", "tcp"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
start_period: 60s
|
||||
retries: 6
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
flagsmith-task-processor:
|
||||
image: "flagsmith/flagsmith:2.257.0@sha256:e3b2cfca0dd268cc7af320becfd3a3ed928a58ae424c5c69b00a600bdf2a36b3"
|
||||
container_name: ${CONTAINER_NAME}-task-processor
|
||||
restart: unless-stopped
|
||||
command: ["run-task-processor"]
|
||||
depends_on:
|
||||
flagsmith-migrate:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- 1panel-network
|
||||
environment:
|
||||
DJANGO_DB_HOST: ${PANEL_DB_HOST}
|
||||
DJANGO_DB_PORT: ${PANEL_DB_PORT}
|
||||
DJANGO_DB_NAME: ${PANEL_DB_NAME}
|
||||
DJANGO_DB_USER: ${PANEL_DB_USER}
|
||||
DJANGO_DB_PASSWORD: ${PANEL_DB_USER_PASSWORD}
|
||||
USE_POSTGRES_FOR_ANALYTICS: "true"
|
||||
ENVIRONMENT: production
|
||||
DJANGO_ALLOWED_HOSTS: ${FLAGSMITH_ALLOWED_HOSTS}
|
||||
FLAGSMITH_DOMAIN: ${FLAGSMITH_DOMAIN}
|
||||
DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY}
|
||||
PREVENT_SIGNUP: ${PREVENT_SIGNUP}
|
||||
TASK_RUN_METHOD: TASK_PROCESSOR
|
||||
PROMETHEUS_ENABLED: "true"
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
Executable
+67
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)"
|
||||
ENV_FILE="${ENV_FILE:-${ROOT_DIR}/.env}"
|
||||
|
||||
fail() {
|
||||
printf '%s\n' "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
read_env_value() {
|
||||
local key="$1"
|
||||
local value=""
|
||||
value="$(sed -n "s/^${key}=//p" "$ENV_FILE" | tail -n 1)"
|
||||
case "$value" in
|
||||
\"*\") value="${value#\"}"; value="${value%\"}" ;;
|
||||
\'*\') value="${value#\'}"; value="${value%\'}" ;;
|
||||
esac
|
||||
printf '%s\n' "$value"
|
||||
}
|
||||
|
||||
set_env_value() {
|
||||
local key="$1"
|
||||
local value="$2"
|
||||
local temp_file
|
||||
temp_file="$(mktemp "${ROOT_DIR}/.flagsmith-env.tmp.XXXXXX")"
|
||||
awk -v key="$key" -v value="$value" '
|
||||
BEGIN { written = 0 }
|
||||
$0 ~ "^" key "=" {
|
||||
if (!written) {
|
||||
print key "=" value
|
||||
written = 1
|
||||
}
|
||||
next
|
||||
}
|
||||
{ print }
|
||||
END {
|
||||
if (!written) print key "=" value
|
||||
}
|
||||
' "$ENV_FILE" > "$temp_file"
|
||||
chmod 600 "$temp_file"
|
||||
mv -f -- "$temp_file" "$ENV_FILE"
|
||||
}
|
||||
|
||||
[[ -f "$ENV_FILE" ]] || fail "$ENV_FILE not found"
|
||||
[[ ! -L "$ENV_FILE" ]] || fail "$ENV_FILE must not be a symbolic link"
|
||||
|
||||
domain="$(read_env_value FLAGSMITH_DOMAIN)"
|
||||
[[ "$domain" =~ ^[A-Za-z0-9._:-]+$ ]] || fail "FLAGSMITH_DOMAIN must be a host with an optional port and no scheme or path"
|
||||
|
||||
allowed_hosts="$(read_env_value FLAGSMITH_ALLOWED_HOSTS)"
|
||||
[[ "$allowed_hosts" =~ ^[A-Za-z0-9.*_:-]+(,[A-Za-z0-9.*_:-]+)*$ ]] || fail "FLAGSMITH_ALLOWED_HOSTS must be a comma-separated host list"
|
||||
|
||||
prevent_signup="$(read_env_value PREVENT_SIGNUP)"
|
||||
[[ "$prevent_signup" == "true" || "$prevent_signup" == "false" ]] || fail "PREVENT_SIGNUP must be true or false"
|
||||
|
||||
secret="$(read_env_value DJANGO_SECRET_KEY)"
|
||||
if [[ -z "$secret" || "$secret" == "generate" ]]; then
|
||||
command -v openssl >/dev/null 2>&1 || fail "openssl is required to generate DJANGO_SECRET_KEY"
|
||||
secret="$(openssl rand -hex 32)"
|
||||
fi
|
||||
[[ ${#secret} -ge 50 ]] || fail "DJANGO_SECRET_KEY must contain at least 50 characters"
|
||||
[[ "$secret" =~ ^[A-Za-z0-9._~!@%+=:,/-]+$ ]] || fail "DJANGO_SECRET_KEY contains unsupported dotenv characters"
|
||||
|
||||
chmod 600 "$ENV_FILE"
|
||||
set_env_value DJANGO_SECRET_KEY "$secret"
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
if command -v docker-compose >/dev/null 2>&1; then
|
||||
docker-compose down --remove-orphans
|
||||
else
|
||||
docker compose down --remove-orphans
|
||||
fi
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
|
||||
exec bash "${SCRIPT_DIR}/init.sh"
|
||||
@@ -0,0 +1,52 @@
|
||||
# Flagsmith
|
||||
|
||||
## 产品介绍
|
||||
|
||||
Flagsmith 是开源的功能标志与远程配置平台,可集中管理功能开关、环境、身份和分段规则,并通过 SDK 或 API 向应用提供配置。
|
||||
|
||||
## 主要功能
|
||||
|
||||
- 为多个项目和环境管理功能标志
|
||||
- 按身份、特征和分段规则逐步发布功能
|
||||
- 通过客户端、服务端 SDK 和 REST API 获取标志
|
||||
- 记录标志分析数据并运行后台任务
|
||||
|
||||
## 访问说明
|
||||
|
||||
- 安装前需在 1Panel 中准备一个正在运行的 PostgreSQL 服务,并在表单中选择它。1Panel 会创建并关联 Flagsmith 使用的数据库和用户。
|
||||
- 安装后访问 `http://<服务器 IP>:8000`,实际端口以 `PANEL_APP_PORT_HTTP` 为准,然后创建首个账户。
|
||||
- `FLAGSMITH_DOMAIN` 填写浏览器实际访问的主机和可选端口,不包含 `http://` 或路径。例如 `flags.example.com` 或 `192.0.2.10:8000`。
|
||||
- 公网部署应通过 HTTPS 反向代理访问,并将 `FLAGSMITH_ALLOWED_HOSTS` 限制为实际域名。
|
||||
|
||||
## 拓扑和数据
|
||||
|
||||
本包保留官方 Compose 的完整应用拓扑:独立数据库迁移门禁、Web/API 主服务和独立任务处理器。三个角色使用同一官方镜像,迁移成功后门禁容器进入空闲状态,另外两个服务才会启动。迁移容器保持运行是为了兼容 1Panel 将成功退出的一次性容器仍标记为异常的状态模型;它不对外提供服务或重复执行任务。Redis 仅用于可选的高级缓存或事件摄取配置,不是官方基础 Compose 的必需依赖。
|
||||
|
||||
业务数据保存在所选 PostgreSQL 服务中。升级或卸载前请备份该数据库;卸载应用不会删除外部 PostgreSQL 服务本身。1Panel 当前可能将关联 PostgreSQL 用户创建为超级用户,因此共享实例上的关联用户不是强隔离边界。面向不受信任用户或高价值数据时,应使用专用 PostgreSQL 实例。
|
||||
|
||||
## 安全说明
|
||||
|
||||
- `DJANGO_SECRET_KEY` 在首次安装时生成并保存在应用 `.env` 中,升级时保持不变。不要提交或共享安装后的 `.env`。
|
||||
- 默认允许首个及后续用户注册。完成管理员初始化后,可将 `PREVENT_SIGNUP` 改为 `true`。
|
||||
- Google OAuth、SAML、SMTP、Webhook 和其他外部集成均为可选功能。启用时应使用最小权限凭据,并在升级前重新检查镜像安全公告。
|
||||
- 应用镜像以非 root 用户运行,只有 Web/API 主服务向主机发布端口;迁移和任务处理器不发布主机端口。
|
||||
|
||||
## Introduction
|
||||
|
||||
Flagsmith is an open-source feature flag and remote configuration platform. This package preserves the official migration gate, Web/API service, and task-processor topology while using a 1Panel-managed PostgreSQL service. The migration container stays idle after a successful migration because 1Panel otherwise treats a successfully exited one-shot Compose container as unhealthy.
|
||||
|
||||
## Features
|
||||
|
||||
- Manage feature flags across projects and environments
|
||||
- Target identities and segments for gradual releases
|
||||
- Serve configuration through client SDKs, server SDKs, and REST APIs
|
||||
- Store flag analytics and process background tasks
|
||||
|
||||
Choose a running PostgreSQL service during installation. Back up the linked database before upgrades or uninstalling. A 1Panel-linked PostgreSQL role may currently be a superuser, so use a dedicated PostgreSQL instance where stronger isolation is required. Set `FLAGSMITH_DOMAIN` to the public host with an optional port, and use an HTTPS reverse proxy for Internet-facing deployments.
|
||||
|
||||
## References
|
||||
|
||||
- Website: <https://www.flagsmith.com/>
|
||||
- Source: <https://github.com/Flagsmith/flagsmith>
|
||||
- Documentation: <https://docs.flagsmith.com/deployment-self-hosting/hosting-guides/docker>
|
||||
- License: BSD-3-Clause
|
||||
@@ -0,0 +1,33 @@
|
||||
name: Flagsmith
|
||||
tags:
|
||||
- 开发工具
|
||||
- 项目管理
|
||||
title: 开源功能标志和远程配置平台
|
||||
description: 开源功能标志和远程配置平台
|
||||
additionalProperties:
|
||||
key: flagsmith
|
||||
name: Flagsmith
|
||||
tags:
|
||||
- DevTool
|
||||
- Tool
|
||||
shortDescZh: 开源功能标志和远程配置平台
|
||||
shortDescEn: Open-source feature flag and remote configuration platform
|
||||
description:
|
||||
en: Open-source feature flag and remote configuration platform
|
||||
zh: 开源功能标志和远程配置平台
|
||||
zh-Hant: 開源功能旗標與遠端設定平台
|
||||
ja: オープンソースの機能フラグおよびリモート設定プラットフォーム
|
||||
ko: 오픈 소스 기능 플래그 및 원격 구성 플랫폼
|
||||
ru: Платформа с открытым исходным кодом для флагов функций и удаленной конфигурации
|
||||
ms: Platform sumber terbuka untuk bendera ciri dan konfigurasi jauh
|
||||
pt-br: Plataforma de codigo aberto para sinalizadores de recursos e configuracao remota
|
||||
type: tool
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
recommend: 0
|
||||
website: https://www.flagsmith.com/
|
||||
github: https://github.com/Flagsmith/flagsmith
|
||||
document: https://docs.flagsmith.com/deployment-self-hosting/hosting-guides/docker
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
@@ -0,0 +1,13 @@
|
||||
CONTAINER_NAME="flagsmith"
|
||||
PANEL_APP_BIND_ADDRESS="127.0.0.1"
|
||||
PANEL_APP_PORT_HTTP="8000"
|
||||
PANEL_DB_TYPE="postgresql"
|
||||
PANEL_DB_HOST="postgresql"
|
||||
PANEL_DB_PORT="5432"
|
||||
PANEL_DB_NAME="flagsmith"
|
||||
PANEL_DB_USER="flagsmith"
|
||||
PANEL_DB_USER_PASSWORD="change-me"
|
||||
DJANGO_SECRET_KEY="generate"
|
||||
FLAGSMITH_DOMAIN="localhost:8000"
|
||||
FLAGSMITH_ALLOWED_HOSTS="*"
|
||||
PREVENT_SIGNUP="false"
|
||||
@@ -0,0 +1,208 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 127.0.0.1
|
||||
edit: true
|
||||
envKey: PANEL_APP_BIND_ADDRESS
|
||||
labelEn: Bind Address
|
||||
labelZh: 绑定地址
|
||||
label:
|
||||
en: Bind Address
|
||||
zh: 绑定地址
|
||||
zh-Hant: 綁定位址
|
||||
ja: バインドアドレス
|
||||
ko: 바인드 주소
|
||||
ru: Адрес привязки
|
||||
ms: Alamat ikatan
|
||||
pt-br: Endereco de vinculacao
|
||||
required: true
|
||||
type: text
|
||||
- default: 8000
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: HTTP Port
|
||||
labelZh: HTTP 端口
|
||||
label:
|
||||
en: HTTP Port
|
||||
zh: HTTP 端口
|
||||
zh-Hant: HTTP 連接埠
|
||||
ja: HTTP ポート
|
||||
ko: HTTP 포트
|
||||
ru: HTTP-порт
|
||||
ms: Port HTTP
|
||||
pt-br: Porta HTTP
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: postgresql
|
||||
envKey: PANEL_DB_TYPE
|
||||
labelEn: Database Runtime
|
||||
labelZh: 数据库运行环境
|
||||
label:
|
||||
en: Database Runtime
|
||||
zh: 数据库运行环境
|
||||
zh-Hant: 資料庫執行環境
|
||||
ja: データベース実行環境
|
||||
ko: 데이터베이스 런타임
|
||||
ru: Среда базы данных
|
||||
ms: Masa jalan pangkalan data
|
||||
pt-br: Ambiente de banco de dados
|
||||
required: true
|
||||
type: apps
|
||||
values:
|
||||
- label: PostgreSQL
|
||||
value: postgresql
|
||||
child:
|
||||
default: ""
|
||||
envKey: PANEL_DB_HOST
|
||||
labelEn: PostgreSQL Service
|
||||
labelZh: PostgreSQL 服务
|
||||
label:
|
||||
en: PostgreSQL Service
|
||||
zh: PostgreSQL 服务
|
||||
zh-Hant: PostgreSQL 服務
|
||||
ja: PostgreSQL サービス
|
||||
ko: PostgreSQL 서비스
|
||||
ru: Сервис PostgreSQL
|
||||
ms: Perkhidmatan PostgreSQL
|
||||
pt-br: Servico PostgreSQL
|
||||
required: true
|
||||
type: service
|
||||
- default: 5432
|
||||
edit: true
|
||||
envKey: PANEL_DB_PORT
|
||||
labelEn: Database Port
|
||||
labelZh: 数据库端口
|
||||
label:
|
||||
en: Database Port
|
||||
zh: 数据库端口
|
||||
zh-Hant: 資料庫連接埠
|
||||
ja: データベースポート
|
||||
ko: 데이터베이스 포트
|
||||
ru: Порт базы данных
|
||||
ms: Port pangkalan data
|
||||
pt-br: Porta do banco de dados
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: flagsmith
|
||||
edit: true
|
||||
envKey: PANEL_DB_NAME
|
||||
labelEn: Database Name
|
||||
labelZh: 数据库名称
|
||||
label:
|
||||
en: Database Name
|
||||
zh: 数据库名称
|
||||
zh-Hant: 資料庫名稱
|
||||
ja: データベース名
|
||||
ko: 데이터베이스 이름
|
||||
ru: Имя базы данных
|
||||
ms: Nama pangkalan data
|
||||
pt-br: Nome do banco de dados
|
||||
random: true
|
||||
required: true
|
||||
rule: paramCommon
|
||||
type: text
|
||||
- default: flagsmith
|
||||
edit: true
|
||||
envKey: PANEL_DB_USER
|
||||
labelEn: Database User
|
||||
labelZh: 数据库用户
|
||||
label:
|
||||
en: Database User
|
||||
zh: 数据库用户
|
||||
zh-Hant: 資料庫使用者
|
||||
ja: データベースユーザー
|
||||
ko: 데이터베이스 사용자
|
||||
ru: Пользователь базы данных
|
||||
ms: Pengguna pangkalan data
|
||||
pt-br: Usuario do banco de dados
|
||||
random: true
|
||||
required: true
|
||||
rule: paramCommon
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: PANEL_DB_USER_PASSWORD
|
||||
labelEn: Database Password
|
||||
labelZh: 数据库密码
|
||||
label:
|
||||
en: Database Password
|
||||
zh: 数据库密码
|
||||
zh-Hant: 資料庫密碼
|
||||
ja: データベースパスワード
|
||||
ko: 데이터베이스 비밀번호
|
||||
ru: Пароль базы данных
|
||||
ms: Kata laluan pangkalan data
|
||||
pt-br: Senha do banco de dados
|
||||
required: true
|
||||
rule: paramComplexity
|
||||
type: password
|
||||
- default: generate
|
||||
edit: true
|
||||
envKey: DJANGO_SECRET_KEY
|
||||
labelEn: Application Secret
|
||||
labelZh: 应用密钥
|
||||
label:
|
||||
en: Application Secret
|
||||
zh: 应用密钥
|
||||
zh-Hant: 應用程式密鑰
|
||||
ja: アプリケーションシークレット
|
||||
ko: 애플리케이션 비밀 키
|
||||
ru: Секрет приложения
|
||||
ms: Rahsia aplikasi
|
||||
pt-br: Segredo do aplicativo
|
||||
required: true
|
||||
type: password
|
||||
- default: localhost:8000
|
||||
edit: true
|
||||
envKey: FLAGSMITH_DOMAIN
|
||||
labelEn: Public Host
|
||||
labelZh: 公开访问主机
|
||||
label:
|
||||
en: Public Host
|
||||
zh: 公开访问主机
|
||||
zh-Hant: 公開存取主機
|
||||
ja: 公開ホスト
|
||||
ko: 공개 호스트
|
||||
ru: Публичный хост
|
||||
ms: Hos awam
|
||||
pt-br: Host publico
|
||||
required: true
|
||||
type: text
|
||||
- default: "*"
|
||||
edit: true
|
||||
envKey: FLAGSMITH_ALLOWED_HOSTS
|
||||
labelEn: Allowed Hosts
|
||||
labelZh: 允许的主机
|
||||
label:
|
||||
en: Allowed Hosts
|
||||
zh: 允许的主机
|
||||
zh-Hant: 允許的主機
|
||||
ja: 許可するホスト
|
||||
ko: 허용된 호스트
|
||||
ru: Разрешенные хосты
|
||||
ms: Hos yang dibenarkan
|
||||
pt-br: Hosts permitidos
|
||||
required: true
|
||||
type: text
|
||||
- default: "false"
|
||||
edit: true
|
||||
envKey: PREVENT_SIGNUP
|
||||
labelEn: Prevent New Signups
|
||||
labelZh: 禁止新用户注册
|
||||
label:
|
||||
en: Prevent New Signups
|
||||
zh: 禁止新用户注册
|
||||
zh-Hant: 禁止新使用者註冊
|
||||
ja: 新規登録を禁止
|
||||
ko: 신규 가입 방지
|
||||
ru: Запретить новые регистрации
|
||||
ms: Halang pendaftaran baharu
|
||||
pt-br: Impedir novos cadastros
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "false"
|
||||
value: "false"
|
||||
- label: "true"
|
||||
value: "true"
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
services:
|
||||
flagsmith-migrate:
|
||||
image: "flagsmith/flagsmith:latest@sha256:e3b2cfca0dd268cc7af320becfd3a3ed928a58ae424c5c69b00a600bdf2a36b3"
|
||||
container_name: ${CONTAINER_NAME}-migrate
|
||||
restart: unless-stopped
|
||||
entrypoint: ["/bin/sh", "-c"]
|
||||
command:
|
||||
- flagsmith migrate && touch /tmp/flagsmith-migration-complete && exec sleep infinity
|
||||
networks:
|
||||
- 1panel-network
|
||||
environment:
|
||||
DJANGO_DB_HOST: ${PANEL_DB_HOST}
|
||||
DJANGO_DB_PORT: ${PANEL_DB_PORT}
|
||||
DJANGO_DB_NAME: ${PANEL_DB_NAME}
|
||||
DJANGO_DB_USER: ${PANEL_DB_USER}
|
||||
DJANGO_DB_PASSWORD: ${PANEL_DB_USER_PASSWORD}
|
||||
USE_POSTGRES_FOR_ANALYTICS: "true"
|
||||
ENVIRONMENT: production
|
||||
DJANGO_ALLOWED_HOSTS: ${FLAGSMITH_ALLOWED_HOSTS}
|
||||
FLAGSMITH_DOMAIN: ${FLAGSMITH_DOMAIN}
|
||||
DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY}
|
||||
PREVENT_SIGNUP: ${PREVENT_SIGNUP}
|
||||
TASK_RUN_METHOD: TASK_PROCESSOR
|
||||
PROMETHEUS_ENABLED: "true"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "test -f /tmp/flagsmith-migration-complete"]
|
||||
interval: 5s
|
||||
timeout: 2s
|
||||
start_period: 20s
|
||||
retries: 60
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
flagsmith:
|
||||
image: "flagsmith/flagsmith:latest@sha256:e3b2cfca0dd268cc7af320becfd3a3ed928a58ae424c5c69b00a600bdf2a36b3"
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: unless-stopped
|
||||
command: ["serve"]
|
||||
depends_on:
|
||||
flagsmith-migrate:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_BIND_ADDRESS}:${PANEL_APP_PORT_HTTP}:8000"
|
||||
environment:
|
||||
DJANGO_DB_HOST: ${PANEL_DB_HOST}
|
||||
DJANGO_DB_PORT: ${PANEL_DB_PORT}
|
||||
DJANGO_DB_NAME: ${PANEL_DB_NAME}
|
||||
DJANGO_DB_USER: ${PANEL_DB_USER}
|
||||
DJANGO_DB_PASSWORD: ${PANEL_DB_USER_PASSWORD}
|
||||
USE_POSTGRES_FOR_ANALYTICS: "true"
|
||||
ENVIRONMENT: production
|
||||
DJANGO_ALLOWED_HOSTS: ${FLAGSMITH_ALLOWED_HOSTS}
|
||||
FLAGSMITH_DOMAIN: ${FLAGSMITH_DOMAIN}
|
||||
DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY}
|
||||
PREVENT_SIGNUP: ${PREVENT_SIGNUP}
|
||||
TASK_RUN_METHOD: TASK_PROCESSOR
|
||||
PROMETHEUS_ENABLED: "true"
|
||||
healthcheck:
|
||||
test: ["CMD", "flagsmith", "healthcheck", "tcp"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
start_period: 60s
|
||||
retries: 6
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
flagsmith-task-processor:
|
||||
image: "flagsmith/flagsmith:latest@sha256:e3b2cfca0dd268cc7af320becfd3a3ed928a58ae424c5c69b00a600bdf2a36b3"
|
||||
container_name: ${CONTAINER_NAME}-task-processor
|
||||
restart: unless-stopped
|
||||
command: ["run-task-processor"]
|
||||
depends_on:
|
||||
flagsmith-migrate:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- 1panel-network
|
||||
environment:
|
||||
DJANGO_DB_HOST: ${PANEL_DB_HOST}
|
||||
DJANGO_DB_PORT: ${PANEL_DB_PORT}
|
||||
DJANGO_DB_NAME: ${PANEL_DB_NAME}
|
||||
DJANGO_DB_USER: ${PANEL_DB_USER}
|
||||
DJANGO_DB_PASSWORD: ${PANEL_DB_USER_PASSWORD}
|
||||
USE_POSTGRES_FOR_ANALYTICS: "true"
|
||||
ENVIRONMENT: production
|
||||
DJANGO_ALLOWED_HOSTS: ${FLAGSMITH_ALLOWED_HOSTS}
|
||||
FLAGSMITH_DOMAIN: ${FLAGSMITH_DOMAIN}
|
||||
DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY}
|
||||
PREVENT_SIGNUP: ${PREVENT_SIGNUP}
|
||||
TASK_RUN_METHOD: TASK_PROCESSOR
|
||||
PROMETHEUS_ENABLED: "true"
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
Executable
+67
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)"
|
||||
ENV_FILE="${ENV_FILE:-${ROOT_DIR}/.env}"
|
||||
|
||||
fail() {
|
||||
printf '%s\n' "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
read_env_value() {
|
||||
local key="$1"
|
||||
local value=""
|
||||
value="$(sed -n "s/^${key}=//p" "$ENV_FILE" | tail -n 1)"
|
||||
case "$value" in
|
||||
\"*\") value="${value#\"}"; value="${value%\"}" ;;
|
||||
\'*\') value="${value#\'}"; value="${value%\'}" ;;
|
||||
esac
|
||||
printf '%s\n' "$value"
|
||||
}
|
||||
|
||||
set_env_value() {
|
||||
local key="$1"
|
||||
local value="$2"
|
||||
local temp_file
|
||||
temp_file="$(mktemp "${ROOT_DIR}/.flagsmith-env.tmp.XXXXXX")"
|
||||
awk -v key="$key" -v value="$value" '
|
||||
BEGIN { written = 0 }
|
||||
$0 ~ "^" key "=" {
|
||||
if (!written) {
|
||||
print key "=" value
|
||||
written = 1
|
||||
}
|
||||
next
|
||||
}
|
||||
{ print }
|
||||
END {
|
||||
if (!written) print key "=" value
|
||||
}
|
||||
' "$ENV_FILE" > "$temp_file"
|
||||
chmod 600 "$temp_file"
|
||||
mv -f -- "$temp_file" "$ENV_FILE"
|
||||
}
|
||||
|
||||
[[ -f "$ENV_FILE" ]] || fail "$ENV_FILE not found"
|
||||
[[ ! -L "$ENV_FILE" ]] || fail "$ENV_FILE must not be a symbolic link"
|
||||
|
||||
domain="$(read_env_value FLAGSMITH_DOMAIN)"
|
||||
[[ "$domain" =~ ^[A-Za-z0-9._:-]+$ ]] || fail "FLAGSMITH_DOMAIN must be a host with an optional port and no scheme or path"
|
||||
|
||||
allowed_hosts="$(read_env_value FLAGSMITH_ALLOWED_HOSTS)"
|
||||
[[ "$allowed_hosts" =~ ^[A-Za-z0-9.*_:-]+(,[A-Za-z0-9.*_:-]+)*$ ]] || fail "FLAGSMITH_ALLOWED_HOSTS must be a comma-separated host list"
|
||||
|
||||
prevent_signup="$(read_env_value PREVENT_SIGNUP)"
|
||||
[[ "$prevent_signup" == "true" || "$prevent_signup" == "false" ]] || fail "PREVENT_SIGNUP must be true or false"
|
||||
|
||||
secret="$(read_env_value DJANGO_SECRET_KEY)"
|
||||
if [[ -z "$secret" || "$secret" == "generate" ]]; then
|
||||
command -v openssl >/dev/null 2>&1 || fail "openssl is required to generate DJANGO_SECRET_KEY"
|
||||
secret="$(openssl rand -hex 32)"
|
||||
fi
|
||||
[[ ${#secret} -ge 50 ]] || fail "DJANGO_SECRET_KEY must contain at least 50 characters"
|
||||
[[ "$secret" =~ ^[A-Za-z0-9._~!@%+=:,/-]+$ ]] || fail "DJANGO_SECRET_KEY contains unsupported dotenv characters"
|
||||
|
||||
chmod 600 "$ENV_FILE"
|
||||
set_env_value DJANGO_SECRET_KEY "$secret"
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
if command -v docker-compose >/dev/null 2>&1; then
|
||||
docker-compose down --remove-orphans
|
||||
else
|
||||
docker compose down --remove-orphans
|
||||
fi
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
|
||||
exec bash "${SCRIPT_DIR}/init.sh"
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 6.6 KiB |
Reference in New Issue
Block a user