# 上线华为云服务器部署(弹性云服务器ECS)
>环境配置:
> ubuntu 18.04
> Python 3.6.8(python3.7亦可)
> nginx version: nginx/1.14.0 (Ubuntu)
## 1. 购买华为云服务器
文档 https://support.huaweicloud.com/ecs/index.html
## 2. 上传到华为云服务器,安装依赖环境,启动项目测试
#### 1.导出当前项目的依赖环境
`pip freeze > ./pipinstall.txt`
#### 2.把数据库导出
`bookshop.sql`
#### 3.把项目内容上传到华为云服务器
xftp
#### 4.在华为云中安装需要的环境
1. mysql的安装和配置
```shell
# 安装mysql
sudo apt-get install mysql-server
sudo apt install mysql-client
sudo apt install libmysqlclient-dev
# 测试进入服务
mysql -uroot -p 空
#创建用户,
grant all on *.* to [email protected]‘%‘ identified by ‘123456‘ with grant option;
# 退出mysql,修改mysql的配置文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 打开文件后 注释下面的一行
#注释掉bind-address = 127.0.0.1:
# 重启服务
service mysql stop
service mysql start
```
2. 当前项目的依赖环境
```shell
# 1.创建虚拟环境,如果没有安装则会提醒
python3 -m venv venv
# 2.启动虚拟环境
source venv/bin/activate
# 3.在虚拟环境中安装当前项目需要的环境
pip install -r pipinstall.txt
#(venv) [email protected]:/home/py23_bookshop# pip install -r pipinstall.txt
```
3. 注意错误
```shell
#error: command ‘x86_64-linux-gnu-gcc‘ failed with exit status 1
apt-get install python3-dev
```
#### 5.在云服务器中调试项目
1. 启动服务器
`Python manage runserver 0.0.0.0:8000`
2. 浏览器访问测试
`114.116.200.51:8000`
## 3. 搭建uwsgi启动项目测试
#### 1.安装uwsgi
`sudo pip3 install uwsgi --upgrade`
#### 2.安装完成后使用命令测试
先进入项目目录,启动命令
```shell
uwsgi --http :8000 --chdir /home/py23_bookshop/web --module web.wsgi
# --home 指定virtualenv 路径,如果没有可以去掉。web.wsgi 指的是 web/wsgi.py 文件
```
#### 3.访问测试,启动成功后
`114.116.200.51:8000`
#### 4. 配置uwsgi文件启动项目
#### 第一步:创建一个uwsgi.ini文件
#### 第二步:在django项目同级目录创建script目录,用于存放配置脚本等等
/home/alipay/web/
# script/ web/ db.sqlite3 manage.py uwsgi.ini
#### 第三步:编辑uwsgi.ini文件内容如下: 目录参考个人目录进行修改
```shell
# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=/home/py23_bookshop/web/
# 指定项目的application
module=web.wsgi:application
# 指定sock的文件路径
socket=/home/py23_bookshop/web/script/uwsgi.sock
# 进程个数
workers=5
pidfile=/home/py23_bookshop/web/script/uwsgi.pid
# 指定IP端口
http=0.0.0.0:8000
# 指定静态文件
#static-map=/static=/home/py23_bookshop/web/static/
# 启动uwsgi的用户名和用户组
uid=www-data
gid=www-data
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/home/py23_bookshop/web/script/uwsgi.log
# 权限
chmod-socket = 666
chown-socket = www-data
```
#### 5.执行命令,启动项目测试
uwsgi --ini uwsgi.ini
在浏览器访问127.0.0.1:8000
## 4,安装nginx
#### 1.安装nginx
`sudo apt-get install python-dev nginx`
#### 2.安装完成后,可以使用通过浏览器访问公网IP测试
#### 3.创建项目的配置文件,或者直接修改原nginx配置文件都可以
`vim /etc/nginx/sites-available/webtest.conf`
```shell
server {
listen 80;
server_name localtion;
charset utf-8;
client_max_body_size 75M;
location / {
uwsgi_pass unix:///home/py23_bookshop/web/script/uwsgi.sock;
include /etc/nginx/uwsgi_params;
}
#location /media {
# alias /path/to/project/media;
#}
location /static {
alias /home/py23_bookshop/web/static/;
}
}
```
#### 4.创建完配置文件后创建软连接
`sudo ln -s /etc/nginx/sites-available/webtest.conf /etc/nginx/sites-enabled/webtest.conf`
#### 5.启动nginx,重新加载配置文件
`nginx -s reload`
注意:
1.给当前项目设置访问权限。www-data
2.注意在nginx的配置中uwsgi_pass这一项 uwsgi_pass unix:///home/yc/web/script/uwsgi.sock; 它需要找到你在启动uwsgi后的sock文件,并且要注意权限
3.在使用uwsgi --ini uwsgi.ini启动后会创建 .sock文件 那么在后面更新代码时不需要把 script目录下的文件都删除 只需要重启即可 uwsgi --reload xxx.pid
原文地址:https://www.cnblogs.com/itxdl/p/12557251.html