centos6部署django+mysql+vue
2021-02-28 本文已影响0人
望月成三人
CentOS6使用yum安装服务报错
Loaded plugins: fastestmirror, security
Determining fastest mirrors
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/repo/arch combination/
removing mirrorlist with no valid mirrors: /var/cache/yum/x86_64/6/base/mirrorlist.txt
Error: Cannot find a valid baseurl for repo: base
- 因为centos6已停止支持,所有centos的软件仓库也已经不能使用了
解决方法:
sed -i.old -e 's/^mirrorlist/#mirrorlist/g' -e 's/^#baseurl=http:\/\/mirror.centos.org\/centos\/$releasever\//baseurl=http:\/\/vault.centos.org\/centos\/6\//g' /etc/yum.repos.d/CentOS-Base.repo
yum clean all
安装xz
- 解压文件的时候需要用到此依赖
yum install xz
安装python3
- 因为我们要安装python3版本,所以python要指向python3才行,目前还没有安装python3,先备份,备份之前先安装相关包,用于下载编译python3
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
- 这几个包必须得安装,否则安装python3时可能会出现各种错误.
运行下面两个命令,进行备份
cd /usr/bin
mv python python.bak
- 安装
wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz
tar -xvJf Python-3.6.3.tar.xz
# 当然,如果用其他格式的,比如
# wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
# tar zxvf ....python
- 编译
cd Python3.6.3
./configure prefix=/usr/local/python3
make && make install
- 实现python3和python2的共存
rm /usr/bin/python
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
-
这时候在执行命令python3 -v和python2 -V,应该就能看到python3和python2的版本了。
-
因为执行yum需要python2版本,所以我们还要修改yum的配置,执行:
sudo vi /usr/bin/yum
#将第一行指定的python版本改为python2
#!/usr/bin/python 改为 #!/usr/bin/python2
- 安装pip3
wget --no-check-certificate https://files.pythonhosted.org/packages/b7/2d/ad02de84a4c9fd3b1958dc9fb72764de1aa2605a9d7e943837be6ad82337/pip-21.0.1.tar.gz
tar -zxvf pip-xxx.tar.gz
cd pip-xxx
python3 setup.py build
python3 setup.py install
ln /usr/local/python3/bin/pip3 /usr/bin/pip3
- 测试pip是否能安装
pip3 install PyMySQL
pip3 django
安装myql
-
查询下自己的centos系统
cat /etc/issue
,我的是6.9 -
去官网查看最新安装包
https://dev.mysql.com/downloads/repo/yum/ -
下载MySQL源安装包
wget https://dev.mysql.com/get/mysql57-community-release-el6-9.noarch.rpm
- 安装MySql源
rpm -ivh mysql57-community-release-el6-9.noarch.rpm
- 查看一下安装效果
[root@racknerd-4dbd89 home]# yum repolist enabled | grep mysql.
mysql-connectors-community MySQL Connectors Community 185
mysql-tools-community MySQL Tools Community 123
mysql57-community MySQL 5.7 Community Server 484
[root@racknerd-4dbd89 home]#
- 安装MySQL服务器
yum install mysql-community-server
- 开启mysql服务
service mysqld start
- mysql安装成功后创建的超级用户'root'@'localhost'的密码会被存储在/var/log/mysqld.log,可以使用如下命令查看密码
grep 'temporary password' /var/log/mysqld.log
- 输入
mysql -u root -p
,输入得到的密码,发现无法登陆,如下进行重置设置: -
vi /etc/my.cnf
(注:windows下修改的是my.ini) 在[mysqld]后面任意一行添加skip-grant-tables
,重启服务service mysqld restart
- 再次输入
mysql -u root -p
,就能免密登陆 - 再次修改密码:
update mysql.user set authentication_string=password('~11111) where user='root';
flush privileges;
- 然后退出mysql,删除刚刚加的skip-grant-tables,重启mysql服务,重新用密码尝试登陆成功
- 远程连接设置,把在所有数据库的所有表的所有权限赋值给位于所有IP地址的root用户。
show databases;
use mysql;
show tables;
select Host, User,authentication_string9 from user;
update user set Host='%' where User='root';
# 说明: % 代表任意的客户端,可替换成具体IP地址。
最后刷新一下:flush privileges;
- 设置防火墙或者直接关闭
vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
- 重启防火墙以便改动生效:(或者直接重启系统)
/etc/init.d/iptables restart
- 用HeidiSQL远程连接mysql成功
下载配置项目
- 安装git
yum install -y git
- 克隆服务端项目
git clone https://github.com/Louis-me/vue_server_api
- 把
vue_server_api
重命名为mysite
(这个是历史原因造成的,当初新建的项目就是mysite)mv vue_server_api/ mysite/
安装项目依赖文件
- 如果项目没有依赖文件,可以先导出
pip install pipreqs
pipreqs --use-local --encoding=utf8 --force .
pip install -r requirements.txt
- 需要装一个跨域的插件
pip install django-cors-headers
- 服务器新建一个数据库
mysql -uroot -p
create database if not exists mydb default character set utf8 collate utf8_general_ci;
- 生成数据库结构
python3 manage.py migrate
- 在服务器上运行
python3 manage.py runserver 0.0.0.0:8000
- 可能出现如下错误:
ile "/usr/local/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 67, in check_sqlite_version
raise ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' % Database.sqlite_version)
django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).
- django安装在哪些路径下,在我的系统上,需要找到/…/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py这个脚本,django判断当前使用的sqlite版本的代码就在这里,找到以下代码块,注释掉那一行代码并更改Database.sqlite_version_info < (3, 7, 17)::
def check_sqlite_version():
if Database.sqlite_version_info < (3, 8, 3):
raise ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' % Database.sqlite_version)
def check_sqlite_version():
if Database.sqlite_version_info < (3, 7, 17):
raise ImproperlyConfigured('SQLite 3.7.17 or later is required (found %s).' % Database.sqlite_version)
-
再次执行就不会报错
-
开放8000端口
vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8000 -j ACCEPT
# 重启
service iptables restart
- windows端用telnet ip 8000端口正常访问
- 编写和启动脚本start.sh,启动sh start.sh
# 后台启动django服务,输出日志到日志文件中,内容为标准输出和标准错误
MYDATE=`date +%Y%m%d`
ALL_LOGFILE=/data/wwwroot/TestPaltForm/log/log_$MYDATE
nohup python3 manage.py runserver 0.0.0.0:8000 > ${ALL_LOGFILE} 2>&1 &
- 查看运行端口和结束进程
netstat -lnp | grep "8000"
kill 5014 #查找到进程后,再用结束进程
部署vue
node pm2 环境配置
- 配置node
sudo wget https://nodejs.org/dist/latest-v8.x/node-v8.17.0-linux-x64.tar.xz
//解压到当前目录
sudo tar -xvf node-v8.17.0.tar.xz
// 执行是否安装成功
cd node-v8.17.0/bin/ && ls #
# 有node 和 npm
- 测试发现错误,需要安装依赖错误依赖
[root@racknerd-4dbd89 bin]# ./node
-bash: .... libstdc++.so.6
# 执行安装即可
yum whatprovides libstdc++.so.6
- 现在 node 和 npm 还不能全局使用,做个链接
ln -s /home/node-v8.17.0-linux-x64/bin/node /usr/local/bin/node
ln -s /home/node-v8.17.0-linux-x64/bin/np /usr/local/bin/node
运行node -v,npm -v查看版本,正确则node npm环境无误
安装全局pm2
npm install pm2 -g
# 创建软连接
ln -s /home/node-v8.17.0-linux-x64/bin/pm2 /usr/local/bin/pm2
vue项目配置
打包
- vue项目中使用
npm run build
命令进行打包,生成dist目录,这个文件夹就是我们要部署上线的项目。
image.png
编写node启动脚本
- 主要做的事情是读取目录下的单页面文件(index.js),监听8002端口。
// app.js
const fs = require('fs');
const path = require('path');
const express = require('express');
const app = express();
app.use(express.static(path.resolve(__dirname, './dist')))
app.get('*', function(req, res) {
const html = fs.readFileSync(path.resolve(__dirname, './dist/index.html'), 'utf-8')
res.send(html)
})
app.listen(8002);
生成package.json文件
- 由于app.js启动脚本使用了express框架,我们可以生成一个package.json文件,将express依赖添加进去。
// package.json
{
"name": "back_manage",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.15.3"
}
}
文件上传
-
服务器上新建一个文件夹,将vue项目打包文件、app.js启动脚本、package.json配置文件,上传至该文件夹下,注意:三个文件是同级的。
image.png - 在该文件夹下安装依赖
npm install
服务启动
登陆到你的服务端,cd到项目文件夹,使用pm2 start app.js
就成功启动服务了
- 放开防火墙8002端口后,则在外网能进行访问了
vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8002 -j ACCEPT
# 重启
service iptables restart
image.png