从安装python配置部署django完全指南

Python 2019-10-01 558

最近由于服务器到期,更换了原有的服务器提供商,因此又不得不折腾,太麻烦了。刚开始配置还是挺顺利的,但是想使用virtualenvwrapper来管理虚拟环境,更重要的原因是有个包居然不支持python3.5,因此,不得不又装python3.6,结果不知为什么使用uwsgi后就是跑不起来,报什么ModuleNotFoundError: No module named 'encodings错误,到现在都不知道原因!!!
一气之下,重装系统,装个ubuntu18.04,自带python3.6。
方便参考,这篇小记会讲一下几个方面:
1.pip安装
2.ubuntu下python3.6安装
3.安装virtualenvwrapper
4.mysql安装
5.nginx+uwsgi配置
6.supervisor配置

1.pip安装

使用sudo apt-get update更新软件
(1)使用以下方式安装:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py  
sudo python get-pip.py    # 运行安装脚本双环境,默认py2  
sudo python3 get-pip.py    # py3运行安装脚本。  

(2)安装方法2

sudo apt install python3-pip  

可以使用pip --version显示版本和验证安装是否成功
使用python -m pip install -U pip升级pip

2.安装python

导入第三方软件库  
apt-get install software-properties-common  
add-apt-repository ppa:jonathonf/python-3.6  
更新软件源并安装  
apt-get update  
apt-get install python3.6  

安装python3.6完成,接着建立软连接,因为当前系统有py2.7、py3.5、py3.6,当然也可以不建立默认使用python3.6连接py36

cd /usr/bin  # 进入该目录下  
rm python  # 删除python软连接  
ln -s python3.6 python  # 指定python3.6的软连接为python  
rm python3  
ln -s python3.6 python3  

3.安装virtualenvwrapper

1.安装virtualenv
pip3 install virtualenv
创建虚拟环境
virtualenv -p python3 /home/py36
或者
virtualenv -p /usr/bin/python3.6 /home/py36
/usr/bin/python3.6为系统中详细的python安装地址,关于查看地址,可以使用whereis python

2.安装virtualenvwrapper
pip3 install virtualenvwrapper
配置
使用vi ~/.bashrc打开终端配置文件,这里我是使用root用户打开的,如果不是root用户,打开文件也许什么都没有。
配置文件如下:

保存后使用source ~/.bashrc,这样每次启动终端的时候都会自动运行
使用:
创建py36虚拟环境
mkvirtualenv -p python3 py36
进入虚拟环境:
workon py36
退出环境,使用系统环境:
deactivate
删除环境:
rm -rf ~/.virtualenvs/py36
查看当前机器所有的虚拟环境
lsvirtualenv或者workon+enter(按键)
用于直接进入pip3软件包的目录
cdsitepackages

4.mysql安装

wget https://dev.mysql.com/get/mysql-apt-config_0.8.10-1_all.deb  
ls  
dpkg -i mysql-apt-config_0.8.10-1_all.deb  

执行上述命令后会弹出界面

选择Ok,安装mysql5.7
一般在ubuntu16.04系统下
运行下述命令,会继续出现界面

apt-get update  
apt-get install mysql-server  

提示你输入密码等。
可以查看该https://ywnz.com/linuxysjk/4780.html
我使用的ubuntu18.04没有继续出现这些界面,并且安装mysql没有初始密码。
此时可以sudo cat /etc/mysql/debian.cnf得到以下结果

host     = localhost  
user     = debian-sys-maint  
password = C00qMhaiNYxOceuU  <------------密码  
socket   = /var/run/mysqld/mysqld.sock  
[mysql_upgrade]  
host     = localhost  
user     = debian-sys-maint  
password = C00qMhaiNYxOceuU  
socket   = /var/run/mysqld/mysqld.sock  

输入:mysql -u debian-sys-maint -p,使用上面的密码进入

use mysql;  
// 下面这句命令有点长,请注意。  
update mysql.user set authentication_string=password('root') where user='root' and Host ='localhost';  
update user set plugin="mysql_native_password";   
flush privileges;  
quit;  

上面的password为新密码可以设置成你想设置的
重新启动mysql:

sudo service mysql restart  
mysql -u root -p  

具体可以参考这篇博文:https://blog.csdn.net/qq_38737992/article/details/81090373
附mysql服务常用命令:
service mysql start 启动
service mysql stop 停止
service mysql restart 重启

5.nginx+uwsgi配置

nginx安装:
sudo apt-get install nginx
进入nginx安装目录
cd /etc/nginx
进入目录下sites-enabled
删除default文件,建立myconf.conf配置文件
1.配置nginx文件

upstream django {  
      server 127.0.0.1:8001;  
}

server {  
        listen 80;  
        server_name blog.huyu.info; # ip/域名  
        charset utf-8;  

        client_max_body_size 75M;  

        # Django media,图片  
        location /media {  
            alias /home/BlogSite/media;  
        }  
        # css、js...  
        location /static {  
            alias /home/BlogSite/static_collected;  
        }  

        # Finally, send all non - media requests to the Django server.  
        location / {  
            uwsgi_pass django;  
            include uwsgi_params;  
        }  
}  

保存,进入nginx目录下sites-enabled,删除default
建立软连接
ln -s /etc/nginx/sites-available/myconf.conf /etc/nginx/sites-enabled/myconf.conf
使用虚拟环境,进入/home/my_uwsgi下建立文件uwsgi.ini

[uwsgi]  
chdir = /home/BlogSite  # django项目文件  
home = /home/py3-env  # 虚拟环境  
# Django's wsgi file  
module = BlogSite.wsgi:application  
master = True  
# maximum number of worker processes  
processes = 4  
# 超时时间  
harakiri = 60  
max-requests = 5000  
# the socket (use the full path to be safe  
socket = 127.0.0.1:8001  
uid = 1000  
gid = 2000  
# 启动主进程  
pidfile = /home/my_uwsgi/master.pid  
daemonize = /home/my_uwsgi/mysite.log  
vacuum = True  

在uwsgi.ini所在目录下执行uwsgi --ini uwsgi.ini
重启nginx,sudo nginx -s reload,就完成了
附uwsgi及nginx常用命令
启动:uwsgi --ini uwsgi.ini
停止:uwsgi --stop uwsgi.pid
重启:uwsgi --reload uwsgi.pid
强制停止:killall -9 uwsgi
sudo nginx start #运行nginx
sudo nginx -s reload #重启nginx
sudo apt-get remove nginx卸载
6.supervisor配置
安装supervisor
sudo apt-get install supervisor
安装目录在/etc/supervisor/,目录结构如下:

配置文件就是这个supervisor.conf,基本不用大改。
要管理的进程配置文件都放在conf.d文件夹中:

[program:uwsgi]  # 必填  
command =/home/py36/bin/uwsgi /home/my_uwsgi/uwsgi.ini  # 第一段执行的虚拟环境  配置的uwsgi.ini文件  
directory=/home/BlogSite  # django项目  
autostart = true  ; 在 supervisord 启动的时候也自动启动  
startsecs = 5   ; 启动 5 秒后没有异常退出,就当作已经正常启动了  
autorestart = true ; 程序异常退出后自动重启  
startretries = 3 ; 启动失败自动重试次数,默认是 3  
user = root ; 用哪个用户启动  
redirect_stderr = true; 把 stderr 重定向到 stdout,默认 false  
stdout_logfile_maxbytes = 20MB; stdout 日志文件大小,默认 50MB  
loglevel = info   ;记录等级 有critical, error, warn, info, debug, trace, or blather等; stdout 日志文件,需要手动创建目录(supervisord 会自动创建日志文件)  
stdout_logfile = /home/log/plantool_stdout.log  
stderr_logfile = /home/log/plantool_err.log  

uwsgi配置:

[uwsgi]  
chdir = /home/BlogSite  
home = /home/py36  
# Django's wsgi file  
module = BlogSite.wsgi:application  
master = True  
# maximum number of worker processes  
processes = 4  
# 超时时间  
harakiri = 60  
max-requests = 5000  
# the socket (use the full path to be safe  
socket = 127.0.0.1:8001  
#uid = 1000  
#gid = 2000  
# 启动主进程  
pidfile = /home/my_uwsgi/master.pid  
#daemonize = /home/my_uwsgi/mysite.log  
vacuum = True  

配置web页面管理,在supervisor.conf文件中配置以下内容:
[inet_http_server]
port=0.0.0.0:9001 # 默认127.0.0.1:9001
username=xxxx # 用户名
password=xxx # 密码
附相关命令:
修改了Supervisor 的配置信息后,必须执行下面命令
service supervisor start # 启动
sudo supervisorctl reload # 重启
sudo supervisorctl update # 更新

标签:Python

文章评论

评论列表

已有0条评论