{"id":13455409,"url":"https://github.com/sapicd/sapic","last_synced_at":"2026-01-31T19:03:42.065Z","repository":{"id":38615329,"uuid":"229024929","full_name":"sapicd/sapic","owner":"sapicd","description":"sapic(picbed) - 基于Flask的Web自建图床，可存储到又拍云、七牛云、阿里云OSS、腾讯云COS、GitHub、Gitee、S3等，支持自定义扩展。","archived":false,"fork":false,"pushed_at":"2025-08-18T12:47:03.000Z","size":36345,"stargazers_count":452,"open_issues_count":0,"forks_count":56,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-08-18T14:33:14.663Z","etag":null,"topics":["flask","layui","picbed","python","sapic"],"latest_commit_sha":null,"homepage":"https://sapic.rtfd.vip","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sapicd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-12-19T09:53:35.000Z","updated_at":"2025-08-18T12:42:57.000Z","dependencies_parsed_at":"2023-02-09T16:00:51.951Z","dependency_job_id":"da615ef7-6b2c-478d-b64c-2b469a62ed5f","html_url":"https://github.com/sapicd/sapic","commit_stats":null,"previous_names":[],"tags_count":36,"template":false,"template_full_name":null,"purl":"pkg:github/sapicd/sapic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sapicd%2Fsapic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sapicd%2Fsapic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sapicd%2Fsapic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sapicd%2Fsapic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sapicd","download_url":"https://codeload.github.com/sapicd/sapic/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sapicd%2Fsapic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28950288,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T18:30:42.805Z","status":"ssl_error","status_checked_at":"2026-01-31T18:30:19.593Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flask","layui","picbed","python","sapic"],"created_at":"2024-07-31T08:01:05.093Z","updated_at":"2026-01-31T19:03:42.059Z","avatar_url":"https://github.com/sapicd.png","language":"HTML","readme":"# sapic\n\n即picbed，基于Flask的Web自建图床，\n支持存储到本地、又拍云、七牛云、阿里云OSS、腾讯云COS、GitHub、Gitee(码云)等，\n支持第三方扩展存储到[AWS S3](https://aws.amazon.com/s3/)、[sm.ms](https://sm.ms/)、[superbed聚合图床](https://www.superbed.cn)等。\n\n[![Actions Status: ci](https://github.com/sapicd/sapic/workflows/ci/badge.svg)](https://github.com/sapicd/sapic/actions?query=workflow%3A%22build+and+test%22)\n[![codecov](https://codecov.io/gh/sapicd/sapic/branch/master/graph/badge.svg)](https://codecov.io/gh/sapicd/sapic)\n![Last Release](https://img.shields.io/github/release/sapicd/sapic.svg?style=flat-square)\n\n## 手动部署\n\n1. 要求： Python3.9+ 和 Redis(建议v4.0+)\n\n2. 下载： `git clone https://github.com/sapicd/sapic \u0026\u0026 cd sapic`\n\n3. 依赖： `pip install -r requirements/all.txt` # 也可以参考详情文档如何按需安装依赖包\n\n4. 配置：\n\n    src目录下的config.py即配置文件，它会加载中 `.cfg` 文件读取配置信息，\n    无法找到时加载环境变量，最后使用默认值，**必需设置sapic_redis_url**\n\n    所以可以把配置项写到 `.bash_profile` 或 `.bashrc` 此类文件中在登录时加载，\n    也可以写入到 /path/to/sapic/src/ 下的 **.cfg** 文件里，这是推荐的方式，\n    它不会被提交到仓库，格式是k=v，每行一条，注意：v是所见即所得！\n\n    比如：`sapic_redis_url=redis://localhost`\n\n5. 启动：\n\n    ```bash\n    $ cd /path/to/sapic/src/\n\n    // 首先创建一个管理员账号 -h/--help显示帮助\n    $ flask sa create -u USER -p PASSWORD --isAdmin\n\n    // 如果更新了版本，注意执行命令迁移数据，详见文档：部署安装-升级部分\n    // flask sa upgrade --help\n\n    // 开发环境启动\n    $ make dev\n\n    // 正式环境，若需前台启动，将start换成run即可；其他支持stop、reload、restart、status\n    $ make start 或 sh online_gunicorn.sh start\n    ```\n\n6. Nginx:\n\n    ```nginx\n    // 默认配置下，sapic启动监听127.0.0.1:9514，nginx配置示例：\n    server {\n        listen 80;\n        server_name your-sapic.domain.name;\n        charset utf-8;\n        client_max_body_size 20M;\n        location ~ ^\\/static\\/.*$ {\n            root /path/to/sapic/src/;\n        }\n        location / {\n            proxy_pass http://127.0.0.1:9514;\n            proxy_set_header Host $host;\n            proxy_set_header X-Real-IP $remote_addr;\n            proxy_set_header X-Forwarded-Proto $scheme;\n            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        }\n    }\n    ```\n\n## 使用Docker部署\n\n- 手动构建镜像\n\n  源码中已经编写了Dockerfile文件，可以藉此构建镜像。\n\n  ```bash\n  git clone https://github.com/sapicd/sapic \u0026\u0026 cd sapic\n  docker build -t stagur/sapic .\n  ```\n\n- 使用已上传镜像\n\n  已设置CI实现提交代码自动构建并推送到官方Docker仓库中，直接pull即可（amd/arm）：\n\n  ```bash\n  docker pull staugur/sapic  # 或者加上tag拉取某稳定版本的镜像\n  ```\n\n- 启动镜像\n\n  ```bash\n  $ docker run -d --name sapic --restart=always --net=host \\\n      -e sapic_redis_url=\"Your Redis URL\" \\\n      -e 其他配置=值 \\\n      staugur/sapic\n  $ docker exec -i sapic flask sa create -u 管理员账号 -p 密码 --isAdmin\n  ```\n\n  使用 *docker run* 启动镜像的命令仅供参考，sapic所用配置可以使用-e设置\n  环境变量，必需项sapic_redis_url，其他请参考文档。\n\n  此单一启动镜像方式不包括redis，所以还需要提前准备好redis才行。\n\n------\n\n如果有docker-compose的使用经验，可以使用命令 ``docker-compose up -d``\n在后台快速启动项目，它会直接启动一个redis、并构建启动应用，redis开启AOF，\n宿主机映射9514端口以供外部访问，且使用数据卷挂载静态资源、挂载上传目录和redis数据目录。\n\n使用前，创建用户：\n\n```bash\ncd /path/to/sapic\ndocker-compose exec webapp flask sa create -u 管理员账号 -p 密码 --isAdmin\n```\n\n-------\n\n- 镜像推送到 `Docker Hub`，latest 标签是 master 分支，dev 标签是 dev 分支，其他标签是已发布的版本。\n\n- docker-compose.yml仅为简单定义，可以自行修改，比如加上nginx、redis挂载数据(/data)。\n\n## 文档\n\n### 客户端上传示例\n\n- [使用PicGo上传到自定义的 sapic 图床](https://sapic.rtfd.vip/zh-cn/latest/usage.html#picbed-upload-picgo)\n\n- [使用uPic上传到自定义的 sapic 图床](https://sapic.rtfd.vip/zh-cn/latest/usage.html#picbed-upload-upic)\n\n- [作为自定义命令在使用Typora时上传图片到sapic](https://sapic.rtfd.vip/zh-cn/latest/cli.html#picbed-upload-typora)\n\n- [Windows系统的图片文件添加右键菜单](https://sapic.rtfd.vip/zh-cn/latest/cli.html#picbed-upload-rightmenu-windows)\n\n- [macOS系统的图片文件添加右键菜单](https://sapic.rtfd.vip/zh-cn/latest/cli.html#picbed-upload-rightmenu-macos)\n\n详细文档请访问：[Sapic Docs](https://sapic.rtfd.vip/zh-cn/latest)\n\n## 演示站\n\nhttp://demo.sapicd.com\n\n测试账号及密码：demo 123456（请勿修改）\n\n对外服务，为防止乱传已关闭匿名上传，随意注册，但不可用于非测试用途，图片保留删除权利！\n\n## 预览图\n\n![首页上传](./Snapshot/homepage.png)\n\n![管理我的图片](./Snapshot/pic.png)\n\n![控制台管理员功能](./Snapshot/hook.png)\n\n## Contributing\n\n感谢您的贡献！\n\n关于如何提交issue或pr，请参考 [contributing guidelines](./CONTRIBUTING.md)\n\n感谢以下参与项目的人：\n\n\u003ca href=\"https://github.com/sapicd/sapic/graphs/contributors\"\u003e\n  \u003cimg src=\"https://opencollective.com/sapic/contributors.svg?width=890\u0026button=false\" /\u003e\n\u003c/a\u003e\n\n","funding_links":[],"categories":["HTML"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsapicd%2Fsapic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsapicd%2Fsapic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsapicd%2Fsapic/lists"}