Linode 上 Docker 半自助托管入门

作者: David Burgess
Getting Started with Docker Semi-Self-Hosting on Linode

随着技术的进步,我们发现自己每天都需要对在线安全更加警惕。我们的浏览和购物行为也在不断地被在线跟踪,通过跟踪 cookies 被投放到我们的浏览器上,我们在网站上点击“我接受”按钮,同意那些冗长的协议,才能充分利用该网站的全部功能。

观看本文

此外,黑客总是在寻找目标,即使是大型公司也经常发生服务器被以各种方式入侵,敏感数据泄露,通常是卖给出价最高的人。

这些只是我开始考虑尽可能多地自助托管我自己的数据的一些原因。

因为不是每个人都有条件在自己的私有硬件上进行自助托管,无论是由于缺乏硬件,还是因为他们的 ISP 使其难以或不可能做到这一点,我想向您展示我认为的下一个最佳步骤,那就是在 Linode 上的半自助托管解决方案。

让我们直接开始吧!

设置 Linode

首先,您需要设置一个 Docker 服务器。Linode 使这个过程变得非常简单,您只需每月花费几美元即可设置一个,并且可以免费添加一个私有 IP 地址,以及每月只需再花费几美元即可添加备份。

登录您的 Linode 帐户,点击“Create Linode”(创建 Linode)。

没有 Linode 帐户?  点击此处获得 100 美元信用额度

在“Create”(创建)页面上,点击“Marketplace”(市场)选项卡,向下滚动到“Docker”选项。点击它。

选择 Docker 后,向下滚动并关闭“Advanced Options”(高级选项),因为我们不会使用它们。

在下面,我们将选择最新版本的 Debian(撰写本文时为版本 10)。

为了获得设置的最低延迟,请选择离您最近的区域。

当我们到达“Linode Plan”(Linode 计划)区域时,找到一个符合您预算的选项。您可以始终从小计划开始,并在以后随着需求的增长而升级。

接下来,输入一个“Linode Label”(Linode 标签)作为您的标识符。如果需要,您可以输入标签。

输入 Root 密码,如果您有 SSH 密钥,则导入一个。如果您没有,也没关系,您不需要使用 SSH 密钥。如果您想生成一个并使用它,您可以在此处 (“创建 SSH 密钥对并在服务器上配置公钥身份验证”)找到有关如何操作的更多信息。

您可以跳过 VLAN 部分,但我鼓励您勾选“Backups”(备份)和“Private IP”(私有 IP)的复选框。

完成所有选择后,您可以点击页面右侧的“Create Linode”(创建 Linode)按钮。

配置您的域名

您还需要一个域名,您可以从几乎任何在线地方购买域名,价格范围很广,具体取决于您的购买地点。请务必将域名的 DNS 设置指向 Linode。

您的域名的 DNS 需要指向

  • `ns1.linode.com`
  • `ns2.linode.com`
  • `ns3.linode.com`
  • `ns4.linode.com`
  • `ns5.linode.com`

您可以在此处找到有关将 DNS 指向何处的更多信息:https://www.linode.com/docs/guides/dns-manager/

回到您的 Linode 仪表板,您可以点击左侧的“Domains”(域名)链接,并在那里将您的域名添加到您的 Linode 帐户。

请注意,DNS 可能需要 24-48 小时才能传播,因此在您配置 Linode 设置时,请耐心等待 DNS 设置生效。

使用 Portainer 进行容器管理

自助托管的伟大之处在于,不一定只有一种正确的方法来做事情。我们将使用 [Portainer](https://www.portainer.io/) 来管理(我们的大部分)Docker 容器,所以让我们接下来安装它。

我们将通过命令行来完成此操作,但这非常容易!

打开您喜欢的终端程序。您可以使用 Windows Terminal,或 CMD 提示符或任何您想要的。

通过在终端中键入以下内容登录到您的 Linode 服务器

ssh root@your.server.ip.address

系统会询问您是否确定要连接。键入“yes”(不带引号),然后按键盘上的 Enter 键。

如果您未使用 SSH 密钥,系统应提示您输入 root 密码。

登录后,您可以将此内容复制/粘贴到您的终端窗口中

docker run -d -p 9000:9000 -p 8000:8000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

您的系统现在将下载部署 Portainer 的所有要求。

一旦终端回到闪烁的光标,Portainer 应该就已安装并准备就绪。

在您的浏览器中访问 http://your.server.ip.address:9000。系统应提示您创建一个帐户。

出于安全原因,最好不要使用默认的“admin”用户名,而是将其替换为您选择的用户名。接下来,输入帐户的密码,然后验证密码,然后点击“Create user”(创建用户)。

应该会出现一个新屏幕,其中包含 2 个选项。我们想要选择“Get Started”(开始使用)选项。

现在点击页面左侧的“Environments”(环境)选项,然后点击页面主要部分的“local”(本地)选项。

您将查找“Public IP”(公共 IP)条目,并在该框中输入您的服务器 IP 地址,然后点击“Update Environment”(更新环境)。

反向代理

您还需要在 Docker 服务器上设置一个反向代理,以便您可以执行诸如将流量路由到不同的容器以及在服务器上为您的域名和子域名管理 SSL 之类的操作。

有很多反向代理的选项,但我们将使用 Nginx Proxy Manager 来进行设置。

要在我们的 Docker 服务器上设置 Nginx Proxy Manager,我们将最后一次(对于本教程)使用 SSH,所以回到终端程序并确保您已登录。

我们将为我们的 docker-compose 文件创建一个文件夹。然后我们将更改到该目录

mkdir docker-compose && cd docker-compose

接下来,我们要为 nginx 代理管理器 docker-compose.yml 文件创建一个文件夹,并更改到该目录

mkdir nginxproxymanager && cd nginxproxymanager

现在我们可以创建部署我们的 Nginx Proxy Manager Docker 容器所需的 docker-compose 文件

nano docker-compose.yml

这将弹出一个几乎空白的屏幕,您可以在其中复制/粘贴以下内容

version: '3'<br></br><br></br>networks:<br></br>  nginx_proxy_manager:<br></br><br></br>services:<br></br>  app:<br></br>    image: 'jc21/nginx-proxy-manager:latest'<br></br>    container_name: nginxproxymanager<br></br>    restart: unless-stopped    <br></br>    ports:<br></br>      - '80:80'<br></br>      - '81:81'<br></br>      - '443:443'<br></br>    volumes:<br></br>      - /home/docker/nginxproxymanager/data:/data<br></br>      - /home/docker/nginxproxymanager/letsencrypt:/etc/letsencrypt<br></br>    networks:<br></br>      nginx_proxy_manager:

此 Docker compose 文件告诉系统下载最新的 jc21/nginx-proxy-manager 镜像到 Docker 服务器,将容器命名为“nginxproxymanager”,将其挂载到目录“home/docker/nginxproxymanager”,并使其仪表板在 Docker 服务器的端口 81 上可用。

端口 80 和 443 将用于管理流量(安全和不安全)。

它还创建了一个名为“nginx\_proxy\_manager”的 Docker 网络,我们将用于将来添加到我们服务器的容器。

Nginx Proxy Manager 的默认凭据是

Email:    admin@example.com
Password: changeme

输入这些凭据以登录。系统会要求您更改默认电子邮件地址和密码,然后才能继续。

总结

信不信由你,我们在本教程中涵盖了很多内容。我们设置了一个 Linode 实例,将域名指向 Linode,设置了 Portainer 和 Nginx Proxy Manager,甚至在 Nginx Proxy Manager 上创建了一个网络,供我们将来添加到设置中的容器使用。

请务必打开相关通知,以便在未来的帖子和视频在本系列中发布时收到通知!

David Burgess。DB Tech YouTube 频道创始人。 DBTech 专注于关于 Docker、Portainer、自助托管服务、OpenMediaVault 和 Raspberry Pi 的教程视频。

加载 Disqus 评论