👋 永远都记不住的配置过程
git
linux 配置登录
Windows 会直接弹出弹窗以输入账号密码(前提是安装了 GUI 软件)
使用git push
时输入用户明和密码登录后,提示不再支持此登录方式:

根据提示中的链接,找到Git 凭据管理器(Git Credential Manager),大致安装、配置步骤:(Ubuntu)
- 安装.NET tool
1 2
| sudo apt-get update && \ sudo apt-get install -y dotnet-sdk-8.0
|
- 安装管理工具
1
| dotnet tool install -g git-credential-manager
|
成功安装后会提示将其设置到环境变量中:

- 配置
1
| git-credential-manager configure
|
设置GCM_CREDENTIAL_STORE
环境变量,这里使用gpg
,并且需要额外安装pass
(此外还有别的设置形式)
1
| export GCM_CREDENTIAL_STORE="gpg"
|
初始化 store
1 2
| pass init github-gpg-id
|
推送代码

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; }
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
🔗 容器内外文件会自动同步
使用场景:统一的开发环境,或者是特殊的开发环境,以下示例基于python2
、node14
的不常见开发环境(对于 2025 年来说)
创建配置文件
在根目录创建.devcontainer
文件夹,添加以下文件:
Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| FROM python:2.7-slim
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
COPY requirements.txt . RUN pip install -r requirements.txt
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", "dbaeumer.vscode-eslint", "esbenp.prettier-vscode" ], "forwardPorts": [3000], "postCreateCommand": "npm install", "workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind", "workspaceFolder": "/workspace" }
|
启动
在 VSCode 中输入快捷键Ctrl/Cmd + Shift + P
,或者点击左下角的蓝色箭头(或者其他主题色),选择Reopen in container(在容器中重新打开)
此过程中会:
如果启动失败,并且是由于拉去不到镜像,可以先拉去所需要的镜像,再启动。如docker pull python:2.7-slim
Java
maven
Ubuntu
依赖Java运行,需要先安装Java
1 2
| sudo apt update sudo apt install openjdk-17-jdk
|
通过压缩包安装
1
| wget https://dlcdn.apache.org/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz
|
解压、安装
1
| tar -zxvf apache-maven-3.9.6-bin.tar.gz -C /opt/
|
配置软连接
1
| ln -s /opt/apache-maven-3.9.6 /opt/maven
|
编辑环境变量,并且添加内容
1
| vim /etc/profile.d/maven.sh
|
1 2 3
| export MAVEN_HOME=/opt/maven export PATH=${MAVEN_HOME}/bin:${PATH}
|
1
| source /etc/profile.d/maven.sh
|
验证安装
MySQL
Docker
基本操作
拉取 -> 创建 -> 运行
1 2 3 4 5 6
| docker run -d \ --name mysql-8 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v mysql-data:/var/lib/mysql \ mysql:8.0
|
1
| docker exec -it mysql-8 bash
|
进入容器后创建可远程连接的用户
1 2 3
| CREATE USER 'root'@'%' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
|
本机连接
1
| mysql -h localhost -P 3306 -u root -p
|
docker-compose + 环境变量 示例
docker-compose.yml
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 38 39 40 41 42
| version: '3.8'
services: mysql: image: mysql:5.7 container_name: ${MYSQL_CONTAINER_NAME:-mysql-5.7} restart: ${RESTART_POLICY:-always} environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-defaultrootpass} MYSQL_DATABASE: ${MYSQL_DATABASE:-appdb} MYSQL_USER: ${MYSQL_USER:-appuser} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-apppass} TZ: ${TIMEZONE:-Asia/Shanghai} volumes: - mysql_data:/var/lib/mysql - ${CONF_DIR:-./conf}:/etc/mysql/conf.d - ${INIT_SCRIPTS_DIR:-./init-scripts}:/docker-entrypoint-initdb.d ports: - "${HOST_PORT:-33060}:3306" deploy: resources: limits: cpus: '${CPU_LIMIT:-1}' memory: ${MEMORY_LIMIT:-1G} reservations: cpus: '${CPU_RESERVATION:-0.5}' memory: ${MEMORY_RESERVATION:-512M} healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"] interval: 10s timeout: 5s retries: 5 networks: - ${NETWORK_NAME:-mysql-network}
networks: ${NETWORK_NAME:-mysql-network}: driver: bridge
volumes: mysql_data:
|
.env.example
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
| # 容器名称 MYSQL_CONTAINER_NAME=my-mysql-5.7
# 重启策略(always/no/on-failure) RESTART_POLICY=always
# 数据库认证信息 MYSQL_ROOT_PASSWORD=secure_root_pass MYSQL_DATABASE=myappdb MYSQL_USER=appuser MYSQL_PASSWORD=secure_app_pass
# 时区 TIMEZONE=Asia/Shanghai
# 端口映射(宿主机端口) HOST_PORT=33060
# 目录映射(自定义配置和初始化脚本) CONF_DIR=./conf INIT_SCRIPTS_DIR=./init-scripts
# 资源限制 CPU_LIMIT=1 MEMORY_LIMIT=1G CPU_RESERVATION=0.5 MEMORY_RESERVATION=512M
# 网络名称 NETWORK_NAME=my-mysql-network
|
相关概念
跨域资源共享(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 头配置,浏览器会允许这个请求