Wiki知识库 活跃维护

wikipedia-mirror

pirate/wikipedia-mirror

🌐 使用三种不同方法运行完整离线镜像 Wikipedia.org 的指南和工具:Nginx 缓存代理、Kiwix ZIM 转储,以及 MediaWiki/XOWA XML 转储

552
Stars 标星
33
Forks 分支
9
Watchers 关注
0
Open Issues
PLpgSQL
主要语言
MIT
开源协议
10.5 MB
仓库大小
1 年前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:pirate/wikipedia-mirror
git clone https://github.com/pirate/wikipedia-mirror.git
git clone git@github.com:pirate/wikipedia-mirror.git
README.md master

机器翻译正文由机器翻译自项目原始文档(英文),排版经程序统一处理,可能存在偏差,请以原项目仓库为准。

如何自建 Wikipedia.org 镜像:
使用 Nginx、Kiwix 或 MediaWiki/XOWA Docker

最初发表于 2019-09-08 在 docs.sweeting.me。
漂亮的 HTML 版本在这里,此指南的 源代码在 Github 上。


概述了使用三种不同方法设置完整 Wikipedia.org 镜像的方式。
演示: https://other-wiki.zervice.io

介绍

你知道 Wikipedia.org 只是运行在约 ~350 服务器 上的大多数传统 LAMP 堆栈吗?(截至 2019 年)

不幸的是,Wikipedia 吸引了许多来自个人和国家的仇恨,他们反对某些文章或想要向公众隐藏信息。

Wikipedia 的基础设施(美国 2 个机架,荷兰 1 个机架,新加坡 1 个机架,加上 CDN)并不总能抵御大规模 DDoS 攻击,但幸运的是,他们定期向公众提供数据库转储和静态 HTML 档案,并且具有宽松的许可,允许重新托管并进行修改(即使是盈利性也可以!)。

在中国长大的时候,在全球金融危机后我经常遇到 Wikipedia 无法访问,鉴于近期的 DDoS 攻击,我决定为人们制作一个指南,帮助揭开运行镜像网站的过程。我也是信息自由访问的坚定倡导者,并且是一个名为 ArchiveBox 的主要互联网档案项目的维护者(一个由无头 Chromium 驱动的自托管互联网存档工具)。

本指南的目的是鼓励人们使用这些公开可用的数据库转储来托管 Wikipedia 镜像,从而防止恶意行为者成功限制公众访问这一 世界上最好的信息来源之一。


快速开始

用3个步骤创建一个完整的英文 Wikipedia.org 克隆。

演示: https://other-wiki.zervice.io

# 1. Download the Kiwix-Serve static binary from https://www.kiwix.org/en/downloads/kiwix-serve/
wget 'https://download.kiwix.org/release/kiwix-tools/kiwix-tools_linux-x86_64.tar.gz'
tar -xzf kiwix-tools_linux-x86_64-3.0.1.tar.gz && cd kiwix-tools_linux-x86_64-3.0.1

# 2. Download a compressed Wikipedia dump from https://dumps.wikimedia.org/other/kiwix/zim/wikipedia/ (79GB, images included!)
wget --continue "https://download.kiwix.org/zim/wikipedia_en_all_maxi.zim"

# 3. Start the kiwix server, then visit http://127.0.0.1:8888
./kiwix-serve --verbose --port 8888 "$PWD/wikipedia_en_all_maxi_2018-10.zim"

入门指南

Wikipedia.org 本身由一个名为 WikiMedia 的 PHP 后端驱动,使用 MariaDB 进行数据存储,Varnish 和 Memcached 用于请求和查询缓存,ElasticSearch 用于全文搜索。生产环境的 Wikipedia.org 还在 MediaWiki 之上运行许多额外的插件和模块。

🖥 有几种方法可以托管你自己的 Wikipedia 镜像(复杂程度不同):

  1. 在 Wikipedia.org 前运行缓存代理(按需使用磁盘进行缓存,CPU 占用低)
  2. 使用 Kiwix 提供静态 HTML ZIM 存档(压缩存档 10~80GB,CPU 占用低)
  3. 运行完整的 MediaWiki 服务器(最难设置,XML 和数据库约 600GB,CPU 占用高)

💅不要指望第一次就完美呈现

设置 Wikipedia 镜像需要在软件、数据和运维之间进行复杂的协调,因此建议初学者先使用静态 HTML 存档或代理,然后再尝试运行完整的 MediaWiki 服务器。用户应期望镜像能够提供带图片和搜索功能的文章,但不应期望第一次或第二次就能完全像 Wikipedia.org。

✅ 选择方法

本指南中的每种方法都有优缺点。缓存代理是最轻量的选项,但如果上游服务器宕机,并且请求未被缓存,将会显示 404,因此它不是完全冗余的镜像。静态 ZIM 镜像下载和托管轻量(请求易于缓存),具备全文搜索,但没有交互功能、讨论页历史或 Wikipedia 风格的分类页面(不过这些功能即将推出)。MediaWiki/XOWA 最复杂,但可以提供完整的工作镜像,包括历史修订、用户、讨论页、搜索等。

运行完整的 MediaWiki 服务器是设置最困难的方法。根据可用系统资源,预计需要数天或数周,并且预计会看起来有些问题,因为生产环境的 Wikipedia.org 团队运行了许多额外的调整和插件,本地设置需要额外工作。

更多信息,请参见 Wikipedia.org 所有可用转储类型及描述索引。

负责的重新托管警告

⚠️请注意,运行公开可访问的 Wikipedia.org 镜像时,如进行任何形式的框架/内容修改/广告,是强烈不建议的。框架镜像/代理镜像仍然是私人使用的好选择,但如果你为公共使用设置代理,需要采取额外措施以负责任地进行镜像(例如 robots:noindex、撤下联系信息、屏蔽未授权图片等)。

有些镜像每次有人请求页面时,会直接从维基媒体服务器加载页面。他们会以某种方式修改文本,比如在页面中插入广告,然后再发送给读者。这称为远程加载,这是对维基媒体服务器资源的不可接受的使用。 即使是流量不大的远程加载网站,也可能因搜索引擎网络爬虫而对我们的服务器造成显著负荷。 https://en.wikipedia.org/wiki/Wikipedia:Mirrors_and_forks#Remote_loading

幸运的是,无论你选择如何重新托管维基百科的文本,只要你不删除其版权声明,就不会违反任何条款和条件或侵犯版权(但请注意,Wikimedia.org上的文章图片和视频可能不允许再使用)。

对英文维基百科的每项贡献都获得了重新使用许可,包括商业性、盈利性网站。只要遵守相应的许可,转载不一定构成版权侵权。 https://en.wikipedia.org/wiki/Wikipedia:Mirrors_and_forks#Things_you_need_to_know


教程


先决条件

  1. 配置一台服务器作为你的维基百科镜像

    你可以使用像 DigitalOcean、Vultr、Hetzner 等廉价 VPS 提供商。对于静态 ZIM 存档和 MediaWiki 服务器方法,你将需要大量磁盘空间,因此使用带有廉价外部硬盘的家庭服务器可能是更好的选择。

    下面的设置示例基于运行在家庭服务器上的 Ubuntu 19.04,但是它们应该可以在许多其他操作系统上通过最小调整工作(例如 FreeBSD、macOS、Arch 等)。

  2. 购买新域名或创建子域名来托管你的镜像

    你可以使用 Google Domains、NameCheap、GoDaddy 等,任何注册商都可以。

    在下面的设置示例中,将 wiki.example.com 替换为你选择的域名。

  3. 将域名的 DNS 记录指向你的镜像服务器

    通过你的 DNS 提供商(例如 NameCheap、DigitalOcean、CloudFlare 等)配置这些记录:

    • wiki.example.com A -> your server's public ip (根域名)
    • en.wiki.example.com CNAME -> wiki.example.com (维基站点域名)
    • upload.wiki.example.com CNAME -> wiki.example.com (上传/媒体域名)
  4. 创建一个目录来存储项目,并创建 .env 文件用来保存你的配置选项

    并非所有方法都需要这些值,但只在一个地方定义全部值更容易,之后可以删除那些实际不需要的内容。

    mkdir -p /opt/wiki                  # change PROJECT_DIR below to match
    nano /opt/wiki/.env

    Create the .env config file in dotenv/bash syntax with the contents below.
    Make sure to replace the example values like wiki.example.com with your own.

    PROJECT_DIR="/opt/wiki"                   # folder for all project state
    CONFIG_DIR="$PROJECT_DIR/etc/nginx"
    CACHE_DIR="$PROJECT_DIR/data/cache"
    CERTS_DIR="$PROJECT_DIR/data/certs"
    LOGS_DIR="$PROJECT_DIR/data/logs"
    
    LANG="en"                                 # Wikipedia language to mirror
    LISTEN_PORT_HTTP="80"                     # public-facing HTTP port to bind
    LISTEN_PORT_HTTPS="443"                   # public-facing HTTPS port to bind
    LISTEN_HOST="wiki.example.com"            # root domain to listen on
    LISTEN_WIKI="$LANG.$LISTEN_HOST"          # wiki domain to listen on
    LISTEN_MEDIA="upload.$LISTEN_HOST"        # uploads domain to listen on
    
    UPSTREAM_HOST="wikipedia.org"             # main upstream domain
    UPSTREAM_WIKI="$LANG.$UPSTREAM_HOST"      # upstream domain for wiki
    UPSTREAM_MEDIA="upload.wikimedia.org"     # upstream domain for uploads
    
    # Only needed if using an nginx reverse proxy:
    SSL_CRT="$CERTS_DIR/$LISTEN_HOST.crt"
    SSL_KEY="$CERTS_DIR/$LISTEN_HOST.key"
    SSL_DH="$CERTS_DIR/$LISTEN_HOST.dh"
    
    CACHE_SIZE="100G"                         # or "500GB", "1GB", "200MB", etc.
    CACHE_REQUESTS="GET HEAD POST"            # or "GET HEAD", "any", etc.
    CACHE_RESPONSES="200 206 302"             # or "200 302 404", "any", etc.
    CACHE_DURATION="max"                      # or "1d", "30m", "12h", etc.
    
    ACCESS_LOG="'$LOGS_DIR/nginx.out' trace"  # or "off", etc.
    ERROR_LOG="'$LOGS_DIR/nginx.err' warn"    # or "off", etc.

    The setup steps below depend on this file existing and the config values being correct,
    so make sure you create it and replace all example values with your own before proceeding!


选择维基百科档案下载

ZIM 静态 HTML 下载

维基百科 HTML 下载以一种高度压缩的网页存档格式提供,称为 ZIM。它们可以通过像 Kiwix(最常用的)这样的 ZIM 服务器提供服务,或者使用 ZimReader、GoZIM 和 其他。

ZIM 档案下载通常每年发布一次,但发布时间表不保证。截至 2019 年 8 月,最新可用的包含所有英文文章的下载是 2018 年 10 月的版本:

wikipedia_en_all_mini_2019-09.zim (torrent) (10GB,迷你英文文章,无图片或视频)

wikipedia_en_all_nopic_2018-09.zim (torrent) (35GB,所有英文文章,无图片或视频)

wikipedia_en_all_maxi_2018-10.zim (torrent) (79GB,所有英文文章含图片,无视频)

wikipedia_en_simple_all_maxi_2020-01.zim (1.6GB,仅限简单维基英文文章,适合测试)

下载你选择的维基百科 ZIM 档案(例如 wikipedia_en_all_maxi_2018-10.zim )

mkdir -p /opt/wiki/data/dumps && cd /opt/wiki/data/dumps

# Download via BitTorrent:
transmission-cli --download-dir . 'magnet:?xt=urn:btih:O2F3E2JKCEEBCULFP2E2MRUGEVFEIHZW'

# Or download via HTTPS from one of the mirrors:
wget -c 'https://dumps.wikimedia.org/other/kiwix/zim/wikipedia/wikipedia_en_all_maxi_2018-10.zim'
wget -c 'https://ftpmirror.your.org/pub/kiwix/zim/wikipedia/wikipedia_en_all_maxi_2018-10.zim'
wget -c 'https://download.kiwix.org/zim/wikipedia/wikipedia_en_all_maxi_2018-10.zim'

# Optionally after download, verify the length (fast) or MD5 checksum (slow):
stat --printf="%s" wikipedia_en_all_maxi_2018-10.zim | grep 83853668638
md5sum wikipedia_en_all_maxi_2018-10.zim | openssl dgst -md5 -binary | openssl enc -base64 | grep 01eMQki29P9vD5F2h6zWwQ

XML 数据库转储

数据库转储通常每月发布。截至2019年8月,包含所有英文文章的最新转储是2019年7月的:

enwiki-20190720-pages-articles.xml.bz2 (15GB,所有英文文章,无图片/视频)

simplewiki-20170820-pages-meta-current.xml.bz2 (180MB,仅简体维基,适合测试)

下载你选择的维基百科 XML 转储(例如 enwiki-20190720-pages-articles.xml.bz2 )

mkdir -p /opt/wiki/data/dumps && cd /opt/wiki/data/dumps

# Download via BitTorrent:
transmission-cli --download-dir . 'magnet:?xl=16321006399&dn=enwiki-20190720-pages-articles.xml.bz2'

# Download via HTTP:
# lol no. no one wants to serve you a 15GB file via HTTP

方法 #1:在 Wikipedia.org 前运行缓存代理

复杂性: 低
最小的设置和操作要求,无需下载大型数据转储。
磁盘空间需求: 按需
磁盘仅在请求页面时使用(根据使用情况可以从1GB到2TB)。
CPU要求: 非常低
三个选项中最低,可以在小型VPS或家庭服务器上运行。
内容新鲜度: 非常新鲜
可配置为无限期缓存内容或为每个请求获取最新数据。

a. 使用 Nginx 运行

在 /opt/wiki/.env 配置文件中设置以下选项:UPSTREAM_HOST=wikipedia.org UPSTREAM_WIKI=en.wikipedia.org UPSTREAM_MEDIA=upload.wikimedia.org

然后按照下文 [Nginx 反向代理] (#) 下的所有设置步骤进行设置 Nginx。

然后重启 nginx 以应用您的 systemctl restart nginx 配置。

您的镜像现在应该正在运行并代理 Wikipedia.org 的请求!

访问 https://en.yourdomainhere.com 以查看实际效果(例如 https://en.wiki.example.com)。

b. 使用 Caddy 运行

或者,查看一个类似的设置,它使用 Caddy 而不是 Nginx 作为反向代理:https://github.com/CristianCantoro/wikiproxy


方法 #2:使用 Kiwix 提供静态 HTML ZIM 存档

复杂度: 中等
静态二进制文件易于运行,但需要下载一个大型转储文件。
磁盘空间要求: > 80GB
ZIM 存档是仅包含静态 HTML 文章的高度压缩集合。
CPU 要求: 非常低
低,特别是在前端有 CDN 的情况下(比代理多,但比完整服务器少)。
内容新鲜度: 经常过时
ZIM 存档由 Wikipedia.org 每年(左右)发布一次。

首先下载一个 ZIM 存档转储,例如 wikipedia_en_all_maxi_2018-10.zim,放入 /opt/wiki/data/dumps,如上所述。

a. 使用 Docker 运行

使用 Docker 以如下方式运行 kiwix-serve:

docker run \
    -v '/opt/wiki/data/dumps:/data' \
    -p 8888:80 \
    kiwix/kiwix-serve \
    'wikipedia_en_all_maxi_2018-10.zim'

或者创建 /opt/wiki/docker-compose.yml 并运行 docker-compose up :

version: '3'
services:
  kiwix:
    image: kiwix/kiwix-serve
    command: 'wikipedia_en_all_maxi_2018-10.zim'
    ports:
      - '8888:80'
    volumes:
      - "./data/dumps:/data"

b. 使用静态二进制文件运行

  1. 为您的操作系统和CPU架构下载最新的 kiwix-serve 二进制文件

    在此处查找适合您架构的最新版本,并复制其URL以在下面下载:
    https://download.kiwix.org/release/kiwix-tools/

    cd /opt/wiki
    wget 'https://download.kiwix.org/release/kiwix-tools/kiwix-tools_linux-x86_64-3.0.1.tar.gz'
    tar -xzf 'kiwix-tools_linux-x86_64-3.0.1.tar.gz'
    mv 'kiwix-tools_linux-x86_64-3.0.1' 'bin'
  2. 运行 kiwix-serve,并传入一个监听端口以及你的 ZIM 存档文件

    /opt/wiki/bin/kiwix-serve --port 8888 /opt/wiki/data/dumps/wikipedia_en_all_maxi_2018-10.zim

    Your server should now be running!

    Visit http://en.yourdomainhere.com:8888 to see it in action!

可选的 Nginx 反向代理

在您的 /opt/wiki/.env 配置文件中设置以下选项:

UPSTREAM_HOST=localhost:8888
UPSTREAM_WIKI=localhost:8888
UPSTREAM_MEDIA=upload.wikimedia.org

然后在 Nginx 反向代理 下运行下面的所有设置步骤来配置 Nginx。要在 docker-compose 中和 Kiwix 一起运行 nginx,请参见下面的 通过 docker-compose 运行 Nginx 部分。

现在您的镜像应该已经运行并将请求代理到 kiwix-serve!

访问 https://en.yourdomainhere.com 来查看其运行效果(例如 https://en.wiki.example.com)。


方法 #3:运行完整的 MediaWiki 服务器

复杂性: 非常高
复杂的多组件设置,具有复杂的设置过程和高资源使用。
磁盘空间要求: > 550GB(导入阶段需要超过 2TB)
未压缩的数据库非常大(包含修订历史和存根的多个 TB)。
CPU 要求: 适中(导入阶段非常高)
取决于使用情况,但这是三个选项中要求最高的。
内容新鲜度: 非常新
Wikipedia.org 每月(左右)发布更新的数据库转储。

首先下载一个数据库转储,例如 enwiki-20190720-pages-articles.xml.bz2 到 /opt/wiki/data/dumps,如上所述。

如果需要解压,pbzip2 比 bzip2 快得多:

pbzip2 -v -d -k -m10000 enwiki-20190720-pages-articles.xml.bz2
# -m10000 tells it to use 10GB of RAM, adjust accordingly

a. 在 Docker 中运行 XOWA

https://github.com/QuantumObject/docker-xowa

docker run \
    -v /opt/wiki/data/xowa:/opt/xowa/ \
    -p 8888 \
    sblop/xowa_offline_wikipedia
version: '3'
services:
  xowa:
    image: sblop/xowa_offline_wikipedia
    ports:
      - 8888:80
    volumes:
      - './data/xowa:/opt/xowa'

b. 在 Docker 中运行 MediaWiki

配置你的 docker-compose.yml 文件

默认 MediaWiki 配置文件: https://phabricator.wikimedia.org/source/mediawiki/browse/master/includes/DefaultSettings.php

创建以下 /opt/wiki/docker-compose.yml 文件然后运行 docker-compose up :

version: '3'
services:
  database:
    image: mariadb
    command: --max-allowed-packet=256M
    environment:
      MYSQL_DATABASE: wikipedia
      MYSQL_USER: wikipedia
      MYSQL_PASSWORD: wikipedia
      MYSQL_ROOT_PASSWORD: wikipedia

  mediawiki:
    image: mediawiki
    ports:
      - 8080:80
    depends_on:
      - database
    volumes:
      - './data/html:/var/www/html'
      # After initial setup, download LocalSettings.php into ./data/html
      # and uncomment the following line, then docker-compose restart
      # - ./LocalSettings.php:/var/www/html/LocalSettings.php

然后将 XML 转储导入 MediaWiki 数据库:

不要尝试直接使用 importDump.php 导入,它将花费数月时间:

php /var/www/html/maintenance/importDump.php enwiki-20170320-pages-articles-multistream.xml

相反,将 XML 转储转换为压缩的 SQL 块,然后单独导入:

警告:对于大型导入(例如英语),此过程仍可能根据系统需要 5 天时间。

apt install -y openjdk-8-jre zstd pbzip2

# Download patched mwdumper version and pre/post import SQL scripts
wget "https://github.com/pirate/wikipedia-mirror/raw/master/bin/mwdumper-1.26.jar"
wget "https://github.com/pirate/wikipedia-mirror/raw/master/preimport.sql"
wget "https://github.com/pirate/wikipedia-mirror/raw/master/postimport.sql"

DUMP_NAME="enwiki-20190720-pages-articles"

# Decompress the XML dump using all available cores and 10GB of memory
pbzip2 -v -d -k -m10000 "$DUMP.xml.bz2"

# Convert the XML file into a SQL file using mwdumper
java -server \
    -jar ./wikipedia-importing-tools/mwdumper-1.26.jar \
    --format=sql:1.5 \
    "$DUMP.xml" \
> wikipedia.sql

# Split the generated SQL file into compressed chunks
split --additional-suffix=".sql" --lines=1000 wikipedia.sql
for partial in $(ls *.sql); do
    zstd -z $partial
done

# Fix a schema issue that may otherwise cause import bugs
docker-compose exec database \
    mysql --user=wikipedia --password=wikipedia --database=wikipedia \
        "ALTER TABLE page ADD page_counter bigint unsigned NOT NULL default 0;"

# Import the compressed chunks into the database
for partial in $(ls *.sql.zst); do
    zstd -dc preimport.sql.zst $partial postimport.sql.zst \
    | docker-compose exec database \
        mysql --force --user=wikipedia --password=wikipedia --database=wikipedia
done

Credit for these steps goes to https://github.com/wayneworkman/wikipedia-importing-tools.

可选 Nginx 反向代理

在你的 /opt/wiki/.env 配置文件中设置以下选项:

UPSTREAM_HOST=localhost:8888
UPSTREAM_WIKI=localhost:8888
UPSTREAM_MEDIA=upload.wikimedia.org

然后在 Nginx 反向代理 下运行下面的所有设置步骤以设置 Nginx。要在 docker-compose 中在 MediaWiki 旁边运行 nginx,请参见下面的 通过 docker-compose 运行 Nginx 部分。

您的镜像现在应该正在运行并将请求代理到您的 wiki 服务器!

访问 https://en.yourdomainhere.com 以查看其效果(例如 https://en.wiki.example.com )。


Nginx 反向代理

您可以选择在 kiwix-serve、Wikipedia.org 或 MediaWiki 服务器前面设置 Nginx 反向代理,以添加缓存和 HTTPS 支持。

确保 /opt/wiki/.env 中的选项为您尝试实现的配置类型正确配置。

  • 要在本地主机上在 kiwix-serve 前运行 nginx,请设置:UPSTREAM_HOST=localhost:8888 UPSTREAM_WIKI=localhost:8888 UPSTREAM_MEDIA=upload.wikimedia.org
  • 要在 Wikipedia.org 前运行 nginx,请设置:UPSTREAM_HOST=wikipedia.org UPSTREAM_WIKI=en.wikipedia.org UPSTREAM_MEDIA=upload.wikimedia.org
  • 要在本地主机上的 MediaWiki 服务器前运行 nginx,请设置:UPSTREAM_HOST=localhost:8888 UPSTREAM_WIKI=localhost:8888 UPSTREAM_MEDIA=upload.wikimedia.org
  • 要通过 docker-compose 在 docker 容器前运行 nginx:请参见下文 通过 docker-compose 运行 Nginx 部分。

安装 LetsEncrypt 和 Nginx

# Install the dependencies: nginx and certbot
add-apt-repository -y -n universe
add-apt-repository -y -n ppa:certbot/certbot
add-apt-repository -y -n ppa:nginx/stable
apt update -qq
apt install -y nginx-extras certbot python3-certbot-nginx
systemctl enable nginx
systemctl start nginx

通过 LetsEncrypt 获取 SSL 证书

# Load your config values from step 4 into the environment, and create dirs
source /opt/wiki/.env
mkdir -p "$CONFIG_DIR" "$CACHE_DIR" "$CERTS_DIR" "$LOGS_DIR" 

# Get an SSL certificate and generate the Diffie-Hellman parameters file
certbot certonly \
    --nginx \
    --agree-tos \
    --non-interactive \
    -m "ssl@$LISTEN_HOST" \
    --domain "$LISTEN_HOST,$LISTEN_WIKI,$LISTEN_MEDIA"
openssl dhparam -out "$PROJECT_DIR/data/certs/$DOMAIN.dh" 2048

# Link the certs into your project directory
ln -s /etc/letsencrypt/live/$DOMAIN/fullchain.pem $PROJECT_DIR/data/certs/$DOMAIN.crt
ln -s /etc/letsencrypt/live/$DOMAIN/privkey.pem $PROJECT_DIR/data/certs/$DOMAIN.key

LetsEncrypt 证书必须每 90 天续期一次,否则它们将过期,你将收到“无效证书”错误。要让证书定期自动续期,请添加一个 systemd 定时器或 cron 作业来运行 certbot renew。下面是一个关于如何操作的示例教程:
https://gregchapple.com/2018/02/16/auto-renew-lets-encrypt-certs-with-systemd-timers/

使用你的配置填写 nginx.conf 模板

# Load your config options into the environment
source /opt/wiki/.env

# Download the nginx config template
curl --silent \
    "https://github.com/pirate/wikipedia-mirror/raw/master/etc/nginx/nginx.conf.template" \
    > "$CONFIG_DIR/nginx.conf.template"

# Fill your config options into nginx.conf.template to create nginx.conf
envsubst \
    "$(printf '${%s} ' $(bash -c "compgen -A variable"))"\
    < "$CONFIG_DIR/nginx.conf.template" \
    > "$CONFIG_DIR/nginx.conf"

通过 systemd 运行 Nginx

# Link the your nginx.conf into the system's default nginx config location
ln -s -f "$CONFIG_DIR/nginx.conf" "/etc/nginx/nginx.conf"

# Restart nginx to load the new config
systemctl restart nginx

现在你可以访问 https://en.yourdomainhere.com 来使用 HTTPS 查看它的效果!

如需故障排除,你可以在此找到 nginx 日志: /opt/wiki/data/logs/nginx.err /opt/wiki/data/logs/nginx.out

通过 docker-compose 运行 Nginx

在你的 /opt/wiki/.env 文件中设置配置值,使其对应你想要代理的 Docker 容器的主机名,并调整目录路径为容器内的路径。例如,对于 mediawiki :

UPSTREAM_HOST=mediawiki:8888`
UPSTREAM_WIKI=mediawiki:8888`
UPSTREAM_MEDIA=upload.wikimedia.org

CERTS_DIR=/certs
CACHE_DIR=/cache
LOGS_DIR=/logs

然后按照下面 Nginx 反向代理 中的描述,用 envsubst 重新生成你的 nginx.conf 文件。

然后将 nginx 服务添加到你现有的 /opt/wiki/docker-compose.yml 文件中:

version: '3'
services:

  ...

  nginx:
    image: nginx:latest
    volumes:
      - ./etc/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./data/certs:/certs
      - ./data/cache:/cache
      - ./data/logs:/logs
    ports:
      - 80:80
      - 443:443

进一步阅读

本站来源与版权声明
  • 本文标题:wikipedia-mirror - 🌐 使用三种不同方法运行完整离线镜像 Wikiped
  • 本文链接:https://www.cn121.com/wiki/pirate-wikipedia-mirror.html
  • 原项目:pirate/wikipedia-mirror 版权归原作者 pirate 及贡献者所有
  • 收录信息:本站于 2026-10-10 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
  • 开源协议:收录时本项目采用 MIT(查看 LICENSE 原文),本站译文为其衍生内容;使用、修改、分发请以该仓库 LICENSE 原文为准。
  • 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 pirate/wikipedia-mirror。
  • 翻译说明:本页正文为人工智能生成内容——由机器翻译对原项目 README 初译、经程序校验排版,可能存在错漏,请以原项目文档为准。
  • 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
  • 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。