Skip to the content.

常用Linux命令

命令 作用
netstat -tunlp|grep 8888 查看端口8888是否被占用
ps aux|grep uwsgi 查看使用了uwsgi命令的进程
nginx 启动nginx
nginx -s stop 停止nginx
uwsgi –ini uwsgi.ini 利用ini配置文件启动项目
uwsgi –stop uwsgi.pid 利用pid文件终止进程
uwsgi –reload uwsgi.pid 利用pid文件重启进程
nohup command > myout.file 2>&1 & 后台运行并且输出日志到当前目录的myout.file中
tail -f file.log 动态查看日志
tail -n 20 file.log 查看最后20行日志
tail file.log 查看日志(默认10行)
head -n 1000 file.log 查看开头1000行日志
wget url 下载
tar -zxvf filename.tar.gz 解压
./configure –prefix=/ 编译的时候用来指定程序存放路径
make & make install 编译加安装

另外:若不指定prefix来安装

可执行文件默认放在/usr /local/bin, 库文件默认放在/usr/local/lib, 配置文件默认放在/usr/local/etc。 其它的资源文件放在/usr /local/share


正式流程

1.安装python3

​ 看过很多的安装,如果用yum或者apt-get来安装的话,会比较难管理,而且版本也难以控制,因为文件会分散在bin、lib、etc、share等文件夹中,而且下载源可能比较旧。所以我们可以用传统的“下载+编译+安装”的三步走方法来安装。

​ 首先我们先安装一些依赖包:

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

​ 我们先找一个文件比较少的地方(随你放哪了),用wget命令下载python的压缩包

wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz

​ 3.6.8会比较容易装一点。我试过安装3.7.0,但是3.7以上的版本会有一个新的依赖包需要装,如果有需要的话可以查一查3.7版本的安装。我这里就挑简单一点的安装了。

​ 然后我们调用命令解压

tar xf Python-3.6.8.tar.xz -C /usr/local/src/

​ 这个命令是指解压到/usr/local/src/目录中,毕竟这只是源码,还不是最后的程序。如果说没有该目录的话就去用mkdir创建一个就好了

​ 接着我们切换到/usr/local/src/目录中,然后调用配置安装路径的命令

./configure --prefix=/usr/local/python3

​ 这行命令的意思是利用源码中的configure文件,把编译和安装路径设置为/usr/local/python3。然后我们调用编译安装命令就搞定了

make && make install

​ 然后我们调用下一个命令先升级下pip

/usr/local/python3/bin/pip3 install --upgrade pip

​ 如果你嫌每次都要打一长串路径的话,你可以用以下命令设置一下

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

​ 这样每次打pip3就相当于打了/usr/local/python3/bin/pip3了。

​ 设置后软连接后,我们可以看一下pip是否升级成功了:

pip3 list

​ 然后我们再给新安装的python设置软连接:

ln -s /usr/local/python3/bin/python3 /usr/bin/python3

​ 如果说设置软连接的时候说已存在python3或者说前面的已存在pip3,那就把/usr/bin/中的python3、pip3删掉就好了。

2.安装Django及uwsgi

​ 这个的话直接用pip3的命令来安装就好了

pip3 install django

​ 如果对版本有要求的话,可以自己再稍微微调一下。

​ 然后我们再接着安装uwsgi网关接口:

pip3 install uwsgi

​ 我们其实这样就已经可以做到部署一个小型的项目到服务器上了。

​ 或者说连uwsgi可能都不需要。直接在项目目录下调用命令:

python manage.py runserver 0.0.0.0:8000

​ 然后我们打开浏览器,输入相应服务器ip:8000就可以看到页面了。但是这个样子只是前台运行而已,一关闭与服务器shell的连接就没了。或许你会说用nohup &命令让其在后台运行,那也可以,但是这个样子的话,我们可以设置的地方就太少了,比如说连接数量、线程数等等。所以我们就需要用到uwsgi网关接口了。

​ 当然我们先来配置以下软连接

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

​ 然后我们在原来项目的根目录下(也就是与app同级的地方),新建一个wsgi.py。往里面写:

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

​ 这一段代码的作用是载入了项目里的设置,还有找到了app并提供给了uwsgi网关接口。

​ 然后我们再在刚才那个目录下新建一个uwsgi.ini文件,往里面写:

[uwsgi]
socket=127.0.0.1:8888
chidr=/usr/myprog/python/mysite  #项目目录
wsgi-file=/usr/myprog/python/mysite/wsgi.py #项目目录下的wsgi.py 可以通过这个py文件找到app
processes=4
threads=2
master=True
pidfile=/usr/myprog/python/mysite/uwsgi.pid #这个路径别瞎设,以后还得靠这个pid来结束uwsgi进程的
daemonize=/usr/myprog/python/mysite/uwsgi.log #日志文件,一旦用ini来启动项目,所有的输出都在这里了,不看log都不知道bug在哪

​ 其中项目目录得写你自己的项目放的地方,有备注的四个设置项都得改成自己的。

​ 这时候我们最好用命令检测下8888端口有没有被占用:

netstat -tunlp|grep 8888

​ 如果没有显示东西的话就是没有进程占用了,那就可以使用了。如果有进程占用了,那就只好换一个没有被使用的端口号了。如果你偏要用这个端口号的话,那可以把相关的进程给kill掉

​ 至于为什么是127.0.0.1呢?不应该是服务器ip地址吗,怎么是本地地址呢。如果我们单单使用uwsgi网关来启动项目的话,那么这个地方是该写成服务器的ip地址然后设置成http而不是socket的。

​ 但是,为了搞更多的花样,我们等下还得弄nginx。所以这个地方就这样设置了。因为配置了nginx之后,nginx监听服务器某个端口有没有收到请求,如果收到请求的话,那就发给uwsgi网关,然后uwsgi网关再把数据给django处理,然后再原路返回。而nginx和uwsgi之间的通信是在本地进行的,所以nginx就向本地的一个端口发数据,然后uwsgi也监听本地的那个端口来接受nginx的数据。

​ 怎么感觉这么蛋疼的…这一套又嵌一套的…

3.安装nginx

​ 这个的安装我是直接用yum命令的:

yum install -y nginx

​ 试过是可以的,所以就没有用下载源码再编译的方法了(不到万不得已还是想偷下懒…)。

​ 然后我们开始给nginx设置了。我们先切换到nginx的配置目录下

cd /etc/nginx/conf.d

​ 然后我们新建一个conf文件:

vi mysite.conf

​ 然后我们按i然后往里面写:

server {
        listen       80;
        server_name  xxx.xxx.xxx.xxx;
        charset      utf-8;
        client_max_body_size 75M;

        location / {
            include  uwsgi_params;
            uwsgi_pass  127.0.0.1:8888;
        }
    }

​ 当然server_name不是真的让你写那么多个x,这个地方你就写你自己的服务器ip就可以了,这里我写的是监听80端口号。

​ 然后按Esc然后:wq保存退出

​ 这下我们就配置好nginx了。我先来稍微解释一下为啥这样配置。首先,上面这段里面的uwsgi_pass就是往哪个地方把数据传给uwsgi,这就是我们上面uwsgi中设置的本地地址127.0.0.1:8888了,当然端口肯定要一样的。其他的参数有兴趣的话也可以去搜索一下其他资料

​ 那为什么我新建一个conf,nginx会知道要使用这个新增的配置文件呢?其实在上一层目录,就是/etc/nginx中有一个文件叫做nginx.conf,每次nginx启动就会载入这个配置文件,而这个配置文件里面的最后一行又include了conf.d目录下的所有conf文件。所以我们直接在conf.d目录下新建一个conf文件,就能直接配置到nginx中了。

​ nginx大多数是拿来做负载均衡的,所以一般会连上多个服务器,也就是在conf.d目录下会有不少conf文件,不只是连向本服务器的uwsgi。如果你有访问量大的需求的话,可以在conf.d中让nginx把数据发到别的服务器上处理。具体的就不细讲了,有兴趣的话可以另外查一查相关资料…

4.正式启动项目

​ 终于到了激动人心的时候了。我们先启动一下nginx

nginx

​ 这行代码就是这么简单 …

​ 如果要停止nginx的话就:

nginx -s stop

​ 如果成功开启nginx的话,用浏览器访问正确的url,然后就会有nginx默认的成功启动的页面了。

​ 然后我们切换到django项目目录下,然后输入uwsgi启动命令:

uwsgi --ini uwsgi.ini

​ 然后会有一行提示,说正在从ini文件中获取配置(大致好像是这个意思吧…),然后我们这个时候看一下日志,就能看到启动消息了:

tail -n 50 uwsgi.log

​ 观察一下,如果没有说什么错误的话,就是ok了。这时候我们再刷新一下浏览器。你原本在电脑上调试的样子就又出现在屏幕中了,只不过这次代码不在电脑本地上跑了,而是在服务器上了。

​ 如果要关闭uwsgi的话,可以用以下命令:

uwsgi --stop uwsgi.pid

​ 所以说别把pid文件搞不见了…

最后说几点

​ 在项目的settings中,把debug设置为False,毕竟是上线了的东西了,就没必要出错还显示错哪了…

​ 然后有个settings中还有个ALLOWED_HOSTS的配置,这里项目中我是设置了“*”。但是为了安全起见,最好设置成自己的域名,如果没有域名的话,就写服务器的ip地址就好了。写啥都好过“*”了。

​ 如果说有什么好的软件可以连接到服务器shell的话,那么putty是个不错的选择,轻量且免费。具体的putty设置相关我这里就不细说了,如果想要知道putty的免密码登陆啥的话,另找资料…