我有两台服务器,一台Dev
服务器和一台Production
服务器。Production
服务器运行一个实时的 Django 网站,而Dev
服务器有 Django 项目的副本。我使用服务器Dev
来处理 Django 网站、进行改进、修复错误等。一旦我对版本的运行情况感到满意Dev
,我就会将整个 Django 目录从Dev
服务器移出并替换服务器上的相同目录Production
。两台服务器是不是在同一个局域网上,所以过程并不简单。
到目前为止,我遇到了一些与此相关的问题。
- 移动整个目录既费力又费时
- 如果我只修改几个文件,甚至移动由于项目越来越大,替换几个文件比替换整个目录更麻烦,我担心会错过一些东西
- 我经常在移动东西后遇到权限问题
- 这种方法效率极低,而且由于时间不够,我也没有想出新的方法。现在情况已经失控,我需要解决这个问题。
我认为我需要将这个过程转移到 GIT 存储库。但我的问题是如何设置这一切?
- 我是否应该将存储库托管在
Production
服务器上,从Dev
服务器提取,执行工作,然后提交?然后,我会从服务器Production
(托管存储库的同一台服务器)提取内容以运行当前工作版本? - 我是否在服务器上托管 repo
Dev
,从同一台服务器提取数据来对 repo 进行工作,然后将工作版本提取到服务器上Production
? - 我是否应该将 repo 托管在与
Production
服务器和Dev
服务器不同的服务器(第三台服务器)上? - 我是否需要担心有关 Django 和 repos 的任何特殊事项?
谢谢您的帮助 :)
答案1
我从事 Django 开发和 GIT 工作已有 18 个月。在此期间,我尝试自己托管一个 git 存储库,现在我使用 GITHUB 来完成这项工作。它更简单、更省时,而且成本更低。看看我的考虑:
除非您是具有 GIT 经验的 Linux 专家,否则将您的项目托管在 GITHUB 中会更便宜(考虑到时间就是金钱)。他们为公共项目提供免费的 GIT 托管(任何人都可以克隆/分叉它们)。如果您想拥有一个私人存储库,他们还提供(便宜的)付费 GIT 托管。
GITHUB(或其他 GIT 托管公司)将使设置存储库变得更加容易,这样您就可以在使用 GIT 时学习如何使用它(换句话说,由于有了 Web 界面,您在使用 GIT 之前不需要学习超过基本的 GIT 命令行语法的知识)
GIT 是一个分布式控制版本系统。这意味着,你放置存储库副本的每个地方都将拥有你所有代码的完整历史记录,因此,如果你选择托管自己的 GIT 服务器,则将其放在 DEV 或 PRD 服务器上无关紧要。实际上,你可以将其放在自己的笔记本中,而不必担心丢失数据,因为你在 DEV 和 PRD 中也有副本。请记住,你必须从 GIT 服务器对 DEV 和 PRD 服务器进行 PULL。
使用 FABRIC 脚本从您自己的机器更新 DEV 或 PRD 服务器非常简单。您所要做的就是在 fabfile.py 中添加类似以下内容:
def deploy_production(): 使用 cd('/home/my_user/my_project'): 运行(“git pull”)#更新到最新版本 带有前缀('source ~/.virtualenvs/my_env/bin/activate'): 运行('./manage.py collectstatic --noinput') def 生产(): “”” 将环境设置为生产 “”” continue = confirmed('更新生产环境,继续?', default=False) 如果不继续: abort(‘再见——感谢您没有参与生产!’) env.hosts = ['my_server.my_domain.com.br'] env.key_filename = ['~/amazon/my_ssh_key.pem'] 环境.用户 = 'ubuntu' # 使用这个来运行结构更新程序: fab 生产 deploy_production
- 使用 virtualenv 和 virtualenvwrapper
- 在项目根目录中创建一个名为“.gitignore”的文件,并放入您不想通过 GIT 管理的文件(或文件模式),如:*.pyc、.idea、.DS_Store(每行一个)
希望有帮助,好看!
如果您觉得这些答案有用,请给分。
答案2
我建议你使用你提到的 git 等源代码控制系统,在本地完成你的工作,然后查看织物用于部署。您可以使用git checkout-index
在本地导出代码(通过 fabfile 中的代码),然后通过类似 的命令将其发送到服务器fab dev deploy
。当您准备好部署到生产环境时fab prod deploy
。您可以将代码放入 fabfile 中以将源代码移动到正确的位置,更新依赖项(如 Django)(例如通过 pip),重新启动 uwsgi 等。