### 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放回去
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/pip32.配置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)放到前面去
#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