配置ubuntu django服务器及常用包(含Docker环境)
配置ubuntu django服务器及常用包sudo apt-get update1.安装pipapt-get install python-pip2.pip install ipython #某些docker中用apt-get install ipythonpip install djangopip install django==1.10.6...
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
更多推荐
所有评论(0)