# Coder-nav 程序员导航
**Repository Path**: bosen-once/coder-nav
## Basic Information
- **Project Name**: Coder-nav 程序员导航
- **Description**: Coder-nav 程序员导航
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: https://ip.bosen.ink
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-09-20
- **Last Updated**: 2026-04-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 1.导航主页

> 注:导航主页内容可在“个人设置”自定义

---
## 2.登录页面
- 账号密码登录

- 微信扫码登录

> 注: 第一次登录时,需要通过微信扫码登录,通过扫码登录后,将自动注册账号,默认密码为“123456”

> 注: 登录成功后,可在“个人设置”中,修改账号昵称,与重置密码

---
## 3.记事本


- 渲染模式
- 即时渲染(ri)
- 分屏预览(sv)
- 快捷键
- 保存文本(Ctrl + S)
- 切换渲染模式(Ctrl + /)
> 注:记事本内容可自动保存,自动保存的频率可在“个人设置”中配置

---
## 4.代码编辑器

---
- 在线运行代码原理
1. 用户在前端提交对应编程语言代码
2. 服务器接收用户提交的代码
3. 判断用户需要运行的编程语言
4. 选择对应编程语言的 Docker 镜像,并创建对应容器,运行用户提交的代码
---
- 特殊目录
- coder.nav
- java
- php
- javascript
> 注:在记事本的 coder.nav 目录下,可放置对应编程语言的工具类,如:在 coder.nav/java 目录下放置 NavHttpUtils.java 文件,在代码中可直接调用 NavHttpUtils 类,但调用的方法需要是静态方法
---
- Java(示例)
```java
public class Main {
public static void main(String[] args) {
// Java 语言可直接调用记事本目录 coder.nav 下的 java 目录的工具类
// 如:目录 coder.nav 下的 java 目录存在 NavHttpUtils 文件
// 在代码中可以直接调用 NavHttpUtils 类,但调用的方法需要是静态方法
// String response = NavHttpUtils.getForm("https://www.baidu.com");
System.out.println("Hello World~!");
}
}
```
---
- PHP(示例)
```php
注: 个人设置中,可自定义各语言的代码编辑器提示词

---
## 4.记账本


---
- 记账日报(可在个人设置中配置)
- 工作日 9:00 发送
- 非工作日 12:00 发送
---
> 注:个人设置可开启每日记账日报,项目还有 APK 版本,支持安卓手机的自动记账功能,项目地址:https://gitee.com/bosen-once/coder-nav-app
---

---
## 5.任务脚本

---
- 消息推送
- 推送 Markdown 内容格式的文本
- 消息推送类型
- 邮件发送(可在个人设置中配置)
- 微信公众号(需要扫码 https://monojson.com/s/Sk2CY 关注公众号获取 UID - **由于微信管控此类型已弃用**)
---
- 执行脚本
1. Markdown: 推送的消息将是渲染 Md 后的 Html 文本
2. Java: 执行代码逻辑后使用 System.out.println 输出结果
3. PHP: 执行代码逻辑后使用 echo 输出结果
4. JavaScript: 执行代码后使用 console.log 输出结果
> 注1:每个脚本可设置执行时间,与下一次执行时间,可当作定时任务使用
> 注2:若执行脚本后,有结果返回,则将会把执行结果发送到“个人设置”中配置的邮箱中
### AI-Chat-API
- 一开始开发“任务脚本”功能的初衷其实是为了定时运行爬虫脚本,爬取拍立得相纸页面判断是否存在库存,如果存在则发送存在库存的消息到邮箱,但爬虫存在很多限制,所以最终的效果其实并不理想。
- 随着 AI 可以自己访问页面并解析页面,因此增加一个 “AI Chat API” 的选项,对接智谱的免费模型 GLM4,与 AI 沟通,让 AI 帮我完成爬虫操作,且不用再考虑反爬虫的限制
> 示例:
> 以下链接是拍立得相纸在京东官方旗舰店的商品链接,https://item.jd.com/100154886849.html,
我需要你访问该链接,选择广州地区,并判断该商品是否已经无货,
如果是,则只需要回复我一个空格字符,除此之外不需要回复其他内容;
否则,只需要以字符串的方式回复我以下内容:
[拍立得 Mini90 白边相纸存在库存,点击跳转至下单页面~](https://item.jd.com/100154886849.html)
---
## 6.自定义页

> 注1:自定义页的实现原理,实际上还是上面的“任务脚本”功能,每次访问自定义页时,都会调用 PHP 的 Docker 镜像创建容器,最终输出 Html 页面内容
> 注2:由于 PHP 代码本身就是可以内嵌 Html 代码的,因此使用 PHP 脚本来实现自定义页时,既可以保证静态页面的功能,也可以调用 PHP 代码实现动态效果
> 注3:自定义页链接格式如下:https://{服务器域名}/page/{用户id}/{页面title},如:https://bosen.ink/page/1/cron
## 7.移动端预览(APK/H5)

> 注:APK 版本,支持安卓手机的自动记账功能,项目地址:https://gitee.com/bosen-once/coder-nav-app
---
## 8.系统部署
---
### Docker 镜像
```bash
docker pull centos:latest
docker pull mysql:latest
docker pull redis:latest
docker pull gcc:latest
docker pull golang:latest
docker pull openjdk:8-jdk-alpine
docker pull php:7
docker pull python:3
```
---
### MySQL
- 容器启动
```bash
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD="123456" -v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf mysql
```
---
### Redis
- 容器启动
```bash
docker run -d -p 3379:6379 --name redis -v redis_data:/data hub.c.163.com/library/redis --requirepass "123456"
```
---
### Coder-nav
- 文件权限
```bash
chmod 777 /opt/coder-run/temp
```
- 容器启动
```bash
docker run -d -p 8080:8080 --name coder-nav -v /opt/coder-run/temp:/opt/coder-run/temp -v /home/java/coder-nav.jar:/home/java/coder-nav.jar -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /lib64/libltdl.so.7:/lib64/libltdl.so.7 --privileged=true openjdk:8-jdk java -jar /home/java/coder-nav.jar
```
- 容器重启
```bash
docker restart coder-nav && docker logs coder-nav -f
```
---