centos部署django:nginx+gunicorn+supervisor.md

[toc]

基礎(chǔ)環(huán)境

添加一個非root管理員

useradd -m jin
passwd jin
# 添加sudo權(quán)限
?chmod u+w /etc/sudoers
vim /etc/sudoers
chmod u-w /etc/sudoers

允許ssh登陸

vim /etc/ssh/sshd_config
PasswordAuthentication yes # 默認(rèn)
AllowUsers jin
sudo /sbin/service sshd restart

python環(huán)境的安裝

安裝pyenv
1)安裝環(huán)境

sudo yum install update
sudo  yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel

2)安裝pyenv

# 安裝git
sudo yum install git
sudo curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

3)添加pyenv到環(huán)境變量
~ 目錄下面的 .bashrc

export PATH="/home/jin/.pyenv/bin:$PATH"eval "$(pyenv init -)"eval "$(pyenv virtualenv-init -)"

4)重新加載shell配置
~ 目錄下面的 .bashrc

source  .bashrc

5)python 版本的替換和虛擬環(huán)境的安裝
先安裝 yum install gcc,
把下載的文件放入 .pyenv/cache/

sudo yum install gcc
pyenv  install --list
pyenv install 2.7.12
pyenv global 2.7.12
pyenv vietualenv 2.7.12 blog_env
pyenv versions
pyenv activate blog_env
pyenv deactivate

安裝 配置git

sudo yum install git
ssh-keygen -t rsa -C "jinzhang_hotline@163.com"
#/home/jin/.ssh/id_rsa 生成的位置

安裝MySQL-python ,PILLOW

###MySQL-python
yum install MariaDB-develpip install MySQL-python
### PILLOW
sudo yum install python-devel
sudo yum install zlib-devel
sudo yum install libjpeg-turbo-devel
pip install pillow

安裝 mysql

https://downloads.mariadb.org/mariadb/repositories/#mirror=neusoft&distro=CentOS&distro_release=centos7-amd64--centos7&version=10.1
將下列代碼加入
/etc/yum.repos.d/MariaDB.repo

# MariaDB 10.1 CentOS repository list - created 2016-10-25 07:54 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
#安裝
sudo yum install MariaDB-server MariaDB-client
sudo systemctl start mysqld.service
# 進(jìn)入數(shù)據(jù)庫
mysql -u root
use mysql;
update user set password=PASSWORD("root") where User='root';
flush privileges;
# 重啟數(shù)據(jù)庫
service mysql restart

#建立數(shù)據(jù)庫
create database if not exists sell default charset utf8 collate utf8_general_ci;

開發(fā)模式跑起來

# 同步數(shù)據(jù)庫
python manage.py migrate
# 收集靜態(tài)文件
python manage.py collectstatic

安裝ftp服務(wù)

# 停用防火墻
systemctl stop firewalld.service 
systemctl disable firewalld.service 
# 啟用iptables
systemctl start iptables.service
systemctl enable iptables.service
# 安裝vsftpd
sudo yum install vsftpd
systemctl start vsftpd.service
systemctl enable vsftpd.service

  • 1 安裝
sudo yum install vsftpd
  • 2 配置
sudo vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
# 安裝完成vsftpd后就有有個ftp用戶
sudo passwd ftp
# selinux臨時設(shè)置
setenforce 0
# selinux永久設(shè)置
semanage fcontext -a -t public_content_t /var/ftp
restorecon -R -v /var/ftp/
ls -dZ /var/ftp/ # 查看是否有public_content_t
semanage fcontext -a -t public_content_rw_t "/var/ftp/pub(/.*)?"
restorecon -R -v /var/ftp/pub
setsebool -P allow_ftpd_anon_write on
getsebool -a|grep ftp #查看

安裝配置 gunicorn

在項目根目錄下新建gunicorn.conf.py

vim gunicorn.conf.py
import multiprocessing
bind = "127.0.0.1:8000"
workers = 2
errorlog = "/home/jin/sell/gunicorn.error.log"
#accsessing = "./gunicorn.access.log"
#loglevel = "debug"
proc_name = "gunicorn_sell"

安裝配置 nginx

  • 添加源
    新建/etc/yum.repos.d/nginx.repo
# Replace “OS” with “rhel” or “centos”, depending on the distribution used, and “OSRELEASE” with “5”, “6”, or “7”, for 5.x, 6.x, or 7.x versions, respectively
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/7/$basearch/
gpgcheck=0
enabled=1
sudo yum install nginx
  • 添加權(quán)限
/etc/nginx/ngnix.conf
修改 user www; 為 user jin;
  • 在項目根目錄下新建nginx.conf
vim nginx.conf
server {
     listen 80;
     server_name 101.201.238.27;
     access_log /home/jin/sell/nginx.access.log;
     error_log /home/jin/sell/nginx.error.log;
      location / {
         proxy_pass http://127.0.0.1:8000;
         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/jin/sell/static/robots.txt;
     #}
      #location /favicon.ico {
     # alias /home/jin/sell/static/img/favicon.ico;
     #}
      location  /static  {
         alias    /home/jin/sell/site_static;
         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_project.conf

sudo ln -s /home/jin/sell/nginx.conf /etc/nginx/conf.d/sell_nignx.conf

django配置

django setting
ALLOWED_HOSTS = ['localhost','101.201.238.27']

配置wsgi 在django的目錄下修改

import sys
import site
import os

# site-packages
site.addsitedir('~/.pyenv/versions/healthydoc_env/lib/python2.7/site-packages')  # changed to your env
PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, PROJECT_DIR)

# activate env
activate_env = os.path.expanduser("~/.pyenv/versions/healthydoc_env/bin/activate_this.py")  # changed to your env
execfile(activate_env, dict(__file__=activate_env))

from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "healthy_doc.settings")  # changed to your settings
application = get_wsgi_application()
### 如果要外部訪問啰挪,則打開80端口:
可以選擇臨時關(guān)閉防火墻
sudo service iptables stop
# 查看開放端口
# iptables -L -n --line-numbe  或者開放一些需要的端口蒿往,比如 80
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
  sudo /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
# sudo service iptatbles save

在/home/jin/sell 運(yùn)行一下gunicorn: 用django的wsgi

sudo nohup gunicorn sell.wsgi:application -c /home/jin/sell/gunicorn.conf.py&

supervisor

supervisor就是用Python開發(fā)的一套通用的進(jìn)程管理程序攒霹,能將一個普通的命令行進(jìn)程變?yōu)楹笈_daemon,并監(jiān)控進(jìn)程狀態(tài)孔庭,異常退出時能自動重啟。

  • 安裝
sudo yum install supervisor
# ubuntu
sudo apt-get install supervisor
  • 配置
    然后陡厘,給我們自己開發(fā)的應(yīng)用程序編寫一個配置文件灭必,讓supervisor來管理它。每個進(jìn)程的配置文件都可以單獨(dú)分拆掸刊,放在/etc/supervisor/conf.d/目錄下免糕,以.conf作為擴(kuò)展名,例如,app.conf定義了一個gunicorn的進(jìn)程
[program:app]
command=/usr/bin/gunicorn -w 1 wsgiapp:application
directory=/srv/www
user=www-data

其中说墨,進(jìn)程app定義在[program:app]中,command是命令苍柏,directory是進(jìn)程的當(dāng)前目錄尼斧,user是進(jìn)程運(yùn)行的用戶身份。

  • 啟用
    sudo systemctl restart supervisord

重啟supervisor试吁,讓配置文件生效棺棵,然后運(yùn)行命令supervisorctl啟動進(jìn)程

 supervisorctl start app
 supervisorctl stop app
  • 在命令使用變量
    如果要在命令行中使用變量,就需要自己先編寫一個shell腳本
#!/bin/sh
/usr/bin/gunicorn -w `grep -c ^processor /proc/cpuinfo` wsgiapp:application

然后熄捍,加上x權(quán)限烛恤,再把command指向該shell腳本即可。

參考

http://www.reibang.com/p/288ebe5396a0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末余耽,一起剝皮案震驚了整個濱河市缚柏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碟贾,老刑警劉巖币喧,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異袱耽,居然都是意外死亡杀餐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門朱巨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來史翘,“玉大人,你說我怎么就攤上這事冀续∏矸恚” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵沥阳,是天一觀的道長跨琳。 經(jīng)常有香客問我,道長桐罕,這世上最難降的妖魔是什么脉让? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任柬帕,我火速辦了婚禮问词,結(jié)果婚禮上蚀狰,老公的妹妹穿的比我還像新娘忱嘹。我一直安慰自己捺癞,他們只是感情好猾瘸,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布蓉媳。 她就那樣靜靜地躺著蜕乡,像睡著了一般嫁怀。 火紅的嫁衣襯著肌膚如雪设捐。 梳的紋絲不亂的頭發(fā)上借浊,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機(jī)與錄音萝招,去河邊找鬼蚂斤。 笑死,一個胖子當(dāng)著我的面吹牛槐沼,可吹牛的內(nèi)容都是我干的曙蒸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼岗钩,長吁一口氣:“原來是場噩夢啊……” “哼纽窟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起兼吓,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤臂港,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后周蹭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趋艘,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年凶朗,在試婚紗的時候發(fā)現(xiàn)自己被綠了瓷胧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡棚愤,死狀恐怖搓萧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宛畦,我是刑警寧澤瘸洛,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站次和,受9級特大地震影響反肋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜踏施,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一石蔗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧畅形,春花似錦养距、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春耘纱,著一層夾襖步出監(jiān)牢的瞬間敬肚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工束析, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留帘皿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓畸陡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親虽填。 傳聞我的和親對象是個殘疾皇子丁恭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容