程序员Java-Python-Django社区

皮卡丘也会配置的环境——Django服务器部署

2018-10-21  本文已影响14人  远月soul

配置环境

本地系统: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次才得以解决,这是我个人第一篇技术博客,希望能帮助更多有需要的人。

上一篇下一篇

猜你喜欢

热点阅读