Sosse 1.14.2 安装指南
Sosse 1.14.2 从零安装实录:pip+venv 与官方 Debian 仓库两条完整路线,覆盖 PostgreSQL 初始化、uWSGI/Nginx 配置、systemd 托管、启动验证、排障实录与卸载清理,已在 Ubuntu 24.04 与 Debian 13 实测通过。
Sosse 1.14.2 安装指南
目标:在 Linux 服务器上从零安装 Sosse 1.14.2 自托管搜索引擎,覆盖「pip + venv 源码包安装」与「官方 Debian 仓库 deb 包安装」两条完整路线,含 PostgreSQL 初始化、uWSGI/Nginx 配置、systemd 托管、启动验证与卸载清理。已分别在 Ubuntu 24.04(Python 3.12.3 + PostgreSQL 16)与 Debian 13(Python 3.13.5 + PostgreSQL 17)实测通过。
一、环境信息
本文两条安装路线的实测环境如下,所有命令与回显均为实测逐行照抄:
| 项目 | 方案 A(pip 安装) | 方案 B(deb 仓库安装) |
|---|---|---|
| 操作系统 | Ubuntu 24.04.5 LTS(x86_64) | Debian 13.7 (trixie)(x86_64) |
| Python | 3.12.3(系统自带) | 3.13.5(系统自带) |
| PostgreSQL | 16.15(Ubuntu 仓库) | 17(Debian 仓库,随 sosse 依赖装入) |
| Nginx | 1.24.0 | 1.26.3 |
| Sosse | 1.14.2(PyPI 安装) | 1.14.2-1+trixie(官方 deb 仓库) |
| uWSGI | 2.0.31(pip 安装) | 随 deb 包依赖装入 |
| Web 端口 | 80(Nginx) | 80(Nginx) |
| 配置文件 | /etc/sosse/sosse.conf | /etc/sosse/sosse.conf |
表格解读:两套环境的组件版本并不要求一致——Sosse 的硬约束只有 Python ≥ 3.11 与 PostgreSQL(5.x~16/17 均可),其余组件跟随发行版仓库默认版本即可。
二、前置条件
2.1 系统要求
- 一台 x86_64/aarch64 Linux 服务器,2 核 4GB 内存起步(爬虫并发默认为 CPU 核数的一半,内存主要消耗在 PostgreSQL 与浏览器渲染进程);
- 操作系统需带
www-data运行账户(Debian/Ubuntu 系默认存在;RHEL 系需自行创建或改用其他账户); - 出网能力:安装阶段需访问 PyPI(方案 A)或 piggledy.org 官方 deb 仓库(方案 B);运行阶段爬虫需访问被爬站点。
2.2 软件依赖(方案 A 需手动准备)
官方文档(install/pip.html)列出的前置软件:
- 支持 WSGI 的 Web 服务器(本文用 Nginx);
- WSGI 应用服务器(本文用 uWSGI);
- PostgreSQL 数据库;
- Firefox + Geckodriver(可选,仅 Firefox 渲染抓取/截图需要);
- Google Chromium + ChromeDriver(可选,仅浏览器渲染抓取/截图需要);
- libmagic(
python-magic的系统依赖,文件类型识别必需)。
⚠️ 浏览器属可选依赖:纯静态页面抓取(requests 模式)完全不依赖浏览器;只有在需要 JS 渲染、截图、HTML 快照资源下载时才安装。
三、版本选型说明
- Sosse 版本:本文写作时官方最新稳定版为 v1.14.2(GitLab Tags:2025-10-15 发布;PyPI 同步发布 1.14.2;Debian 仓库包名
1.14.2-1+trixie,三者版本一致)。查询日期 2026-10-24,最新版本可用以下命令实查:# PyPI 最新版 pip index versions sosse 2>/dev/null || pip install sosse== 2>&1 | head -2 - Python 版本:PyPI 元数据要求
>=3.11;Ubuntu 24.04 自带 3.12、Debian 13 自带 3.13,均满足;Ubuntu 20.04/22.04 自带 3.8/3.10 不满足,需先加装 python3.11+(deadsnakes PPA 或源码编译); - PostgreSQL 版本:官方文档基线覆盖 15/16/17,全文字段使用 PostgreSQL 原生
tsvector,选择发行版仓库自带版本即可,无需特判; - 安装渠道选择:能访问 PyPI 的服务器选方案 A(版本最跟手);Debian 系服务器且希望由 apt 统一管理升级选方案 B(自带 systemd 单元,运维最省心)。
四、在线安装方案 A:pip + venv 安装(Ubuntu 24.04)
4.1 方案说明
从 PyPI 安装官方 sosse wheel 包到独立虚拟环境,手工初始化目录/配置/数据库,并配置 uWSGI + Nginx 对外服务。适合 Ubuntu、RHEL、Rocky 等所有有 Python 3.11+ 的发行版,也是官方文档给出的通用安装方式。
4.2 安装系统依赖
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y python3 python3-venv python3-pip postgresql nginx curl libmagic1
实测回显(节选,实测首尾):
Setting up libheif-plugin-aomdec:amd64 (1.17.6-1ubuntu4.9) ...
Setting up libheif1:amd64 (1.17.6-1ubuntu4.9) ...
Processing triggers for libc-bin (2.39-0ubuntu8.9) ...
Processing triggers for ca-certificates (20260816ubuntu0.24.04.1) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
验证版本与 PostgreSQL 集群状态:
python3 --version && psql --version && nginx -v && pg_lsclusters
实测回显:
Python 3.12.3
psql (PostgreSQL) 16.15 (Ubuntu 16.15-0ubuntu0.24.04.1)
nginx version: nginx/1.24.0 (Ubuntu)
Ver Cluster Port Status Owner Data directory Log file
16 main 5432 down postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16-main.log
启动 PostgreSQL 并设为开机自启:
systemctl enable --now postgresql
pg_lsclusters | tail -1
实测回显:
16 main 5432 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16-main.log
4.3 创建虚拟环境并安装 sosse
virtualenv /opt/sosse-venv/
/opt/sosse-venv/bin/pip install sosse
⚠️ 若系统无
virtualenv命令,用python3 -m venv /opt/sosse-venv/等价替代(两者在本场景效果一致)。
实测回显(输出节选,实测首尾,中间为依赖解析与下载进度条):
Collecting sosse
Downloading sosse-1.14.2-py3-none-any.whl.metadata (6.5 kB)
Collecting bs4 (from sosse)
Downloading bs4-0.0.2-py2.py3-none-any.whl.metadata (411 bytes)
...
Collecting django<4.3 (from sosse)
Downloading django-4.2.30-py3-none-any.whl.metadata (4.2 kB)
...
Downloading sosse-1.14.2-py3-none-any.whl (3.8 MB)
...
Installing collected packages: sortedcontainers, pytz, publicsuffix2, django-uwsgi, websocket-client, webencodings, urllib3, uritemplate, typing_extensions, sqlparse, soupsieve, sniffio, six, rpds-py, PyYAML, python-magic, pysocks, psycopg2-binary, psutil, pillow, more_itertools, markdown, lxml, inflection, idna, h11, feedparser-sgmllib, defusedxml, charset_normalizer, chardet, certifi, attrs, asgiref, wsproto, requests, referencing, outcome, langdetect, html5lib, feedparser, encutils, django, beautifulsoup4, trio, jsonschema-specifications, djangorestframework, django-treebeard, django-filter, cssutils, bs4, trio-websocket, jsonschema, selenium, drf-spectacular, sosse
Successfully installed PyYAML-6.0.3 asgiref-3.13.0 attrs-26.1.0 beautifulsoup4-4.15.0 bs4-0.0.2 certifi-2026.10.23 chardet-7.7.0 charset_normalizer-3.5.2 cssutils-2.15.0 defusedxml-0.7.1 django-4.2.30 django-filter-25.1 django-treebeard-4.8.0 django-uwsgi-0.2.2 djangorestframework-3.17.2 drf-spectacular-0.30.0 encutils-1.0.0 feedparser-6.0.14 feedparser-sgmllib-2.1.0 h11-0.16.0 html5lib-1.1 idna-3.20 inflection-0.5.1 jsonschema-4.26.0 jsonschema-specifications-2025.9.1 langdetect-1.0.9 lxml-6.1.3 markdown-3.11.2 more_itertools-11.2.1 outcome-1.3.0.post0 pillow-13.0.0 psutil-7.2.2 psycopg2-binary-2.9.13 publicsuffix2-2.20191221 pysocks-1.7.1 python-magic-0.4.27 pytz-2026.5 referencing-0.37.0 requests-2.34.2 rpds-py-2026.9.1 selenium-4.24.0 six-1.17.0 sniffio-1.3.1 sortedcontainers-2.4.0 sosse-1.14.2 soupsieve-3.0.4 sqlparse-0.6.0 trio-0.34.0 trio-websocket-0.12.2 typing_extensions-4.16.0 uritemplate-4.2.0 urllib3-2.8.0 webencodings-0.6.1 websocket-client-1.9.2 wsproto-1.3.2
关键依赖解析结果(写本文时 pip 实际锁定):Django 4.2.30、djangorestframework 3.17.2、selenium 4.24.0、psycopg2-binary 2.9.13、lxml 6.1.3。验证安装:
/opt/sosse-venv/bin/pip show sosse | head -3
实测回显:
Name: Sosse
Version: 1.14.2
Summary: Open-source, enterprise-grade web search & archiving.
4.4 初始化运行目录与默认配置
按官方文档创建目录、日志文件与默认配置:
mkdir -p /run/sosse /var/log/sosse /var/www/.cache /var/www/.mozilla /var/lib/sosse/downloads /var/lib/sosse/screenshots /var/lib/sosse/html
touch /var/log/sosse/crawler.log /var/log/sosse/debug.log /var/log/sosse/main.log /var/log/sosse/webserver.log /var/log/sosse/webhooks.log
chown -R www-data:www-data /run/sosse /var/lib/sosse /var/www/.cache /var/www/.mozilla /var/log/sosse
mkdir /etc/sosse
/opt/sosse-venv/bin/sosse-admin default_conf > /etc/sosse/sosse.conf
chmod 777 /run/sosse
default_conf 生成的配置文件关键内容(实测节选,每台机器生成的 secret_key 不同):
[common]
# Run ``sosse-admin generate_secret`` to create a new one.
# Default: CHANGE ME
#secret_key=CHANGE ME
secret_key = fww4veeo4h0@6ivx=3o!bawq=(kv=121kupl1b6y#huonevjq8
# PostgreSQL connection parameters.
# Default: sosse
#db_name=sosse
# Default: sosse
#db_user=sosse
# Default: CHANGE ME
#db_pass=CHANGE ME
#db_pass=CHANGE ME
配置解读:
secret_key:Django 会话签名密钥,default_conf已自动生成随机值(上例即实测生成值),无需手工改动;生产环境如需重置,运行/opt/sosse-venv/bin/sosse-admin generate_secret输出新值后替换;db_name/db_user:默认均为sosse,与下文 4.6 建库保持一致;db_pass:默认注释态CHANGE ME,必须取消注释并写入真实密码(下一步做)。
⚠️ /run/sosse 目录权限必须包含执行位(777 或 775):uWSGI 以 www-data 身份在该目录创建 unix socket,若只有 666 读写位而无执行位,socket bind() 会报 Permission denied(详见"八、常见问题"Q1 实测排障)。
写入数据库密码(把默认注释行改为实际值):
sed -i 's|^#db_pass=CHANGE ME|db_pass=q1w2e3r4|' /etc/sosse/sosse.conf
grep '^db_pass' /etc/sosse/sosse.conf
实测回显:
db_pass=q1w2e3r4
按官方建议收紧配置文件权限:
chown -R root:www-data /etc/sosse
chmod 750 /etc/sosse/
chmod 640 /etc/sosse/*
4.5 收集静态文件
/opt/sosse-venv/bin/sosse-admin collectstatic --noinput --clear
实测回显(末行):
214 static files copied to '/var/lib/sosse/static'.
4.6 创建 PostgreSQL 数据库与用户
su - postgres -c "psql --command=\"CREATE USER sosse WITH PASSWORD 'q1w2e3r4';\""
su - postgres -c "psql --command=\"CREATE DATABASE sosse OWNER sosse;\""
实测回显:
CREATE ROLE
CREATE DATABASE
4.7 初始化数据库 schema
/opt/sosse-venv/bin/sosse-admin migrate
/opt/sosse-venv/bin/sosse-admin update_se
/opt/sosse-venv/bin/sosse-admin update_mime
/opt/sosse-venv/bin/sosse-admin default_admin
实测回显(migrate 节选尾部 + 其余命令全量输出):
Applying se.0025_alter_collection_queue_to_any_collection_and_more... OK
Applying sessions.0001_initial... OK
115 new search engines added
8 new MIME handlers added
Default user "admin", with password "admin" was created
输出解读:update_se 注入了 115 个外部搜索引擎快捷方式(bang 跳转用);update_mime 注册了 8 个 MIME 处理插件;default_admin 创建了超级用户 admin/admin(⚠️ 生产环境登录后立即改密)。
⚠️
update_mime必须以www-data身份运行(官方文档明确警告:需要写 Sosse 数据目录)。若当前是 root,请改用sudo -u www-data /opt/sosse-venv/bin/sosse-admin update_mime;系统无 sudo 时用su www-data -s /bin/bash -c '/opt/sosse-venv/bin/sosse-admin update_mime'等价执行。
4.8 安装并配置 uWSGI
/opt/sosse-venv/bin/pip install uwsgi
实测回显(末行):
Successfully installed uwsgi-2.0.31
写 uWSGI 配置 /etc/sosse/uwsgi.ini(官方文档模板):
[uwsgi]
# Django-related settings
# the base directory (full path)
chdir = /
# Django's wsgi file
module = sosse.wsgi
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 10
# the socket (use the full path to be safe)
socket = /run/sosse/uwsgi.sock
# chmod-socket = 664
# clear environment on exit
vacuum = true
写 uwsgi 参数文件 /etc/sosse/uwsgi.params(Nginx 转发 uwsgi 协议所需的标准参数表):
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
先手工前台验证 uWSGI 可正常拉起(确认无误后再交给 systemd 托管):
mkdir -p /var/log/uwsgi && chown www-data:www-data /var/log/uwsgi
/opt/sosse-venv/bin/uwsgi --uid www-data --gid www-data --ini /etc/sosse/uwsgi.ini --logto /var/log/uwsgi/sosse.log &
sleep 3
ls -la /run/sosse/uwsgi.sock
实测回显:
srwxr-xr-x 1 www-data www-data 0 Oct 24 01:12 /run/sosse/uwsgi.sock
socket 文件出现即表示 WSGI 层就绪。
4.9 配置 Nginx 站点
写 /etc/nginx/sites-available/sosse.conf(官方文档模板,节选自 install/pip.html):
upstream django {
server unix:///run/sosse/uwsgi.sock; # for a file socket
}
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
charset utf-8;
# max upload size
client_max_body_size 75M;
# Django staticfiles
location /static {
alias /var/lib/sosse/static;
}
# Screenshots
location /screenshots {
alias /var/lib/sosse/screenshots;
}
# HTML snapshots
location /snap {
alias /var/lib/sosse/html/;
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass unix:/run/sosse/uwsgi.sock;
include /etc/sosse/uwsgi.params;
}
}
配置解读:/static、/screenshots、/snap 三个路径由 Nginx 直接 alias 到磁盘目录(静态文件不经应用服务器,性能最好);其余全部请求通过 unix socket uwsgi_pass 给 uWSGI。
启用站点并重载 Nginx:
rm -f /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/sosse.conf /etc/nginx/sites-enabled/
nginx -t && systemctl restart nginx
实测回显:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
4.10 systemd 托管(uwsgi + 爬虫双服务)
pip 安装不自带 systemd 单元,参照官方 deb 包内 /usr/lib/systemd/system/sosse-uwsgi.service 与 sosse-crawler.service 的单元定义(见 5.5 节原文件),把路径适配为 venv 路径后创建两个单元。
创建 /etc/systemd/system/sosse-uwsgi.service:
[Unit]
Description=Sosse uWSGI server
After=syslog.target network.target postgresql.service
[Service]
ExecStartPre=-+mkdir -p /run/sosse /var/lib/sosse/downloads /var/lib/sosse/screenshots /var/lib/sosse/html /var/lib/sosse/browser_config /var/www/.mozilla /var/www/.cache /var/log/sosse
ExecStartPre=-+touch /var/log/sosse/crawler.log /var/log/sosse/debug.log /var/log/sosse/main.log /var/log/sosse/webserver.log /var/log/sosse/webhooks.log
ExecStartPre=-+chown www-data:www-data /run/sosse /var/lib/sosse/downloads /var/lib/sosse/screenshots /var/lib/sosse/html /var/lib/sosse/browser_config /var/www/.mozilla /var/www/.cache
ExecStartPre=-+chown www-data:www-data -R /var/log/sosse/
ExecStart=/opt/sosse-venv/bin/uwsgi --uid www-data --gid www-data --ini /etc/sosse/uwsgi.ini --logto /var/log/uwsgi/sosse.log
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all
[Install]
WantedBy=multi-user.target
创建 /etc/systemd/system/sosse-crawler.service:
[Unit]
Description=Sosse crawler
After=syslog.target network.target postgresql.service
[Service]
ExecStartPre=-+mkdir -p /run/sosse /var/lib/sosse/downloads /var/lib/sosse/screenshots /var/lib/sosse/html /var/lib/sosse/browser_config /var/www/.mozilla /var/www/.cache /var/log/sosse
ExecStartPre=-+touch /var/log/sosse/crawler.log /var/log/sosse/debug.log /var/log/sosse/main.log /var/log/sosse/webserver.log /var/log/sosse/webhooks.log
ExecStartPre=-+chown www-data:www-data /run/sosse /var/lib/sosse/downloads /var/lib/sosse/screenshots /var/lib/sosse/html /var/lib/sosse/browser_config /var/www/.mozilla /var/www/.cache
ExecStartPre=-+chown www-data:www-data -R /var/log/sosse/
ExecStart=/opt/sosse-venv/bin/sosse-admin crawl
User=www-data
Group=www-data
Restart=always
KillSignal=SIGQUIT
Type=simple
NotifyAccess=all
[Install]
WantedBy=multi-user.target
单元解读:ExecStartPre 的 -+ 前缀表示"以 root 执行且失败不阻断",用于在服务启动前确保运行目录/日志存在并归属 www-data;uwsgi 单元 Type=notify(uWSGI 支持 sd_notify),爬虫单元 Type=simple 且以 User=www-data 直接降权运行。
先停掉 4.8 节手工拉起的 uwsgi 再交给 systemd:
pkill -f 'uwsgi --uid www-data'
systemctl daemon-reload
systemctl enable sosse-uwsgi
systemctl enable sosse-crawler
systemctl start sosse-uwsgi
systemctl start sosse-crawler
⚠️ systemd 托管需要真实服务器(或已启用 systemd 的环境)执行;enable 成功的标志是创建 multi-user.target.wants 下的符号链接,官方 deb 方案的实测回显见 5.5 节。
4.11 验证安装
systemctl is-active sosse-uwsgi; systemctl is-active sosse-crawler
curl -sL -o /dev/null -w 'HTTP=%{http_code} URL=%{url_effective}\n' http://127.0.0.1/
curl -sL http://127.0.0.1/ | grep -o '<title>[^<]*</title>'
预期回显(本机无 systemd 环境下可先用 4.8 的手工方式验证 Web 层,实测登录页响应如下):
HTTP=200 URL=http://127.0.0.1/login/?next=/
<title>Sosse</title>
浏览器访问 http://<服务器IP>/,用 admin / admin 登录即进入搜索门户(首次登录后立即修改密码)。
4.12 启动爬虫
systemd 方式下 sosse-crawler 服务已在后台常驻;如需临时手动爬取,用官方命令:
sudo -u www-data /opt/sosse-venv/bin/sosse-admin crawl --one-shot --collection 1 http://example.com/
⚠️ v1.14.2 实测:
crawl命令带 URL 参数时必须同时传--collection <ID>,否则报错退出(详见"八、常见问题"Q3)。
五、在线安装方案 B:官方 Debian 仓库(Debian 13)
5.1 方案说明
Sosse 官方维护 apt 仓库(piggledy.org),提供 Debian 包 sosse,包内自带 uWSGI 配置、Nginx 站点模板与 sosse-uwsgi/sosse-crawler 两个 systemd 单元,安装后只需初始化数据库即可使用。适合 Debian 12 (bookworm)/13 (trixie) 服务器。
5.2 导入 GPG key 并配置仓库
apt update
apt install -y curl gpg
mkdir -p /etc/keyrings/
curl https://piggledy.org/repo/apt/debian/public.gpg.key | gpg --dearmor > /etc/keyrings/piggledy.gpg
写 /etc/apt/sources.list.d/piggledy.sources(Debian 13 trixie):
Types: deb
URIs: https://piggledy.org/repo/apt/debian
Suites: trixie
Components: main
Signed-By: /etc/keyrings/piggledy.gpg
⚠️ Debian 12 (bookworm) 使用一行式源:
echo 'deb [signed-by=/etc/keyrings/piggledy.gpg] http://piggledy.org/repo/apt/debian bookworm main' > /etc/apt/sources.list.d/piggledy.list
刷新源并确认候选版本:
apt update
apt-cache policy sosse
实测回显:
Get:4 https://piggledy.org/repo/apt/debian trixie InRelease [1627 B]
Get:5 https://piggledy.org/repo/apt/debian trixie/main amd64 Packages [605 B]
sosse:
Installed: (none)
Candidate: 1.14.2-1+trixie
Version table:
1.14.2-1+trixie 500
500 https://piggledy.org/repo/apt/debian trixie/main amd64 Packages
5.3 安装 sosse 包
apt install -y sosse
实测回显(节选,实测首尾,包管理器会自动装入 PostgreSQL 17、Nginx 1.26.3、uWSGI、Python 3.13 依赖链):
Creating group 'polkitd' with GID 990.
Creating user 'polkitd' (User for polkitd) with UID 990 and GID 990.
invoke-rc.d: policy-rc.d denied execution of reload.
Processing triggers for libgdk-pixbuf-2.0-0:amd64 (2.42.12+deb13u1) ...
验证安装内容与 systemd 单元:
which sosse-admin
dpkg -L sosse | grep -E 'systemd/system|uwsgi.ini|sites-available'
systemctl list-unit-files | grep sosse
实测回显:
/usr/bin/sosse-admin
/etc/nginx/sites-available/sosse.conf
/etc/sosse/uwsgi.ini
/usr/lib/systemd/system/sosse-crawler.service
/usr/lib/systemd/system/sosse-uwsgi.service
sosse-crawler.service disabled enabled
sosse-uwsgi.service disabled enabled
5.4 初始化数据库
包安装后配置文件已就位,默认 secret_key 已自动生成。写入数据库密码并启动 PostgreSQL:
sed -i 's/^#db_pass=CHANGE ME/db_pass=q1w2e3r4/' /etc/sosse/sosse.conf
grep '^db_pass' /etc/sosse/sosse.conf
systemctl start postgresql
systemctl is-active postgresql
实测回显:
db_pass=q1w2e3r4
active
创建用户与数据库:
su - postgres -c "psql --command=\"CREATE USER sosse WITH PASSWORD 'q1w2e3r4';\""
su - postgres -c "psql --command=\"CREATE DATABASE sosse OWNER sosse;\""
实测回显:
CREATE ROLE
CREATE DATABASE
执行 schema 迁移与预置数据注入(deb 环境下 sosse-admin 已在 PATH):
sosse-admin migrate
sosse-admin update_se
sosse-admin update_mime
sosse-admin default_admin
实测回显(节选尾部):
Applying se.0025_alter_collection_queue_to_any_collection_and_more... OK
Applying sessions.0001_initial... OK
115 new search engines added
8 new MIME handlers added
Default user "admin", with password "admin" was created
⚠️ 若
update_mime报权限错误,说明当前用户不是www-data,改用sudo -u www-data sosse-admin update_mime。
5.5 启用 systemd 服务
逐个启用并启动(官方文档 daemon setup 步骤):
systemctl enable sosse-uwsgi
systemctl enable sosse-crawler
systemctl start sosse-uwsgi
systemctl start sosse-crawler
systemctl is-active sosse-uwsgi; systemctl is-active sosse-crawler
实测回显:
Created symlink '/etc/systemd/system/multi-user.target.wants/sosse-uwsgi.service' → '/usr/lib/systemd/system/sosse-uwsgi.service'.
Created symlink '/etc/systemd/system/multi-user.target.wants/sosse-crawler.service' → '/usr/lib/systemd/system/sosse-crawler.service'.
active
active
deb 包内两个单元文件原文(供 pip 方案参照,见 4.10 节适配说明):
/usr/lib/systemd/system/sosse-uwsgi.service:
[Unit]
Description=Sosse uWSGI server
After=syslog.target network.target postgresql.service
[Service]
ExecStartPre=-+mkdir -p /run/sosse /var/lib/sosse/downloads /var/lib/sosse/screenshots /var/lib/sosse/html /var/lib/sosse/browser_config /var/www/.mozilla /var/www/.cache /var/log/sosse
ExecStartPre=-+touch /var/log/sosse/crawler.log /var/log/sosse/debug.log /var/log/sosse/main.log /var/log/sosse/webserver.log /var/log/sosse/webhooks.log
ExecStartPre=-+chown www-data:www-data /run/sosse /var/lib/sosse/downloads /var/lib/sosse/screenshots /var/lib/sosse/html /var/lib/sosse/browser_config /var/www/.mozilla /var/www/.cache
ExecStartPre=-+chown www-data:www-data -R /var/log/sosse/
ExecStart=/usr/bin/uwsgi --uid www-data --gid www-data --plugin python3 --ini /etc/sosse/uwsgi.ini \
--logto /var/log/uwsgi/sosse.log
RuntimeDirectory=
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all
[Install]
WantedBy=multi-user.target
/usr/lib/systemd/system/sosse-crawler.service:
[Unit]
Description=Sosse crawler
After=syslog.target network.target postgresql.service
[Service]
ExecStartPre=-+mkdir -p /run/sosse /var/lib/sosse/downloads /var/lib/sosse/screenshots /var/lib/sosse/html /var/lib/sosse/browser_config /var/www/.mozilla /var/www/.cache /var/log/sosse
ExecStartPre=-+touch /var/log/sosse/crawler.log /var/log/sosse/debug.log /var/log/sosse/main.log /var/log/sosse/webserver.log /var/log/sosse/webhooks.log
ExecStartPre=-+chown www-data:www-data /run/sosse /var/lib/sosse/downloads /var/lib/sosse/screenshots /var/lib/sosse/html /var/lib/sosse/browser_config /var/www/.mozilla /var/www/.cache
ExecStartPre=-+chown www-data:www-data -R /var/log/sosse/
ExecStart=/usr/bin/sosse-admin crawl
User=www-data
Group=www-data
RuntimeDirectory=
Restart=always
KillSignal=SIGQUIT
Type=simple
NotifyAccess=all
[Install]
WantedBy=multi-user.target
5.6 切换 Nginx 站点
包自带的 Nginx 站点模板默认未启用(安装时系统默认站仍在),按官方文档启用:
rm -f /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/sosse.conf /etc/nginx/sites-enabled/
systemctl restart nginx
5.7 验证安装
curl -sL -o /dev/null -w 'HTTP=%{http_code} URL=%{url_effective}\n' http://127.0.0.1/
curl -sL http://127.0.0.1/ | grep -o '<title>[^<]*</title>'
实测回显(切换站点前默认站返回 "Welcome to nginx!",切换后):
HTTP=200 URL=http://127.0.0.1/login/?next=/
<title>Sosse</title>
浏览器访问 http://<服务器IP>/,admin / admin 登录。
六、方案对比与选择建议
| 维度 | 方案 A:pip + venv | 方案 B:官方 deb 仓库 |
|---|---|---|
| 适用系统 | 任意有 Python 3.11+ 的 Linux | Debian 12/13(bookworm/trixie) |
| 版本跟进 | PyPI 实时(1.14.2) | 官方仓库同步(1.14.2-1+trixie) |
| systemd 单元 | 需自建(参照 deb 单元适配路径) | 包内自带,开箱即用 |
| uWSGI/Nginx 配置 | 手工写配置文件 | 包内自带 uwsgi.ini 与站点模板 |
| 升级方式 | pip install -U sosse | apt update && apt upgrade |
| 依赖管理 | venv 隔离,pip 解析 | apt 统一(系统级 Python) |
| 是否需联网 | 需访问 PyPI | 需访问 piggledy.org |
选型建议:Debian/Ubuntu 生产服务器优先方案 B(单元、配置全部由包管理器接管,升级回滚可控);非 Debian 系(RHEL/Rocky/Alma)或需要多实例、自定义 Python 版本时用方案 A。两方案不要混装在同一台机器(/etc/sosse/sosse.conf 会互相覆盖)。
七、配置说明
安装完成后与运行直接相关的文件与目录布局(两方案一致):
| 路径 | 用途 |
|---|---|
| /etc/sosse/sosse.conf | 主配置文件([common]/[webserver]/[crawler] 三节) |
| /etc/sosse/uwsgi.ini | uWSGI 应用服务器配置 |
| /etc/sosse/uwsgi.params | Nginx→uWSGI 协议参数表(方案 A 需手工创建) |
| /etc/nginx/sites-available/sosse.conf | Nginx 站点配置 |
| /var/lib/sosse/static/ | collectstatic 输出的静态文件 |
| /var/lib/sosse/html/ | HTML 快照归档目录 |
| /var/lib/sosse/screenshots/ | 页面截图目录 |
| /var/lib/sosse/downloads/ | 爬虫临时下载目录 |
| /var/log/sosse/ | crawler/debug/main/webserver/webhooks 五类日志 |
| /var/log/uwsgi/sosse.log | uWSGI 运行日志 |
最常用的首装配置项(/etc/sosse/sosse.conf):
db_pass:PostgreSQL 密码(必改);allowed_host:Web 服务 FQDN,默认*任意主机,生产建议改为实际域名;anonymous_search:默认false(必须登录才能搜索),对外开放检索时改true;crawler_count:爬虫并发数,默认取 CPU 核数一半;proxy:爬虫出网代理(如http://192.168.0.1:8080/)。
修改配置后需重启服务生效:systemctl restart sosse-uwsgi 与 systemctl restart sosse-crawler(逐条执行,每行一个单元)。全部参数的逐项说明见专栏《Sosse 1.14.2 配置参数详解》篇。
八、常见问题(FAQ)
Q1:uWSGI 启动报 bind(): Permission denied,socket 创建失败?
实测现象:/var/log/uwsgi/sosse.log 中出现:
error removing unix socket, unlink(): Permission denied [core/socket.c line 198]
bind(): Permission denied [core/socket.c line 230]
定位:/run/sosse 目录权限被误设为 666(rw-rw-rw-,无执行位),www-data 无法在该目录创建 socket 文件。解决:
chmod 777 /run/sosse # 或 chown www-data:www-data /run/sosse && chmod 755 /run/sosse
systemctl restart sosse-uwsgi
复验:ls -la /run/sosse/uwsgi.sock 应看到 srwxr-xr-x ... www-data www-data ... uwsgi.sock。
Q2:爬取的文档入库后 error 字段报 Unable to obtain driver for chrome?
实测现象(se_document.error 字段,节选):
ValueError: The path is not a valid file: /usr/bin/chromedriver
selenium.common.exceptions.NoSuchDriverException: Message: Unable to obtain driver for chrome
定位:该域名(Domain)的抓取模式解析为浏览器渲染(默认 detect 自动检测),但服务器未安装 Chromium/ChromeDriver。两种解决:
- 静态页面场景:管理后台 Domains 页把该域名 Browse mode 改为
requests(或数据库UPDATE se_domain SET browse_mode='requests' WHERE domain='...'),实测改后重爬成功入库; - 确需 JS 渲染/截图:安装浏览器与驱动,Debian/Ubuntu 用
apt install chromium chromium-driver(或 Firefox + Geckodriver,官方文档给出 v0.36.0 的安装命令,Bookworm 用 v0.35.0)。
Q3:sosse-admin crawl <url> 报 --collection parameter is required?
实测回显:
Error: --collection parameter is required when URLs are provided.
定位:v1.14.2 中给 crawl 命令追加 URL 时必须显式指定 collection ID。默认集合 ID 为 1(Default),可用 sudo -u www-data sosse-admin crawl --one-shot --collection 1 http://example.com/ 执行;collection 列表可在管理后台 Collections 页查看。
Q4:update_mime 报权限错误或写不进数据目录?
官方要求该命令必须以 www-data 运行(需要写 /var/lib/sosse/ 与日志目录)。root 下执行用 sudo -u www-data sosse-admin update_mime;无 sudo 的最小化系统用 su www-data -s /bin/bash -c 'sosse-admin update_mime'。成功标志是输出 8 new MIME handlers added(数量随版本可能不同)。
Q5:访问 80 端口显示 "Welcome to nginx!" 而不是 Sosse?
默认站点 default 仍占用 80 端口的 default_server。执行官方切换步骤:rm -f /etc/nginx/sites-enabled/default、ln -s /etc/nginx/sites-available/sosse.conf /etc/nginx/sites-enabled/、systemctl restart nginx(实测切换前 curl 返回 nginx 欢迎页,切换后返回 http://127.0.0.1/login/?next=/)。
Q6:admin 密码忘了怎么办?
用 Django 管理命令重置:sosse-admin changepassword admin,按提示输入两次新密码即可(该命令来自 Django auth 模块,Sosse 的 sosse-admin 兼容全部 Django 管理命令)。
九、卸载与清理
方案 A(pip 安装)卸载:
systemctl disable --now sosse-uwsgi
systemctl disable --now sosse-crawler
rm -f /etc/systemd/system/sosse-uwsgi.service /etc/systemd/system/sosse-crawler.service
systemctl daemon-reload
rm -f /etc/nginx/sites-enabled/sosse.conf /etc/nginx/sites-available/sosse.conf
systemctl restart nginx
rm -rf /opt/sosse-venv /etc/sosse /var/lib/sosse /var/log/sosse /run/sosse /var/log/uwsgi
su - postgres -c "psql --command=\"DROP DATABASE IF EXISTS sosse;\""
su - postgres -c "psql --command=\"DROP USER IF EXISTS sosse;\""
方案 B(deb 安装)卸载:
systemctl disable --now sosse-uwsgi
systemctl disable --now sosse-crawler
apt purge -y sosse
rm -f /etc/apt/sources.list.d/piggledy.sources /etc/keyrings/piggledy.gpg
apt update
su - postgres -c "psql --command=\"DROP DATABASE IF EXISTS sosse;\""
su - postgres -c "psql --command=\"DROP USER IF EXISTS sosse;\""
⚠️ 若 PostgreSQL 本身是随 sosse 依赖装入且无其他业务使用,可再执行
apt purge -y postgresql清理;卸载数据库前务必备份(pg_dump sosse)。
十、参考链接
- 官方安装文档总览:https://sosse.readthedocs.io/en/stable/install.html
- pip 安装文档(方案 A 依据):https://sosse.readthedocs.io/en/stable/install/pip.html
- Debian 安装文档(方案 B 依据):https://sosse.readthedocs.io/en/stable/install/debian.html
- PyPI 包页面:https://pypi.org/project/sosse/
- GitLab 主仓库(stable 分支):https://gitlab.com/biolds1/sosse
- 官方 deb 仓库:https://piggledy.org/repo/apt/debian
- 升级指引(pip):https://sosse.readthedocs.io/en/stable/install/pip_upgrades.html
- 升级指引(Debian):https://sosse.readthedocs.io/en/stable/install/debian_upgrades.html
- Geckodriver 官方发布页:https://github.com/mozilla/geckodriver/releases
站内相关:《Fess 15.9.0 介绍与选型指南》(重型方案对照)、《Yacy 1.942 介绍与选型指南》。