centos安装python学习环境和部署web网站

### linux下安装软件的方式

yum安装或者直接下载源码编译安装都行。

yum和源码编译安装的区别?
1.路径区别-yum安装的软件是他自定义的,源码安装的软件./configure --preifx=软件安装的绝对路径
2.yum仓库的软件,版本可能比较低,而源码编译安装,版本可控
3.编译安装的软件,支持第三方功能扩展./configure 这里可以加上很多参数,定制功能

修改yum的镜像源并下载安装Nginx

1.修改yum镜像源

原来的镜像源的配置文件在etc/yum.repos.d/下,由于这个外国网站访问比较慢,所以就需要将这个给替换掉。

  • 备份原来的配置

新建一个文件夹,把原来的两个给移动进去

[root@zhangda yum.repos.d]# mkdir 备份原来的镜像元
[root@zhangda yum.repos.d]# mv CentOS-Base.repo 备份原来的镜像元/
[root@zhangda yum.repos.d]# mv epel.repo 备份原来的镜像元/           #这个文件树莓派好像没有
  • 下载新的配置 到这个文件夹下

一共是两个文件,一个是通用的,一个是第三方的

[root@zhangda yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@zhangda yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo


  • 清除原来的yum缓存
[root@zhangda yum.repos.d]# yum clean all
  • 生成新的缓存
[root@zhangda yum.repos.d]# yum makecache
2.下载安装Nginx

这个只是用于对yum的测试,Nginx的安装需要编译的方法安装,下文有方法

1.yum install nginx  -y     默认一路都是yes
2.直接输入nginx启动,启动后可以访问了看看,如果能看到首页说明成功了

如果nginx启动了没有成功,nginx故障检查

注:阿里云需要去开一下80端口

通过yum安装的软件 重启打开和关闭的方法

系统服务管理命令,只有通过yum安装的软件,默认才能使用这个命令管理
格式:systemctl start/stop/restart 服务名

systemctl  start/stop/restart  mariadb 
systemctl  start/stop/restart  redis
systemctl  start/stop/restart  nginx

关闭防火墙和失能其开机启动

systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld  #查看状态 inactive(dead)说明关闭了

安装python3和Django

1.安装python3

用编译的方式安装python3

  • 下载python3的源码
cd /opt    转到这个目录,等一下就把东西下载到这里
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz    下载源码

可能下载源码的时候会出现连接不上的问题,就多执行几次这个命令,可能是网速慢导致的

  • 解决环境依赖 这个必须搞,都是前辈踩出的坑

    yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
    
    
    
    

    这一步太重要了,没有这一步暂时不报错,但是之后编译出来的python就会有错。

    如果真的是这一步忘了,以后就只能再install 然后重新编译了。

  • 解压源码包

tar -xvf  Python-3.6.2.tgz


  • 切换源码包目录
cd Python-3.6.2 


  • 编译且安装

1.释放编译文件makefile,这个是用来编译且安装的

./configure --prefix=/opt/python36/


注:–prefix= 这个参数是用来指定位置,但是这一步执行完之后opt里还没有python36的文件夹,这一步就是释放出makefile这个文件。

ls2.编译python3

make


​ 直接就是make,make会调用gc工具

这一步make会出现下图所示的问题,很多资料遇到了也没解决,不知道以后有没有问题。解决方法参考:https://www.jianshu.com/p/bafe87a15f98 先把 /usr/bin/phthon 移动到一个地方保存 然后继续 make 和 install 结束后再把保存的python放回去

image-20200206232736693

3.编译且安装 (只有在这一步,才会生成/opt/python36)

make install 


4.配置环境变量

#linux有一个全局个人配置文件/etc/profile ,编辑这个文件,在最底行写入PATH

打开这个文件
vim /etc/profile 

在最后一行写入(这个得写在开头)		PATH=/opt/python36/bin:usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
		
读一下这个/etc/profile 使得生效
source /etc/profile



到这儿就安装完成了,下面写的是软连接的方法(一般不这么玩),一般使用全局变量,这样那个文件夹里的pip啥的都好用

配置python3.6的环境变量
1.配置软连接(注意,这个和PATH配置,二选一)
ln -s 目标文件 软连接文件
ln -s /opt/python36/bin/python3.6 /usr/bin/python3
此时还没有pip
ln -s /opt/python36/bin/pip3 /usr/bin/pip3

		2.配置path环境变量 (二选一即可)
		echo $PATH查看环境变量
		/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
		#这个变量赋值操作,只是临时生效,需要写入到文件,永久生效
		PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/python36/bin
		
  #linux有一个全局个人配置文件
  编辑这个文件,在最底行写入PATH
  vim /etc/profile 
  写入
		PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/python36/bin
		保存退出
		
		读一下这个/etc/profile 使得生效
		source /etc/profile


2.安装Django

如果安装的是最新版本的Django可能会出现sqlite版本低的问题,安装Django2.x版本可以避免这个问题参考方案 可以2.1.4版本的

pip3 install django==2.1.4 -i https://pypi.douban.com/simple/


virtualevn的使用

1安装virtualevn

有的时候项目来了需要Django1.1,有的时候又需要Django2.0,这样在一个python解释器下就不能同时用这个两个版本的了,这个时候virtualevn就派上用场了。virtual相当于重新开了一块地方,把原来的解释器和pip都复制到新地方,然后干干净净的安装,和原来的不冲突。

1.通过物理机下载virtualevn工具(安装16.7.9版本的,高版本的参数不太对)

pip3.6 install  virtualenv==16.7.9 -i https://pypi.tuna.tsinghua.edu.cn/simple


2.创建虚拟环境

virtualenv --no-site-packages --python=python3   ZDenv1


–no-site-packages 这是构建干净,隔离的模块的参数
–python=python3 这个参数是指定虚拟环境以哪一个物理解释器为基础的

3.进入虚拟目录,激活虚拟环境

source myenv/s15venv1/bin/activate


4.激活后使用which pip 命令 可以发现其来自于 刚才virtual的那个环境下。这说明成功了

此时pip list会发现是干净的环境。pip instal 安装的所有东西都是在这个里面。

5.退出虚拟环境的命令

deactivate


2.virtualenvwrapper管理工具来简化virtualen的使用

主要是因为virtualen有点复杂,各种目录来回换,麻烦的不行,所以可以用这个工具来简化这些操作

1.安装virtualenvwrapper管理工具

pip3 install virtualenvwrapper -i https://pypi.tuna.tsinghua.edu.cn/simple


2.将PATH变量的py3.6解释器(/opt/python36/bin)放到前面去

image-20200207202235114

#echo看一下path  结果发现不是再最前面,那就手动调整一下
echo $PATH
PATH=/opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin  #重新赋值改写一下


3.修改环境变量,每次开机就加载这个virtualenvwrapper工具

vim ~/.bashrc #vim编辑用户家目录下的.bashrc文件,这个文件是用户在登录的时候,就读取这个文件
#export 是读取shell命令的作用
#这些变量根据你自己的绝对路径环境修改

export WORKON_HOME=~/Envs
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'
export VIRTUALENVWRAPPER_PYTHON=/opt/python36/bin/python3.6
source /opt/python36/bin/virtualenvwrapper.sh



4.重新登录ssh会话,使得这个配置生效

logout 退出连接

ssh 12.13.0.0 登录对应的地址

5.使用工具提供的命令

mkvirtualenv  虚拟环境名   #自动下载虚拟环境,且激活虚拟环境
workon  虚拟环境名   #激活虚拟环境
deactivate  退出虚拟环境 
rmvirtualenv	删除虚拟环境 
cdvirtualenv  进入当前已激活的虚拟环境所在的目录
cdsitepackages 进入当前激活的虚拟环境的,python包的目录


安装mysql

mysql和MariaDB,ping to ping。

安装

用yum的方式安装mysql有两种,一种是用阿里云提供的,一种是用mysql官方提供的yum,两者的区别是阿里云提供的yum相比于官方的yum版本可能低一点,优点是国内网站,下载安装的速度快。

  • 法1:用阿里云的方式下载安装mysql

    yum install mariadb-server  mariadb -y  
    
    
    
  • 法2:官方提供的yum下载

    1.配置官方的mariadb的yum源,手动创建 mariadb.repo仓库文件 (此步重要!!!!!!!!!!!)
    touch /etc/yum.repos.d/mariadb.repo
    然后写入如下内容

    	[mariadb]
    	name = MariaDB
    	baseurl = http://yum.mariadb.org/10.1/centos7-amd64
    	gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    	gpgcheck=1
    
    
    

    2.配置完成后通过yum安装

    yum install MariaDB-server MariaDB-client -y
    
    
    

    如果法2下载速度太慢,想使用法1请删除 mariadb.repo,(只是为了使用阿里云的yum源中的mariadb)

    mariadb.reporm -rf /etc/yum.repos.d/Mariadb.repo  #删除 mariadb.repo 
    yum clean all    #然后清空yum 缓存
    
    
    
启动

安装完成后,启动mariadb服务端

systemctl  start/stop/restart/status  mariadb    
systemctl enable mariadb   #开机自动启动mariadb


初始化
mysql_secure_installation  #这条命令可以初始化mysql,删除匿名用户,设置root密码等等...
#(第一个enter current ... 直接安装enter就行,因为当前没有密码)   设置密码  删除匿名Y  不允许远程登录N(这个得选择N) 后面的删除test还有权限表都选择Y


登录
mysql -uroot -p


设置中文支持

vi /etc/my.cnf

1.在[mysqld]中添加参数,使得mariadb服务端支持中文

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci


2.重启mariadb服务,读取my.cnf新配置

systemctl restart mariadb 


3.登录数据库,查看字符编码 交互中输入 \s 查看编码

mysql -uroot -p 


到这一步mysql的安装就结束了

mysql的使用

各种协同略去一万个字 草泥马…

安装redis

下载+编译

调到opt的目录下,

下载

wget http://download.redis.io/releases/redis-4.0.10.tar.gz


解压缩

tar -zxf redis-4.0.10.tar.gz 


编译且安装,这个直接有makefile 所以不需要./configure --prefix这一步

make && make install 


修改配置参数

修改的原因是让远程可以链接+修改默认的端口,如果不改端口把端口暴露在外面 会很不安全

vim /opt/redis-4.0.10/redis.conf 
1.更改bind参数,让redis可以远程访问
	bind 0.0.0.0
2.更改redis的默认端口
	port 6380
3.使用redis的密码进行登录
	requirepass 登录redis的密码
指定配置文件启动
redis-server redis.conf 


至此redis安装完成

通过新的端口和密码登录redis
方法1
redis-cli -p 6380
登录后收到输入auth和密码 
auth 密码


方法2
redis-cli -p 6380  -a  redis的密码  (这个不太安全)


redis发布订阅

redis的发布者、订阅者

订阅者订阅哪个频道,发布者可以发布,这样订阅者就能收到信息了。比如三个客户端,其中一个客户度端作为发布者,他发的消息可以让另外两个订阅者收到。

1.发布者
	publish  频道  消息		给频道发消息
2.订阅者
	SUBSCRIBE  频道     	订阅频道 
	PSUBSCRIBE 频道*  		支持模糊匹配的订阅
3.频道
	channel  频道名 自定义


持久化

持久化有两种方法一种是RDB一种是aof

  • RDB的原理就是将内存里的数据定时,存储在磁盘里
  • aof的原理就是将每一步redis操作存起来,下次打开时重头到位操作一遍
RDB

在配置文件中添加参数,开启rdb功能

redis.conf写入(redis.conf可以是新建的一个文件,然后redis-server …redis.conf用这个文件夹里的参数打开就行)

定时存也可以手动存,在关闭服务之前手动存一下的命令时redis.save

port 6379  #端口
daemonize yes  #远程登录
logfile /data/6379/redis.log  #日志
dir /data/6379         #保存在磁盘哪里
dbfilename   s15.rdb   #保存的名称
save 900 1             #rdb机制 每900秒 有1个修>改记录
save 300 10            #每300秒        10个修改
save 60  10000         #每60秒内        10000修>改记录


redis-server redis.conf 打开redis服务

AOF

开启aof功能,在redis.conf中添加参数

port 6379
daemonize yes
logfile /data/6379/redis.log
dir /data/6379
appendonly yes
appendfsync everysec


启动redis服务端,指定aof功能,测试持久化数据

redis不重启的情况下,从RDB切换到AOF

实验步骤:
1.准备rdb的redis服务端
	redis-server   s15-redis.conf (注明这是在rdb持久化模式下)

2.切换rdb到aof
redis-cli  登录redis,然后通过命令,激活aof持久化
127.0.0.1:6379> CONFIG set appendonly yes#用命令激活aof持久化(临时生效,注意写入到配置文件)
127.0.0.1:6379> CONFIG SET save "" 			#关闭rdb持久化

3.将aof操作,写入到配置文件,永久生效,下次重启后生效
    port 6379
    daemonize yes 
    logfile /data/6379/redis.log
    dir /data/6379   

    #dbfilename   s15.rdb
    #save 900 1  
    #save 300 10 
    #save 60  10000 
    appendonly yes
    appendfsync everysec
	
4.测试aof数据持久化 ,杀掉redis,重新启动
kill 
redis-server s15-redis.conf 

5.写入数据,检查aof文件


安装Nginx

安装依赖包(前任走过的坑的总结)

yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y


下载源码

wget -c https://nginx.org/download/nginx-1.12.0.tar.gz


解压缩,编译,安装

tar -zxvf nginx-1.12.0.tar.gz   #解压缩   
./configure --prefix=/opt/nginx112/   #产生make文件
make && make install   #编译安装


进入nginx的工作目录

cd /opt/ngin112/


conf  配置文件目录
html  网页根目录,你的index.html就放在这里,然后通过域名访问  pythonav.cn/index.html     html/index.html 
logs	日志
sbin	存放nginx可执行命令的


定制自己的nginx网站(可以先不修改,因为有默认的页面)

修改/opt/nginx112/html/index.html  这是nginx网页根文件,清空内容写入自己的html标签


启动nginx服务器

/opt/nginx112/sbin/nginx    直接回车执行 


检查nginx服务端口

ps -ef|grep nginx 


开启后,输入网址访问


项目部署

传输项目代码到服务器上

可以直接wget从网上下载,或者使用xftp从windows上传输过去。

前端的restful接口需要改变一下,改成和部署的服务器对应的,可以改好了发,也可以到linux里面再改

部署前端

前端框架为vue,需要node进行打包。

1.下载node包,解压node包,将node包里的npm和node命令添加到环境变量PATH里。

wget https://nodejs.org/download/release/v8.6.0/node-v8.6.0-linux-x64.tar.gz#下载node包
[root@da 软件安装包] tar -zxvf node-v8.6.0-linux-x64.tar.gz  #解压安装包

#找到解压后文件的bin目录
/opt/node-v8.6.0-linux-x64/bin

#将bin目录添加到全局变量里,方便以后调用npm和node
vim /etc/profile  #打开这个文件
#在最后一行添加bin目录
/opt/python36/bin:/opt/node-v8.6.0-linux-x64/bin

#激活一下
source /etc/profile

#测试一下有没有成功 如果能够看到版本说明成功了
node -v
npm -v


2.安装vue项目所需要的包

先跳转到前端项目的目录下(有build和config的目录下)

npm install   #生成一个node_module的文件夹 那个文件夹传到linux之前是给删除的
npm run build #编译,会生成一个dist文件,这个文件就等着Nginx来调用


部署后端

1.安装后端的依赖

#导出某个环境所有后端的依赖
pip3 freeze >  requirements.txt 
#根据某个依赖的.txt,给服务器安装依赖
pip3 install -r  requirements.txt


2.uwsgi的使用方法

2.1通过uwsgi启动一个python web文件

uwsgi --http :8000 --wsgi-file   s15testuwsgi.py
--http 指定http协议 
--wsgi-file  指定一个python文件


2.2通过uwsgi启动django项目,并且支持热加载项目,不重启项目,自动生效 新的 后端代码

uwsgi --http  :8000 --module s15drf.wsgi    --py-autoreload=1
--module 指定找到django项目的wsgi.py文件


2.3 使用uwsgi的配置文件,启动项目

创建一个uwsgi.ini配置文件,写入参数信息

touch uwsgi.ini #建一个文件,写入下面的内容									
[uwsgi]
# Django-related settings
# the base directory (full path)
#指定项目的绝对路径的第一层路径!!!!!!
chdir           = /opt/codeSourse/luffy_boy/

# Django's wsgi file
#  指定项目的 wsgi.py文件!!!!!!!!!!!!
#  写入相对路径即可,这个参数是以  chdir参数为相对路径
#查看绝对路径 cdvirtualenv  然后pwd
#这边的luffy_boy不是上面指定的那个,是那个文件夹里的
module          = luffy_boy.wsgi

# the virtualenv (full path)
# 写入虚拟环境解释器的 绝对路径!!!!!!
home            = /root/Envs/s15vuedrf
# process-related settings
# master
master          = true
# maximum number of worker processes
#指定uwsgi启动的进程个数				
processes       = 1

#这个参数及其重要!!!!!!
# the socket (use the full path to be safe
#socket指的是,uwsgi启动一个socket连接,当你使用nginx+uwsgi的时候,使用socket参数

#如果不是使用Nginx那就得把这个注释掉  否则会被错误支配很久
socket          = 0.0.0.0:8000

#这个参数是uwsgi启动一个http连接,当你不用nginx只用uwsgi的时候,使用这个参数	
#http  =  0.0.0.0:8000

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true


使用uwsgi配置文件启动项目

uwsgi --ini  uwsgi.ini 


注意点(血泪史)

0.假如不是用nginx的配置用http 用nginx才用socket 测试的时候应http
1.阿里云服务器端口默认是关闭的,去安全组里打开对应的
2.用postman测试的时候http://101.200.*.*:**/*/category/  最后的/不能忘记
3.关闭防火墙 关闭selinux


如果测试能访问了,说明启动Django成功了。用nginx的时候需要将http改成socket,关闭重新开。

nginx连接前后端

配置nginx的配置文件 /root/Envs/s15luffycity

#第一个server虚拟主机是为了找到vue的dist文件, 找到路飞的index.html
server {
        listen       80;
        server_name  101.200.219.16;		
		#当请求来自于 101.200.219.16/的时候,直接进入以下location,然后找到vue的dist/index.html 
        location / {
            root   /opt/s15vuedrf/07-luffy_project_01/dist;
            index  index.html;
        }	
	}
	
#由于vue发送的接口数据地址是 192.168.13.79:8000  我们还得再准备一个入口server
server {
	listen 8000;
	server_name  192.168.13.79;
	#当接收到接口数据时,请求url是 192.168.13.79:8000 就进入如下location
	location /  {
		#这里是nginx将请求转发给  uwsgi启动的 9000端口
		uwsgi_pass  192.168.13.79:9000;
		# include  就是一个“引入的作用”,就是将外部一个文件的参数,导入到当前的nginx.conf中生效
		include /opt/nginx112/conf/uwsgi_params;
	}
}


启动nginx

./sbin/nginx  #直接启动 



修改linux时间显示的方式

默认是英文不符合习惯

#打开这个文件
vi  ~/.bash_profile
#在下面添加一行
export TIME_STYLE='+%Y/%m/%d %H:%M:%S'
#出来激活一下
source ~/.bash_profile


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值