【web系列十五】Ubuntu系统部署Web项目

本文详细介绍了使用Vue3、Nginx、Django和MySQL进行项目部署的过程,包括前端Nginx的安装配置、Vue项目编译、文件传输,以及后端Django和数据库MySQL的配置等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

写在前面

前端部署

安装nginx

编译vue工程

传输项目到服务器

修改nginx配置

修改启动用户

重启服务

打开网页

前端踩坑记录

无法使用getCurrentInstance.ctx.$refs获取页面组件元素

后端及数据库部署

mysql踩坑记录

版本问题

远程访问

中文乱码

参考文献


写在前面

        项目架构:

                前端Vue3+后端Django+数据库MySQL

        记录一下部署流程,初次尝试还是踩了不少坑的。

前端部署

        前端部署使用的是Nginx,可能很多初学者也没有听过这个工具,其实我也是第一次接触。

        一句话说Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。

        我体验了一下,感觉就是类似一个方便前端部署的、支持多并发的入口网关。

        大家想深入了解可以看这篇文章8分钟带你深入浅出搞懂Nginx - 知乎 (zhihu.com)

安装nginx

        先贴出一个参考教程。

 ubuntu安装nginx_小白、瑶的博客-优快云博客_ubuntu 安装nginx

         教程里讲了两种安装方式,我是直接用apt安装的。

1、安装

sudo apt-get install nginx

2、查看nginx是否安装成功

nginx -v

3、启动nginx

service nginx start

4、重启

service nginx restart

5、停止

service nginx stop

        启动后,在网页重输入本机ip地址,即可看到nginx的欢迎页面。至此nginx安装成功。

6、文件位置

        我是ubuntu18下安装的,与参考文献中博主的文件位置有一些出入,这里记录一下:

  • /usr/lib/nginx:主程序
  • /etc/nginx:存放配置文件
  • /usr/share/nginx:存放静态文件
  • /var/log/nginx:存放日志

编译vue工程

1、修改vue.config.js

const {defineConfig} = require('@vue/cli-service')

module.exports = defineConfig({
    transpileDependencies: true,
    lintOnSave: false,//关闭语法检查
    
    // 基本路径(下面是重点)
    publicPath: '/',
    // 输出文件目录
    outputDir: 'dist',
    configureWebpack: {
        externals: {}
    }
})

2、编译项目

npm run build

         这时候可以发现,工程中多了一个dist文件夹,里面就是编译后的工程,可以直接拿来部署。

传输项目到服务器

        这里用的是filezilla工具,如果你的ubuntu服务器没有开启相应的服务的话是使用不了的。也先贴出教程,博主亲测,两种方法都可行。

ubuntu ftp连接 filezilla连接 FileZilla提示错误:认证失败,严重错误,无法连接到服务器:huizai的博客 - IIS7站长之家【WWW.IIS7.COM】

       安装完之后直接将dist文件夹传输到服务器上就行。

修改nginx配置

        配置文件在/etc/nginx下,叫nginx.conf,打开可以发现他include另外两个文件夹,/etc/nginx/conf.d/*.conf;/etc/nginx/sites-enabled/*;去这两个文件夹下看一下可以发现前一个是空的,后一个有一个default文件快捷方式,指向的问价你在/etc/nginx/sits-available,我们要修改的就是这个文件。

        可以把文件中其他内容都注释掉,然后添加一下内容

server {
    listen 8080;#前端端口
    server_name web_ui;#服务名,类似域名

    location / {
        root /home/Project/web_ui/dist; #刚才传输的dist文件夹
        try_files $uri $uri/ /index.html; #防止刷新网页时出现404报错
        index index.html index.htm;
    }

    location /vcipro-api/ {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass https://10.40.100.15:8020/;
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}

        顺便贴一下ubuntu下vim使用技巧的两篇文章

VIM命令大全_wongIEEE的博客-优快云博客_vim命令

ubuntu中vim多行注释与取消注释_一只大大大媛的博客-优快云博客_ubuntu注释

修改启动用户

        这个在/etc/nginx/nginx.conf中,将user www-data;修改成user root;否则启动后,网页会显示403forbidden,且在日志中会看到(13: Permission denied)报错。

        这个错误的参考资料如下 解决Nginx出现403 forbidden (13: Permission denied)报错的四种方法_西奥斯的博客-优快云博客_nginx403

重启服务

service nginx restart

打开网页

        http://服务器地址:8080/

前端踩坑记录

无法使用getCurrentInstance.ctx.$refs获取页面组件元素

        这是由于使用dist打包后getCurrentInstance属性会失效,解决办法如下:

import { ComponentInternalInstance, getCurrentInstance } from "@vue/runtime-core";

let currentInstance = getCurrentInstance() as ComponentInternalInstance;

currentInstance.ctx._.refs.test.test();

后端及数据库部署

        由于Django后端及Mysql数据库都不是很复杂,因此,我选择直接搭建开发环境的方式。可以参考博主的这几篇文章。

【web系列二】Django服务器搭建_Nicholson07的博客-优快云博客_django 服务端

【web系列十】Vue3+Django+MySQL搭建前后端框架_Nicholson07的博客-优快云博客_前后端通信框架

【web系列十一】使用django创建数据库表_Nicholson07的博客-优快云博客_django创建数据库表

mysql踩坑记录

版本问题

        值得注意的是,Ubuntu下Mysqldb不兼容Python3.5,可以使用Pymysql替代,需要修改一下代码,修改完的版本在win下也可以正常运行,博主亲测。

        报错如下:NameError: name '_mysql' is not defined

1、安装pymysql

pip install pymysql

2、配置数据库

        修改项目的setting.py文件

import pymysql 
pymysql.install_as_MySQLdb()

3、如果还报错

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.4.0 or newer is required; you have 0.10.1.

         可以加一行代码,直接指定版本来解决。

import pymysql
pymysql.version_info = (1, 4, 13, "final", 0)
pymysql.install_as_MySQLdb()

远程访问

        在博主的这篇文章->数据库部署->Ubuntu系统下要注意中有了记录。

【web系列九】快速上手MySQL数据库_Nicholson07的博客-优快云博客

中文乱码

        ubuntu下数据库默认是无法显示中文的,中文数据会显示为'"??"。

        需要修改一下Mysql的配置文件,在/etc/mysql/mysql.cnf,要注意系统版本。

[client]
default-character-set=utf8
[mysqld_safe]
default-character-set=utf8
[mysqld]
default-character-set=utf8  #ubuntu12.04以前的版本
character-set-server=utf8   #ubuntu12.04以后的版本
[mysql]
default-character-set=utf8

        然后重启mysql,下面两种方式都可以。

/etc/init.d/mysql restart
service mysql restart

         旧的mysql数据表是不会生效的,需要重新创建,然后可以输入以下执行查看是否修改成功了。

show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

参考文献

8分钟带你深入浅出搞懂Nginx - 知乎 (zhihu.com)

ubuntu安装nginx_小白、瑶的博客-优快云博客_ubuntu 安装nginx

ubuntu ftp连接 filezilla连接 FileZilla提示错误:认证失败,严重错误,无法连接到服务器:huizai的博客 - IIS7站长之家【WWW.IIS7.COM】

 VIM命令大全_wongIEEE的博客-优快云博客_vim命令

ubuntu中vim多行注释与取消注释_一只大大大媛的博客-优快云博客_ubuntu注释

解决Nginx出现403 forbidden (13: Permission denied)报错的四种方法_西奥斯的博客-优快云博客_nginx403

NameError: name ‘_mysql‘ is not defined_期与遇的博客-优快云博客

Ubuntu中MySQL中文有乱码的情况如何处理-群英 (qycn.com)

### 如何在Linux Ubuntu服务器上部署Django Web项目 #### 创建虚拟环境并安装依赖包 为了不影响系统的其他部分,在Ubuntu Linux上部署Django应用程序的最佳实践是在创建的虚拟环境中执行此操作。这可以通过`venv`模块完成,该工具允许创建独立于全局Python环境的虚拟Python环境[^1]。 ```bash sudo apt-get update sudo apt-get install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl ``` 接着可以使用如下命令来设置虚拟环境: ```bash python3 -m venv myproject_env source myproject_env/bin/activate pip install django gunicorn psycopg2-binary ``` #### 配置数据库 通常推荐PostgreSQL作为生产级别的Web应用数据库。对于新版本的Ubuntu,默认情况下会自动创建名为postgres的用户和角色。通过以下指令登录到Postgres控制台,并按照提示建立新的数据库以及分配权限给特定的角色。 ```sql sudo -u postgres psql CREATE DATABASE myproject; CREATE USER myprojectuser WITH PASSWORD 'password'; ALTER ROLE myprojectuser SET client_encoding TO 'utf8'; ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed'; ALTER ROLE myprojectuser SET timezone TO 'UTC'; GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser; \q ``` #### 设置Gunicorn服务 为了让Django能够处理HTTP请求,需要配置WSGI HTTP Server比如Gunicorn。编辑项目的wsgi.py文件确保其路径正确指向settings.py文件的位置。之后可以在终端里运行gunicorn测试是否能启动成功。 ```bash cd ~/myproject gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:application ``` #### 安装Nginx并配置反向代理 最后一步是让Nginx成为前端webserver负责接收外部访问并将这些请求转发至内部监听socket文件的Gunicorn进程。先安装nginx再修改/etc/nginx/sites-available/myproject配置文件添加location block映射静态资源目录与unix socket连接地址。 ```nginx upstream app_server { server unix:/home/user/myproject/myproject.sock fail_timeout=0; } server { listen 80; server_name server_domain_or_IP; location /static/ { alias /path/to/static/files/; } location / { proxy_pass http://app_server; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_redirect off; } } ``` 重启Nginx使更改生效: ```bash sudo systemctl restart nginx ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值