安装项目环境并迁移项目
1.先把部署可能用到的项目和安装包发送到开发目录
2.发送完成后查看当前目录,显示如下则表示成功
3.然后安装python3.7编译环境,这在我上篇博客已经写明步骤,点击这里查看详细步骤,安装完后执行python3,进入python的命令交互界面则表示安装成功!
4.cd到项目目录下,删除无关文件后安装项目运行所需要的依赖包(依赖包应该提前导出来,windows下可执行pip freeze >requirements.txt导出项目所需要的依赖包)
安装uwsgi
1. pip3 install uwsgi
2. 设置软链接:ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
安装nginx
1.先解压之前上传的nginx安装包,如果没有nginx安装包,则执行命令
wget -c https://nginx.org/download/nginx-1.12.2.tar.gz
2.cd 到nginx安装包目录执行 ./configure 进行配置
3. make && make install 编译安装
4.设置软链接 ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
配置uwsgi
1.创建 一个script目录用于存放uwsgi的相关文件,并在目录中配置uwsgi.ini文件,执行vim uwsgi.ini自动创建
3.uwsgi.ini详细配置内容说明如下所示:
[uwsgi] chdir=/opt/FruitStore #项目目录 socket=127.0.0.1:8080 #http=127.0.0.1:8080 #指定IP端口,ip为内网ip,如果是云服务器,是云服务器内网ip workers=5 #进程个数 pidfile=/opt/script/uwsgi.pid #指定pid文件,用于重启和停止 static-map=/static=/opt/FruitStore/static #指定静态文件 uid=root #用户 gid=root #组 master=true #启动主进程 vacuum=true # 当服务停止的时候自动移除unix Socket和pid文件 enable-threads=true #启用线程 thunder-lock=true #序列化接受的内容 harakiri=30 #设置自中断时间 post-buffering=4096 #设置缓冲 daemonize=/opt/script/uwsgi.log #设置日志目录路径 这儿有几个细节要注意 首先这个端口你可以随便选,但是不要用22,80之类的,这些端口是有特殊作用的。 你选的这个端口你得保证已经加入安全组了。假如你是在阿里云买的服务器,那么你登录你的账号之后,在安全组那儿需要添加这个端口 其中配置文件中socket与http的区别: 当使用http时,uWSGI可以充当web服务器,客户端可直接访问,当然也可以通过nginx转发到uWSGI,此时nginx与uWSGI之间通讯协议是http协议。nginx中通过proxy_pass实现。 当使用socket时,uWSGI无法当做web服务器,只能通过nginx访问,此时nginx与uWSGI之间的通信协议是uwsgi,相比HTTP协议,此协议效率更高。nginx中通过uwsgi_pass实现。 我这里是使用uwsgi+nginx组合来作为服务器,所以选用socket
4.截图展示(注意不要有注释和空格,可能会出现编码问题)
5.启动uwsgi
另附常见的uwsgi命令:
uwsgi --ini uwsgi.ini # 启动
uwsgi --reload uwsgi.pid # 重启
uwsgi --stop uwsgi.pid # 关闭
配置nginx
1.cd /usr/local/nginx/conf 配置nginx.conf
2.为了配置的安全,我们先备份该文件,执行cp nginx.conf nginx.conf.bak
3.修改节选第一部分,执行 vim nginx.conf
修改节选第二部分:
server { listen 80; # 我要监听那个端口 server_name 192.168.29.129; # 设置对外访问入口,可以是域名可以是IP地址,我设置的是IP charset utf-8; access_log logs/access.log; #访问日志 error_log logs/error.log; #错误日志 location / { include uwsgi_params; uwsgi_connect_timeout 30; uwsgi_pass 127.0.0.1:8080 #和uwsgi的socket地址保持一致 }
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/ xml+rss text/ javascript;
location = /static/ { alias /opt/FruitStore/static; #静态文件地址 index index.html index.htm; } }
安装mariadb数据库并配置
1.下载mariadb
yum install mariadb-server mariadb -y
2.安装完成后,启动mariadb服务端
systemctl start/stop/restart/status mariadb #(分别为开启、停止、重启、查看状态)
systemctl enable mariadb #设置开机启动mariadb
3.初始化数据库
mysql_secure_installation #设置root密码等
4.设置数据库 vim /etc/my.cnf
其中lower_case_table_names=1在从外界数据迁移时可能会用到,如果不配置可能因为表名大小写而导致表名不一致,从而无法查到对应的数据
5.重启mariadb
systemctl restart mariadb
6.登入数据库,如下则说明安装成功!
PS:执行命令:show variables like "%character%";show variables like "%collation%";可查看编码类型
启动服务
1.创建项目运行的数据库
2.cd到项目目录下编辑settings,其中debug先不要急着改为false,不然有错误也不会显示,等调试结束后在关掉!
3.配置数据库
4.同步表结构到mariadb
python3 manage.py makemigrations
python3 manage.py migrate
# 同步前,应该先把之前的迁移文件删除
5.执行python manage.py runserver 0.0.0.0:8000 发生编码错误
6.拷贝出错的路径,用vim编辑把decode改为encode在保存即可!
7.重新启动服务后,执行python3 manage.py runserver 0.0.0.0:8000,记得先关闭防火墙。
8.效果展示:部署成功!
数据迁移
1.把之前的表结构和表中的数据从数据库中导出成sql文件,并上传至开发目录,如果之前使用的是sqlite数据库,则需要先把sqlite数据库中的数据导入mysql中,具体做法参考我之前的博客。
2.为了保持不被之前的数据干扰,先删除之前的空表,创建一个空的同名数据库
3.把opt目录下的sql文件数据导进创建好的数据库
4.重启mariadb数据库,命令:systemctl restart mariadb,数据显示,数据迁移成功!