页面“Redis常用操作”与“Docker 安装mediawiki”之间的差异

来自linux中国网wiki
(页面间的差异)
跳到导航 跳到搜索
 
 
第1行: 第1行:
 
+
=pre=
[[Redis运维]]
+
==debian docker==
 
 
=usage=
 
 
 
redis基本命令 String
 
 
 
 
<pre>
 
<pre>
 +
apt update #on vps
 +
apt install docker.io docker-compose -y
 +
sudo usermod -aG docker $USER </pre>
  
redis-cli  -h  127.0.0.1
 
127.0.0.1:6379> Auth upassword
 
  
 +
==** nginx ==
 +
<pre>apt install nginx
 +
#
 +
    upstream dockerwiki {
 +
        server  10.138.132.61:8080 weight=5;
 +
        keepalive      64;
 +
    }
  
 +
server{
 +
listen  80;
 +
server_name  wiki.linuxchina.net;
  
 +
location / {
 +
        proxy_pass        http://dockerwiki; #或者直接写ip啦
 +
        proxy_http_version  1.1;
 +
        proxy_set_header  Host            $host:80;
 +
        proxy_set_header  X-Real-IP        $remote_addr;
 +
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
 +
}
  
set hey you
+
access_log  /var/log/nginx/wiki.linuxaccess.log;
 
+
}
set love you
 
 
 
redis> SET key1 "Hello"
 
"OK"
 
redis> SET key2 "World"
 
"OK"
 
redis> DEL key1 key2 key3
 
(integer) 2
 
 
 
 
 
 
 
keys *
 
 
</pre>
 
</pre>
https://redis.io/commands/del
 
 
  
<pre>
+
有时 80不通  重启机器后好了 应该 是firewalld 导致
SETEX 命令的效果和以下两个命令的效果类似:
 
  
SET key value
 
EXPIRE key seconds  # 设置生存时间
 
  
SETEX 和这两个命令的不同之处在于 SETEX 是一个原子(atomic)操作, 它可以在同一时间内完成设置值和设置过期时间这两个操作, 因此 SETEX 命令在储存缓存的时候非常实用。
+
https://blog.csdn.net/yinlongfei_love/article/details/81085761 解决 413 Request Entity Too Large
  
  
 +
==[[Docker 安装 Memcached]] ==
  
 +
=install and  config=
 +
==201910==
  
</pre>
+
===mariadb 要注意的===
==usage from 运维开发与运维==
 
 
<pre>
 
<pre>
 +
密码太简单改了一下  在dockercomps 文件里面改是没用的
  
创建新列表
+
  要登录root mysql 再用上面 的授权  然后 改 wiki的配置文件  不然
 
+
Original exception: [c1fa6e2877bda66dceebe4ab] 2019-10-16 02:25:03: Fatal exception of type "Wikimedia\Rdbms\DBConnectionError"
127.0.0.1:6379> rpush listkey c java b a
 
(integer) 4
 
127.0.0.1:6379> lrange listkey 0 -1
 
1) "c"
 
2) "java"
 
3) "b"
 
4) "a"
 
 
 
 
 
 
 
 
 
2.4.1
 
1 添加操作
 
 
 
#在 b前插入java
 
127.0.0.1:6379> linsert listkey  before b java
 
(integer) 0
 
127.0.0.1:6379> lrange listkey 0 -1
 
 
 
 
 
2.查找
 
 
 
2 到 4 
 
127.0.0.1:6379> lrange listkey  1  3
 
1) "java"
 
2) "b"
 
3) "a"
 
 
 
 
 
 
 
127.0.0.1:6379> lrange listkey  1  3
 
1) "java"
 
2) "b"
 
3) "a"
 
 
 
3.删除
 
lpop key
 
 
 
(1) 左弹出
 
127.0.0.1:6379> lpop listkey
 
"c"
 
 
 
右弹出
 
rpop key
 
 
 
(3)删除指定元素
 
 
 
 
 
127.0.0.1:6379> lrem listkey 4  a #删除左开始的4个为a的元素
 
(integer) 1
 
 
 
(4)
 
 
 
 
 
127.0.0.1:6379> lrange listkey 0 -1
 
1) "c"
 
2) "java"
 
3) "b"
 
127.0.0.1:6379> ltrim listkey 1 3 #1 到3 被删除了
 
OK
 
127.0.0.1:6379> lrange listkey 0 -1
 
1) "java"
 
2) "b"
 
 
 
4.修改
 
#把第三个改为python
 
127.0.0.1:6379>  rpush listkey c java  b a
 
(integer) 4
 
127.0.0.1:6379> lset listkey 2  python
 
OK
 
 
 
5 阻塞操作
 
blpop
 
brpop
 
 
 
2.4.2 内部编码
 
 
</pre>
 
</pre>
  
===2.5 集合===
+
===docker-compose 安装mediawiki===
 
<pre>
 
<pre>
2.5.1 命令
 
  
 +
# MediaWiki with MariaDB  这里不用再另外安装db了
 +
#
 +
# Access via "http://localhost:8080"
 +
#  (or "http://$(docker-machine ip):8080" if using docker-machine)
 +
version: '3'
 +
services:
 +
  mediawiki:
 +
    image: mediawiki
 +
    restart: always
 +
    ports:
 +
      - 8080:80
 +
    links:
 +
      - database
 +
    volumes:
 +
      - /var/www/html/images
 +
      # After initial setup, download LocalSettings.php to the same directory as
 +
      # this yaml and uncomment the following line and use compose to restart
 +
      # the mediawiki service
 +
      # - ./LocalSettings.php:/var/www/html/LocalSettings.php
 +
  database:
 +
    image: mariadb
 +
    restart: always
 +
    ports:
 +
      - 3306:3306
 +
    environment:
 +
      # @see https://phabricator.wikimedia.org/source/mediawiki/browse/master/includes/DefaultSettings.php
 +
      MYSQL_DATABASE: wiki
 +
      MYSQL_USER: evan
 +
      MYSQL_PASSWORD: eva555 这要尽量难一点
 +
      MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
  
(1) add
 
27.0.0.1:6379> exists myset
 
(integer) 0
 
127.0.0.1:6379> sadd myset a b c
 
(integer) 3
 
127.0.0.1:6379> sadd myset a b
 
(integer) 0
 
 
(2) del
 
127.0.0.1:6379> srem myset a b
 
(integer) 2
 
  
(3) count
 
127.0.0.1:6379> scard myset
 
(integer) 1
 
 
(4) exists
 
 
 
127.0.0.1:6379> sismember myset c
 
(integer) 1
 
 
(5)随机
 
127.0.0.1:6379> sadd myset a b c
 
(integer) 2
 
127.0.0.1:6379> srandmember myset 2
 
1) "a"
 
2) "b"
 
 
(6)
 
 
127.0.0.1:6379> spop myset
 
"a"
 
127.0.0.1:6379> srandmember myset 2
 
1) "c"
 
2) "b"
 
 
7)取得所有
 
127.0.0.1:6379> smembers myset
 
1) "c"
 
2) "b"
 
 
2.集合间操作
 
 
2.集合间操作
 
 
127.0.0.1:6379> SADD user:1:follow it music his sports
 
(integer) 4
 
127.0.0.1:6379> SADD user:2:follow it music his sports
 
(integer) 4
 
 
交集
 
127.0.0.1:6379> sinter user:1:follow user:2:follow
 
1) "sports"
 
2) "it"
 
 
并集
 
127.0.0.1:6379> sunion  user:1:follow user:2:follow
 
1) "sports"
 
2) "his"
 
3) "music"
 
 
(4) 结果保存
 
 
 
4) "it"
 
 
127.0.0.1:6379> sdiff  user:1:follow user:2:follow
 
 
 
2.5.2 内部编码
 
 
127.0.0.1:6379> sadd  setkey 1 2 3 4
 
(integer) 4
 
127.0.0.1:6379> object encoding setkey
 
"intset"
 
 
2.5.3 使用场景
 
 
</pre>
 
</pre>
=== 2.6 有序集合===
+
===wiki configure===
 
<pre>
 
<pre>
2.6.1
 
  
#
+
web安装过程
127.0.0.1:6379> zadd user:ranking 251  tom
 
(integer) 1
 
  
27.0.0.1:6379> zadd user:ranking 1 kris 91 mike  220 frank 220 tim 250 martin
+
Database host:
(integer) 5
 
  
 +
192.168.88.52 #反正是内网IP
  
127.0.0.1:6379> zcard user:ranking
 
(integer) 6
 
  
127.0.0.1:6379> zscore user:ranking tom
 
"251"
 
  
 +
多问我一些问题吧
 +
那里还在要求可以填写缓存什么的
  
排名
+
编辑者
127.0.0.1:6379> zrank user:ranking tom
+
CodeEditor(需要WikiEditor)
(integer) 5
 
127.0.0.1:6379> zrevrank user:ranking tom
 
(integer) 0
 
  
删除成员
+
其实皮肤可以只要一个
127.0.0.1:6379> zrem user:ranking mike
 
(integer) 1
 
  
加了9分
 
127.0.0.1:6379> zincrby user:ranking 9  tom
 
"260"
 
  
(7)返回指定排名范围的成员
+
** 添加定时备份 html目录 没有-v
  
127.0.0.1:6379> zrange user:ranking 0 2 withscores
+
** 备份目录  备份容器  手工导出为4个
1) "kris"
 
2) "1"
 
3) "mike"
 
4) "91"
 
5) "frank"
 
6) "200"
 
127.0.0.1:6379> zrevrange user:ranking 0 2 withscores
 
1) "tom"
 
2) "251"
 
3) "martin"
 
4) "250"
 
5) "tim"
 
6) "220"
 
  
8)返回指定分数范围的成员
+
**
127.0.0.1:6379> zrangebyscore user:ranking (200 +inf withscores
+
安装时是要密码的  然后改为 可以看
1) "tim"
 
2) "220"
 
3) "martin"
 
4) "250"
 
5) "tom"
 
6) "251"
 
  
 +
# The following permissions were set based on your choice in the installer
 +
$wgGroupPermissions['*']['createaccount'] = false;
 +
$wgGroupPermissions['*']['edit'] = false;
 +
$wgGroupPermissions['*']['read'] = true;
  
(9)返回指定分数范围成员个数
+
</pre>
  
返回200到221分的成员的个数
+
=== mediawiki页面的导出和导入===
127.0.0.1:6379> zcount user:ranking 200 221
 
(integer) 2
 
  
10)删除指定排名内的升序元素
+
<pre>
  
 +
特殊:所有页面
 +
复制页面列表内容,整理成一行一个页面名称的文本列表
  
2.6.1  2019年 8月23日 星期五 14时41分48秒 CST
+
出来就是一行一个的啦
  
2.集合间的操作
+
现在看起来 只有 800个文章呢
两个有序集合导入到Redis中
 
zadd user:ranking:1 1 kris 91 mike 200 frank 220 tim 250 martin
 
zadd user:ranking:2 8 james 77 mike 625 martin 888 tom
 
  
</pre>
+
到  导出页面
 +
把所有文件 复制进去
  
==2.7 键管理 ==
+
老是报文件太大 最终把所有文章分为三次,300左右一个, 成功  以后可能要分成4次吧  前缀随便写就行了
===2.7.1 单个键管理 ===
 
<pre>
 
2019年 8月31日 星期六 16时03分38秒 CST
 
  
  
1.key rename
+
php 上传大小
rename key newkey
 
renamenx 比较安全
 
127.0.0.1:6379> get evan
 
"36"
 
127.0.0.1:6379> rename evan eva
 
OK
 
127.0.0.1:6379> get eva
 
"36"
 
127.0.0.1:6379> get evan
 
(nil)
 
  
2.随机返回
 
randomkey
 
  
3.key 过期 2019年 9月 1日
+
容器里面 apt update ; apt install vim
  
127.0.0.1:6379> set hello world
+
nginx 出现413 Request Entity Too Large问题的解决方法
OK
 
127.0.0.1:6379> expire hello 10
 
(integer) 1
 
127.0.0.1:6379> ttl hello
 
(integer) 1
 
127.0.0.1:6379> ttl hello
 
(integer) -2
 
  
4.key 迁移
+
在http{}段中加入 client_max_body_size 20m; 20m为允许最大上传的大小
  
(1) move 不用 知道就行了
 
(2)dump + restore
 
  
(3)migrate
+
打开php.ini,把 upload_max_filesize 和 post_max_size 修改为20M,然后重启。
  
  
</pre>
+
/usr/local/etc/php/php.ini-development
 +
/usr/local/etc/php/php.ini-production
  
===2.7.2 遍历键 ===
+
post_max_size = 8M
<pre>
+
upload_max_filesize = 8M
key partern 
 
  
get
 
key *
 
  
2.渐进式子
+
第二步,要对mediawiki的includes目录中的DefaultSettings.php中的$wgMaxUploadSize、$wgUploadSizeWarning两个参数设置成我们想要的值。$wgUploadSizeWarning的设置不是必须的,而是去除系统的警告
 +
$wgMaxUploadSize = 1024 * 1024 * 1000; # 1000M
  
scan
 
  
</pre>
+
导入失败:没有提供跨wiki前缀   我随便写一个就行  ?
===2.7.3 数据库管理 ===
 
<pre>
 
1.切换 select   默认是 0
 
  
127.0.0.1:6379[2]> set hello love
+
  </pre>
OK
 
127.0.0.1:6379[2]> SELECT 3
 
OK
 
127.0.0.1:6379[3]> get hello
 
(nil)
 
  
  
2.flushdb flushall
+
=== wiki学习===
  
flushall 全部数据不见了
+
[https://blog.csdn.net/zuiaituantuan/article/details/5816502 Mediawiki LocalSettings.php 参数指南中文版]
</pre>
 
[https://www.cnblogs.com/Cherry-Linux/p/8046276.html Redis键迁移]
 
  
=Chpater 3 =
+
=old=
 
+
==db==
==慢查询分析==
+
===pre===
[https://blog.csdn.net/sunhuiliang85/article/details/74800001 redis-慢查询分析]
 
 
 
==redis shell==
 
 
<pre>
 
<pre>
redis-cli
+
#在运行docker容器时可以加如下参数来保证每次docker服务重启后容器也自动重启:
-r
+
$docker run --restart=always
evan@latop:~$ redis-cli  -r 3  ping
+
#如果已经启动了则可以使用如下命令:
PONG
+
$docker update --restart=always <CONTAINER ID>
PONG
 
PONG
 
 
 
evan@latop:~$ redis-cli  -r 3 -i 1 ping
 
PONG
 
PONG
 
PONG
 
 
 
evan@latop:~$ echo "world" |redis-cli  -x set hello
 
127.0.0.1:6379> get  hello
 
"world\n"
 
 
 
-c  cluster
 
 
 
-a (auth)
 
 
 
6.--scan and --pattern
 
 
 
7 --slave
 
 
 
8 --rdb 
 
 
 
12 -- latency
 
 
 
13 --stat  实时 比info 简单些
 
 
 
redis-cli --stat
 
------- data ------ --------------------- load -------------------- - child -
 
keys      mem      clients blocked requests            connections         
 
1          838.51K  1      0      5 (+0)              2         
 
1          838.51K  1      0      6 (+1)              2         
 
1          838.51K  1      0      7 (+1)              2         
 
 
 
14 --no-raw 原始格式
 
  --raw  格式化过
 
 
 
  127.0.0.1:6379> set evan "你�好"
 
OK
 
127.0.0.1:6379> get evan
 
"\xe4\xbd\xa0\xe5\x8f\xe5\xa5\xbd"
 
 
 
redis-cli --raw get evan
 
你�好
 
  
3.2.2  redis-server  --test-memory 1024
+
mysql什么的也可以rpm 但是尽量docker
 
</pre>
 
</pre>
  
=Chpater 5 持久化 =
+
===mariadb===
 
<pre>
 
<pre>
 +
#在sra pi上好象是没有的
 +
docker pull mariadb:latest
 +
docker run -p 3307:3306 --restart 策略名称 -v 宿主机数据目录:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mysql密码 -d 镜像ID
 +
docker run --name mymariadb  -p 3306:3306 --restart always -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=2240881 -d 54514d54a4a5
 +
docker run --name mymariadb  -p 3307:3306 --restart always -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=2240881 -d  mariadb #同上
  
运维提示
+
开启远程访问用户和密码
当硬盘坏或者 写满时 可以  config set dir {newDir} 在线修改文件路径 到可用的磁盘 再执行bgsave 同样可以用于aof
 
 
 
5.2 AOF
 
 
 
 
 
5.2.1 使用AOF
 
      开启AOF功能需要设置配置:appendonly yes,默认不开启。AOF文件名
 
通过appendfilename配置设置,默认文件名是appendonly.aof。保存路径同
 
RDB持久化方式一致,通过dir配置指定。AOF的工作流程操作:命令写入
 
(append)、文件同步(sync)、文件重写(rewrite)、重启加载
 
(load),如图5-2所示
 
 
 
·配置为everysec,是建议的同步策略,也是默认配置,做到兼顾性能和
 
数据安全性。理论上只有在系统突然宕机的情况下丢失1秒的数据。(严格
 
来说最多丢失1秒数据是不准确的
 
 
 
还是建议在配置文件配置上
 
 
 
# appendfsync always
 
appendfsync everysec
 
# appendfsync no
 
 
 
 
 
appendonly yes  打开aof 持久化  #默认是no
 
 
 
5.2.4 重写机制 不全明
 
 
 
 
 
5.2.5 重启加载
 
AOF持久化开启且存在AOF文件时,优先加载AOF文件,
 
AOF关闭或者AOF文件不存在时,加载RDB文件
 
  
5.3 问题定位与优化
+
echo 'mymariadb  192.168.10.105' >>/etc/hosts
 +
mysql -uroot -p2240881 -h 192.168.10.105 -P3307 #连接 </pre>
  
5.3.1
+
===mysql===
 +
<pre>docker pull mysql:5.7
 +
#config and run
 +
docker run -p 3307:3306 --restart 策略名称 -v 宿主机数据目录:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mysql密码 -d 镜像ID
 +
docker run --name mymysql  -p 3306:3306 --restart always -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=2240881 -d 54514d54a4a5
  
fork耗时问题定位:对于高流量的Redis实例OPS可达5万以上,如果fork
 
操作耗时在秒级别将拖慢Redis几万条命令执行,对线上应用延迟影响非常
 
明显。正常情况下fork耗时应该是每GB消耗20毫秒左右。可以在info stats统
 
计中查latest_fork_usec指标获取最近一次fork操作耗时,单位微秒。
 
n
 
      如何改善fork操作的耗时:
 
      1)优先使用物理机或者高效支持fork操作的虚拟化技术,避免使用
 
      Xen。
 
  
      2)控制Redis实例最大可用内存,fork耗时跟内存量成正比,线上建议
 
      每个Redis实例内存控制在10GB以内。
 
  
      3)合理配置Linux内存分配策略,避免物理内存不足导致fork失败,具
+
mysql8
      体细节见12.1节“Linux配置优化”。
 
  
5.3.2 子进程开销监控和优化
+
docker run --name mymysql8 -e MYSQL_ROOT_PASSWORD=evan2240881  -p3306:3306 -d mysql:8
 +
#开启远程访问
 +
create user 'evan'@'%' identified by 'evan2240881';
  
5.3.3 AOF追加阻塞
 
  
5。4
 
# Persistence from bsd
 
loading:0
 
rdb_changes_since_last_save:0
 
rdb_bgsave_in_progress:0
 
rdb_last_save_time:1567955166
 
rdb_last_bgsave_status:ok
 
rdb_last_bgsave_time_sec:-1
 
rdb_current_bgsave_time_sec:-1
 
aof_enabled:0
 
aof_rewrite_in_progress:0
 
aof_rewrite_scheduled:0
 
aof_last_rewrite_time_sec:-1
 
aof_current_rewrite_time_sec:-1
 
aof_last_bgrewrite_status:ok
 
aof_last_write_status:ok
 
  
 
</pre>
 
</pre>
  
 +
[https://mariadb.com/kb/en/library/installing-and-using-mariadb-via-docker/ Installing and using MariaDB via Docker]
  
https://blog.csdn.net/kfengqingyangk/article/details/53454309
+
[https://www.jianshu.com/p/32542630c2bd Docker使用MariaDB]
  
https://blog.csdn.net/ljl890705/article/details/51039015
+
==wiki==
 
 
 
 
 
 
[https://www.jianshu.com/p/cbe1238f592a Redis持久化:RDB(快照)和AOF(写命令)]
 
 
 
 
 
=* chpater 6  Redis复制=
 
 
 
 
 
 
 
[https://blog.csdn.net/houjixin/article/details/27680183 Redis 数据同步机制分析]
 
=* chpater 7  Redis的噩梦:阻塞=
 
 
 
2019年 9月 9日 星期一 14时5
 
 
 
 
 
 
 
 
 
 
 
==** 7.1  发现==
 
 
 
应用方加入异常监控之后还存在一个问题,当开发人员接到异常报警
 
后,通常会去线上服务器查看错误日志细节。这时如果应用操作的是多个
 
404Redis节点(比如使用Redis集群),如何决定是哪一个节点超时还是所有的
 
节点都有超时呢?这是线上很常见的需求,但绝大多数的客户端类库并没有
 
在异常信息中打印ip和port信息,导致无法快速定位是哪个Redis节点超时。
 
不过修改Redis客户端成本很低,比如Jedis只需要修改Connection类下的
 
connect、sendCommand、readProtocolWithCheckingBroken方法专门捕获连
 
接,发送命令,协议读取事件的异常。由于客户端类库都会保存ip和port信
 
息,当异常发生时很容易打印出对应节点的ip和port,辅助我们快速定位问
 
题节点。
 
 
 
==** 7.2  内在原因 ==
 
 
 
.如何发现慢查询
 
Redis原生提供慢查询统计功能,执行slowlog get{n}命令可以获取最近
 
的n条慢查询命令,默认对于执行超过10毫秒的命令都会记录到一个定长队
 
列中,线上实例建议设置为1毫秒便于及时发现毫秒级以上的命令
 
 
 
 
 
 
 
 
 
 
 
 
 
===7.2.2===
 
CPU饱和
 
 
 
首先判断当前Redis的并
 
发量是否达到极限,建议使用统计命令redis-cli-h{ip}-p{port}--stat获取当前
 
Redis使用情况,该命令每秒输出一行统计信息
 
 
 
 
 
http://www.redis.io/topics/latency。
 
 
 
 
 
===7.3.1===
 
CPU竞争
 
对于开启了持久化或参与复制的主节点不建议绑定CPU。
 
 
 
=* 第8章 理解内存=
 
 
<pre>
 
<pre>
192.168.10.201:7000> info memory
+
#前提 得开启mysql远程访问 直接登录到mysql 容器里面进去 用一开始运行mysql容器的那个用户和密码,再添加远程用户和密码
# Memory
+
docker pull mediawiki
used_memory:2653536
+
docker run --name mymediawiki  -p 88:80  --link mymariadb:mysql -d  mediawiki #is good
used_memory_human:2.53M
+
docker  cp LocalSettings.php  3c0002c21a6a:/var/www/html/LocalSettings.php
used_memory_rss:17285120
+
--net=host
used_memory_rss_human:16.48M
 
used_memory_peak:2756424
 
used_memory_peak_human:2.63M
 
used_memory_peak_perc:96.27%
 
used_memory_overhead:2580244
 
used_memory_startup:1464224
 
used_memory_dataset:73292
 
used_memory_dataset_perc:6.16%
 
allocator_allocated:3146048
 
allocator_active:3551232
 
allocator_resident:12943360
 
total_system_memory:16808693760
 
total_system_memory_human:15.65G
 
used_memory_lua:38912
 
used_memory_lua_human:38.00K
 
used_memory_scripts:216
 
used_memory_scripts_human:216B
 
number_of_cached_scripts:1
 
maxmemory:0
 
maxmemory_human:0B
 
maxmemory_policy:noeviction
 
allocator_frag_ratio:1.13
 
allocator_frag_bytes:405184
 
allocator_rss_ratio:3.64
 
allocator_rss_bytes:9392128
 
rss_overhead_ratio:1.34
 
rss_overhead_bytes:4341760
 
mem_fragmentation_ratio:6.62
 
mem_fragmentation_bytes:14672608
 
mem_not_counted_for_evict:612
 
mem_replication_backlog:1048576
 
mem_clients_slaves:16922
 
mem_clients_normal:49694
 
mem_aof_buffer:612
 
mem_allocator:jemalloc-5.1.0
 
active_defrag_running:0
 
lazyfree_pending_objects:0
 
  
 +
#如果是使用mysql
 +
docker run --name mymediawiki  -p 88:80  --link mymysql:mysql -d  mediawiki
  
需要重点关注的指标有:used_memory_rss和used_memory以及它们的比
+
mediawiki  这个不会自启动
mem_fragmentation_ratio。
 
  
详情
 
  
# Memory
+
docker run --name mymediawiki --link mymariadb:mysql -d  wikimedia/mediawiki  #起来 这个感觉不对 </pre>
                        #由Redis分配器分配的内存总量,以字节(byte)为单位 
 
used_memory:2653536
 
used_memory_human:2.53M
 
used_memory_rss:17285120
 
  
mem_fragmentation_ratio:6.62</pre>
 
 
 
===*** 8.1.2内存消耗划分===
 
 
<pre>
 
<pre>
 +
#is old
 +
docker pull mediawiki
  
开发环境的数据
+
#还是指定目录比较好  但是现在 官方的好像不支持 -v了
# Memory
+
docker run  --restart=always --name mediawiki -p 8080:80 -v  /data/mediawiki -d 8d721d068c81 #2018 但是没办法直接数据交互 下面的用了有问题呢
                       
+
#mysql 填写 192.168.0.10:3307
used_memory:2653536  #由Redis分配器分配的内存总量,以字节(byte)为单位
 
used_memory_human:2.53M
 
used_memory_rss:17285120
 
 
 
mem_fragmentation_ratio:6.62
 
 
 
基础
 
1 Byte = 8 Bits
 
 
 
1 KB = 1024 Bytes
 
 
 
1 MB = 1024 KB
 
 
 
1 GB = 1024 MB
 
 
 
 
 
Redis进程内消耗主要包括:自身内存+对象内存+缓冲内存+内存碎片,
 
中Redis空进程自身内存消耗非常少,通常used_memory_rss在3MB左右,
 
used_memory在800KB左右,一个空的Redis进程消耗内存可以忽略不计。
 
is主要内存消耗如图8-1所示。下面介绍另外三种内存消耗。
 
 
 
used_memory:2653536 =2.5306Mb
 
 
 
1.对象内存
 
 
 
2.缓冲内存
 
 
 
3.内存碎片
 
 
 
Redis默认的内存分配器采用jemalloc,可选的分配器还有:glibc、
 
tcmalloc。内存分配器为了更好地管理和重复利用内存,分配内存策略一般
 
采用固定范围的内存块进行分配。例如jemalloc在64位系统中将内存空间划
 
分为:小、大、巨大三个范围。每个范围内又划分为多个小的内存块单位,
 
如下所示:
 
 
 
 
 
</pre>
 
 
 
===***8.1.3  子进程内存消耗===
 
<pre>
 
  
子进程内存消耗主要指执行AOF/RDB重写时Redis创建的子进程内存消
+
docker run --name mediawiki -p 8080:80  -v /data/mediawiki:/var/www/html/ -d id
耗。Redis执行fork操作产生的子进程内存占用量对外表现为与父进程相同,
+
#docker run --name mediawiki -p 8080:80  -v /data/mediawiki:/var/www/html/ -d mediawiki
理论上需要一倍的物理内存来完成重写操作。但Linux具有写时复制技术
+
docker cp /data/LocalSettings.php  mediawiki:/var/www/html/LocalSettings.php
(copy-on-write),父子进程会共享相同的物理内存页,当父进程处理写请
+
默认上传目录 /var/www/html/images/
求时会对需要修改的页复制出一份副本完成写操作,而子进程依然读取fork
 
时整个父进程的内存快照。
 
  
当分别开启和关闭THP时,子进程内存
 
消耗有天壤之别。如果在高并发写的场景下开启THP,子进程内存消耗可能
 
是父进程的数倍,极易造成机器物理内存溢出,从而触发SWAP或OOM
 
killer,更多关于THP细节见12.1节“Linux配置优化”。
 
</pre>
 
====子进程内存消耗总结如下:====
 
<pre>
 
·Redis产生的子进程并不需要消耗1倍的父进程内存,实际消耗根据期
 
间写入命令量决定,但是依然要预留出一些内存防止溢出。
 
  
·需要设置sysctl vm.overcommit_memory=1允许内核可以分配所有的物理
+
#解说 
内存,防止Redis进程执行fork时因系统剩余内存不足而失败。
+
使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
 +
docker run --name mynginx -d nginx:latest
  
·排查当前系统是否支持并开启THP,如果开启建议关闭,防止copy-on-
+
#交互 
write期间内存过度消耗。
+
sudo docker exec -it facethink-mediawiki /bin/bash
  
 +
#开机自启动
 +
#在运行docker容器时可以加如下参数来保证每次docker服务重启后容器也自动重启:
 +
$docker run --restart=always
 +
#如果已经启动了则可以使用如下命令:
 +
$docker update --restart=always <CONTAINER ID> #上次就是这样解决了重启后nginx问题
 
</pre>
 
</pre>
 +
==mysql==
 +
[[Docker mysql]]
  
 +
==nginx==
 +
===on docker===
 +
[http://wiki.linuxchina.net/index.php?title=Docker_nginx#.E5.9F.9F.E5.90.8D.E9.85.8D.E7.BD.AE Docker_nginx 域名配置]
  
==**8.2  内存管理==
+
===no docker===
===8.2.1 设置内存上限===
 
 
<pre>
 
<pre>
 +
#这个在内网其实可以不用呢
 +
server {
 +
    listen      80;
 +
    server_name  wiki.linuxsa.org;
  
     Mem=`free -m | awk '/Mem:/{print $2}'`
+
     charset utf-8;
     redis_maxmemory=`expr $Mem / 8`000000 #here
+
     #access_log  /var/log/nginx/host.access.log  main;
    [ -z "`grep ^maxmemory ${redis_install_dir}/etc/redis.conf`" ] && sed -i "s@maxmemory <byt
 
es>@maxmemory <bytes>\nmaxmemory `expr $Mem / 8`000000@" ${redis_install_dir}/etc/redis.conf
 
</pre>
 
  
===8.2.2 动态调整内存上限===
+
    location / {
 +
        proxy_pass  http://192.168.50.206:8080;
 +
        root  /usr/share/nginx/html;
 +
        index  index.html index.htm;
 +
    }
  
===8.2.3 内存回收策略===
+
docker  cp default.conf  nginx:/etc/nginx/conf.d/default.conf
单机和主备的Redis实例默认的数据逐出策略为不逐出(noeviction ?
 
  
==8.3 内存优化==
 
===8.3.1 redisObject对象 ===
 
开发提示
 
高并发写入场景中,在条件允许的情况下,建议字符串长度控制在39字
 
,减少创建redisObject内存分配次数,从而提高性能。
 
===8.3.2 缩减键值对象 ===
 
  
===8.3.3 共享对象池 ===
+
#手工的nginx
 +
[root@localhost conf.d]# cat  default.conf
 +
server {
 +
    listen      80;
 +
    server_name  wiki.linuxsa.org;
  
===8.3.4字符串优化===
+
    #charset koi8-r;
 +
    #access_log  /var/log/nginx/host.access.log  main;
  
=== 8.3.5编码优化 ===
+
    location / {
 +
                proxy_pass  http://192.168.88.52:88;
 +
        #root  /usr/share/nginx/html;
 +
        index  index.html index.htm;
 +
    }
  
=chapter 10 Cluster=
+
  #error_page  404              /404.html;
== ==
 
  
== ==
+
    # redirect server error pages to the static page /50x.html
 +
    #
 +
    error_page  500 502 503 504  /50x.html;
 +
    location = /50x.html {
 +
        root  /usr/share/nginx/html;
 +
    }
  
 +
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
 +
    #
 +
    #location ~ \.php$ {
 +
    #    proxy_pass  http://127.0.0.1;
 +
    #}
 +
}
  
== ==
 
  
== ==
 
=redis info命令详解=
 
== memory : 内存信息,包含以下域==
 
<pre>
 
used_memory:35795152                              #由Redis分配器分配的内存总量,以字节(byte)为单位 
 
used_memory_human:34.14M                          #以MB为单位返回由Redis分配器分配的内存总量
 
used_memory_rss:50876416                          #从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)
 
used_memory_peak:595513248                        #Redis 的内存消耗峰值(以字节为单位)   
 
used_memory_peak_human:567.93M                    #以MB为单位返回Redis 的内存消耗峰值 
 
used_memory_lua:35840                            #Lua 引擎所使用的内存大小(以字节为单位)
 
mem_fragmentation_ratio:1.42                      #used_memory_rss 和 used_memory 之间的比率 
 
mem_allocator:jemalloc-3.6.0                      #在编译时指定的, Redis 所使用的内存分配器。可以是 libc 、 jemalloc 或者 tcmalloc 。
 
 
</pre>
 
</pre>
 +
[[Docker nginx]]
  
[https://blog.csdn.net/lang_man_xing/article/details/38539057 redis info命令详解]
+
==Memcached==
 +
安装过程会提示缓存软件为memcached
  
[https://segmentfault.com/a/1190000004682946 redis info命令详细说明]
+
[[Docker 安装 Memcached]]
  
=redis.conf 详解=
+
=trouble=
 +
==mysql8 err==
 
<pre>
 
<pre>
  
 +
[df278b0f908ad5e5f2653f4e] /mw-config/index.php?page=Install Wikimedia\Rdbms\DBQueryError from line 1506 of /var/www/html/includes/libs/rdbms/database/Database.php: A database query error has occurred. Did you forget to run your application's database schema updater after upgrading?
 +
Query: CREATE DATABASE `my_wiki`CHARACTER SET utf8
 +
Function: MysqlInstaller::setupDatabase
 +
Error: 1044 Access denied for user 'evan'@'%' to database 'my_wiki' (192.168.88.21)
 +
Backtrace:
 +
 +
#0 /var/www/html/includes/libs/rdbms/database/Database.php(1476): Wikimedia\Rdbms\Database->makeQueryException(string, integer, string, string)
 +
#1 /var/www/html/includes/libs/rdbms/database/Database.php(1236): Wikimedia\Rdbms\Database->reportQueryError(string, integer, string, string, boolean)
 +
#2 /var/www/html/includes/installer/MysqlInstaller.php(491): Wikimedia\Rdbms\Database->query(string, string)
 +
#3 /var/www/html/includes/installer/Installer.php(1601): MysqlInstaller->setupDatabase(MysqlInstaller)
 +
#4 /var/www/html/includes/installer/WebInstallerInstall.php(44): Installer->performInstallation(array, array)
 +
#5 /var/www/html/includes/installer/WebInstaller.php(272): WebInstallerInstall->execute()
 +
#6 /var/www/html/mw-config/index.php(79): WebInstaller->execute(array)
 +
#7 /var/www/html/mw-config/index.php(38): wfInstallerMain()
 +
#8 {main}
 
</pre>
 
</pre>
https://www.cnblogs.com/kreo/p/4423362.html
 
  
https://blog.csdn.net/kfengqingyangk/article/details/53454309
+
=see also=
  
https://blog.csdn.net/ljl890705/article/details/51039015
+
https://www.mediawiki.org/wiki/Comparison_of_distribution_options
 
 
https://blog.csdn.net/qq_19707521/article/details/70676213
 
 
 
https://www.jianshu.com/p/fa27ddf84455
 
 
 
 
 
[https://www.cnblogs.com/uglyliu/p/8052648.html redis.conf 配置项说明如]
 
 
 
=[[Docker redis]]=
 
 
 
=see also=
 
  
[[Redis备份与恢复]]
+
[https://www.jianshu.com/p/a644988684d8  good使用Docker部署MediaWiki]
  
[[Redis安全]]
+
[https://www.jianshu.com/p/8de371558ef6 docker搭建mediawiki]
  
 +
[https://zhuanlan.zhihu.com/p/56235816 使用 Docker 搭建你的Wiki(TiddlyWiki)]
  
[https://www.cnblogs.com/zhangweizhong/p/7531471.html 运维常用命令]
+
[https://www.jianshu.com/p/32542630c2bd Docker使用MariaDB]
  
[https://blog.csdn.net/liqingtx/article/details/60330555 超强、超详细Redis入门教程]
 
  
[https://www.runoob.com/redis/redis-php.html PHP 使用 Redis]
 
  
  
 +
[https://www.zhihu.com/question/20679850 那些不错的mediawiki插件]
 +
[https://www.kuyh.com/167.html 树莓派docker搭建lnmp环境]
  
[https://www.runoob.com/redis/redis-server.html Redis 服务器runoob]
+
[https://zhuanlan.zhihu.com/p/55898921 使用 Docker 搭建你的Wiki(MediaWiki)]
  
[https://www.w3cschool.cn/redis_all_about/ Redis开发运维实践指南]
+
[https://www.mediawiki.org/wiki/Docker Docker for mediawiki]  
  
[http://redisdoc.com/string/setex.html SETEX key seconds value]
+
https://hub.docker.com/_/mediawiki/
  
[https://www.jianshu.com/p/2639549bedc8 使用python来操作redis用法详解]
+
[https://www.jianshu.com/p/a644988684d8 使用 Docker 部署 MediaWiki]
  
 +
[https://yq.aliyun.com/ziliao/65666 docker安装mediawiki教程]
  
 +
[https://cloud.tencent.com/developer/article/1193750 使用 Docker 部署 MediaWiki]
  
 +
[[Docker 安装 Memcached]]
  
 +
[http://wiki.jikexueyuan.com/project/docker-practice/fig-creat-mediawiki.html Docker 实践 3:fig 搭建 mediawiki]
  
[[category:redis]] [[category:ops]]
+
[[category:容器]] [[category:ops]] [[category: container]]

2019年10月21日 (一) 02:58的版本

pre

debian docker

apt update #on vps 
apt install docker.io docker-compose -y
sudo usermod -aG docker $USER 


** nginx

apt install nginx 
#
    upstream dockerwiki {
        server  10.138.132.61:8080 weight=5;
        keepalive       64;
    }

server{
listen  80;
server_name  wiki.linuxchina.net;

location / {
        proxy_pass        http://dockerwiki; #或者直接写ip啦 
        proxy_http_version   1.1;
        proxy_set_header   Host             $host:80;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
}

access_log  /var/log/nginx/wiki.linuxaccess.log;
}

有时 80不通 重启机器后好了 应该 是firewalld 导致


https://blog.csdn.net/yinlongfei_love/article/details/81085761 解决 413 Request Entity Too Large


Docker 安装 Memcached

install and config

201910

mariadb 要注意的

密码太简单改了一下  在dockercomps 文件里面改是没用的 

 要登录root mysql 再用上面 的授权  然后 改 wiki的配置文件  不然 
Original exception: [c1fa6e2877bda66dceebe4ab] 2019-10-16 02:25:03: Fatal exception of type "Wikimedia\Rdbms\DBConnectionError"

docker-compose 安装mediawiki


# MediaWiki with MariaDB  这里不用再另外安装db了
#
# Access via "http://localhost:8080"
#   (or "http://$(docker-machine ip):8080" if using docker-machine)
version: '3'
services:
  mediawiki:
    image: mediawiki
    restart: always
    ports:
      - 8080:80
    links:
      - database
    volumes:
      - /var/www/html/images
      # After initial setup, download LocalSettings.php to the same directory as
      # this yaml and uncomment the following line and use compose to restart
      # the mediawiki service
      # - ./LocalSettings.php:/var/www/html/LocalSettings.php
  database:
    image: mariadb
    restart: always
    ports:
      - 3306:3306
    environment:
      # @see https://phabricator.wikimedia.org/source/mediawiki/browse/master/includes/DefaultSettings.php
      MYSQL_DATABASE: wiki
      MYSQL_USER: evan 
      MYSQL_PASSWORD: eva555 这要尽量难一点 
      MYSQL_RANDOM_ROOT_PASSWORD: 'yes'


wiki configure


web安装过程 

Database host:

192.168.88.52 #反正是内网IP



多问我一些问题吧
 那里还在要求可以填写缓存什么的

编辑者
CodeEditor(需要WikiEditor)

其实皮肤可以只要一个


** 添加定时备份 html目录 没有-v 

** 备份目录  备份容器  手工导出为4个 

**
安装时是要密码的  然后改为 可以看

# The following permissions were set based on your choice in the installer
$wgGroupPermissions['*']['createaccount'] = false;
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['*']['read'] = true;

mediawiki页面的导出和导入


特殊:所有页面
复制页面列表内容,整理成一行一个页面名称的文本列表

出来就是一行一个的啦 

现在看起来 只有 800个文章呢 

到  导出页面 
把所有文件 复制进去

老是报文件太大 最终把所有文章分为三次,300左右一个, 成功  以后可能要分成4次吧  前缀随便写就行了 


php 上传大小 


容器里面 apt update ; apt install vim 

nginx 出现413 Request Entity Too Large问题的解决方法

在http{}段中加入 client_max_body_size 20m; 20m为允许最大上传的大小


打开php.ini,把 upload_max_filesize 和 post_max_size 修改为20M,然后重启。


/usr/local/etc/php/php.ini-development
/usr/local/etc/php/php.ini-production

post_max_size = 8M
upload_max_filesize = 8M


第二步,要对mediawiki的includes目录中的DefaultSettings.php中的$wgMaxUploadSize、$wgUploadSizeWarning两个参数设置成我们想要的值。$wgUploadSizeWarning的设置不是必须的,而是去除系统的警告
$wgMaxUploadSize = 1024 * 1024 * 1000; # 1000M


导入失败:没有提供跨wiki前缀   我随便写一个就行  ?

  


wiki学习

Mediawiki LocalSettings.php 参数指南中文版

old

db

pre

#在运行docker容器时可以加如下参数来保证每次docker服务重启后容器也自动重启:
$docker run --restart=always
#如果已经启动了则可以使用如下命令:
$docker update --restart=always <CONTAINER ID>

mysql什么的也可以rpm 但是尽量docker

mariadb

#在sra pi上好象是没有的
docker pull mariadb:latest
docker run -p 3307:3306 --restart 策略名称 -v 宿主机数据目录:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mysql密码 -d 镜像ID
docker run --name mymariadb  -p 3306:3306 --restart always -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=2240881 -d 54514d54a4a5
docker run --name mymariadb  -p 3307:3306 --restart always -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=2240881 -d  mariadb #同上

开启远程访问用户和密码

echo 'mymariadb  192.168.10.105' >>/etc/hosts
 mysql -uroot -p2240881 -h 192.168.10.105 -P3307  #连接 

mysql

docker pull mysql:5.7
#config and run 
docker run -p 3307:3306 --restart 策略名称 -v 宿主机数据目录:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mysql密码 -d 镜像ID
docker run --name mymysql  -p 3306:3306 --restart always -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=2240881 -d 54514d54a4a5



mysql8 

 docker run --name mymysql8 -e MYSQL_ROOT_PASSWORD=evan2240881  -p3306:3306 -d mysql:8
#开启远程访问
create user 'evan'@'%' identified by 'evan2240881';



Installing and using MariaDB via Docker

Docker使用MariaDB

wiki

#前提 得开启mysql远程访问 直接登录到mysql 容器里面进去 用一开始运行mysql容器的那个用户和密码,再添加远程用户和密码
docker pull mediawiki
docker run --name mymediawiki  -p 88:80  --link mymariadb:mysql -d  mediawiki #is good 
docker  cp LocalSettings.php  3c0002c21a6a:/var/www/html/LocalSettings.php
--net=host 

#如果是使用mysql 
docker run --name mymediawiki  -p 88:80  --link mymysql:mysql -d  mediawiki

mediawiki   这个不会自启动 


docker run --name mymediawiki --link mymariadb:mysql -d   wikimedia/mediawiki  #起来 这个感觉不对 
#is old
docker pull mediawiki

#还是指定目录比较好  但是现在 官方的好像不支持 -v了 
docker run  --restart=always --name mediawiki -p 8080:80 -v  /data/mediawiki -d 8d721d068c81 #2018  但是没办法直接数据交互 下面的用了有问题呢
#mysql 填写 192.168.0.10:3307

docker run --name mediawiki -p 8080:80  -v /data/mediawiki:/var/www/html/ -d id
#docker run --name mediawiki -p 8080:80  -v /data/mediawiki:/var/www/html/ -d mediawiki
docker cp /data/LocalSettings.php  mediawiki:/var/www/html/LocalSettings.php
默认上传目录 /var/www/html/images/


#解说 
使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest

#交互  
sudo docker exec -it facethink-mediawiki /bin/bash

#开机自启动
#在运行docker容器时可以加如下参数来保证每次docker服务重启后容器也自动重启:
$docker run --restart=always
#如果已经启动了则可以使用如下命令:
$docker update --restart=always <CONTAINER ID> #上次就是这样解决了重启后nginx问题

mysql

Docker mysql

nginx

on docker

Docker_nginx 域名配置

no docker

#这个在内网其实可以不用呢
server {
    listen       80;
    server_name  wiki.linuxsa.org;

    charset utf-8;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        proxy_pass   http://192.168.50.206:8080;
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

docker  cp default.conf  nginx:/etc/nginx/conf.d/default.conf 


#手工的nginx 
[root@localhost conf.d]# cat   default.conf
server {
    listen       80;
    server_name   wiki.linuxsa.org;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
                proxy_pass   http://192.168.88.52:88;
        #root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

  #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
}


Docker nginx

Memcached

安装过程会提示缓存软件为memcached

Docker 安装 Memcached

trouble

mysql8 err


[df278b0f908ad5e5f2653f4e] /mw-config/index.php?page=Install Wikimedia\Rdbms\DBQueryError from line 1506 of /var/www/html/includes/libs/rdbms/database/Database.php: A database query error has occurred. Did you forget to run your application's database schema updater after upgrading? 
Query: CREATE DATABASE `my_wiki`CHARACTER SET utf8
Function: MysqlInstaller::setupDatabase
Error: 1044 Access denied for user 'evan'@'%' to database 'my_wiki' (192.168.88.21)
Backtrace:

#0 /var/www/html/includes/libs/rdbms/database/Database.php(1476): Wikimedia\Rdbms\Database->makeQueryException(string, integer, string, string)
#1 /var/www/html/includes/libs/rdbms/database/Database.php(1236): Wikimedia\Rdbms\Database->reportQueryError(string, integer, string, string, boolean)
#2 /var/www/html/includes/installer/MysqlInstaller.php(491): Wikimedia\Rdbms\Database->query(string, string)
#3 /var/www/html/includes/installer/Installer.php(1601): MysqlInstaller->setupDatabase(MysqlInstaller)
#4 /var/www/html/includes/installer/WebInstallerInstall.php(44): Installer->performInstallation(array, array)
#5 /var/www/html/includes/installer/WebInstaller.php(272): WebInstallerInstall->execute()
#6 /var/www/html/mw-config/index.php(79): WebInstaller->execute(array)
#7 /var/www/html/mw-config/index.php(38): wfInstallerMain()
#8 {main}

see also

https://www.mediawiki.org/wiki/Comparison_of_distribution_options

good使用Docker部署MediaWiki

docker搭建mediawiki

使用 Docker 搭建你的Wiki(TiddlyWiki)

Docker使用MariaDB



那些不错的mediawiki插件 树莓派docker搭建lnmp环境

使用 Docker 搭建你的Wiki(MediaWiki)

Docker for mediawiki

https://hub.docker.com/_/mediawiki/

使用 Docker 部署 MediaWiki

docker安装mediawiki教程

使用 Docker 部署 MediaWiki

Docker 安装 Memcached

Docker 实践 3:fig 搭建 mediawiki