Home >  > 京东python开发五(步署到服务器)

京东python开发五(步署到服务器)

0

前言:

用的是Linux 32位(ubuntu-14.04-server),本来以为布署会很简单,可是一上来就遇到了坑,执行sudo apt-get update的时候出现如下的错误:

W: Duplicate sources.list entry http://security.ubuntu.com/ubuntu/ trusty-security/main i386 Packages (/var/lib/apt/lists/security.ubuntu.com_ubuntu_dists_trusty-security_main_binary-i386_Packages)
W: Duplicate sources.list entry http://security.ubuntu.com/ubuntu/ trusty-security/restricted i386 Packages (/var/lib/apt/lists/security.ubuntu.com_ubuntu_dists_trusty-security_restricted_binary-i386_Packages)
W: Duplicate sources.list entry http://security.ubuntu.com/ubuntu/ trusty-security/universe i386 Packages (/var/lib/apt/lists/security.ubuntu.com_ubuntu_dists_trusty-security_universe_binary-i386_Packages)
W: Duplicate sources.list entry http://security.ubuntu.com/ubuntu/ trusty-security/multiverse i386 Packages (/var/lib/apt/lists/security.ubuntu.com_ubuntu_dists_trusty-security_multiverse_binary-i386_Packages)
W: You may want to run apt-get update to correct these problems

解决方法:
修改/etc/apt/sources.list,确保里面没有重复的内容。
我是直接进入/etc/apt/目录,然后vim sources.list,将面的重复的内容注释掉。

然后再执行sudo apt-get update就不会报错了。

一、配置服务器

1、创建新用户

useradd -m -s /bin/bash yangx       # 在 root 用户下运行这条命令创建一个新用户
usermod -a -G sudo yangx            # 把新创建的用户加入超级权限组
passwd yangx                        # 为新用户设置密码
su - yangx                          # 切换到创建的新用户

2、更新服务器

yangxg@localhost:~$ sudo apt-get update
yangxg@localhost:~$ sudo apt-get upgrade

3、安装pip3及python

sudo apt-get install python3-pip
sudo apt-get install python3.5
pip3 install virtualenv

然后安装python,直接使用sudo apt-get install python3.6.5命令提示

sudo: unable to resolve host ebs-19644
[sudo] password for kevin168:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package python3.6.5
E: Couldn't find any package by regex 'python3.6.5'

在网上找了一下原因,因为python 3.6 新版没有发布到ubuntu的正式仓库中,需要通过第3方仓库来做。

sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt-get update
sudo apt-get install python3.6

不过我没有使用这种方法,直接使用sudo apt-get install python3.5 安装python 3.5的版本。

小提示:

在ubuntu 16.04版本中,系统默认安装 了python 2.7和3.5版本,所以,如果有ubuntu 16.04,以后就直接使用ubuntu 16.04吧。

二、数据库

(1)安装数据库

sudo apt-get install mysql-server mysql-client
sudo apt-get install libmysqld-dev

通过下述命令检查之后,如果看到有mysql的socket处于 listen状态则表示安装成功

sudo netstat -tap | grep mysql

查看mysql进程是否运行

ps -ef | grep mysql

(2)设置数据库
安装完数据库之后,我想通过Navicat连接数据库,可是老是提示:10061 unknown error。于是按网上教程执行以下操作:

mysql -u root -p     #登陆mysql数据库
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;  #授权非本机用户登陆数据库
flush privileges;

有人说执行以上两条命令就可以了,可是我测试了还是不行。

进入/etc/mysql/my.cnf这个文件,修改bind-address = 127.0.0.1 为bind-address = 0.0.0.0,再重启mysql,发现Navicat可以连接上。

sudo service mysql restart;

(3)新建数据库:

三、安装并开启nginx
用 Django 去获取静态文件是很耗时的,但 Nginx 可以很高效地处理,这就是我们要使用 Nginx 的原因。
Nginx不需要在虚拟环境下面安装。

yangxg@localhost:~$ sudo apt-get install nginx
yangxg@localhost:~$ sudo service nginx start

然后输入网址,看到如下页面说明 Nginx 启动成功了

附nginx重启的命令

sudo service nginx restart

四、创建虚拟环境

设想的网站目录是这样的:

demo.zmrenwu.com/ 这个文件夹以网站的域名命名,便于区分。env/ 是 python 虚拟环境目录。django-blog-tutorial/ 是 Django 博客项目目录。

使用以下命令,同时创建sites文件夹、www.xx.com文件夹,存放网站

mkdir -p ~/sites/www.xx.com

进入到 www.xx.com 目录下,执行以下命令创建一个django-blog-tutorial文件夹。

mkdir django-blog-tutorial

再运行以下命令,创建一个名称为env的虚拟环境

virtualenv --python=python3.5 env

看到 env 这个文件夹说明虚拟环境创建成功。

五、配置本地项目

1.修改static设置
Django 项目中会有一些 CSS、JavaScript 等静态文件,为了能够方便地让 Nginx 处理这些静态文件的请求,我们把项目中的全部静态文件收集到一个统一的目录下,这个目录通常位于 Django 项目的根目录,并且命名为 static。

首先在项目根目录建立一个static文件夹,然后修改settings.py文件:

STATIC_URL = '/static/'
# 加入下面的配置
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

2.修改debug和host

DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', 'localhost ', '.xx.com']

3.修改settings.py中的数据库设置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':  'datebasename',
        'USER': 'root',
        'PASSWORD': 'xxx',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

小提示:
网站上传成功后,如果需要在本地继续测试,则需要将上面三项内容改回来(其中本地数据库密码本人的为空)

4、生成requirements.txt

你的项目中肯定还会用到很多第三方 Python 库,一个一个地在服务器上安装?肯定不可能!只需要在本地执行一个命令,就会生成一个requirements.txt文件,里面包含了你项目中用到的所有第三方 Python 库,然后在服务器上再执行一条命令,它就会自动安装requirements.txt文件中所有的第三方 Python 库了。

进入项目的根目录,运行以下命令生成requirements.txt文件。

pip freeze > requirements.txt

六、上传代码
1. 设置SFTP上传
打开pycharm,选择Tools--Deployment--Configuration,会弹出一个窗口,然后点击窗口左上角加号,输入名称之后,选择SFTP协议,点击确认。

2.输入账号
接着在新窗口中输入远程服务器地址、端口号、用户名密码(直接用服务器的ssh账号)等信息。可以点击Test SFTP connection来测试能不能连接。

3、设定本地和服务器的文件夹

切换到Mapping标签,在Deployment path on server 'test'这一栏的最右侧,点击...按钮,选择文件上传的目标目录。

之后点击Use this server as default,就可以让这个工程一直默认上传到这个服务器的这个目录,不用多次选择。

小提示:
如果你点击的是项目根目录,点击上传的时候,根目录本身不会上传的,只会将根目录所有内容上传到服务器端对应的文件夹。如上图中,就是将本地openstack-dashboard中的所有文件,上传到服务器中的openstack-dashboard文件夹(需要事先建立)

4、上传项目
保存设置退出后,在项目根目录或者任意文件右击鼠标,可以看到Upload to test,用它就可以把代码上传到刚才的服务器了。

小知识:
使用WinSCP,同样可以实现文件的上传。

七、配置线上环境
1、安装项目的第三方包
激活虚拟环境,再进入到项目根目录,即 requirements.txt 所在的目录,安装项目的全部依赖:

yangxg@localhost:~/sites/demo.zmrenwu.com$ source env/bin/activate
(env) yangxg@localhost:~/sites/demo.zmrenwu.com$ cd django-blog-tutorial/
(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ pip install -r requirements.txt

2、收集静态文件
虚拟环境下继续运行 python manage.py collectstatic 命令收集静态文件到 static 目录下:

(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ python manage.py collectstatic

3、生成数据库

(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ python manage.py migrate

4、创建超级用户、

(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ python manage.py createsuperuser

八、配置 Nginx
1、新增配置文件
先在服务器的 /etc/nginx/sites-available/ 目录下新建一个配置文件,文件名一般就设置为域名。写上下面的配置内容:

2、将配置文件加入到启用的网站列表中去

sudo ln -s /etc/nginx/sites-available/xiaoxx.conf /etc/nginx/sites-enabled/xiaoxx.conf

九、使用 Gunicorn
1、安装Gunicorn

pip install gunicorn

2、启动Gunicorn
切换到www.xx.com/coupon/文件夹,执行以下命令。

gunicorn --bind unix:/tmp/xx.com.socket cpsite.wsgi:application

其中的cpsite要改成你自己的项目名称,即wsgi.py所在的文件夹名称。

十、测试

访问域名,终于看到自己的网站了。


如果发现还是显示的是Welcome to nginx!页面。进入sites-enabled文件夹,删除defaul.

sudo rm default

再重新访问试试。

十一、自动启动 Gunicorn
1、编写配置文件
现在 Gunicorn 是我们手工启动的,如果服务器重启了,还得手动启动Gunicorn才行,下面我们让这一过程自动化。新建一个配置文件:/etc/init/gunicorn-demo.zmrenwu.com.conf
代码如下:

start on net-device-up
stop on shutdown

respawn

setuid yangxg
chdir /home/yangxg/sites/demo.zmrenwu.com/django-blog-tutorial

exec ../env/bin/gunicorn --bind unix:/tmp/demo.zmrenwu.com.socket blogproject.wsgi:application

2、启动gunicorn
在任意目录执行

udo start gunicorn-demo.zmrenwu.com

出现“gunicorn-www.xx.com start/running, process 29336”就表示启动成功了。

而且这种方式不会在ssh客户端一直显示运行状态。

以后如果更新了代码,只要运行下面的命令重启一下 Nginx 和 Gunicorn 就可以使新的代码生效了:

sudo service nginx reload
sudo start gunicorn-www.xx.com

十二、同步数据库
1、开启“数据传输”窗口
在navicat中,选择数据库,然后执行“工具--数据传输”功能。

2、选择本地数据库和服务器上的数据库

3、选择要传输的数据表

4、开始传输

然后打开网站,就可以看到网站已经有原来的数据了。

https://blog.csdn.net/bbaiggey/article/details/53318616

备忘:
以后如果要登陆服务器,需要执行的命令:

su - kevin  
#进入www.xxx.com目录
source env/bin/activate
#如果更新了动态内容,分别执行以下命令:
sudo stop gunicorn-www.xx.com

sudo start gunicorn-www.xx.com

暧昧帖

本文暂无标签

发表评论

*

*