FileCodeBox文件快递柜搭建教程

admin
2023-11-05 / 0 评论 / 277 阅读 / 正在检测是否收录...

匿名口令分享文本,文件,像拿快递一样取文件

文件快递柜是一个开源项目,开源地址

预览

例站:https://share.lanol.cn

暗黑模式

寄文件 寄文件

寄件

寄文件 寄文本
寄文本

主要特色

  • [x] 轻量简洁:Fastapi+Sqlite3+Vue2+ElementUI
  • [x] 轻松上传:复制粘贴,拖拽选择
  • [x] 多种类型:文本,文件
  • [x] 防止爆破:错误次数限制
  • [x] 防止滥用:IP限制上传次数
  • [x] 口令分享:随机口令,存取文件,自定义次数以及有效期
  • [x] 国际化:支持中文和英文
  • [x] 匿名分享:无需注册,无需登录
  • [x] 管理面板:查看所有文件,删除文件
  • [x] 一键部署:docker一键部署
  • [x] 自由拓展:S3协议、本地文件流,可根据需求在storage文件中新增存储引擎
  • [x] 简单明了:适合新手练手项目
  • [x] 终端下载:wget https://share.lanol.cn/share/select?code=83432

部署方式

一、Docker一键部署

1.6版本AMD

docker run -d --restart=always -p 12345:12345 -v /opt/FileCodeBox/:/app/data --name filecodebox lanol/filecodebox:latest

1.6版本ARM

docker run -d --restart=always -p 12345:12345 -v /opt/FileCodeBox/:/app/data --name filecodebox lanol/filecodebox:arm

1.6版本注意

这一版改变比较大,如果出现问题可以尝试清空/opt/FileCodeBox目录,有问题欢迎反馈留言
注意,如果是第一次安装,请查看docker日志获取初始密码和后台地址,参考指令
后台本地文件列表,需要将服务器文件移动至目录/opt/FileCodeBox/data/locals,这样就可以显示了。

docker logs filecodebox

更新方式

// 更新
docker pull lanol/filecodebox:beta
// 停止容器并删除
docker stop filecodebox && docker rm filecodebox
// 重新运行容器
docker run -d --restart=always -p 12345:12345 -v /opt/FileCodeBox/:/app/data --name filecodebox lanol/filecodebox:latest

2.0版本,开发中(AMD & ARM)

默认信息:

后端地址:/#/admin

后台密码:FileCodeBox2023

一键安装

docker run -d --restart=always -p 12345:12345 -v /opt/FileCodeBox/:/app/data --name filecodebox lanol/filecodebox:beta

一键更新

docker pull lanol/filecodebox:beta && docker stop filecodebox && docker rm filecodebox && docker run -d --restart=always -p 12345:12345 -v /opt/FileCodeBox/:/app/data --name filecodebox lanol/filecodebox:beta

二、宝塔部署

环境准备

  • [x] Centos7
  • [x] 宝塔面板

1. 安装Python项目管理器

❗️❗️❗️ 注意:必须安装2.0版本,否则必失败

img

img

2. 安装Python3.9.10

点击设置->版本管理->Python版本->3.9.10[未安装]->安装版本

img

安装完成

img

3. 下载源码

GitHub地址:https://github.com/vastsa/FileCodeBox

选最新的版本就行

img

复制链接地址

img

回到宝塔,新建一个空白目录FileCodeBox

img

进入目录,粘贴远程下载源码

img

解压

img

4. 添加项目

打开Python项目管理器->添加项目

img

启动成功

img

5. 查看系统日志,获取初始化信息

img

根据信息进入后台

image.png

6、宝塔反向代理

域名解析到ip之后,直接新增静态空网站

img

先申请ssl证书,因为反代之后就无法申请了,需关闭反代

image.png

添加反向代理

image.png

7、配置修改

如果有端口冲突,请找到根目录下的 /data/.env

如果需要修改配置,可以将该文件放在/opt/FileCodeBox/目录下,并命名为.env,然后重启容器即可。 如果不是Docker,则需要在项目同目录下新建一个data文件夹,然后在创建.env文件

# 端口
PORT=12345
# Sqlite数据库文件
DATABASE_URL=sqlite+aiosqlite:///database.db
# 静态文件夹
DATA_ROOT=./static
# 静态文件夹URL
STATIC_URL=/static
# 开启上传
ENABLE_UPLOAD=True
# 错误次数
ERROR_COUNT=5
# 错误限制分钟数
ERROR_MINUTE=10
# 上传次数
UPLOAD_COUNT=60
# 上传限制分钟数
UPLOAD_MINUTE=1
# 删除过期文件的间隔(分钟)
DELETE_EXPIRE_FILES_INTERVAL=10
# 管理地址
ADMIN_ADDRESS=admin
# 管理密码
ADMIN_PASSWORD=admin
# 文件大小限制,默认10MB
FILE_SIZE_LIMIT=10
# 网站标题
TITLE=文件快递柜
# 网站描述
DESCRIPTION=FileCodeBox,文件快递柜,口令传送箱,匿名口令分享文本,文件,图片,视频,音频,压缩包等文件
# 网站关键词
KEYWORDS=FileCodeBox,文件快递柜,口令传送箱,匿名口令分享文本,文件,图片,视频,音频,压缩包等文件
# 存储引擎
STORAGE_ENGINE=filesystem
# 如果使用阿里云OSS服务的话需要额外创建如下参数:
# 阿里云账号AccessKey
KeyId=阿里云账号AccessKey
# 阿里云账号AccessKeySecret
KeySecret=阿里云账号AccessKeySecret
# 阿里云OSS Bucket的地域节点
OSS_ENDPOINT=阿里云OSS Bucket的地域节点
# 阿里云OSS Bucket的BucketName
BUCKET_NAME=阿里云OSS Bucket的BucketName

S3协议的对象存储配置

❗️❗️❗️ 注意:必须配置SSL证书,否则无法下载

有关V2.0bata版,作者几乎没有任何说明,也没有相关的教程,也没有说bata版是什么意思,甚至都不在GitHub的releases列表,但是bata版支持S3协议的对象存储以及onedrive

雨云ROS是支持S3协议的对象存储,目前(2023年10月18日)正在免费公测

注意:API端点前要加“https://,末尾不能加“/配置完成后需要重启FileCode项目

OneDrive作为存储的配置方法

仅支持工作或学校账户,并且需要有管理员权限以授权API

1. 需要配置的参数

file_storage=onedrive
onedrive_domain=XXXXXX
onedrive_client_id=XXXXXX-XXXXXX-XXXXXX-XXXXXX
onedrive_username=XXXXXX@XXXXXX
onedrive_password=XXXXXX

onedrive_usernameonedrive_password是你的账户名(邮箱)和密码,另外两个参数需要在微软Azure门户中注册应用后获取。

2. 应用注册

  1. 登录https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade,鼠标置于右上角账号处,浮窗将显示的即为onedrive_domain的值。
    onedrive_domain
  2. 点击左上角的+新注册,输入名称,

    • 受支持的帐户类型:选择任何组织目录(任何 Azure AD 目录 - 多租户)中的帐户和个人 Microsoft 帐户(例如,Skype、Xbox)
    • 重定向 URI (可选):选择Web,并输入http://localhost
  3. 完成注册后进入概述页面,在概要中找到应用程序(客户端)ID,即为onedrive_client_id的值。
    onedrive_client_id
  4. 此时还需要配置允许公共客户端流和API权限

    • 在左侧选择身份验证,找到允许的客户端流,选择,并点击保存
      允许的客户端流
    • 在左侧选择API权限,点击+添加权限,选择Microsoft Graph->委托的权限,并勾选下述权限:openid、Files中所有权限、User.Read,如下图所示。最后点击下方的添加权限
      添加权限
    • 最后点击授予管理员同意,并点击,最终状态变为已授予
      授予管理员同意

3. 使用下述代码测试是否配置成功

安装依赖:pip install Office365-REST-Python-Client

# common.py
import msal
domain = 'XXXXXX'
client_id = 'XXXXXX'
username = 'XXXXXX'
password = 'XXXXXX'

def acquire_token_pwd():
    authority_url = f'https://login.microsoftonline.com/{domain}'
    app = msal.PublicClientApplication(
        authority=authority_url,
        client_id=client_id
    )
    result = app.acquire_token_by_username_password(
        username=username,
        password=password,
        scopes=['https://graph.microsoft.com/.default']
    )
    return result

测试登录,如果成功打印出账户名,说明配置成功。

from common import acquire_token_pwd

from office365.graph_client import GraphClient
try:
    client = GraphClient(acquire_token_pwd)
    me = client.me.get().execute_query()
    print(me.user_principal_name)
except Exception as e:
    print(e)

测试文件上传

import os
from office365.graph_client import GraphClient
from common import acquire_token_pwd

remote_path = 'tmp'
local_path = '.tmp/1689843925000.png'

def convert_link_to_download_link(link):
    import re
    p1 = re.search(r'https:\/\/(.+)\.sharepoint\.com', link).group(1)
    p2 = re.search(r'personal\/(.+)\/', link).group(1)
    p3 = re.search(rf'{p2}\/(.+)', link).group(1)
    return f'https://{p1}.sharepoint.com/personal/{p2}/_layouts/52/download.aspx?share={p3}'

client = GraphClient(acquire_token_pwd)
folder = client.me.drive.root.get_by_path(remote_path)
# 1. upload
file = folder.upload_file(local_path).execute_query()
print(f'File {file.web_url} has been uploaded')
# 2. create sharing link
remote_file = folder.get_by_path(os.path.basename(local_path))
permission = remote_file.create_link("view", "anonymous").execute_query()
print(f"sharing link: {convert_link_to_download_link(permission.link.webUrl)}")

测试文件下载

import os
from office365.graph_client import GraphClient
from common import acquire_token_pwd

remote_path = 'tmp/1689843925000.png'
local_path = '.tmp'
if not os.path.exists(local_path):
    os.makedirs(local_path)

client = GraphClient(acquire_token_pwd)
remote_file = client.me.drive.root.get_by_path(remote_path).get().execute_query()
with open(os.path.join(local_path, os.path.basename(remote_path)), 'wb') as local_file:
    remote_file.download(local_file).execute_query()
    print(f'{remote_file.name} has been downloaded into {local_file.name}')

测试删除文件

from office365.graph_client import GraphClient
from common import acquire_token_pwd

remote_path = 'tmp/1689843925000.png'

client = GraphClient(acquire_token_pwd)
file = client.me.drive.root.get_by_path(remote_path)
file.delete_object().execute_query()
0

评论

博主关闭了所有页面的评论