树莓派3B+部署seafile7.1.4(使用 MySQL/MariaDB)

seafile自从6.3.x版本以后就开始有一些安装上的坑了.以下步骤我会在官方建议里插入一些坑的解决办法.我个人使用的是树莓派3B+,系统是官方32位系统的:2020-05-27-raspios-buster-lite-armhf.img,建议换下源,这是清华源的地址和用法.

开始是安装前的环境准备工作,切换至root

sudo su
apt-get install python3 python3-setuptools python3-pip python3-ldap fail2ban nginx mariadb-server -y

因为7.1.x版本开始,seafile已经全面升级为python3版本,所以还需要安装一些python3的软件包,坑就从这开始了,安装的时候国内的后面加上豆瓣的pip源,速度能快些.

这里会出现3个问题,第一个,Pillow可能会装不上,因为缺以下依赖,装好再装Pillow.

apt-get install python3-dev python3-setuptools libtiff5-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev libharfbuzz-dev libfribidi-dev tcl8.6-dev tk8.6-dev python3-tk libselinux1 sqlite3 -y
pip3 install --timeout=3600 Pillow -i https://pypi.douban.com/simple/

第二个,pylibmc可能会装不上,继续装依赖…

apt-get install libmemcached-dev -y
pip3 install --timeout=3600 pylibmc -i https://pypi.douban.com/simple/

第三个,psd-tools,这个是PS文件预览用的软件依赖包,如果装不上也不影响使用.然后把剩下的python3软件包装一下

pip3 install --timeout=3600 captcha jinja2 sqlalchemy django-pylibmc django-simple-captcha psd-tools -i https://pypi.douban.com/simple/

接下来先设置一下mysql的root密码,后面安装seafile需要使用

sudo mysql
use mysql;
update mysql.user set password=password('password') where user='root';
update mysql.user set plugin='' where user='root';
flush privileges;
quit
sudo systemctl restart mariadb

创建一个新用户seafile(设置完密码,一路回车),并且切换到seafile用户,这是一个小坑,应该是7.0或者6.3版本开始有的.

sudo adduser seafile
sudo su seafile
cd

因为这个用户只用作seafile使用,我们就在seafile用户的/home/seafile根目录下安装好了.

wget https://github.com/haiwen/seafile-rpi/releases/download/v7.1.4/seafile-server_7.1.4_pi-buster-stable.tar.gz
tar xfz seafile-server_7.1.4_pi-buster-stable.tar.gz
mkdir installed
mv seafile-server_7.1.4_pi-buster-stable.tar.gz installed/
cd seafile-server-7.1.4

现在去执行./setup-seafile-mysql.sh这里可能会提示你"ccnet-init: No such file or directory",这又是缺个依赖,切回root装下依赖,再切回来,你也可以在前面把"libselinux1"这个依赖给一起先装了.

su root
apt-get update
apt install libselinux1
su seafile

然后还是在seafile-server-7.1.4目录下,执行./setup-seafile-mysql.sh,回答相关创建问题.

cd seafile-server-7.1.4
./setup-seafile-mysql.sh

创建完以后,要踏最后一个坑,这是7.1的坑,官方的介绍是,seafile用的python是3.6的,但是是支持3.7的,如果你用的系统是3.7的话,得给3.7做个软连接冒充3.6,真拗口.

cd
cd seafile-server-latest/seafile/lib
ln -s python3.7 python3.6

接下来就可以启动Seafile和Seahub,创建管理员账户密码了.

cd
cd seafile-server-latest
./seafile.sh start
./seahub.sh start

然后停止seafile,seahub,配置服务自启动以及nginx.

./seahub.sh stop
./seafile.sh stop
exit

然后黏贴下面内容,CTRL+O保存,CTRL+X退出

seafile.service创建

sudo nano /etc/systemd/system/seafile.service
[Unit]
Description=Seafile
After=network.target mysql.service

[Service]
Type=forking
ExecStart=/home/seafile/seafile-server-latest/seafile.sh start
ExecStop=/home/seafile/seafile-server-latest/seafile.sh stop
User=seafile
Group=seafile

[Install]
WantedBy=multi-user.target

seahub.service创建

sudo nano /etc/systemd/system/seahub.service
[Unit]
Description=Seafile hub
After=network.target seafile.service

[Service]
Environment="LC_ALL=C"
Type=forking
ExecStart=/home/seafile/seafile-server-latest/seahub.sh start
ExecStop=/home/seafile/seafile-server-latest/seahub.sh stop
User=seafile
Group=seafile

[Install]
WantedBy=multi-user.target
sudo systemctl enable seafile seahub

配置nginx

sudo nano /etc/nginx/sites-available/seafile.conf
server {
    listen 80;
    server_name _;

    proxy_set_header X-Forwarded-For $remote_addr;

    location / {
         proxy_pass         http://127.0.0.1:8000;
         proxy_set_header   Host $host;
         proxy_set_header   X-Real-IP $remote_addr;
         proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header   X-Forwarded-Host $server_name;
         proxy_read_timeout  1200s;

         # used for view/edit office file via Office Online Server
         client_max_body_size 0;

         access_log      /var/log/nginx/seahub.access.log;
         error_log       /var/log/nginx/seahub.error.log;
    }
	
	location /seafhttp {
	rewrite ^/seafhttp(.*)$ $1 break;
	proxy_pass http://127.0.0.1:8082;
	client_max_body_size 0;
	proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;

	proxy_connect_timeout  36000s;
	proxy_read_timeout  36000s;
	proxy_send_timeout  36000s;

	send_timeout  36000s;

	access_log      /var/log/nginx/seafhttp.access.log;
	error_log       /var/log/nginx/seafhttp.error.log;
    }
    location /media {
        root /home/seafile/seafile-server-latest/seahub;
    }
}

删除标准配置并创建新的nginx快捷方式

sudo rm /etc/nginx/sites-enabled/default
sudo rm /etc/nginx/sites-available/default
sudo ln -s /etc/nginx/sites-available/seafile.conf /etc/nginx/sites-enabled/seafile.conf

重新加载nginx,并且修改seafile配置

sudo nginx -t #Ergebnis sollte "Syntax ok" lauten
sudo nginx -s reload
sudo su seafile
cd
cd conf
nano ccnet.conf
SERVICE_URL = http://hostname #hostname改成本机IP,修改内容
nano seahub_settings.py
FILE_SERVER_ROOT = 'http://hostname/seafhttp' #hostname改成本机IP,新增内容

然后重启,试一下seafile及seahub服务是否启动~

sudo reboot

接下来配置反代,需要自己有一个公网IP的服务器,树莓派和服务器都下载一下.

wget http://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_arm.tar.gz
tar xfz frp_0.33.0_linux_arm.tar.gz
cd frp_0.33.0_linux_arm

服务器上修改frps.ini文件,并且运行.

nano frps.ini
--------------------
[common]
bind_port = 7000  #根据实际使用端口情况更新IP端口
--------------------
nohup ./frps -c ./frps.ini

树莓派上修改frpc.ini文件,并且运行.

nano frpc.ini
--------------------
[common]
server_addr = x.x.x.x  #这里填服务器的公网IP
server_port = 7000  #跟服务器的端口对应相同

#顺手加下ssh的端口好了
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

#seafile需要开放的端口
[range:seafile]
type = tcp
local_ip = 127.0.0.1
local_port = 80  #本地seafile端口为80
remote_port = 8000 #服务器就对应用8000好了.上下要对应
--------------------
nohup ./frpc -c ./frpc.ini

关于frp后台自启可以参照这个博文:frp自动启动的几个方法

如果你想通过外网访问的话,别忘了最后2个坑,一大一小.

第一个,你需要在web端系统管理-设置里,把"SERVICE_URL"以及"FILE_SERVER_ROOT"改成如下,码掉的地方填服务器公网IP,因为前面我们用nginx把8000端口映射到80端口,8082端口映射到子目录seafhttp下了,然后又用frp把80端口映射到服务器的8000端口上,所以这俩地址就是这样填的.


第二个小坑,头像不显示,把conf目录下的gunicorn.conf.py文件修改一下127.0.0.1:8000改成0.0.0.0:8000.

# default localhost:8000
bind = "127.0.0.1:8000"

重启一下,就行了!

2 个赞

入坑的文章,:+1:树莓派吃灰了好几年,linux也忘干干净净了,从这里又找回了一点儿记忆。不过现在看这个已经有点儿费劲了,生锈了//

1 个赞