PrivateBin 是一个极简的开源在线粘贴板,服务器对粘贴数据零知识。数据在浏览器端使用256位AES的伽罗瓦计数器模式进行加密和解密。
本仓库包含创建Docker镜像所需的Dockerfile和资源,预安装了PrivateBin实例,并采用安全的默认配置。镜像基于Docker Hub的Alpine镜像构建,扩展了生成讨论头像所需的GD模块,以及用于提供静态JavaScript库、CSS和图标的Nginx Web服务器。php-fpm和Nginx的所有日志(访问日志和错误日志)均转发到docker logs。
这是一个全能镜像(Docker Hub / GitHub),可与PrivateBin支持的任何存储后端一起使用——基于文件的存储、数据库、Google Cloud或S3存储。我们还为每个后端提供专用镜像:
所有镜像均包含PrivateBin的发行版本,并提供以下标签:
latest:最新推送镜像的别名,通常与nightly相同,但不包含edgenightly:最新发布的PrivateBin版本,基于升级后的Alpine发行版镜像,包含docker镜像仓库的最新变更edge:最新发布的PrivateBin版本,基于升级后的Alpine edge镜像stable:包含最新PrivateBin版本,基于docker镜像git仓库的最新标记发行版——当Alpine发布重要安全修复或Alpine新版本发布时会更新1.5.1:包含PrivateBin 1.5.1版本,基于docker镜像git仓库的最新标记发行版——当Alpine发布重要安全修复或Alpine新版本发布时会更新,与stable相同1.5.1-...:用于选择特定的不可变镜像如果通过拉取自动更新镜像,建议使用stable、nightly或latest。如果希望控制版本和可重现性,或使用编排工具,数字标签可能更合适。edge标签提供未来Alpine发行版中软件的预览,并作为检测这些版本中镜像构建问题的早期预警系统。
这些镜像托管在Docker Hub和GitHub容器 registry:
privatebin或docker.io/privatebinghcr.io/privatebin假设已成功安装docker并具有互联网访问权限,可以从docker hub拉取并运行镜像,如下所示:
console$ docker run -d --restart="always" --read-only -p 8080:8080 -v $PWD/privatebin-data:/srv/data privatebin/nginx-fpm-alpine
参数详细说明:
-v $PWD/privatebin-data:/srv/data - 将$PWD/privatebin-data替换为系统上用于持久化粘贴和其他服务数据的文件夹路径。这确保在停止、重启或替换镜像后不会丢失粘贴数据。如果只是测试镜像或使用数据库、Google Cloud Storage后端,可跳过此参数。-p 8080:8080 - 容器内的Nginx Web服务器监听8080端口,此参数将其暴露到系统的8080端口。生产环境中,务必在其前方使用反向代理进行HTTPS终止。--read-only - 此镜像支持以只读模式运行。使用此参数可略微减少***面,因为镜像服务中的漏洞无法覆盖容器中的任意文件。仅允许写入/tmp、/var/tmp、/var/run和/srv/data。-d - 在后台启动容器。可使用docker ps和docker logs检查容器是否正常运行。--restart="always" - 容器崩溃时自动重启,主要用于生产环境设置注意:挂载的卷必须由UID 65534/GID 82拥有。如果在启用"userns-remap"的docker实例中运行容器,需要将子uid/subgid范围添加到这些数字中。
如果需要使用自定义的conf.php文件(例如启用文件上传或使用不同模板),可添加第二个卷:
console$ docker run -d --restart="always" --read-only -p 8080:8080 -v $PWD/conf.php:/srv/cfg/conf.php:ro -v $PWD/privatebin-data:/srv/data privatebin/nginx-fpm-alpine
注意:默认支持Filesystem数据存储。镜像包含MySQL和PostgreSQL的PDO模块,是Database存储所需的,但在1.4.0之前的版本中,使用数据库存储时仍需持久化/srv/data以保存服务器salt和流量限制器数据。
以下变量会传递给PHP应用以支持各种场景。这允许通过环境而非配置文件更改某些设置。大多数与存储后端相关:
AWS_ACCESS_KEY_IDAWS_CONTAINER_AUTHORIZATION_TOKENAWS_CONTAINER_CREDENTIALS_FULL_URIAWS_CONTAINER_CREDENTIALS_RELATIVE_URIAWS_DEFAULT_REGIONAWS_PROFILEAWS_ROLE_ARNAWS_ROLE_SESSION_NAMEAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKENAWS_STS_REGIONAL_ENDPOINTSAWS_WEB_IDENTITY_TOKEN_FILEAWS_SHARED_CREDENTIALS_FILEGCLOUD_PROJECTGOOGLE_APPLICATION_CREDENTIALSGOOGLE_CLOUD_PROJECTPRIVATEBIN_GCS_BUCKET以下变量默认不使用,但可在自定义配置文件中启用,以将敏感信息排除在配置文件外:
STORAGE_HOSTSTORAGE_LOGINSTORAGE_PASSWORDSTORAGE_CONTAINERCONFIG_PATH镜像支持使用以下两个环境变量调整时区。这对于确保日志显示正确的本地时间最有用。
TZPHP_TZ注意:应用内部基于创建时设置的时区计算UNIX时间戳来处理粘贴的过期。更改PHP_TZ会影响此计算,导致粘贴过期时间早于(时区增加时)或晚于(时区减少时)预期。
可将自己的php.ini或nginx配置文件挂载到/etc/php/conf.d/和/etc/nginx/http.d/文件夹。例如,如需调整这两个服务接受的文件上传最大大小(默认10 MiB),可通过此方式实现。
以下是Kubernetes的部署示例:
yaml--- apiVersion: apps/v1 kind: Deployment metadata: name: privatebin-deployment labels: app: privatebin spec: replicas: 3 selector: matchLabels: app: privatebin template: metadata: labels: app: privatebin spec: securityContext: runAsUser: 65534 runAsGroup: 82 fsGroup: 82 containers: - name: privatebin image: privatebin/nginx-fpm-alpine:stable ports: - containerPort: 8080 env: - name: TZ value: Antarctica/South_Pole - name: PHP_TZ value: Antarctica/South_Pole securityContext: readOnlyRootFilesystem: true privileged: false allowPrivilegeEscalation: false livenessProbe: httpGet: path: / port: 8080 readinessProbe: httpGet: path: / port: 8080 volumeMounts: - mountPath: /srv/data name: privatebin-data readOnly: False - mountPath: /run name: run readOnly: False - mountPath: /tmp name: tmp readOnly: False - mountPath: /var/lib/nginx/tmp name: nginx-cache readOnly: False volumes: - name: run emptyDir: medium: "Memory" - name: tmp emptyDir: medium: "Memory" - name: nginx-cache emptyDir: {}
注意,privatebin-data卷必须是跨所有节点的共享持久卷,例如NFS共享。从PrivateBin 1.4.0开始,使用数据库或Google Cloud Storage时不再需要此卷。
镜像包含两个管理脚本,可用于在存储后端之间迁移数据、按ID删除粘贴、使用Filesystem后端时删除空目录、清除所有过期粘贴以及显示统计信息。这些脚本可在运行中的镜像内执行,或作为替代入口点运行,需附加与运行服务镜像相同的卷,推荐前一种方式。
console# 假设使用选项--name privatebin将容器命名为"privatebin" $ docker exec -t privatebin administration --help Usage: administration [--delete <paste id> | --empty-dirs | --help | --purge | --statistics] Options: -d, --delete 删除请求的粘贴ID -e, --empty-dirs 删除空目录(仅当配置Filesystem存储时) -h, --help 显示此帮助信息 -p, --purge 清除所有过期粘贴 -s, --statistics 读取所有存储的粘贴和评论并报告统计信息 docker exec -t privatebin migrate --help migrate - 在PrivateBin后端之间复制数据 Usage: migrate [--delete-after] [--delete-during] [-f] [-n] [-v] srcconfdir [<dstconfdir>] migrate [-h|--help] Options: --delete-after 所有粘贴和评论成功复制到目标后,从源删除数据 --delete-during 当前粘贴及其评论成功复制到目标后,从源删除数据 -f 强制覆盖目标中已存在的数据 -h, --help 显示此帮助信息 -n dry run,不复制数据 -v 详细模式 <srcconfdir> 使用此目录中conf.php的存储后端配置作为源 <dstconfdir> 可选,使用此目录中conf.php的存储后端配置作为目标;默认为: /srv/bin/../cfg/conf.php
注意,要在不同存储后端之间迁移,需要使用名为privatebin/nginx-fpm-alpine的全能镜像,因为它包含不同支持后端所需的所有驱动程序和库。使用变体镜像时,只能在相同存储类型的两个后端之间迁移,例如两个文件系统路径或两个数据库后端。
要重现镜像,运行:
console$ docker build -t privatebin/nginx-fpm-alpine .
Nginx和php-fpm两个进程由s6启动。
Nginx用于提供静态文件并缓存它们。对index.php(文档根目录/var/www中唯一暴露的PHP文件)的请求通过/run/php-fpm.sock套接字传递给php-fpm。所有其他PHP文件和数据存储在/srv下。
Nginx仅支持HTTP,因此务必在其前方运行反向代理进行HTTPS卸载,以减少TLS栈的***面。此镜像中的Nginx配置为对文本内容进行deflate/gzip压缩。
镜像构建期间,从Github下载PrivateBin发行版归档。所有下载的Alpine包和PrivateBin归档均通过加密签名验证,确保在部署到镜像前未被篡改。
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429