把uwsgi.ini放进去images文件包里
[uwsgi] project=training_system #uid=www-data #gid=www-data base=/code/package chdir=%(base)/%(project) module=%(project).wsgi:application master=True processes=2 http=0.0.0.0:8000 #这里直接使用uwsgi做web服务器,使用http。如果使用nginx,需要使用socket沟通。 buffer-size=65536 pidfile=/tmp/%(project)-master.pid vacuum=True max-requests=5000 daemonize=/tmp/%(project)-uwsgi.log #设置一个请求的超时时间(秒),如果一个请求超过了这个时间,则请求被丢弃 harakiri=60 #当一个请求被harakiri杀掉会,会输出一条日志 harakiri-verbose=true
记得修改settings.py设定
# Static files (CSS, Javascript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(base_DIR, "static"),
)
STATIC_ROOT = os.path.join(base_DIR, "/static/")
start.sh 编写(其实也可以叫runserver-docker.sh之类的)
#!/bin/bash # 从第一行到最后一行分别表示: # 0. 收集静态文件 # 1. 生成数据库迁移文件 # 2. 根据数据库迁移文件来修改数据库 # 3. 用 uwsgi启动 django 服务, 不再使用python manage.py runserver python manage.py collectstatic --noinput&& python manage.py makemigrations&& python manage.py migrate&& #uwsgi --ini /code/package/uwsgi.ini uwsgi --ini uwsgi.ini # python manage.py runserver 0.0.0.0:8000
(uwsgi --ini uwsgi.ini有可能会报错,下面再解决这个问题)
修改dockfile不要直接启动应用,等容器启动后我们再手动启动应用
FROM python:3.8-slim COPY ./Django /code WORKDIR /code/package RUN pip install -r requirements.txt RUN chmod 777 /code/package/runserver-docker.sh EXPOSE 8000 #CMD ["/bin/sh","/code/package/runserver-docker.sh"]
生成images
docker build -t training_dashboard_v2b_uwsgi .进入容器安装uwsgi包
可参考我的文章【docker】如何在docker中安装uwsgi包
主要指令如下:
docker exec -it < container > /bin/bash apt-get update apt-get install gcc pip install uwsgi(可选)进入容器,手动实现uwsgi初始化
start.sh 中uwsgi --ini uwsgi.ini有可能会报错,故可进入容器,手动实现uwsgi初始化。
uwsgi --ini uwsgi.ini
uwsgi初始化成功显示[uWSGI] getting INI configuration from uwsgi.ini
参考链接原创Docker部署Django由浅入深系列(上):单容器部署Django + Uwsgi



