本次实现两个项目站点的部署:
- 一个django项目
- 另一个是flask项目
nginx + uwsgi 的处理流程, 在上一个页面介绍过, 此处不过多叙述, 需要了解 点击此处
1. 安装MariaDB
- 安装命令
1 | yum -y install mariadb mariadb-server |
- 安装完成MariaDB,首先启动MariaDB
1 | systemctl start mariadb |
- 设置开机启动
1 | systemctl enable mariadb |
2. 设置密码
- 命令:
1 | mysql_secure_installation |
- Enter current password for root:<–初次运行直接回车
- 设置密码
1 | Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车 |
1 | New password: <– 设置root用户的密码 |
3. 开启远程连接
- 在mysql数据库中的user表中可以看到默认是只能本地连接的,所有可以添加一个新的用户,该用户可以远程访问
3-1. 创建用户
1 | 先使用数据库 |
3-2. 授权
1 | 给用户最大权限 |
1 | 刷新权限表 |
1 | 查看 |
- 接下来就可以在远程的数据库可视化工具中直接访问该服务器中的mysql了。
1 | 访问数据库 |
4. 安装python3.6
- 在centos中(Linux系统),系统默认只提供python2.7的版本,但是项目我们使用的python3.6的版本
所以我们自己安装python3
4-1. 安装Python3的方法
- 首先安装依赖包
1 | yum -y groupinstall "Development tools" |
1 | yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel |
- 然后根据自己需求下载不同版本的Python3,我下载的是Python3.6.4
1 | wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz |
- 然后解压压缩包,进入该目录,安装Python3
1 | tar -xvJf Python-3.6.4.tar.xz # 解归档 |
最后创建软链接
1 | ln -s /usr/local/python3/bin/python3 /usr/bin/python3 |
1 | ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 |
5. 安装环境
5-1. 安装virtualenv
1 | yum install python-virtualenv |
5-2. 创建虚拟环境
1 | mkdir env # 创建env目录 |
1 | cd axfenv |
1 | 激活虚拟环境 |
5-3. 安装环境需要的包
1 | pip3 install -r re_install.txt # 递归式安装 |
其中re_install.txt文件中记录的是需要安装包的名称以及对应的版本
6. 站点1-django项目的部署
该部署采用的系统是centos7
Django的项目中,在工程目录下settings.py文件中有一个DEBUG=True参数,如果DEBUG=False则会出现js,css,img无法加载的情况出现。
原因如下:
Django框架仅在开发模式下提供静态文件服务。当我开启DEBUG模式时,Django内置的服务器是提供静态文件的服务的,所以css等文件访问都没有问题,但是关闭DEBUG模式后,Django便不提供静态文件服务了。想一想这是符合Django的哲学的:这部分事情标准服务器都很擅长,就让服务器去做吧!
6-1. 测试环境中部署方式
- 在测试环境中一般都直接使用python manage.py runserver的方式去运行项目。其中就涉及到DEBUG=False的修改,静态目录的修改等,具体修改如下:
1 | 修改settings.py配置文件中的DEBUG=False模式,修改ALLOEWD_HOST=['*'] |
1 | 修改工程目录下的urls.py, 先导入serve |
1 | from django.views.static import serve |
1 | urlpatterns = [ |
6-2. 正式环境中部署方式
- 正式环境中部署django项目采用 nginx+uwsgi来部署
6-2-1. 安装nginx
a)添加nginx存储库
1 | yum install epel-release |
b) 安装nginx
1 | yum install nginx |
c) 运行nginx
- Nginx不会自行启动。要运行Nginx
1 | systemctl start nginx |
nginx的运行命令:
1 | systemctl status nginx 查看nginx的状态 |
d)系统启动时启用Nginx
1 | systemctl enable nginx |
e)如果您正在运行防火墙,请运行以下命令以允许HTTP和HTTPS通信:
1 | sudo firewall-cmd --permanent --zone=public --add-service=http |
1 | sudo firewall-cmd --permanent --zone=public --add-service=https |
1 | sudo firewall-cmd --reload |
运行结果如下:
6-3. 配置uwsgi
6-3-1. 安装uwsgi
1 | pip3 install uwsgi |
- 然后进行环境变量的配置, 建立软连接
1 | ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi |
6-4. 配置项目代码,配置项目nginx,配置uwsgi.ini等
配置文件,我习惯将每一个项目的配置文件,日志文件,虚拟环境放在一起,这样开发方便,运维也方便维护
项目的目录结构如下:
其中:
conf是配置文件,用于存放项目的nginx.conf文件,uwsgi.ini文件
logs是日志文件,用于存放nginx的启动成功和失败文件,以及uwsgi的运行日志文件
env是用于存放虚拟环境
src是项目文件,该目录下上传的是目录代码
6-4-1. 配置nginx.conf文件
首先:编写自己项目的nginx.conf文件如下:
进入到 /home/conf 目录中., 再自己定义nginx的配置文件,如只有一个项目则可以直接命项目名, 好见名知意. 比如爱鲜蜂项目,可定义为axfnginx.conf文件; 但此文为多个项目则: 我直接命名为 nginx.conf
1 | server { |
其次:修改总的nginx的配置文件,让总的nginx文件包含我们自定义的nginx.conf配置文件;
总的nginx配置文件在:/etc/nginx/nginx.conf中
- 以上步骤操作完成以后,需要重启nginx:
1 | systemctl restart nginx |
如果自定义的axfnginx.conf文件没有错误的话,查看nginx的运行状态会有如下的结果:
6-4-2. 配置uwsgi文件
- 在conf文件夹下除了包含自定义的nginx.conf配置文件,还有我们定义的uwsgi.ini文件
- 因为自己定义的nginx.cof配置文件可以走多个路由, 比较方便, 就设置一个, 而uwsgi.ini文件多个项目在一起较麻烦, 此处就每个项目设置一个, 所以第一个站点django项目的uwsgi文件我设置为其端口名: uwsgi-80.ini
1 | [uwsgi] |
- 运行项目:
1 | 在建好的/home/conf文件下运行: |
- 启用几次后, 端口容易被占 如下:
1 | netstat -lntp # 查看端口号 |
- 再运行上述uwsgi –ini uwsgi-80.ini 则一个成功了
7. 站点2-flask项目的部署
- 因为flask项目要启用redis的session, 所以先安装redis
7-1安装redis
1 | yum install redis # 下载安装 |
7-2建立一个干净的第二个虚拟环境
- 新建虚拟环境-并激活
1 | cd /home/env # 进入环境的文件夹 |
- 把项目又放在/home/src/ 中, 进入其中安装包
1 | pip3 install -r reqirments.txt # 递归式安装 |
其中reqirments.txt文件中记录的是需要安装包的名称以及对应的版本
7-3 测试flask项目能否在本地运行
- 直接在虚拟环境下运行命令:
1 | pip3 manage.py runserver -h 0.0.0.0 -p 10000 -d |
若能成功说明, 上传文件配置没问题, 失败则仔细, 看看项目上传前是否能运行
7-4 修改自定义的配置文件
7-4-1 配置自定义的nginx.conf
- 增加内容如下:
1 | server { |
7-4-2 配置uwsgi文件
- 下面uwsgi 为flask项目配置法
- 新增加一个uwsgi-8080.ini 文件
1 | [uwsgi] |
7-5 修改linux下的路径
- 因为项目在widows下创建的, 所以
1 | # BASE_DIR = os.path.dirname(os.path.dirname(__file__)) # 此为widows下找到的路径 |
- 修改好后再:
1 | 重启nginx |
- 如果运行成功, 则网页上公网ip 加上端口号访问了
如果是加的域名 , 则直接访问域名即可….