如何使用 Docker 安装 FileRun

如何使用 Docker 安装 FileRun

FileRun 是一个自托管的文件同步和共享基于 Web 的应用程序。 它可以在任何服务器上运行,包括 Linux、Windows、NAS 等。可以使用 PWA 应用程序在 Web 和移动设备上访问这些文件。 它与 Nextcloud 兼容,因此您可以使用其桌面和移动应用程序访问您的文件。 您还可以使用 WebDAV 协议访问这些文件。 FileRun 也可以用作 Google Photos 的替代品,并支持 office 和图像插件。

FileRun 可作为免费版本使用,最多可支持 10 个帐户;如果您需要更多功能和帐户,则可作为企业版本使用。 在本教程中,您将学习如何在 Linux 服务器上使用 Docker 环境安装 FileRun。 我们还将配置 Elasticsearch 以提供全文搜索支持。

先决条件

  • 至少具有 2 个 CPU 内核和 2GB RAM 的 Linux 服务器。 本教程将在每个 Linux 发行版上运行。

  • 具有 sudo 权限的非根用户。

  • 指向服务器的完全限定域名 (FQDN)。 为了我们的目的,我们将使用 filerun.example.com 作为域名。

  • 确保一切都已更新。

    ## Ubuntu/Debian
    $sudo apt update && sudo apt upgrade
    
    ## CentOS/Fedora/Rocky Linux/AlmaLinux
    $sudo dnf update
    
  • 安装基本实用程序包。 其中一些可能已经安装。

    ## Ubuntu/Debian
    $sudo apt install wget curl nano unzip -y
    
    ## CentOS/Rocky Linux/AlmaLinux
    $sudo dnf install wget curl nano unzip yum-utils -y
    

第 1 步 – 配置防火墙

Cent OS/Rocky Linux/Alma Linux

您应该安装了 Firewalld 防火墙。 检查防火墙的状态。

$sudo firewall-cmd --state
running

打开端口 80、9443 和 443。Portainer 使用端口 9443 通过 HTTPS 公开其 Web UI。 Nginx 代理管理器为其 UI 使用端口 81。

$sudo firewall-cmd --permanent --add-service=http
$sudo firewall-cmd --permanent --add-service=https

重新加载防火墙以启用更改。

$sudo firewall-cmd --reload

Ubuntu/Debian

Ubuntu 和 Debian 系统默认使用 ufw (Uncomplicated Firewall)。

检查防火墙是否正在运行。

$sudo ufw status

如果它正在运行,则打开 HTTP 和 HTTPS 端口。

$sudo ufw allow http
$sudo ufw allow https

如果防火墙未运行,请打开 SSH 端口。

$sudo ufw allow "OpenSSH"

如果防火墙未运行,请启用它。

$sudo ufw enable

如果它正在运行,请重新加载它以应用更改。

$sudo ufw reload

第 2 步 – 安装 Docker 和 Docker Compose

运行以下命令来安装 Docker。

CentOS/Rocky Linux/Alma Linux

$sudo dnf install -y yum-utils
$sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
$sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin

在尝试安装 Docker 时,您可能会遇到以下错误。

ror: 
 Problem: problem with installed package buildah-1:1.26.2-1.el9_0.x86_64
  - package buildah-1:1.26.2-1.el9_0.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
  - package containerd.io-1.6.9-3.1.el9.x86_64 conflicts with runc provided by runc-4:1.1.3-2.el9_0.x86_64
  - package containerd.io-1.6.9-3.1.el9.x86_64 obsoletes runc provided by runc-4:1.1.3-2.el9_0.x86_64
  - cannot install the best candidate for the job

如果出现上述错误,请使用以下命令。

$sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin --allowerasing

Ubuntu

$sudo apt install ca-certificates curl gnupg lsb-release
$curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$sudo apt update
$sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

德比安

$sudo apt install ca-certificates curl gnupg lsb-release
$curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$sudo apt update
$sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

启用并启动 Docker 服务。

$sudo systemctl start docker --now

将您的用户名添加到 Docker 组。

$sudo usermod -aG docker $USER

注销系统并重新登录以应用更改。

第 3 步 – 创建 FileRun Docker 配置

为 Filerun Docker 配置创建一个目录。

$mkdir dockerfilerun

切换到目录。

$cd ~/dockerfilerun

创建并打开 Docker 撰写文件进行编辑。Advertisement.banner-1{text-align:center;padding-top:10px!important;padding-bottom:10px!important;padding-left:0!important;padding-right: 0重要;宽度:100%重要;框尺寸:边框框重要;背景颜色:#eee重要;轮廓:1px solid #dfdfdf;最小高度:125px重要}

$nano docker-compose.yml

将以下代码粘贴到其中。

version: '3.8'

services:
  db:
    image: mariadb:10.5
    container_name: filerun_mariadb
    environment:
      MYSQL_ROOT_PASSWORD: your_mysql_root_password
      MYSQL_USER: your_filerun_username
      MYSQL_PASSWORD: your_filerun_password
      MYSQL_DATABASE: your_filerun_database
    volumes:
      - ./db:/var/lib/mysql

  web:
    image: filerun/filerun
    container_name: filerun_web
    environment:
      FR_DB_HOST: db
      FR_DB_PORT: 3306
      FR_DB_NAME: your_filerun_database
      FR_DB_USER: your_filerun_username
      FR_DB_PASS: your_filerun_password
      APACHE_RUN_USER: www-data
      APACHE_RUN_USER_ID: 33
      APACHE_RUN_GROUP: www-data
      APACHE_RUN_GROUP_ID: 33
    depends_on:
      - db
    links:
      - db
      - tika
      - elasticsearch
    ports:
      - "8080:80"
    volumes:
      - ./html:/var/www/html
      - ./user-files:/user-files

  tika:
    image: apache/tika
    container_name: filerun_tika

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.8.23
    container_name: filerun_search
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65535
        hard: 65535
    mem_limit: 1g
    volumes:
      - ./esearch:/usr/share/elasticsearch/data

通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

让我们浏览一下撰写文件。

  • 首先,我们拉取用于存储数据的 MariaDB docker 镜像。 输入 root 密码、MySQL 用户名、MySQL 密码和 FileRun 的数据库名称。 我们通过将数据库安装在 ~/dockerfilerun/db 目录。
  • 接下来,我们使用相同的数据库凭据拉取连接到 MariaDB 映像的 FileRun 容器。 它还在内部运行 Apache 服务器并通过端口 80 公开 FileRun。我们还在主机上安装了一个公共目录 ~/dockerfilerun/html 目录和相应的用户上传的文件在 ~/dockerfilerun/user-files 目录。
  • 接下来,我们拉取帮助 Filerun 读取文件元数据的 Apache Tika 容器。
  • 最后,我们拉取 Elasticsearch 容器,它有助于对上传到 FileRun 的内容运行全文搜索。 FIleRun 目前仅支持 Elasticsearch 6.8.x。 您可以使用环境变量来控制与服务器上可用内存相关的内存限制。 我们将 Elasticsearch 数据挂载在 ~/dockerfilerun/esearch 目录。

为 Elasticsearch 创建目录。 Docker 会自动为成交量创建目录,但 Elasticsearch 仅在本地目录归用户所有且组的 ID 为 1000 时才起作用。

$mkdir esearch

使用以下命令设置正确的权限。

$chmod g+rwx esearch
$sudo chgrp 1000 esearch

在启动容器之前,我们需要增加对 Elasticsearch 工作的 mmap 计数的限制。 打开 /etc/sysctl.conf 文件进行编辑。

$sudo nano /etc/sysctl.conf

将以下行粘贴到底部。

vm.max_map_count = 262144

通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。 这将使更改永久生效,但前提是您重新启动系统。

运行以下命令以立即实施更改。

$sudo sysctl -w vm.max_map_count=262144

重新启动 Docker 服务。

$sudo systemctl restart docker

第 4 步 – 运行 FileRun Docker 容器

运行以下命令以启动 Docker 容器。

$docker compose up -d

该过程需要一些时间才能完成,包括获取 Docker 映像、创建网络和启动所需的容器。

检查容器的状态。

$docker ps

您将获得类似的输出。

Docker 容器状态

下一步是使用 Nginx 安装 SSL 以使其更安全。 我们将使用 Nginx 服务器来执行此操作。

第 5 步 – 安装 Nginx

CentOS/Rocky Linux/Alma Linux

要安装最新版本的 Nginx,您需要安装官方 Nginx 存储库。

安装先决条件包。

$sudo dnf install yum-utils

创建并打开 Nginx yum 存储库。

$sudo nano /etc/yum.repos.d/nginx.repo

粘贴以下代码。

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

安装 Nginx。

$sudo dnf install nginx

启用并启动 Nginx 服务器。

$sudo systemctl start nginx --now

配置 SELinux 以允许来自 Filerun 的网络连接。

$sudo setsebool -P httpd_can_network_connect on

Ubuntu/Debian

Ubuntu 22.04 和 Debian 11 附带旧版本的 Nginx。 要安装最新版本,您需要下载官方 Nginx 存储库。

导入 Nginx 的签名密钥。

$curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

添加 Nginx 稳定版本的存储库。

$echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

对于 Debian,请改用以下命令。

$echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

更新系统存储库。

$sudo apt update

安装 Nginx。

$sudo apt install nginx

验证安装。

$nginx -v
nginx version: nginx/1.22.1

第 6 步 – 安装 SSL

Ubuntu/Debian

我们需要安装 Certbot 来生成 SSL 证书。 您可以使用 Ubuntu 的存储库安装 Certbot,也可以使用 Snapd 工具获取最新版本。 我们将使用 Snapd 版本。

Ubuntu 22.04 和 Debian 11 默认安装了 Snapd。 运行以下命令以确保您的 Snapd 版本是最新的。

$sudo snap install core

安装 Certbot。

$sudo snap install --classic certbot

使用以下命令确保可以通过创建符号链接来运行 Certbot 命令 /usr/bin 目录。

$sudo ln -s /snap/bin/certbot /usr/bin/certbot

CentOS/Rocky Linux/Alma Linux

Certbot 需要 EPEL 存储库才能工作。

$sudo dnf install epel-release

我们将使用 Snapd 安装 Certbot。 安装快照。

$sudo dnf install snapd

启用并启动 Snap 服务。

$sudo systemctl enable snapd --now

安装 Snap 核心包。

$sudo snap install core
$sudo snap refresh core

为 Snapd 工作创建必要的链接。

$sudo ln -s /var/lib/snapd/snap /snap
$echo 'export P新高=$P新高:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

发出以下命令以安装 Certbot。

$sudo snap install --classic certbot

通过创建指向其可执行文件的符号链接来启用 Certbot。

$sudo ln -s /snap/bin/certbot /usr/bin/certbot

运行以下命令以生成 SSL 证书。

$sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d filerun.example.com

我们已经使用生成了 SSL 证书 certonly 使用 Nginx 的 Certbot 选项。 它使用 Nginx 服务器安装证书但不修改任何内容。

上面的命令会将证书下载到 /etc/letsencrypt/live/filerun.example.com 服务器上的目录。

生成 Diffie-Hellman 组证书。

$sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

要检查 SSL 续订是否正常工作,请试运行该过程。

$sudo certbot renew --dry-run

如果您没有看到任何错误,则一切就绪。 您的证书将自动更新。

第 7 步 – 配置 Nginx

打开文件 /etc/nginx/nginx.conf 用于编辑。

$sudo nano /etc/nginx/nginx.conf

在该行之前添加以下行 include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

创建并打开文件 /etc/nginx/conf.d/filerun.conf 用于编辑。

$sudo nano /etc/nginx/conf.d/filerun.conf

将以下代码粘贴到其中。 代替 filerun.example.com 用你的域名。

upstream backend {
   server 127.0.0.1:8080;
   keepalive 32;
}

server {
  listen 80 default_server;
  server_name filerun.example.com;
  return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl http2;
   server_name filerun.example.com;

   http2_push_preload on; # Enable HTTP/2 Server Push

   ssl_certificate /etc/letsencrypt/live/filerun.example.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/filerun.example.com/privkey.pem;
   ssl_trusted_certificate /etc/letsencrypt/live/filerun.example.com/chain.pem;
   ssl_session_timeout 1d;

   # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
   ssl_protocols TLSv1.2 TLSv1.3;

   # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
   # prevent replay attacks.
   #
   # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
   ssl_early_data on;

   ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:50m;
   # OCSP Stapling --- fetch OCSP records from URL in ssl_certificate and cache them
   ssl_stapling on;
   ssl_stapling_verify on;
   ssl_dhparam /etc/ssl/certs/dhparam.pem;

   add_header X-Early-Data $tls1_3_early_data;

   access_log /var/log/nginx/filerun.access.log main;
   error_log  /var/log/nginx/filerun.error.log;

   location / {
       client_max_body_size 50M;
       proxy_set_header Connection "";
       proxy_set_header Host $http_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-Proto $scheme;
       proxy_set_header X-Forwarded-Protocol $scheme;
       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       proxy_read_timeout 1800s;
       proxy_connect_timeout 1800s;
       proxy_http_version 1.1;
       proxy_pass http://backend;
   }
}

# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
  "~." $ssl_early_data;
  default "";
}

通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

验证您的 Nginx 配置。

$sudo nginx -t

重新启动 Nginx 服务器。

$sudo systemctl restart nginx

第 8 步 – 访问和配置 FileRun

访问网址 https://filerun.example.com 您将看到以下屏幕。

文件运行安装程序

单击下一步按钮打开系统要求页面。

FileRun 服务器要求页面

如果一切正常,请单击“下一步”按钮前进到数据库设置页面。

FileRun 数据库设置页面

填写您的数据库名称、用户和密码,然后单击“下一步”按钮继续。

FileRun 用户凭证

在这里您将获得登录详细信息。 单击下一步按钮打开登录页面。

FileRun 登录页面

输入上一步的登录凭据,然后单击“登录”按钮打开 FileRun 的仪表板。

文件运行仪表板

单击屏幕最左侧底部的超级用户链接,然后单击帐户设置。

FileRun 帐户设置

单击更改密码选项卡以访问以下页面,您可以在其中更改默认密码。 单击保存更改按钮进行保存。

FileRun 更改密码屏幕

单击页面左下角的控制面板链接以访问 FileRun 控制面板。 访问页面的文件 >> 搜索部分。 在这里,我们将启用一些高级文件搜索和 OCR 功能。

进入 http://elasticsearch:9200 作为 ElasticSearch 主机 URL。 Hostname 是指 docker 文件中 Elastic 的服务名称。 单击测试服务器按钮以测试它是否正常工作。

FileRun ElasticSearch 测试

您应该在上面得到类似的输出,确认它正在正常工作。

进入 tika 作为 Apache Tika 服务器主机名。 进入 9998 作为端口号。 检查 OCR PDF 文件按钮。 单击测试服务器按钮以测试它是否正常工作。

FileRun Tika 测试

您应该得到 Tika 服务器的类似输出,确认它正在正常工作。 此外,单击 OCR 图像文件按钮。 单击页面顶部的保存更改按钮。

接下来,将 Default search criteria 选项的值从 Name 更改为 Contents 以启用全文搜索。 再次单击保存更改按钮以完成该过程。

FileRun 搜索设置

第 9 步 – 更新 FileRun

升级 FileRun 是一个简单的步骤。 切换到 FileRun 的 Docker 组合目录。

$cd ~/dockerfilerun

接下来,停止并移除现有容器。 不过,您的数据将被保留。

$docker compose down --remove-orphans

拉取最新版本的 FileRun docker 镜像。

$docker compose pull

再次启动容器。

$docker compose up -d

您的 FileRun 安装已更新并重新启动。

结论

本教程到此结束,您在其中学习了如何在 Linux 服务器上使用 Docker 安装 FileRun 文件托管软件。 如果您有任何问题,请在下面的评测中发表。

资讯来源:由0x资讯编译自HOWTOFORGE,版权归作者所有,未经许可,不得转载
你可能还喜欢