前端項目發布
執行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