部署手册

👋 永远都记不住的配置过程

git

linux 配置登录

Windows 会直接弹出弹窗以输入账号密码(前提是安装了 GUI 软件)

使用git push时输入用户明和密码登录后,提示不再支持此登录方式:

废弃提示

根据提示中的链接,找到Git 凭据管理器(Git Credential Manager),大致安装、配置步骤:(Ubuntu)

  1. 安装.NET tool
1
2
sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-8.0
  1. 安装管理工具
1
dotnet tool install -g git-credential-manager

成功安装后会提示将其设置到环境变量中:

配置环境变量

  1. 配置
1
git-credential-manager configure

设置GCM_CREDENTIAL_STORE环境变量,这里使用gpg,并且需要额外安装pass(此外还有别的设置形式)

1
export GCM_CREDENTIAL_STORE="gpg"
1
apt install pass

初始化 store

1
2
# init后面的名称随意
pass init github-gpg-id

推送代码

1
git push

选择gpg

NGINX

👉 Nginx 安装

反向代理

常见操作就是使用代理结局跨域问题

端口到子域名

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name your_subdomain.yourdomain.com;

location / {
proxy_pass http://127.0.0.1:8080;
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
2
3
4
5
6
7
8
9
10
11
server {
listen 80;

location /your-subpath/ {
proxy_pass http://localhost:8080;
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;
}
}

示例:解决前端跨域

通过代理请求以解决前端跨域问题,原因是由浏览器的同源策略导致(Same-Origin Policy)

前端跨域产生的原因:浏览器通过 JavaScript 发送网络请求时,请求的接口与当前页面的 URL 不在同一个域名、协议和端口之下,浏览器就会认为这是一个跨域请求,从而根据同源策略阻止这个请求(除非服务器在响应头明确声明允许跨域)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 80;
server_name localhost;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

# 前端请求 /api 的代理配置
location /api/ {
proxy_pass http://api.example.com/; # 将请求转发到后端服务
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;
}
}

location配置的是/api/而不是/api,二者区别:

  • /api/:匹配当前规则之后的所有路径
  • /api:匹配以这个开头的所有路径

proxy_pass同样需要以/结尾,二者区别:

  • /结尾:请求中的/api 将会被去掉,其余部分拼接上去
    • 如:http://api.example.com/login
  • /结尾:/api 会继续拼接到请求的接口中
    • 如:http://api.example.com/api/login

Docker

VSCode 容器开发

⚙️ 需要安装 vscode 插件Dev Containers

🔗 容器内外文件会自动同步

使用场景:统一的开发环境,或者是特殊的开发环境,以下示例基于python2node14的不常见开发环境(对于 2025 年来说)

创建配置文件

在根目录创建.devcontainer文件夹,添加以下文件:

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 使用官方 Python 2 镜像作为基础
FROM python:2.7-slim

# 安装 Node.js 14
RUN apt-get update && apt-get install -y curl
RUN curl -fsSL https://deb.nodesource.com/setup_14.x | bash -
RUN apt-get install -y nodejs

# 安装常用工具(可选)
RUN apt-get install -y git vim

# 设置工作目录
WORKDIR /workspace

# 安装 Python 依赖(可选)
COPY requirements.txt .
RUN pip install -r requirements.txt

# 安装 Node.js 依赖(可选)
COPY package.json .
RUN npm install
  • 和终端一样,命令和使用\来换行

devcontainer.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"name": "Python 2 + Node.js 14",
"build": {
"dockerfile": "Dockerfile"
},
"extensions": [
"ms-python.python", // Python 扩展
"dbaeumer.vscode-eslint", // ESLint 扩展
"esbenp.prettier-vscode" // Prettier 扩展
],
"forwardPorts": [3000], // 转发端口(Node.js 应用),可指定多个,比如容器里面还有服务端的端口
"postCreateCommand": "npm install", // 容器创建后运行命令
"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind",
"workspaceFolder": "/workspace"
}

启动

在 VSCode 中输入快捷键Ctrl/Cmd + Shift + P,或者点击左下角的蓝色箭头(或者其他主题色),选择Reopen in container(在容器中重新打开)

此过程中会:

  • 创建一个镜像,镜像名称以vsc开头

  • 基于镜像运行一个容器

  • 运行成功后,vscode 地下的面板中的 PORT(端口) 选项面板就会显示出在forwardPorts中配置的转发端口

如果启动失败,并且是由于拉去不到镜像,可以先拉去所需要的镜像,再启动。如docker pull python:2.7-slim

相关概念

跨域资源共享(CORS)

跨域资源共享 和 浏览器的同源策略 产生的跨域问题属于两个不同范畴

通过 Nginx 的配置可解决前端的跨域问题,但是跨域资源共享则需要后端解决:

  • CORS 属于服务端的解决方案
  • CORS 允许目标服务器声明哪些外部域名可以访问其资源

后端在响应头,需要的是添加如Access-Control-Allow-*之类的声明

默认情况下浏览器会根据同源策略来阻止非同源请求,如果 目标服务器支持 CORS,服务端可以在响应头添加适当的 CORS 头来告诉浏览器允许特定的跨域请求。

CORS 工作原理:

  • 预检请求(Preflight Request)

    • 对于某些跨域请求(PUT、DELETE 或带有自定义头的请求),浏览器会先发送一个 OPTIONS 请求(预检请求)来询问服务器是否允许跨域请求。
  • CORS 响应头

    • 服务端在响应头中加入如 Access-Control-Allo-Origin、Access-Control-Allow-Methods 来允许浏览器跨域访问
  • 简单请求

    • GET、POST(并且没有特殊头的请求)等简单请求,浏览器不会发送预检请求。如果服务端的响应头中有相关的 CORS 头配置,浏览器会允许这个请求
作者

dsjerry

发布于

2025-02-15

更新于

2025-03-05

许可协议

评论