Docker 部署 random-pic-api 随机壁纸服务 🖼️

📋 目录导航
🎯 项目简介
random-pic-api 是一个轻量级的随机壁纸 API 服务,使用 PHP 开发并通过 Docker 容器化部署。该项目能够根据设备类型自动提供横屏或竖屏壁纸,支持 WebP 格式转换,并提供简洁的 RESTful API 接口。
🛠️ 核心特性
- 🖼️ 自动区分横屏/竖屏壁纸 - 智能识别图片方向,适配不同设备需求
- 🔄 智能图片处理 - 自动转换为 WebP 格式,优化加载速度
- 🐳 完全容器化部署 - 简单易用,一键部署
- 📱 多端点访问 - 支持自适应、PC 和移动端三种模式
- 🔒 HTTPS 安全访问 - 支持 SSL 加密,保障数据传输安全
- 📦 离线镜像包 - 提供完整离线部署方案,适合内网环境
- ⚡ 高性能响应 - 优化处理流程,快速响应请求
- 🎨 高质量输出 - 保持原始画质的同时优化文件大小
🔗 项目地址
🐳 一、Docker 部署 random-pic-api
1. 创建部署目录和 docker-compose.yml
文件 📁
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| mkdir -p /mnt/mydisk/home/random-pic-api && cd $_ && \ cat > docker-compose.yml <<'EOF' services: random-pic-api: container_name: random-pic-api image: neixin/random-pic-api:latest restart: unless-stopped volumes: - ./portrait:/var/www/html/portrait - ./landscape:/var/www/html/landscape - ./photos:/var/www/html/photos ports: - "8588:80" environment: - TZ=Asia/Shanghai EOF
|
2. 拉取镜像并启动容器 🚀
🚀 二、使用 random-pic-api
1. 克隆项目仓库 📦
1 2
| git clone https://github.com/meimolihan/random-pic-api.git cd random-pic-api
|
2. 使用 Docker 镜像离线包 🚢
下载离线包
1
| wget -c -O ~/random-pic-api-amd64.tar.gz https://github.com/meimolihan/DockerTarBuilder/releases/download/DockerTarBuilder-AMD64/neixin_random-pic-api-amd64.tar.gz
|
加载本地镜像
1
| docker load -i ~/random-pic-api-amd64.tar.gz
|
3. 图片处理与管理 👀
项目提供智能图片处理脚本,自动分类和转换图片:
功能特点
- 🎯 自动识别图片方向(横屏/竖屏)
- 🔄 批量转换为 WebP 格式,优化网络传输
- 📊 保持原始图片质量的同时减小文件大小
- ⚡ 支持批量处理,提高效率
使用方法
- 将原始图片放入
photos
文件夹
- 执行处理脚本:
处理流程:
- 读取
photos
文件夹下的所有图片
- 自动识别图片方向并分类
- 转换为 WebP 格式并保存到相应目录:
- 竖屏图片保存至:
portrait
- 横屏图片保存至:
landscape
目录结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| . ├── docker-compose.yml ├── Dockerfile ├── index.php ├── classify.py ├── landscape │ ├── test1.webp │ ├── test2.webp │ └── test3.webp ├── photos │ ├── test1.jpg │ ├── test2.jpg │ ├── test3.jpg │ ├── test4.jpg │ ├── test5.jpg │ └── test6.jpg └── portrait ├── test4.webp ├── test5.webp └── test6.webp
|
🌐 三、Nginx 反向代理配置
访问地址示例:https://api.example.com:666
1. 创建 Nginx 配置文件 🔧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| mkdir -p /etc/nginx/conf.d && \ cat > /etc/nginx/conf.d/random-pic-api.conf <<'EOF' server { listen 666 ssl; listen [::]:666 ssl; server_name api.example.com;
ssl_certificate /etc/nginx/ssl/api.example.com/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/api.example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;
add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block";
client_max_body_size 100M;
location / { proxy_pass http://127.0.0.1:8588; 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 X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 8 4k; proxy_connect_timeout 30s; proxy_send_timeout 30s; proxy_read_timeout 30s; }
error_page 404 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } EOF
|
2. 测试并重载 Nginx 🔄
1
| sudo nginx -t && sudo systemctl reload nginx
|
🔧 四、容器维护命令
1. Docker Compose 命令 🐳
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| cd /path/to/your/project
docker-compose down
docker-compose pull
docker-compose up -d
docker-compose up -d <service_name>
docker-compose ps
docker-compose logs
docker-compose logs -f
docker-compose logs <service_name>
docker-compose down && \ docker-compose pull && \ docker-compose up -d && \ docker image prune -f
|
2. Docker 容器命令 📦
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| docker ps -a --format "{{.Names}}"
docker ps
docker stop <container_name> docker start <container_name> docker restart <container_name>
docker rm <container_name> docker rm -f <container_name>
docker exec -it <container_name> sh docker exec -it <container_name> bash
docker exec -u 0 -it <container_name> sh
docker exec <container_name> ls -la
docker inspect <container_name> docker stats <container_name>
docker logs <container_name> docker logs -f <container_name> docker logs --tail 100 <container_name> docker logs -t <container_name>
|
3. Docker 镜像管理 📀
1 2 3 4
| docker images docker rmi <image_name:tag> docker image prune -f docker image prune -a -f
|
🌟 启航视觉,创意无限
通过本文档,你已经成功使用 Docker 部署了 random-pic-api 随机壁纸服务,并借助 Nginx 反向代理实现了安全便捷的远程访问。现在,你可以:
🌍 随时随地 获取精美壁纸,无论是横屏还是竖屏都能完美适配
🎨 创意无限 自定义图片库,打造属于你个人风格的壁纸集合
⚡ 高效稳定 享受快速响应的 API 服务,WebP 格式优化提升加载速度
视觉之路,是一场与美学共鸣的灵感旅程。愿 random-pic-api 成为你创意的源泉,陪伴你在每一个设计灵感和视觉享受的瞬间。
从现在开始,激发创意,美化视野——构建你独一无二的视觉宝库吧!🎨
📌 持续迭代:建议关注 random-pic-api 项目更新,及时获取新功能与优化。
🐛 反馈与互助:使用中如有疑问或建议,可前往 GitHub Issues 提出。
祝你视觉之旅愉快,创意无限!🎉
Docker 部署 random-pic-api 随机壁纸服务 🖼️