add: mediawiki

This commit is contained in:
Skyone 2024-12-29 11:08:26 +08:00
parent c71aa5ebc3
commit b2e736129a
Signed by: skyone-wzw
GPG Key ID: 088762FAD7C84961
6 changed files with 191 additions and 0 deletions

@ -0,0 +1,6 @@
# Paste the contents of the downloaded LocalSettings.php before this line
# 将下载的 LocalSettings.php 的内容粘贴到此行之前
$wgScriptPath = "";
$wgArticlePath = "/$1";
$wgResourceBasePath = $wgScriptPath;

25
mediawiki/README.md Normal file

@ -0,0 +1,25 @@
# MediaWiki
本配置使用 Nginx 作为反向代理,实现了:
* 相对于Apache占用更少的资源
* 安全php 限制 open_basedir
* 缓存,基于 Nginx
* 压缩,基于 opcache
* 伪静态,使用 Nginx 的 rewrite (`/index.php?title=xxx:xxx` -> `/xxx:xxx`)
首先运行容器(详见 [setup.sh](setup.sh)),按照官方流程下载 `LocalSettings.php` 文件。
将官方给出的配置文件内容粘贴到我提供的 [`LocalSettings.php`](LocalSettings.php) 的前面(即以下内容放到官方配置文件的后面)。
```php
$wgScriptPath = "";
$wgArticlePath = "/$1";
$wgResourceBasePath = $wgScriptPath;
```
取消 `# -./LocalSettings.php:/var/www/html/LocalSettings.php` 的注释,重新运行容器。
```shell
docker-compose down
docker-compose up -d
```

@ -0,0 +1,26 @@
FROM php:fpm
ENV TZ=Asia/Shanghai
RUN echo 'Acquire::Check-Valid-Until "false";' > /etc/apt/apt.conf.d/90nocheckvalid && \
echo 'Acquire::Check-Date "false";' >> /etc/apt/apt.conf.d/90nocheckvalid && \
sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources && \
apt-get update && apt-get install -y \
libzip-dev \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libicu-dev \
zlib1g \
git \
diffutils \
zlib1g-dev && \
apt-get clean && rm -rf /var/lib/apt/lists/* && \
rm /etc/apt/apt.conf.d/90nocheckvalid
RUN pecl install apcu && \
docker-php-ext-enable apcu && \
echo "extension=apcu.so" >> /usr/local/etc/php/php.ini && \
echo "apc.enable_cli=1" >> /usr/local/etc/php/php.ini && \
echo "apc.enable=1" >> /usr/local/etc/php/php.ini && \
docker-php-ext-configure gd --with-freetype --with-jpeg && \
docker-php-ext-install -j$(nproc) gd && \
docker-php-ext-install intl opcache

@ -0,0 +1,86 @@
server {
listen 80;
set $base /var/www/html;
set $data /var/www/data;
set $php_cgi "mediawiki:9000";
root $base;
resolver 127.0.0.11 ipv6=off;
# security headers
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: ws: wss: data: blob: 'unsafe-inline' 'unsafe-eval'; frame-ancestors 'self';" always;
add_header Permissions-Policy "interest-cohort=()" always;
# . files
location ~ /\.(?!well-known) {
deny all;
}
# logging
access_log /var/log/nginx/access.log combined buffer=512k flush=1m;
error_log /var/log/nginx/error.log warn;
# index.php
index index.php;
# gzip
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;
# index.php fallback
location / {
try_files $uri $uri/ @mediawiki;
}
location @mediawiki {
rewrite ^/(.*)$ /index.php?title=$1 last;
}
# additional config
# favicon.ico
location = /favicon.ico {
log_not_found off;
}
# robots.txt
location = /robots.txt {
log_not_found off;
}
# assets, media
location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
expires 7d;
}
# svg, fonts
location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
add_header Access-Control-Allow-Origin "*";
expires 7d;
}
# handle .php
location ~ \.php$ {
fastcgi_pass $php_cgi;
# 404
try_files $fastcgi_script_name =404;
# default fastcgi_params
include fastcgi_params;
# fastcgi settings
fastcgi_index index.php;
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
# fastcgi params
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$base/:$data/:/usr/bin/:/usr/lib/php/:/tmp/";
}
}

@ -0,0 +1,41 @@
version: "3.8"
services:
nginx:
container_name: mediawiki-nginx
image: nginx:latest
restart: unless-stopped
networks:
- proxy
- mediawiki
volumes:
- "./config:/etc/nginx/conf.d"
- "/etc/localtime:/etc/localtime:ro"
- "./html:/var/www/html"
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
- "traefik.http.routers.mediawiki.Rule=Host(`www.wiki.com`)"
- "traefik.http.routers.mediawiki.service=mediawiki"
- "traefik.http.routers.mediawiki.entrypoints=websecure"
- "traefik.http.services.mediawiki.loadBalancer.server.port=80"
mediawiki:
container_name: mediawiki
image: luotianyi/mediawiki-fpm:latest
restart: unless-stopped
build:
context: build
networks:
- mediawiki
volumes:
- "/etc/localtime:/etc/localtime:ro"
- "./html:/var/www/html"
- "./data:/var/www/data"
# - "./LocalSettings.php:/var/www/html/LocalSettings.php"
networks:
proxy:
external: true
mediawiki:
name: mediawiki

7
mediawiki/setup.sh Normal file

@ -0,0 +1,7 @@
# https://www.mediawiki.org/wiki/Download
curl https://releases.wikimedia.org/mediawiki/1.43/mediawiki-1.43.0.zip -o mediawiki.zip
unzip mediawiki.zip
mv mediawiki-1.43.0 html
docker-compose build
docker-compose up -d