Ubuntu 20.04 server乌班图服务器部署django,uwsgi,mysql,nginx细节

**

谨以此篇文章献给那些像我一样,对于linux系统服务器一脸懵逼的朋友们!懵逼不要怕,胆大心细耐心,不行就重置服务器,从头再来.

**
*最近抢了一个月的华为云服务器,没事就开始折腾,华为云能使用的镜像很多,刚试过了centos7,最开始用的是centos8结果连yum安装个软件都搞不定.果断换成了7,在前一篇文章已有介绍.centos的稳定众所周知,就是包都太陈旧,自己编译安装,问题多多,累觉不爱,所以决定再测试下ubuntu作为服务器的配置,不试不知道,试完了才知道真香,ubuntu自带的python版本居然是3.8,果然比较年轻化,一套配置下来简直行云流水.原谅我无耻的凑字数.*附上deepin系统截图:
在这里插入图片描述漂亮的不要不要的,就是内存烧的狠,16g用了一半吧.

安装流程如下:

  1. 如果是win10,最好安装openssh进行远程管理,由于我目前用的是deepin系统,就不用安装了,需要安装的小伙伴,可以看我上一篇文章,里面有链接地址.点击直达centos配置文章

  2. 通过ssh连接服务器,更新系统.

  3. 安装django,pillow库,副文本插件django-ckeditor,数据库操作模块mysqlclient,uwsgi,

  4. 上传本地项目文件.

  5. 安装mysql,配置数据库密码,连接django测试是否联通.数据库迁移.

  6. 配置uwsgi,安装nginx并配置,测试连通性.

  7. 项目布置完成.

首先说明本人并不十分精通linux系统的操作,只能说是新手,所以这篇文章会更倾向于,像我一样的,搞完了服务器就一脸懵逼的朋友们.
在这里插入图片描述首先通过ssh连接远程服务器
在这里插入图片描述连接命令为:ssh 登陆用户名@服务器ip
第一次连接会让你确认,然后输入密码.之后就进入到服务器
不管三七二十一,先升级系统,输入以下命令

<span class="token function">apt</span> update <span class="token function">apt</span> upgrade
<span class="token function">apt</span> update <span class="token function">apt</span> upgrade 
apt update apt upgrade

一顿输出之后,我们需要配置pip换源.因为官方源实在太慢

<span class="token function">mkdir</span> /root/.pip
 <span class="token function">mkdir</span> /root/.pip 
mkdir /root/.pip

之后在本地新建一个文本文件pip.conf里面内容如下:

<span class="token punctuation">[</span>global<span class="token punctuation">]</span> index-url <span class="token operator">=</span> https://pypi.tuna.tsinghua.edu.cn/simple <span class="token punctuation">[</span>install<span class="token punctuation">]</span> trusted-host <span class="token operator">=</span> https://pypi.tuna.tsinghua.edu.cn
<span class="token punctuation">[</span>global<span class="token punctuation">]</span> index-url <span class="token operator">=</span> https://pypi.tuna.tsinghua.edu.cn/simple <span class="token punctuation">[</span>install<span class="token punctuation">]</span> trusted-host <span class="token operator">=</span> https://pypi.tuna.tsinghua.edu.cn 
[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-host = https://pypi.tuna.tsinghua.edu.cn

接下来重点来了,我们没有安装ftp服务,但是我们可以用ssh的scp命令把本地文件上传到服务器.要重新开一个shell哦,因为我们是在本地操作.
在这里插入图片描述

<span class="token function">scp</span> 本地文件路径 服务器用户名@服务器ip:服务器目的地址
<span class="token function">scp</span> 本地文件路径 服务器用户名@服务器ip:服务器目的地址 
scp 本地文件路径 服务器用户名@服务器ip:服务器目的地址

经过以上操作pip换源完成,下一步更新pip,需要登陆到服务器操作.命令如下:

python3 -m pip <span class="token function">install</span> --upgrade pip
python3 -m pip <span class="token function">install</span> --upgrade pip 
python3 -m pip install --upgrade pip

更新完成,安装django,uwsgi,pillow,django-ckeditor,mysqlclient

pip3 <span class="token function">install</span> django pip3 <span class="token function">install</span> django-ckeditor pip3 <span class="token function">install</span> pillow pip3 <span class="token function">install</span> uwsgi
pip3 <span class="token function">install</span> django pip3 <span class="token function">install</span> django-ckeditor pip3 <span class="token function">install</span> pillow pip3 <span class="token function">install</span> uwsgi 
pip3 install django pip3 install django-ckeditor pip3 install pillow pip3 install uwsgi

以上都非常顺利,但是在centos配置的时候,就需要安装好多依赖才行,可见乌班图还是很适合小白的.
安装mysqlclient模块用于连接mysql数据库
必须按照下方两步安装否则会报错,坑我已经踩过了

<span class="token function">apt</span> <span class="token function">install</span> libmysqlclient-dev pip3 <span class="token function">install</span> mysqlclient
<span class="token function">apt</span> <span class="token function">install</span> libmysqlclient-dev pip3 <span class="token function">install</span> mysqlclient 
apt install libmysqlclient-dev pip3 install mysqlclient

至此python,和djago需要的模块我们全部安装完成,接下来安装nginx,mysql
一步搞定.

<span class="token function">apt</span> <span class="token function">install</span> nginx
<span class="token function">apt</span> <span class="token function">install</span> nginx 
apt install nginx
<span class="token function">apt</span> <span class="token function">install</span> mysql-server
<span class="token function">apt</span> <span class="token function">install</span> mysql-server 
apt install mysql-server

配置mysql
虽然我们是小白,但是基于基础的安全性,我们还是要配置一下mysql
输入以下命令

mysql_secure_installation
mysql_secure_installation 
mysql_secure_installation

在这里插入图片描述在这里插入图片描述以上摘自<linux就该这么学>该书不错,通俗易懂,在此推荐一下!!

接下来是重点,成败在此
首先在服务器建立一个项目文件夹,然后我们在本地通过scp命令,把项目文件夹上传至服务器.
服务器端:

<span class="token function">mkdir</span> /home/www
<span class="token function">mkdir</span> /home/www 
mkdir /home/www

本地端
进入我们的项目文件夹,新建文件uwsgi.ini,为了方便配置,我们现在本地把uwsgi配置好,在新建一个nginx配置文件django.conf,然后一次性上传至服务器.
uwsgi.ini配置内容如下

<span class="token punctuation">[</span>uwsgi<span class="token punctuation">]</span> socket <span class="token operator">=</span> <span class="token number">127.0</span>.0.1:8001 chdir <span class="token operator">=</span> /home/www/shopsite wsgi-file <span class="token operator">=</span> shopsite/wsgi.py module <span class="token operator">=</span> shopsite.wsgi <span class="token assign-left variable">master</span><span class="token operator">=</span>true processes <span class="token operator">=</span> <span class="token number">4</span> threads <span class="token operator">=</span> <span class="token number">2</span> <span class="token assign-left variable">pidfile</span><span class="token operator">=</span>uwsgi.pid <span class="token assign-left variable">daemonize</span><span class="token operator">=</span>uwsgi.log vacuum <span class="token operator">=</span> <span class="token boolean">true</span> log-maxsize<span class="token operator">=</span><span class="token number">50000000</span> disable-logging<span class="token operator">=</span>true static-map <span class="token operator">=</span> /static<span class="token operator">=</span>/home/www/shopsite/static
<span class="token punctuation">[</span>uwsgi<span class="token punctuation">]</span> socket <span class="token operator">=</span> <span class="token number">127.0</span>.0.1:8001 chdir <span class="token operator">=</span> /home/www/shopsite wsgi-file <span class="token operator">=</span> shopsite/wsgi.py module <span class="token operator">=</span> shopsite.wsgi <span class="token assign-left variable">master</span><span class="token operator">=</span>true processes <span class="token operator">=</span> <span class="token number">4</span> threads <span class="token operator">=</span> <span class="token number">2</span> <span class="token assign-left variable">pidfile</span><span class="token operator">=</span>uwsgi.pid <span class="token assign-left variable">daemonize</span><span class="token operator">=</span>uwsgi.log vacuum <span class="token operator">=</span> <span class="token boolean">true</span> log-maxsize<span class="token operator">=</span><span class="token number">50000000</span> disable-logging<span class="token operator">=</span>true static-map <span class="token operator">=</span> /static<span class="token operator">=</span>/home/www/shopsite/static   
[uwsgi] socket = 127.0.0.1:8001 chdir = /home/www/shopsite wsgi-file = shopsite/wsgi.py module = shopsite.wsgi master=true processes = 4 threads = 2 pidfile=uwsgi.pid daemonize=uwsgi.log vacuum = true log-maxsize=50000000 disable-logging=true static-map = /static=/home/www/shopsite/static

关于uwsgi的配置,下面两篇文章讲解的比较细致:
https://blog.csdn.net/qq_36564503/article/details/106449315
https://www.cnblogs.com/mensiler/p/11889546.html

接下来编写nginx的配置文件django.conf内容如下:

server <span class="token punctuation">{<!-- --></span> listen <span class="token number">80</span><span class="token punctuation">;</span> server_name <span class="token number">122.112</span>.204.124<span class="token punctuation">;</span> charset utf-8<span class="token punctuation">;</span> client_max_body_size 75m<span class="token punctuation">;</span> location /media <span class="token punctuation">{<!-- --></span> <span class="token builtin class-name">alias</span> /home/www/shopsite/media<span class="token punctuation">;</span> <span class="token punctuation">}</span> location /static <span class="token punctuation">{<!-- --></span> <span class="token builtin class-name">alias</span> /home/www/shopsite/static<span class="token punctuation">;</span> <span class="token punctuation">}</span> location / <span class="token punctuation">{<!-- --></span> uwsgi_pass <span class="token number">127.0</span>.0.1:8001<span class="token punctuation">;</span> include /etc/nginx/uwsgi_params<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span>
server <span class="token punctuation">{<!-- --></span> listen <span class="token number">80</span><span class="token punctuation">;</span> server_name <span class="token number">122.112</span>.204.124<span class="token punctuation">;</span> charset utf-8<span class="token punctuation">;</span> client_max_body_size 75m<span class="token punctuation">;</span> location /media <span class="token punctuation">{<!-- --></span> <span class="token builtin class-name">alias</span> /home/www/shopsite/media<span class="token punctuation">;</span> <span class="token punctuation">}</span> location /static <span class="token punctuation">{<!-- --></span> <span class="token builtin class-name">alias</span> /home/www/shopsite/static<span class="token punctuation">;</span> <span class="token punctuation">}</span> location / <span class="token punctuation">{<!-- --></span> uwsgi_pass <span class="token number">127.0</span>.0.1:8001<span class="token punctuation">;</span> include /etc/nginx/uwsgi_params<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> 
server { listen 80; server_name 122.112.204.124; charset utf-8; client_max_body_size 75m; location /media { alias /home/www/shopsite/media; } location /static { alias /home/www/shopsite/static; } location / { uwsgi_pass 127.0.0.1:8001; include /etc/nginx/uwsgi_params; } }

以上配置完成,下面需要修改django的settings.py,部署生产环境,一个是把debug改成False,一个是连接数据库的用户名密码配置,以下为修改部分:

DEBUG <span class="token operator">=</span> True ALLOWED_HOSTS <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"*"</span><span class="token punctuation">]</span> DATABASES <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span> <span class="token string">'default'</span><span class="token builtin class-name">:</span> <span class="token punctuation">{<!-- --></span> <span class="token string">'ENGINE'</span><span class="token builtin class-name">:</span> <span class="token string">'django.db.backends.mysql'</span>, <span class="token string">'NAME'</span><span class="token builtin class-name">:</span> <span class="token string">'django_db'</span>, <span class="token string">"USER"</span><span class="token builtin class-name">:</span><span class="token string">"root"</span>, <span class="token string">"PASSWORD"</span><span class="token builtin class-name">:</span><span class="token string">"此处填写你设置的密码"</span>, <span class="token string">"HOST"</span><span class="token builtin class-name">:</span><span class="token string">"127.0.0.1"</span>, <span class="token string">"PORT"</span><span class="token builtin class-name">:</span><span class="token string">"3306"</span>, <span class="token punctuation">}</span> <span class="token punctuation">}</span>
DEBUG <span class="token operator">=</span> True ALLOWED_HOSTS <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"*"</span><span class="token punctuation">]</span> DATABASES <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span> <span class="token string">'default'</span><span class="token builtin class-name">:</span> <span class="token punctuation">{<!-- --></span> <span class="token string">'ENGINE'</span><span class="token builtin class-name">:</span> <span class="token string">'django.db.backends.mysql'</span>, <span class="token string">'NAME'</span><span class="token builtin class-name">:</span> <span class="token string">'django_db'</span>, <span class="token string">"USER"</span><span class="token builtin class-name">:</span><span class="token string">"root"</span>, <span class="token string">"PASSWORD"</span><span class="token builtin class-name">:</span><span class="token string">"此处填写你设置的密码"</span>, <span class="token string">"HOST"</span><span class="token builtin class-name">:</span><span class="token string">"127.0.0.1"</span>, <span class="token string">"PORT"</span><span class="token builtin class-name">:</span><span class="token string">"3306"</span>, <span class="token punctuation">}</span> <span class="token punctuation">}</span> 
DEBUG = True ALLOWED_HOSTS = ["*"] DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_db', "USER":"root", "PASSWORD":"此处填写你设置的密码", "HOST":"127.0.0.1", "PORT":"3306", } }

至此准备工作完成,通过scp命令把项目文件夹整体上传至服务器
在本地执行如下命令,注意替换成你的项目文件夹路径,

<span class="token function">scp</span> -r /home/burn/Downloads/shopsite root@122.112.204.124:/home/www
<span class="token function">scp</span> -r /home/burn/Downloads/shopsite root@122.112.204.124:/home/www 
scp -r /home/burn/Downloads/shopsite root@122.112.204.124:/home/www

切换到服务器,进入已经上传完成的项目文件夹下

<span class="token builtin class-name">cd</span> /home/www/shopsite
<span class="token builtin class-name">cd</span> /home/www/shopsite 
cd /home/www/shopsite

执行数据库迁移,收集静态文件,

python3 manage.py collectstatic python3 manage.py makemigrations
python3 manage.py collectstatic python3 manage.py makemigrations 
python3 manage.py collectstatic python3 manage.py makemigrations

**

不出意外的会出错

**
由于mysql5.7以上加密方法变成了cha2,我们还需要配置一下改回原来的方式,否则我们mysqlclient无法操作mysql.所以出现了错误,没关系我们来解决一下
输入一下命令进入mysql的shell

mysql -u root -p
mysql -u root -p 
mysql -u root -p

注意newpassword部分换成你的数据库密码,别忘了最后的分号

ALTER <span class="token environment constant">USER</span> <span class="token string">'root'</span>@<span class="token string">'localhost'</span> IDENTIFIED WITH mysql_native_password BY <span class="token string">'newpassword'</span>
ALTER <span class="token environment constant">USER</span> <span class="token string">'root'</span>@<span class="token string">'localhost'</span> IDENTIFIED WITH mysql_native_password BY <span class="token string">'newpassword'</span>; 
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword'

然后刷新权限,退出

FLUSH PRIVILEGES<span class="token punctuation">;</span> <span class="token builtin class-name">exit</span>
FLUSH PRIVILEGES<span class="token punctuation">;</span> <span class="token builtin class-name">exit</span> 
FLUSH PRIVILEGES; exit

然后继续未完成的操作,应该就很顺利了

python3 manage.py makemigrations python3 manage.py migrate
python3 manage.py makemigrations python3 manage.py migrate 
python3 manage.py makemigrations python3 manage.py migrate

在我们项目文件夹下,也就我们刚才建立uwsgi.ini的位置,执行以下命令

uwsgi uwsgi.ini
uwsgi uwsgi.ini 
uwsgi uwsgi.ini

把nginx的配置文件,按照要求拷贝到nginx的配置文件夹下

<span class="token function">cat</span> /etc/nginx/nginx.conf 接着是一大堆输出,注意这个http部分 http <span class="token punctuation">{<!-- --></span> **include /etc/nginx/conf.d/*.conf<span class="token punctuation">;</span>** include /etc/nginx/sites-enabled/*<span class="token punctuation">;</span> <span class="token punctuation">}</span>
<span class="token function">cat</span> /etc/nginx/nginx.conf 接着是一大堆输出,注意这个http部分 http <span class="token punctuation">{<!-- --></span>  **include /etc/nginx/conf.d/*.conf<span class="token punctuation">;</span>** include /etc/nginx/sites-enabled/*<span class="token punctuation">;</span> <span class="token punctuation">}</span> 
cat /etc/nginx/nginx.conf 接着是一大堆输出,注意这个http部分 http { **include /etc/nginx/conf.d/*.conf;** include /etc/nginx/sites-enabled/*; }

接着把已经写好的nginx配置文件拷贝进该文件夹

<span class="token function">cp</span> django.conf /etc/nginx/conf.d nginx -t
<span class="token function">cp</span> django.conf /etc/nginx/conf.d nginx -t  
cp django.conf /etc/nginx/conf.d nginx -t

成功会输出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
支持基本配置完成,下面收尾工作

<span class="token function">killall</span> -9 nginx systemctl start nginx systemctl <span class="token builtin class-name">enable</span> nginx systemctl <span class="token builtin class-name">enable</span> mysql
<span class="token function">killall</span> -9 nginx systemctl start nginx systemctl <span class="token builtin class-name">enable</span> nginx systemctl <span class="token builtin class-name">enable</span> mysql 
killall -9 nginx systemctl start nginx systemctl enable nginx systemctl enable mysql

现在在浏览器输入服务器ip地址已经可以访问.
在这里插入图片描述剩下的配置就是,优化服务器,配置防火墙,端口,或者可以安装ftp服务方便上传文件,更新应用,写一个自动备份数据库的脚本,等等.
遇到问题多搜索,不断尝试,掌握基本的一些linux命令.相信你会越來越棒!


如果走之前能给点个赞,那就更好了,发财的小手走起啊!!


原文链接:https://blog.csdn.net/weixin_43287121/article/details/123152450

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享