最近自己搭建了一个网站,想着把它部署到阿里云上,遇到了各种bug,好在一步步查询解决,成功上传,再此记录一下,同时也感谢在我遇到bug时大佬们的博客为我解答
- 注意首先自己的项目必须能在本地运行
- 我使用的版本号
- django==3.0.8
- python3.8
- 阿里云我选择的是Ubuntu 20.04版本
- nginx与uwsgi安装最新版即可
初始化操作
- 需要安装两个操作云服务的软件xshell和xftp
- 也直接直接在阿里云里面使用网页远程连接与上传文件
- 我是同时使用了xftp和xshell
- 用xftp用来上传文件
- 用xshell来操作我的云服务器
安装服务器的环境
- 不同的项目肯定要创建不同的虚拟环境,首先创建虚拟环境
sudo apt-get update
sudo pip3 install virtualenv
sudo pip3 install virtualenvwrapper
- 配置文件打开/.bashrc
vim ~/.bashrc
在末尾添加以下数据
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export WORKON_HOME = $HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
运行source ~/.bashrc
- 创建虚拟环境
mkvirtualenv -p python3 环境名
进入虚拟环境
workon 环境名
- 在虚拟环境里面安装django项目需要的包
- pip3 install -r 包文件
数据库
- 安装mysql数据库
apt-get install mysql-server
apt-get install mysql-client
- 进入数据库
mysql -uroot -p
- 创建一个和自己django项目连接的数据库一样的名字
create database 数据库名
- 注意!!! 注意!!! 注意!!!
- 在这里运行项目是会报一个错误,我的数据库里面是没有数据的,可以按以下来操作,如果数据库还有数据,请参考其他大佬的博客
- 在迁移数据库时会报错误django.db.utils.InternalError: (1698, “Access denied for user ‘root’@‘localhost’”)
- 解决办法,创建一个新的数据库用户
create user ‘用户名’@’%’ identified by ‘密码’;
grant all on . to ‘用户名’@’%’;
flush privileges;
- 将django项目里面连接的数据库改成自己新创建的用户即可
- 生成迁移文件
python manage.py makemigrations
- 执行迁移文件
python manage.py migrate
- 配置数据库
vim /etc/mysql/mysql.conf.d/mysqld.cnf
注释本地
bind-address = localhost
- 创建django后台管理
python manage.py createsuperuser
- 本地项目现在已经部署到阿里云上了执行python manage.py runserver就可以看到和本地运行一样的效果了
uwsgi
- 首先需要在自己django项目中创建wsgi.py文件才可以使用uwsgi
- 安装
apt-get install build-essential python3
apt-get install python3-dev
pip3 install uwsgi
- 测试是否安装成功
- 编写一个test.py文件
def application(env, start_response):
start_response('200 OK',[('Content-Type,'text/html')])
return [b'hello']
- 输入uwsgi --http-socket :80 --wsgi-file test.py(注意:socket和:之间一定要有空格)
- 在浏览器输入阿里云公网ip即可显示hello
- 在和manage.py同级目录下创建uwsgi.ini
- 编辑uwsgi.ini
[uwsgi]
chdir = /home/xxxx # 项目的路径
http = 127.0.0.1:8080 # 直接使用uwsgi坐web服务器时
#socket = :8080 # 和nginx配套使用时设置的端口
master = true
processes = 5 # 指定进程数
threads = 2 # 指定线程数
daemonize = /home/xxxxxx/uwsgi.log # 创建日志文件
disable-logging = true # 只收集错误日志
module = xxxx.wsgi # wsgi文件的路径
wsgi-file = xxxxx/wsgi.py # 项目中wsgi.py位置
pidfile = /home/xxx/uwsgi.pid # 保存启动之后主进程的pid
- 配置setting.py文件
- DEBUG = False
- ALLOWED_HOSTS =[’*’]
- 启动uwsgi
uwsgi --ini uwsgi.ini
- 在浏览器输入阿里云公网ip即可显示
nginx
- nginx处理静态文件
- 安装
sudo apt-get install nginx
- 验证
service nginx start
- 在浏览器输入公网ip即可出现欢迎界面,安装成功
- nginx命令
service nginx start # 启动
service nginx stop # 停止
service nginx resload # 重启
systemctl status nginx # 查看nginx状态
nginx -t # 检查nginx是否正常运行
- 配置nginx,修改配置文件/etc/nginx/sites-available/default文件
upstream django {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name xxx.xxx.xx.xx; # 服务器公网ip
charset utf-8;
client_max_body_size 75M;
location / {
uwsgi_pass 127.0.0.1:8080;
include /etc/nginx/uwsgi_params;
}
location /static {
alias /home/xxxxx/static; # 静态文件路径
}
}
- 重启nginx和uwsgi
service nginx reload
uwsgi --ini uwsgi.ini
整个项目部署完成