FasterRunner后端部署
前提条件:已安装git
1、进入指定目录,拉取代码:1)#git clone git@github.com:yinquanwang/FasterRunner.git
2、进入FastRunner项目根目录:#cd /opt/FastRunner/FastRunner
3、创建虚拟环境:#mkvirtualenv myenvs
4、进入虚拟环境:#workon myenvs
5、安装项目依赖:#pip3 install -r requirements.txt
在安装项目依赖时,可能会报错,提示某些模块不存在,根据报错信息安装指定的模块即可。我是安装了以下模块:
pip3 install django;
pip3 install djangorestframework;
pip3 install django-cors-headers;
pip3 install beautifulsoup4;
6、安装mysql,我是在docker环境中安装的mysql5.7
1)拉取mysql5.7镜像:#docker pull docker.io/mysql:5.7
2)使用mysql容器:#docker run -P --name mysql01 -e MYSQL_ROOT_PASSWORD=密码 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
3)查看容器运行:#docker ps
4)mysql使用:
step1:进入docker:#docker exec -it 容器名称 bash
step2:用root用户进入mysql:#mysql -uroot -p,然后输入root用户的密码即可进入
step3:输入SQL语句执行。SQL语句结束需要加分号。
step4:退出mysql:>quit;
step5:退出docker:exit
7、修改项目数据库配置:#vim /opt/FastRunner/FasterRunner/FasterRunner/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mysql01',
'USER':'root',
'PASSWORD':'密码',
'HOST':'127.0.0.1',
'PORT':'3306'
}
}
8、执行数据库脚本迁移
1)进入项目manage.py所在目录,即:#cd /opt/FastRunner/FasterRunner
2)生成数据库迁移脚本。#python3 manage.py makemigrations fastrunner fastuser
3)执行数据库迁移脚本:#python3 manage.py migrate
9、启动后台服务:#python3 manage.py runserver 0.0.0.0:8000 &
错误记录:
1、mysql容器运行失败,查看日志“chown: changing ownership of '/var/lib/mysql/': Permission denied”
解决方案:在docker run中加入 --privileged=true 给容器加上特定权限
2、安装项目依赖是报错:“Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-d16rr437/mysqlclient/”
解决方案:安装mysqlclient。步骤:(1)#yum install mysql-devel
(2)pip3 install mysqlclient
3、在执行数据库迁移脚本的时候,报错提示“django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xE6\\x8E\\xA5\\xE5\\x8F\\xA3...' for column 'name' at row 1")”,原因:字符集不是:utf-8
解决方案:
step1:进入mysql,执行:show variables like '%char%';将非utf-8字符集的全部更新。譬如:set character_set_server=utf8;
step2:查看数据库编码,执行:show create database databaseName;若数据库编码不是utf-8,则执行:alter database databaseName default character set utf8 collate utf8_general_ci;
4、远程用root用户连接不上,提示权限受限。
解决方案:
step1:进入本地mysql,查看用户信息:select host,user,plugin,authentication_string from mysql.user;(host=localhost表示限制本地使用,host=%表示允许远程使用)
step2:增加远程访问的root权限:CREATE USER 'root'@'localhost' IDENTIFIED BY 'answer1018';GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';FLUSH PRIVILEGES;
5、django服务启动后外网不可以访问,只能本地访问。
解决方案:
step1:进入项目的settings.py文件,将ALLOWED_HOSTS = ['']变成ALLOWED_HOSTS = ['*'],再次远程访问。我自己还是不能访问,继续寻找原因,猜测跟防火墙有关。
step2:虚拟机上执行:netstat IP:PORT ,访问成功;非虚拟机上执行:netstat IP:PORT 访问失败;虚拟机上查看防火墙状态发现是Active状态:systemctl status firewalld;关闭防火墙:systemctl status firewalld;非虚拟机再次telnet发现访问成功;非虚拟机上浏览器输入:IP:PORT访问django服务成功。
特别鸣谢:整个部署流程参照花菜的说明文档,感兴趣的移步:https://www.jianshu.com/p/e26ccc21ddf2