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