您的位置:首页 > 编程语言 > Go语言

Django部署之阿里云ECS

2018-01-04 14:20 483 查看
nginx+gunicorn+django+mysql部署(参考:https://www.jianshu.com/p/17af51935b4d

一、常识:

(1)、删除文件夹

rm -rf 目录名字

-r 就是向下递归,管理有多少级目录,一并删除

-f 就是直接强行删除,不作任何提示的意思

这条命令虽然能够帮助你解决问题,但需要提醒的是:

使用这个rm -rf的时候一定要格外小心,众所周知,Linux没有回收站的,一旦删除就永远找不回来了。

当然,rm还有更多的其他参数和用法,可以在终端里边使用man rm查看其他具体使用方法。

(2)、

查找某个文件:

1.whereis 文件名

特点:快速,但是是模糊查找,例如 找 #whereis mysql 它会把mysql,mysql.ini,mysql.*所在的目录都找出来.我一般的

查找都用这条命令.

2.find / -name 文件名特点:准确,但速度慢,消耗资源大,例如我想找到php.ini的准确位置,就需要用

 

#find / -name php.ini

3.locate 文件名

强力推荐的方法,最快,最好的方法.

注意:第一次使用该命令,可能需要更新数据库,按照提示的命令执行一下就好了。

(3)、

删除软链接(到快捷方式(软链接)目录下),执行:

rm -rf  /目录/目录

或者:

rm -rf /目录/文件名

(4)、ps  aux:显示现行终端机下的所有程序

linux上进程有5种状态:

1. 运行(正在运行或在运行队列中等待)

2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)

3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)

4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)

5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

 

1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。

2)ps -A   显示所有程序。

3)ps c    列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。

4)ps -e  此参数的效果和指定"A"参数相同。

5)ps e   列出程序时,显示每个程序所使用的环境变量。

6)ps f    用ASCII字符显示树状结构,表达程序间的相互关系。

7)ps -H    显示树状结构,表示程序间的相互关系。

8)ps -N   显示所有的程序,除了执行ps指令终端机下的程序之外。

9)ps s     采用程序信号的格式显示程序状况。

10)ps S     列出程序时,包括已中断的子程序资料。

11)ps -t <终端机编号>  指定终端机编号,并列出属于该终端机的程序的状况。

12)ps u   以用户为主的格式来显示程序状况。

13)ps x   显示所有程序,不以终端机来区分。

14)ps -l     較長,較詳細的顯示該PID的信息

 

# ps -lA |more

F S   UID   PID  PPID  C PRI  NI ADDR SZ   WCHAN     TTY            TIME          CMD

4 S     0     1     0        0  76   0     -  1193 109952       ?             00:00:03 init

1 S     0     2     1        0 -40   -      -     0    migrat        ?             00:00:03 migration/0

1 S     0     3     1        0  94  19    -     0     ksofti         ?             00:00:00 ksoftirqd/0

1 S     0     4     1        0 -40   -      -     0    migrat        ?             00:00:02 migration/1

1 S     0     5     1        0  94  19    -     0    ksofti          ?             00:00:00 ksoftirqd/1

1 S     0     6     1        0 -40   -      -     0    migrat        ?             00:00:02 migration/2

1 S     0     7     1        0  94  19    -     0    ksofti          ?             00:00:00 ksoftirqd/2

 

相關信息的意義:

F  進程的標誌(flag),4表示用戶為超級用戶

S  進程的狀態(stat),各STAT的意義見下文

PID   進程的ID

C   CPU使用資源的百分比

PRI   priority(優先級)的縮寫,

NI     Nice值,

ADDR  核心功能,指出該進程在內存的那一部分,如果是運行的進程,一般都是“-”

SZ     用掉的內存的大小

WCHAN   當前進程是否正在運行,若為“-”表示正在運行

TTY     登陸者的終端位置

TIME   用掉的CPU的時間

CMD    所執行的指令

 

# ps aux |more

USER       PID %CPU %MEM   VSZ  RSS  TTY                   STAT     START   TIME     COMMAND

root         1        0.0  0.0       4772  564 ?                         S        Sep22   0:03     init [3]

root         2        0.0  0.0        0    0        ?                         S        Sep22   0:03     [migration/0]

root         3        0.0  0.0        0    0        ?                         SN      Sep22   0:00     [ksoftirqd/0]

root         4        0.0  0.0        0    0        ?                         S        Sep22   0:02     [migration/1]

root         5        0.0  0.0        0    0        ?                         SN      Sep22   0:00     [ksoftirqd/1]

root         6        0.0  0.0        0    0        ?                         Ss+     Sep22   0:02     [migration/2]

root         7        0.0  0.0        0    0        ?                         SN      Sep22   0:00     [ksoftirqd/2]

root         8        0.0  0.0        0    0        ?                         S        Sep22   0:00     [migration/3]

root         9        0.0  0.0        0    0        ?                         SN      Sep22   0:00     [ksoftirqd/3]

root        10       0.0  0.0
4000
       0    0        ?                         S<      Sep22    0:00     [migration/4]

上述欄位解釋:

USER 进程的属主;

PID   进程的ID;

PPID    父进程;

%CPU   进程占用的CPU百分比;

%MEM  占用内存的百分比;

NI        进程的NICE值,数值大,表示较少占用CPU时间;

VSZ     該进程使用的虚拟內存量(KB);

RSS     該進程占用的固定內存量(KB)(驻留中页的数量);

TTY     該進程在那個終端上運行(登陸者的終端位置),若與終端無關,則顯示(?)。若為pts/0等,則表示由網絡連接主機進程

WCHAN  當前進程是否正在進行,若為-表示正在進行;

START   該進程被觸發启动时间;

TIME      該进程實際使用CPU運行的时间;

COMMAND   命令的名称和参数;

STAT狀態位常見的狀態字符

D 无法中断的休眠状态(通常 IO 的进程);

R 正在运行可中在队列中可过行的;

S 处于休眠状态;

T 停止或被追踪;

W 进入内存交换  (从内核2.6开始无效);

X 死掉的进程   (基本很少見);

Z 僵尸进程;

< 优先级高的进程

N 优先级较低的进程

L 有些页被锁进内存;

s 进程的领导者(在它之下有子进程);

l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);

+ 位于后台的进程组;

(5)、

 tar -cvf    打包后的名称.tar    文件夹名     # 仅打包,不压缩 

(6)、

http://blog.csdn.net/ygm_linux/article/details/47017295

2018/01/04 09:59:17 [error] 8856#0: *1 open() "/home/RunHangTech/static/img/favicon.ico" failed (2: No such file or directory), client: 112.172.122.123, server: 23.34.45.3, request: "GET /favicon.ico HTTP/1.1", host: "23.34.45.3", referrer: "http://23.34.45.3/"

取消日志:
把以下配置放到 server {} 块.

关闭favicon.ico不存在时记录日志:

location /favicon.ico {
log_not_found off;
access_log off;
}

不允许访问隐藏文件例如 .htaccess, .htpasswd, .DS_Store (Mac).

location ~ /\. {
deny all;
access_log off;
log_not_found off;
}

众所周知,联盟成员导航是中国博客联盟的特色之一。而网站图标则是导航的装饰之一,起到锦上添花的作用,让页面更精美耐看。

但是随着成员数量的增长,图标便成了页面的拖沓大户,严重拖慢了整体速度。经常有成员反馈页面加载太慢,经仔细检查发现,居然有部分成员的网站图标居然达到了140kb!你老这是要闹哪样啊?这玩意再大也没用啊!

所以,谨以此文献给那些不知网站图标为何物的大神们,希望能赶紧优化你的网站图标,为联盟做点贡献。
(6.1)、图标介绍

favicon.ico一般用于作为缩略的网站标志,它显示在浏览器的地址栏、浏览器标签上或者在收藏夹上,是展示网站个性的缩略logo标志,也可以说是网站头像,目前主要的浏览器都支持favicon.ico图标,如果要让网站看起来更专业、更美、更有个性,favicon.ico是必不可少的。

除此之外,标签式浏览器甚至还有不少扩展的功能,如FireFox甚至支持动画格式的favicon等。



(7)、查看ubuntu系统的时区:

date +"%Z %z"


二、步骤:

1、首先:通过xshell登录,阿里云服务器。然后,看服务器上ubuntu系统是多少位的,


#查看文件信息,包含32-bit就是32位,包含64-bit就是64位。

查看ubuntu版本:



2、

服务器:阿里云服务器ECS

镜像系统:ubuntu14.04 64位

准备建立:nginx+gunicorn+django+mysql(sqlite)的‘saler is a font interface.’的输出。

3、

nginx

简单介绍一下,nginx是一个轻量级的高性能的web服务器,反向代理服务器以及邮件服务器。首先来配置一下nginx

sudo apt-get install nginx

一阵等待之后nginx就安装好了,首先来看一下nginx.conf配置

# /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
worker_connections 768;
# multi_accept on;
}

http {

##
# Basic Settings
##

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;

##
# SSL Settings
##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;

##
# Logging Settings
##

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

##
# Gzip Settings
##

gzip on;
gzip_disable "msie6";

##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

这一段代码是安装nginx后的nginx的默认配置,关于nginx的配置优化后续再讲,现在重要的是将服务器给搭建起来,首先简单的讲解一下:
(1)、全局设置,主要用来设置nginx的相关配置,比如设定nginx运行的用户和用户组、运行的进程数、运行的文件等。该部分设置在{}之外。

(2)、events设置,从字面理解,events就是事件的意思,这里是设置事件的相关配置,如事件处理方式是epoll还是select、单个进程的最大连接数,网络IO模型等。

(3)、http设置,这里是http服务器的相关配置,从默认配置看,大致有五种,基本配置、SSL配置、Log配置、Gzip配置以及虚拟端口设置。这里我们先看虚拟端口这只,这里用include引入了两个文件,/etc/nginx/conf.d/*.conf 和/etc/nginx/site-enabled/*。我这里就直接将我自己的服务器配置放在conf.d/blog.conf(6.2的内容,即,将6.2的内容软连接到/etc/nginx/conf.d/自己起的名blog.conf上)文件中。

server {
listen 80;
server_name final-skynet.xin(服务器域名,或者ip,多个用逗号隔开);

location / {
proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

其中可以加上或不加:

location /favicon.ico {
alias /home/用户名/项目名/static/img/favicon.ico;
}#需要在项目中创建static/img文件夹,或者此处写Django项目中的static路径。

# this prevents hidden files (beginning with a period) from being served
location ~ /\. {
access_log off; log_not_found off; deny all;
}



这段代码的意思是nginx监听80端口,服务器的地址是final-skynet.xin,location是一个匹配规则,匹配到监听的url,

具体的匹配规则这里就不详细赘述了。匹配成功后,转发到本地的http://127.0.0.1:8080地址,这是gunicorn监听的地址,然后设置其他需要转发的内容。

(4)、最后一个是mail设置,由于本项目现在还用不着,所以就将默认的代码注释删除了。nginx的基本配置就到这里了。4、

安装gunicorn和django

sudo pip install gunicorn
sudo apt-get install django

5、

创建django项目:

并且在settings.py中写'gunicorn',还有app,

6、

6.1

然后切换到项目目录下,新建gunicorn的配置文件gunicorn.conf.py

vi gunicorn.conf.py

import multiprocessing
bind = "127.0.0.1:8080"
workers = 2
errorlog = '/home/用户/项目名称/gunicorn.error.log'
#accesslog = './gunicorn.access.log'
#loglevel = 'debug'
proc_name = 'gunicorn_项目名称_project'


注意:workers是工作线程数,一般设置成:服务器CPU个数 + 1

6.2

然后在项目目录下新建nginx的配置文件(自己起名nginx.conf)

添加以下内容:

server {
listen 80;
server_name final-skynet.xin(服务器域名,或者ip,多个用逗号隔开);

access_log /home/用户/项目名称/nginx.access.log;
error_log /home/用户/项目名称/nginx.error.log;
location / {
proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /robots.txt {
alias /home/用户/项目名称/static/robots.txt;
}#可不加
location /favicon.ico {
alias /home/用户/项目名称/static/img/favicon.ico;
}#可不加
location ~ ^/(media|static)/ {
root /home/用户/项目名称;
expires 30d;
}#可不加
# this prevents hidden files (beginning with a period) from being served location ~ /\. { access_log off; log_not_found off; deny all; }#可不加
}


然后将其链接到/etc/nginx/conf.d/blog.conf (需要root帐号权限或者sudo)

ln -s /home/用户/项目名称/自己起名nginx.conf     /etc/nginx/conf.d/自己起名.conf


7、

下面需要通过gunicorn来启动django(当前目录是项目的根目录)

gunicorn 项目根目录里面的含wsgi的文件夹模块名.wsgi:application -b 127.0.0.1:8080


同时,必须把nginx.conf里server_name后面的内容(localhost)加入到 settings.py里的ALLOWED_HOSTS:

ALLOWED_HOSTS = ['final-skynet.xin',(服务器域名,或者ip,多个用逗号隔开);]


8、

到项目根目录下:

这样我们现在可以运行一下gunicorn:

nohup /usr/local/bin/gunicorn 跟项目名一致的模块名.wsgi:application -c /home/用户名/项目名/gunicorn.conf.py &


显示:



注意:&,代表在ubuntu中变成系统程序,一旦执行不受xshell关闭的影响,仍在服务器后天运行。要想关闭gunicorn 的运行,使用命令ps  aux查看运行的程序;





要想关闭,输入kill PID号即可。

9、

然后再打开另一个终端重启nginx服务即可

service nginx restart


最后在浏览器中输入网址进行验证,在某台客机浏览器上输入: server_name名称/url名/。

或者8和9交换一下。

补充:

参考链接:http://blog.csdn.net/zhangpp12321/article/details/76076855#comments
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息