复制生产Django服务器+;将Postgres数据库复制到相同的Linode服务器作为备份

复制生产Django服务器+;将Postgres数据库复制到相同的Linode服务器作为备份,django,postgresql,django-models,apache2,Django,Postgresql,Django Models,Apache2,我正在尝试制作一个与Linode上托管的生产服务器完全相同的副本。这是一个带有租户模型的Python/Django/Postgres实现。我对另一个后来离开的开发人员所做的实现是相当陌生的 目前的网站是活的 租户1.prodlive.info 租户2.prodlive.info 我执行的步骤是在linode仪表板中进行备份,然后使用该备份创建一个新的linode实例。登录后,我看到所有文件都已正确复制 但是,我缺少一些配置细节的步骤,因为当我尝试访问时,服务器显示404错误 tenant1.ba

我正在尝试制作一个与Linode上托管的生产服务器完全相同的副本。这是一个带有租户模型的Python/Django/Postgres实现。我对另一个后来离开的开发人员所做的实现是相当陌生的

目前的网站是活的 租户1.prodlive.info 租户2.prodlive.info

我执行的步骤是在linode仪表板中进行备份,然后使用该备份创建一个新的linode实例。登录后,我看到所有文件都已正确复制

但是,我缺少一些配置细节的步骤,因为当我尝试访问时,服务器显示404错误 tenant1.backup.info tenant2.backup.info

DNS已正确设置为具有两个的记录。 服务器不响应主服务器url

我唯一更改的文件是\project\u dir\django\u project\middleware.py,并将域名和IP地址prodlive.info和IP.prod.live.info更改为backup.info和IP.back.up.info

我可能缺少一些配置项,因此需要一些指针和最佳实践的帮助来维护实时生产的精确副本。提前感谢您的建议和帮助

下面是访问子域URL时得到的确切消息。 找不到页面(404) 请求方法:获取 请求URL: 引发者:appname.views.index

使用PostgreSQL模式将数据库划分为多个名称空间

鉴于您已经手动恢复了(以前)工作的Linode备份,您应该做的第一件事是获得对数据库的控制台访问权,并手动检查安装了哪些租户:

$ ./manage.py dbshell
postgres=# \d
postgres=# select schema_name, domain from myapp_tenant cross join myapp_domain;

   name   |       domain    
----------+---------------------
 public   | www.backup.info
 tenant1  | tenant1.backup.info
 tenant2  | tenant2.backup.info
如果一切顺利,您应该看到上面列出的租户。访问时,
django租户
将在
myapp\u域
表中查找域名,找到相应的租户帐户,并将PostgreSQL
search\u路径
设置为
tenant1

但是,由于您得到的是
404
,我怀疑数据库中的域名与您当前配置的域名不一致。您可以使用适当的SQL语句修复此问题,或者只需在Python shell中进行修复:

./manage.py python
>>> from myapp.models import Domain
>>> Domain.objects.all()
<QuerySet [<Domain domain="incorrect_domain.prodlive.info" Tenant="tenant1" is_primary="True">, <Domain domain="another_incorrect_domain.prodlive.info" Tenant="tenant2" is_primary="True">]>
>>> d = Domain.objects.get(domain="incorrect_domain.prodlive.info")
>>> d.domain = "tenant1.backup.info"
>>> d.save()
/manage.python
>>>从myapp.models导入域
>>>Domain.objects.all()
>>>d=Domain.objects.get(Domain=“不正确的\u Domain.prodlive.info”)
>>>d.domain=“tenant1.backup.info”
>>>d.保存()
换句话说,使用数据库shell或Python shell确保数据库中显示的域名正确。

使用PostgreSQL模式将数据库划分为多个名称空间

鉴于您已经手动恢复了(以前)工作的Linode备份,您应该做的第一件事是获得对数据库的控制台访问权,并手动检查安装了哪些租户:

$ ./manage.py dbshell
postgres=# \d
postgres=# select schema_name, domain from myapp_tenant cross join myapp_domain;

   name   |       domain    
----------+---------------------
 public   | www.backup.info
 tenant1  | tenant1.backup.info
 tenant2  | tenant2.backup.info
如果一切顺利,您应该看到上面列出的租户。访问时,
django租户
将在
myapp\u域
表中查找域名,找到相应的租户帐户,并将PostgreSQL
search\u路径
设置为
tenant1

但是,由于您得到的是
404
,我怀疑数据库中的域名与您当前配置的域名不一致。您可以使用适当的SQL语句修复此问题,或者只需在Python shell中进行修复:

./manage.py python
>>> from myapp.models import Domain
>>> Domain.objects.all()
<QuerySet [<Domain domain="incorrect_domain.prodlive.info" Tenant="tenant1" is_primary="True">, <Domain domain="another_incorrect_domain.prodlive.info" Tenant="tenant2" is_primary="True">]>
>>> d = Domain.objects.get(domain="incorrect_domain.prodlive.info")
>>> d.domain = "tenant1.backup.info"
>>> d.save()
/manage.python
>>>从myapp.models导入域
>>>Domain.objects.all()
>>>d=Domain.objects.get(Domain=“不正确的\u Domain.prodlive.info”)
>>>d.domain=“tenant1.backup.info”
>>>d.保存()

换句话说,使用数据库shell或Python shell,确保数据库中显示的域名是正确的。

谢谢hedgie,尝试了下面的建议,但遇到了一些其他问题。我们将汇报进展情况。感谢您的帮助。谢谢hedgie,尝试下面的建议,但遇到了一些其他问题。我们将汇报进展情况。谢谢你的帮助。