基于docker-compose部署Django项目

基于docker-compose部署Django项目

书接上回,项目搞定,在本地也是运行正常的,接下来的工作就是要部署到服务器上了。之前我部署网站一般都是借助宝塔来部署,宝塔确实挺好用,但是,缺少灵魂。那段时间刚好在尝试使用docker完成一些工作,所以刚好选择了docker-compose来进行部署

部署过程

docker-compose编排文件

要使用docker-compose进行部署,首先自然是要编写docker-compose的编排文件

新建一个docker-compose.yml文件,在这个文件的第一行写上

version: "3"

来声明版本。

接下来,声明数据卷和网络

volumes:
    db_vol:
    redis_vol:
    media_vol:
    static_vol:

networks: # 自定义网络(默认桥接), 不使用links通信
    nginx_network:
        driver: bridge
    db_network:
        driver: bridge
    redis_network:
        driver: bridge

volumes下的若干项为定义的数据卷,即docker挂载在宿主机的数据卷,在后续可以对这些数据卷进行操作,从而实现docker与宿主机的数据通信。对于上述代码中的数据卷,从上到下依次时:数据库、redis、多媒体资源、静态资源。

networks下的若干项为定义的网络,均使用桥接模式,可近似理解为处于某个网络下的若干组件存在于一个局域网之中,局域网中的各个组件可以通过网络进行通信。

最后,需要定义各个用到的服务,代码如下:

services:
    redis:
        image: redis:latest
        command: redis-server /etc/redis/redis.conf
        networks:
            - redis_network
        volumes:
            - redis_vol:/data
            - ./compose/compose_py_dev/redis/redis.conf:/etc/redis/redis.conf
        ports:
            - "6380:6379"
        restart: always

    db:
        image: mysql:5.7
        env_file:
            - ./Code/.env
        networks:
            - db_network
        volumes:
            - db_vol:/var/lib/mysql:rw
            - ./compose/compose_py_dev/mysql/conf/my.cnf:/etc/mysql/my.cnf
            - ./compose/compose_py_dev/mysql/init:/docker-entrypoint-initdb.d/
        ports:
            - "3307:3306"
        restart: always

    web:
        build: ./Code
        expose:
            - "8000"
        volumes:
            - ./Code:/var/www/html/Code
            - static_vol:/var/www/html/Code/static
            - media_vol:/var/www/html/Code/resources 
            - ./compose/compose_py_prod/uwsgi:/tmp
            - whoosh:/var/www/html/Code/PersonalBlog/whoosh_index
        networks:
            - nginx_network
            - db_network
            - redis_network
        depends_on:
            - db
            - redis
        restart: always
        tty: true
        stdin_open: true

    nginx:
        build: ./compose/compose_py_dev/nginx
        ports:
            - "80:80"
            - "443:443"
        expose:
            - "80"
        volumes:
            - ./compose/compose_py_dev/nginx/nginx.conf:/etc/nginx/conf.d/nginx.conf
            - ./compose/compose_py_dev/nginx/ssl:/usr/share/nginx/ssl
            - ./compose/compose_py_dev/nginx/log:/var/log/nginx
            - static_vol:/usr/share/nginx/html/static
            - media_vol:/usr/share/nginx/html/resources
        networks:
            - nginx_network
        depends_on:
            - web
        restart: always

对于上述使用到的各个配置项,其作用如下表:

配置项功能
image容器所使用的镜像及版本
command启动容器的命令
networks指定存在的网络
volumes配置数据卷挂载
ports端口映射
restart当出现问题时的重启策略

启动与其他杂项

使用如下命令即可借助docker-compose来启动相关服务

docker-compose up -d

也可以通过-f参数来指定要运行的yml文件

docker-compose -f xxx.yml up -d

启动服务后,可以通过docker ps查看已运行的容器,也可以通过docker logs来查看某个容器的日志。

正确启动后,需要通过云服务商配置域名、安全策略等,即可通过域名来访问网站。

问题记录

发表新博客后,HayStack更新文章索引失败

在本地部署时,未发现此问题。部署至云服务器后,发现每次发表新文章,haystack并不能正常更新文章索引,导致搜索功能并不能正常使用。

此问题的原因在于容器内部索引文件的所有者设置错误,通过chown等命令更改目录所有者即可正常运行。

报错:502 Bad Gateway

报此错误并不代表是nginx出了错误,往往是代码运行报错,此时应通过docker logs查看代码容器运行日志并进行排查。

总结

在三天打鱼两天晒网中搞定了这一套东西。感受还是颇丰的,写代码的时候感觉很多bug都被处理掉了,随着近期较为“深度”的使用才发现小问题还是不断的。写代码时没有添加日志功能,导致有时定位错误还是很困难的,足以显示日志的重要性。

后续想把这个项目作为一个“盒子”,如果没有什么其他项目的话,就给它换语言换框架,加个前后端分离,再试着用k8s部署下,圆满。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值