Рефакторизация структуры кода для улучшения читаемости и удобства сопровождения.

This commit is contained in:
2026-04-30 07:41:41 +03:00
parent eec534760e
commit 89b17ea2b2
1406 changed files with 38483 additions and 3 deletions
+64
View File
@@ -0,0 +1,64 @@
# Использовать входящий X-Forwarded-Port, если установлено, иначе по умолчанию — 8762.
map $http_x_forwarded_port $final_port {
default $http_x_forwarded_port;
"" 8762;
}
map $http_x_forwarded_proto $final_proto {
default $http_x_forwarded_proto;
"" $scheme;
}
server {
listen 8762;
# FILE_SIZE_LIMIT — байты в Plane env; nginx хочет размеры m/g.
# 52428800 байт ≈ 50м
client_max_body_size 50m;
port_in_redirect off;
absolute_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $final_proto;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $final_port;
location /spaces/ {
proxy_pass http://plane_space_1:3000;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
location /god-mode/ {
proxy_pass http://plane_admin_1:3000;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
location /live/ {
proxy_pass http://plane_live_1:3000;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
location /api/ {
proxy_pass http://plane_api_1:8000;
}
location /auth/ {
proxy_pass http://plane_api_1:8000;
}
location /uploads {
proxy_pass http://plane-minio-1:9000;
}
location / {
proxy_pass http://plane_web_1:3000;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
View File
View File
View File
View File
+39
View File
@@ -0,0 +1,39 @@
manifestVersion: 1.1
id: plane
category: files
name: Plane
version: "1.3.0"
tagline: Современное управление проектами для всех команд
description: >-
Meet Plane — инструмент управления проектами с открытым исходным кодом, позволяющий отслеживать проблемы, запускать циклы спринтов и управлять дорожными картами продукта без хаоса, связанного с управлением самим инструментом. 🧘‍♀️
🌟 Особенности
- Проблемы Эффективно создавайте задачи и управляйте ими с помощью надежного редактора форматированного текста, поддерживающего загрузку файлов. Улучшите организацию и отслеживание, добавляя дочерние свойства и ссылаясь на связанные проблемы.
- Cycles Поддерживайте темп своей команды с помощью Cycles. Легко отслеживайте прогресс с помощью диаграмм сгорания и других полезных инструментов.
- Модули Упрощайте сложные проекты, разделяя их на более мелкие, управляемые модули.
- Представления Настройте свой рабочий процесс, создав фильтры для отображения только наиболее актуальных проблем. Сохраняйте и делитесь этими взглядами с легкостью.
- Страницы Сохраняйте и систематизируйте идеи с помощью Plane Pages с возможностями ИИ и редактором форматированного текста. Форматируйте текст, вставляйте изображения, добавляйте гиперссылки или преобразуйте свои заметки в полезные элементы.
- Аналитика Получите доступ к аналитике в реальном времени по всем данным вашего самолета. Визуализируйте тенденции, устраняйте препятствия и продвигайте свои проекты вперед.
Доступ к панели администратора Plane можно получить по адресу `umbrel.local:8762/god-mode`.
developer: Plane Software Inc.
website: http://plane.so/
repo: https://github.com/makeplane/plane
support: https://github.com/makeplane/plane/issues
dependencies: []
port: 8762
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
- 4.jpg
- 5.jpg
path: ""
defaultUsername: ""
defaultPassword: ""
releaseNotes: ""
torOnly: false
submitter: al-lac
submission: https://github.com/getumbrel/dfwebos-apps/pull/4126
+222
View File
@@ -0,0 +1,222 @@
version: "3.7"
x-environment: &env
# ---- Внешние URL и порты ----
NGINX_PORT: 8762
LISTEN_HTTP_PORT: 8762
# ---- Имя сегмента, используемое внешним интерфейсом для путей /uploads ----
BUCKET_NAME: uploads
# ---- API Рабочие ----
GUNICORN_WORKERS: 2
# ---- База данных ----
POSTGRES_DB: plane
POSTGRES_USER: plane
POSTGRES_PASSWORD: dfwebosplane
DATABASE_URL: postgresql://plane:umbrelplane@plane_db_1:5432/plane
# ---- Кэш/брокер ----
REDIS_URL: redis://plane_redis_1:6379/0
RABBITMQ_DEFAULT_USER: plane
RABBITMQ_DEFAULT_PASS: dfwebosplane
RABBITMQ_DEFAULT_VHOST: plane
CELERY_BROKER_URL: amqp://plane:umbrelplane@plane_rabbitmq_1:5672/plane
# ---- Объектное хранилище (MinIO; S3-совместимое) ----
USE_MINIO: 1
AWS_ACCESS_KEY_ID: dfwebos
AWS_SECRET_ACCESS_KEY: $APP_PASSWORD
AWS_S3_ENDPOINT_URL: http://plane-minio-1:9000
AWS_S3_BUCKET_NAME: uploads
FILE_SIZE_LIMIT: 52428800 # 50 MB
MINIO_ENDPOINT_SSL: 0
MINIO_ROOT_USER: dfwebos
MINIO_ROOT_PASSWORD: $APP_PASSWORD
# ---- Джанго/приложение ----
SECRET_KEY: $APP_SEED
LIVE_SERVER_SECRET_KEY: $APP_SEED
# необязательно, но часто помогает за прокси
USE_X_FORWARDED_HOST: 1
SECURE_SSL_REDIRECT: 0
SESSION_COOKIE_SECURE: 0
CSRF_COOKIE_SECURE: 0
services:
app_proxy:
environment:
APP_HOST: plane_nginx_1
APP_PORT: 8762
PROXY_AUTH_ADD: "false"
nginx:
image: nginx:alpine3.23@sha256:5616878291a2eed594aee8db4dade5878cf7edcb475e59193904b198d9b830de
restart: on-failure
volumes:
- ${APP_DATA_DIR}/config/nginx.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- web
db:
image: postgres:17.9-alpine@sha256:778d0b486d6daa02b77434d0358ec57a1b21fd8b6d22ac2eef56a33e816928f6
user: "1000:1000"
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
volumes:
- ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
interval: 10s
timeout: 5s
retries: 10
redis:
image: valkey/valkey:7.2.12-alpine@sha256:d0809f1d763f9fc3d77cd27e7c0393b1b0d69b6ad9269f932328b4793a620c78
restart: on-failure
volumes:
- ${APP_DATA_DIR}/data/redis:/data
rabbitmq:
image: rabbitmq:3.13.7-management-alpine@sha256:0c64ec4fc5596406d755dcca75e8a3b618192cc5fb69f8f0340f06290b1cc08c
user: "1000:1000"
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
volumes:
- ${APP_DATA_DIR}/data/rabbitmq:/var/lib/rabbitmq
minio:
image: alpine/minio:RELEASE.2025-10-15T17-29-55Z@sha256:cf23643a6cf9ce159c57643ceb88279e431262282428c9e0bf3a7ef1a97e84b4
user: "1000:1000"
restart: on-failure
command: server /export --console-address ":8763"
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
volumes:
- ${APP_DATA_DIR}/data/uploads:/export
ports:
- "8763:8763"
# не удается подключиться, если имя содержит подчеркивание
container_name: plane-minio-1
api:
image: makeplane/plane-backend:v1.3.0@sha256:60fb33fa75b63594c1b0bb62b9e50e05f03bb0e46ef384c9eec177f2fb1aaf02
user: "1000:1000"
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
rabbitmq:
condition: service_started
worker:
image: makeplane/plane-backend:v1.3.0@sha256:60fb33fa75b63594c1b0bb62b9e50e05f03bb0e46ef384c9eec177f2fb1aaf02
user: "1000:1000"
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
depends_on:
api:
condition: service_started
redis:
condition: service_started
rabbitmq:
condition: service_started
command: ["sh","-c","celery -A plane worker --loglevel=info"]
beat-worker:
image: makeplane/plane-backend:v1.3.0@sha256:60fb33fa75b63594c1b0bb62b9e50e05f03bb0e46ef384c9eec177f2fb1aaf02
user: "1000:1000"
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
depends_on:
api:
condition: service_started
redis:
condition: service_started
rabbitmq:
condition: service_started
migrator:
condition: service_completed_successfully
command: ["sh","-c","celery -A plane beat --loglevel=info"]
migrator:
image: makeplane/plane-backend:v1.3.0@sha256:60fb33fa75b63594c1b0bb62b9e50e05f03bb0e46ef384c9eec177f2fb1aaf02
user: "1000:1000"
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
depends_on:
db:
condition: service_healthy
command: ["sh","-c","python manage.py wait_for_db && python manage.py migrate"]
web:
image: makeplane/plane-frontend:v1.3.0@sha256:5116ac06c2b5f8cc6b0dfd7638ce787b44302527dd3fa2b3e6889e52c4aff3d1
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
depends_on:
- api
live:
image: makeplane/plane-live:v1.3.0@sha256:81ff136509a3069766c27c9f3489db7bfe37af8a8eab8869ee17ab948eeb83c3
user: "1000:1000"
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
depends_on:
- api
space:
image: makeplane/plane-space:v1.3.0@sha256:0964d53de83a7f2bcb9418dc157f3ede566a6ddad0774d8d2b10cd931b96fcea
user: "1000:1000"
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
depends_on:
- api
healthcheck:
test: ["CMD-SHELL", "node -e \"require('http').get('http://127.0.0.1:3000/', (r) => process.exit(r.statusCode < 500 ? 0 : 1)).on('error', () => process.exit(1))\""]
interval: 30s
timeout: 5s
start_period: 10s
retries: 3
admin:
image: makeplane/plane-admin:v1.3.0@sha256:dd83ae5d61d592d0877e4ddda9eb32a3828f8b51d8efbc307806c34b9a48c0a2
restart: on-failure
environment:
<<: *env
env_file:
- ${APP_DATA_DIR}/settings.env
depends_on:
- api
+101
View File
@@ -0,0 +1,101 @@
#!/usr/bin/env bash
set -euo pipefail
# Этот сценарий проверяет файл среды на наличие значений-заполнителей и заменяет их системными переменными.
APP_DIR="$(readlink -f "$(dirname "${BASH_SOURCE[0]}")/..")"
APP_DATA_DIR="$APP_DIR/data"
DESIRED_OWNER="1000:1000"
ENV_FILE="$APP_DIR/settings.env"
# Проверьте, существует ли файл
if [ ! -f "$ENV_FILE" ]; then
echo "Error: Environment file not found at $ENV_FILE"
exit 1
fi
# Проверьте, установлено ли значение WEB_URL на "changeme".
if grep -Eq '^WEB_URL= *changeme$' "$ENV_FILE"; then
echo "Placeholder value for WEB_URL detected. Setting from DEVICE_DOMAIN_NAME..."
# Замените заполнитель доменным URL.
sed -i -E 's|^WEB_URL= *changeme$|WEB_URL="http://'"${DEVICE_DOMAIN_NAME}"':8762"|' "$ENV_FILE"
echo "Updated WEB_URL in $ENV_FILE"
else
echo "WEB_URL is already set. No changes made."
fi
# Проверьте, установлено ли значение API_BASE_URL на "changeme".
if grep -Eq '^API_BASE_URL= *changeme$' "$ENV_FILE"; then
echo "Placeholder value for API_BASE_URL detected. Setting from DEVICE_DOMAIN_NAME..."
# Замените заполнитель доменным URL.
sed -i -E 's|^API_BASE_URL= *changeme$|API_BASE_URL="http://'"${DEVICE_DOMAIN_NAME}"':8762"|' "$ENV_FILE"
echo "Updated API_BASE_URL in $ENV_FILE"
else
echo "API_BASE_URL is already set. No changes made."
fi
# Проверьте, установлено ли значение APP_DOMAIN на "changeme".
if grep -Eq '^APP_DOMAIN= *changeme$' "$ENV_FILE"; then
echo "Placeholder value for APP_DOMAIN detected. Setting from DEVICE_DOMAIN_NAME..."
# Замените заполнитель доменом
sed -i -E 's|^APP_DOMAIN= *changeme$|APP_DOMAIN="'"${DEVICE_DOMAIN_NAME}"':8762"|' "$ENV_FILE"
echo "Updated APP_DOMAIN in $ENV_FILE"
else
echo "APP_DOMAIN is already set. No changes made."
fi
# Проверьте, установлено ли значение ALLOWED_HOSTS на "changeme".
if grep -Eq '^ALLOWED_HOSTS= *changeme$' "$ENV_FILE"; then
echo "Placeholder value for ALLOWED_HOSTS detected. Setting from DEVICE_DOMAIN_NAME..."
# Замените заполнитель доменом
sed -i -E 's|^ALLOWED_HOSTS= *changeme$|ALLOWED_HOSTS="'"${DEVICE_DOMAIN_NAME}"'"|' "$ENV_FILE"
echo "Updated ALLOWED_HOSTS in $ENV_FILE"
else
echo "ALLOWED_HOSTS is already set. No changes made."
fi
# Проверьте, установлено ли значение CORS_ALLOWED_ORIGINS на "changeme".
if grep -Eq '^CORS_ALLOWED_ORIGINS= *changeme$' "$ENV_FILE"; then
echo "Placeholder value for CORS_ALLOWED_ORIGINS detected. Setting from DEVICE_DOMAIN_NAME..."
# Замените заполнитель источником на основе домена.
sed -i -E 's|^CORS_ALLOWED_ORIGINS= *changeme$|CORS_ALLOWED_ORIGINS="http://'"${DEVICE_DOMAIN_NAME}"':8762,http://'"${DEVICE_DOMAIN_NAME}"'"|' "$ENV_FILE"
echo "Updated CORS_ALLOWED_ORIGINS in $ENV_FILE"
else
echo "CORS_ALLOWED_ORIGINS is already set. No changes made."
fi
# Проверьте, установлено ли значение CSRF_TRUSTED_ORIGINS на "changeme".
if grep -Eq '^CSRF_TRUSTED_ORIGINS= *changeme$' "$ENV_FILE"; then
echo "Placeholder value for CSRF_TRUSTED_ORIGINS detected. Setting from DEVICE_DOMAIN_NAME..."
# Замените заполнитель источником на основе домена.
sed -i -E 's|^CSRF_TRUSTED_ORIGINS= *changeme$|CSRF_TRUSTED_ORIGINS="http://'"${DEVICE_DOMAIN_NAME}"':8762,http://'"${DEVICE_DOMAIN_NAME}"'"|' "$ENV_FILE"
echo "Updated CSRF_TRUSTED_ORIGINS in $ENV_FILE"
else
echo "CSRF_TRUSTED_ORIGINS is already set. No changes made."
fi
# Проверьте, установлено ли значение NGINX_HOST на "changeme".
if grep -Eq '^NGINX_HOST= *changeme$' "$ENV_FILE"; then
echo "Placeholder value for NGINX_HOST detected. Setting from DEVICE_DOMAIN_NAME..."
# Замените заполнитель доменом
sed -i -E 's|^NGINX_HOST= *changeme$|NGINX_HOST="'"${DEVICE_DOMAIN_NAME}"'"|' "$ENV_FILE"
echo "Updated NGINX_HOST in $ENV_FILE"
else
echo "NGINX_HOST is already set. No changes made."
fi
exit 0
+10
View File
@@ -0,0 +1,10 @@
WEB_URL=changeme
API_BASE_URL=changeme
APP_DOMAIN=changeme
ALLOWED_HOSTS=changeme
CORS_ALLOWED_ORIGINS=changeme
CSRF_TRUSTED_ORIGINS=changeme
NGINX_HOST=changeme
APP_PROTOCOL=http
ENABLE_SIGNUP=0
DEBUG=0