CentOS部署Python Django项目生产环境(centos部署python项目)

网友投稿 926 2022-05-30

django 各版本以及所兼容的Python版本对照表:

一、安装python

1、下载python安装包

[qiaoyingxiao001@iot-master Python]$ wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz

2、解压下载好的安装包

[qiaoyingxiao001@iot-master Python-3.6.8]$ tar -xvf Python-3.6.8.tgz

3、进入解压缩文件夹

CentOS部署Python Django项目生产环境(centos部署python项目)

[qiaoyingxiao001@iot-master Python]$ cd Python-3.6.8

4、安装python之前需要安装相关的依赖

[root@iot-master Python-3.6.8]# yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel python-devel mysql-devel gcc make Last metadata expiration check: 2:21:03 ago on Sun 16 Aug 2020 06:44:36 AM UTC. No match for argument: python-devel Error: Unable to find a match: python-devel [root@iot-master Python-3.6.8]#

The solution on Centos is to install python-devel package; In Centos 8 however this package was renamed due to the fact python 2.7 is no longer the default one, it has become 3. And this package was named w/o any suggestions;

yum install python3-devel

[root@iot-master Python-3.6.8]# yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel python3-devel mysql-devel gcc make

5、继续安装python3.6.8

[root@iot-master Python-3.6.8]# ./configure [root@iot-master Python-3.6.8]# make [root@iot-master Python-3.6.8]# make install [root@iot-master bin]#  ln -s /usr/local/bin/python3 python [root@iot-master bin]# ln -s /usr/local/bin/pip3 pip [root@iot-master bin]# ll pip lrwxrwxrwx. 1 root root 19 Aug 16 09:25 pip -> /usr/local/bin/pip3 [root@iot-master Python]# pip install --upgrade pip

6.安装和使用virtualenv:

前提: python3和pip3都已经安装,执行命令:

pip3 install virtualenv

创建名字为django的虚拟环境,执行命令:

python3 -m venv /home/virtualenv/django

进入虚拟环境,执行命令:

cd /home/virtualenv/django/bin source activate

7.安装第三方库:

安装Django第三方库列表(requirements.txt),如下:

cd /tmp

vim requirements.txt # 复制第三方库列表到此文件下,退出并保存:wq!

pip install -r requirements.txt # 安装第三方库列表

安装 setuptools

命令:

yum install python-setuptools

完成之后,就可以使用 easy_install 命令安装 django

easy_install django

8、安装MySQL数据库

[root@iot-master MySQL]# yum install mysql-server [qiaoyingxiao001@iot-master MySQL]$ mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

[qiaoyingxiao001@iot-master MySQL]$ systemctl start mysqld.service ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ==== Authentication is required to start 'mysqld.service'. Authenticating as: root Password:  ==== AUTHENTICATION COMPLETE ==== [qiaoyingxiao001@iot-master MySQL]$  [qiaoyingxiao001@iot-master MySQL]$  [qiaoyingxiao001@iot-master MySQL]$ systemctl status mysqld.service ● mysqld.service - MySQL 8.0 database server    Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled)    Active: active (running) since Sun 2020-08-16 09:40:27 UTC; 33s ago   Process: 161440 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS)   Process: 161313 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mysqld.service (code=exited, status=0/SUCCESS)   Process: 161289 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)  Main PID: 161397 (mysqld)    Status: "Server is operational"     Tasks: 39 (limit: 9312)    Memory: 498.4M    CGroup: /system.slice/mysqld.service            └─161397 /usr/libexec/mysqld --basedir=/usr Aug 16 09:40:15 iot-master systemd[1]: Starting MySQL 8.0 database server... Aug 16 09:40:16 iot-master mysql-prepare-db-dir[161313]: Initializing MySQL database Aug 16 09:40:27 iot-master systemd[1]: Started MySQL 8.0 database server. [qiaoyingxiao001@iot-master MySQL]$

[qiaoyingxiao001@iot-master MySQL]$ mysql -u root  Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 10 Server version: 8.0.17 Source distribution Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>  mysql>

1)、修改root密码:

mysql> alter user 'root'@'localhost' identified with mysql_native_password by '新密码'; Query OK, 0 rows affected (0.01 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)

2)、创建一个用户并授权:

mysql> create user 'managerdb'@'%' identified by '密码'; Query OK, 0 rows affected (0.01 sec) mysql> grant all on *.* to 'managerdb'@'%'; Query OK, 0 rows affected (0.01 sec) mysql>  mysql>  mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)

9、安装mysqlclient

CentOS 安装处理:

[qiaoyingxiao001@iot-master MySQL]$ pip install mysqlclient

如安装mysqlclient第三方库出现报错(“OSError: mysql_config not found”),修改配置文件并手动安装的解决方案:

cd /tmp wget http://mirrors.163.com/pypi/packages/6f/86/bad31f1c1bb0cc99e88ca2adb7cb5c71f7a6540c1bb001480513de76a931/mysqlclient-1.3.12.tar.gz#sha256=2d9ec33de39f4d9c64ad7322ede0521d85829ce36a76f9dd3d6ab76a9c8648e5 tar -xzvf mysqlclient-1.3.12.tar.gz cd mysqlclient-1.3.12 vim setup_posix.py 修改setup_posix.py下,mysql_config.path = "mysql_config" 改成 mysql_config.path = "/usr/local/mysql/bin/mysql_config",保存并退出:wq! python setup.py install

Ubuntu 安装处理:

(env) tester@tester-master:~/MasterData/temp$ pip install mysqlclient Collecting mysqlclient   Using cached mysqlclient-2.0.1.tar.gz (87 kB)     ERROR: Command errored out with exit status 1:      command: /home/tester/bin/PycharmENV/env/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xfgvb6rd/mysqlclient/setup.py'"'"'; __file__='"'"'/tmp/pip-install-xfgvb6rd/mysqlclient/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-2iefr5u4          cwd: /tmp/pip-install-xfgvb6rd/mysqlclient/     Complete output (12 lines):     /bin/sh: 1: mysql_config: not found     /bin/sh: 1: mariadb_config: not found     /bin/sh: 1: mysql_config: not found     Traceback (most recent call last):       File "", line 1, in        File "/tmp/pip-install-xfgvb6rd/mysqlclient/setup.py", line 15, in          metadata, options = get_config()       File "/tmp/pip-install-xfgvb6rd/mysqlclient/setup_posix.py", line 65, in get_config         libs = mysql_config("libs")       File "/tmp/pip-install-xfgvb6rd/mysqlclient/setup_posix.py", line 31, in mysql_config         raise OSError("{} not found".format(_mysql_config_path))     OSError: mysql_config not found     ---------------------------------------- ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

解决方案:

(env) tester@tester-master:~/MasterData/temp$ sudo apt-get install python-dev default-libmysqlclient-dev

(env) tester@tester-master:~/MasterData/temp$ sudo apt-get install python3-dev

10、安装django1.11.11

[qiaoyingxiao001@iot-master MySQL]$ pip install django==1.11.11

11、测试创建django项目

修改settings.py文件

DATABASES = {     'default': {         'ENGINE': 'django.db.backends.mysql',         'NAME': 'iot_db',         'USER': 'managerdb',         'PASSWORD': '密码',      } }

12.Django项目使用uwsgi

安装uwsgi

pip install uwsgi

一、命令行启动

uwsgi --http 10.0.0.5:8080 --file xuanyuaniotpro/wsgi.py --static-map=/static=static

二、文件启动

在项目同级目录下面创建script目录存放项目相关的配置文件

在script目录下创建uwsgi.ini文件

[root-yuchuan@hy-iot script]$ vim uwsgi.ini

文件内容:

[uwsgi] #项目目录 chdir=/home/root-yuchuan/project/xuanyuaniotpro # 启动uwsgi的用户名和用户组 uid=root gid=root # 指定项目的application module=xuanyuaniotpro.wsgi:application # 指定sock的文件路径 socket=/home/root-yuchuan/project/script/uwsgi.sock # 启用主进程 master=true # 进程个数 workers=5 pidfile=/home/root-yuchuan/project/script/uwsgi.pid # 自动移除unix Socket和pid文档当服务器停止的时候 vacuum=true # 序列化接受的内容,如果可能的话 thunder-lock=true # 启用线程 enable-threads=true # 设置自中断时间 harakiri=30 # 设置缓冲 post-buffering=4096 # 设置日志目录 daemonize=/home/root-yuchuan/project/script/uwsgi.log # 设置IP和端口 http=10.0.0.5:8080 # 设置静态文件 static-map=/static=/home/root-yuchuan/project/xuanyuaniotpro/static

使用文件启动的命令:

uwsgi --ini uwsgi.ini

12.Django项目使用Nginx

安装Nginx

[root@hy-iot conf.d]# yum -y install nginx

查看Nginx

[root@hy-iot conf.d]# ps -ef | grep -i nginx

[root@hy-iot conf.d]# cd /etc/nginx/conf.d/

[root@hy-iot conf.d]# vim xuanyuaniotpro.conf

server {# 这个server标识我要配置了         listen 80; # 我要监听那个端口         server_name 10.0.0.5; # 你访问路劲前面的url名称         access_log /var/log/nginx/access.log main; # Nginx 日志配置         charset utf-8; # Nginx 编码         gzip on; # 启用压缩,这个的作用是给用户一个网页,比如3M压缩后1M这样的传输速度就好很高的提高         gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream; #支持压缩的类型         error_page 404          /404.html; # 错误页面         error_page 500 502 503 504      /50x.html; # 错误页面         #指定项目路径uwsgi         location / {    # 这个location就和咱们Django 的url(r'^admin/',admin.site.urls),                 include uwsgi_params; # 导入一个Nginx模块他是用来和uwsgi继续通讯的                 uwsgi_connect_timeout 30; # 设置连接uwsgi超时时间                 uwsgi_pass unix:/home/root-yuchuan/project/script/uwsgi.sock; #指定uwsgi的sock文件所有动态请求就会直接丢给他         }         # 指定静态文件路径         location /static/ {                 alias /home/root-yuchuan/project/xuanyuaniotpro/static/;                 index login.html login.htm;         } }

启动Nginx

[root@hy-iot conf.d]# /etc/init.d/nginx restart

机器学习 IoT 软件开发 云计算

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mxgraph进阶(三)Web绘图——mxGraph项目实战(精华篇)
下一篇:【云驻共创】Rust语言一般适合用来做什么?
相关文章