这个问题与测试驱动相关.io系列文章,介绍如何构建和部署Django应用程序.具体来说,我的问题与这三篇文章中的第二篇有关.当我们使用nginx和gunicorn在本地构建应用程序时,一切都很好.然后,他使用linux命令ssh user@your-ip-or-domain连接到主机,我认为这可能是他建议用freenom.com创建的域名.

现在,我在一台Windows机器上,不知道如何执行这个他没有解释的操作(我们应该用linux在virtualbox上复制项目吗?你应该用docker运行linux的映像吗?).

我指的是"Running the Containers"段中的this条.我正在寻找对这一阶段更深入的解释.

推荐答案

作者在您提到的文章的第Prerequisites section页中列举了对应用程序的不同要求:

要学习本教程,您需要:

  • 具有Docker和Docker Compose的运行Linux虚拟机
  • 域名

需要一个便宜的域名来练习吗?多个域注册器

我更改了列表中元素的顺序,以反映需求的实际顺序.

你首先需要的是一台可以运行应用程序的机器.

这台机器可以托管在您认为合适的任何地方、本地、您自己的数据中心,或者,正如本文中所建议的,现在您可以非常轻松地在云中配置机器,例如,在任何不同的公共云Provider 、AWS、GCP或Azure等中.

该机器的要求如下:

  • 这台机器应该可以通过互联网访问,其中包括创建DNS条目,并允许我们加密和相关的机器人来处理SSL证书.
  • 您可以使用Windows或Linux机器,但为了简单、与Docker紧密集成以及许可目的,尤其是为了测试目的,免费的Linux版本,例如Ubuntu或Debian,应该更合适.
  • 在此机器中,应安装docker和docker compose.

例如,假设您使用的是Ubuntu,您可以按照示例this excellent guide安装docker软件.

您还需要安装docker-compose.

但是,如何从Windows机器连接到linux实例来执行这些操作,然后再运行应用程序呢?

在Linux中,通常会使用SSH.

在基于Linux或Unix的系统中,SSH支持是现成的;在Windows中,您很可能需要使用Putty.

网络上有很多关于Putty和如何使用它的教程:例如this one.

在Linux中,您可以使用终端连接到您的机器,并键入以下内容:

ssh user@your-ip-or-domain

Putty GUI将为您提供执行类似连接所需的所有功能:只需定义机器的公共IP地址、用户名和密码(或者您可以使用SSH密钥对机器进行身份验证).

此用户名和密码通常由您机器的Provider 在机器设置过程中提供.

为了实现这一点,您可能需要在主机Provider 中配置某种防火墙软件,以允许连接到机器的SSH(端口22)和HTTP/S(端口80和443),用于Django webapply.请注意,至少乍一看,将可以连接到实例的IP地址限制为您自己的IP地址,这对于SSH端口尤其重要.

然后,我将执行DNS设置.

DNS基本上允许您为您的机器IP地址提供可识别的别名.

除了便于通过名称访问您的站点之外,您还需要将DNS记录分配给您的机器,以便使用Let’s Encrypt,因为在颁发站点SSL证书时,需要将该信息作为验证步骤.

这个DNS可以用不同的方式分配:你只需要你机器的IP地址和一些DNSProvider .

其中有很多,例如,AWS Route 53、GCP DNS或Azure DNS、GoDaddy等(例如,请参阅this).

我从未使用过这项服务,但也许你也可以按照文章中的建议使用Freenom.

配置完成后,作为nginx服务器配套安装的Certbot将使其正常工作,并将颁发必要的证书.

之后,如本文所述,将应用软件上传到您的机器上.

在Linux中,通常使用SCP来实现这一目的.

同样,如果您作为客户机运行Linux或Unix,那么该协议是现成的:

scp -r $(pwd)/{app,nginx,.env.staging,.env.staging.db,.env.staging.proxy-companion,docker-compose.staging.yml} user@your-ip-or-domain:/path/to/django-on-docker

运行Windows时,可以使用WinSCP执行此步骤.

要完成此操作,请使用Putty和SSH再次连接到机器

cd /path/to/django-on-docker
docker-compose -f docker-compose.staging.yml up -d --build

Linux相关问答推荐

grep条件仅抓取某些文本

GO:当使用NewManager调用创建cgroup时,权限被拒绝

如何将参数传递给Bash函数

UTF-8输入和使用XGetICValues

AWK+向AWK导出值未传递

条件句if的正确写法是怎样的?

/proc/mounts 没有像 /proc/self/mountinfo 这样的源信息

使用awk命令将以:分隔的两个文件合并的方法

如何计算文本的时差,如 YYYYMMDDHHMMSSXXX 格式,包括毫秒

sed:用空格替换

中的换行符

在 linux 中插入带有 sed 命令的文件的行

如何恢复已停止的进程?

ld-linux.so.2 和 linux-gate.so.1 是什么?

如何使用 GDB 和 QEMU 调试 Linux 内核?

在 C 中检测 64 位编译

在 bash 中检测公共 IP 地址的方法

SVN 错误:无法将字符串从本机编码转换为UTF-8

错误:ld.so:无法预加载对象 LD_PRELOAD:忽略

将 jiffies 转换为毫秒

Linux:删除多个文件的文件扩展名