如何在使用Gitlab时在Ubuntu上部署Django应用程序

时间:2016-11-13 21:51:12

标签: django git gitlab

我创建了一个简单的Django应用程序,然后我提交并推送到Gitlab。最后,我想在运行ubuntu的“生产服务器”上安装该应用程序,以便从该服务器终端运行命令:

git clone https://domain.com/path/to/git

我无法在克隆的文件中找到我的python代码。

从gitlab存储库获取python代码的正确方法是什么?

3 个答案:

答案 0 :(得分:0)

首先,

您的git是否包含所有源代码,包括pip安装的应用程序?

  • 如果是:在你的ubuntu机器上安装django版本,克隆你的项目,它可能会运行。
  • 如果不是:您必须创建virtual enviroment(在任何情况下都是推荐选项),请在虚拟环境中安装所有pip安装的应用 AND django。在克隆你的项目后,它将运行。

答案 1 :(得分:0)

我不知道gitlab,并且在服务器上基本上没有关于你的配置的所有内容,但你可以在git repo上设置一个git hook。

这是一个用于部署示例django项目的post-receive钩子的示例。

#!/bin/bash
while read oldrev newrev ref
do
    if [[ $ref =~ .*/master$ ]];
    then
        echo "master branch received, deploying..."
        GIT_WORK_TREE="/PATH/TO/DJANGO/PROJECT" git checkout -f master > /dev/null

        source /PATH/TO/DJANGO/VIRTUAL/ENVIRONMENT/bin/activate > /dev/null
        echo "installing new pip dependencies..."
        pip install -r /PATH/TO/DJANGO/PROJECT/dependencies.txt > /dev/null
        echo "applaying new db migrations..."
        python /PATH/TO/DJANGO/PROJECT/manage.py migrate_schemas > /dev/null
        deactivate > /dev/null

        touch /PATH/TO/DJANGO/PROJECT/PROJECT_NAME/wsgi.py > /dev/null
        echo "Sever code reloaded."
    else
        echo "Received branch $ref, not deploying."
    fi
done

所以要考虑一些事情:

  • 此脚本位于gitrepo.git / hooks / post-recive
  • 文件post-recive必须是可执行文件chmod +x FILE_NAME
  • 假设您拥有虚拟环境。
  • 假设您在repo上有一个名为dependencies.txt的文件,您可以使用pip freeze > dependencies.txt生成它(请注意,文件中的所有内容都将嵌入到服务器上)
  • 注意touch wsgi.py会重新加载代码,如果您在守护程序模式下运行带有mod_wsgi的apache(more info

答案 2 :(得分:0)

问题是分支,我解决了选择特定分支,应用选项" -b"然后是正确的分支名称" develop":

git clone -b develop https://example.com/username/projectname.git