在有了一台云服务器之后,我们就可以把写在本机上的程序,搬到服务器上了。采用WinSCP在本机和服务器之间交换文件;FinalShell来操作服务器。
1、mongodb-本机到服务器
主要是三个步骤:dump本地数据库-上传-导入,详情请见之前写过的文章:如何将本地Mongodb传到服务器上-CSDN博客
2、Django-Github到服务器
在本机上写的django项目被我push到了GitHub仓库中,因此不需要用WinSCP传输,直接敲命令即可。cd到你想要保存项目的目录中,然后采用git clone+<ssh链接>即可,但是要注意的是可能需要用根用户操作,也就是在克隆语句前面加上sudo,如果有密码的话还需要输入一下进入根目录的密码。
打开django项目修改:
- settings.py: ALLOWED_HOSTS = ['*']
(其实安全起见,这里不应该将设置成允许所有访问,而是只写你们的域名)
3、创建并配置虚拟环境
本机项目是在虚拟环境下写的,没有将环境上传到GitHub上(一般也不会有人传这个东西)。因此,在将项目拉取到服务器上之后也要创建一个虚拟环境,并安装相关依赖。首先创建一个虚拟环境。cd到你想要安装环境的目录并使用命令:
python -m venv myenv
安装好一个名为myenv的虚拟环境后,激活该虚拟环境:
source ~/myenv/bin/activate
注意,如果无法用上面命令激活,在最前面加一个sudo。
接着,从本机项目中获取该环境中的包。打开本机项目,在Terminal中cd到根目录,然后输入命令:
pip freeze > requirements.txt
该命令能够生成一个名为requirements的txt文件,作用是将当前Python环境中安装的所有包的版本信息导出到该文件中,以便于在其他环境或日后重新创建相同的Python环境时进行参考或复用。用WinSCP将该文件上传到服务器。在服务器上将目录cd到包含该文件的目录下,然后输入命令:
pip install -r requirements.txt
此后,可以刷新一下该虚拟环境的文件夹,看看包是否都被安装上了。
4、在服务器上启动django
在服务器上有多种启动django的方法,最直接的有两种。
要么就在工程目录下,按照本机启动的方法:
python manage.py runserver
要么就采用uvicorn启动django:
python -m uvicorn mongodb_connection.asgi:application
这个步骤的启动是用来检查django跟mongodb之间是否能链接上,django本身是否能正常运行等等。若启动报错,可以尝试打开django中的settings.py文件,在WSGI的下一行添上ASGI的代码,格式照搬上一行,把wsgi换成asgi即可,如下图。
启动之后可以采用命令
curl -X GET http://0.0.0.0:8001/your/api
来向地址为 0.0.0.0:8001
的服务器发送一个HTTP GET请求,请求路径为你编写的api,并带有查询相关的值。(默认端口是8000,我写8001是因为8000被占用了。注意安排好端口,以保证工作时不冲突)
5、systemd-uvicorn自启动
为了能让uvicorn自启动,同时减少启动时的代码量,可以用systemd将其编写成一个服务。将目录cd到 /etc/systemd/system/目录下,在该文件夹中新建一个配置文件,如my_service.service。并用nano或者vim打开并进入编辑模式。输入:(根据自己文件的位置进行适当更改)
[Unit]
Description = Service
After = network.target
[Service]
ExecStart=/home/ubuntu/MetaFolk_mongodb/mongoenv/bin/uvicorn mongodb_connection.asgi:application --host 0.0.0.0 --port 8001
# uvicorn的位置 django根目录名.asgi:application --host xxxxx --port 指定的运行端口
WorkingDirectory=/data/mongodbApi/mongodb_connection
# django项目在服务器上的存储路径,到工程名称
Environment=/home/ubuntu/MetaFolk_mongodb/mongoenv/bin
# 是虚拟环境的位置到/bin目录
[Install]
WantedBy=default.target
(vim编辑模式是打开之后将光标移动到要改的地方,然后Esc->i就能开始编辑。完成后再次按Esc并输入:x即可保存编辑内容并退出)
(nano进入就能编辑,编辑完按ctrl+o保存,回车确认,crtrl+x退出。之后要 sudo systemctl daemon-reload以重新加载文件)
6、查看system日志
cd /。此后输入:(-n 20是为了控制输出的日志行数,要不然太多了,啥都找不见)
sudo journalctl -u mongo_service.service -n 20
7、Nginx配置文件-路由匹配
因为服务器上有两套api,第一套以api1开头,第二套以api2开头,且在不同端口工作,因此要修改Nginx配置文件,进行路由匹配。打开Nginx配置文件,路径一般是/etc/nginx/nginx.conf。cd到该目录下sudo vim nginx.conf打开并进入编辑模式。
找到location,并添加下面红框中的内容:
保存并退出。
我在绿色第一行后路径的my-domain.conf中也添加了类似语句,如下图:
8、查看Nginx日志
上图中已经能够看到Nginx两类日志的位置(蓝绿色的二三行)cd到对应路径用nano或者vim查看即可。
9、启动服务并访问网址
sudo systemctl restart service_name.service
用上面的语句启动服务,然后本机浏览器上输入服务器域名+api进行访问,看能否正常访问并实现对应功能。 若不行,则可以通过查看各种日志来排查问题。
10、关闭虚拟环境
deactivate