1.部署准备
1.腾讯云服务器(Ubuntu 16.04系统)
在购买了腾讯云服务器成功之后,腾讯云的站内信会将系统的登录名:Ubuntu,以及登录初始密码发给你。
2.本地需要的软件工具
1. Xshell 远程操作服务器实例
通过Xshell,打开软件→【文件】→【新建】→【新建会话,输入云服务器的公网ip,用户名:ubuntu,登录初始密码】即可连接到云服务器。
为了方便安装包,从用户ubuntu切换为root用户:
sudo -i
2. filezilla 用于将打包成zip包的项目压缩文件包,上传到云服务器的 /home/ubuntu目录下
3.Navicat for Mysql 用于同步本地和服务器的数据库
3.本地项目准备
1.django项目
1.settings.py配置
1.settings.py中配置公网ip才允许访问:
ALLOWED_HOSTS = ['公网ip']
2.settings.py中追加静态文件路径配置代码:
STATIC_ROOT=os.path.join(BASE_DIR,'static') STATICFILES_DIR=[os.path.join(BASE_DIR,'static'),] #这一条在开发阶段就可以添加
3.settings.py中关闭开发调试模式:
DEBUG = False
2.生成requirements.txt
pip freeze >requirements.txt
3.将gg项目打包成zip包
2.同步数据库
1.在云服务器安装Mysql数据库
1.服务器安装Mysql5.7(目前默认安装的Mysql就是5.7版本的)
apt-get install mysql-server y #设置数据库密码,跟本地的数据库密码设置为相同的就可以,省着在项目的settings中麻烦再特意做修改了 apt-get install mysql-client apt-get install libmysqlclient-dev y
2.修改服务器数据库配置文件,使之允许远程连接
vim /etc/mysql/mysql.conf.d/mysqld.cnf # 英文输入环境下,敲 i 键,进入插入模式 #上下左右键移动光标,注释掉 bind-address = 127.0.0.1 #英文输入环境下,敲Esc键,输入:wq 保存退出
3.设置远程连接密码
mysql -u root -p #输入密码(不显示),登录mysql GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; flush privileges; quit; #重启mysql服务 /etc/init.d/mysql restart
2.使用Navicat,将本地数据库传到腾讯云服务器
1.建立连接
连接本地:点击左上角控制面板的【连接】→选择【MySQL】→随便取个连接名字,测试连接,提示连接成功即可。
连接服务器:点击左上角控制面板的【连接】→选择【MySQL】→随便取个连接名字,输入云服务器的公网pi,用户名:root,密码123456,点击测试连接,提示连接成功即可。
2.传输数据
选择本地要传输到服务器的数据库,然后选择数据库连接,点击开始,确定,然后等待传输完成,关闭。
3.查看是否上传成功
mysql -u root -p #输入密码 show databases; #查看本地数据库是否上传上来了 quit;
4.修改服务器数据库配置文件,使之不允许远程连接
vim /etc/mysql/mysql.conf.d/mysqld.cnf # 英文输入环境下,敲 i 键,进入插入模式 #上下左右键移动光标,将注释掉的 bind-address = 127.0.0.1 恢复 #英文输入环境下,敲Esc键,输入:wq 保存退出
#重启mysql服务 /etc/init.d/mysql restart
3.上传项目并且运行
1.项目上传
1.使用FileZilla上传项目的zip包到ubuntu目录下
2.解压
cd /home/ubuntu
ls
unzip gg.zip
3.配置虚拟环境
1.创建虚拟环境
#安装虚拟环境 apt-get install python3.6-venv y #在当前目录下,创建一个python3.6的虚拟环境,取名为env36 python3.6 -m venv env36 . env36/bin/activate #进入虚拟环境 #退出虚拟环境 deactivate
2.在虚拟环境中安装依赖库
cd gg
pip3 install -r requirements.txt
4.测试运行项目
1.运行项目:
python manage.py runserver 0.0.0.0:8000
2.在安全组打开8000端口
3.浏览器访问:
http://公网ip:8000/xadmin/
4.退出运行状态:
Ctrl键+C键
4.安装配置Nginx
1.安装Nginx
apt-get install nginx y
2.Nginx配置
1.删除default:
#防止错误,先把default文件给删除了 cd /etc/nginx/sites-available/ rm default ls cd /etc/nginx/sites-enabled ls rm default ls
2.新建配置文件:
cd /etc/nginx/sites-available/
vim gg.conf
3.编辑内容:
i #进入编辑状态
内容:
server{ listen 80; server_name gg; charset utf-8; client_max_body_size 75M; location /static { alias /home/ubuntu/gg/static; } location /media { alias /home/ubuntu/gg/media; } location / { uwsgi_pass 127.0.0.1:8000; include /etc/nginx/uwsgi_params; } }
保存退出:
Esc键+输入:wq+回车 #保存退出
5.安装和配置uwsgi
1.安装uwsgi到真实(非虚拟环境)环境下
#退出虚拟环境 deactivate cd .. apt install python3-pip y
apt-get install -y python3-dev pip3 install uwsgi
2.使用uwsgi启动项目
1.运行项目
uwsgi --chdir /home/ubuntu/gg --home /home/ubuntu/env36 --http :8000 --module gg.wsgi
2.浏览器访问:
http://公网ip:8000/xadmin/
3.退出运行状态:
Ctrl键+C键
3.配置uwsgi
1.创建ini文件
cd /home/ubuntu
mkdir gg_uwsgi #创建一个目录,专门存放uwsgi的相关文件 cd gg_uwsgi/ vim gg.ini #创建一个ini文件
2.编辑ini文件
进入编辑模式:
i #进入编辑模式
输入内容:
[uwsgi] chdir = /home/ubuntu/gg home = /home/ubuntu/env36 module = gg.wsgi:application master = True processes = 4 harakiri = 60 max-requests = 5000 socket = 127.0.0.1:8000 uid = 1000 gid = 2000 pidfile = /home/ubuntu/gg_uwsgi/master.pid daemonize = /home/ubuntu/gg_uwsgi/gg.log vacuum = True
保存退出
Esc键+输入:wq+回车 #保存并退出
4.通过ini启动uwsgi
1.执行通过ini启动项目命令:
uwsgi --ini /home/ubuntu/gg_uwsgi/gg.ini
2.执行检验是否启动了多线程:
ps -aux | grep uwsgi
uwsgi --reload /home/ubuntu/gg_uwsgi/master.pid #重启 uwsgi --stop /home/ubuntu/gg_uwsgi/master.pid #停止
5.建立软连接
cd /etc/nginx/ ln -s /etc/nginx/sites-available/gg.conf /etc/nginx/sites-enabled/gg.conf #复制一份配置文件到enabled目录下 ls sites-enabled/ nginx -t #查看Nginx运行情况 service nginx restart #重启Nginx
6.运行测试
1.打开80端口(默认是已经是打开的)
2.浏览器访问:
http://公网ip/xadmin/ #注意,这次没有:8000端口号
css丢失了
6.收集静态文件
1.收集静态文件命令:
cd /home/ubuntu . env36/bin/activate cd gg python manage.py collectstatic yes
#退出虚拟环境 deactivate
2.测试
浏览器刷新访问:
http://公网ip/xadmin/ #注意,这次没有:8000端口号
7.域名配置和https
1.域名购买
1.在腾讯云购买一个域名
2.域名备案
2.域名解析
1.在腾讯云控制台,选择域名管理,然后选择域名解析
2.测试域名解析是否成功了,在本地打开cmd。
ping 域名
3.申请免费的SSL证书
1.腾讯云搜索ssl,然后挑选那个免费的ssl证书,输入相关验证信息,等待通过验证
2.下载到本地
4.nginx安装ssl证书
1.腾讯云nginx安装ssl证书的文档:
https://cloud.tencent.com/document/product/400/35244
2.按照腾讯云的文档
如果存在/usr/local/nginx/conf 目录,则将1_www.xxxx.com_bundle.crt 证书文件和 2_www.xxxx.com.key 私钥文件从本地目录拷贝到此目录下。
如果不存在,则mkdir建立/usr/local/nginx/conf 目录
3.使用filezilla只能以ubuntu的身份与云服务器进行连接,所以只能先将证书文件和私钥文件上传到ubuntu目录下
4.将证书文件和私钥文件拷贝到conf目录下
cp 1_www.luoyikeji.cn_bundle.crt /usr/local/nginx/conf cp 2_www.luoyikeji.cn.key /usr/local/nginx/conf cd /usr/local/nginx/conf
5.编辑/etc/nginx/sites-available/gg.conf
server{ listen 443; server_name www.luoyikeji.cn; charset utf-8; ssl on; ssl_certificate /usr/local/nginx/conf/1_www.luoyikeji.cn_bundle.crt; #证书文件名称 ssl_certificate_key /usr/local/nginx/conf/2_www.luoyikeji.cn.key; #私钥文件名称 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; client_max_body_size 75M; location /static { alias /home/ubuntu/gg/static; } location /media { alias /home/ubuntu/gg/media; } location / { uwsgi_pass 127.0.0.1:8000; include /etc/nginx/uwsgi_params; } } server { listen 80; server_name www.luoyikeji.cn; #填写绑定证书的域名 rewrite ^(.*)$ https://$host$1 permanent; #把http的域名请求转成https }
6.重启nginx
nginx -t
service nginx restart
7.测试访问:
https://www.域名/xadmin/