饮冰三年-人工智能-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语句

 

posted @ 2020-11-28 10:02  逍遥小天狼  阅读(149)  评论(0编辑  收藏  举报