阿里云服务器上部署自己的Django项目

时间:2024-02-22 18:29:03

涉及到的工具或知识

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