Skip to content

基于Django3.2.7+Vue2+ElementUI的相对比较自动化生成的后台管理系统。借助SimpleUI开源项目对Django原生的Admin后台管理页面进行了二次开发和优化改进而生成的比较现代化的后台管理系统。

License

Notifications You must be signed in to change notification settings

Haoke98/AllKeeper

Repository files navigation

简体中文 | English

基于Django3.2.7+Vue2+ElementUI的相对比较自动化生成的后台管理系统。借助SimpleUI开源项目对Django原生的Admin后台管理页面进行了二次开发和优化改进而生成的比较现代化的后台管理系统。

模块&功能

本项目总共有六大模块组成.其分别是:

万能堡垒

大模块 子模块 微模块 功能 是否已实现
设备管理 通用设备管理 ········ ········
网络设备管理 服务器管理 ········
路由器管理 ········
网络管理 转换器管理 ········ ☑️
网段管理 ········ ········ ✅️
IP地址管理 ········ ········ ✅️
穿透管理 ········ ········ ☑️
服务管理 SSH服务 ········ ········
数据库管理 ········ ········
宝塔管理 ········ ········
ES管理 ········ ········
通用服务管理 ········ ········

资金管理

大模块 子模块 功能 子功能 是否已实现
银行卡管理 ········ ········ ········
信用卡管理 ········ ········ ········
债务管理 ········ ········ ········
流水管理 ········ ········ ········

社工库

大模块 子模块 功能 子功能 是否已实现
基本自然人信息 ········ ········ ········
媒体账号信息 微博 采集 自动采集 ✅️
定时采集 ✅️
指定范围采集 ✅️
统计&分析 数据可视化 ✅️
抖音 ········ ········ ✅️

账号管理

  • 通用账号管理
  • 平台管理

媒体库

  • 媒体存储媒体
  • 基于人脸识别的资源分类

iCloud内容管理

架构实现

graph LR
  Client
  MinIO
  PostgreSQL
  ElasticSearch
  subgraph python
    subgraph Django
      STATICFILES_STORAGE
      DEFAULT_FILE_STORAGE
      subgraph django.db.backends 
        postgresql_psycopg2
      end
    end
    subgraph minio_storage.storage
      MinioMediaStorage
      MinioStaticStorage
    end
    ElasticSearchPyClient
  end
  
  STATICFILES_STORAGE --> MinioStaticStorage
  DEFAULT_FILE_STORAGE --> MinioMediaStorage
  MinioMediaStorage --> MinIO
  MinioStaticStorage--> MinIO
  postgresql_psycopg2 --> PostgreSQL
  MinIO -->|static files| Client
  MinIO -->|media files| Client
  Django -->|API| Client
  Django -->|HTML| Client
  Django -->ElasticSearchPyClient
  ElasticSearchPyClient --> ElasticSearch
Loading
sequenceDiagram
   Client ->> Django: HTTP请求
   Django ->> PostgreSQL: 请求数据
   PostgreSQL ->> Django: 响应数据
   Django ->> ElasticSearch: 请求数据
   ElasticSearch ->> Django: 响应数据
   Django ->> Client: 返回纯HTML✅ / 拒绝❌
   Client ->> MinIO: 请求静态资源
   MinIO ->> Client: 响应静态资源
Loading

核心依赖

1. Django集成式多功能后端框架

Readme Card

2. FFmpeg

为了实现icloud相关视频处理功能需要用到FFmpeg作为核心。

Readme Card

开发计划

  • 实现可离线的端存储和数据同步功能, 实现端到端数据同步功能, 借鉴并参考git的代码合并和冲突解决机制.
  • 修复本地媒体资源管理的预览页面
  • 修复本iCloud媒体资源的预览页面
  • 实现成本管理功能
  • 解决媒体资源模块-文件上传接口中的重复上传同样名文件时出现的版本控制&版本歧义问题.
  • 优化服务用户的列表页面中的展示效果
  • 实现在服务修改页面中管理当前服务对应的用户信息
  • 按功能和模块拆分项目
  • 按服务和终端来拆分项目(逐渐施行前后端分离)
  • webssh地址的设定改成全局的启动参数为其他外部框架和服务的调用提供便利.
  • 引入语言包,实现国际化
  • 把一些公共的数据统一进行管理和更新, 以我们推送, 然后各个用户客户端及时更新的形式, 也就类似于GeoIP的更新, 比如 操作系统镜像, 云托管上信息, 硬件设备型号和牌子, 公网网段, 运营商信息, 手机号归属地查询 .....等等. 开设数据中心, 提供免费服务.以授权的方式提公共数据接口方案, 授权后能够通过我们的接口获取重要的公共数据 (重中之重)
  • 实现一个能够自动绘制网络拓扑图的功能
  • 客户端和服务端之间进行严格划分, 尤其对Web部分上移除一些铭感操作, 该用客户端在双重加密的环境下进行进行敏感操作, 避免浏览器和一些插件随意读取我们的铭感数据.(重中之重)
  • 把那些服务性质的但是单独设计模型重新合并到服务模型中, 然后给出一个特殊操作Dialog, 然后在这个特殊操作的Dialog里通过Vue3渲染或者用后端渲染来实现不同类型服务之间的不同的特殊操作管理页面.
  • 端口映射部分要跟lanproxy做配合,通过接口同步的形式做兼容,这样就能避免多次开发同类功能避免重复工作, 也同时能给用户一个模块化加载部分功能的选择. 初次安装时,如果用户打开端口映射管理页面, 给出一个提示+配置页面, 引导用户安装并部署lanproxy的同时, 引导用户如何配置, 并给出配置表单( 两种方案, 地址+账号密码 / 地址+token , 需要对目前的lanprox也进行相应的改动), 要实现可以绑定多个lanproxy, 有时候使用者会有多个环境有多个lanproxy, 后期希望你自己能够解决不同的lanproxy之间进行打通, 实现分布式和统一管理.
  • 渐进式推进前后端分离化, 提高人机交互体验感和操作便利性, 渐进式删减后端部分的视图功能(后端渲染), 改成接口服务.
  • 服务端实现容器化, 提供 docker 和 k8s 等快速安装和部署方式.

未来期望

🌱 使用教程

先在项目目录下新建一个secret.py文件

_DEBUG = False

DB_BACKEND = 'django.db.backends.postgresql_psycopg2'
# DB_BACKEND = 'django.db.backends.mysql'
DB_HOST = "127.0.0.1"
DB_PORT = 5555
DB_DATABASE = "allkeeper"
DB_USERNAME = "usernage"
DB_PASSWORD = "password"
# 因为是强制HTTPS, 所以最好是使用域名
MINIO_STORAGE_ENDPOINT = '127.0.0.1:9000'
MINIO_STORAGE_ACCESS_KEY = 'MINIO_STORAGE_ACCESS_KEY'
MINIO_STORAGE_SECRET_KEY = 'MINIO_STORAGE_SECRET_KEY'


SECRET_KEY = ''
ADMIN_PATH = ''


SMTP_EMAIL = ""
SMTP_PASSWORD = ""


CSRF_TRUSTED_ORIGINS = ['http:https://keeper.sdm.net', 'http:https://kept.sdm.net', "https://www.nyhc.top"]


ES_USERNAME = ""
ES_PASSWORD = ""
ES_URI = "https://127.0.0.1:9002"
ES_CA = "/usr/etc/http_ca.ctr"


ADMIN_USERNAME = ""
ADMIN_PASSWORD = ""
JWT_SIGNATURE = SECRET_KEY
JWT_ISSUER = ""

再执行以下命令来产生数据库文件

python manage.py makemigrations
python manage.py migrate

再执行以下命令来运行项目即可

# 直接console运行
python manange.py runserver 7000
# 后台运行
nohup python manange.py runserver 7000 > app.log 2>&1 & echo $! > app.pid

Nginx 配置实现媒体文件的缩略图功能

nginx 下载地址 http:https://nginx.org/en/download.html

编译参数:--with-http_image_filter_module

http{
    ...
    server{
        ...
        location /icloud-shortcut {
            video_thumb;
            image_filter resize 100 200;
            image_filter_jpeg_quality 80;
            alias /external/SADAM/icloud/photos;
            autoindex on;
        }
        location /icloud {
            alias /external/SADAM/icloud/photos;
            autoindex on;
        }
        ...
    }
    ...
}

配置系统服务并开启自启动

先创建allkeeper.service文件并复制allkeeper.service.sample的内容

cp allkeeper.service.sample allkeeper.service

再修改内容, 再移到系统服务单位存储目录

vi allkeeper.service
mv allkeeper.service /usr/lib/systemd/system/

加载新加入的服务单位

systemctl daemon-reload

启动服务

systemctl start allkeeper.service

开启开机自启动

systemctl enable allkeeper.service

开启数据库定时备份

1. 首先,创建一个备份脚本(例如:backup_mysql.bat(Windows)或backup_mysql.sh(Linux)),包含以下内容:

Windows脚本(backup_mysql.bat):

@echo off
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a%%b)
set mydatetime=%mydate%_%mytime%
set BackupFile=backup_directory\backup_%mydatetime%.sql
"mysql_install_directory\bin\mysqldump.exe" -u USERNAME -pPASSWORD DATABASE_NAME > %BackupFile%

Linux脚本(backup_mysql.sh):

#!/bin/sh
script_path="$(dirname "$(readlink -f "$0")")"
echo "当前脚本所在路径:$script_path"
backup_dir=${script_path}/backup_sql
mkdir -p $backup_dir
mysqldump -u all_keeper -p 1_nDb9tk0pwa all_keeper > ${backup_dir}/all-keeper_`date +%Y%m%d%H%M%S`.sql

将backup_directory替换为您想存储备份文件的目录

将mysql_install_directory替换为MySQL安装目录

使用真实的数据库用户名代替USERNAME

使用真实的数据库密码代替PASSWORD

使用要备份的数据库名称代替DATABASE_NAME

2. 为脚本设置可执行权限(仅在Linux上需要):

chmod +x backup_mysql.sh

3. 创建一个定时任务(Windows Task Scheduler或Linux的cron):

a) Windows定时任务:

打开任务计划程序 单击"创建基本任务",然后设置触发器(例如:每天、每周等),并选择刚创建的备份脚本作为要执行的操作。

b) Linux的cron任务:

在终端中键入crontab -e以编辑cron配置 添加以下内容(根据实际情况修改):

0 2 * * * /path/to/backup_mysql.sh

这将在每天凌晨2点执行备份任务。请将/path/to替换为脚本的实际路径。

常见问题

问题一:下拉框选择列表获取失败

现在Windows上执行一下命令

python3 manage.py collectstatic

然后执行一下命令

scp -rC /Users/shadikesadamu/Projects/django-admin/public [email protected]:/root/AllKeeper/

问题二:Sqlite版本异常1

异常:django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required (found 3.7.17).

解决方案:

  1. 首先检查确认现有版本:
sqlite3 --version
  1. 其次安装正确版本的sqlite(如报错提示,必须大于等于3.9.0) 从SQLite官网下载最新版本的软件包
wget https://www.sqlite.org/2022/sqlite-autoconf-3400000.tar.gz
tar -xvzf sqlite-autoconf-3400000.tar.gz 
cd sqlite-autoconf-3400000.tar.gz
./configure
make && make install
echo export LD_LIBRARY_PATH="/usr/local/lib">> ~/.bashrc

问题三:Sqlite3版本异常2

异常:django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher

升级了 sqlite 版本(因 django 怕改动太大就没有尝试卸载django重新安装的方法)。 如下,明明版本已经更新成最新了环境变量也加了,软链接指向也是最新了,可运行还是提醒版本过低。

可能是不支持新的版本,最终决定更换sqlite3 为pysqlite3 和 pysqlite3-binary

解决方案:

  1. 安装pysqlite3和pysqlite3-binary
pip install pysqlite3
pip install pysqlite3-binary
  1. 打开文件/usr/local/python3/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py,找到 from sqlite3 import dbapi2 as Database 注释它,添加代码
#from sqlite3 import dbapi2 as Database  #注释它
from pysqlite3 import dbapi2 as Database #新加这段代码

感谢巨人

杰出贡献者

联系我们

  • 如果二次开发或者部署过程中有什么问题,可以随时联系我们。

友情链接

About

基于Django3.2.7+Vue2+ElementUI的相对比较自动化生成的后台管理系统。借助SimpleUI开源项目对Django原生的Admin后台管理页面进行了二次开发和优化改进而生成的比较现代化的后台管理系统。

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published