• 饮冰三年-人工智能-Docker-63-Docker部署文件帮助系统Mezzanine


    上一节:饮冰三年-人工智能-Docker-53-Docker容器数据卷

    Docker部署文件帮助系统Mezzanine

    背景:

    项目背景、意义:

    帮助文档,为用户提供产品文档和常见问题的解决方案,包含产品快速入门、操作手册、最佳实践、等资源,给用户提供最全的内容资源。

    Mezzanine介绍

            Mezzanine是一个功能强大,一致且灵活的内容管理平台。 Mezzanine使用Django框架构建,提供了一个简单但高度可扩展的体系结构,鼓励深入研究和开源代码。在某些方面,Mezzanine类似于Wordpress等工具,提供了用于管理页面,博客文章,表单数据,商店产品和其他类型内容的直观界面。 但是也有不同。 

    软件环境:

    系统版本:

    本次使用的服务器具体信息如下:
    
    DISTRIB_ID=Ubuntu
    DISTRIB_RELEASE=20.04
    DISTRIB_CODENAME=focal
    DISTRIB_DESCRIPTION="Ubuntu 20.04.1 LTS"
    

    前提:已经安装docker

    1.项目结构

    这里说明下为什么有两个dockerfile:

    主要是因为做docker镜像的时候需要一个基础镜像包和一个项目镜像包,大致可以理解基础镜像包指项目所需要运行的基础环境(比如说linux系统环境,python环境等等),项目镜像包大致可以理解是项目所需要的各种插件框架等(比如说Django项目肯定需要django框架以及其他的项目所依赖的框架等等)这里我的项目并没有使用到数据库,所以在这里不做数据库的环境,需要的自行将自己的数据库的环境添加进dockerfile文件中进行数据库安装)

    2.创建mezzanine项目

        2.1 安装mezzanine

           sudo pip install mezzanine

        2.2 创建mezzanine项目

          sudo mezzanine-project XXX

          XXX:为项目的名称,此处为help_doc

    3.搭建Docker环境

    3.1 创建目录结构

    cyuser@cyuser-virtual-machine:~/st_test_project/cy_help$ mkdir base_images
    cyuser@cyuser-virtual-machine:~/st_test_project/cy_help$ echo > Dockerfile
    cyuser@cyuser-virtual-machine:~/st_test_project/cy_help$ echo > ./base_images/Dockerfile
    cyuser@cyuser-virtual-machine:~/st_test_project/cy_help$ mkdir ./base_images/scripts
    cyuser@cyuser-virtual-machine:~/st_test_project/cy_help$ echo > ./base_images/scripts/provision.sh

    3.2 编辑基础镜像Dockerfile(主要就是对系统环境,镜像目录等设置)

    #这里我使用的是linux centos7系统环境
    FROM centos:7
     
    #这里主要是添加一下作者信息
    MAINTAINER yango&yating
     
    #这里是存放的路径(网上大多说这里是设置环境变量,本人是没理解,根据我的实践,这里是将项目做成镜像后的路径)
    ENV CODE_DIR=/opt/help_doc
    ENV DOCKER_SCRIPTS=$CODE_DIR/base_image/scripts
     
    #将scripts下的文件复制到镜像中的镜像中的目录里(这里个人感觉没有什么太大作用,先这样进行复制)
    COPY ./scripts/* $DOCKER_SCRIPTS/
     
    #执行镜像中的provision.sh脚本
    RUN chmod a+x $DOCKER_SCRIPTS/*
    RUN $DOCKER_SCRIPTS/provision.sh
    Dockerfile

    3.3 编辑provision.sh文件(这个文件主要就是为了搭建系统所需要的环境)

    #!/bin/bash
    set -e
     
    #python环境依赖(这里主要就是针对python环境所安装的一些依赖包)
    yum install -y 
        kde-l10n-Chinese
        glibc-common
        git
        wget
        mysql-devel
        gcc
        swig
        pulseaudio
        pulseaudio-libs
        pulseaudio-libs-devel
        zlib-devel
        bzip2-devel
        openssl-devel
        ncurses-devel
        sqlite-devel
        readline-devel
        tk-devel
        gdbm-devel
        db4-devel
        libpcap-devel
        xz-devel
        libffi-devel
        ncurese-devel
        automake
        autoconf
        libtool
        make
        alsa-lib-devel
        poppler-utils
     
     
    #python3.7(开始安装Python环境)
    #wget https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tgz
    wget https://mirrors.huaweicloud.com/python/3.7.7/Python-3.7.7.tgz
    tar -zxvf Python-3.7.7.tgz
    cd Python-3.7.7
    ./configure
    make && make install
    rm -rf Python-3.7.7*
     
    #sqlite(这里我当时在最后由于提示我django版本和sqlite版本不兼容,所以在这里将sqlite版本进行升级,但是本人测试后此方法没用)
    wget https://www.sqlite.org/2020/sqlite-autoconf-3330000.tar.gz
    tar -zxvf sqlite-autoconf-3330000.tar.gz
    cd sqlite-autoconf-3330000
    ./configure --prefix=/usr/local
    make && make install
    mv /usr/bin/sqlite3  /usr/bin/sqlite3_old
    ln -s /usr/local/bin/sqlite3   /usr/bin/sqlite3
    export LD_LIBRARY_PATH="/usr/local/lib"
    rm -rf sqlite-autoconf*
     
    #pip3(这里是借鉴的网上的教程,作用不大,后面再安装的时候会说本身的pip版本已经高于这个版本了,所以这里的这个并没什么用)
    wget --no-check-certificate https://github.com/pypa/pip/archive/9.0.1.tar.gz
    tar -zvxf 9.0.1.tar.gz
    cd pip-9.0.1
    python3 setup.py install
    rm -rf pip-9.0.1*
    pip3 install --upgrade setuptools
    provision.sh

    3.4制作基础镜像,在base_image文件夹中执行以下命令

    注意:执行命令的时候一定到启动docker服务

    sudo docker build -t base_cy_help_image:1.0 .

    完成之后截图

     ps:如果创建过程中出现 net/http: TLS handshake timeout 等问题

    sudo vim /etc/docker/daemon.json

    暂时配置为:  "registry-mirrors": ["https://owwdylkq.mirror.aliyuncs.com"] ,如果该字段有值,记得制作完初始镜像后修改回来,防止其他docker编辑受影响

    sudo systemctl daemon-reload
    sudo systemctl restart docker

      

    3.5 制作项目镜像Dockerfile文件(主要是搭建对项目的一些框架,插件依赖等)

    FROM base_cy_help_image:1.0
     
    #这里主要就是设置一下编码语言
    RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
    ENV LC_ALL zh_CN.UTF-8
     
     
    #将项目目录文件复制到镜像中,CODE_DIR是在基础镜像中定义的
    COPY ./help_doc $CODE_DIR/help_doc
     
    RUN pip3 install -r $CODE_DIR/help_doc/requirements.txt
    RUN pip3 install -i https://mirrors.aliyun.com/pypi/simple/ pymysql
     
    #暴露端口
    EXPOSE 8080
     
    #启动项目,这里的路径就是前面基础镜像包的CODE_DIR路径,再加上自己的项目复制到里面的路径,不清楚的可以参考这我给出的结构进行比对
    CMD ["python3", "/opt/help_doc/help_doc/manage.py", "runserver", "0.0.0.0:8080"]
    Dockerfile

    3.6 修改mezzanine的数据库配置,创建管理员用户

    cd help_doc/help_doc 

    sudo vim local_settings.py

    DATABASES = {
        "default": {
            # Ends with "postgresql_psycopg2", "mysql", "sqlite3" or "oracle".
            "ENGINE": "django.db.backends.mysql",
            # DB name or path to database file if using sqlite3.
            "NAME": "help_doc",
            # Not used with sqlite3.
            "USER": "root",
            # Not used with sqlite3.
            "PASSWORD": "123",
            # Set to empty string for localhost. Not used with sqlite3.
            "HOST": "10.5.1.46",
            # Set to empty string for default. Not used with sqlite3.
            "PORT": "3306",
        }
    }
     
    # Allowed development hosts
    ALLOWED_HOSTS = ["*"]
    settings.py

    sudo vim local_settings.py

    import pymysql
     
    pymysql.install_as_MySQLdb()
    _init_.py

    数据库中创建help_doc 数据库

     切换到manage.py同级目录下

    执行:

    python3 manage.py makemigrations

    python3 manage.py migrate

    python3 manage.py createsuperuser

    3.7.切换到镜像dockerfile所在的目录执行以下命令

    sudo docker build -t cy_help:1.0 . #这里的my_app就是自己项目的镜像名称 

     

    3.8 查看镜像,并启动

    dock images ps

    sudo docker run -it -p 0.0.0.0:9999:8080 68e07e559a99

    3.9 测试

    前台展示

     后台编辑

    前台展示

    4.问题处理

    4.1:数据库字符集设置成utf-8

    /*生成SQL,然后导出执行。这里用DATABASE()表示当前的数据库,也可以指定数据库名字。*/
    SELECT
       CONCAT( 'ALTER TABLE ',TABLE_NAME,' CONVERT TO CHARACTER SET utf8;')
    FROM
        information_schema.`TABLES`
    WHERE
        TABLE_SCHEMA = 'help_doc' ORDER BY TABLE_NAME;
             
    sql语句
  • 相关阅读:
    分页查询SQL语句
    屏蔽Ctrl+C
    RichtextBox 控件小节
    必须掌握的八个CMD命令
    [唠叨两句]一个关于OpenFileDialog 影响 相对路径的问题
    反序列化出现异常:SerializationException 在分析完成之前就遇到流结尾
    Static块(静态代码块)
    Java ServletContext 详解
    tomcat中conf\Catalina\localhost目录下的J2EE项目METAINF配置文件
    关于【apache tomcat 5.5.15/conf /Catalina/localhost配置虚拟目录】时的一些问题。(配置web项目的方式不止一种,虚拟目录就是一个)
  • 原文地址:https://www.cnblogs.com/YK2012/p/14051709.html
Copyright © 2020-2023  润新知