📌

WJ_project3:软件著作申请

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
notion image
  • 报错: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文件夹里
notion image
# wjproject_docker目录下运行 virtualenv wjproject_env
notion image
切换目录wjproject_env,运行虚拟环境
# 切换目录wjproject_env,运行虚拟环境 source bin/activate pip install -r requirements.txt
notion image

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
genghenggaoUpdated 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;
notion image
# 重启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