前言:

  前段时间,利用Django为单位制作了一个小型的内部考勤系统,本想放到单位内部的服务器上,考虑到运行的稳定、安全防护等问题,最终决定把网站部署到百度云服务器上,事先也在网上查找了一些资料,但过程还是一波三折,问题为断,最终用了半天的时间,将网站部署成功,目前依然稳定运行。为了后人少踩坑,也为了自己下一次有迹可循,特意写一篇随笔,记录整个过程。

布署环境:

  1、百度云服务器:(最便宜的那种,一核,1G内存,1M带宽),服务器上安装的是centos 7.1

  2、本机:Python3.7 Django2.0.6 PUTTY

布署过程:

  一、在上线之前,在本地需做的几项工作:

  1、修改setting.py文件。

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False ALLOWED_HOSTS = ['*']

  主要有三个地方:一是修改DEBUG为False(关闭调试模式,这个必须做,为安全考虑),关闭调试模式后,ALLOWED_HOSTS项必须修改,可以输入自己网站真实的域名,也可以用*代替。

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, '(--.----'),
}
}

  二是修改数据库设置,在这里修改为自己的数据库配置,如MySql等。因为我的网站是一个小型系统,所以直接使用了自带的sqlite3数据库,应付一个小型应用,也足够用了,为安全计,将文件名改一下,并在这里同步。  

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

  三是修改static_url static_root两项配置,其中static_url项没有什么价值,采用默认值就可以。但是static_root项很重要,将来网站的所有静态文件都会收集到这个文件夹中。

  2、收集静态文件

  运行命令:python manage.py collectstatic,网站中的静态文件都会收集到static_root指定的文件夹中,记住这个文件夹的位置,后边配置nginx时要用。

  3、将网站文件夹上传到百度云服务器。

  我是使用PUTTY自带的pscp工具做的,方法很简单,直接写命令  

1、从远程服务器下载
d:\putty>pscp -r root@IP:/root/dir d:\data r参数代表要下载的是目录
如: pscp -r toot@192.168.1.102:/usr/local/temp d:\down
以上命令,将远程服务器中的/usr/local/temp文件夹下载到当地的down中。 如:pscp root@192.168.1.102:/usr/local/temp.txt d:\down
以上命令,将远程服务器中的/usr/local/temp文件夹下载到当地的down中。
2、向远程LINUX服务器上传 d:\putty>pscp -r dir root@IP:/usr/local/temp #将指定目录上传。
d:\putty>pscp file1.txt root@IP:/usr/local/temp #将指定文件上传

  二、远程服务器准备工作。

  1、安装python3/django,这方面网上文章很多,这里就不多说。

  2、安装uwsgi,这是一个容器管理文件,用它来运行Django网站。安装方法很简单  

pip install uwsgi

或者

pip3 install uwsgi

   3、安装nginx.(主要用于提供静态文件的访问服务)

    (1)到 官网http://nginx.org/en/download.html,选择适合Linux的版本,这里选择最新的版本,下载到本地后上传到服务器或者centos下直接wget命令下载。  

    

  我是用了wget http://nginx.org/download/nginx-1.17.0.tar.gz命令,将安装文件下载了自己的目录中。

  (2)安装nginx。

  安装前先检查一下:使用yum list ****命令,检查以下依赖库有无安装,如果没有安装,则执行下列命令进行安装 。

# yum install gcc-c++
# yum install pcre
# yum install pcre-devel
# yum install zlib 
# yum install zlib-devel
# yum install openssl
# yum install openssl-devel

  第一步:解压。tar -zxvf nginx-1.17.0.tar.gz。第二步:进入解压后的文件夹, 执行 ./configure,该操作会检测当前系统环境,以确保能成功安装nginx,执行该

操作后如果出现错误提示,一般就是缺少依赖库,缺什么就安装什么。第三步: 执行make和make install编译nginx。 成功后,nginx就安装到当前目录的nginx目录

下了。

  (3)配置nginx

  在 /lib/systemd/system/ 下创建nginx的后台服务配置文件。"nginx.service",文件内容如下:其中的/usr/local/nginx是我机器上安装nginx的文件夹。

  

[Unit]
Description=nginx
After=network.target [Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx reload
ExecStop=/usr/local/nginx/sbin/nginx quit
PrivateTmp=true [Install]
WantedBy=multi-user.target

  保存文件后,执行systemctl enable nginx.service命令,让nginx在开机后能自动以服务的形式在后台启动。

  这里有几个常用的命令:

  systemctl status nginx   查看nginx启动状态。

  systemctl start nginx  /  systemctl stop nginx   /   systemctl restart nginx     分别为启动、停止、重启nginx的命令。

  检查一下配置的结果:浏览网址http://服务器IP地址,出现欢迎界面,说明nginx的配置初步成功了。

  到这一步,服务器的准备工作就基本完成了,从下一步开始,就要开始正式的部署工作了。

  

  三、在远程服务器正式部署网站

  (一)利用uwsgi来提供Django网站的访问功能。

  1、进入用户目录 :cd /usr/local(这个位置没要求),新建nginx目录,其中有三个文件:分别是nginx.ini nginx.pid   nginx.status。编辑nginx.ini文件,

  

[uwsgi]
socket=127.0.0.1:8000 chdir=/var/www/myproject module=attproject.wsgi master=true
processes=3
threads=2 stats=%(chdir)/uwsgi.status
pidfile=%(chdir)/uwsgi.pid

其中的chdir是我们网站的根目录所在位置。module指的是wsgi.py文件所在的位置,格式为:所在目录.wsgi   processes是进程数(实际进程数是这个数+1)

threads是线程数,这两个数根据机器配置来设置,如果机器配置高,这个数就可以多一些。

    2、执行uwsgi-d --ini uwsgi.ini命令,启动Django网站。 其中 -d指的是从后台启动。 --ini指的是读取指定配置文件的方式启动。uwsgi.ini是刚才编辑好的

配置文件。提示[uWSGI] getting INI configuration from uwsgi.ini。说明已经启动成功。

关闭uwsgi的命令:uwsgi --stop uwsgi.pid。

    (二)利用 nginx来提供静态文件的访问。

    通过上面的步骤,Django网站已经能够成功运行了,但是会出现找不到静态文件。(没有样式,图片等),这个就需要用到nginx了。

    1、编辑nginx的配置文件。

    nginx.conf是nginx的配置文件,在安装文件夹的conf目录下。

    vim nginx.conf

    编辑其中的

 server {
listen 80;
server_name http://www.********;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
#charset koi8-r; #access_log logs/host.access.log main; #这里是关键,可以理解为是一个映射,当用户访问 http://ip/static时,让nginx找哪个文件夹。以下的设置,就是让nginx读网站根目录下的static文件,静态文件都在那里面。
location /static {
alias /var/www/attproject/static; }

    
    #这里是nginx与uwsgi互相联系的部分。其中include uwsgi_params,这行必须有,这个文件在nginx的conf文件夹下。第二行,要与前边那个uwsgi.ini文件中指定的一样。
    location /{
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

   编辑完成后,先运行nginx -t命令,判断一下设置是否有问题,如果提示:

   nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful,则表示没有问题,如果提示错误,则认真核对一下nginx.conf文件,特别是注意

里面的{ }是成对的。

  

成功后,执行systemctl restart nginx.service    或 systemctl start nginx.service命令,启动nginx,这时网站应该能正常访问了。(在此之前,uwsgi已经成功运行

了)

四、在部署过程中遇到的几个坑:

1、安装nginx后,启动不成功,发现是端口占用,分析原因,服务器上原本运行了apache,停止并删除了httpd服务后,解决了问题。

2、安装nginx和uwsgi以后,运行命令,提示找不到。分析后,发现需要将执行路径放到系统的PATH中,编辑 /etc/profile文件,将路径加进去,结果没有效果,查资

料后发现,在添加PATH时,需要将  :$PATH放到添加的路径的后面,意思是包含以前的路径,如果放到前面,则原本定义的路径就找不到了。具体如下:

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

export PATH="/usr/local/nginx/sbin:$PATH"

export PATH="/usr/local/python3/bin:$PATH"

3、在使用uwsgi的停止命令时,到网上查到,同目录下会自动创建一个***.pid文件 ,停止uwsgi时,直接用uwsgi --stop ***.pid就可以,结果根本不好使,只能自己

创建一个,并添加到uwsgi.ini文件中,才好使。

  

  

  

在百度云服务器上部署Django网站的经历的更多相关文章

  1. unigui在阿里云服务器上部署

    unigui在阿里云服务器上部署 客户租用了阿里云WINDOWS2008服务器,部署UNIGUI发现死活不行,WINDOWS2008自带的IE9浏览器打开URL,卡死在loading...... 我远 ...

  2. PHP--腾讯云服务器上部署LNMP环境

    本文参考 云服务器上部署Laravel的实例教程 腾讯云 创建 Laravel5.4 项目 阿里云服务器部署php的laravel项目,在阿里云买ECS 搭建 Linux+Nginx+Mysql+PH ...

  3. 使用Nginx+uwsgi在亚马逊云服务器上部署python+django项目完整版(二)——部署配置及相关知识

    ---恢复内容开始--- 一.前提: 1.django项目文件已放置在云服务器上,配置好运行环境,可正常运行 2.云服务器可正常连接 二.相关知识 1.python manage.py runserv ...

  4. Ubuntu 云服务器上部署自己的 Rails 应用

    自学rails一段时间了,之前只用heroku部署了网站,想尝试把网站以一个更“正经”的方式呈现出来,就买了一个阿里云服务器.参考了网上部分rails部署教程,过程中也遇到了一些问题,所以在完成之后总 ...

  5. Linux学习2-在阿里云服务器上部署禅道环境

    前言 以前出去面试总会被问到:测试环境怎么搭建?刚工作1-2年不会搭建测试环境还可以原谅自己,工作3-5年后如果还是对测试环境搭建一无所知,面试官会一脸的鄙视. 本篇以最简单的禅道环境搭建为例,学习下 ...

  6. 如何在 Ubuntu 云服务器上部署自己的 Rails 应用

    安装步骤  参考:https://ruby-china.org/topics/32851 在云服务器上安装Ruby|Rails : http://www.cnblogs.com/znsongshu/p ...

  7. 关于前期在云服务器上部署TOMCAT服务器的问题

    如果你要将你的项目放在服务器上(针对云服务器),首先你必须要学会前期部署Tomcat的准备, 第一步:安装jdk,配置环境变量 这个比较简单,配置java环境变量最为简单的方法是将java的 (../ ...

  8. 阿里云ECS云服务器CentOS部署个人网站

    ping了一下coding pages和阿里云服务器的速度,意外感觉coding的速度反而更快.不过为了折腾,还是把博客迁移到阿里云,跌跌撞撞遇到很多坑,大多是由于对指令不熟悉以及部分教程省略了部分步 ...

  9. 服务器上部署django项目流程?

    1. 简单粗暴 项目开发完毕,在部署之前需要再配置文件中将 ALLOWED_HOSTS配置设置为:当前服务器IP或*,如: ALLOWED_HOSTS = ["*",] 然后将源码 ...

  10. 在云服务器上部署node.js服务器

    本文档介绍腾讯云·万象优图服务端nodejs的部署和集成,搭建一个nodejs+nginx为基础,对web端或者移动端提供http签名接口服务的例子程序.注意:本文档只是简单的示例,展示了服务端为终端 ...

随机推荐

  1. MySQL的简单安装配置

    一.简单了解MySQL 1.在了解MySQL之前因该了解的东西 数据库(Database)指长期存储在计算机内的.有组织的.可共享的数据集合.数据库实际上就是一个文件集合,是一个存储数据的仓库,本质就 ...

  2. .Net Core后端架构实战【1-项目分层框架设计】

    摘要:基于.NET Core 7.0WebApi后端架构实战[1-项目结构分层设计]  2023/02/05, ASP.NET Core 7.0, VS2022 引言 从实习到现在回想自己已经入行四年 ...

  3. 真正“搞”懂HTTPS协议之目录和一点啰嗦

    说实话,我写完这个系列之后,或者说抄完这个系列之后,唯一的脑海里浮现的词叫做"惭愧".如果你读过罗剑锋老师的<透视HTTP协议>的话,就能察觉到本系列越往后面的部分,几 ...

  4. 服务调用OpenFeign

    1.介绍 ①什么是OpenFeign OpenFeign是在Feign的基础上进行了加强 使用在Client-Consuemr(消费者客户端) Fiegn是一个声明式的Web服务客户端,让编写Web服 ...

  5. 01Python变量的使用

    Python变量 变量的定义 变量:在程序运行过程中,值会发生变化的量 把程序运算的中间结果临时存到内存里,以备后面的代码继续调用,这几个名字的学名就叫做"变量". 变量的作用 我 ...

  6. Cesium计算多边形面积(十一)

    //计算三角形面积 function triangleArea(p0, p1, p2) { let v0 = Cesium.Cartesian3.subtract(p0, p1, new Cesium ...

  7. LAMP环境搭建——最详细的手工编译

    环境:阿里云服务器ECS,Alibaba Cloud Linux 3.2104 LTS 64位 ,2核(vCPU) 2 GiB LAMP 是搭建Web应用时最常用的环境,LAMP 分别表示 Linux ...

  8. JZOJ 6664. 【2020.05.28省选模拟】最优化

    \(\text{Solution}\) 原题:\(\text{Honorable Mention}\) 一个费用流做法,\(S\) 向 \(2i-1\) 连流量为 \(1\),费用为 \(0\) 的边 ...

  9. 批量下载Landsat遥感影像的方法

      本文介绍在USGS网站批量下载Landsat系列遥感影像的方法.   首先,打开EarthExplorer的官网,首先完成注册与登录.   接下来,点击左侧"Search Criteri ...

  10. DataTransfer.setDragImage()自定义拖拽图像遇到的坑

    发生拖动时,从拖动目标(dragstart事件触发的元素)生成半透明图像,并在拖动过程中跟随鼠标指针.这个图片是自动创建的,你不需要自己去创建它.然而,如果想要设置为自定义图像,那么 DataTran ...