Vue + Flask 实战开发系列(十)

2020-09-01 14:51:47 浏览数 (1)

欢迎来到我的“Vue Flask”系列的第十部分。这也是本系列最后一部分。在次内容中,我们将把我们的项目部署在一个生产服务器上。在部署应用之前,需要在服务器上安装好nginx。关于nginx的安装本文不做介绍。我们先从前端的部署开始。

现在让我们为Vue项目创建一个nginx配置文件。假设我们的项目目录是/var/www/vue-flask-app。以下是 nginx 的 dist 目录配置:

代码语言:javascript复制
server {
    listen 80;
    root /var/www/vue-flask-app/dist;
    index index.html;

    location / {
        try_files $uri $uri/ = 404;
		add_header Cache-Control "no-cache";
    }
	
	location /static {
        expires 1y;
        add_header Cache-Control "public";
    }
}

root指令告诉 nginx 项目根目录的位置。Index指令用于配置当客户端请求以/结尾的 URL 或者没有找到路径时返回的默认文件。Vue 项目的主文件是 index. html,所以我们需要使用这个文件。完成上面的配置后,重新启动nginx服务。

代码语言:javascript复制
$ nginx -s reload

重启成功后,你去访问的时候,应该可以看到登录页面。

Vue端现在已经可以正常工作了,现在让我们来看看Flask API。在开发过程中使用了 Flask 开发 web 服务器,但是这个服务器不够健壮,不适合生产使用。我们需要的是一个生产级的 web 服务器。在本文中,我将使用 Gunicorn,它需要安装在我们的 API 项目的虚拟环境中:

代码语言:javascript复制
(venv) $ pip install gunicorn

用 Gunicorn 运行我们的 API 项目的命令如下:

代码语言:javascript复制
$ gunicorn -b 127.0.0.1:5000 api:app

由于此应用程序将在生产服务器上运行,因此我们必须确保它始终在运行,因此从命令行启动应用程序实际上是不够的。

Linux 有几个进程监视系统,专门用于保持服务的运行。在大多数现代 Linux 发行版中,systemd 都是用于此目的的。现在让我们在/etc/systemd/system/目录下,创建一个vue-flask-app.service配置文件,然后输入下面内容:

代码语言:javascript复制
[Unit]
Description=A simple Flask API
After=network.target

[Service]
User=root
WorkingDirectory=/var/www/vue-flask-app/api
ExecStart=/var/www/vue-flask-app/api/venv/bin/gunicorn -b 127.0.0.1:5000 api:app
Restart=always

[Install]
WantedBy=multi-user.target

完成上面的配置后,重新加载systemd:

代码语言:javascript复制
$ sudo systemctl daemon-reload

如果一切都正常,现在你就可以启动Flask API项目了:

代码语言:javascript复制
$ sudo systemctl start vue-flask-app

如果你想验证服务是否正在运行,你可以使用 status 命令:

代码语言:javascript复制
$ sudo systemctl status vue-flask-app
● react-flask-app.service - <a description of your application>
   Loaded: loaded (/etc/systemd/system/react-flask-app.service; disabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-07-28 16:54:09 UTC; 17h ago
 Main PID: 10449 (gunicorn)
    Tasks: 2 (limit: 1152)
   CGroup: /system.slice/vue-flask-app.service
           ├─10449 /var/www/vue-flask-app/api/venv/bin/python3 /var/www/vue-flask-app/api/venv/bin/gunicorn -b 127.0.0.1:5000 api:app
           └─10493 /var/www/vue-flask-app/api/venv/bin/python3 /var/www/vue-flask-app/api/venv/bin/gunicorn -b 127.0.0.1:5000 api:app

Mar 28 16:54:09 demobox systemd[1]: Started <a description of your application>.
Mar 28 16:54:10 demobox gunicorn[10449]: [2020-07-28 16:54:10  0000] [10449] [INFO] Starting gunicorn 20.0.4
Mar 28 16:54:10 demobox gunicorn[10449]: [2020-07-28 16:54:10  0000] [10449] [INFO] Listening at: http://127.0.0.1:5000 (10449)
Mar 28 16:54:10 demobox gunicorn[10449]: [2020-07-28 16:54:10  0000] [10449] [INFO] Using worker: sync
Mar 28 16:54:10 demobox gunicorn[10449]: [2020-07-28 16:54:10  0000] [10493] [INFO] Booting worker with pid: 10493

通过status命令,可以看到服务的运行状态,如果服务运行出现错误,也可以看到具体的错误信息。接下来,我们使用 nginx 作为 API 服务的反向代理。继续在ngnix配置文件中,添加如下内容:

代码语言:javascript复制
location /api {
        include proxy_params;
        proxy_pass http://localhost:5000;
}

添加完配置内容,重新加载nginx。

代码语言:javascript复制
$ sudo systemctl reload nginx

现在,在刷新页面,前端就可以调用api正常登录了。到此这个项目已经完全配置部署好了!

0 人点赞