0%

使用DaoCloud部署Django项目

本文介绍了在DaoCloud平台部署Django项目的方法。

1 DaoCloud云平台

关于DaoCloud云平台。https://www.daocloud.io/

DaoCloud 为用户提供了 Docker 镜像的自动构建和自动发布功能,当用户完成了 Dockerfile 和 daocloud.yml 文件的编写后,将应用代码推送到第三方代码托管平台上,将其与 DaoCloud 绑定后,在每次修改(commit)后,并将其推送到代码托管平台上,DaoCloud 会检测到代码的变动,并根据 Dockerfile 和 daocloud.yml 进行相应的构建和测试;当触发规定的构建事件(如 tag)时,DaoCloud 会将其进行镜像构建,并推送到相对应的所有生产环节中。

2 Django项目配置

项目总布局如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- wcp_platform/
- admin.py
- forms.py
- models.py
- views.py
- wcp/
- daocloud_settings.py
- daocloud_wsgi.py
- settings.py
- test_settings.py
- urls.py
- wsgi.py
- fixtures/
- user.json
- static/
- template/
- Dockerfile
- daocloud.yml
- docker-entrypoint.sh
- manage.py
- requirements.txt

3 基于daocloud的配置

3.1 daocloud_settings模块

daocloud_settings模块重写了数据库配置(这里使用了mysql服务)和wsgi配置模块。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from __future__ import unicode_literals
from .settings import *
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.environ['MYSQL_INSTANCE_NAME'],
'USER': os.environ['MYSQL_USERNAME'],
'PASSWORD': os.environ['MYSQL_PASSWORD'],
'HOST': os.environ['MYSQL_PORT_3306_TCP_ADDR'],
'PORT': os.environ['MYSQL_PORT_3306_TCP_PORT'],
}
}

WSGI_APPLICATION = wcp.daocloud_wsgi.application'

3.2 daocloud_wsgi模块

daocloud_wsgi.py模块设置了环境变量。

1
2
3
4
5
from __future__ import unicode_literals
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "wcp.daocloud_settings")
application = get_wsgi_application()

3.3 Dockerfile

1
2
3
4
5
6
7
8
9
10
FROM daocloud.io/python:2.7
ADD requirements.txt /tmp/requirements.txt
RUN pip install -r /tmp/requirements.txt
RUN mkdir /code
WORKDIR /code
COPY . /code
COPY docker-entrypoint.sh docker-entrypoint.sh
RUN chmod +x docker-entrypoint.sh
EXPOSE 8080
CMD /code/docker-entrypoint.sh

具体流程

  • 安装依赖库
  • 拷贝项目代码
  • 修改docker-entrypoint.sh权限为可执行
  • 开放端口
  • 执行docker-entrypoint.sh

3.4 启动脚本

1
2
3
ython /code/manage.py migrate --settings=wcp.daocloud_settings --noinput
python /code/manage.py collectstatic -- settings=wcp.daocloud_settings --noinput
/usr/local/bin/gunicorn wcp.daocloud_wsgi:application -w 2 -b :8080 --env DJANGO_SETTINGS_MODULE='wcp.daocloud_settings'

启动流程

  • 创建数据表
  • 收集静态文件
  • 使用gunicorn启动Django项目

3.5 持续集成:daocloud.yml

1
2
3
4
image: daocloud/ci-python:2.7
script:
- pip install -r requirements.txt
- python manage.py test --settings=wcp.test_settings
坚持原创技术分享,您的支持将鼓励我继续创作!