阿里雲服務器上部署自己的Django項目


涉及到的工具或知識

1, 直接在網頁上鏈接阿里雲ecs

2, 使用git進行源碼控制和上傳到服務器

3, 使用 git hooks 實現自動部署

4, 部署方案: Nginx, Gu 你湊熱鬧, virtual 惡女, supervisor, 

5, 同一台服務器上可以布置兩個,甚至更多網站

 

一. 

  1, 一台阿里雲服務器

阿里雲服務器

 

2, 進入控制台,查看實例列表

 

 

 

3, 重置服務器密碼(如果在購買是選的是已經設置就可以跳過這個步驟)

點擊服務器實例右側的“管理”,進入實例詳情 

 

點擊“重置密碼” 

 

 

 阿里雲要求密碼需要同時包含大小寫字母和數字 

重置密碼后需要重啟服務器 

 

 

注意查看服務器狀態 (直到狀態為運行中,即為重啟完成,進行下一步操作) 

 

 4, 鏈接服務器

在剛才“重置密碼”的旁邊有個“更多”按鈕,點開下拉菜單即可找到“連接管理終端”的選項。

 

 

此時會彈出一個窗口,提示系統指定的終端管理密碼,這個密碼需要記住,在連接管理終端的時候需要輸入。 
成功后出現下面的界面,需要點擊左側下拉菜單中的“連接管理終端”

 

 

點擊后出現輸入服務器用戶名和密碼的命令行界面 
用戶名是root,密碼是剛才重置密碼時設置的密碼。 
PS: 輸入密碼時命令行不會顯示輸入內容,正確輸入后回車就可以了。

 

 

二, 涉及到的軟件介紹

1, ginx: 反向代理服務器,處理靜態資源,負載均衡等。  

2, virtualenv: 創建獨立的 python 環境。 

3, gunicorn: Python WSGI HTTP Server for UNIX。

4, supervisor: 基於linux操作系統的一款服務器管理工具,用以監控服務器的運行,發現問題能立即自動預警及自動重啟等功能。 

 

1.系統更新和軟件安裝

  * 更新系統(最新的可以跳過啦)

1、yum info updates 查看版本或者軟件的版本號

2、yum update

 

 * 安裝數據庫MySQL

一, rpm 安裝

 1,需要的軟件包:(5.5為例,https://dev.mysql.com/downloads/mysql/5.5.html#downloads)

 
         

    MySQL-client-5.5.48-1.linux2.6.i386.rpm

 
         

    MySQL-server-5.5.48-1.linux2.6.i386.rpm


2, 檢查是否已經安裝mysql
        rpm -qa|grep -i mysql     
如果沒有任何輸入證明沒有安裝過,如果安裝過需要卸載的話用rpm -e 軟件包名  卸載   
3, 安裝服務端,紅色框表示:mysql默認創建了一個root用戶,但是沒有密碼,需要你后期指定

 

4,安裝客戶端

 

5)檢查是否安裝成功。mysql安裝的過程中會自動給你創建mysql用戶和用戶組,查看是否創建,這也是從側面檢查是否安裝成功;或者執行 mysqladmin --version命令檢查是否成功

 

6)mysql啟動和停止。mysql安裝過程中會把mysql命令注冊成服務,所以可以通過service方式啟動和停止

  7)連接

    首次連接,不需要密碼。mysql命令默認root用戶,默認本機ip,默認3306端口,而root用戶默認又沒有密碼,so就直接連上啦

 

給root設置密碼
 8)設置開機啟動mysql

    more /etc/inittab查看系統默認啟動級別,我的是3

    所以使用chkconfig --level 3 mysql on設置開機啟動

9)修改配置文件位置到etc下面

 

10, 修改字符編碼

先查看字符集:show variables like 'character%'; 看到默認使用的字符集是latin1

 

修改my.cnf文件

      [client]

      default-character-set = utf8 

      [mysql]

      default-character-set = utf8 

      [mysqld]

      character_set_server=utf8
      character_set_client=utf8
      collation-server=utf8_general_ci

      init_connect='SET NAMES utf8'

wq保存退出, 重啟mysql

  11)其他可選配置

    可以在my.cnf中設置數據文件的存放目錄:

    datadir                        = /var/lib/mysql/

 
        

 2, 綠色安裝方式

1)需要的軟件包,以Percona5.5為例
    Percona-Server-5.5.30-rel30.2-500.Linux.x86_64.tar.gz
    Percona-Server-client-55-5.5.35-rel33.0.611.rhel6.x86_64.rpm
    Percona-Server-shared-55-5.5.35-rel33.0.611.rhel6.x86_64.rpm
  2)解壓,建議解壓到/usr/local/mysql/目錄
    Percona-Server-5.5.30-rel30.2-500.Linux.x86_64.tar.gz到/usr/local/mysql/目錄
  3.查看依賴
    ldd /usr/local/mysql/bin/mysqld    我的報以下信息
    linux-vdso.so.1 =>  (0x00007fff783ff000)
            libpthread.so.0 => /lib64/libpthread.so.0 (0x00007facd19bb000)
            libaio.so.1 => /lib64/libaio.so.1 (0x0000003548a00000)
            libm.so.6 => /lib64/libm.so.6 (0x00007facd1736000)
            librt.so.1 => /lib64/librt.so.1 (0x00007facd152e000)
            libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007facd12f7000)
            libdl.so.2 => /lib64/libdl.so.2 (0x00007facd10f2000)
            libssl.so.6 => not found
            libcrypto.so.6 => not found
            libc.so.6 => /lib64/libc.so.6 (0x00007facd0d5d000)
            /lib64/ld-linux-x86-64.so.2 (0x00007facd1be5000)
            libfreebl3.so => /lib64/libfreebl3.so (0x00007facd0b5a000)
  4.安裝缺少的依賴,然后做軟連接
    yum -y install libssl.so.6 安裝
    find / -name "libssl.so*"
    找到合適的文件。然后做軟連接
     ln -s /usr/lib64/libssl.so.1.0.1e /lib64/libssl.so.6
    
    find / -name "libcrypto.so*"
    找到合適的文件。然后做軟連接
    ln -s /usr/lib64/libcrypto.so.1.0.1e /lib64/libcrypto.so.6
 
  5.在Centos中創建mysql用戶組和用戶,這個用戶其實可以不用登陸這個功能,所以設置-s /sbin/nologin參數,-M表示不創建用戶目錄
  groupadd mysql
  useradd mysql -g mysql -M -s /sbin/nologin
 
  6.執行安裝
  /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql  --datadir=/var/lib/mysql --user=mysql
 
  7.添加到系統服務
  cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld
 
  8.開機啟動
  chkconfig --add mysqld
 
  9.替換OR修改/etc/my.conf 
 
  10.啟動服務
  service mysqld start
  PS:如果my.conf中沒有配置basedir會報:
  [root@wangxin ~]# service mysqld start
  /etc/init.d/mysqld: line 256: my_print_defaults: command not found
  /etc/init.d/mysqld: line 276: cd: /usr/local/Percona-Server-5.5.30-rel30.2-500.Linux.x86_64: No such file or directory
  Starting MySQL (Percona Server)Couldn't find MySQL server ([失敗]ocal/Percona-Server-5.5.30-rel30.2-500.Linux.x86_64/bin/mysqld_safe)
 
  11.登陸
  首次登陸不需要密碼。登陸成功后修改root密碼,並開啟root遠程登錄
  use mysql
  update user set password=PASSWORD('123456') where user='root';
  Grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
  flush privileges;
  重新登陸
 
  PS:如果登錄的時候提示沒有mysql command需要安裝mysql client 安裝
  rpm -ivh Percona-Server-shared-55-5.5.35-rel33.0.611.rhel6.x86_64.rpm
  rpm -ivh Percona-Server-client-55-5.5.35-rel33.0.611.rhel6.x86_64.rpm
 
  PS:如果安裝的時候報這個錯error: Failed dependencies:
  /usr/bin/perl is needed by MySQL-server-5.5.28-1.linux2.6.i386
  安裝yum  -y install perl
 
  12)防火牆添加mysql端口
  vim /etc/sysconfig/iptables
  service iptables restart
View Code

 * 安裝virtualenv

yum install python-pip python-dev python-virtualenv
如果已經安裝pip可以直接下面命令
>pip install virtualenv
使用virtualenv創建python環境如下,此命令會在當前目錄創建一個ENV目錄,python的環境信息在此目錄中
>virtualenv --system-site-packages ENV
virtualenv環境激活如下,<ENV>為上一步創建的目錄名,即環境名,執行這個命令后命令行提示符的前面會出現(ENV)環境標示,表示已經激活virtualenv
>source <ENV>/bin/activate
(ENV)[root@centos-linux ~]#
關閉virtualenv,直接執行deactivate
(ENV)[root@centos-linux ~]#deactivate
[root@centos-linux ~]#

 

* 安裝Supervisor

1, 鏈接參考     2, http://supervisord.org/installing.html

 

PS: 可以使用右上角的“復制命令輸入”將命令粘貼進來 

 

過程中會提示需要多少的磁盤空間,如果空間夠用的話選擇 yes 就可以繼續了,耐心等待更新包安裝

 

2. 創建一個權限組來管理應用

出於安全和方便管理的目的,使用專門的用戶組來操作web應用

  添加用戶組

sudo groupadd --system webapps

命令解釋: 
groupadd 添加用戶組 
–system 指定將要添加的用戶組是系統級別的 
webapps 用戶組的名字,也可以叫djangoapps等,起名字最好有一定的意義 

  * 添加用戶

 sudo useradd --system --gid webapps --shell /bin/bash --home /webapps/hello_django user_hello_django
  命令解釋: 
  useradd 添加用戶 
  –gid 指定用戶所屬的組,后面緊跟的webapps就指定了用戶屬於webapps組 
  –shell 用戶使用shell的路徑,即/bin/bash 
  –home 用戶home文件夾位置,即/webapps/hello_django,這個目錄將是web應用的根目錄 
  user_hello_django 用戶名(起名字要有辨識度,最好能自解釋)

  為用戶設置密碼

sudo passwd user_hello_django

  給用戶添加執行sudo命令的權限

vim /etc/sudoers

  在root ALL=(ALL:ALL) ALL 下面添加一行:

user_hello_django ALL=(ALL:ALL) ALL

  創建目錄並授權

    sudo mkdir -p /webapps/hello_django/
       sudo chown user_hello_django /webapps/hello_django/

命令解釋: 
mkdir 創建文件夾 
chown 改變文件或文件夾的所有者 
這幾條命令都是linux的基礎命令,有疑問可以百度之。

3.創建獨立的python運行環境

切換用戶

sudo su - user_hello_django

進入應用目錄

cd /webapps/hello_django/

創建環境 

virtualenv -p /usr/bin/python3.4 .

 

命令解釋: 
- p /usr/bin/python3.4 表示創建python3.4的運行環境,也可以通過改變參數創建其他python版本的環境 
- . 表示當前目錄,也可以指定完整路徑,如/webapps/hello_django/ 
* 激活環境 

source bin/activate 

4.安裝Django和Gunicorn

 pip install django
 pip install gunicorn
 pip install psycopg2

    • 創建一個Django項目,名稱為hello 
      django-admin.py startproject hello
    • 驗證Django是否正常工作 
      cd hello 
      python manage.py runserver 112.74.123.69:8000 
      命令解釋: 
      112.74.123.69 為服務器的IP地址,注意替換為自己的

在瀏覽器中輸入112.74.123.69:8000

5.創建Gunicorn的啟動腳本

  • 創建文件/webapps/hello_django/bin/gunicorn_start
cd /webapps/hello_django/bin/
vim gunicorn_start

 

  • 在vim中編輯文件 
    輸入i進入編輯模式 
    粘貼文本內容 
    :w 保存修改 
    :q 退出
NAME="hello_app"                                  # Django應用的名稱
DJANGODIR=/webapps/hello_django/hello             # Django 項目的目錄
SOCKFILE=/webapps/hello_django/run/gunicorn.sock  
USER=user_hello_django                                        # 用戶名
GROUP=webapps                                     # 用戶組
NUM_WORKERS=3                                     # 一般是服務器使用CPU的個數X2+1,所以一個CPU的話,worker就是3
DJANGO_SETTINGS_MODULE=hello.settings             # Django應用使用的settings文件
DJANGO_WSGI_MODULE=hello.wsgi                     # WSGI 模塊名稱
 
        

給文件添加可執行權限 

sudo chmod u+x bin/gunicorn_start

 

6.創建Supervisor配置文件

在/etc/supervisor/conf.d目錄下創建文件hello.conf 

[program:hello]
command = /webapps/hello_django/bin/gunicorn_start                    #指定啟動Django app的命令,也是剛才創建的gunicorn腳本
user = user_hello_django                                                          #用戶名
stdout_logfile = /webapps/hello_django/logs/gunicorn_supervisor.log   #運行日志存放位置
redirect_stderr = true                                                #把stderr日志也放在剛才的文件里

 

注意到日志文件還沒有創建,我們來創建一下:

 mkdir -p /webapps/hello_django/logs/
 touch /webapps/hello_django/logs/gunicorn_supervisor.log 

 

可以使用下面的命令控件Supervisor

sudo supervisorctl reread #修改配置文件后需要使用 
sudo supervisorctl update #更新狀態,會啟動剛配置的應用 
sudo supervisorctl status hello #查看應用狀態 
sudo supervisorctl stop hello #停止應用 
sudo supervisorctl start hello #啟動應用 
sudo supervisorctl restart hello #重啟應用

 

7. 創建Nginx虛擬服務器

在目錄/etc/nginx/sites-available下創建hello文件

upstream hello_app_server {
  server unix:/webapps/hello_django/run/gunicorn.sock fail_timeout=0;
}

server {
    listen   80;
    server_name hello.test;

client_max_body_size 4G;

access_log /webapps/hello_django/logs/nginx-access.log;
error_log /webapps/hello_django/logs/nginx-error.log;

location /static/ {
    alias   /webapps/hello_django/static/;
}

location /media/ {
    alias   /webapps/hello_django/media/;
}

location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    if (!-f $request_filename) {
        proxy_pass http://hello_app_server;
        break;
    }
}

 

  • 執行命令進行文件鏈接 
sudo ln -s /etc/nginx/sites-available/hello /etc/nginx/sites-enabled/hello 
sudo service nginx restart 

 


命令解釋: 
  ln -s 建立兩個文件之間的同步鏈接,這時/etc/nginx/sites-available/hello和/etc/nginx/sites-enabled/hello的內容將會完全相同,以后要修改的話也只需要修改/sites-available/hello的內容,會自動同步

  如果nginx restart 顯示 fail, 可以使用sudo nginx -t命令查看失敗原因

注意在Django的settings文件中INSTALLED_APPS加入gunicorn

修改內容后:

sudo service nginx restart
sudo supervisorctl restart hello   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM