服务器打卡部署文档
服务器打卡部署文档
米粒文档声明
仅供学习交流使用
我们不鼓励、不赞成、不支持任何人,使用任何违规方式完成实习和打卡任务。
同时,鉴于项目的特殊性,开发者可能在任何时间停止更新或删除项目。
更新日志
2023-12-24
新增手机app
新增密钥功能
支持用户独立代理userAgent
2023-12-24支持周报选择开关和提交日期。
支持月报选择开关和提交日期。
支持补签选择开关。
支持选择打卡日期。
支持打上班和下班卡时间自定义。
功能介绍
本项目支持
- 表单填写验证账号密码是否正确
- 签到(默认周日不签到)
- 补签(支持30天内,默认开启)
- 日报
- 周报
- 月报(默认开启)
- 补交日报
- 补交周报
- 动态代理IP不封号
使用教程
- 需要填写的内容
- 手机号:
- 密码:
- 详细地址:(标准格式为:河南省 · 漯河市 · 舞阳县 · 文峰乡贾湖文化广场东南角10号(附近))
- 日报
- 周报
- 补交日报(支持30天内,需要填写开始的日期和结束的日期,不能提前提交日报。)
- 补交周报(最多只能补交17周)
快速开始
服务器选择
大部分阿某里,某讯服务器 IP 已经被官方封禁。不推荐使用。建议选择一些其他厂商的服务器。这里提供一个我在使用的服务器厂商亿速云。如果使用人数比较多,建议上高配置。
服务器系统选择
本教程推荐 Ubuntu系统,版本选择服务厂商的最新版即可。
设置服务安全
这里提供亿速云的操作流程
配置SSH连接服务器
查看服务器ip
根据自己的电脑系统(不是服务器系统)下载FinalShell工具,安装好。
安装宝塔面板
1 | wget -O install.sh https:#download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec |
后面全部默认输入y
- 当看到这个的时候,把外网面板地址复制粘贴到浏览器的地址栏中,username为账号,password为密码
- 安装推荐套件
配置数据库
- 创建数据库
推荐名称都用gongxueyun方便后面的操作
- 登录数据库
创建数据库表单
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26CREATE TABLE `users` (
`phone` varchar(15) NOT NULL,
`password` varchar(255) NOT NULL,
`address` varchar(300) NOT NULL,
`province` varchar(80) NOT NULL,
`city` varchar(80) NOT NULL,
`area` varchar(80) NOT NULL,
`latitude` decimal(10,8) NOT NULL,
`longitude` decimal(11,8) NOT NULL,
`bujiao` tinyint(1) DEFAULT NULL,
`bujiao_start_date` date DEFAULT NULL,
`bujiao_end_date` date DEFAULT NULL,
`reedy` tinyint(1) DEFAULT NULL,
`requirement_week_num` int(11) DEFAULT NULL,
`token` text,
`user_id` varchar(255) DEFAULT NULL,
`days` varchar(225) DEFAULT '180',
`punch_status` varchar(255) DEFAULT '未签到',
`registration_date` date DEFAULT NULL,
`daily_report_status` varchar(255) DEFAULT '未提交日报',
`weekly_report_status` varchar(255) DEFAULT '未提交周报',
`zhobao` tinyint(1) DEFAULT NULL,
`xuanbujiao` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
后面的SQL代码都是这样操纵的创建数据库定时事件
给数据库权限,打开FinalShell工具,连接服务器,执行下面的指令。
1
mysql -u root -p
获取数据库root密码。
- 输入密码
给指定数据库权限,如果数据库名称是和我一样的就不用修改,不一样的情况需要将 ‘gongxueyun‘@’localhost’ 改成 ‘xxxxx‘@’localhost’。这个“xxxx”代表你设置的数据库名称。
1
GRANT SUPER ON *.* TO 'gongxueyun'@'localhost';
当出现 Query OK, 0 rows affected的时候就成功了。CTRL+D退出数据库
回到数据库网页,在SQL中执行以下代码。如果数据库名称是和我一样的就不用修改,不一样的情况需要将 ‘gongxueyun‘@’localhost’ 改成 ‘xxxxx‘@’localhost’。这个“xxxx”代表你设置的数据库名称。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38DELIMITER $$
CREATE DEFINER=`gongxueyun`@`localhost` EVENT `ResetDailyReportStatus`
ON SCHEDULE EVERY 1 DAY
STARTS '2023-12-09 00:00:00'
ON COMPLETION NOT PRESERVE
ENABLE
DO
UPDATE users SET daily_report_status = '未提交日报'$$
CREATE DEFINER=`gongxueyun`@`localhost` EVENT `ResetWeeklyReportStatus`
ON SCHEDULE EVERY 1 WEEK
STARTS '2023-12-09 02:00:00'
ON COMPLETION NOT PRESERVE
ENABLE
DO
IF DAYOFWEEK(CURRENT_DATE) = 2 THEN
UPDATE users SET weekly_report_status = '未提交周报';
END IF$$
CREATE DEFINER=`gongxueyun`@`localhost` EVENT `reset_punch_status`
ON SCHEDULE EVERY 1 DAY
STARTS '2023-12-09 06:00:00'
ON COMPLETION NOT PRESERVE
ENABLE
DO
UPDATE users SET punch_status = '未签到'$$
CREATE DEFINER=`gongxueyun`@`localhost` EVENT `ress`
ON SCHEDULE EVERY 1 DAY
STARTS '2023-12-09 15:30:00'
ON COMPLETION NOT PRESERVE
ENABLE
DO
UPDATE users SET punch_status = '未签到'$$
DELIMITER ;
COMMIT;开启事件计划状态
1
SET GLOBAL event_scheduler="ON"
- 创建触发器
1
2
3
4
5
6
7
8
9
10DELIMITER $$
CREATE TRIGGER `ruqi` BEFORE INSERT ON `users`
FOR EACH ROW
BEGIN
SET NEW.registration_date = NOW();
END
$$
DELIMITER ;
搭建前端
- 添加站点
- 有域名就提前解析域名,这里不做演示,不知道可以百度。这里提供一个没有域名也可以搭建的方法。在域名栏中,可以填写已经解析好的域名或者直接写服务器的IP。
- 安装必要插件,在搜索栏中搜索PM2管理器 。
- 将node更新到最新版本。
- 上传前端文件。
高德开放平台密钥获取。没有账号自己注册一个。
打开前端文件夹找到app.js文件,修改以下参数。
1
2
3
4
5
6
7
8
9
10const GAODE_MAPS_API_KEY = ""; //高德开放平台密钥
# 连接到 MySQL 数据库
const con = mysql.createConnection({
host: "", //服务器的IP地址
user: "gongxueyun", //数据库的用户名
password: "",//数据库密码(不是root密码)
database: "gongxueyun", //数据库名称
port: 3306 // 数据库端口一般默认为3306
});上传文件。
- 先删除原来index.html文件,然后双击解压上传的压缩包。
- 运行前端
- 在启动文件栏中,找到刚刚上传的文件,选择里面的app.js文件。路径一般为**/www/wwwroot/域名/app.js。**
- 开放端口
- 协议选择TCP/UDP,需要开放两个端口,操作两次。一个是前端网页3000端口,一个是数据库3306端口。
- 开启反代
目标URL填写:http://127.0.0.1:3000。
- 访问网址。
如果是域名就直接访问域名即可。如果是IP,访问格式如下:
1 | IP:3000 |
配置后端
修改数据库连接参数,找到sql/mysql.py文件。修改get_db_connection这个函数的一些参数。
1
2
3
4
5
6
7
8
9
10
11
12
13# 连接数据库
def get_db_connection():
# 数据库配置
db_config = {
"host": "",#服务器的IP地址
"user": "gongxueyun", #数据库的用户名
"password": "", #数据库密码(不是root密码)
"database": "gongxueyun", #数据库名称
"port": 3306 # 数据库端口一般默认为3306
}
# 连接数据库并返回连接对象
connection = mysql.connector.connect(**db_config)
return connection, connection.cursor(dictionary=True)修改代理获取参数,找到IP/IP.py文件。
1
json_file_path = '.\henan_area_codes.json' #这个是城市区域编码
- 获取代理IP的api。注册快代理,这个需要实名认证,你也可以找不需要的,但必须要有国内的IP同时支持你服务器IP的调用。有的代理是不支持香港服务器调用的。
你会得到这样的链接
1 | https:#dps.kdlapi.com/api/getdps/?secret_id=xxxxx&num=1&signature=xxxxxxxx&area=410102&pt=1&format=json&sep=1 |
找到area参数,将后面的数字换成 **{district_code}**。然后修改 IP/IP.py 文件下面的代码。
1 | district_url = f"https:#dps.kdlapi.com/api/getdps/?secret_id=xxxxx&num=1&signature=xxxxxxxx&area={district_code}&pt=1&format=json&sep=1" |
- 给快代理添加API使用白名单。
修改config/info.py文件(选改)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30def __init__(self, login_info, path):
self.password = login_info.get("password").strip()
try:
self.phone = login_info.get("phone").strip()
int(self.phone)
except Exception as f:
config_module_log.info("手机号格式错误(带有非数字)")
config_module_log.error(f)
exit(-1)
self.address = login_info["address"]
self.latitude = login_info["latitude"]
self.longitude = login_info['longitude']
self.start_time = login_info.get("start_time","08") #上班打卡时间
self.end_time = login_info.get("end_time","18") #下班打卡时间
self.token = login_info.get("token")
self.user_id = login_info.get("user_id")
self.plan_id = login_info.get("plan_id")
self.city = login_info['city']
self.province = login_info['province']
self.path = path
self.is_repeat_clock_in = login_info.get('is_repeat_clock_in',True) #补签(默认开启)
self.is_submit_daily = login_info['xuanbujiao'] #日报的开关
self.is_submit_weekly = login_info['zhobao'] #周报的开关
self.submit_weekly_time = login_info.get("submit_weekly_time",6) #周报提交时间(默认每周六)
self.submit_month_report_time = login_info.get('submit_month_report_time',1) #月报提交时间(默认为每个月1号)如果需要关闭留空即可,删除“,1”这两个文字
self.bujiaorubao=login_info["bujiao"] #补交日报开关
self.bujiao_start_date=login_info.get('bujiao_start_date',"")# 开始日期
self.bujiao_end_date=login_info.get('bujiao_end_date',"")# 结束日期
self.bujiaozhobao = login_info["reedy"] #补交周报开关
self.requirement_week_num=login_info.get('requirement_week_num',"") # 补交的周数量修改textFile/submit_time.json文件(选改可以保持默认)
1
2
3
4
5{
"daily_next_submit_Time": 8, #日报下次提交时间
"weekly_next_submit_Time": 6, #周报下次提交时间
"month_next_submit_Report": 1 #月报下次提交时间
}上传后端文件。
- 双击解压文件,解压路径为 /www/wwwroot/gong。
使用ssh连接工具FinalShell,连接服务器。逐条执行下面的指令
1
2
3cd /www/wwwroot/gong #到执行目录下
apt install python3-pip #安装pip3工具,当遇到选择的时候全部选择Y
pip3 install -r requirements.txt #安装必要的库试运行一下,没有报错就是好的。
1
python3 main.py
配置执行定时任务
- 这步执行两次一次是上班卡,一次是下班卡。
执行周期选择:每天8点和每天18点
脚本内容:
1 | cd /www/wwwroot/gong |
配置查验工具
在查验工具的文件夹中找到为database_config.json文件,修改数据库参数。支持配置多个数据库。
1 | { |