1. 系统部署1.1 环境1.2 安装虚拟机2. 拉取项目3. 配置信息4. 前端项目4.1 下载前端该项目4.2 编辑前端项目4.3 打包4.4 编辑项目5. Django配置6. 修改网络配置6.1 配置Nginx小插曲7. 启动7.1 添加相关文件7.2 启动nginx
1. 系统部署
1.1 环境
1.2 安装虚拟机
- mongodb安装
- Nginx
- uWSGI
sudo apt-get install nginx sudo pip3 install uwsgi sudo pip3 install virtualenv
记得需要修改
/etc/mongodb.conf
,这会导致外部连不上root@seismic:/etc# vim mongodb.conf
- 报错:sudo: pip3: command not found,安装pip3
sudo apt-get install python3-pip
启动MongoDB,这里没设置开机启动,每次重启服务器需要开启
# 启动服务 sudo systemctl start mongod # 验证MongoDB是否已成功启动 sudo systemctl status mongod # 系统启动时自动启动服务 sudo systemctl enable mongod # 停止MongoDB sudo systemctl stop mongod # 重新启动MongoDB sudo systemctl restart mongod
2. 拉取项目
- /usr/local目录下,新建
wjproject_docker
文件夹
# 新建文件夹 mkdir wjproject_docker # 切换到拉取后端项目 git clone https://gitee.com/genghenggao/wjproject_env.git # 拉取前端项目 git clone https://github.com/genghenggao/wjproject.git
- 移动到
wjproject_docker
文件夹里
# wjproject_docker目录下运行 virtualenv wjproject_env
切换目录wjproject_env,运行虚拟环境
# 切换目录wjproject_env,运行虚拟环境 source bin/activate pip install -r requirements.txt
3. 配置信息
- 安装Vim
sudo apt install vim
- settings.py
# 打开端口号 # DEBUG = True # ALLOWED_HOSTS = ['*', ] # 允许所有的IP可以访问 DEBUG = False ALLOWED_HOSTS = ['127.0.0.1', '39.105.175.144', "www.genghenggao.top","genghenggao.top"]
local_settings.py
- 修改SIMPLEUI_INDEX
from mongoengine import connect LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_TZ = False # 连接mongodb中数据库名称 connect(alias='default', db='wjproject', host='127.0.0.1', port=27017) connect(alias='wjdataform', db='dataform', host='127.0.0.1', port=27017) # 去admin后台掉默认Logo或换成自己Logo链接 # SIMPLEUI_LOGO = 'http://39.105.175.144/media/logo.png' SIMPLEUI_LOGO = 'https://img2023.cnblogs.com/blog/1389175/202308/1389175-20230814105423024-451867427.png' # 隐藏右侧SimpleUI广告链接和使用分析 SIMPLEUI_HOME_INFO = False SIMPLEUI_ANALYSIS = False # 修改左侧菜单首页设置 # SIMPLEUI_HOME_PAGE = 'https://cn.bing.com/' # 指向页面 # SIMPLEUI_HOME_TITLE = 'Bing搜索' # 首页标题 # SIMPLEUI_HOME_ICON = 'fa fa-code' # 首页图标 # 修改首页设置, 指向新创建的控制面板 # 设置右上角Home图标跳转链接,会以另外一个窗口打开 SIMPLEUI_INDEX = 'http://192.168.92.149:80/' SIMPLEUI_HOME_PAGE = '/api/tasks/userstatistics/' SIMPLEUI_HOME_TITLE = '控制面板' SIMPLEUI_HOME_ICON = 'fa fa-eye' # 设置默认主题,指向主题css文件名。Admin Lte风格 # SIMPLEUI_DEFAULT_THEME = 'admin.lte.css' # 设置默认主题,指向主题css文件名。Element-ui风格 # SIMPLEUI_DEFAULT_THEME = 'element.css' # 设置默认主题,指向主题css文件名。layui风格 # SIMPLEUI_DEFAULT_THEME = 'layui.css' # 设置默认主题,指向主题css文件名。紫色风格 SIMPLEUI_DEFAULT_THEME = 'purple.css' SIMPLEUI_CONFIG = { # 是否使用系统默认菜单,自定义菜单时建议关闭。 'system_keep': False, # 用于菜单排序和过滤, 不填此字段为默认排序和全部显示。空列表[] 为全部不显示. 'menu_display': ['任务管理', '权限认证','友情链接'], # 设置是否开启动态菜单, 默认为False. 如果开启, 则会在每次用户登陆时刷新展示菜单内容。 # 一般建议关闭。 'dynamic': False, 'menus': [ { 'app': 'auth', 'name': '权限认证', 'icon': 'fas fa-user-shield', 'models': [ { 'name': '用户列表', 'icon': 'fa fa-user', 'url': 'auth/user/' }, { 'name': '用户组', 'icon': 'fa fa-th-list', 'url': 'auth/group/' } ] }, { 'name': '任务管理', 'icon': 'fa fa-th-list', 'models': [ { 'name': '任务列表', # 注意url按'/admin/应用名小写/模型名小写/'命名。 'url': '/admin/wjproject_users/task/', 'icon': 'fa fa-tasks' }, ] }, { 'name': '友情链接', 'icon': 'fa fa-th-list', 'models': [ { 'name': 'Bing搜索', # 注意url按'/admin/应用名小写/模型名小写/'命名。 'url': 'https://cn.bing.com/', 'icon': 'fa fa-tasks' }, ] }, ] }
4. 前端项目
4.1 下载前端该项目
wjproject
genghenggao • Updated Sep 1, 2021
安装相关依赖
npm install
4.2 编辑前端项目
根据需求进行编辑
4.3 打包
生成一个
dist
文件夹npm run build
4.4 编辑项目
将生成的dis文件放入
/usr/local/wjproject_docker/wjproject_env/wjproject_ui/
- 新建
wjproject_ui
,将上述步骤生成的dist
放入wjproject_ui
mkdir wjproject_ui
5. Django配置
python虚拟环境下
# 切换目录wjproject_env,运行虚拟环境 source bin/activate
- 定义好模型之后,继续按照Django模型的使用方式,生成数据库迁移,并执行迁移:
python manage.py makemigrations python manage.py migrate
- 运行测试服务器(后续项目部署不需要启动这个)
python manage.py runserver
- 查看浏览器,Django是否配置成果
- 创建超级用户,用来登录Django管理网站,进入虚拟目目录下,使用如下命令来进行创建
- 这个用户密码记住,是系统的登录密码
python manage.py createsuperuser
- 收集静态文件
python manage.py collectstatic
6. 修改网络配置
6.1 配置Nginx
cd /etc/nginx/conf.d touch wjproject.conf
wjproject.conf
信息如下,主要修改server_name
server{ listen 80; server_name cms.bigdata.com; # server_name 39.105.175.144; charset utf-8; client_max_body_size 1024M; location /media { expires 30d; autoindex on; add_header Cache-Control private; alias /usr/local/wjproject_docker/wjproject_env/media/; } location /static { expires 30d; autoindex on; add_header Cache-Control private; alias /usr/local/wjproject_docker/wjproject_env/static/; } location / { root /usr/local/wjproject_docker/wjproject_env/wjproject_ui/dist; index index.html; try_files $uri $uri/ /index.html; } location /api{ # 配置代理路径 proxy_pass http://127.0.0.1:8000/api; } location /admin{ # 配置Django后台 proxy_pass http://127.0.0.1:8000/admin; } } # Django转发请求到Nginx:127.0.0.1:8000 server { listen 8000; server_name localhost 127.0.0.1; client_max_body_size 1024M; location / { include /etc/nginx/uwsgi_params; uwsgi_pass 127.0.0.1:8002; } } server { # Vue端口 listen 8004; server_name cms.bigdata.com; client_max_body_size 1024M; location / { root /usr/local/wjproject_docker/wjproject_env/wjproject_ui/dist; index index.html; try_files $uri $uri/ /index.html; } # 配置代理路径 location /api{ proxy_pass http://127.0.0.1:8000/api; } }
小插曲
Tips:提示错误
Failed to load resource: the server responded with a status of 413 (Request Entity Too Large)
- 上面
wjproject.conf
文件添加client_max_body_size 1024m;
- 或者编辑
/etc/nginx/nginx.conf
root@seismic:/etc/nginx# vim nginx.conf
添加一条信息
client_max_body_size 20m;
# 重启Nginx root@seismic:/etc/nginx# service nginx reload
7. 启动
7.1 添加相关文件
- 在wjproject_env目录下,新建相关文件夹
- logs
- media里放置MP4文件
- 三维地质模型.mp4
7.2 启动nginx
# 启动nginx service nginx start # 重启nginx service nginx reload #停止 service nginx stop
- 启动uWsgi,在
/usr/local/wjproject_docker/wjproject_env
目录下启动
- 如果启动失败,删除
/usr/local/wjproject_docker/wjproject_env/logs
里的文件
# 启动 uwsgi --ini wjproject_uwsgi.ini # 启动检测文件!保证服务器临时文件检测 python3 monitor_tmp.py # 在/usr/local/wjproject_docker/wjproject_env目录下停止 uwsgi --stop logs/uwsgi.pid # 或者直接 pkill -f uwsgi -9 #查看uwsgi端口号 ps -ef |grep uwsgi ps -ef |grep nginx
- 保持终端+虚拟机开启
- monitor_tmp.py
#!/usr/bin/python3 import os import sys import time import datetime def delDir(dir, t=120): # 获取文件夹下所有文件和文件夹 files = os.listdir(dir) for file in files: filePath = dir + "/" + file # 判断是否是文件 if os.path.isfile(filePath): # 最后一次修改的时间 last = int(os.stat(filePath).st_mtime) # 上一次访问的时间 #last = int(os.stat(filePath).st_atime) # 当前时间 now = int(time.time()) # 删除过期文件 if (now - last >= t): os.remove(filePath) print(filePath + " was removed!") elif os.path.isdir(filePath): # 如果是文件夹,继续遍历删除 delDir(filePath, t) # 如果是空文件夹,删除空文件夹 if not os.listdir(filePath): os.rmdir(filePath) print(filePath + " was removed!") if __name__ == '__main__': # 获取现在时间 now_time = datetime.datetime.now() print(now_time) # 获取明天时间 next_time = now_time + datetime.timedelta(days=+1) next_year = next_time.date().year next_month = next_time.date().month next_day = next_time.date().day # 获取明天3点时间 next_time = datetime.datetime.strptime(str( next_year)+"-"+str(next_month)+"-"+str(next_day)+" 03:00:00", "%Y-%m-%d %H:%M:%S") print(next_time) # 获取距离明天3点时间,单位为秒 timer_start_time = (next_time - now_time).total_seconds() print(timer_start_time) # 获取路径 path = 'tem_data' # 获取过期时间 # t = 20 t = 3600*24 # 获取定期清理时间 ts = timer_start_time # ts = 20 while True: delDir(path, t) time.sleep(ts)
A geodata warehouse Using denormalisation techniques as a tool for delivering spatially enabled integrated geological information to geologists