皮卡丘也会配置的环境——Django服务器部署
配置环境
本地系统:Ubuntu 18.04 或 mac
腾讯云服务器:Ubuntu 16.04
数据库:MySQL
服务器端配置:Django+uwsgi+nginx
前言
写了一个微信公众号的后台管理界面,第一次将Django项目部署到正式的服务器上,花了整整一天配置环境,中途踩了不少坑。写这篇教程,是从一个小白的角度出发,手把手介绍Django服务器端的搭建,希望大家在搭建过程中能少走弯路。
在此先感谢 @nocmt 大佬写的教程,对我这次环境的配置帮助颇多,本文章在此基础上进行一定程度的扩展与修改,去掉了一些不必要的步骤,增加了自己踩的一些坑。参考教程链接:https://www.jianshu.com/p/d6f9138fab7b
具体步骤
1、开始
Ubuntu命令行输入sudo -i
进入root模式,本教程默认在root模式下进行。要退出root请按Ctrl+D
或输入logout
命令。
16.04版本中apt-get
命令可以直接使用apt
命令,本文采用后者,版本较低请将文中命令对应替换成前者。
本篇文章本地操作系统使用的是Ubuntu 18.04,用Mac的同学也可以参照本文直接安装,使用Windows系统的同学请自行查看XShell的用法,或者参照腾讯云给的官方教程连接上服务器。
官方教程地址:https://cloud.tencent.com/document/product/213/5436
2、连接服务器
Ubuntu连接远程服务器非常简单(Mac由于使用Linux内核同理),首先,在你的电脑上安装ssh
apt update
apt install openssh-server
service ssh start
这样你的ssh服务就成功安装并启动。
下面链接远程服务器,使用分发的ip和密码
ssh 你服务器的用户名@你服务器的ip
在此会让你输入密码,输入即可,可以跳转到你的远程服务器了,此时你会发现命令行前端状态已经变成你服务器的名字了,说明成功登录服务器。
进入服务器同样输入sudo -i
进入root模式。
本教程需要多次修改配置文件,vim大神请无视,不会使用vim的新手请使用nano,安装命令
apt install nano
nano的使用就不介绍了,只要进去就知道皮卡丘都会用,根本不需要教程。
3、配置python环境
这里先介绍一个命令
ls
用途是查看当前文件夹下的项目,请妥善利用。
Ubuntu 16.04默认自带了Python3.5的环境,命令行输入python3
,若进入python3环境说明安装完成,否则请自行搜索安装。需要python3.6或更高版本的人请自行解决。
4、安装MySQL
直接上命令行代码
apt install mysql-server
#此处按照要求配置密码
mysql_secure_installation
#按照要求配置,所有y/n全部用y
#下面修改MySQL配置文件
cd /etc/mysql/
nano my.cnf
里面应该有些东西,不要管,拉到文件尾添上这些东西
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
character-set-server=utf8
[mysql]
no-auto-rehash
default-character-set=utf8
重启并连接MySQL
service mysql restart
如果没有报错直接按照教程继续进行。此步可能报错,我在这一步踩了坑,下面贴出解决方法,方便大家参考:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)
可尝试下面两篇连接中给的方法:
https://dba.stackexchange.com/questions/98467/how-to-solve-cant-connect-to-local-mysql-server-through-socket-error
https://stackoverflow.com/questions/19658891/error-2002-hy000-cant-connect-to-local-mysql-server-through-socket-var-run
很抱歉我已经忘了自己用的是哪一个了,大家都试试吧。
解决完报错后连接mysql
mysql -u root -p
create database '你的数据库名称'
输入quit
退出
5、创建虚拟环境
我知道你们可能在本地使用了virtualenv等虚拟环境,但在本教程中推荐使用vcmt,python3.5自带,不需要任何安装。
创建并激活虚拟环境虚拟环境
python3 -m venv /home/vcmt
source /home/vcmt/bin/activate
命令行前面应该多出一个(vcmt)
代表完成了这一步。
6、将本地文件打包上传至服务器
这一步可以直接从git上下载,如果你从git上下载,请自行研究,如果从本地上传,可以参考下面的步骤。
下面操作在本地完成。
首先修改settings.py的ALLOWED_HOSTS
这一项,将你服务器的域名填入,不要http
,不然运行时会报错。
删除各app/migrations/下的以数字开头的数据库同步日志文件。
在Django的主目录下打开命令行,运行
pip freeze > requirements.txt
看到多出一个requirements.txt 文件,打开,将里面的时间和pylint等项目删除,只保留你需要的环境包。
右键将文件夹压缩成压缩包zip,在文件夹目录下打开命令行
scp -r 文件名.zip 服务器用户名@服务器ip:/home/用户名/
输入密码上传。
下面在服务器上:
cd /home/用户名
unzip 上传的文件
和Windows解压缩一样,该目录下出现了你的文件夹。
rm 上传的文件
删除压缩包。
7、在服务器上安装依赖包
cd 到你Django的主目录下
pip -r install requirements.txt
安装了对应的依赖包文件。
如果安装时很有可能出现mysqlclient报错,用nano打开requirements.txt,删掉mysqlclient那一行,重新运行安装依赖包。mysqlclient按照下面的方法安装。
apt update
apt install mysql-server
apt install mysql-client
apt-get install libmysqlclient-dev
apt-get install python-dev
pip install mysqlclient
下面迁移数据库,注意更改你的configs.json文件。具体更改每个人都不一样,不细说。
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py collectstatic
测试是否正确安装
python manage.py runserver 0:80
正常安装的话应该没有报错信息,大功告成,到这一步实际上你将Django放在后台运行其他人已经可以访问了。但是我们还要继续配置更稳定的环境。
8、安装并配置uwsgi
先给大家介绍一个命令,因为很多程序被关闭后依然不会释放占用的端口,所以如果发现端口被占用,运行下面的命令查杀。这句话要经常使用,以80端口为例:
fuser -k 80/tcp
安装uwsgi
pip install uwsgi
启动测试
uwsgi --http :80 --chdir /home/用户名/项目名称 -w 项目名称.wsgi
正确的话恭喜你!错误的话也就和我一样踩坑了,请检查项目路径以及是否正确填写了绝对路径。
下一步填写配置文件
mkdir -p /etc/uwsgi/sites
cd /etc/uwsgi/sites
nano 项目名称.ini
填入以下内容:
[uwsgi]
project = 项目名称
base = /home/用户名
chdir = %(base)/%(project)
module = %(project).wsgi:application
master = true
processes = 5
socket = %(base)/%(project)/%(project).sock
chmod-socket = 666
vacuum = true
保存并退出
9、安装并配置nginx
apt install nginx
nano /etc/nginx/sites-available/项目名称
填入以下内容:
server {
listen 80;
server_name read.nocmt.com;
location /static/ {
root /home/用户名/项目名称;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/home/用户名/项目名称/项目名称.sock;
}
}
保存并退出,运行下面代码,注意空格
ln -s /etc/nginx/sites-available/项目名称 /etc/nginx/sites-enabled/
service nginx configtest
返回OK没有问题。
10、启动网站项目
重启服务
service nginx restart
uwsgi /etc/uwsgi/sites/项目名称.ini -d /home/用户名/项目名称/项目名称.log
查看网站是否能正常运行,到这一步没有问题就 OK啦!
最后更改你的configs.json文件
DEBUG = False
重启一次服务,命令行输入
tmux attach
按Ctrl+D
返回,大功告成!
总结
这次环境配置真的是相当耗时,第一次踩了很多坑,很多问题Google了n次才得以解决,这是我个人第一篇技术博客,希望能帮助更多有需要的人。