【新手向】阿里云上ubuntu+flask+gunicorn+nginx服务器部署(二)项目部署

本项目实现的是类似于ins的图片分享网站。继续(一),当nginx的配置已修改好后,要在远程服务器上部署网站,只需要几个步骤:

1 前期准备

2 将运行网站的代码从github上下载过来

3 下载依赖包

4 创建数据库 

5 运行gunicorn+nginx

前期准备

如果是一台全新服务器的话,通常我们是以 root 用户登录的。在 root 下部署代码不安全,最好是建一个新用户(如果你已经以非 root 用户登录的话可以跳过这一步)。下面的一些列命令将创建一个拥有超级权限的新用户:

# 选择一个你喜欢的用户名,不一定非得和我的相同
root@localhost:~# useradd -m -s /bin/bash yangxg
# 把新创建的用户加入超级权限组
root@localhost:~# usermod -a -G sudo yangxg
# 为新用户设置密码
# 注意在输密码的时候不会有字符显示,不要以为键盘坏了,正常输入即可
root@localhost:~# passwd yangxg
# 切换到创建的新用户
root@localhost:~# su - yangxg
# 切换成功,@符号前面已经是新用户名而不是 root 了
yangxg@localhost:~$

新用户创建并切换成功了。如果是新服务器的话,最好先更新一下系统,避免因为版本太旧而给后面安装软件带来麻烦。运行下面的两条命令:

yangxg@localhost:~$ sudo apt-get update
yangxg@localhost:~$ sudo apt-get upgrade

从github上下载代码

Linux终端进入需要下载代码的目录后,输入:

git clone https://github.com/Icarus1994/now_picshare.git

其中url可以在自己所创建仓库的clone or download处找到:

即可在指定目录下下载代码。注意:不要下载数据库。

下载依赖包

本项目是基于flask这种轻量级框架写的,同时使用ORM使python对象与数据库记录一一对应,并且服务器对于用户上传的图片的存储使用的是阿里云的存储技术,即上传的图片实际上是存储到阿里云的服务器中,而自己租用的远程服务器只是存储由阿里云提供的图片外链的url,这样大大减轻了服务器的负担。

因此,远程服务器上需要下载的依赖包包括:

数据库相关--pip3 install mysql-server , libmysqlclient-dev 

服务器--python-flask , python-dev

依赖包--Flask-Script , Flask-Login , Flask-SQLAlchemy , Flask-MySQLdb,以及用于存储图片的阿里云SDK中要求下载的相关包:

pip3 install aliyun-python-sdk-core-v3
pip3 install aliyun-python-sdk-ecs

也可能根据需求需要下载其他包,参见阿里云SDK即可:https://help.aliyun.com/document_detail/53090.html?spm=a2c4g.11174283.3.1.LavwRK

注意:如果项目使用的是python3,使用pip下载时都需要改为pip3 install pacakage

下载好依赖包后,最好都用终端进入Python3 import试一试:

1 root@iZ2ze2gihbn4ot85zlcdxdZ:~# python3
2 Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
3 [GCC 5.4.0 20160609] on linux
4 Type "help", "copyright", "credits" or "license" for more information.
5 >>> import flask_login
6 >>> 

建议进入python3命令行方式引入包,而不是直接进入运行服务器的python文件,因为这时如果没有正常退出py文件的话,使用gunicorn运行时会发生进程被占用的情况,显示:connect in use, 可以通过该方法解决:https://www.cnblogs.com/IcarusYu/p/8582894.html

创建数据库

由于项目的配置文件(我的是app.conf)中数据库的位置是这样:

SQLALCHEMY_DATABASE_URI = 'sqlite:///../nowstagram.db'

nowstagram.db是我所建的网站的数据库,路径使用的是相对路径(为了避免写代码时路径与远程服务器路径不一样,建议写为相对路径),所以我们要在下载的代码的目录下创建数据库:

root@iZ2ze2gihbn4ot85zlcdxdZ:/home/yy/now_picshare# sqlite3 nowstagram.db
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
sqlite> 

执行以上语句后,如果此时目录下没有nowstagram.db数据库则会新建数据库,如果已经有则打开数据库。

由于网站首页会展示一些用户的图片,因此我们需要初始化数据库。在代码中写好有初始数据库的方法init_database,并且置于manager.py文件中@manager.command下。因此我们可以在网站代码路径下执行命令:

python3 manager.py init_database

这样初始化后,在nowstagram.db中应该能检查到有新增数据:

sqlite> .tables
comment  image    user   
sqlite> select * from image
   ...> ;
1|https://images.nowcoder.com/head/894m.png|1|2018-03-16 16:39:42.107573
2|https://images.nowcoder.com/head/863m.png|1|2018-03-16 16:39:42.107822
3|https://images.nowcoder.com/head/125m.png|1|2018-03-16 16:39:42.108002
4|https://images.nowcoder.com/head/48m.png|1|2018-03-16 16:39:42.108172
5|https://images.nowcoder.com/head/238m.png|1|2018-03-16 16:39:42.108337
6|https://images.nowcoder.com/head/24m.png|1|2018-03-16 16:39:42.108499
7|https://images.nowcoder.com/head/107m.png|1|2018-03-16 16:39:42.108676

运行gunicorn+nginx

以上都执行完后,只要运行gunicorn和nginx即可见到自己建好的网站啦(参见(一))。nginx配置文件中的listen 80;proxy_pass 127.0.0.1:5000使服务器的80端口被监听,并将请求转到5000端口。gunicorn运行命令中的myapp:app指定了要执行的代码路径和监听端口5000(我设置的是5000,也可以设置其它的),这样用户访问时输入IP+80端口号就能访问网站,收到服务器的响应

参考:https://www.zmrenwu.com/post/20/

原文地址:https://www.cnblogs.com/IcarusYu/p/8568654.html