前言:
用的是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