Ubuntu20.04+Python3+Django3.1.4

一.服务器基本搭建

1.安装docker

sudo apt install docker
sudo apt install docker-compose
sudo service docker start

sudo usermod -G docker userName #将账户加入docker组,加入后账户权限极大,只要运行容器并将某个目录挂载入容器,即可对本无权限的目录增删该查,故加入docker的用户账号要慎用,对于代码的上传等操作,要另外建一个账号,以防漏洞
newgrp docker 更新用户组

docker search ubuntu #cat /etc/issue查看ubuntu版本号
docker pull ubuntu:20.04 
docker images #查看下载镜像

2.安装pip

sudo apt-get install python3-distutils
sudo apt install python3-pip

3.安装Django3.1.4

sudo pip3 install Django==3.1.4
# pip3 install --upgrade Django #升级Django到最新版
# pip3 install -U Django  #升级Django到最新版

4.安装uwsgi

sudo apt-get install build-essential python3-dev
sudo pip3 install uwsgi

5.安装nginx

sudo apt-get install nginx

6.安装mysql8.0

sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev  #必须先安装否则下一步失败
sudo pip3 install mysqlclient

如需设置账号可远程登录,如docker容器访问则进行如下设置
进入mysql
use mysql;
update user set host='%' where user='username';
flush privileges;

修改配置vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
#bind-address           = 127.0.0.1
#bind-address=0.0.0.0 #外网可访问
bind-address            = 172.17.0.1 #仅限本机docker容器访问,为主机的docker网路地址
重启service mysql restart

7.安装ipython3

sudo apt install ipython3

8.安装celery

 sudo  pip3 install Celery
 sudo apt-get install rabbitmq-server

二、Docker操作

1.启动容器

docker run -it ubuntu:20.04 env LANG=C.UTF-8 bash #启动容器
docker run -it lingge879/django-dev:2.0 env LANG=C.UTF-8 bash #启动容器
docker run -it ubuntu env LANG=C.UTF-8 bash #启动容器

#将代码挂载到容器,并将run.sh中端口暴漏
#docker run -it -d --name testdev -v /home/dev/project/mysite:/project/mysite -p 9000:9000 lingge879/django-dev:2.0 bash #-d后台运行
docker run -it --name ddev1 -v /home/dev/project/mysite:/project/mysite -p 9000:9000 lingge879/django-dev:2.0 bash 

2.已经挂起的容器可以如下运行

docker start a3a7e7c2e7d1
docker exec -it a3a7e7c2e7d1  bash

3.docker中配置django环境

#容器中不要加sudo
apt-get update
apt-get install python3
apt install python3-pip 
apt-get install build-essential python3-dev 

#pip3 install Django==3.1.4
pip3 install Django   
# pip3 install --upgrade Django #升级Django到最新版
# pip3 install -U Django  #升级Django到最新版

pip3 install uwsgi 
apt-get install libmysqlclient-dev  
pip3 install mysqlclient 
pip3 install Celery
#不必安装mysql-client和rabbitmq-server,也可远程连接mysql和使用celery

以下两个选装
安装ping
apt-get install inetutils-ping
安装ifconfig
apt install net-tools

4.将容器提交生成本地镜像

#在容器外执行
docker commit -m='ubuntu20.4 python3.8.5 Django3.1.4 uwsgi2.0.19 Celery5.0.3' -a='lingge879' f323f50339a7 lingge879/django-dev:2.0

注意:将容器提交为镜像时,在创建容器时的一些配置也会被提交到镜像中,并在之后新镜像产生的容器中生效
如容器启动为
docker run -it   -v /home/dev/test1:/test1  -w /test2 -p 9000:9001 ubuntu:20.04 bash
然后提交产生新镜像
docker commit -m='create test image' e5a58c7dde04 mu:1.0
之后用新镜像产生新容器

以下方式生成容器
docker run -it  mu:1.0 bash
1.工作目录依然是/test2
2.依然有挂载的目录/test1,但是已经不再和主机的目录有关系,即/test1不再对应主机的/home/dev/test1
3.通过docker ps可知此时新容器的端口依然暴露为9001/tcp,但已不再和主机的9000端口对应。

以下方式生成容器
docker run -it -v /home/dev/test1_:/test1 -w /test3 -p 9002:9003  mu:1.0 bash
1.新镜像的原工作目录/test2依然存在,当然此时工作目录已是/test3
2./test1对应主机目录换成了/home/dev/test1_
3.通过docker ps可知端口映射换成了
9001/tcp, 0.0.0.0:9002->9003/tcp
即增加了端口映射,原容器内暴露端口未变化

由以上实验可知,当对容器进行提交时,原属于容器内的配置不变,但对于主机的无论是目录还是端口匹配将不复存在。
所以,当修改镜像时,最好以最纯净的方式创建容器再提交,如
docker run -it ubuntu:20.04 bash

5.提交到docker仓库

https://hub.docker.com/ 地址
docker login 终端登录
docker logout 终端登出
#推送镜像到仓库
docker push lingge879/django-dev:2.0

#拉取镜像
docker pull lingge879/django-dev:2.0

6.配置docker容器访问主机的数据库和rabbitmq-server

a.查看主机的地址

ifconfig #在主机运行
找到docker0网路组的inet一般为 172.17.0.1

b.改settings的数据配置

'HOST': '172.17.0.1',

c.改数据库可以远程连接(上一章节1.6)

d.使celery可以连接主机的rabbitmq-server

修改settings中
CELERY_BROKER_URL = 'pyamqp://myuser:mypassword@172.17.0.1/myvhost'

7.基本架构

方式一

1.下载django源码并提取其中的admin的static到主机目录下,用于nginx
题外话:将账户加入docker组,加入后账户权限极大,只要运行容器并将某个目录挂载入容器,即可对本无权限的目录增删该查,故加入docker的用户账号要慎用,对于代码的上传等操作,要另外建一个账号,以防漏洞

2. 
export MYPROJECT=mysite
export MYMODE=dev  #线上改为online等
export MYPORT=9001 #主机的端口
3. 
创建静态文件目录
mkdir -p /myfile/data/$MYMODE/$MYPROJECT
chmod 770 /myfile/data/$MYMODE/$MYPROJECT #这里存放数据,防止其它人可读
4. 
启动容器,挂载代码和静态文件路径,指定工作目录,将容器内的8001端口映射到主机的 MYPORT 端口,,关闭core生成,将主机时间和时区同步到容器中
docker run -it -d --name ${MYMODE}_${MYPROJECT} -v /home/$MYMODE/www/$MYPROJECT:/www/$MYPROJECT -v /myfile/data/$MYMODE/$MYPROJECT:/myfile/data/$MYMODE/$MYPROJECT -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime -w /www/$MYPROJECT -p $MYPORT:8001 --ulimit core=0 lingge879/django-dev:2.0 bash

5.
进入容器
docker exec -it ${MYMODE}_${MYPROJECT}  bash

为了前端开发稳定性,可以单独为前端启动一个容器只是name和主机的端口不同,如下:
export MYPROJECT=mysite
export MYMODE=dev
export MYPORT=9002
#容器name加后缀 _web 且主机的端口改为另一个如9002
docker run -it -d --name ${MYMODE}_${MYPROJECT}_web -v /home/$MYMODE/www/$MYPROJECT:/www/$MYPROJECT -v /myfile/data/$MYMODE/$MYPROJECT:/myfile/data/$MYMODE/$MYPROJECT -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime -w /www/$MYPROJECT -p $MYPORT:8001 --ulimit core=0 lingge879/django-dev:2.0 bash
进入容器
docker exec -it ${MYMODE}_${MYPROJECT}_web  bash

在容器中可以
ulimit -c 查看core的值
ulimit -c 0 手动关闭core文件生成

方式二

也可以写成脚本

vim build_docker.sh
chmod 700 build_docker.sh #使其权限可控

脚本内容

export MYPROJECT=mysite
export MYMODE=dev
export MYPORT=9001
export MYIMAGE=lingge879/django-dev:2.4
export DOCKER_NAME=${MYMODE}_${MYPROJECT}

if [ "$1" == "build" ]; then
    docker stop $DOCKER_NAME
    docker rm $DOCKER_NAME
    docker run -it -d --name $DOCKER_NAME -v /home/$MYMODE/www/$MYPROJECT:/www/$MYPROJECT -v /myfile/data/$MYMODE/$MYPROJECT:/myfile/data/$MYMODE/$MYPROJECT -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime -w /www/$MYPROJECT -p $MYPORT:9000  --ulimit core=0 $MYIMAGE bash
    docker exec -it $DOCKER_NAME  bash -c "./run.sh celery restart;./run.sh" #启动脚本,可以注释掉
    docker exec -it $DOCKER_NAME  bash #启动完后进入容器,可以注释掉
elif [ "$1" == "in" ]; then
    docker exec -it $DOCKER_NAME bash
fi

8.散记

1)容器查看本机的ip

2)操作代码的账号配置说明

远程连接服务器时如所用sftp来更新服务器的开发环境需注意

1.sftp的账号不要和操作docker的账号一致,如代码账号是codeUser,操作docker的账号为devUser

2.  是代码账号不能远程ssh登陆(经验证此项不可取,因此时sftp失效

usermod -s /sbin/nologin codeUser

3.将devUser加入到codeUser的群组,(成为devUser的次要群组之一,另一个是docker组),以便于devUser来使用git管理代码(因代码目录所有者为codeUser)

usermod -aG  codeUser devUser
#查看所属的群组
方式一
cat /etc/group 
方式二
groups

4.线上数据需要设置权限

chmod 770 /ourfile/data/site #文件数据设置为其它用户不可读
chmod 770 /codepath/www  #代码路径设置为其它账号不可读

usermod -aG  siteUser www-data #将nginx的运行账户www-data,加入到代码的所属群组中,便于访问static下文件
service nginx reload  #重启nginx

3)docekr运维常用操作

docker top contain_name  #容器内运行的进程
docker stats contain_name #容器运行使用资料监控CPU,内存等
docker logs -f contain_name #跟踪显示容器的输出
docker exec  -it dev_joying bash -c './run.sh' #-c后面接进入容器后执行的命令,此处为直接重启容器中的系统,

Ubuntu14.04+Django1.9.4

配置ubuntu django服务器及常用包
sudo apt-get update
1.安装pip    

apt-get install python-pip

2. 
    pip install ipython  #某些docker中用apt-get install ipython
    pip install django    pip install django==1.9.4
    sudo apt-get install python-dev
    sudo apt-get install python-setuptools

mysql:

   mysql5.5:

    sudo apt-get install mysql-server

    sudo apt-get install mysql-client

    mysql5.6

apt-get install MySQL-client-core-5.6
apt-get install mysql-client-5.6
apt-get install mysql-server-5.6

    sudo apt-get install libmysqld-dev
    sudo apt-get install libmysqlclient-dev
    pip install mysql-python  # sudo apt-get install python-mysqldb,次代码安装版本低,如已安装,执行apt-get remove --purge python-mysqldb
项目
    sudo apt-get install python-imaging
    pip install qrcode   #某些docker中用apt-get install python-qrcode


    pip install pytz
    pip install poster
    pip install python-dateutil
    pip install xlrd
    pip install xlwt
    pip install vobject

    安装pycrypto   https://www.dlitz.net/software/pycrypto/  #或pip install pycrypto

django-rest:
    pip install djangorestframework
    pip install markdown
    pip install django-filter
    
celery:
    pip install Celery  #或pip install celery==3.1.23
    sudo apt-get install rabbitmq-server

    rabbitmqctl add_user myuser mypassword
    rabbitmqctl add_vhost myvhost
    rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*"

pycurl:

    apt-get install libcurl3

    apt-get install python-pycurl

pip install uwsgi
sudo apt-get install nginx
 

pip install django-daterange-filter #admin中时间筛选
pip install qiniu    #安装七牛sdk

pip install python-barcode==0.8 条形码,后面的版本仅支持python3


挂在数据盘:

如何在Linux系统中分区格式化新的数据盘_云服务器 ECS-阿里云


更改mysql默认存储文件路径:

    http://blog.csdn.net/zhanglingge/article/details/25737227

对于mysql保存emoji格式

alter table TABLE_NAME convert to character set utf8mb4 collate utf8mb4_bin;

参考http://my.oschina.net/u/2958/blog/108257

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐