版本说明
Centos 7.4
Python 3.6.4
Django 2.0.2
MySql 5.7
uWSGI
Nginx 1.16.0
部署前
1、更新系统环境
yum install epel-release
2、安装所有的开发工具包
yum groupinstall -y "Development tools"
一、升级python3.6.4
1、下载
cd /usr/local/src
wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz
2、安装python依赖包
yum install zlib-devel 不安装编译会报错
yum install libffi-devel -y 新版本python3.7
yum install openssl-devel pip下载使用https协议的包时需要
安装sqlite
cd /usr/local/src
wget https://www.sqlite.org/2018/sqlite-autoconf-3250300.tar.gz
tar zxvf sqlite-autoconf-3250300.tar.gz
cd sqlite-autoconf-3250300
./configure
make && make install
3、解压
tar zxvf Python-3.6.4.tgz
cd Python-3.6.4
4、编译安装
./configure --prefix=/usr/local/python3.6.4
make && make install
5、链接python和pip
ln -s /usr/local/python3.6.4/bin/python3 /usr/bin/python3
ln -snf /usr/bin/python3 /usr/bin/python
ln -s /usr/local/python3.6.4/bin/pip3 /usr/bin/pip
查看朴python版本
python -V
查看pip版本
pip --version
6、yum配置文件依赖python,Python升级后就要修改配置文件
vim /usr/bin/yum
vim /usr/libexec/urlgrabber-ext-down
修改第一行 #!/usr/bin/python 为 #!/usr/bin/python2
测试修改是否成功
yum -h
升级系统 yum update
7、检查其他需要修改的命令
sed -i "s#/usr/bin/python#/usr/bin/python2#g" `grep /usr/bin/python -rl /usr/bin/*`
grep -ai /usr/bin/python /usr/bin/*
列出文件列表后逐个修改(按照yum修改方法)
二、安装django
1、安装
pip install django==2.0.2 -i https://pypi.douban.com/simple
2、测试安装结果
python -m django --version
3、链接
ln -s /usr/local/python3.6.4/bin/django-admin /usr/bin/django-admin
三、安装数据库
0、卸载mariadb(安装mysql前要卸载mariadb)
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.37-1.el7_0.x86_64
1、下载
https://dev.mysql.com/downloads/mysql/
选择
系统 Red Hat Enterprise Linux 7 / Oracle Linux 7 (x86, 64-bit)
版本 mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
2、安装
tar xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm--force --nodeps
rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm --force --nodeps
3、初始化
mysqld --initialize --user=mysql
4、查看密码cat /var/log/mysqld.log
[Note] A temporary password is generated for root@localhost: +zip+r:yM8Ci
5、修改密码
mysql -u root -p
ALTER USER 'root'@'%' IDENTIFIED BY '123456';
flush privileges;
6、设置开机自启
systemctl enable mysqld
五、django 项目
1、创建django项目
django-admin startproject mysite
创建app
cd mysite
django-admin startapp app 或 python manage.py startapp app
2、安装pymysql
pip install pymysql -i https://pypi.douban.com/simple
vim mysite/__init__.py 添加下面代码(否则python3和mysql之间连接会报错)
import pymysql
pymysql.install_as_MySQLdb()
3、修改配置文件
vim mysite/settings.py
# 数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'leopard',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
# 多媒体文件目录
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
# 静态文件目录
STATIC_ROOT = os.path.join(BASE_DIR, 'collection_static')
4、初始化
在项目中创建media和collection_static目录
执行python manage.py collectstatic命令时,STATIC_ROOT目录存放整个项目的静态文件(注意STATICFILES_DIRS也要配置,如果不配置就不会收集自定义的静态文件,执行完后要把该目录的属主属组都给nginx用户,即chown -R nginx:nginx collection_static)
5、进入mysql中创建数据库
create database mysite character set utf8;
6、运行测试
python manage.py makemigrations 为这些修改创建迁移文件,给应用生成迁移脚本
python manage.py migrate 同步修改过的数据库
启动项目
python manage.py runserver
打开浏览器测试 127.0.0.1:8000
六、安装uwsgi
1、安装pip install uwsgi -i https://pypi.douban.com/simple
2、链接ln -s /usr/local/python3.6.4/bin/uwsgi /usr/bin/uwsgi
3、启动服务 uwsgi --http :80 --chdir /root/mysite/ -w mysite.wsgi(mysite.wsgi前缀必须和项目名相同)
4、查看启动进程lsof :80 查看占用80端口的进程,可以用kill -9 PID杀掉进程
5、打开浏览器输入本机IP就能访问
6、uwsgi 配置文件
mkdir -p /etc/uwsgi/
vim /etc/uwsgi/mysite.ini
[uwsgi]
chdir = /root/mysite #项目目录
socket = /run/mysite.sock #socekt文件,要和nginx配置的相同
wsgi-file = /root/mysite/mysite/wsgi.py #django项目中wsgi文件
module = mysite.wsgi:applcation
master = true #允许主线程存在
processes = 2 #开启进程的数量
threads = 4 #开启线程的数量
daemonize = /var/log/mysite/uwsgi.log #日志文件
vacuum = true #当服务器退出的时候自动清理环境
7、创建日志目录
mkdir -p /var/log/mysite
七、源码安装nginx(或直接用yum安装)
uwsgi处理动态请求,nginx处理静态请求
1、下载
cd /usr/local/src
wget http://nginx.org/download/nginx-1.16.0.tar.gz
2、安装依赖包
yum -y install zlib zlib-devel openssl openssl-devel pcre-devel
zlib:Nginx提供gzip模块,需要zlib库支持。
openssl:Nginx提供SSL功能
pcre:支持地址重写rewrite功能
安装编译工具
yum -y install gcc gcc-c++ autoconf automake
3、创建用户
groupadd -r -g 500 nginx
useradd -g 500 -r -u 500 nginx
4、解压安装
tar zxvf nginx-1.16.0.tar.gz
cd nginx-1.16.0
./configure –help 查看配置信息
生成配置文件
./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf --error-log-path=/usr/local/nginx/log/error.log--pid-path=/usr/local/nginx/nginx.pid--lock-path=/usr/local/nginx/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module
make && make install
给目录授权
chown -R nginx:nginx nginx/
测试 /usr/local/nginx/sbin/nginx 如果没报错就说明服务已经启动
链接
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
5、修改配置文件
vim /usr/local/nginx/nginx.conf
在http模块中加入include /usr/local/nginx/conf.d/*.conf;(一定要加在server前面,否则nginx会按默认配置显示)
创建配置文件目录
mkdir -p /usr/local/nginx/conf.d/
cd /usr/local/nginx/conf.d/
vim mysite.conf
添加下面内容
upstream mysite{
server unix:///run/mysite.sock; #socket文件要和uwsgi配置相同
}
server {
listen 80;
server_name 127.0.0.1;
charset UTF-8;
error_log /var/log/mysite/nginx_error.log;
access_log /var/log/mysite/nginx_access.log;
client_max_body_size 75M;
location /media {
alias /root/mysite/media;
}
location /static {
alias /root/mysite/collection_static;
}
location / {
uwsgi_pass mysite;
include /usr/local/nginx/uwsgi_params;
}
}
给项目目录修改属主属组(包含)
chown -R nginx:nginx /root/mysite
创建日志目录
mkdir -p /var/log/mysite
测试配置文件正确性
nginx -t
nginx: the configuration file /usr/local/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/nginx.conf test is successful 说明成功
启动服务
nginx
打开浏览器访问测试
关闭服务
nginx -s stop
修改配置后重新读配置文件
nginx -s reload
配置完成后启动服务
uwsgi --init /etc/uwsgi/mysite.ini
nginx -s reload
八、配置iptables(centos7以前版本)
1、开启ssh端口(如果是远程配置,一定要先配置运行ssh访问)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
2、开启80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
3、允许ping
iptables -A INPUT -p icmp -j ACCEPT
#如果OUTPUT设置成DROP需要添加 iptables -A OUTPUT -p icmp -j ACCEPT
4、最后配置拒绝所有进入
iptables -P INPUT DROP 拒绝所有进
iptables -P OUTPUT ACCEPT 开放所有出
iptables -P FORWARD DROP 拒绝所有转发
5、查看详细信息
iptables -L -n
6、查找所有规则
iptables -L INPUT --line-numbers
7、删除一条规则
iptables -D INPUT 11 (注意,这个11是行号,是iptables -L INPUT --line-numbers 所打印出来的行号)
8、重启
service iptables restart
九、配置firewall
1、查看版本firewall-cmd --version
如果报错,是python版本导致
解决
vim /usr/bin/firewall-cmd
vim /usr/bin/firewall-offline-cmd
vim /usr/sbin/firewalld
修改第一行#!/usr/bin/python -Es 为 #!/usr/bin/python2 -Es 保存退出
2、启动服务
systemctl start firewalld.service
systemctl status firewalld.service #查看状态
3、查询
SSH协议是否被允许(yes/no)
firewall-cmd --zone=public --query-service=ssh
查询开启那些端口
firewall-cmd --zone=public --list-ports
查看区域所有信息
firewall-cmd --zone=public --list-all
4、添加规则
添加http协议
firewall-cmd --permanent --zone=public --add-service=http
添加https协议
firewall-cmd --permanent --zone=public --add-service=https
添加ssh协议
firewall-cmd --permanent --zone=public --add-service=ssh
添加8080端口
firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --reload
5、删除规则
删除http协议
firewall-cmd --permanent --zone=public --remove-service=http
每次添加删除规则后要重新加载
firewall-cmd --reload
6、重启服务
systemctl restart firewalld
十、安装redis
1、下载
cd /usr/local/src
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
2、编译安装
cd redis-4.0.8
make && make install
3、配置
mkdir -p /etc/redis
cp /usr/local/src/redis-4.0.8/redis.conf /etc/redis
# redis以守护进程的方式运行
# no表示不以守护进程的方式运行(会占用一个终端)
vim /etc/redis/redis.conf
daemonize yes
4、启动服务
/usr/local/bin/redis-server /etc/redis/redis.conf
查看启动
ps -aux | grep redis
5、客户端
redis-cli
set name diaopiao
get name
“dianpiao”
6、开机自启动
# 开机启动要配置在 rc.local 中,而 /etc/profile 文件,要有用户登录了,才会被执行。
echo "/usr/local/bin/redis-server /etc/redis/redis.conf &" >> /etc/rc.local
十一、Django配置redis
1、安装redis
pip install redis
pip install django-redis
2、修改django配置
vim /root/mysite/mysite/settings.py
增加下面配置
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': '127.0.0.1:6379',
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
},
},
}