- [github的 ssh](#github%E7%9A%84%20ssh)
- [DDD](#DDD)
- [Openai Assistant](#Openai%20Assistant)
- [三、部署](#%E4%B8%89%E3%80%81%E9%83%A8%E7%BD%B2)
- [部署步骤](#%E9%83%A8%E7%BD%B2%E6%AD%A5%E9%AA%A4)
- [服务器](#%E6%9C%8D%E5%8A%A1%E5%99%A8)
- [CICD/流水线](#CICD/%E6%B5%81%E6%B0%B4%E7%BA%BF)
- [尝试过github action](#%E5%B0%9D%E8%AF%95%E8%BF%87github%20action)
- [Docker](#Docker)
- [如何关shell的时候也不关应用](#%E5%A6%82%E4%BD%95%E5%85%B3shell%E7%9A%84%E6%97%B6%E5%80%99%E4%B9%9F%E4%B8%8D%E5%85%B3%E5%BA%94%E7%94%A8)
- [学习点](#%E5%AD%A6%E4%B9%A0%E7%82%B9)
- [域名](#%E5%9F%9F%E5%90%8D)
- [如何绑定到指定的端口](#%E5%A6%82%E4%BD%95%E7%BB%91%E5%AE%9A%E5%88%B0%E6%8C%87%E5%AE%9A%E7%9A%84%E7%AB%AF%E5%8F%A3)
- [1. 设置 DNS 记录](#1.%20%E8%AE%BE%E7%BD%AE%20DNS%20%E8%AE%B0%E5%BD%95)
- [2. 处理端口转发(如果需要)](#2.%20%E5%A4%84%E7%90%86%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%EF%BC%88%E5%A6%82%E6%9E%9C%E9%9C%80%E8%A6%81%EF%BC%89)
- [3. 确保安全组和防火墙设置](#3.%20%E7%A1%AE%E4%BF%9D%E5%AE%89%E5%85%A8%E7%BB%84%E5%92%8C%E9%98%B2%E7%81%AB%E5%A2%99%E8%AE%BE%E7%BD%AE)
- [相关资料](#%E7%9B%B8%E5%85%B3%E8%B5%84%E6%96%99)
- [terminal连接](#terminal%E8%BF%9E%E6%8E%A5)
- [python虚拟环境](#python%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83)
- [本地docker部署](#%E6%9C%AC%E5%9C%B0docker%E9%83%A8%E7%BD%B2)
- [python学习](#python%E5%AD%A6%E4%B9%A0)
- [What are tokens?](#What%20are%20tokens?)
## Github 的 ssh
cat ~/.ssh/id_ed25519.pub
## DDD
- **domain/**: 包含领域逻辑和领域模型。
- **entities/**: 领域实体,例如视频、转录文本、用户等。
- **repositories/**: 数据访问接口,例如视频和文本的存储和检索。
- **services/**: 领域服务,包括复杂的业务逻辑。
- **value_objects/**: [不可变的](不可变的.md)对象,用于表示领域内的值。
- **application/**: 应用层,协调领域和基础设施层的操作。
- **interfaces/**: 用于定义外部服务接口,例如语音识别和大模型 API。
- **services/**: 应用服务,处理应用逻辑,如调用领域服务和基础设施。
- **handlers/**: 处理外部请求(例如 API 请求)并调用应用服务。
- **infrastructure/**: 基础设施层,实现数据持久化、外部服务集成等。
- **api_clients/**: 与外部 API(如语音识别和大模型 API)的集成。
- **database/**: 数据库访问实现,如 ORM 模型。
- **messaging/**: 消息队列、事件总线等。
- **file_storage/**: 文件存储实现,用于视频上传和存储。
- **presentation/**: 表现层,用户界面和 API 端点。
- **api/**: 提供 RESTful API 端点。
- **cli/**: 如果需要,可以提供命令行界面。
- **web/**: Web 前端界面(如果有)。
- **tests/**: 测试目录,包括领域、应用和基础设施层的测试。
- **main.py**: 应用程序入口点。
- **requirements.txt**: 项目依赖。
## Openai Assistant
面向对象的 assistant 写法 [OpenAI_Assistant/assistant.py at main · dbookstaber/OpenAI_Assistant (github.com)](https://github.com/dbookstaber/OpenAI_Assistant/blob/main/assistant.py)
## 三、部署
### 部署步骤
### 服务器
aws 的 lightsail 是目前大厂云最便宜的,每个月 3.5 美元,配置双核,搞搞普通应用完全足够了。
这个费用可以用 aws 的优惠码抵扣,而很多 aws 优惠码可以买到,这就叫吃码,注意优惠码的有效期和 aws 区域限定,不要充错了。
### CICD/流水线
1. github action
2. jenkins
### Docker
官方 python 的 docker 部署文档
[Test your Python deployment | Docker Docs](https://docs.docker.com/language/python/deploy/)
[Lightsail Containers: An Easy Way to Run your Containers in the Cloud | AWS News Blog (amazon.com)](https://aws.amazon.com/blogs/aws/lightsail-containers-an-easy-way-to-run-your-containers-in-the-cloud/)
### 如何关 shell 的时候也不关应用
1. tmux
[How to Deploy a Stre amlit App using an Amazon Free ec2 instance? | by Rahul Agarwal | Towards Data Science (medium.com)](https://medium.com/p/416a41f69dc3)
` tmux` 是一个终端复用器,它允许用户在一个终端窗口中开启多个会话,同时还能够断开和重新连接会话,而不会丢失控制台的状态。这在远程工作或需要长时间运行程序的情况下非常有用。
2. 设置为系统服务
在 `/etc/systemd/system/` 编写系统服务的配置文件
### Python 依赖
生成 reqs 的正确姿势 [python生成requirements.txt的两种方法 | Python 技术论坛 (learnku.com)](https://learnku.com/articles/47470)
### 域名
代理分 forward 和 reverse,客户端到服务器的方向为正向
#### 绑定域名
要将绑定到 AWS Lightsail 的域名指向你的特定服务(如 `http://3.36.87.181:8501/`),你需要进行几个步骤。这通常涉及到设置 DNS 记录以及可能的服务器配置。以下是一般步骤:
##### 1. 设置 DNS 记录
要将域名解析到特定的 IP 地址,你需要在你的域名注册商的控制面板中设置 DNS 记录。对于 AWS Lightsail:
1. 登录到 AWS Lightsail 控制台。
2. 转到「网络」选项卡,然后选择你的域名。
3. 在 DNS 区域管理中,你可以添加或编辑 DNS 记录。
4. 添加一个 A 记录,将你的域名(例如 `www.example.com`)指向你的公网 IP 地址(例如 `3.36.87.181`)。
##### 2. 处理端口转发(如果需要)
由于你的服务运行在非标准端口(8501),你可能还需要在服务器上设置端口转发,让所有指向标准 HTTP 端口(80)的流量自动转发到端口 8501。这可以通过设置反向代理来完成,例如使用 Nginx 或 Apache。
以 Nginx 为例:
1. 安装 Nginx。
2. 编辑 Nginx 配置文件(通常位于 `/etc/nginx/sites-available/default`)。
3. 设置一个 server 块来转发流量:
nginxCopy code
```Java
server {
listen 80;
server_name www.liugongzi.org;
location / {
proxy_pass http://localhost:8501;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
1. 重启 Nginx 以应用更改。
##### 3. 确保安全组和防火墙设置
确保你的 Lightsail 实例的安全组和防火墙设置允许从端口 80(HTTP)和端口 8501 访问。
完成这些步骤后,你的域名应该能够正确指向你的服务。需要注意的是,DNS 更改可能需要一段时间才能在整个网络上生效。
## 相关资料
### Terminal 连接
```bash
ssh -i LightsailDefaultKey-ap-northeast-2.pem
[email protected]
```
### Python 虚拟环境
```shell
/opt/bitnami/python/venvs/viva_venv/bin
```
### 本地 docker 部署
python -m viva run --host=0.0.0.0

