Categories
Operations

Seafile 6.3 升级 7.x 避坑指南

#前言:我只试过docker版

官方升级指南在这里:https://cloud.seafile.com/published/seafile-manual-cn/docker/6.3_%E5%8D%87%E7%BA%A7%E5%88%B0_7.0.md

截至2020年12月16日我升级的时候,官方指南依然存在两个问题

第一个问题,是数据库无法直接迁移到docker-compose下的mariadb,原因是之前有部分的数据表是myisam存储引擎,你会遇到诸如:“Column last_update in table “mysql”.”innodb_table_stats” is INT UNSIGNED NOT NULL but should be BINARY”这类的问题,如果按照网上的说法,删除数据表再去重建,太费事了。因此在升级前,建议直接进老版本的docker容器内,把三个数据库(ccnet_db,seafile_db,seahub_db)都全部mysqldump出来

然后改一下docker-compose,只保留mariadb这一项服务,注意把挂载路径改到临时路径去,代码在这:

version: '2.0'
services:
db:
image: mariadb:10.1
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=root # Requested, set the root's password of MySQL service.
- MYSQL_LOG_CONSOLE=true
volumes:
- /tmp/seafile-mysql/db:/var/lib/mysql # Requested, specifies the path to MySQL data persistent store.
networks:
- seafile-net

然后用docker-compose up -d跑起来,这个时候因为临时路径里没有数据库,所以容器内的mysql会自己初始化一个,然后进容器系统,把之前mysqldump导出的数据库,挨个导入进去,用户root的密码也是root,后续需要输入的。

接着,要创建用户和分配权限,用这一行命令:

for database in {ccnet_db,seafile_db,seahub_db}; do /usr/bin/mysql -e "grant all on ${database}.* to 'seafile'@'%.%.%.%' identified by '467fa02f-bf9a-4afb-9300-c4683073162a';"; done

然后你就可以停掉docker-compose的数据库了,把/tmp/seafile-mysql/db 拷贝到你的工作目录,比如 /opt/seafile-mysql

第二个问题,这个问题就比较无语了,官方的docker里面,居然没有python,在升级时就会报错:Can’t find a python executable of version 2.7 or above in PATH

你在宿主机怎么安装python都没用,因为都是跑docker的,所以你得自己制作一下官方镜像,方法也比较简单,如下:

编辑Dockerfile,在里面写下以下内容:
FROM seafileltd/seafile-mc:latest
RUN apt-get update && apt-get upgrade -y && apt-get install -y python python-configparser

然后执行 docker build -t seafile-mc . (末尾有英文半角符号句号)

等待片刻,完成后修改官方的docker-compose.yml,把里面的官方镜像换成 seafile-mc:latest

完成以上步骤,就可以升级了。

Categories
Operations

nginx前端优化模块ngx_pagespeed

ngx_pagespeed 是 Nginx 的一个扩展模块,主要的功能是针对前端页面而进行服务器端的优化,可以帮助前端人员优化css、js以及图片。

ngx_pagespeed对nginx的负载能力有负优化的可能,虽然在启用某些模组后会减少客户端的请求数量(比如合并了css、js),但是会增加服务器额外的性能消耗,并影响网站的TTFB指标。因此在生产环境部署时还需谨慎。

ngx_pagespeed模块的主要功能如下:

图像优化:剥离元数据、动态调整,重新压缩
CSS和JavaScript压缩、合并、级联、内联
小资源内联
推迟图像和JavaScript加载
对HTML重写、压缩空格、去除注释等
提升缓存周期

针对ubuntu发行版,我已经制作好so模组,使用时根据当前nginx版本,把so文件放到/usr/lib/nginx/modules/路径,重启即可。

https://github.com/icodex/ngx_pagespeed.so

如果你是自编译的nginx,参考官网的编译方法。在模块搭配上,一般而言,使用默认的OptimizeForBandwidth级别就可以了,减少容错也有比较好的性能。如果要使用其他的重写级别,可以参考github仓库中示例,风险自评。

在PageSpeed测试环节,在gtmetrix上得到了93分。测试结果可以点击下列地址查看:http://gtmetrix.com/reports/blog.icodex.org/jmELNaSS
http://www.webpagetest.org/result/130510_X8_4Z8/