涉及到的工具或知識
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
* 安裝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