前言
之前自己的云服务是建在腾讯云服务器上,之前那套环境的搭建和配置过程请参考之前的笔记:
Nginx+Uwsgi部署Django项目实操(静态文件导入失败避坑指南)_nginx 配置的路径 影响django的urls-CSDN博客
这次需要将服务从腾讯云的主机迁移到阿里云的主机上,整体还是比较顺利的。
把过程记录和遇到的一些问题一并记录一下,以供参考:
一、准备硬件环境
1. 购买阿里云主机,选择了和腾讯云主机当时一样的系统镜像:Ubuntu20.04
2. 记录主机IP地址,设置远程连接密码后。用XSHELL和XFTP连接主机。
二、安装软件环境
1. 在XSHELL中运行以下命令:
apt-get update
apt-get upgrade
apt-get install python(如果系统已经默认安装好了,就不需要了)
apt-get install nginx
apt-get install pip
apt-get install ffmpeg(这个如果你的项目不需要就不要装了)
pip install django
pip install uwsgi
(以下根据项目实际需要安装)
pip install bs4
pip install pydub
pip install erniebot
2. 将项目文件通过XFTP拖到阿里云主机下(最好是保持和腾讯云一模一样的路径,否则可能会出错,因为不少配置文件会用到这条路径)
三、配置Nginx
1. 在etc/nginx/目录下,编辑nginx.conf文件,只需要改一点:
将 user www-data; 改为 user root; 即可
2. 在etc/nginx/sites-enabled/目录下,编辑default文件,文件内容如下(此时还没有配置SSL,所以监听端口还是80):
# myserver configuration
#
server {
listen 80;
listen [::]:80;
server_name 你服务器的IP地址;
#定义nginx log的保持文件,需要先建一下目录,不然nginx会报错
access_log /root/django-projects/myserver/logs/access.log;
error_log /root/django-projects/myserver/logs/error.log;
location / {
# 监听 8000 端口,与 uwsgi.ini 里的 socket 设置成同一个端口
uwsgi_pass 127.0.0.1:8000;
include uwsgi_params;
}
location /static {
# 静态文件目录,STATIC_ROOT 指定的目录
alias /root/django-projects/myserver/static_root;
}
}
注意:我遇到的第一个小问题来了,因为是直接copy了腾讯云主机上的default文件过来,server_name后面用的是我的域名地址。此处server_name后面应该写你的主机IP地址,因为此时我的域名解析还是指向腾讯云主机的。(如果你的域名已经指向本机那就没问题)
到这里Nginx应该OK了,在浏览器里输入你的主机地址,应该可以看到Nginx的欢迎界面了。
四、启动uwsgi服务
去uwsgi.ini所在目录下运行:uwsgi --ini uwsgi.ini,启动uwsgi
注意:这里我遇到了第二个问题,运行uwsgi --ini uwsgi.ini时,提示
"no request plugin is loaded, you will not be able to manage requests.
you may need to install the package for your language of choice, or simply load it with --plugin"
解决办法是安装plugin:
apt-get install uwsgi-plugin-python3
然后在uwsgi.ini中加入两句话:
plugins-dir = /usr/lib/uwsgi/plugins
plugins = python3
再次运行uwsgi --ini uwsgi.ini,问题解决。
此时整个服务已经迁移完毕,在浏览器里输入主机地址,可以看到熟悉的主页回来了。
五、切换域名指向
我是参考了这篇指南的操作:非阿里云注册域名如何在云解析DNS设置解析_云解析DNS(DNS)-阿里云帮助中心
1. 首先进入阿里云,云解析DNS --> 域名解析 --> 添加域名 添加你的域名和你的主机IP地址
2. 在解析设置里查看云解析系统分配DNS里的DNS服务地址(记录这两个地址,待会要在腾讯云的DNS控制台里将这两个地址覆盖原来老的DNS地址)
3. 打开腾讯云,按以下步骤进行操作:
进入 域名注册 --> 我的域名 --> 点击你的域名 --> DNS解析,如下:
点击 修改DNS服务器,将刚才记录的阿里云的两个DNS服务地址覆盖以前的地址,然后等待新的DNS服务地址生效(官方说48小时内,我昨天大概等了十几分钟就ok了)
这样域名解析就算切换成功了。但是你的域名和备案其实还是用的腾讯云的管理服务,据说如果要把域名转到阿里云的话,域名还需要重新备案。我选择把域名留在腾讯云了。
六、部署SSL证书,启用HTTPS访问
主要参考这篇文章就可以了:
SSL 证书 Nginx 服务器 SSL 证书安装部署-证书安装-文档中心-腾讯云
主要步骤:
1. 在云控制台申请SSL证书
2. 从云控制台下载证书,upload证书文件到云主机的/etc/nginx 目录(此处为 Nginx 默认安装目录,请根据实际情况操作)
3. 修改Nginx配置文件,我是在/etc/nginx/sites-enabled/default里修改的。主要就是把80端口切换成https专用的443端口,还有做一些SSL相关的配置
# myserver configuration
#
server {
#listen 80;
#listen [::]:80;
#定义nginx log的保持文件,需要先建一下目录,不然nginx会报错
access_log /home/ubuntu/nginx-logs/access.log;
error_log /home/ubuntu/nginx-logs/error.log;
location / {
# 监听 8000 端口,与 uwsgi.ini 里的 socket 设置成同一个端口
uwsgi_pass 127.0.0.1:8000;
include uwsgi_params;
}
location /static {
# 静态文件目录,STATIC_ROOT 指定的目录
alias /home/ubuntu/myserver/static_root;
}
location /media {
# 媒体文件目录,MEDIA_ROOT 指定的目录
alias /home/ubuntu/myserver/media;
}
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名
server_name 填写你的域名或主机IP地址;
#启用 SSL 功能
#ssl on;
#证书文件名称
ssl_certificate 你的证书的crt文件;
#私钥文件名称
ssl_certificate_key 你的证书的key文件;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
}
#将http访问转到https访问
server {
listen 80;
#请填写绑定证书的域名
server_name 101.133.142.252;
#把http的域名请求转成https
return 301 https://$host$request_uri;
}
到此,你的HTTPS地址应该可以正常访问了。