sapic是一个基于Flask的Web自建图床,默认存储在本地, 内置支持又拍云、七牛云、阿里云OSS、腾讯云COS、S3等对象存储,支持GitHub、Gitee(码云)

系统:debian(根据自己喜好)

运行环境示例:docker、redis、nginx(配置域名)

1.启动命令:

 docker run -d --name sapic --net=host --restart=always \
    -e sapic_redis_url=redis://:[email protected]:6379/db \
    -p 127.0.0.1:8000:9514 \
    -v /data/picbed/static:/picbed/static \
    -v /data/picbed:/picbed/static/upload \
    staugur/sapic

默认端口为9514如端口被占用可自行映射端口,如不需要映射端口可删除-p开头的一行即可。端口映射可参考:

屏蔽docker run时使用映射功能暴露的端口

以上述命令为例,防火墙放行8000端口ufw allow 8000/tcp即可通过ip:port形式访问效果如图

请输入图片描述

2.创建个人登陆账号和密码:

默认设置为存储在本地不允许游客上传图片,用下面的命令创建管理员账号过后可进行管理后台如修改存储位置重命名文件、开放注册、smtp配置等操作。

docker exec -i sapic flask sa create -u 管理员账号 -p 密码 --isAdmin

3.nginx反代配置域名

使用ip:port形式访问图床显然是不安全的,可能会受到ddos攻击和数据泄露等,使用nginx反代可以让我们的ip藏在配置了cdn的域名后面,较为安全。下面介绍使用lnmp反代的方法

(1)创建vhost

root@debian:~# lnmp vhost add
+-------------------------------------------+
|    Manager for LNMP, Written by Licess    |
+-------------------------------------------+
|              https://lnmp.org             |
+-------------------------------------------+
Please enter domain(example: www.lnmp.org): domain.org
 Your domain: demo.sspanel.org
Enter more domain name(example: lnmp.org *.lnmp.org): 
Please enter the directory for the domain: sapic
Default directory: /home/wwwroot/domain.org: /home/wwwroot/sapic
Virtual Host Directory: /home/wwwroot/sapic
Allow Rewrite rule? (y/n) n
You choose rewrite: none
Enable PHP Pathinfo? (y/n) n
Disable pathinfo.
Allow access log? (y/n) n
Disable access log.
Create database and MySQL user with same name (y/n) n
Add SSL Certificate (y/n) y
1: Use your own SSL Certificate and Key
2: Use Let's Encrypt to create SSL Certificate and Key
3: Use BuyPass to create SSL Certificate and Key
4: Use ZeroSSL to create SSL Certificate and Key
Enter 1, 2, 3 or 4: 2
It will be processed automatically.

Press any key to start create virtul host...

进入目录 /usr/local/nginx/conf/vhost ,找到你的域名编辑配置文件

强制 https 。将第一段 server 替换为

server
    {
        listen 80;
    listen 443 ssl http2;
        server_name domain.org ;
        return 301 https://$server_name$request_uri;
    }

反代本地8000端口新增location:

#PROXY-START/

location ^~ /
{
    proxy_pass http://127.0.0.1:8000;
    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 REMOTE-HOST $remote_addr;
    add_header X-Cache $upstream_cache_status;
    set $static_fileISh9ZyzP 1;
    if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
    {
        set $static_fileISh9ZyzP 1;
        expires 12h;
        }
    if ( $static_fileISh9ZyzP = 0 )
    {
    add_header Cache-Control no-cache;
    }
}

#PROXY-END/

防盗链配置可参考:

Nginx配置防跨站与防盗链(referer)使用正则

到此就配置完毕,可通过域名形式访问自建图床,后续升级只需删除docker容器拉取最新的镜像并重新运行开头的脚本。

最后修改:2022 年 05 月 10 日
如果觉得我的文章对你有用,请随意赞赏