开篇感谢柳柳的超级好用的NyaGallery项目!大家可以去github上给这个项目点个Star!
咳咳,切入正题
NyaGallery的部署
之前看到柳柳公布了这个项目之后心里就痒痒的,因为我一直想要有一个开源自部署的图床(用来收集好康的图片嘻嘻嘻),于是顺手去倒腾了一下
又因为某个叫宇编的笨蛋犯懒(,于是直接把NyaGallery的github页面喂给了deepseek让它帮我写一个一键部署脚本
于是就有了这个
#!/bin/bash
set -euo pipefail
# ============================================
# NyaGallery 一键部署脚本(清华源版 + npm淘宝源)
# 适用系统:Ubuntu 20.04+ / Debian 11+
# 功能:自动换清华源、安装依赖、部署前后端
# ============================================
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
WORK_DIR="${HOME}/NyaGallery"
PYTHON_CMD="python3"
NODE_VERSION_REQUIRED=18
info() { echo -e "${GREEN}[INFO]${NC} $1"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; }
detect_os() {
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$ID
VER=$VERSION_ID
else
error "无法检测操作系统"
fi
info "检测到系统: $OS $VER"
if [[ "$OS" != "ubuntu" && "$OS" != "debian" ]]; then
error "本脚本仅支持 Ubuntu/Debian"
fi
}
change_apt_source() {
info "备份当前 APT 源并更换为清华源..."
BACKUP_DIR="/etc/apt/backup_$(date +%Y%m%d_%H%M%S)"
sudo mkdir -p "$BACKUP_DIR"
sudo cp /etc/apt/sources.list "$BACKUP_DIR/sources.list.bak"
info "已备份到 $BACKUP_DIR"
if [[ "$OS" == "ubuntu" ]]; then
CODENAME=$(lsb_release -sc)
sudo tee /etc/apt/sources.list > /dev/null << EOF
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ $CODENAME main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ $CODENAME-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ $CODENAME-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ $CODENAME-security main restricted universe multiverse
EOF
elif [[ "$OS" == "debian" ]]; then
CODENAME=$(lsb_release -sc)
sudo tee /etc/apt/sources.list > /dev/null << EOF
deb https://mirrors.tuna.tsinghua.edu.cn/debian $CODENAME main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian $CODENAME-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security $CODENAME-security main contrib non-free
EOF
fi
sudo apt-get update -qq
}
change_pip_source() {
info "设置 pip 源为清华源..."
mkdir -p "$HOME/.pip"
cat > "$HOME/.pip/pip.conf" << EOF
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
EOF
}
install_base_deps() {
sudo apt-get install -y -qq git curl wget build-essential software-properties-common
}
install_python() {
if command -v python3.11 &>/dev/null; then
PYTHON_CMD="python3.11"; return
fi
if command -v python3.12 &>/dev/null; then
PYTHON_CMD="python3.12"; return
fi
sudo add-apt-repository -y ppa:deadsnakes/ppa
sudo apt-get update -qq
sudo apt-get install -y python3.11 python3.11-venv python3.11-dev
PYTHON_CMD="python3.11"
}
purge_nodejs() {
sudo apt-get remove -y nodejs npm 2>/dev/null || true
sudo apt-get autoremove -y 2>/dev/null || true
sudo rm -f /etc/apt/sources.list.d/nodesource.list* 2>/dev/null || true
}
install_nodejs() {
if command -v node &>/dev/null; then
NODE_VER=$(node -v | cut -d'v' -f2 | cut -d. -f1)
[ "$NODE_VER" -ge 18 ] && return
fi
purge_nodejs
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
}
clone_repo() {
if [ ! -d "$WORK_DIR/.git" ]; then
git clone https://github.com/NayaCcR/NyaGallery.git "$WORK_DIR"
fi
cd "$WORK_DIR"
}
install_backend() {
$PYTHON_CMD -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -e ".[media,pixiv,pixiv-login,postgres,redis]"
}
install_frontend() {
cd frontend
npm config set registry https://registry.npmmirror.com
npm install
cd ..
}
init_database() {
mkdir -p storage/original storage/metadata storage/cache
[ ! -f "storage/nyagallery.db" ] && nyagallery --storage storage setup
}
create_admin() {
read -p "管理员用户名 (默认: admin): " admin_user
admin_user=${admin_user:-admin}
read -s -p "密码: " admin_pass; echo
read -s -p "确认密码: " admin_pass2; echo
[ "$admin_pass" != "$admin_pass2" ] && { error "密码不一致"; }
nyagallery --storage storage setup --username "$admin_user" --role admin --password "$admin_pass"
}
main() {
[ "$EUID" -eq 0 ] && { warn "不建议用 root,建议普通用户 + sudo"; read -p "继续?(y/N): " c; [[ ! "$c" =~ ^[Yy]$ ]] && exit 0; }
detect_os
change_apt_source; change_pip_source; install_base_deps
install_python; install_nodejs; clone_repo
install_backend; install_frontend; init_database; create_admin
echo "部署完成!运行 cd $WORK_DIR && source venv/bin/activate && nyagallery --storage storage serve"
}
main
食用前注意一下这个.sh脚本适用于Ubuntu 20.04+ / Debian 11+,将会自动换清华源、安装依赖、部署前后端
都通过交互式命令行实现
下面是操作步骤
- 首先,在本页面下载脚本
- 然后将脚本想办法弄到你的服务器上
- 以root(不推荐)或者普通用户sudo执行这个脚本
- 按照提示执行(如果网络环境不好请考虑手动通过镜像站克隆项目)
cd frontend
$env:NYA_API_BACKEND = "http://127.0.0.1:8001"
npm run dev
启动前端
nyagallery --storage storage serve --host 127.0.0.1 --port 8001
启动后端
进阶玩法(
通过MCSManager管理NyaGallery
个人的喜好是通过mcsm管理多实例,如果有大佬有其它管理多实例的方案还请在评论区友好交流哦
- 首先点击创建实例页面
- 然后直接创建(前端步骤)
- 建议前端实例命名为NyaGallery_Frontend
- 然后按照你前端安装位置找好目录,请注意一下你部署NyaGallery的时候有没有用单独用户,如果有那么需要mcsm单独配置指定用户启动(下同0
- 再然后根据你实际需要修改下面的命令
- bash -c “cd /***********/NyaGallery/frontend && export NYA_API_BACKEND=http://127.0.0.1:8001 && (fuser -k 3000/tcp 2>/dev/null || true) && npm run build && npm run start — -H 0.0.0.0 -p 3000”
- 注意要把**********处替换为你真实的NyaGallery目录
- 这时候你可以启动一下看一看前端,不出意外的话已经在跑了
- 然后我们来创建后端(后端步骤)
- 建议实例命名为NyaGallery_Backend
- 注意注意
默认自动部署脚本是会部署venv的,此时你需要手动调用venv目录中的python解释器来启动(e.g. /****/NyaGallery/venv/bin/python /****/NyaGallery/venv/bin/nyagallery –storage storage serve –host 0.0.0.0 –port 8001)
- 如果不需要可以通过nyagallery –storage storage serve –host 127.0.0.1 –port 8001启动后端
- 最后建议给前端后端的实例都设置上事件任务(开机自启和自动重启)
大功告成!现在你通过ip:3000应该能看到NyaGallery实例了
通过mihomo让站点可以访问pixiv
众所周知,国内的网络环境较差,这时候我们需要一点魔法
至于mihomo安装和配置我在这里就不多赘述
安装配置好了之后我个人是通过proxychains进行一个转发
将proxychains配置文件配置上socks5 127.0.0.1 7890就可以让proxychains走本地的mihomo了
注意注意非常不建议mihomo走tun模式,因为你可能会碰到奇奇怪怪的bug(其他软件由于联网问题各种打不开)
由于只有后端负责抓取,所以我们此时只需要在后端的启动命令前加上proxychains就可以了
pixiv收藏夹抓取
截至2026年7月6日13:02时,在通过github得到的NyaGallery中目前版本并没有抓取用户收藏夹功能(笨笨柳柳)于是我通过vibe coding改了一版,拉了一个pr上去,还没有通过ww
详细介绍可见我的pr
现在你可以将本地git仓库远程origin改成我的fork的仓库来直接使用
记得重启前端后端喵
就到这里吧,祝你天天开心喵!