网络编程实践笔记_2_"阿贝云"_"免费云服务器"_云端启动

接上一篇 ,申请好云端服务器后,0基础记录全过程

先在服务器的管理页面,按照提示安装操作系统,根据不同服务器提供方,会有很多可选项,这里可选的有 win ubantu CentOS 还有各种版本,

image

 点完安装系统,在这个页面等一阵子,在上面的状态栏里就会提示安装成功。不过还可以继续再装,就是更换新系统了。

这里我第一次选的Ubantu,因为看到免费版的CPU和内存都比较小,想选个轻量化的系统。结果等半天也不知道是安装慢还是装好了我不知道,看起来没什么变化。

最后又选了一次CentOS试试,装了3分钟顶部的控制按钮产生变化了,感觉安装成功了

image

之后尝试使用ssh 连接一下主机,可以连上了。

ssh root@111.xxx.xxx.xxx -p 22

这里的111.xxx.xxx.xxx 就是我的云主机 下面的那个IP地址,命令发出后会让输入密码,不显示输入内容的,密码就是操作系统安装时,定义的那个

image

连接成功后会提示

Activate the web console with: systemctl enable --now cockpit.socket

并显示上一次登录失败的IP和上一次成功的登陆IP

然后命令提示变为:
[root@localhost ~]# 

 可以使用ls命令 显示一下当前文件夹

忘了刚安装好的系统这个位置是否有内容了。。。。。当时一脸蒙,忘记看了。

由于选的是CentOS,所以开通防火墙命令与Ubantu的有点区别,是firewall

有空的时候先用

firewall-cmd --zone=public --add-port=5000/tcp

firewall-cmd --reload

永久开通一下 5000 端口,这个端口是与py代码里的

if __name__ == '__main__':
print_hi('PyCharm')
init_database()
with app.app_context():
db.create_all()
app.run(host='0.0.0.0', port=5000)

这里的port对应的。后续开通服务器程序也用到这个端口号。

后续是安装 python 和 升级 pip 和 virtualenv

创建环境,虽然不知道为什么,先照做

virtualenv -p python3 venv

然后启动环境

source venv/bin/activate

装gunicorn库

pip install flask gunicorn

之后根据py代码需要,安装其他需要的库flask_sqlalchemy,sqlite3,bcrypt 

最后刷新一下requirements.txt,也是不知道为什么,反正做一下没坏处

pip freeze > requirements.txt

一切就绪之后,可以复制本地测试好的代码到服务器了

scp -r /本地/目录路径 用户名@远程IP:/目标路径

例如将本地/data/reports目录上传到远程服务器的/backup/2025目录:

scp -r C:\test\host root@111.xxx.xxx.xxx:/backup/2025
 
我是直接复制到了root的工作目录,而且这个本地路径也费了很大劲,忘了要用\\还是直接CD到host目录下了,
scp -r C:/test/host root@111.xxx.xxx.xxx:/root/
我使用的这条命令,要注意的是,要回到本机模式使用,不要在ssh的远程模式下,后面的ip地址后面有个 冒号,后面的/代表远程主机根目录,但是默认ssh进去的位置
是/用户名/ 下,也就是我上面用的:/root/
然后我ssh登陆后的默认目录就变成了下面这样

[root@localhost ~]# ls
anaconda-ks.cfg host install.sh requirements.txt venv

其中 host 是拷贝过来的,venv是环境建立的,貌似他俩是目录,所以显示时是蓝色的。

如果使用的别的环境名,改一下source VXXX/bin/activate 其那面那个VXXX对应你的环境名

万事俱备之后

使用

(venv) [root@localhost ~]# gunicorn -w 4 -b 0.0.0.0:5000 host.main:app

启动服务器程序!前面的 (venv) [root@localhost ~]# 是命令提示符的状态,这个(venv)代表启动了环境, [root@localhost ~]代表在远程主机的工作目录。

最后面的 0.0.0.0:5000 host.main:app,是对应5000端口,然后/host/main.py文件中,app所对应程序。

py的代码里有定义程序名字

app = Flask(__name__)
……
……
……
if __name__ == '__main__':
print_hi('PyCharm')
init_database()
with app.app_context():
db.create_all()
app.run(host='0.0.0.0', port=5000)

最后面的代码里也有这个app.run
py的代码里有定义程序名字,对应好。

如果一切正常,应该会提示

[2025-10-13 09:33:50 +0800] [318919] [INFO] Starting gunicorn 21.2.0
[2025-10-13 09:33:50 +0800] [318919] [INFO] Listening at: http://0.0.0.0:5000 (318919)
[2025-10-13 09:33:50 +0800] [318919] [INFO] Using worker: sync
[2025-10-13 09:33:50 +0800] [318922] [INFO] Booting worker with pid: 318922
[2025-10-13 09:33:50 +0800] [318923] [INFO] Booting worker with pid: 318923
[2025-10-13 09:33:50 +0800] [318924] [INFO] Booting worker with pid: 318924
[2025-10-13 09:33:50 +0800] [318925] [INFO] Booting worker with pid: 318925
[2025-10-13 09:34:10 +0800] [318919] [INFO] Handling signal: winch

到这就不要乱按了,尤其是crtl+c。。这里是终止程序用的。

然后就可以切换到浏览器里,输入虚拟服务器的IP:5000 来访问了,第一次可能稍微慢点,可能是网页里有其他内容要加载。

image

上面是所有服务器和远程端的操作,过去了几天,并且由于服务器到期了一次,命令历史记录没了,有些是靠回忆的,有些是今天的操作命令。

最主要的一点就是那个防火墙放行端口,也许第一天就已经可以访问了,但是一直不知道怎么调试或者查询状态,加上时间紧,一阵手忙脚乱。

想测试服务器是否远程启动,可以用

curl localhost:5000
在服务器端访问一下,看看有没有响应,如果运行正常,会得到http的应答,

(venv) [root@localhost host]# curl localhost:5000

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>我的博客</title>

…………

 

就是py代码里 

@app.route('/')
def index():
posts = Post.query.order_by(Post.created_at.desc()).all()
return render_template('index.html', posts=posts)

 这里return的index.html的内容

下一篇会继续更新py代码和html的内容,其实这些可以用AI提供的代码稍作修改就可以,只要本地运行本地测试正常,这里就都一样了

posted @ 2025-10-13 11:36  华斯基  阅读(21)  评论(0)    收藏  举报