Pixelfed 自建教程:开源去中心化图片社交平台

Pixelfed 自建教程:开源去中心化图片社交平台

Instagram 算法越来越重、广告越来越多、数据完全在 Meta 手里。Pixelfed 是开源的 Instagram 替代品,基于 ActivityPub 协议,可以和 Mastodon 等联邦宇宙平台互关互动。适合摄影爱好者、创作者,或者想给特定圈子建一个图片社区。

Pixelfed 特点

  • Instagram 风格 UI:网格图库、故事(Stories)、滤镜
  • 联邦宇宙互通:Mastodon 用户可以关注你的 Pixelfed 账号
  • 无算法推荐:按时间顺序展示,不做个性化推荐
  • 单用户模式:可以只给自己用,作为私人相册
  • 导入 Instagram:支持从 Instagram 导出数据后导入

服务器配置

  • 单用户/小圈子:2 核 4GB,50GB 硬盘(图片多就加硬盘)
  • 开放注册实例:4 核 8GB,200GB 硬盘

我把 Pixelfed 部署在雨云服务器的 4 核 8G 机型上,几十用户的私有图片社区运行顺畅。注册填优惠码 2026off 领 5 折优惠券,大存储机型价格实惠。

前置准备

域名和邮件

Pixelfed 需要域名(如 photo.你的域名.com),且部署后不能更换域名。同时需要配置 SMTP 发送验证邮件。

Docker Compose 部署

bash 复制代码
mkdir -p ~/pixelfed && cd ~/pixelfed

git clone https://github.com/pixelfed/pixelfed.git .
cp .env.example .env

编辑 .env 关键配置:

env 复制代码
APP_NAME="我的图片社区"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://photo.你的域名.com

# 数据库
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=pixelfed
DB_USERNAME=pixelfed
DB_PASSWORD=pixelfed_password

# Redis
REDIS_HOST=redis
REDIS_PORT=6379

# 邮件
MAIL_DRIVER=smtp
MAIL_HOST=smtp.你的邮件服务商.com
MAIL_PORT=587
MAIL_USERNAME=你的邮件账号
MAIL_PASSWORD=你的邮件密码
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@photo.你的域名.com
MAIL_FROM_NAME="我的图片社区"

# 联邦设置
ACTIVITY_PUB=true
AP_REMOTE_FOLLOW=true

# 注册设置
OPEN_REGISTRATION=false    # 是否允许公开注册
ENFORCE_EMAIL_VERIFICATION=true

# 存储
FILESYSTEM_DRIVER=local    # 或配置 S3

# 图片处理
IMAGE_DRIVER=gd            # 或 imagick

创建 docker-compose.yml

yaml 复制代码
version: "3.8"

services:
  app:
    image: ghcr.io/pixelfed/pixelfed:latest
    container_name: pixelfed
    env_file: .env
    volumes:
      - ./storage:/var/www/storage
      - ./bootstrap/cache:/var/www/bootstrap/cache
    depends_on:
      - db
      - redis
    ports:
      - "127.0.0.1:8080:80"
    restart: unless-stopped

  worker:
    image: ghcr.io/pixelfed/pixelfed:latest
    container_name: pixelfed-worker
    command: php artisan horizon
    env_file: .env
    volumes:
      - ./storage:/var/www/storage
    depends_on:
      - db
      - redis
    restart: unless-stopped

  db:
    image: mysql:8.0
    container_name: pixelfed-db
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: pixelfed
      MYSQL_USER: pixelfed
      MYSQL_PASSWORD: pixelfed_password
    volumes:
      - mysql_data:/var/lib/mysql
    restart: unless-stopped

  redis:
    image: redis:7-alpine
    container_name: pixelfed-redis
    restart: unless-stopped

  caddy:
    image: caddy:alpine
    container_name: caddy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
    restart: unless-stopped

volumes:
  mysql_data:
  caddy_data:
  caddy_config:
复制代码
# Caddyfile
photo.你的域名.com {
    reverse_proxy pixelfed:80
}

初始化:

bash 复制代码
docker compose up -d db redis
sleep 30   # 等待数据库启动

docker compose run --rm app php artisan migrate --force
docker compose run --rm app php artisan db:seed --class=InstanceActorSeeder
docker compose run --rm app php artisan instance:actor
docker compose run --rm app php artisan storage:link
docker compose run --rm app php artisan config:cache
docker compose run --rm app php artisan route:cache

docker compose up -d

创建管理员账号

bash 复制代码
docker compose exec app php artisan user:create
# 按提示输入用户名、邮箱、密码

# 设置为管理员
docker compose exec app php artisan user:admin 你的用户名

管理配置

登录后,进入「管理后台」(/i/admin):

复制代码
基础设置:
- 实例名称、描述、规则
- 开放/关闭注册
- 帖子审核(上线前由管理员审核)
- 联邦设置(是否接受联邦域名)

内容审核:
- 审核举报的内容
- 封禁用户
- 封禁联邦实例

定时任务

bash 复制代码
# 添加 crontab
docker exec pixelfed php artisan schedule:run 应该在系统级别运行
(crontab -l 2>/dev/null; echo "* * * * * docker exec pixelfed php artisan schedule:run >> /dev/null 2>&1") | crontab -

图片存储接 S3

如果图片量大,推荐接对象存储:

env 复制代码
# 在 .env 里
FILESYSTEM_DRIVER=s3
AWS_ACCESS_KEY_ID=你的AccessKey
AWS_SECRET_ACCESS_KEY=你的SecretKey
AWS_DEFAULT_REGION=cn-hangzhou
AWS_BUCKET=你的bucket名
AWS_URL=https://你的bucket.oss-cn-hangzhou.aliyuncs.com
AWS_ENDPOINT=https://oss-cn-hangzhou.aliyuncs.com

备份

bash 复制代码
cat > ~/pixelfed/backup.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=~/pixelfed-backups
mkdir -p "$BACKUP_DIR"

docker exec pixelfed-db mysqldump -u pixelfed -ppixelfed_password pixelfed | \
  gzip > "$BACKUP_DIR/db-$DATE.sql.gz"

find "$BACKUP_DIR" -mtime +30 -delete
EOF

chmod +x ~/pixelfed/backup.sh
(crontab -l 2>/dev/null; echo "0 3 * * * ~/pixelfed/backup.sh") | crontab -

Pixelfed 是摄影爱好者和图片创作者理想的自托管平台,Instagram 的体验加上数据完全自控。在雨云服务器 rainyun+com 的 4 核 8G 大存储机型上部署,几十个用户的私有图片社区轻松支撑,注册填优惠码 2026off 领 5 折优惠券,打造一个纯粹的图片分享空间,没有算法、没有广告。

相关推荐
冬奇Lab2 天前
每日一个开源项目(第142篇):android/skills - Google 官方 Android 开发 AI Skill 库
人工智能·开源·资讯
冬奇Lab2 天前
Skill 系列(06):Skill 工程化与治理——路由准确率 38%、压缩节省 76%
人工智能·开源·agent
冬奇Lab3 天前
Skill 系列(05):Skill 工作流串联——4 种模式实测,并发加速 1.5x
人工智能·开源
冬奇Lab3 天前
每日一个开源项目(第141篇):hiring-agent - HackerRank 开源了他们的简历评分系统,你的简历能得几分?
人工智能·面试·开源
喝拿铁写前端3 天前
我替你试了:GitNexus 不是更强的搜索框
开源·资讯
Tigger3 天前
受不了 ¥98/年的订阅,我用 Vibe Coding 自己写了个剪贴板工具
人工智能·开源·mac
冬奇Lab4 天前
每日一个开源项目(第140篇):AgentScope 2.0 - 阿里开源的生产级 Agent 框架
人工智能·开源·agent
冬奇Lab4 天前
Skill 系列(04):Skill 指标体系——L1/L2/L3 三层监控,让质量下降有据可查
人工智能·开源·llm
修己xj4 天前
Ian Xiaohei Illustrations:让 AI 为你画出文章的“认知锚点”
开源
冬奇Lab5 天前
每日一个开源项目(第139篇):Voicebox - 本地运行的开源 ElevenLabs 替代品
人工智能·开源·资讯