Centos7 + Python + Redis+ Mysql + Uwsgi + Nginx

一、Centos7安装docker

1.1 环境配置

先测试是否下载了docker:查看镜像:docker images
没有下载,就依次执行以下环境的安装

①curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

Docker - 项目部署

②yum install -y yum-utils device-mapper-persistent-data lvm2

Docker - 项目部署

③yum list docker-ce.x86_64 --showduplicates | sort -r

Docker - 项目部署

④yum install -y --setopt=obsoletes=0 docker-ce-17.03.2.ce-1.el7.centos.x86_64 docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch

Docker - 项目部署

⑤systemctl daemon-reload

systemctl restart docker

systemctl enable docker.service

Docker - 项目部署

⑥docker version

 Docker - 项目部署

 docker安装成功。

 

二、镜像

2.1 配置镜像加速

直接复制阿里云:Docker-hub:https://cr.console.aliyun.com/cn-hangzhou/mirrors

先创建文件夹:mkdir -p /etc/docker

执行:

tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
}
EOF

Docker - 项目部署

2.2 镜像加速方法

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

2.3 拉取镜像

从中央仓库中下载镜像到本地

docker pull 镜像名称:版本标签(如:docker pull mysql:5.6)

2.4 查看镜像信息

docker inspect 镜像id 或者 镜像名称:标签

2.5 删除镜像

方法一:先删除依赖镜像的容器:

docker rm 容器id 或者 容器名称 

容器id查找:这里docker ps -a 所有容器信息 -q 正在运行的容器ID

再删除镜像docker rmi 镜像id 或者 镜像名称

方法二:强制删除镜像,依赖它的容器会一并删除:

docker rmi 镜像id 或者 镜像名称:版本 -f

2.6 搜索镜像

docker search 镜像名称

 

三、容器

3.1 创建容器

docker run -it 镜像id 或者 镜像名称:便签

-i 标准输入

-t 伪终端

-d 守护状态运行

--name 命名容器

-p 端口映射(宿主机端口:容器端口)

-P 端口映射(随机端口)

-v 文件挂载 (-v $PWD/redis/conf/redis.conf:/etc/redis/redis.conf)

本地文件/路径:容器文件/路径

不论修改宿主机还是容器内挂载的文件,会同时变化,避免要修改容器中文件内容

而需要安装vim或者复制文件至容器的操作。

-link 容器间通信(--link tesudrm_tsdrm:django_server)

关联的容器名称/id:关联容器服务器地址的别名(自动加载至hosts文件)

3.2 启动容器

docker start 容器id 或 容器名称

3.3 关闭容器

docker stop 容器id 或 容器名称

3.4 进入容器

docker exec -it 容器id 或 容器名称 /bin/bash

3.5 退出容器(后台运行)

Ctrl + p + q

3.6 暂停容器

docker pause 容器id 或者 容器名称(unpause取消暂停)

3.7 查看容器详情

docker inspect 容器id 或 容器名称:版本号

3.8 删除容器

docker rm 容器id 或 容器名称(只删除已经关闭或者退出的容器,-f表示强制)

3.9 复制文件至容器

docker cp 本地命令执行所在相对路径 容器id/名称:/root/(容器绝对路径)

如:docker cp /www/pro_tesu/MySQL/tesudrm.sql 容器ID:/root/

Docker - 项目部署

 

 

四、配置

4.1 准备的文件目录

mkdir /www/pro_tesu/Redis/{conf,data} -p

mkdir /www/pro_tesu/MySQL/{conf.d,logs,data} -p

mkdir /www/pro_tesu/Nginx/log -p

mkdir /www/pro_tesu/TSDRM

touch /www/pro_tesu/MySQL/conf.d/my.cnf

touch /www/pro_tesu/Nginx/nginx.conf

touch /www/pro_tesu/Redis/conf/redis.conf

Docker - 项目部署

编辑my.cnf文件,添加内容:见附件

4.2 MySQL容器

①拉取镜像:docker pull mysql:5.6

Docker - 项目部署

②创建容器

docker run \
-p 3307:3306 \
--name tesudrm_mysql \
-v $PWD/MySQL/conf.d:/etc/mysql/conf.d \
-v $PWD/MySQL/logs:/logs \
-v $PWD/MySQL/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=password \
-d mysql:5.6

Docker - 项目部署

③拷贝sql文件至容器

前提是先把sql文件上传到/www/pro_tesu/MySQL文件夹下

docker cp /www/pro_tesu/MySQL/tesudrm.sql 容器ID:/root/

如:docker cp /www/pro_tesu/MySQL/tesudrm.sql 1e373b556bc6:/root/

Docker - 项目部署

④进入容器

docker exec -it 容器id或名称 /bin/bash 注:容器开启的状态下

cd /root/ 切换到容器的家目录下,ls可以查看是否有sql文件

Docker - 项目部署

⑤连接数据库mysql -u root –p回车输入密码即可。

Docker - 项目部署

⑥创建数据库

create database tesudrm charset=utf8;

Docker - 项目部署

⑦导入数据文件

mysql -uroot -ppassword tesudrm< tesudrm_v2.0.sql

Docker - 项目部署

 sql数据导入成功。

 

4.3 redis容器

docker中redis默认无配置文件启动

配置文件redis.conf(根据需求自己配置,参数说明:https://www.cnblogs.com/qq78292959/archive/2013/09/21/3331032.html)

requirepass tesunet

daemonize no

port 6379

编辑redis.conf文件,添加内容:见附件

①拉取镜像

docker pull redis:3.2

Docker - 项目部署

 ②创建容器

docker run \
-p 6378:6379 \
--name tesudrm_redis \
-v $PWD/Redis/conf/redis.conf:/etc/redis/redis.conf \
-v $PWD/Redis/data:/data \
-d redis:3.2 redis-server /etc/redis/redis.conf

Docker - 项目部署

 

五、centos6.8容器下安装python3.6.8

5.1 拉取centOS6.8镜像、创建容器、进入容器

docker pull centos:6.8

Docker - 项目部署

docker run -itd centos:6.8 /bin/bash

Docker - 项目部署

docker exec -it 容器id bin/bash

Docker - 项目部署

 

5.2 centos容器中安装安装python3.6.8

①上传Python-3.5.4.tgz压缩包至linux上(在指定的自定义路径) 
或者直接在linux上:
wegt https://www.python.org/ftp/python/3.5.4/Python-3.5.4.tgz
②docker cp 自定义路径
/Python-3.5.4.tgz 容器id:/home/

③tar -zxvf Python-3.5.4.tgz
④cd Python
-3.5.4

⑤编译:./configure --prefix=/usr/local/python3 问题:Python3..4安装报错 configure: error: in `/usr/local/python3/Python-3.5.4' configure: error: no acceptable C compiler found in $PATH 解决:缺少gcc编译环境:yum -y install gcc ⑥安装:make && make install ⑦建立软链接 ln -s /usr/local/python3/bin/python3.5 /usr/bin/python3 ln -s /usr/local/python3/bin/pip3.5 /usr/bin/pip3 ⑧查看python3与pip3版本 python3 pip3 –V
问题:pip3 -V : pip3 command not found
解决:
wget --no-check-certificate https://pypi.python.org/packages/26/d1/dc7fe14ce4a3ff3faebf1ac11350de4104ea2d2a80c98393b55c84362b0c/setuptools-32.1.0.tar.gz
tar zxvf setuptools-32.1.0.tar.gz
cd setuptools-32.1.0
python3 setup.py build
python3 setup.py install

wget --no-check-certificate https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz
tar zxvf pip-9.0.1.tar.gz
cd pip-9.0.1
python3 setup.py install


问题:Compression requires the (missing) zlib module.
解决:yum install zlib 
⑨上传项目
docker cp /www/pro_tesu/TSDRM容器ID:/root/
从清华大小pip源安装依赖
cd TSDRM
pip3 install –r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
问题:安装依赖的时候,发现安装了之后运行项目python3 manage.py runserver 0.0.0.0:8000,还是会报错,模块没有安装成功
解决:报什么模块没有 执行:pip3 install 模块名==版本号 ,再运行项目,报错,依次执行
如项目一些重要的模块必须安装:pip3 install redis==版本号
               pip3 install celery==版本号
               pip3 install django-celery==版本号
               pip3 install flower==版本号
问题:No module named Cython 解决:pip install Cython pip install fasttext

5.3 配置uwsgi

①cd TSDRM
②ls
③vi uwsgi.ini 
④填写配置参数(见附录)
保存退出
⑥运行uwsgi: uwsgi --ini uwsgi.ini 
⑦访问项目:192.168.1.89,执行正确会显示没有样式的页面
问题:在运行uwsgi时: uwsgi:command
not found 解决:找到uwsgi的位置: find / -name uwsgi ——>>> /usr/local/python3/bin/uwsgi 建立软链接: ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi 输入uwsgi --help 查看是否成功 启动成功: [uwsgi-static] added mapping for /static => /home/personl_blog/static 关闭uwsgi: uwsgi --stop uwsgi.pid

Docker - 项目部署

5.4 安装pdf生成软件:wkhtmltopdf

在https://github.com/wkhtmltopdf/wkhtmltopdf/releases/ 下载对应的安装包,在这里我选择:wkhtmltox-0.12.5-1.centos6. x86_64.rpm

rpm -ivh wkhtmltox-0.12.5-1.centos6. x86_64.rpm

测试是否安装成功:
wkhtmltopdf http://www.baidu.com ./test.pdf    注:这里是把百度的首页转成test.pdf文件,保存在当前路径下

安装软件报错:

[root@7f8a11fc9311 home]# rpm -ivh wkhtmltox-0.12.5-1.centos6.x86_64.rpm 
error: Failed dependencies:
        fontconfig is needed by wkhtmltox-1:0.12.5-1.centos6.x86_64
        freetype is needed by wkhtmltox-1:0.12.5-1.centos6.x86_64
        libX11 is needed by wkhtmltox-1:0.12.5-1.centos6.x86_64
        libXext is needed by wkhtmltox-1:0.12.5-1.centos6.x86_64
        libXrender is needed by wkhtmltox-1:0.12.5-1.centos6.x86_64
        libjpeg is needed by wkhtmltox-1:0.12.5-1.centos6.x86_64
        libpng is needed by wkhtmltox-1:0.12.5-1.centos6.x86_64
        xorg-x11-fonts-75dpi is needed by wkhtmltox-1:0.12.5-1.centos6.x86_64
        xorg-x11-fonts-Type1 is needed by wkhtmltox-1:0.12.5-1.centos6.x86_64

解决:通过yum安装以上安装报错的模块
yum install -y fontconfig freetype libX11 libXext libXrender libjpeg libpng xorg-x11-fonts-75dpi xorg-x11-fonts-Type1

5.5 下载中文字体simsun.ttc

下载:http://www.font5.com.cn/font_download.php?id=150&part=1237886897
上传到 linux系统 /usr/share/fonts docker cp /usr/share/fonts /simsun.ttc 容器ID:/usr/share/fonts

5.6 修改项目中数据库的地址

cd TSDRM 
cd TSDRM
vi settings.py
mysql:   HOST:
172.17.0.3 注:这个ip地址是mysql容器的ip   PORT:3306

redis:172.17.0.2 注:这个ip地址是redis容器的ip
    6379

Docker - 项目部署

Docker - 项目部署

5.7 安装静态文件

1、collectstatic命令收集静态文件至项目根目录下:
python manage.py collectstatic

2、注释STATICFILES_DIRS ,解注:STATIC_ROOT
STATIC_URL = '/static/'
SITE_ROOT = os.path.join(os.path.abspath(os.path.dirname(__file__)), '..')
STATIC_ROOT = os.path.join(SITE_ROOT, 'static')


# STATICFILES_DIRS = [
#     os.path.join(BASE_DIR, "static")
# ]

5.8 浏览器访问:192.168.1.89

5.9 cmd访问192.168.1.89

Docker - 项目部署

 

六、打包自定义镜像上传阿里云

6.1 先关闭容器:docker stop 容器ID

6.2 基于当前容器重新创建镜像


docker commit -m "描述" -a "root" -p 容器id 镜像名称:版本号

如:docker commit -m "centos6.8_python3.4" -a "root" -p 容器id en_centos:2.2

-p 表示提交时停止容器
-a 提交镜像的作者
-m 提交时的说明文字

6.3 创建阿里云账号

https://cr.console.aliyun.com/cn-hangzhou/instances/repositories

6.4 登录阿里云账号

docker login --username=zgs1121 registry.cn-hangzhou.aliyuncs.com

password:**********

6.5 将镜像上传到阿里云的镜像仓库

docker tag 镜像ID registry.cn-hangzhou.aliyuncs.com/tesu/仓库名(en_centos)
docker push registry.cn-hangzhou.aliyuncs.com/tesu/仓库名(en_centos)

 

七、下拉自定义镜像并创建项目Django容器

7.1 拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/tesunet/en_centos

7.2 命名镜像

docker tag registry.cn-hangzhou.aliyuncs.com/tesunet/en_centos 新镜像名称

 

八、django项目容器

8.1 切到项目所在的路径下

cd /www/pro_tesu/

8.2 基于自定义镜像创建容器

docker run -p 8000:8000 \
-v $PWD/TSDRM:/TSDRM \
--link tesudrm_mysql:mysql_server \
--link tesudrm_redis:redis_server \
--name tesudrm_tsdrm \
-itd centos_python\
sh -c 'cd /TSDRM/&&\
uwsgi --ini uwsgi.ini&&\
python3 manage.py celery multi start worker -A TSDRM -l info --logfile=/TSDRM/log/celerylog.log&&\
python3 manage.py celery multi start beat -A TSDRM -l info --logfile=/TSDRM/log/beat.log&&\
python3 manage.py celery -A TSDRM flower -l info'

注:sh -c ‘…’ 表示启动容器时运行的命令,命令结束容器并会自动断开,所以多个命令的最后一个必须在终端一直运行的命令,或者是无限循环。

8.3 进入容器

docker exec -it 容器id bin/bash

8.4 切换到项目路径下

cd TSDRM

8.5 启动uwsgi

uwsgi --ini uwsgi.ini

8.6 运行项目

python3 manage.py runserver 0.0.0.0:80 
注:如有模块没有安装,安装模块

8.7 上述项目跑起来了,页面没有样式,需安装静态文件。如果你的自定义镜像中安装了静态文件等,就不需要执行此操作

①切换到项目根路径下: cd TSDRM
②收集静态文件: python3 manage.py collectstatic 注: 收集好的静态文件存放于项目根目录下,名为: static
③查看静态文件: cd static ls
④修改配置文件
注释: STATICFILES_DIRS
= [os.path.join(BASE_DIR, "static")] 添加: STATIC_URL = '/static/' SITE_ROOT = os.path.join(os.path.abspath(os.path.dirname(__file__)), '..') STATIC_ROOT = os.path.join(SITE_ROOT, 'static')

8.9 访问项目:192.168.1.89

 

九、运行nginx容器

9.1 拉取镜像

docker pull nginx

9.2 运行容器

运行容器之前先配置好文件,配置文件见附录

cd /www/pro_tesu/

docker run -v $PWD/Nginx/nginx.conf:/etc/nginx/nginx.conf \
               -v $PWD/Nginx/log:/var/log/nginx \
               -v $PWD/TSDRM/static:/static \
               --link tesudrm_tsdrm:django_server \
               --name tesudrm_nginx \
               -d -p 8888:80 nginx

9.3 访问项目

192.168.1.89:8888

Docker - 项目部署

 

另附:启动nginx容器,浏览器访问nginx

Docker - 项目部署

9.4 电脑重启后启动容器命令

docker start tesudrm_mysql tesudrm_redis tesudrm_pro tesudrm_nginx

Docker - 项目部署

 

十、附录

10.1 uwsgi.ini配置文件

Docker - 项目部署
[uwsgi]
#socket=0.0.0.0:8000 配置nginx代理时使用    
http=0.0.0.0:8000
chdir=/TSDRM          
#module=TSDRM.wsgi:application                
wsgi-file=/TSDRM/TSDRM/wsgi.py
master=True    
process=4      
pidfile=/TSDRM/TSDRM-master.pid   
vacuum=True
max-requests=5000
#daemonize=/TSDRM/log/wsgi.log                    
#static-map=/static=/TSDRM/static   
View Code

相关文章:

  • 2021-09-01
  • 2021-10-01
  • 2021-10-13
  • 2020-06-24
  • 2019-05-23
  • 2022-02-22
猜你喜欢
  • 2021-10-25
  • 2021-07-05
  • 2021-01-12
  • 2022-01-17
  • 2021-04-23
  • 2021-11-27
相关资源
相似解决方案