linux之python项目部署
一、安装linux(centos7,redhat)/xshell/xftp
二、部署项目
yum 源准备(可以在xshell或者linux虚拟机中)
1、更新一下yum:
sudo yum -y update
2、安装yum-utils 【一组扩展和补充yum的实用程序和插件】
sudo yum -y install yum-utils
3、安装CentOS开发工具 【用于允许您从源代码构建和编译软件】
sudo yum -y groupinstall development
安装Python3(可以在xshell或者linux虚拟机中)
1、安装EPEL:
sudo yum -y install epel-release
2、安装IUS软件源:
sudo yum -y installhttps://centos7.iuscommunity.org/ius-release.rpm
3、安装Python3.6:
sudo yum -y install python36u
4、安装pip3:
sudo yum -y install python36u-pip
5、检查一下安装情况,分别执行命令查看:
python3.6 -V
pip3.6 -V
在 /usr/lib/目录下可以看到Python3.6的文件夹
添加软链接
使用python3去使用Python3.6:
ln -s /usr/bin/python3.6 /usr/bin/python3
复制代码pip3.6同理:
ln -s /usr/bin/pip3.6 /usr/bin/pip3
我们可以看到,软链接是创建成功了的。
创建普通用户(wuchangjing,将项目部署到该用户下)
首先需确保当前登录用户有创建新用户的权限,建议输入“cat /etc/passwd |cut -f 1 -d :”查看当前已存在用户。
输入“useradd userfor2015”并回车,添加一个名为“userfor2015”的帐号,默认会添加一个同名的组,并在/home新建一个同名目录。
注意:此时帐号“userfor2015”处于锁定状态。
输入“passwd userfor2015”并回车修改用户“userfor2015”密码(Linux不显示密码),需输入相同密码两次。
输入“su - userfor2015”切换到用户(userfor2015)下即可使用。
可输入“useradd -D”查看此命令的默认设置
添加用户到sudoer列表(让普通用户可执行sudo命令)
Linux默认是没有将用户添加到sudoers列表中的,需要root手动将账户添加到sudoers列表中,才能让普通账户执行sudo命令。
root 账户键入visudo即可进入sudo配置,这个命令要比vim /etc/sudoers要好很多,因为使用visudo进行sudo配置,将会得到很多提示.
键入visudo后,在编辑器下键入 /root 寻找root,找到第三个root的那一行
root ALL=(ALL) ALL
按yyp键复制并在粘贴在下一行,在这一行的 root处输入cw将root替换为你所需要添加用户的账户名,比如Blinux,结果就是
root ALL=(ALL) ALL
blinux ALL=(ALL) ALL
如果你希望之后执行sudo命令时不需要输入密码,那么可以形如
root ALL=(ALL) ALL
blinux ALL=(ALL) NOPASSWD:ALL
输入:wq保存即可。
之后执行sudo命令时直接在命令前端键入sudo 空格即可,比如sudo shutdown -h now执行立即关机命令.
如果需要输入口令,则输入用户密码即可,而不是root密码.
注:如果用户不在sudoers列表中,将会得到以下提示.
Blinux is not in the sudoers file. This incident will be reported.、
将windows中的host文件中的内容添加到linux中
找到win中的host文件:C:\Windows\System32\drivers\etc\hosts
复制host文件中的ip地址
添加到linux中
解决ssh登录linux速度慢以及linux下载慢的问题(以centos7为例)
解决步骤:
先备份/etc/ssh/sshd_config,备份命令为:# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
1.# su空格(以root用户登录)
2.# vi /etc/ssh/sshd_config (编辑配置文件)
3.输入 / ,查找GSSAPIAuthentication 赋值为no
4.输入 /,查找UseDNS,赋值为 no(该项默认不启用的,要把前面的#删除掉)
5.最后输入 !wq保存文件并退出
6.重启 # systemctl restart sshd
将python项目拖动到 xftp中的home/wuchangjing/目录下
将前端项目代码拖动到xftp中的home/wuchangjing/目录下(删除其中存在的node_modules文件夹,否则解压安装nodejs会出现问题)
配置虚拟环境env
安装( 我的环境中既有python2,也有python3,这里使用python3的pip安装virtualenv)
# pip3 install virtualenv
新建python3的虚拟环境
# virtualenv --python=python3 env
激活虚拟环境(根据所在目录填写路径)
env存在与当前目录中:
# source env/bin/activate
env不在当前目录中:
# source/home/wuchangjing/multi-analysis/env/bin/activate
在env目录中:
# source ./bin/activate
ps:Linux中的bin/activate没有执行权限,需要使用source执行。
退出虚拟环境(deactivate直接在虚拟环境中执行即可,不需到bin目录下(bin目录下也没有这个文件))
# deactivate
下载项目的requments.txt文件中的依赖到env中
# cd env
# source ./bin/activate
安装依赖清单里的库
# pip3 install -r requirements.txt
列出当前虚拟环境所安装的依赖库
# pip3 list
截至目前应该可以运行python.py文件了。在激活虚拟环境后运行:python3 相对路径/multi-analysis.py,【ctrl + c 】可以杀死进程,停止运行当前程序
安装最新版gcc(为安装nodejs做准备)
查看gcc版本(centos自带的编译器版本太旧):
# gcc -v
进入放置gcc文件的目录:
# cd /usr/local/src
手动下载安装最新gcc(不能通过yum进行升级,https://ftp.gnu.org/gnu/gcc/gcc-9.2.0/):
# wgethttps://ftp.gnu.org/gnu/gcc/gcc-9.2.0/gcc-9.2.0.tar.gz
解压安装包:
# tar -xvf gcc-9.2.0.tar.gz
进入解压后的文件夹,下载供编译需求的依赖项:
# cd gcc-9.2.0
# ./contrib/download_prerequisites
建立文件夹存放编译文件:
# mkdir gcc-build-9.2.0
# cd gcc-build-9.2.0
生成Makefile文件(此过程非常久):
# make
安装:
# sudo make install
查找编译gcc时生成的最新动态库(最新库如图所指):
# find / -name "libstdc++.so*"
将找到的动态库libstdc++.so.6.0.27复制到/usr/lib64:
# cp /usr/local/src/gcc-9.2.0/gcc-build-9.2.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.27 /usr/lib64
切换工作目录至/usr/lib64,删除原来的软连接, 将默认库的软连接指向最新动态库:
# cd /usr/lib64
# rm -rf libstdc++.so.6
# ln -s libstdc++.so.6.0.27 libstdc++.so.6
重启服务器,验证版本:
# reboot
# gcc -v
安装nodejs
进入放置nodejs文件的目录:
# cd /usr/local/src
下载最新版nodejs(链接可以从官网https://npm.taobao.org/mirrors/node/v10.16.3/查找):
# wget https://npm.taobao.org/mirrors/node/v10.16.3/node-v10.16.3-linux-x64.tar.gz
解压安装包:
# tar -xvf node-v10.16.3-linux-x64.tar.xz
# mv node-v10.16.3-linux-x64 nodejs
进入解压后的文件夹,检查安装包是否有问题(出现版本号说明没有问题):
# cd nodejs
# ./node -v
建立软连接,变为全局:
ln -s /usr/local/src/nodejs/bin/npm /usr/local/bin/
ln -s /usr/local/src/nodejs/bin/node /usr/local/bin/
将/usr/local/src/nodejs/bin 这个目录放进环境变量中,这样在其他目录下执行node命令时,才能成功,否则找不到命令,执行su ,输入密码切换到root用户,执行命令:
# vi /etc/profile
搜索export PATH,输入/export PATH ,回车
按键盘【i】进入编辑模式
在export PATH的上一行添加如下内容:
PATH=$PATH:/usr/local/src/nodejs/bin
保存并强制退出输入:
:wq!回车
让环境变量立即生效:
# source /etc/profile
查看环境变量是否生效(看刚添加的的目录是否在环境变量中):
# echo $PATH
ps:执行source /etc/profile 只是让变量临时生效,重新开一个终端的话就失效了,要重启或者注销
查看安装的版本:
# node -v
v10.16.3
# npm -v
6.9.0
运行项目程序:
进入前端代码目录:
# cd /home/wuchangjing/multi-analysis-front
进入项目虚拟环境:
# source/home/wuchangjing/multi-analysis/env/bin/activate
执行前端代码以及python程序:
# npm run dev & python3/home/wuchangjing/multi-analysis/multi-analysis.py
浏览器访问:http://【linux的ip地址】:【前端代码端口】
执行node -v报错如下时:
[root@bogon ~]# node -v node: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
先加载所有安装包
# yum repolist
查看哪个安装包包含该库:
# yum provides libstdc++.so.6
执行结果:
[root@bogon ~]# yum whatprovides libstdc++.so.6
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base:mirrors.njupt.edu.cn
* extras:mirrors.163.com
* updates:mirrors.njupt.edu.cn
libstdc++-4.8.5-36.el7.i686 : GNU Standard C++ Library
Repo : base
Matched from:
Provides : libstdc++.so.6
可以看到安装包 libstdc++-4.8.5-36.el7.i686
安装libstdc++-4.8.5-36.el7.i686
# yum -y install libstdc++-4.8.5-28.el7.x86_64
报错:
...you can also use --setopt=protected_multilib=false to remove this checking, however this is almost never the correct thing to do as something else is very likely to go wrong (often causing much more problems).Protected multilib versions: libstdc++-4.8.5-36.el7.i686 !=libstdc++-4.8.5-28.el7.x86_64
解决办法:
1、升级安装包
# yum update libstdc++-4.8.5-28.el7.x86_64 -y
2、修复/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory问题
# yum install glibc.i686 -y
3、 修复error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
# yum install zlib.i686 -y
4、修复error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
先查找这个库存在于哪个安装包中
# yum whatprovides libstdc++.so.6
执行结果:
[root@bogon ~]# yum whatprovides libstdc++.so.6
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base:mirrors.njupt.edu.cn
* extras:mirrors.163.com
* updates:mirrors.njupt.edu.cn
libstdc++-4.8.5-36.el7.i686 : GNU Standard C++ Library
Repo : base
Matched from:
Provides : libstdc++.so.6
可以看到包 libstdc++-4.8.5-36.el7.i686
安装libstdc++-4.8.5-36.el7.i686
# yum install libstdc++-4.8.5-36.el7.i686 -y
到此就解决了缺少共享库到问题
遇到浏览器不能进行访问linux程序问题:
1.防火墙开着会导致不能连接,解决办法有两种:关闭防火墙或者开放所用到的端口。
针对方法一:
查看防火墙是否打开(root)
# sudo systemctl status firewalld
看到active(running)就意味着防火墙打开了
解决办法:
通过 # sudo systemctl stop firewalld 关闭防火墙(可行但不建议)。
通过 # sudo systemctl start firewalld 打开防火墙。
以上的打开和关闭防火墙都是临时的,重启虚拟机后又会恢复到默认的状态(我的默认状态是打开)。
通过 # sudo systemctl disable firewalld 命令,重启后防火墙还是处于关闭的状态。
通过 # sudo systemctl enable firewalld命令,重启后防火墙还是处于开启的状态。
针对方法二:
在执行项目的情况下:
# npm run dev & python3/home/wuchangjing/multi-analysis/multi-analysis.py
暂停并退出当前:
【ctrl+z】
将程序放入后台继续执行:
# bg
查询程序是否在后台中进行:
# ps -a
查询服务器tcp端口的使用情况:
# netstat -ntpl
通过上图可以看出当前项目所需要用到的tcp端口有22,5000,8000
查看端口的开放情况(yes表开启;no表未开启):
# firewall-cmd --query-port=端口号/tcp
对外开放指定端口:
firewall-cmd --add-port=端口号/tcp --permanent
重载入添加的端口:
firewall-cmd --reload
查询指定端口是否开启成功:
firewall-cmd --query-port=端口号/tcp