草庐IT

怎样用 Docker 部署 Seafile 服务器来托管你自己的文件同步和共享解决方案

Hunter Wittenborn 2023-03-28 原文

首先,什么是 Seafile ?

Seafile 是一个自托管文件同步程序,采用客户端/服务器模式,即你有笔记本、手机等多个设备,能够连接到一个中心服务器。

不像类似 Nextcloud 或 ownCloud 这些更流行的替代品一样,Seafile 试图遵循 “只做一件事,但是要做好” 的理念。同样,Seafile 没有内置额外的类似联系人或者日历聚合的功能。

相反,Seafile 只专注于文件同步、共享及与之相关的事情,仅此而已。但正因为如此,它最终做的非常好。

使用 Docker 和 NGINX 部署 Seafile 服务器


高级教程

我们的许多教程都是针对初学者的。这篇则不然,它是为那些经常鼓捣 DIY 项目和喜欢自托管的高级用户设计的。这个教程假定你可以熟练的使用命令行,而且你至少对我们将要使用的程序有一定的了解。


虽然整个过程完全可以不使用 NGINX ,但是使用 NGINX 更加容易配置,而且在将来更加容易的自托管更多的服务。

如果你想完全使用 Docker 环境,你也可以 ​​在 Docker 内部设置 NGINX​​ ,但是它这会使事情变得更加复杂,并且不能够带来太多好处。同样,在本教程里也不会涉及这些。

安装设置 NGINX

在这个教程中,我会使用 Ubuntu,因此会使用 ​​apt​​​ 来安装软件包。如果你使用 Fedora 或者一些其他非 Debian 发行版,请使用你的发行版的 包管理器。

NGINX 既是一个网页浏览器,又是一个代理服务器。它将起到 Seafile 服务器和互联网之间网络连接的作用,同时也使一些任务更容易处理。

要安装 NGINX ,使用以下命令:

sudo apt install nginx
如果你想使用 HTTPS(也就是浏览器中的小挂锁),你需要安装 ​​Certbot​​:

sudo apt install certbot python3-certbot-nginx
下一步,你需要设置 NGINX 来连接我们之后将要设置的 Seafile 实例。

首先,运行以下命令:

sudo nano /etc/nginx/sites-available/seafile.conf
键入下方的文本到文件中:

server {
server_name localhost;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
重要: 将 ​​server_name​​​ 一行的 ​​localhost​​​ 替换为你要访问你的服务器的地址(比如 ​​seafile.example.com​​​ 或者 ​​192.168.0.0​​)。不确定要输入什么吗?


  • 如果你只是为了测试,使用 ​​localhost​​ 。这个设置将 只允许你从你的电脑访问服务器 ,仅此而已。
  • 如果你想通过你的本地 Wi-Fi 连接使用 Seafile(与你在同一 Wi-Fi 网络上),你应该键入 ​​你的计算机 IP 地址​​​。你也可以考虑 ​​设置一个静态 IP 地址​​,尽管这不是必须的。
  • 如果你有一个公网 IP 地址,你知道它指向你的系统,就使用它。
  • 如果你有一个域名(比如 ​​example.com​​​、​​example.org​​)和公网 IP 地址,更改你的 DNS 设置,将域名指向你的系统的 IP 地址。这也需要将公网 IP 指向你的系统。

现在你需要复制配置文件到 NGINX 的查找目录中,然后重启 NGINX :

sudo ln -s /etc/nginx/sites-available/seafile.conf /etc/nginx/sites-enabled/seafile.conf
sudo systemctl restart nginx
如果你要安装 Cerbot,你也需要运行以下命令来设置 HTTPS :

sudo certbot
如果要重定向 HTTP 流量 到 HTTPS ,选择 ​​2​​ 。

现在可以来确认我们目前设置的一切都是否正常工作。如果你访问你的站点,你应该看到一个屏幕上写着 ​​502 Bad Gateway​​ 字样。

安装 Docker 和 Docker Compose

现在要进入有趣的部分了!

首先,你需要安装 Docker​ 和 Docker Compose​ 。Docker Compose 需要利用 ​​docker-compose.yml​​​ 文件,这将使管理多个 Docker 容器 的 Seafile 需求变得更加容易。

Docker 和 Docker Compose 可以用以下的命令来安装:

sudo apt install docker.io docker-compose
检查 Docker 是否安装并运行,运行以下命令:

sudo docker run --rm hello-world
如果你完全安装成功,你应该在终端能看到这几行文字:

如果你想避免在 ​​docker​​​ 命令的开始添加 ​​sudo​​​ 的话,你可以运行以下的命令将你自己添加到 ​​docker​​ 组:

sudo groupadd docker
sudo usermod -aG docker $USER
这个教程的其余部分假定你已经运行了以上两个命令。如果你没有运行,在所有 ​​docker​​​ 或 ​​docker-compose​​​ 的命令都添加 ​​sudo​​ 。

安装 Seafile 服务器

这部分比之前部分明显容易的多。你所需要做的是输入一些文本到文件,然后运行一些命令。

打开一个终端,然后创建一个 Seafile 服务器用来储存内容的目录,并进入目录中:

mkdir ~/seafile-server && cd ~/seafile-server

转到你创建的目录然后运行以下命令:

nano docker-compose.yml
下一步,在弹出的窗口中键入以下文本内容:

version: '2.0'
services:
db:
image: mariadb
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_LOG_CONSOLE=true
volumes:
- ./data/mariadb:/var/lib/mysql
networks:
- seafile-net

memcached:
image: memcached
container_name: seafile-memcached
entrypoint: memcached -m 256
networks:
- seafile-net

seafile:
image: seafileltd/seafile-mc
container_name: seafile
ports:
- "8080:80"
volumes:
- ./data/app:/shared
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=password
- TIME_ZONE=Etc/UTC
- SEAFILE_ADMIN_EMAIL=me@example.com
- SEAFILE_ADMIN_PASSWORD=password
- SEAFILE_SERVER_LETSENCRYPT=false
- SEAFILE_SERVER_HOSTNAME=docs.seafile.com
depends_on:
- db
- memcached
networks:
- seafile-net

networks:
seafile-net:


在保存文件之前,一些参数需要更改:


  • ​MYSQL_ROOT_PASSWORD​​​:更换强壮的密码,你不必记住它,所以不要尝试挑选简单的密码。如果你需要帮助生成一个,请使用 ​​密码生成器​​​ 。我建议使用 20 位字符长度并且避免使用任何的特殊字符(​​!@#$%^&*​​ 等符号)。
  • ​DB_ROOT_PASSWD​​​:更改你为 ​​MYSQL_ROOT_PASSWORD​​ 设置的值 。
  • ​SEAFILE_ADMIN_EMAIL​​:设置管理员帐户的电子邮件地址。
  • ​SEAFILE_ADMIN_PASSWORD​​​:设置管理员帐户密码。避免与​​MYSQL_ROOT_PASSWORD​​​ 或者 ​​DB_ROOT_PASSWD​​ 密码相同。
  • ​SEAFILE_SERVER_HOSTNAME​​:在 NGINX 配置中设置 Seafile 的服务器主机名。

完成之后,你可以运行 ​​docker-compose​​ 整个运行起来:

docker-compose up -d
可能需要花一到两分钟,取决于你的网速,因为需要拉下几个 Seafile 需要运行的几个容器。

完成以后,还需要几分钟来完成。你也可以通过以下命令来检查运行状态:

docker logs seafile
当完成了,你将会看到如下输出:

下一步,你只需要在你的浏览器里键入你设置的 ​​SEAFILE_SERVER_HOSTNAME​​ 的地址,然后你应该看到登录屏幕的页面。

就这样!现在一切功能齐全,准备用客户端来使用。

安装 Seafile 客户端

Seafile 移动客户端在 ​​Google Play​​​、​​F-Droid​​​ 和 ​​苹果商店​​​ 都是可用的。Seafile 也有 Linux、Windows 和 Mac 桌面客户端可用,可在 ​​此处​​ 找到。

通过 ​​seafile-gui​​ 软件包,可以在 Ubuntu 系统轻松获得 Seafile :

sudo apt install seafile-gui
通过 ​​seafile-client​​ 软件包 Seafile 也包含在 Arch 用户的 AUR 包管理器中。

结语

请尽情探索客户端及其所能提供的一切。我将在未来的一篇文章中详细阐述 Seafile 客户端的所有功能。(敬请期待 ?)

总的来说,如果有什么错误,或者你有什么问题,请在下方评论 – 我会尽我所能回应。

有关怎样用 Docker 部署 Seafile 服务器来托管你自己的文件同步和共享解决方案的更多相关文章

  1. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  2. ruby - 通过 ruby​​ 进程共享变量 - 2

    我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

  3. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  4. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  5. ruby-on-rails - 如果我将 ruby​​ 版本 2.5.1 与 rails 版本 2.3.18 一起使用会怎样? - 2

    如果我使用ruby​​版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby​​1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更

  6. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  7. 怎样用一台手机做自媒体? - 2

    其实做自媒体的成本并不高,入门只需要一部手机即可!在手机上找视频素材、使用手机剪辑视频、最后使用手机发布视频作品获得收益!方法并不难,今天这期内容就来给粉丝们分享一种小方法,每天稳定收益100-300,抓紧点赞收藏!1、找素材(1)使用手机拍摄自己喜欢的经典段落,使用程序把文案内容提取出来(2)也可以在豆瓣、知乎、微博等网站中找一些自己需要的文案素材(3)把文案进行润色修改,可以加入一些自己的观点(4)视频素材可以使用软件中自带的素材,也可以在素材网站中下载完整版的素材2、文案配音(1)把复制好的文案直接导入小程序中(2)调整音色、音调后一键合成音频即可(3)可以选择自己朗读配音,需要花一点时

  8. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  9. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  10. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

随机推荐