如何确保部署期间创建的最新静态文件
Django应用程序被复制到卷?我的web
容器定义了一个Django应用程序,在构建时运行python manage.py collectstatic --noinput --clear
。这会将所有静态文件移动到/usr/src/app/static_files
目录中。我希望这些静态文件在staticdata
卷中可用,以便nginx可以为它们提供服务。换句话说,/usr/src/app/static_files
的内容应覆盖staticdata
卷中现有文件的内容。否则,nginx将继续提供较旧的文件副本,如css文件和图像,而不是Django收集的更新文件。
这可能吗?感觉就像我为此目的使用了错误的卷,因为它们的目的是持久化数据。
Edit1:部署应用程序时是否有可能创建“临时卷”,在取消部署应用程序时会被销毁?如果是这样,我该怎么做,以及如何使这个卷也可用于nginx?
Edit2:如果我没有弄错,一个选项是使用绑定挂载,但我已经读过,如果可能的话应该避免这些应用程序不依赖于结构主机的文件系统。
version: '3.3'
services:
web:
restart: always
build: ./web
env_file:
- web-variables.env
expose:
- "8000"
ports:
- "8000:8000"
volumes:
- staticdata:/usr/src/app/static_files
- staticdata:/usr/src/app/uploaded_files
command: "./django-entrypoint.sh"
depends_on:
- database
nginx:
restart: always
build: ./nginx
ports:
- "80:80"
- "443:443"
volumes:
- staticdata:/data/www
depends_on:
- web
database:
image: postgres:9.2
restart: always
volumes:
- pgdata:/var/lib/postgresql/data
ports:
- "5432:5432"
volumes:
staticdata:
pgdata:
答案 0 :(得分:1)
是的,这是可能的 - 你几乎就在那里。通过将选项--clear
传递给collectstatic
,它将在收集静态文件之前清除目录。那不是你想要的行为。只需在没有该标志的情况下运行它:
python manage.py collectstatic --noinput
它应该只复制到目的地不存在的新的静态文件。
展望未来,您可能需要考虑为静态文件和媒体文件(用户生成的内容)设置单独的容器,因为这可能会让人感到困惑,如下所示:)
答案 1 :(得分:0)
根据您的需要,默认位置/**
* Grabs the next frame from video file or capturing device.
*/
bool grab();
/**
*Decodes and returns the grabbed video frame.
*/
void retrieve ( cv::Mat& image );
图片看起来是docker nginx
而不是/usr/share/nginx/html
。
所以只需改变这一行就可以了:
/data/www