在上一篇文章中,详细讲述了如何在vps上搭建ftp服务,参考我的文章本地访问远程vps中的sqlite数据库中的内容之(一)建立并访问ftp服务器-CSDN博客
本篇记录一下如何在本地访问远程vps中的sqlite数据库。
(一)首先使用如下命令给vps搭建python3的环境
sudo yum update -y
sudo yum install -y python3 python3-pip
安装好以后,使用which python3查看一下
安装 web.py
框架
pip3 install web.py
CentOS 7上是自带sqlite3的,所以一般不需要安装。
(二)远程访问sqlite
既然无法远程直接访问sqlite,那么就通过web api接口来访问。
思路如下:
本地----web api----远程vps(api读取sqlite)
将本地编写好的get_vps_sqlite.py和数据库proxy.db一并通过Filezilla上传到vps的同一目录中。
get_vps_sqlite.py代码如下:
import web
import sqlite3
import json
urls = (
'/', 'Index'
)
data_path = 'proxy.db'
app = web.application(urls, globals())
class Index:
def GET(self):
try:
params = web.input(id=None, country=None, limit=None)
conn = sqlite3.connect(data_path)
conn.row_factory = sqlite3.Row
cursor = conn.cursor()
sql = "SELECT * FROM proxys"
conditions = []
values = []
# 根据参数拼接查询条件
if params.id:
try:
record_id = int(params.id)
conditions.append("id = ?")
values.append(record_id)
except ValueError:
return json.dumps({"error": "参数 id 必须是整数"}, ensure_ascii=False)
if params.country:
# 模糊匹配或者精确匹配都可以,这里示范精确匹配
conditions.append("country = ?")
values.append(params.country)
if conditions:
sql += " WHERE " + " AND ".join(conditions)
# 处理limit参数
if params.limit:
try:
limit = int(params.limit)
if limit <= 0:
return json.dumps({"error": "参数 limit 必须是正整数"}, ensure_ascii=False)
sql += " LIMIT ?"
values.append(limit)
except ValueError:
return json.dumps({"error": "参数 limit 必须是整数"}, ensure_ascii=False)
cursor.execute(sql, tuple(values))
rows = cursor.fetchall()
result = [dict(row) for row in rows]
web.header('Content-Type', 'application/json; charset=utf-8')
return json.dumps(result, ensure_ascii=False)
except Exception as e:
web.ctx.status = '500 Internal Server Error'
return json.dumps({"error": str(e)}, ensure_ascii=False)
finally:
if 'conn' in locals():
conn.close()
if __name__ == "__main__":
import sys
sys.argv.append("0.0.0.0:8383")
app.run()
放开8383端口
sudo firewall-cmd --zone=public --add-port=8383/tcp --permanent
sudo firewall-cmd --reload
检查是否放行成功
sudo firewall-cmd --list-ports
(三) 在远程vps上运行get_vps_sqlite.py
进入项目目录(这个目录也是我的ftp目录):
cd /home/xiaoqinglong/files
运行脚本,注意:保持后台运行建议用 nohup
nohup python3 get_vps_sqlite.py > output.log 2>&1 &
(四) 本地测试访问
在本地电脑的浏览器中输入如下地址,成功。
http://vps的ip地址:8383/
http://vps的ip地址:8383/?id=12
http://vps的ip地址:8383/?country=CN&limit=5
(五)安全建议
如果你只是自己使用这个 API,可以只允许你本地的 IP 访问 8383端口,在vps控制台命令中输入:
sudo firewall-cmd --zone=public --add-rich-rule='
rule family="ipv4" source address="你的本地公网IP/32" port protocol="tcp" port="8383" accept' --permanent
sudo firewall-cmd --reload
这样,就可以实现本地访问远程vps中的sqlite数据库了。
通过完善vps中的xxx.py,配合上青龙界面,可以实现定时操作数据库。而本地则什么都不需要做,只需要在浏览器输入网址访问即可,非常方便。