linux 部署项目

1.编译安装python3的步骤

编译安装python3的步骤

1.很重要,必须执行此操作,安装好编译环境,c语言也是编译后运行,需要gcc编译器golang,对代码先编译,再运行,python是直接运行
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

2.获取python的源代码,下载且安装,下载源代码包的形式,自由选择

在Linux下安装python解释器
安装在opt下
wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz

3.下载完源代码包之后,进行解压缩
tar -zxvf Python-3.6.9.tgz

4.解压缩完毕之后,生成了python369的源代码目录,进入源代码目录准备开始编译
cd Python-3.6.9

5.此时准备编译三部曲 ,编译的第一曲:指定python3的安装路径,以及对系统的开发环境监测,使用如下命令
命令解释
configure 是一个脚本文件,用于告诉gcc编译器,python3即将安装到哪里,以及对基础的开发环境检查,检查openssl,检查sqllite,等等

#编译第一曲,结束后,主要是生成makefile,用于编译的
[root@s25linux Python-3.6.9]# ./configure --prefix=/opt/python369/
./ configure – prefix=要安装的绝对路径

#编译第二曲:开始进行软件编译
直接输入 make指令即可

#编译第三曲:编译安装,生成python3的可执行程序,也就是生成/opt/python369/
make install

编译的第二曲,和第三曲,可以简写成 make && make install #代表make成功之后,继续make install

6.等待出现如下结果,表示python3编译安装结束了
Successfully installed pip-18.1 setuptools-40.6.2

7.此时可以去检查python3的可执行程序目录
[root@s25linux bin]# pwd
/opt/python369/bin

8.配置PATH环境变量 ,永久修改PATH,添加Python3的bin目录放入PATH开头位置
vim /etc/profile
写入如下内容
PATH="/opt/python369/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:"

9.手动读取/etc/profile,加载文件中的所有变量
source /etc/profile

10.检查python3的目录,以及pip3的绝对路径
[root@s25linux bin]# which pip3
/opt/python369/bin/pip3

[root@s25linux bin]# which python3
/opt/python369/bin/python3

2.此时python3环境变量配置成功,然后下载虚拟环境

避免以后环境冲突

1.下载虚拟环境工具
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv

2.通过命令行创建虚拟环境,虚拟环境放在相关项目里

#  --python=python3  指定venv虚拟解释器,以哪个解释器为本体
# 这个命令如果你用相对路径,就得注意你在哪敲打的此命令,一般在在相关项目里创建虚拟环境
[root@s25linux opt]# virtualenv --python=python  venv1

3.创建好venv1之后,需要激活方可使用,这个激活其实就是在修改PATH而已
[root@s25linux bin]# source /opt/venv1/bin/activate
(venv1) [root@s25linux bin]#

4.明确虚拟环境下venv1的解释器是干净隔离的
(venv1) [root@s25linux bin]# which python3
/opt/venv1/bin/python3
(venv1) [root@s25linux bin]# which pip3
/opt/venv1/bin/pip3
(venv1) [root@s25linux bin]# pip3 list
Package Version


pip 20.0.2
setuptools 45.2.0
wheel 0.34.2

5.在venv1中安装django1
(venv1) [root@s25linux opt]# pip3 install -i https://pypi.douban.com/simple django==1.11.9
(venv1) [root@s25linux opt]# django-admin startproject venv1_dj119

8.deactivate #直接执行此命令,退出虚拟环境,系统会自动删除venv的PATH,也就表示退出了

3.部署前后端不分离的项目

我这里拿crm为实例

1.准备好crm代码,上传至linux服务器中
lrzsz
xftp
scp

上传至服务器的代码是tf_crm.zip ,zip用unzip命令解压缩
unzip crm.zip

2.新建一个虚拟环境,用于运行crm
在项目下,生成虚拟环境,便于管理此文件夹
[root@localhost crm]# virtualenv --python=python3 venv_crm 创建
[root@localhost opt]# source /opt/venv_crm/bin/activate 激活使用

3.立即解决crm运行所需的模块依赖
在Windows中cmd输入此命令,导出为txt文件
pip3 freeze > requirements.txt
pip3 install -i https://pypi.douban.com/simple -r requirements.txt
上传至linux服务器
在venv_crm虚拟环境中,安装此文件即可

如果没有此模块依赖文件,那么就手动解决吧,。。。。
此时你要注意
python3 manage.py runserver 这个命令,并不是让你启动django项目的!!!
因为此命令,调用的是python 内置的wsgiref单机socket模块,性能低下,单进程单线程。。。

#手动安装所有模块,这是我的项目缺少的
pip3 install -i https://pypi.douban.com/simple django==1.11.25
(venv_crm) [root@s25localhost crm]# pip3 install -i https://pypi.douban.com/simple pymysql
中间还有一个时区错误,把配置里的时区注掉就行
(venv_crm) [root@s25localhost crm]# pip3 install -i https://pypi.douban.com/simple django-multiselectfield

4.缺少mysql,因此需要安装mariadb,且启动
(venv_crm) [root@localhost crm]# yum install mariadb-server mariadb -y

5.启动mariadb数据库
(venv_crm) [root@localhost crm]# systemctl start mariadb

6.注意可能需要修改django的settings.py有关数据库连接的账密信息等

7.还要注意,由于数据库是空的,还得进行数据库表的导入,导出本地数据库表,导出
#参数–all-databases能够导出所有的数据库,表,也可以指定某一个数据库。表导出

mysqldump -uroot -p --all-databases > alldb.sql
此命令系统命令,不要再MySQL导出

我的导出:会导出到Windows/system32文件下 用户名 密码 库名 导出的表
C:\Windows\system32> mysqldump -uroot -p tf_crm > tf_crm.spl

8.发送此alldb.sql文件,给linux机器,再进行数据导入
就是将第七步的SQL文件,通过lrzsz、scp、xftp等方式,发送此文件,给linux
mysql -uroot -p < /opt/alldb.sql

9.此时再次尝试启动crm项目
(venv_crm) [root@s25linux tf_crm]# python3 manage.py runserver 0.0.0.0:8000

10.deactivate #直接执行此命令,退出虚拟环境,系统会自动删除venv的PATH,也就表示退出了

4.uwsgi启动python web

多进程形式启动tf_crm
1.安装uwsgi工具,根据不同的项目,安装到不同的相关项目
pip3 install -i https://pypi.douban.com/simple uwsgi

2.编写uwsgi.ini配置文件,以多进程形式启动tf_crm,也是在相关虚拟环境里安装好后,在相关项目内创建
touch uwsgi.ini #手动创建此uwsgi的配置文件,写入如下的内容参数,去启动crm

# 写入如下的功能性的参数配置,用于启动项目
# 这些部署的流程,是国外的uwsgi官网,给与的用法,我们照着用即可
# 注意要根据你自己的目录,修改如下的参数

[uwsgi]
# Django-related settings
# the base directory (full path)
#  填写crm项目的第一层绝对路径
chdir           = /opt/crm

# Django's wsgi file
# 填写crm项目第二层的相对路径,找到第二层目录下的python的自动生成wsgi.py文件
# 这里填写的不是路径,是以上一个参数为相对,找到第二层项目目录下的wsgi.py文件
module          = crm.wsgi
# the virtualenv (full path)
# 填写虚拟环境解释器的第一层工作目录 
home            = /opt/crm/venv_crm
# process-related settings
# master 主进程
master          = true
# maximum number of worker processes
# 代表定义uwsgi运行的多进程数量,官网给出的优化建议是 2*cpu核数+1 ,单核的cpu填写几?
# 如果是单进程,十万个请求,都丢给一个进程去处理,top后 输入1
# 3个工作进程,十万个请求,就分给了3个进程去分摊处理
processes       = 9

# the socket (use the full path to be safe
# 这里的socket参数,是用于和nginx结合部署的unix-socket参数,这里临时先暂停使用
# socket          = 0.0.0.0:8000

#  线上不会用http参数,因为对后端是不安全的,使用socket参数是安全的连接,用nginx反向代理去访问
# 后端程序是运行在防火墙内部,外网是无法直接访问的
# 临时使用http参数,便于我们用浏览器调试访问
http =  0.0.0.0:8000

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

3.此时可以用命令,基于uwsgi协议的一个高性能web后端启动了
uwsgi --ini ./uwsgi.ini #指定配置文件启动后端

5.supervisor工具

可以通过supervisor一键启动这四个进程,进行批量管理,批量启停 ,很好用

1.使用yum命令即可直接安装
[root@s25linux ~]# yum install supervisor -y

2.生成supervisor的配置文件,写入生成文件
[root@s25linux ~]# echo_supervisord_conf > /etc/supervisord.conf

3.修改supervisor的配置文件,添加管理crm的任务的
vim /etc/supervisord.conf #再最底行,添加如下内容

#[program:xx]是被管理的进程配置参数,xx是进程的名称

4.uwsgi和uwsgi.ini都配置完毕之后,开始使用supervisor工具进行管理了
先明确,启动uwsgi的绝对路径命令是什么
4.1 找到uwsgi的绝对路径
(venv_crm) [root@localhost etc]# which uwsgi
/opt/crm/venv_crm/bin/uwsgi
4.2 找到uwsgi.ini的绝对路径,直接从项目里找配置文件即可
/opt/crm/uwsgi.ini
4.3 因此 启动 crm项目的 完整绝对路径命令是
/opt/crm/venv_crm/bin/uwsgi --ini /opt/crm/uwsgi.ini

5.修改supervisor的配置文件
vim /etc/supervisord.conf #写入如下
摁下 G 去最后一行

[program:crm]
command=/opt/crm/venv_crm/bin/uwsgi     --ini   /opt/crm/uwsgi.ini       				 ;supervisor其实就是在帮你执行命令而已!
autostart=true       ; 在supervisord启动的时候也自动启动
startsecs=10         ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true     ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
stopasgroup=true     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true     ;默认为false,向进程组发送kill信号,包括子进程

6.启动supervisor,默认就会直接启动uwsgi了 打开服务端 ********
supervisord -c /etc/supervisord.conf #启动supervisor服务端,指定配置文件启动

启动完毕supervisor之后,检查进程信息

ps -ef|grep supervisor #检查supervisor是否存在了进程,是否启动
ps -ef|grep uwsgi #检查uwsgi是否启动

7.进度supervisor任务管理终端
看到如下的结果,表示你自定义的任务s25crm,也就是uwsgi进程,正确的启动了
supervisorctl -c /etc/supervisord.conf

(venv_crm) [root@localhost crm]# supervisorctl -c /etc/supervisord.conf
crm RUNNING pid 6394, uptime 0:03:57 #说明启动了
supervisor>

8.看到了没有静态文件的 crm界面,就是正确的了

9.supervisorctl的管理命令

提供了如下命令
(venv_crm_again) [root@s25linux tf_crm]# supervisorctl -c /etc/supervisord.conf
s25crm RUNNING pid 41451, uptime 0:01:34
supervisor>
supervisor>start s25crm #根据名字启动
supervisor>stop s25crm
supervisor>status 查看状态
supervisor>start all
supervisor>stop all 停止所有
exit 退出

10.uwsgi异常崩溃的话,supervisor会立即重启uwsgi

11.如果要运行多个 uwsgi项目,在supervisor中定义多个任务即可

注意:虚拟环境创建的文件,和uwsgi的ini文件都放在创建的项目文件里,环境配置也是跟随虚拟环境安装,而supervisor工具

在这里插入图片描述

你可能感兴趣的:(linux)