记录如何优雅地在华为云上部署网站(Ubuntu20.04+flask+Gunicorn+nginx+HeidiSQL)

一、总体思路

对于之前没有部署过网站的小伙伴来说,可能思路没有很理顺清楚,我大概说一下:
1、第一步,就是有网站程序。自己写,我这边会以一个简单的flask应用作为示例。
2、第二步,先买服务器。服务器就是你存放网站程序的地方,本质就是一台电脑,动手能力强的可以自己买服务器,动手能力差的就可以直接用华为云服务器,这样很多东西都配套好,突出省心!!然后既然是买一台电脑的使用权,那自然是要有操作系统了,我这边选择的是华为云ubuntu20.04,linux的,其实也不难,主要学会一些主要命令就好了,下面会简单介绍一下。**关于配置:**初学就买最便宜就好。**关于服务器地址:**因为你的云服务器不是在家里用网线就能连接,所以会有一个弹性公网IP,就是你这台电脑的远程地址,一般是固定的,使得你的客户可以用来连接你的远程主机。
3、第三步,然后就要买域名了。域名就是例如google.com这个样子。关于域名作用:就是让你的客户能更加容易记住,毕竟一串数字很难记的。关于解析域名:本质就是将弹性公网IP绑定到对应的域名上,所以一定程度上:弹性公网IP == 域名。
4、第四步,打开安全组,打开端口。安全组就是云服务器的防火墙,端口就是墙上的洞,所以对于安全组物理意义上的理解:是带有很多洞的一面墙,这些洞默认就是端口,默认都是封闭的。默认是只能通过华为云的官方网站访问,其他客户不能入也不能出。主要是通过端口来限制。关于端口,一般来说,如果正常互联网上的网站就对外开放80端口(非加密),443端口(加密)。注意其中80端口是一个系列,8080也是80端口,8081也是80端口,同理443端口。
5、第五步,备案。虽然理论上打开了端口就能
通过域名
外部访问,例如www.googlk.com。但是,你会发现,打开不到2秒就会被封,因为没有备案,要及时备案才能使用。所以如果想先不备案的,可以在云服务器安全组上设置,例如放开8420端口,使用弹性IP地址就能访问,例如:83.32.44.333:8420用于测试就行。接下来举一个例子,主要涉及华为云官网上的部署操作和linux上的部署操作。

一、华为云官网上操作

1、注册华为云账号,没什么好说的。
**2、购买云服务器,**同样也没什么好说的有钱就行,购买后就知道你的弹性IP地址例如是83.32.44.333。
**3、注册域名:**登录后首页搜索:域名注册服务 Domains。给钱购买域名,你就拥有了例如gogo.com域名的使用权,
在这里插入图片描述
之后关于域名有两件事要做:
(1)实名登记:就是说这个域名gogo.com是卢某拥有的。
(2)域名解析:例如你的弹性公网IP是83.32.44.333,解释后就能通过gogo.com访问你的弹性公网IP。 域名注册=>域名解析=>创建成功后=>管理解析=>快速添加解析=>将弹性公网IP绑定到对应的域名上,看华为的文档就够。一般通过解析gogo.com后,就能通过gogo.com、www.gogo.com两个网址访问到你的网站。
(3)测试:通过ping,测试域名是否绑定成功。
3.1安全组设置=>入规则方向=>快速添加规则=>ICMP(全部)=>全部。
关于安全组设置,可看这个https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0081124350.html。
在这里插入图片描述 3.2在本地通过cmd输入,例如ping gogo.com,测试连同是否通过。 在这里插入图片描述

二、服务器之linux基本操作

1、做好密码管理
部署一个网站有很多密码要记住,忘记了会很麻烦,例如忘记了linux的密码,往往使用华为云自带的修改密码功能不一定管用,使用单用户模式新手有时也不好弄,所以最好是记住密码,以下罗列要记住的密码:
(1)华为云账号用户和密码。
(2)ubuntu或linux系统开机账号和密码。
(3)mysQL本地根账号和密码。
(4)mysql远程账号和密码。
2、linux基本操作。
(1)华为远程云电脑大概长这个模样:
在这里插入图片描述
(2)图形化界面
可以安装图形话界面,然后按ctrl+alt+F7跳转。安装图形话界面教程可以看这篇文章:https://www.cnblogs.com/smqh-bokeyuan/p/17527973.html。
(3)基本操作。
1、关于文件操作。但一般都会安装WINSCP,用于远程操作Linux系统的文件内容,但基本的vim操作文件还是要会的啦:
(vim基本操作打开文件:vim 文件目录,例如:vim /etc/var/app.py)
(命令模式esc,插入模式i,底行模式:)
(插入模式和底行模式都要先通过命令模式来切换,所以遇事不决先按esc,底行模式主要是用来保存退出)
( 保存退出 :wq 退出:q )

2、终端快捷键: ctrl+alt+t
(3)安装WinSCP:作用是远程进行文件操作,直接在服务器端进行文件操作太蛋疼了,新手还是在window主机上进行操作比较简便,可以参考这篇文章,很简单的不说了:
https://support.huaweicloud.com/ecs_faq/zh-cn_topic_0166284971.html
安装之后就可以远程进行文件及文件夹的增删改查、复制、粘贴、权限变更等操作,完美。在这里插入图片描述

二、网站部署

1、系统基本环境检查
(1)确保安装了python3 --version pip3 pip3 list
(2)确定应用地址,建立写代码的文件夹test1(修改权限):sudo mkdir /var。安装有WinSCP就直接远程创建个文件夹就行,我一般是给足权限的。在这里插入图片描述
(2)创建虚拟环境操作并在虚拟环境内安装包

            进入对应的目录:使用CD命令,例如cd /var/test1
           1安装虚拟环境:sudo pip3 install virtualenv
           2创建虚拟环境:virtualenv -p python3 testenv    testenv是虚拟环境名称(自定义)
           3激活虚拟环境:source testenv/bin/activate   testenv是虚拟环境名称
           4退出虚拟环境 deactivate
           5安装包:如果在别的电脑下已经有测试好的包环境,可以在本地电脑通过pip3 freeze > requirements.txt取得安装目录  =>  然后激活虚拟环境  =>    requirements.txt通过WinSCP存放在项目目录test1内(不是虚拟环境目录testenv)  =>    pip3 install -r requirements.txt安装
           6、本人的requirements.txt文件如下:
           7、注意Ubuntu 22.04安装mysqlclient可能会出错,解决方法:
           运行apt-get install libmysqlclient-dev  =>    运行sudo apt-get install pkg-config  =>    然后再pip install mysqlclient==2.2.1

本人的requirements.txt文件如下:

alembic==1.13.0
blinker==1.7.0
Bootstrap-Flask==2.3.3
click==8.1.7
colorama==0.4.6
dnspython==2.4.2
email-validator==2.1.0.post1
filelock==3.13.1
Flask==3.0.0
Flask-Admin==1.6.1
Flask-Login==0.6.3
Flask-Migrate==4.0.5
Flask-Sijax==0.4.1
Flask-SQLAlchemy==3.1.1
Flask-WTF==1.2.1
future==0.18.3
greenlet==3.0.2
idna==3.6
itsdangerous==2.1.2
Jinja2==3.1.2
Mako==1.3.0
MarkupSafe==2.1.3
mysqlclient==2.2.1
pip==23.3.1
PyMySQL==1.1.0
setuptools==69.0.2
Sijax==0.3.2
six==1.16.0
SQLAlchemy==2.0.23
typing_extensions==4.9.0
virtualenv==20.25.0
Werkzeug==3.0.1
wheel==0.42.0
WTForms==3.1.1

(3)Ubuntu上安装mysql
参考:https://blog.csdn.net/qq_62656514/article/details/136356884
https://zhuanlan.zhihu.com/p/610793026
1、获取权限: sudo su
2、更新ubuntu上列表,作用是更新系统的安装目录: sudo apt update
3、ubuntu下安装mysql,sudo apt install mysql-server =>下载mysql,默认是最新版本,现在是8.0
(1)安装后可以查看版本: mysql --version
4、设置安全选项: sudo mysql_secure_installation => 然后会弹出5个问题让你选择:我翻译一下:密码验证组件n,删除匿名y,不允许远程登录n,移除测试数据库n,重加载权限表y
5、由于mysql8.0默认跳过密码设置,所以需要单独设置root密码:默认root账号密码为root,使用默认密码进入root账号:mysql -u root -p => 进入后修改密码,使用代码ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123’; => 使用代码重载权限表并退出MySQL控制台:FLUSH PRIVILEGES; exit;
6、测试是否能与flask进行连接.
7、root下创建一个新用户testdb用于远程连接:
(1)创建testdb用户: CREATE USER ‘testdb’@‘%’ IDENTIFIED BY ‘123’; FLUSH PRIVILEGES; exit;
(2)修改mysQL配置: sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 下修改 bind-address =127.0.0.1 改为 0.0.0.0(还有mysqlx-bind-address,ss -tlnp查看)
(3)开通防火墙3306端口。
(4)在本地电脑测试:mysql -u testdb -p -h 83.32.44.333
8、授予testdb控制数据库testland的权利:
参考:https://blog.csdn.net/supeerzdj/article/details/131654776?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171198305116800184175866%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=171198305116800184175866&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-131654776-null-null.142v100control&utm_term=MySQL8.0%E6%8E%88%E6%9D%83&spm=1018.2226.3001.4187
(1)登录root账号:
(2)创建jinhuiland数据库:create database testland;
(3)use testland;
(4)用户授权:GRANT ALL PRIVILEGES ON testland.* to ‘testdb’@‘%’; FLUSH PRIVILEGES; exit;
(5)查看权限:show grants for ‘testdb’@‘%’;

(3)在test1目录内放入最简单的flask项目:app.py

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_flask():
    return 'Hello Flask!'

if __name__ == '__main__':
    app.run()

(4)HeidiSQL安装在本地window系统中,怎么弄的不说了,很简单的。

(5)安装并使用Gunicorn
1、作用:是代替python3 app.py中app.run()这项代码。
2、简单使用实例:gunicorn -w 3 -b 0.0.0.0:9100 app:app #第一个app是py文件名称,第二个app是py文件内的app应用,可能有app1\app2
3、在虚拟环境中安装Gunicorn:pip3 install gunicorn
4、推荐在gunicorn中使用配置文件的方式启动(特别在参数很多的时候):
4.1在项目下新建文件夹 mkdir /var/test1/gunicorn(建议文件夹放在app.py同一级内)
4.2在其中使用VIM写入配置文件gunicorn_conf.py(附件),或者使用WINSCP。
5、启动: gunicorn -c gunicorn/gunicorn_conf.py app:app
(注意:在Ubuntu终端中将不再输出日志,可以使用ctrl+c中断) (#注意:第一个app是py文件名称,第二个app是py文件内的app应用,可能有app1\app2)
6、 gunicorn_conf.py

import multiprocessing

bind = '0.0.0.0:8459'    #端口
workers = multiprocessing.cpu_count()*2+1     #进程数
reload = True    #代码改变时自动重启
loglevel = 'info'    #日志输出等级
timeout = 600    

log_path = "/root/var/test1"    
accesslog = log_path + '/gunicorn/access.log'    #进入进程日志
errorlog = log_path + '/gunicorn/error.log'    #错误日志

(6)安装并使用nginx
1、安装:sudo apt-get install nginx
查看nginx是否在运行:ps -ef | grep nginx
2、/etc/nginx/cong.d下添加自定义配置文件default.conf(见附件)
default.conf主要是 => gunicorn运行的应用使用8459端口,然后nginx监听8490端口并转发至8459端口,客户端通过8490端口发送命令。
3、 systemctl start nginx =>不行就,nginx -s reload
4、运行gunicorn,搞定
5、default.conf文件,最简单的形式,有兴趣去深度学习吧:

server {
    listen 8490;                
    server_name 83.32.44.333;  #可以用服务器的ip当名字
    location / { 
        proxy_pass http://0.0.0.0:8459; 
    }   
}
  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值