Seafile网盘安装

忙里偷闲,正好想起来TencentCloud有一台机制闲着也是闲着,先玩玩

直接冲docker, tencentCloud都是有心安装好了的,我直接pull不客气了

$ docker pull seafileltd/seafile

注意这里有很多人给了很多参数,咱不管那些,先把端口同开,一个8000(下载文件) , 一个8082( 上传文件) 其他设置先不搞

$ docker run -d -t --name seafile -p 8000:8000 -p 8082:8082 68

之后我们直接冲8000 和8082 , 悲剧了,我们没有可以登录的账号和密码。欸,遇事不要慌,我们进seafile的容器内修改配置不久搞定了么

$ docker exec -it 1c bash
root@1c123febd262:/opt/seafile# ls
ccnet       conf  pids          seafile-server-6.3.4   seahub-data
ccnet.sock  logs  seafile-data  seafile-server-latest

很爽的,我们一进来就是他的安装穆勒,看来是个合格的容器。俗话说的号,了解一个网盘最快的方式就是度娘,我们有一下两种选择方法:1.自己蝇头漫漫,不知向何处 2. 度娘给你指路,直奔杏花村。 那么,我们果断选择21 嘛,毕竟浏览一下网盘的文件结构页没啥不好。我记得我当年配的时候又要装数据库啥的,他直接搞定了,定有些不为人知的阴谋(笑)

众所周知,一个文件的配置最重点肯定是在conf里面,我们想都不想直接冲到donf中查看一番:

root@1c123febd262:/opt/seafile/conf# ls
ccnet.conf  gunicorn.conf  seafdav.conf  seafile.conf  seahub_settings.py  seahub_settings.pyc

我们一个一个点进去看嘛,这里顺便放一个教程链接:https://www.kancloud.cn/kancloud/seafile-manual/51436

ccnet.conf 部分与seafileconf重复
[General]
# 该设置不再使用
USER_NAME = seafile

# 使用seafile的ID 不要更改
ID = 688383cb430d37cd7619e9c12fc4e0370db17518
NAME = seafile
# URL
SERVICE_URL = http://seafile.example.com:8000

[Client]
# 该设置不在使用
PORT = 13419

# 数据库
[Database]
ENGINE = mysql
HOST = 127.0.0.1
PORT = 3306
USER = seafile
PASSWD = 5b73bcee-aa59-423a-93bc-b5da4688bb85
DB = ccnet_db
CONNECTION_CHARSET = utf8


[Client]
UNIX_SOCKET = /opt/seafile/ccnet.sock




gunicorn.conf 怎么说呢,属于是python相似度极高了
import os
daemon = True
# 应该是支持的worker进程为5个
workers = 5
# default localhost:8000
bind = "0.0.0.0:8000"
# Pid
pids_dir = '/opt/seafile/pids'
pidfile = os.path.join(pids_dir, 'seahub.pid')

# for file upload, we need a longer timeout value (default is only 30s, too short),超时判断,1200s,20min
timeout = 1200

limit_request_line = 8190


seafiledav.conf

[WEBDAV]
# 我就不自定义了
enabled = false
port = 8080
# 支持fastcgi, 详见nginx  https://www.jianshu.com/p/565217337247
# 我这个放在docker中, docker本身没有cgi, 而nginx打算部署在本机上所以就让他false了
fastcgi = false
share_name = /


seahub_settings.py
# -*- coding: utf-8 -*-
SECRET_KEY = "&zr1lph_%%&)1kbsjf@n@uywvkq1^9fsnp#vg=#82r&@w#z4dh"

# 数据库用的是Django连数据库的引擎,可能ORM更好管理一些吧,毕竟Django的ORM谁用谁香
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'seahub_db',
        'USER': 'seafile',
        'PASSWORD': '5b73bcee-aa59-423a-93bc-b5da4688bb85',
        'HOST': '127.0.0.1',
        'PORT': '3306'
    }
}


CACHES = {
    'default': {
        'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
        'LOCATION': '127.0.0.1:11211',
    },
    'locmem': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    },
}
COMPRESS_CACHE_BACKEND = 'locmem'
FILE_SERVER_ROOT = "http://seafile.example.com/seafhttp"

根据官方文档说的,我们可以更改在settings中的必要参数实现个性化即可,比如放开注册啥的

https://www.kancloud.cn/kancloud/seafile-manual/51501

所以很明显数据存在数据库中,咱直接冲数据库呗

Seafile数据占据两张表,一张是seafile_db 一张是seahub_db。seafile_db存放的类似于文件及所属信息

MariaDB [(none)]> use seafile_db
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [seafile_db]> show tables;
# 咱没完全显示,我显示了几类,这也是官网说的类别
+----------------------+
| Tables_in_seafile_db |
+----------------------+
Repo, Branch, Commit, FS, and Block ,咱把网址介绍放这https://www.kancloud.cn/kancloud/seafile-manual/51444

咱就是说,咱们慢慢看看,我就不把表意义放上了,放几个有代表性的(英文真的是硬伤)

Repo,本质来说就是库,每个用户都有一个库,存放库的各种关系等

FS 文件及路径。 FS刚创建的时候是没有的因为你没有文件(笑)

Branch 这个怎么解释也优点怪怪的,先放到一边,反正现在也没有

Block 文件会分成块进行存储的, Block保留这些块的类似顺序流和切分算法之类的信息。

再看seahub_db 简直更不当人,一堆东西,不过我们至少可以明确:

admin, user, share ,registration, profile等等信息都放在这里

啥意思呢; 除了文件,剩下辅助的 账号,密码,文件共享记录,注册, 邮箱操作等全在这,属于是附操作全了。这种数据库的管理应该也是多亏了django的ORM, 这些东西具体用到的时候在从源码里去看去读把。总之我们先搞定一个管理员账号。看了上面的一堆,我们先从最贱的搞起, 根据文档我们可以用reset-admin.sh搞定:https://www.kancloud.cn/kancloud/seafile-manual/51432

# 我们来读一下这个sh

SCRIPT=$(readlink -f "$0")
INSTALLPATH=$(dirname "${SCRIPT}")
TOPDIR=$(dirname "${INSTALLPATH}")
default_ccnet_conf_dir=${TOPDIR}/ccnet
central_config_dir=${TOPDIR}/conf

# 有没有装python
function check_python_executable() {
    if [[ "$PYTHON" != "" && -x $PYTHON ]]; then
        return 0
    fi

    if which python2.7 2>/dev/null 1>&2; then
        PYTHON=python2.7
    elif which python27 2>/dev/null 1>&2; then
        PYTHON=python27
    else
        echo
        echo "Can't find a python executable of version 2.7 or above in PATH"
        echo "Install python 2.7+ before continue."
        echo "Or if you installed it in a non-standard PATH, set the PYTHON enviroment varirable to it"
        echo
        exit 1
    fi
}

function read_seafile_data_dir () {
    seafile_ini=${default_ccnet_conf_dir}/seafile.ini
    if [[ ! -f ${seafile_ini} ]]; then
        echo "${seafile_ini} not found. Now quit"
        exit 1
    fi
    seafile_data_dir=$(cat "${seafile_ini}")
    if [[ ! -d ${seafile_data_dir} ]]; then
        echo "Your seafile server data directory \"${seafile_data_dir}\" is invalid or doesn't exits."
        echo "Please check it first, or create this directory yourself."
        echo ""
        exit 1;
    fi
}

check_python_executable;
read_seafile_data_dir;

export CCNET_CONF_DIR=${default_ccnet_conf_dir}
export SEAFILE_CONF_DIR=${seafile_data_dir}
export SEAFILE_CENTRAL_CONF_DIR=${central_config_dir}
export PYTHONPATH=${INSTALLPATH}/seafile/lib/python2.6/site-packages:${INSTALLPATH}/seafile/lib64/python2.6/site-packages:${INSTALLPATH}/seahub/thirdpart:$PYTHONPATH
export PYTHONPATH=${INSTALLPATH}/seafile/lib/python2.7/site-packages:${INSTALLPATH}/seafile/lib64/python2.7/site-packages:$PYTHONPATH

# 前面都是环境准备,我们看一眼manage.py
manage_py=${INSTALLPATH}/seahub/manage.py
exec "$PYTHON" "$manage_py" createsuperuser

虽然但是,没有pycharm看这个还是有点伤的,不过这个关键字应该很有印象。没错,这是用django的createsuperuser接口(我这的一层一层的往下翻了,感性却的小伙伴可以自己翻翻看)。

所以几乎可以确定这是一个纯纯Django框架部署的东西了,当然我也懒得往下翻了,咱直接查看Django root的数据库, 找到auth_user,真的有,就是放管理员的地方。至此我们可以选择修改数据库创建超级用户

这里更详细的解析我就不做了,咱们完成最后一步Nginx的部署

命途多舛了兄弟们,国内的机子URL都要去备案,那没办法了我就不搞了,弄了半天竹篮打水一场空,呵。 这里再强调一个问题,seafile的文件上传下载依赖于80端口,docker配置的时候把80端口映射出来,然后再conf/ccnet.conf 以及网页管理员的URL里面改成80的映射端口,不然就会像我一样麻了改3个小时还是上传下载失败