以下是使用Docker搭建Django,Nginx,R,Python部署环境的完整攻略。
1. 确认所需的软件和工具
- Docker
- Docker Compose
2. 编写docker-compose.yml文件
在项目根目录下创建一个docker-compose.yml文件,内容如下:
version: '3'
services:
web:
build: ./app
expose:
- "8000"
environment:
- SECRET_KEY=your_secret_key
restart: always
volumes:
- ./app:/code
command: python manage.py runserver 0.0.0.0:8000
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/log:/var/log/nginx
depends_on:
- web
r:
image: rocker/r-base
volumes:
- ./r:/usr/share/r
depends_on:
- web
python:
build: ./python
volumes:
- ./python:/usr/src/app
depends_on:
- web
其中:
- web服务使用django应用,利用expose暴露8000端口,将app文件夹下的代码映射到容器内的/code目录;
- nginx服务使用官方的nginx镜像,暴露80端口,将nginx的配置文件和日志映射到本地的nginx/conf.d和nginx/log目录,依赖于web服务;
- r服务使用rocker/r-base镜像,将本地的r目录映射到容器内的/usr/share/r目录,依赖于web服务;
- python服务使用本地的python目录构建镜像,将本地的python目录映射到容器内的/usr/src/app目录,依赖于web服务。
3. 编写Django应用
创建一个Django应用,例如myapp,在settings.py中设置ALLOWED_HOSTS=['*']。
4. 编写nginx配置文件
在nginx/conf.d目录下创建一个myapp.conf文件,内容如下:
upstream django {
server web:8000;
}
server {
listen 80;
server_name localhost;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://django;
}
}
其中,upstream指令定义一个upstream块,用来定义一组backend服务,本示例中只定义一个server;server指令定义一个虚拟主机,使用proxy_pass反向代理到upstream:djagno,即指向web服务的8000端口。
5. 构建Python镜像
在python目录下新建一个Dockerfile文件,内容如下:
FROM python:3.7
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /usr/src/app
其中,首先使用python:3.7作为基础镜像,安装requirements.txt中的依赖,然后将代码文件复制到容器内的/usr/src/app目录。
6. 启动Docker服务
在项目根目录执行docker-compose up -d
命令启动服务。
7. 访问应用
浏览器中访问http://localhost即可看到Django应用的主页。
示例1:R语言与Django的集成
在myapp应用的views.py文件中添加以下代码:
def r(request):
import rpy2.robjects as robjects
# 使用R的sum函数计算1到9的和
rsum = robjects.r('sum')(robjects.IntVector(list(range(1, 10))))
return HttpResponse(f"R sum: {rsum[0]}")
在myapp的urls.py文件中添加以下代码:
from .views import r
path('r/', r),
然后重启web服务即可查看http://localhost/r/的运行结果。
示例2:Python与Django的集成
在myapp应用的views.py文件中添加以下代码:
def python(request):
import pandas as pd
# 使用pandas库创建DataFrame,然后输出前10行
data = pd.read_csv('https://people.sc.fsu.edu/~jburkardt/data/csv/hw_200.csv')
return HttpResponse(f"Python DataFrame head: \n{data.head(10)}")
在myapp的urls.py文件中添加以下代码:
from .views import python
path('python/', python),
然后重启web服务即可查看http://localhost/python/的运行结果。
这就是使用Docker搭建Django,Nginx,R,Python部署环境的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Docker搭建Django,Nginx,R,Python部署环境的方法 - Python技术站