前端项目发布
执行npm run build 把前端项目发布到dist文件夹中
把前端发布后的dist中文件集成到后端项目中 一般拷贝到后端项目根目录中的templates目录下
配置后端项目的根路由响应 修改根项目app下的urls.py

from django.urls import path, include from django.conf.urls import url # from utils.swaggerDocs import SwaggerSchemaView from rest_framework import permissions from drf_yasg.views import get_schema_view from drf_yasg import openapi from .proxyserver import flower,gosuv from .views import Index urlpatterns = [ url(r'^monitor/', include('monitor.urls')), url(r'^portals/', include('portals.urls')), url(r'^logaudit/', include('logaudit.urls')), url(r'^cmdb/', include('cmdb.urls')), url(r'^plugins/', include('plugins.urls')), url(r'^filemg/', include('filemg.urls')), url(r'^jobmg/', include('jobmg.urls')), url(r'^common/', include('common.urls')), url(r'^sysconfig/', include('linkconfig.urls')), ] #一定要加上以下代码处理index响应 from django.conf.urls.static import static import os from django.conf import settings media_root = os.path.join(settings.BASE_DIR, 'templates/view') urlpatterns += url(r'^$', Index.as_view(), name='index'), urlpatterns += static('/view', document_root=media_root)

#! /usr/local/bin/env python # -*- coding=utf-8 -*- from django.views.generic.base import TemplateView class Index(TemplateView): template_name = 'view/index.html'
后端项目实现启动自动初始化数据库数据
把代码写到根项目app目录下的__init__.py中 实现启动项目的时候便会自动执行

from __future__ import absolute_import, unicode_literals from utils.base import dgLogger import jobmg,logaudit import inspect from portals.models import User from django.contrib.auth.hashers import make_password # 任务信息注册 class TaskInfo (object): """Widget that lets you choose between task names.""" _choices = None def addSuperUser(self): # 初始化超级用户 if not User.objects.filter(username='admin').exists(): dgLogger.info("创建超级用户管理员") User.objects.create(username='admin', password=make_password('Servyouadmin'), is_superuser=True, information='admin@admin.com') else: dgLogger.info("系统已经存在初始化用户,无需重新创建") taskinfo = TaskInfo() taskinfo.addSuperUser()
把项目打包成docker镜像

cat ~/.bash_history docker pull docker.io/centos docker run -itd -v /mnt/hgfs:/mnt --name="centos" 9f38484d220f /usr/sbin/init docker exec -it centos /bin/bash 进入centos7系统容器中安装和搭建项目运行环境 在容器中的项目的根目录下创建一个start.sh [root@4ec0550e14fd monitor]# vi start.sh #! /bin/bash /root/.pyenv/versions/3.6.5/bin/python /monitor/manage.py runserver 0.0.0.0:8000 chmod +x start.sh #退出容器终端 docker commit centos centos_linkmonitor:1.0 docker run -ti -d --name my-link -p 8000:8000 centos_linkmonitor:1.0 /monitor/start.sh [root@localhost beekeeper]# docker exec -it my-link /bin/bash [root@a30c18e09d91 /]# ps -ef | grep python root 7 1 2 07:18 ? 00:00:01 /root/.pyenv/versions/3.6.5/bin/python /monitor/manage.py runserver 0.0.0.0:8000 root 12 7 9 07:19 ? 00:00:03 /root/.pyenv/versions/3.6.5/bin/python /monitor/manage.py runserver 0.0.0.0:8000 root 115 20 0 07:19 ? 00:00:00 grep --color=auto python #docker导出镜像压缩包 [root@localhost beekeeper]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos_linkmonitor 1.0 934073c77e8e 7 minutes ago 880 MB docker.io/centos latest 9f38484d220f 4 months ago 202 MB [root@localhost beekeeper]# docker save 934073c77e8e > linkmonitor.tar 在另外一个docker节点上 [root@node2 ~]# ls anaconda-ks.cfg docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm linkmonitor.tar PDO_MYSQL-1.0.2.tgz [root@node2 ~]# docker load -i linkmonitor.tar [root@node2 ~]# docker tag 934073c77e8e centos_linkmonitor:0.1 [root@node2 ~]# docker image ls | grep centos centos_linkmonitor 0.1 934073c77e8e 8 hours ago 880 MB [root@node2 ~]# docker run -ti -d --name my-link -p 8000:8000 934073c77e8e /monitor/start.sh
docker镜像优化升级打包
把数据库文件和源码文件集成到镜像中使用起来虽然很方便但是会有一些问题
1.重启容器后数据库会还原成初始状态
2.每次修改源码都必须重新打镜像
解决方式: 把数据库和源码包保存到宿主机的特定目录里通过 -v选项挂载到容器中 这样大大提高升级程序的效率
1.归档代码
源代码中的一些带.的无关文件在归档的时候一定要删除掉 否则会影响容器的主程序的正常启动
2.上传到服务器
必须要在宿主机上给容器启动脚本添加执行权限 否则启动容器的时候会提示异常
3.启动容器
docker run -tid -v /root/monitor/beekeeper:/monitor/beekeeper -v /root/monitor/test:/monitor/test -p 8080:8000 --name="my-link" 934073c77e8e /monitor/beekeeper/start.sh
fcc2d8e138c3db578d95cafe125ca54647ea5bc4c58336b30096bdb325fc585c
3.容器程序执行测试脚本获取数据

[root@node2 monitor]# docker exec -ti my-link /bin/bash [root@fcc2d8e138c3 /]# cd /monitor/test [root@fcc2d8e138c3 test]# ls testes.py [root@fcc2d8e138c3 test]# python testes.py app list..... sscx-svc sbzx-web nsrzx-svc fpzxsvc yhs-svc dzgzpt-wsys nsrzxsvc hgzx-svc wszx-svc hostname list..... hostname wasttime reqscount errcount hz-dzswj-nb-199-136-52 26354217.0ms 329148 5220 xj-dzswj-zjgf-199-137-14 39541107.0ms 48513 903 xj-dzswj-zjgf-199-137-16 3026568.0ms 2967 3 interface list..... interface wastetime reqscount errcount gov.etax.dzswj.nsrzx.service.dj.INsrxxService 2227446.0ms 36552 6 gov.etax.dzswj.yhzx.service.auth.IBlackCompanyVerifyService 1042842.0ms 17397 189 gov.etax.dzswj.nsrzx.service.gt3.INsrxydjService 190086.0ms 16218 0 gov.etax.dzswj.nsrzx.service.rd.INsrzgxxService 142833.0ms 6063 0 gov.etax.dzswj.nsrzx.service.rd.INsrLxService 547002.0ms 5577 3 gov.etax.dzswj.fpzx.service.smrz.ISmrzService 121788.0ms 4488 9 gov.etax.dzswj.sbzx.service.sb.IQcxxcxService 4525608.0ms 4374 441 gov.etax.dzswj.yhzx.service.smrz.IXxSmrzQueryService 121290.0ms 3801 0 gov.etax.dzswj.yhzx.service.auth.ICompanyInfoQuery 704337.0ms 3369 0 gov.etax.dzswj.fpzx.service.fpdk.IFpdkxxCxService 1472061.0ms 3270 138