centos7 部署python3 +MySQL + redis + Django + uwsgi + Nginx环境

1、更新系统的依赖

yum update -y
yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel gcc mariadb-devel

2、安装python3.7并建立虚拟连接

cd /usr/local
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
tar -zxvf Python-3.7.0.tgz
cd Python-3.7.0
./configure --prefix=/usr/local/python3
make && make install
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3

3、安装虚拟环境 (本人习惯一个项目一个虚拟环境)

pip3 install virtualenv
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
mkdir -p /data/env
mkdir -p /data/web
cd /data/env
virtualenv --python=/usr/bin/python3 website

4、安装外层uwsgi并建立软连接

pip3 install uwsgi
ln -s /usr/local/python3/bin/uwsgi/usr/bin/uwsgi

5、启动虚拟环境并将项目搬入

cd /data/env/website/bin
source activate
# 将项目搬入

6、在虚拟环境中再次安装uwsgi 

pip3 install uwsgi

7、安装项目所需的依赖

pip3 install -r request.txt

8、# 安装MySQL 并修改密码和设置可支持自己电脑的Navicat连接

yum -y install https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum install -y mysql-server
systemctl start mysqld
systemctl enable mysqld
cat /var/log/mysqld.log |grep 'A temporary password'
mysql -u 'root' -p
alter user 'root'@'localhost' identified by 'Password123456./';
use mysql;
update user set host = '%' where user = 'root' and host='localhost';
flush privileges;

9、设置uwsgi

cd /data/web/website/
vim website.xml
<uwsgi>
    <socket>127.0.0.1:8000</socket>
    <chdir>/data/web/website</chdir>
    <module>website.wsgi:application</module>
    <master>true</master>
    <processes>4</processes>
    <vacuum>true</vacuum>
    <daemonize>/data/web/uwsgi.log</daemonize>
</uwsgi>

10、安装 nginx

cd /home/
wget http://nginx.org/download/nginx-1.15.0.tar.gz
tar -zxvf nginx-1.15.0.tar.gz
cd nginx-1.15.0
./configure
make && make install

11、配置http(即配置Nginx.conf文件)


cd  /usr/local/nginx/conf/
vim nginx.conf
# 将原 nginx.conf文件中的内容删除后 复制下面内容粘贴进去

events { worker_connections
1024; } http { include mime.types; default_type application/octet-stream; sendfile on; client_max_body_size 20m; server { listen 80; server_name 域名或IP,多个时用空格号隔开; charset utf-8; location / { include /usr/local/nginx/conf/uwsgi_params; uwsgi_pass 127.0.0.1:8000; uwsgi_read_timeout 60; } location /static/ { alias /data/web/website/static/; autoindex on; } location /media/ { alias /data/web/website/media/; autoindex on; } } }

12、安装并配置 Redis

cd /usr/local/
wget http://download.redis.io/releases/redis-4.0.6.tar.gz
tar -zxvf redis-4.0.6.tar.gz
yum install gcc
cd redis-4.0.6
make && make install
将 /usr/local/redis-4.0.6/redis.conf 中的 daemonize no  修改成为 daemonize yes
mkdir /etc/redis
cp /usr/local/redis-4.0.6/redis.conf /etc/redis/6379.conf
cd /usr/local/redis-4.0.6/utils/
vi redis_init_script
# 在第一行加入如下两行注释,保存退出
#  # chkconfig:   2345 90 10
#  # description:  Redis is a persistent key-value database
# 注释的意思是,redis服务必须在运行级2,3,4,5下被启动或关闭,启动的优先级是90,关闭的优先级是10。
cp /usr/local/redis-4.0.6/utils/redis_init_script /etc/init.d/redisd
cd /etc/init.d
# 设置开机启动
chkconfig redisd on
# 到此已经完全设置Redis开机启动了
# 全局启动命令 service redisd start
# 全局停止命令 service redisd stop

13、启动Nginx 和启动项目命令

cd /usr/local/nginx/sbin/
./nginx
cd /usr/local/nginx/sbin/
./nginx -s reload
cd /data/env/website/bin
source activate     # 启动虚拟环境
cd /data/web/website/
kill -9 `pgrep uwsgi` # 杀死uwsgi进程
uwsgi -x website.xml  # 重新启动uwsgi进程

14、在安全组中开发443端口并在阿里云申请https加密, 

  将申请SSL得到的.pem和.key文件放到  /usr/local/nginx/cert/下(目录自己建但要和配置https中ssl_certificate 和ssl_certificate_key 匹配

15、  Nginx安装ssl模块 

cd /home/nginx-1.15.0
yum -y install openssl openssl-devel
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make
cp ./objs/nginx /usr/local/nginx/sbin/nginx_bak
cd /usr/local/nginx/sbin/
./nginx -s reload

16、# https 配置 (即重新配置Nginx.conf文件)


cd  /usr/local/nginx/conf/
vim nginx.conf
# 然后将下列内容复制到nginx.conf中文件中去


#
user nobody; worker_processes 2; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; client_max_body_size 20m; server { listen 443 ssl; server_name 域名或IP, 多个时用空格号隔开; ssl_certificate /usr/local/nginx/cert/chengguoyun.pem; ssl_certificate_key /usr/local/nginx/cert/chengguoyun.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { include /usr/local/nginx/conf/uwsgi_params; uwsgi_pass 127.0.0.1:8000; uwsgi_read_timeout 60; } location /static/ { alias /data/web/website/static/; autoindex on; } location /media/ { alias /data/web/website/media/; autoindex on; } } # 反向代理到80 端口 server { listen 80; server_name 域名或IP, 多个时用空格号隔开; rewrite ^(.*)$ https://$host$1 permanent; } }

 

posted @ 2020-02-24 17:34  吾延  阅读(344)  评论(0编辑  收藏  举报