安装环境
- centOS 7.8
- Python 3.6.9
- Django 2.2.6
- uWSGI 2.0.18
- Nginx 1.9.9
步骤
1. 关闭 防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld #开机禁用firewall服务
2. 关闭 SElinux
[root@localhost ~]# getenforce #查看SELinux状态
Enforcing
[root@localhost ~]# setenforce 0 #临时关闭SElinux
[root@localhost ~]# getenforce
Permissive
[root@localhost ~]# vim /etc/selinux/config #永久关闭
将 "SELINUX=enforcing" 改为 "SELINUX=disabled",保存后退出,重启才会生效
3. 安装基础环境包
yum install gcc-c++
(为centos系统增加编译功能)
yum install wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
(安装这些模块都是为了成功编译安装python3,防止出现各种异常)
4. 编译安装 Python
# 切换到 home 目录
cd /home
# 下载 Python 源码包
wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
# 下载完成后,执行解压指令
tar -zxvf Python-3.6.3.tar.gz
cd Python-3.6.9
# 编译安装,依次执行下面的命令
# 将python3安装到/usr/local/python3/路径下
./configure --prefix=/usr/local/python3
make -j2
make install -j2
# 创建 python3 和 pip3 的软链接
ln -s /usr/local/python3/bin/python3.9 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
5. 安装 django 和 uwsgi 及 及创建uwsgi的配置文件
pip3 install django
# 若 django 项目需要其他的第三方库,自行一并安装
pip3 install uwsgi
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
# (为了在任何位置使用uwsgi命令,创建uwsgi软链)
-
将 django 项目放置在 /home/www 目录下(或任何其他目录)
cd /home mkdir www cd www # 然后将django项目部署在www目录下
-
测试 django 项目是否可以正常运行
-
cd 到 django项目目录中
-
# 执行下面的命令 python3 manage.py runserver 0.0.0.0:8001
-
若能在浏览器中通过 ip地址:8001 来访问则通过测试
注:若启动报错
django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).
原因时系统自带 sqlite3 版本太低,升级即可。
# 切换目录 cd /home # 下载源码包 wget https://www.sqlite.org/2019/sqlite-autoconf-3300000.tar.gz # 解压编译 tar -zxvf sqlite-autoconf-3300000.tar.gz cd sqlite-autoconf-3300000/ ./configure --prefix=/usr/local make make install # 替换系统低版本 sqlite3 mv /usr/bin/sqlite3 /usr/bin/sqlite3_old ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3 echo "/usr/local/lib" > /etc/ld.so.conf.d/sqlite3.conf ldconfig sqlite3 -version # 若返回 3.30.0,则安装成功 # 安装成功后重启 django 项目测试即可
-
-
测试 uwsgi 是否安装成功
-
编写一个测试文件
-
vi test.py
-
写入以下内容,保存退出
# !/usr/bin/python3 def application(env, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return [b'UWSGI Test...']
-
-
启动 uwsgi 服务测试
-
uwsgi --http :8001 --wsgi-file test.py
-
使用浏览器访问 ip地址:8001
-
若出现以下界面则测试成功
-
-
-
创建 uwsgi 配置文件
vi uwsgi.ini
填入以下内容,并根据项目,进行对应修改(一般情况下,仅需配置chdir,module)
[uwsgi] # Django-related settings # 127.0.0.1 表示本机,后面的 8001 表示端口 # 这里配置的端口要和后面Nginx配置文件中的socket端口相同。 socket = 127.0.0.1:8001 # the base directory (full path) # 设置django项目根目录 chdir = /root/Learning-Python3/cmdb # Django's wsgi file # 设置django项目wsgi文件,格式为: django项目名 + ".wsgi" module = cmdb.wsgi # process-related settings # master master = true # maximum number of worker processes # 设置进程数 processes = 4 # ... with appropriate permissions - may be needed # chmod-socket = 666 # chown-socket = nginx:nginx # clear environment on exit vacuum = true # enable-threads = true
(若后续启动 uwsgi 服务时出现问题,则将中文注释全部删除)
[uwsgi] chdir = /var/www/html/myBlog file = /var/www/html/myBlog/myBlog/wsgi.py master = True processes = 4 max-requests = 5000 socket = 127.0.0.1:8002 uid = 1000 gid = 2000 pidfile = /var/www/html/myBlog_uwsgi.pid logto = /var/www/html/myBlog_uwsgi.log
-
安装 nginx 并配置 nginx.conf 文件
-
安装 nginx
# 进入 /home 目录 # 执行以下命令 wget https://nginx.org/download/nginx-1.9.9.tar.gz # 若下载速度过慢,也可以使用华为提供的 nginx 镜像 # wget https://mirrors.huaweicloud.com/nginx/nginx-1.9.9.tar.gz # 下载完成后,依次执行以下命令: tar -zxvf nginx-1.9.9.tar.gz cd nginx-1.9.9 ./configure make make install
-
配置 nginx.conf
-
nginx一般默认安装好的路径为/usr/local/nginx
cd /usr/local/nginx/conf vi nginx.conf
-
将 http 中 server 的内容替换为以下内容,并根据项目具体情况修改
server { listen 80; server_name www.your_domain.com your_domain.com your_ip_addr; # server_name 中的值 修改为域名或ip地址 location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8001; } location /static/ { alias /home/www/myproject/static/; #项目静态路径设置 } location /media/ { alias /home/www/myproject/media/; #项目媒体路径设置 } }
修改后 wq 保存,执行以下命令,完成 nginx 配置检测
cd /usr/local/nginx/sbin/ ./nginx -t
若提示下图内容,则配置文件通过测试
# 通过测试后,执行以下命令,启动 nginx ./nginx
-
-
6. 启动 uwsgi
-
# 切回项目所在目录,执行以下命令 uwsgi --ini uwsgi.ini
7. 若以上步骤都没有出错,即可打开浏览器访问django项目
附录(运维相关)
1. nginx 的启动、停止 与 重启
-
启动
systemctl start nginx
-
停止
systemctl stop nginx
-
重启
systemctl restart nginx
若提示
Failed to start nginx.service: Unit not found.
则需要,在/etc/init.d/目录下新建文件,文件名为nginx
vi /etc/init.d/nginx
插入以下代码片段
#!/bin/sh
# nginx - this script starts and stops the nginx daemin
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /usr/local/nginx/conf/nginx.conf
# pidfile: /usr/local/nginx/logs/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
保存退出并执行以下语句
cd /etc/init.d
chmod 755 /etc/init.d/nginx
chkconfig --add nginx