欢迎!系好安全带,因为这将是一段漫长的旅程。

首先,我有一个现有的媒体服务器,我破坏了一些权限,重新安装是唯一的选择。我有一个现有的 RAID 0 设置,其中包含我不想丢失的大量数据,以及一个独立的 SSD。所以,不用多说,我们开始吧!

安装Ubuntu服务器

我选择 Ubuntu Server 是因为 Ubuntu 有大量的社区支持,而且我不需要桌面 GUI。

在此处从下载 ISO。您可能必须选择“选项 3”才能实际下载。在撰写本文时,我使用的是 20.04.1,因此请考虑到这一点。

我选择刻录 ISO 的工具是balenaEtcher。

插入 USB,启动它,然后按照设置进行操作。确保您启用了 SSH 服务器并且在 SSD 上没有 LVM。检查以确保 SSD 的全部容量已安装到/,然后您就可以开始了。完成设置,移除 USB,然后重新启动。现在我们将切换到 SSH。

配置SSH

端口 22 很烂,但我们需要用它登录。使用您在安装期间添加的凭据连接到端口 22 上的服务器。

在防火墙中打开端口

sudo ufw allow 8364/tcp

进入全屏模式 退出全屏模式

打开 SSH 配置文件并更改使用的端口

sudo nano /etc/ssh/sshd_config

进入全屏模式 退出全屏模式

找到包含Port 22的行,取消注释并更改为Port 8364。保存 (ctrl x)。

重新启动 SSH 服务器,然后在您的客户端上重新连接。

sudo systemctl restart ssh

进入全屏模式 退出全屏模式

驱动器安装

查找驱动器的 UUID:

sudo blkid

进入全屏模式 退出全屏模式

将您的驱动器添加到/etc/fstab(小心,这可能是砖头):

sudo nano /etc/fstab

进入全屏模式 退出全屏模式

例如:

UUID=ccc56606-385e-4a16-89c4-7f1513ab1641 /home ext4 defaults 0 0

进入全屏模式 退出全屏模式

重新启动系统并正确安装您的驱动器。

码头工人

首先,更新您的系统:

sudo apt update
sudo apt upgrade

进入全屏模式 退出全屏模式

无需重复,请按照此处的 Docker 官方教程进行操作。只需遵循“使用存储库安装”和“安装 Docker 引擎”部分即可。

然后,按照此处的教程安装 Docker Compose。

下一部分主要取自Smart Home Beginner。

我们会将当前用户添加到 docker 组中,以简化将来的一些事情。

sudo gpasswd -a $USER docker

进入全屏模式 退出全屏模式

使用以下命令激活更改:

newgrp docker

进入全屏模式 退出全屏模式

搬运工

Portainer 是我们的码头管理解决方案。是的,我对此有严重的问题,但目前没有其他选择。也许这在未来会改变,但我们在这里。

运行以下命令以启动并运行 Portainer:

docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
docker run -d -p 9001:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent

进入全屏模式 退出全屏模式

打开浏览器并使用端口 9000 转到计算机的 IP。对我来说,这是http://192.168.1.50:9000。选择用户名和密码,然后创建用户。

选择“Docker”并按“连接”。

现在您在 Web 面板中,单击中间的“本地”,然后单击左侧的“堆栈”选项卡。单击“添加堆栈”并为其命名,例如“main_stack”。粘贴以下配置并根据您的需要进行调整。

---
version: "2.3"
services:

  organizr:
    image: linuxserver/organizr
    container_name: organizr
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - ${USERDIR}/organizr:/config
    ports:
      - 9983:80
    restart: unless-stopped

  watchtower:
    container_name: watchtower
    restart: always
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --schedule "0 0 4 * * *" --cleanup

  radarr:
    image: linuxserver/radarr
    container_name: radarr
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - ${USERDIR}/radarr:/config
      - ${USERDIR}/media/movies:/movies
      - ${USERDIR}/downloads:/downloads
    ports:
      - 7878:7878
    restart: unless-stopped

  sonarr:
    image: linuxserver/sonarr
    container_name: sonarr
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - ${USERDIR}/sonarr:/config
      - ${USERDIR}/media/tv:/tv
      - ${USERDIR}/downloads:/downloads
    ports:
      - 8989:8989
    restart: unless-stopped

  duckdns:
    image: linuxserver/duckdns
    container_name: duckdns
    environment:
      - TZ=${TZ}
      - SUBDOMAINS=kyleserver
      - TOKEN=326ab158-e842-4d0e-aa20-233e0f7e51e3
    restart: unless-stopped

  minecraft-creative:
    container_name: minecraft-creative
    image: itzg/minecraft-server
    environment:
      EULA: "true"
      TYPE: PAPER
      VERSION: 1.16.2
      CONSOLE: "false"
      LEVEL_TYPE: "flat"
    ports:
      - 25566:25565
    volumes:
      - ${USERDIR}/minecraft-creative:/data
    restart: unless-stopped

  minecraft-survival:
    container_name: minecraft-survival
    image: itzg/minecraft-server
    environment:
      EULA: "true"
      TYPE: PAPER
      VERSION: 1.16.2
      CONSOLE: "false"
      MEMORY: 2G
    ports:
      - 25565:25565
    volumes:
      - ${USERDIR}/minecraft-survival:/data
    restart: unless-stopped

  qbittorrent:
    image: linuxserver/qbittorrent:14.2.5.99202004250119-7015-2c65b79ubuntu18.04.1-ls93
    container_name: qbittorrent
    network_mode: "service:gluetun"
    volumes:
      - ${USERDIR}/docker/qbittorrent:/config
      - ${USERDIR}/downloads:/downloads
    restart: unless-stopped
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
      - UMASK_SET=002
      - WEBUI_PORT=4545

  gluetun:
    image: qmcgaw/private-internet-access
    container_name: gluetun
    cap_add:
      - NET_ADMIN
    network_mode: bridge
    ports:
      - 8888:8888
      - 8388:8388
      - 8388:8388/udp # Shadowsocks
      - 8001:8001
      - 4545:4545
      - 6881:6881
      - 6881:6881/udp
    volumes:
      - ${USERDIR}/gluetun:/gluetun
    environment:
      - VPNSP=surfshark
      - TZ=${TZ}
      - USER=USERNAME
      - PASSWORD=PASSWORD
      - REGION=Canada Toronto
    restart: unless-stopped

进入全屏模式 退出全屏模式

接下来,运行id并记下您的 uid 和 pid。我们将在“环境”部分输入这些作为 PUID 和 PGID。

PUID=1000
PGID=1000
TZ="America/Toronto"
USERDIR="/home/user"

进入全屏模式 退出全屏模式

添加您现在需要的任何环境变量,因为我不相信将来可以更改这些变量。

单击“部署堆栈”。

目前,qbittorrent 存在种子名称不匹配的问题,这就是它使用自定义图像版本的原因。如果将来得到解决,请删除冒号后的所有内容。

这些只是我用于我所做的一切的容器。 'gluetun' 容器连接到 Surfshark VPN 并路由 qbittorrent 容器的流量,允许普通容器连接到 VPN。这可以通过将任何容器的端口移动到gluetun并将其network_mode设置为“service:gluetun”来完成。之后,去检查每个容器以确保其正常工作。

果冻

嗯,这将是一个有趣的。如果您不想使用 GPU 进行硬件转码,只需在上述 compose 文件中添加一个标准容器即可。否则,请一起来玩这个地狱般的旅程。不能保证其中一些步骤不是多余的,因为我不知道这些步骤是如何工作的。但是,理想情况下,一切都会在此结束时工作。

首先,我们需要安装 NVIDIA 驱动程序。我使用的是 GTX 1050ti,但它应该适用于任何 NVIDIA 卡 10 系列或更新版本。

首先运行这些命令以禁用 Nouveau:

sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"

进入全屏模式 退出全屏模式

什么是 Nouveau,我们为什么要禁用它?你怎么敢问!随后,我不知道,但这是我们必须做的。

重启。

安装 DMKS:

sudo apt install dkms

进入全屏模式 退出全屏模式

按照此处的说明安装驱动程序。

补充说明:

  • 更新其他命令中的版本号

  • 每个命令都需要用sudo运行

对所有内容单击“是”,退出 GUI 后,重新启动,然后运行测试命令。

安装ffmpeg:

sudo apt install ffmpeg

进入全屏模式 退出全屏模式

接下来,我们需要设置 NVIDIA Container Toolkit。按照官方说明这里。

现在 GPU 应该很好用了!接下来,我们需要实际设置 Jellyfin。回到 SSH,转到您的主目录 (cd)。

创建一个名为docker-compose.yml的新 docker compose 文件,并用以下内容填充它:

version: "2.3"
services:
  jellyfin:
    image: linuxserver/jellyfin
    container_name: jellyfin
    network_mode: "host"
    runtime: nvidia
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/Toronto
      - NVIDIA_VISIBLE_DEVICES=all
    volumes:
      - /home/user/jellyfin:/config
      - /home/user/media/tv:/data/tvshows
      - /home/user/media/movies:/data/movies
    ports:
      - 8080:8096
      - 7359:7359/udp
    restart: unless-stopped

进入全屏模式 退出全屏模式

运行docker-compose up -d,Jellyfin 将运行。与直觉相反,转到服务器 IP 上的端口 8096 并登录。

更改 Jellyfin 设置

  • 转至设置 > 高级 > 网络。将“本地 HTTP 端口号”和“公共 HTTP 端口号”更改为 8080。

  • 转到服务器 > 播放并在“硬件加速”下选择“Nvidia NVENC”。选择要解码的文件。

  • 将“ffmpeg 路径”更改为/usr/bin

从 Portainer 重新启动 Jellyfin,一切顺利!

结论

这是很多工作,但希望一切正常。请记住,DuckDuckGo 和 StackOverflow 是您的朋友。如果有什么不起作用,请在下面告诉我,我会尽力提供帮助。

祝你好运,保持好奇心!

来源

  • https://linuxize.com/post/how-to-change-ssh-port-in-linux/

  • https://fossbytes.com/how-to-auto-mount-partitions-on-boot-in-linux-easily/

  • https://www.smarthomebeginner.com/docker-home-media-server-2018-basic/#Add_Linux_User_to_Docker_Group

  • https://askubuntu.com/questions/477551/how-can-i-use-docker-without-sudo

  • https://linuxconfig.org/how-to-disable-blacklist-nouveau-nvidia-driver-on-ubuntu-20-04-focal-fossa-linux

Logo

云原生社区为您提供最前沿的新闻资讯和知识内容

更多推荐