使用nginx uwsgi在centos7上布置flask

要使用rz、sz命令传输文件需要给服务器安装lrzsz:

yum -y install lrzsz

命令sz、rz的使用方法

  • rz中的r意为received(接收),输入rz时,意为服务器接收文件,即将文件从本地上传到服务器。

  • sz中的s意为send(发送),输入sz时,意为服务器要发送文件,既从服务器发送文件到本地,或是说本地从服务器上下载文件。

  • 注意:不论是send还是received,动作都是在服务器上发起的。

wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz

可以使用wget -b https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz在后台下载, 到下载文件夹内使用tail -f wget-log即可查看下载进度,按ctrl+c可退出查看 若提示未找到wget则先安装 yum -y install wget

解压缩安装包

tar zxf Python-3.8.0.tgz 有时候因为网络原因会有多个安装包,默认的这个可能被损坏,那么久需要解压缩另一个 例如: tar zxf Python-3.8.0.tgz.1 具体文件名可以使用ls命令查看

  • tar命令的选项

-c:创建归档

-x:释放归档

-f:指定归档文件名称

-z:调用.gz格式的工具进行处理

-j:调用.bz2格式的工具进行处理

-J:调用.xz格式的工具进行处理

-t:显示归档中的文件清单

-C:指定释放路径

配置编译安装的基本环境

  • 更新 yum update

  • 安装依赖

    yum -y groupinstall "Development tools" yum -y install gdbm-devel db4-devel libpcap-devel xz-devel

  • yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

进入解压缩之后的Python-3.6.0目录内,执行以下命令进行安装

  • 指定安装位置 ./configure prefix=/usr/local/python3,不要加--enable-optimizations参数,否则会导致安装失败

  • 清空缓存 make clean

  • 编译安装 make && make install

    ./configure

Linux下源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install),具体的安装方法一般作者都会给出文档,这里主要讨论配置(configure)。Configure是一个可执行脚本,它有很多选项,使用命令./configure –help输出详细的选项列表

很多的选项,个人认为,你可以忽略其他的一切,但请把—prefix加上。这里以安装python36为例,我们打算把它安装到目录/usr/local/python36,于是在python36目录执行带选项的脚本./configure --prefix=/usr/local/python36执行成功后再编译、安装(make,make install);安装完成将自动生成目录python36而且该软件所有的文件都被复制到这个目录。为什么要指定这个安装目录?是为了以后的维护方便,如果没有用这个选项,安装过程结束后,该软件所需的软件被复制到不同的系统目录下,很难弄清楚到底复制了那些文件、都复制到哪里去了—基本上是一塌糊涂。

用了—prefix选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)。

make clean 清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件。

备份python2软连接

  • cd /usr/bin

  • mv python python2.bak

修改yum配置

  • /usr/bin

  • ls -la yum*

  • vi yum 进入之后,按i进入编辑模式,将#!/usr/bin/python改为#!/usr/bin/python2,按ESC退出编辑模式,输入:wq!保存并退出,有多个yum文件则需要都这样修改

  • vi /usr/libexec/urlgrabber-ext-down 进行同样的修改

将python3设置为默认python(即:添加软连接)

  • ln -s /usr/local/python3/bin/python3.8 /usr/bin/python

  • ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip 如果提示pip已经存在,则删除rm /usr/bin/pip输入y并按回车确认,即可删除

验证成果

python -V
# 会输出Python 3.6.0

flask

将要运行的flask文件放置root文件夹下 安装flask,进入目录,运行文件

pip install flask
cd /root/flask1
python app.py

安装uwsgi

pip3 install uwsgi
find / -name uwsgi
ln -s /usr/local/python/bin/uwsgi /usr/bin/uwsgi

linux服务器下安装nginx以及环境的配置

下载nginx压缩包

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

配置nginx安装所需的环境

  • 安装PCRE pcre-devel

Nginx的Rewrite模块和HTTP核心模块会使用到PCRE正则表达式语法。这里需要安装两个安装包pcre和pcre-devel。第一个安装包提供编译版本的库,而第二个提供开发阶段的头文件和编译项目的源代码。安装指令如下:

yum install -y pcre pcre-devel
  • 安装zlib

zlib库提供了开发人员的压缩算法,在Nginx的各种模块中需要使用gzip压缩。安装指令如下:

yum install -y zlib zlib-devel
  • 安装gcc

安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境。安装指令如下:

yum install gcc-c++
  • 安装Open SSL

nginx不仅支持 http协议,还支持 https(即在 ssl 协议上传输 http),如果使用了 https,需要安装 OpenSSL 库。安装指令如下:

yum install -y openssl openssl-devel

解压nginx压缩包

# 解压
tar -zxvf nginx-1.14.0.tar.gz
# 进入
cd nginx-1.14.0

然后需要进行配置,注意!这里有一个坑,一般是使用默认配置,即输入./configure 就好了,

但是如果你需要使用https支持,则需要加上SLL模块,否则会出现如下报错

nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:37

所以后期需要https服务的请执行以下指令替代 ./configure

./configure --with-http_ssl_module

编译安装nginx

逐个执行以下指令

make
make install

安装成功后,返回上级目录,然后进入新的nginx目录

启动nginx

进入nginx下的sbin目录,输入./nginx即可启动nginx

./nginx

关闭nginx服务

./nginx -s stop

重启nginx

./nginx -s reload

查看nginx进程

ps aux|grep nginx

注意:以上代码要在 /usr/local/nginx/sbin 目录下执行!!

所以我们给nginx添加软连接

which nginx
ln -s /usr/local/nginx /usr/bin/nginx

nginx和uwsgi的配置

配置nginx

至此我默认大家已经完成了nginx的安装,下面进行nginx 的配置 进入到nginx目录下的conf文件夹

cd /usr/local/nginx/conf 

可以看到有一个叫 nginx.conf 的配置文件,在里面进行相关的文件配置 文件里面默认的代码很多,下面我将我的配置精简如下:

worker_processes  4;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
  
   server {
    	listen 80;   // 监听的端口,默认为80端口
    	server_name 47.108.xxx.180;  //  这里写服务器公网ip
		location / {
                proxy_pass http://127.0.0.1:5000;    
                // 需要代理的地址,我的项目启动地址是这个
        	}
	
     }   
}

弄好配置文件然后就可以启动nginx了

配置uwsgi

下面开始配置uwsgi相关的东西,首先进入我们的项目文件夹 在项目文件夹中创建一个名为 uwsgi.ini 的文件

cd /root/flask1  //进入项目文件夹
vi uwsgi.ini //输入就自动创建了文件并进入了编辑模式

下面开始配置uwsgi文件,附上我的文件信息,关键信息写了注释,其他的根据需求配置,自行去查看作用,此处不作详解

[uwsgi]
http-socket = 127.0.0.1:5000  // 启动地址
chdir = /root/flask1  // 项目地址
wsgi-file = app.py  // 项目的启动文件
callable = app
processes = 1
threads = 10
buffer-size = 32768
master = true
daemonize=flaskweb.log  // 日志文件保存在falskweb.log中
pidfile=uwsgi.pid

注:注意事项:

如果uwsgi配置文件中配置了 daemonize=/path/uwsgi.log (uwsgi服务以守护进程运行) 会导致sytemctl启动时多次重启而导致启动失败 需改为 logto=/path/uwsgi.log 如果你单独执行,并且项目的uwsgi.ini配置文件中设置了logto【daemonize就不用看了】需要执行uwsgi -d --ini uwsgi.ini。这就在后台运行了。

配置完成之后,在项目的根目录下就可以启动 uwsgi 了,下面附上uwsgi的相关操作指令

uwsgi --ini uwsgi.ini             // 启动
uwsgi --reload uwsgi.pid   // 重启

进入目录,输入指令启动uwsgi,如下代表启动成功

[uWSGI] getting INI configuration from uwsgi.ini 

部署成功

启动成功后,我们就可以用浏览器通过服务器公网访问啦 因为前面nginx配置中我们直接把启动地址放在了 location/ 中,也就是将127.0.0.1:5000直接转发到了公网ip,所以可以直接访问:

Nginx设置成服务并开机自动启动的配置详解

方法一

在/etc/init.d下创建文件nginx

[root@localhost ~]# vim /etc/init.d/nginx

其内容参考nginx官方文档

需要注意的配置:

nginx=”/usr/local/nginx/sbin/nginx” //修改成nginx执行程序的路径。
 
NGINX_CONF_FILE=”/usr/local/nginx/conf/nginx.conf” //修改成nginx.conf文件的路径

保存后设置文件的执行权限

[root@localhost ~]# chmod a+x /etc/init.d/nginx

至此就可以通过下面指令控制启动停止

/etc/init.d/nginx start
/etc/init.d/nginx stop

上面的方法完成了用脚本管理nginx服务的功能,但是还是不太方便。

先将nginx服务加入chkconfig管理列表:

[root@localhost ~]# chkconfig --add /etc/init.d/nginx

加完这个之后,就可以使用service对nginx进行启动,重启等操作了。

service nginx start
service nginx stop
service nginx restart

最后设置开机自动启动

[root@localhost ~]# chkconfig nginx on
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  NGINX is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
   # make required directories
   user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   if [ -n "$user" ]; then
      if [ -z "`grep $user /etc/passwd`" ]; then
         useradd -M -s /bin/nologin $user
      fi
      options=`$nginx -V 2>&1 | grep 'configure arguments:'`
      for opt in $options; do
          if [ `echo $opt | grep '.*-temp-path'` ]; then
              value=`echo $opt | cut -d "=" -f 2`
              if [ ! -d "$value" ]; then
                  # echo "creating" $value
                  mkdir -p $value && chown -R $user $value
              fi
          fi
       done
    fi
}
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
restart() {
    configtest || return $?
    stop
    sleep 1
    start
}
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $prog -HUP
    retval=$?
    echo
}
force_reload() {
    restart
}
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
    status $prog
}
rh_status_q() {
    rh_status >/dev/null 2>&1
}
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

方法二:编辑/etc/rc.local,添加开机启动运行命令

直接编辑/etc/rc.local文件,文件内容最底下添加启动命令: /usr/local/nginx/sbin/nginx 即可

方法三: 添加服务方式

进入到/lib/systemd/system/目录

cd /lib/systemd/system/

创建nginx.service文件,并编辑

vim nginx.service
# 仅修改 /usr/local/nginx/sbin/nginx 这个路径即可(修改为你的nginx路径)
[Unit]
Description=nginx service
After=network.target 
 
[Service] 
Type=forking 
ExecStart=/usr/bin/nginx
ExecReload=/usr/bin/nginx -s reload
ExecStop=/usr/bin/nginx -s quit
PrivateTmp=true 
[Install] 
WantedBy=multi-user.target

Description:描述服务 After:描述服务类别 [Service]服务运行参数的设置 Type=forking是后台运行的形式 ExecStart为服务的具体运行命令 ExecReload为重启命令 ExecStop为停止命令 PrivateTmp=True表示给服务分配独立的临时空间 注意:[Service]的启动、重启、停止命令全部要求使用绝对路径 [Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

保存退出。

systemctl start nginx.service  启动nginx服务

systemctl stop nginx.service  停止服务

systemctl restart nginx.service  重新启动服务

systemctl list-units --type=service 查看所有已启动的服务

systemctl status nginx.service 查看服务当前状态

systemctl enable nginx.service 设置开机自启动

systemctl disable nginx.service 停止开 机自启动

uwsgi自启

*.service 配置

创建配置文件:

/etc/systemd/system/server_uwsgi.service

填入以下内容

[Unit]
Description=uWSGI instance to serve uwsgi
After=network.target

[Service]
User=root
Group=root

KillSignal=SIGQUIT
ExecStart=/usr/bin/uwsgi --ini /root/flask1/uwsgi.ini
Restart=always
Type=notify
NotifyAccess=all
StandardError=syslog

[Install]
WantedBy=multi-user.target

可以使用 whereis 查看uwsgi 位置

systemctl enable /etc/systemd/system/server_uwsgi.service

然后就可以通过systemctl来控制服务的启停

systemctl stop server_uwsgi.service 关闭uwsgi服务
systemctl start server_uwsgi.service 开启uwsgi服务
systemctl restart server_uwsgi.service 重启uwsgi服务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值