涉及到的工具或知识
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