全新腾讯云安装部署Nginx+uwsgi+Django生产环境

最近新购买一个腾讯云服务器部署团队的一个小项目,操作系统为 CentOS 7.2 64位,工作主要分为以下8个步骤

目录

0.下载一个XShell6的客户端,安装后新建对话

1.安装Python

1.1下载Python

1.2安装python

2.安装Django

3.安装并配置MySQL

4.安装rz工具上传文件

5.上传文件

6.安装uWsgi模块

7.安装Nginx服务器

8.Nginx和uwsgi服务的查看、启动、重启以及终止

 

0.下载一个XShell6的客户端,安装后新建对话

主机号就填写腾讯云给你的公网IP地址,点击确定后输入用户名,再点击确定后输入初始密码,用户名默认为root,密码啥的腾讯云通过站内信发给你了,自己去查看即可,比如我的:

1.安装Python

1.1下载Python

下载python可以使用wget命令通过python官方网站的ftp下载,网址为:https://www.python.org/ftp/python/,这个网址进去之后是这样的:

选择自己想要的python版本,然后进入对应的目录,比如我选择的是3.7.2版本,进去之后是这样的:

 

在这里可以下载到python3.7.2的所有程序,不同平台以及不同打包格式的程序,因为我们是在CentO环境下,所以我们就选择python-3.7.2.tgz即可,我们输入如下命令:

wget后面的地址自己拼接即可,下载前可以新建一个文件夹用来存放下载的python文件。然后就开始下载: 

下载成功后,文件夹中就有下载好的python文件:

1.2安装python

首先使用tar命令解压缩,tar是Linux系统下的压缩与解压缩的命令,tar命令后面的参数主要有以下几种:

下面的五个参数为必选参数,有且只能有一个 ,代表压缩与解压缩的模式:

  -c: 建立压缩档案
  -x:解压
  -t:查看内容
  -r:向压缩归档文件末尾追加文件
  -u:更新原压缩包中的文件

剩下的为可选参数,可以一个或者多个并用:

-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出

大概总结就是解压tgz就用 -xzvf就行了

所以使用如下命令解压Python

tar -xzvf Python-3.7.2.tgz

然后就是一串解压的过程,执行完毕后就会发现压缩包旁多了一个同名文件夹。

cd进入目录: 

 进入后,配置依赖与安装:

如果安装过程出现如下 no acceptable C compiler found in $PATH错误:

直接yum install gcc,安装个gcc组件,一通安装完之后再运行

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

 这个命令,就好了,这个命令的用途大概就是通过运行Python-3.7.2目录下的configure来讲python配置到/usr/local/python3文件夹下。

配置完毕:

 接下来直接运行安装即可:

make && make install

 编译安装过程中出现can't decompress data; zlib not available错误,如下图:

原因是缺少zlib解压缩类库,下载安装即可。

当然,在安装过程中出现:  Multilib version problems found.错误,如下图:

此问题的原因是机器里已经有zlib解压缩包了,运行rpm命令查看一下发现系统中的确已经存在zlib解压缩包了。 

运行yum update zlib升级该压缩包,将此压缩包修复。

 修复后,再次运行make && make install命令:

如果发现出现No module named '_ctypes' 的错误则运行以下命令安装libffi依赖包:

yum install libffi-devel -y

安装成功后再次运行:

make && make install

提示安装成功,如下图。 

 

 

创建软连接(快捷方式),这个命令的意思就是可以通过python3来运行/usr/local/python3/bin/python3.7的命令。

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

检查是否安装成功:

至此python安装完毕。

2.安装Django

Django是python的一个组件,使用python自带的包管理器pip就可以安装。为了在任何文件夹下都可以使用pip命令,我们也给pip命令创建一个软连接。

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

接下来只要运行

pip3 install Django

即可以安装Django的最新版本。

当然如果纠结安装Django哪个版本比较稳定,可以查看官方提供的版本示意图,如下:

凡是标有LTS的就是Django官方长期支持的版本。(LTS:Long Time Support) 

可以使用如下命令安装指定版本的Django

pip3 install Django==1.8.16

如果嫌安装速度慢,可以使用国内的豆瓣源安装:

pip3 install -i https://pypi.doubanio.com/simple/ Django

我这里就直接安装Django的最新版本:

腾讯云是直接从自己的源上下载,所以速度也比较快。

检查Django是否安装成功:

没有报错说明安装成功。

3.安装并配置MySQL

我的Django项目用到了MySQL数据库,接下来安装并配置MySQL数据库。

CentOS7将MySQL从默认软件列表中移除,并使用MariaDB代替,所以直接运行安装命令 yum -y install mysql mysql-server mysql-devel会提示无法安装。

所以要先从官网下载,然后用rpm命令安装,

wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm 
rpm -ivh mysql-community-release-el7-5.noarch.rpm

如下图:

再次运行安装命令:

 yum -y install mysql mysql-server mysql-devel

 就提示安装成功了。

接下来启动MySQL服务:

service mysqld start

 输入mysql -u root -p

密码为空进入MySQL命令行。

 修改root密码(我的密码是bonjava)

set password for root@localhost = password('bonjava'); 

4.安装rz工具上传文件

rz sz工具是Linux系统与本地系统进行文件互传的有效工具。

输入以下命令可以通过yum安装rz工具:

yum install -y lrzsz

安装完成后,在XShell中输入rz即可以将本地文件上传至服务器,如下图:

5.上传文件

使用rz命令将项目文件传到云端,要记得在数据库中新建项目用的数据库,然后在项目根目录下运行以下命令生成数据库的表:

python3 manage.py makemigrations
python3 manage.py migrate

 如果要导入历史数据,可以将历史数据备份为sql文件,然后用source命令将sql文件内容导入到数据库中,此处不再赘述。

6.安装uWsgi模块

uWsgi模块是Python的一个模块,因此直接通过pip安装即可。

pip3 install uwsgi

 

 安装成功后即可以配置uwsgi。在项目根目录下新建my_uwsgi.ini文件,并写入配置内容。

具体配置如下:


# hello_uwsgi.ini file
[uwsgi]

# Django-related settings


# the base directory (full path)
#此处填写项目地址,我的Django项目地址是/home/project/PyCharmProjectscanteenserver
chdir           = /home/project/PyCharmProjectscanteenserver

# Django s wsgi file
module          = PyCharmProjectscanteenserver.wsgi

# process-related settings
# master
master          = true
socket          = 127.0.0.1:8000
#此处配置的为日志文件存放的地方
daemonize = /home/project/PyCharmProjectscanteenserver/my_uwsgi.log
# maximum number of worker processes
processes       = 4

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

配置完成后,在项目根目录下输入以下命令即可启动uwsgi服务。

uwsgi --ini my_uwsgi.ini

7.安装Nginx服务器

Nginx服务器的安装分为yum安装和下载安装文件安装,个人认为yum安装比较方便。

yum -y install nginx

如果此命令不行,则按如下配置一下yum源再执行安装:

vim /etc/yum.repos.d/nginx.repo

在文件中输入以下内容:

[nginx]
name=nginx repo
#我这里是centos7所以就是7,其他版本可以对应更改,具体的可以将地址中7以前的部分复制到浏览器中查看
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

通过yum安装的Nginx安装完成之后是默认开启的。接下来开始配置Nginx的配置文件,通过以下命令新建myconf.conf配置文件。

vim /etc/init.d/nginx/conf.d/myconf.conf

在配置文件中作如下输入:

#Nginx反向代理服务器,主要功能就是将发送到指定端口的数据转发到相应的服务器中
server {
   listen 80; # 监听80端口
   server_name 118.25.40.2; # 路径前面的url名称,也就是你在浏览器中输入访问这个服务器的网址,比如1.1.1.10
   access_log /var/log/nginx/access.log main; # Nginx日志配置
   charset utf-8; # Nginx编码
   gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream; # 支
持压缩的类型
   error_page 404 /404.html; # 配置notfound错误页面
   error_page 500 502 503 504 /50x.html; # 配置50X错误页面

# 指定项目路径uwsgi,此处配置的就是Nginx和uwsgi之间的代理
   location / { # 此处的意思就是配置浏览器访问此处的位置,如果此处为location /aa 那么浏览器访问此处所有的Django url.py文件中的地址前都要加/aa/
   include uwsgi_params; # 导入Nginx的模块,这个模块是用来和uWSGI进行通讯的
   uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
   uwsgi_pass 127.0.0.1:8000; # 指定uwsgi的sock文件,此处填写要和uwsgi配置文件中的socket后面是一样的
   }

   # 指定静态文件路径,此处指定你的CSS和JS的文件路径,也就是你Django项目中的静态文件夹的地址,配置不好,所有的CSS以及JS效果都看不到
   location /static/ {
      alias /static/;
      index index.html index.htm;
   }
          
}  

该出目录下还有一个default.conf文件,不用管它。启动Nginx服务器时,会自动加载里面的所有配置文件。

8.Nginx和uwsgi服务的查看、启动、重启以及终止

查看目前运行的服务:

netstat -ntpl

终止运行的服务:

kill pid

pid就是你运行netstat -ntpl命令之后出来一行中倒数第二个的PID的值。

启动服务:

#启动uwsgi
uwsgi --ini my_uwsgi.ini #不在my_uwsgi.ini文件的目录下运行此命令时,要带上my_uwsgi.ini文件的完整路径
#启动Nginx
systemctl start nginx.service #通过yum安装的nginx不想麻烦配置其他启动方式的话,可以使用这个。

重启nginx服务:

systemctl restart nginx.service

此处会遇到的坑:

在启动nginx服务器的时候会遇到Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.错误:

遇到这个错误不要慌,按照提示输入systemctl status nginx.service命令查看错误日志,比如我的错误日志出来是这样:

 这个错误就是Address already in use,意思是地址已经被使用了,这个可能是其他服务器冲突或者是nginx本身死掉了。这个时候只要netstat -nptl查看nginx的pid号后,把nginx杀掉,然后再次启动就好了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值