系统需求
centos7 minimal
python2.7
部署前的准备工作
centos7 minimal是精简版本,需要手动去配置一些设置。
1. 配置网络,设置固定ip
ip可以自动获取,我这里设置成固定ip
2. 更新yum源
[root@localhost /]# cd
[root@localhost ~]# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[root@localhost ~]# rpm -ivh epel-release-latest-7.noarch.rpm
检查是否添加到源列表:
[root@localhost ~]# yum repolist
3. 安装vim
[root@localhost ~]# yum install vim
4. 设置防火墙开启80,3306等需要的端口
高版本的centos系统防火墙默认是firewall,通过命令可以永久开放端口
[root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
5. kill命令的扩展
[root@localhost ~]# yum install psmisc
需要安装的软件
1. mariadb或者mysql,这里选择mariadb
[root@localhost /]# yum install mariadb mariadb-server
[root@localhost /]# yum install mysql-devel
2. nginx
安装依赖包:
[root@localhost /]# yum install gcc-c++
安装nginx:
[root@localhost /]# yum install nginx
3. python的一些组件
安装pip:
[root@localhost /]# yum install python-pip
更新pip:
[root@localhost /]# pip install --upgrade pip
安装虚拟环境:
[root@localhost /]# pip install virtualenv
安装uwsgi:
[root@localhost /]# yum install python-devel
[root@localhost /]# pip install uwsgi
安装mysql链接工具:
[root@localhost /]# pip install MySQL-python
4. 安装git
[root@localhost /]# yum install git
开始部署项目django+uwsgi+nginx
1. 创建项目目录
[root@localhost /]# mkdir /www/
2. 从远程仓库git
[root@localhost /]# cd /www/
[root@localhost www]# git clone https://example.git
3. 配置数据库
[root@localhost www]# systemclt start mariadb
[root@localhost www]# mysql_secure_installation
登录mysql
[root@localhost www] mysql -uroot -p
创建数据库
MariaDB [(none)]> create database db_name default character set utf8;
4. 创建虚拟环境并激活
[root@localhost /]# cd /www/
[root@localhost www]# virtualenv env --system-site-packages (这里虚拟环境要继承全局)
[root@localhost www]# source env/bin/activate
5. 配置django环境
在虚拟环境下,安装所需的packages, 然后配置数据库等开发需要的内容。
6. 配置uwsgi
在manage.py文件同级目录下新建文件django_socket.ini为uwsgi配置文件。内容如下:
[uwsgi]
chdir = /www/site/ # 项目根目录路径
wsgi-file = /www/site/site/wsgi.py # wsgi文件路径
master = true
vhost = true
pythonpath = /www/env/lib/python2.7/site-packages # 虚拟环境路径
socket = 127.0.0.1:8077
processes = 4
threads = 2
log-maxsize = 500000
buffer-size = 32768
daemonize = /www/logs/uwsgi.log # log文件路径
7. 配置nginx
在/etc/nginx/conf.d/目录下新建nginx配置文件,site.conf(必须是.conf的后缀名),配置文件内容如下:
server {
listen 80;
server_name 192.168.1.20; # 域名或者ip地址
root /www/site;
location / {
uwsgi_pass 127.0.0.1:8077;
include uwsgi_params;
uwsgi_param REMOTE_ADDR $HTTP_X_REAL_IP;
}
location = /50x.html {
root html;
}
location /static/ {
root /www/site; # 静态资源路径
}
location /uploads/ {
root /www/site;
}
}
以上配置基本完成了,接下来运行如下命令:
[root@localhost site]# uwsgi --ini django_socket.ini
[root@localhost site]# nginx -c /etc/nginx/nginx.conf
[root@localhost site]# nginx -s reload
如果没有报错,就说明配置成功,在浏览器输入ip地址或者域名就能访问了。
8. 脚本启动服务器
方便起见,我们可以设置脚本启动重启服务器,在/www/目录下新建shell脚本, 命名为update.sh, 内容如下:
#!/bin/bash
nginx_process=`ps aux|grep nginx|grep worker`
if [ "$nginx_process" != "" ]; then
killall -9 nginx
fi
uwsgi_process=`ps aux|grep uwsgi|grep django_socket`
if [ "$uwsgi_process" != "" ]; then
killall -9 uwsgi
fi
cd /www/site
#/usr/bin/python manage.py collectstatic
/usr/bin/uwsgi --ini django_socket.ini
/usr/sbin/nginx -c /etc/nginx/nginx.conf
/usr/sbin/nginx -s reload
修改文件权限:
[root@localhost www]# chmod 755 update.sh
脚本启动配置完成,如果发布新版本之后记得执行该脚本才能生效。(如果报错为:nginx502那就再执行一次 - -)
9. 自动化配置
配置mysql开机启动:
[root@localhost www]# systemclt enable mariadb
配置uwsgi+nginx开机启动:
由于已经设置通过脚本启动uwsgi和nginx,所以只需要将/www/update.sh这个脚本设置为开机启动就OK啦。配置如下:
打开/etc/rc.local,在最后一行添加:
sh /www/update.sh
保存关闭。重启服务器之后有可能脚本没有被自动执行,原因是/etc/rc.local是/etc/rc.d/rc.local的链接文件,因此,需要修改/etc/rc.d/rc.local的权限:
[root@localhost root]# chmod 755 /etc/rc.d/rc.local
至此,整个部署就完成了。如有需要改进的地方,还请各位指出,互相学习交流。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。