Python 后端基础(十六):Linux 部署基础,目录、进程、端口、日志和常用命令讲清楚
学后端不能只会在本机点运行。
真实项目最终要部署到服务器,而服务器大多数是 Linux。你不一定一开始就很精通 Linux,但必须会看目录、查进程、看端口、读日志、启动服务。
【一、为什么后端要学 Linux】
因为项目上线后,很多问题都发生在服务器上:
- 服务有没有启动。
- 端口有没有被占用。
- 日志报了什么错。
- 配置文件路径对不对。
- 磁盘满没满。
- 进程是不是挂了。
- Nginx 有没有转发到后端。
如果完全不会 Linux,项目一部署就卡住。
【二、常见目录】
常见目录含义:
/home 普通用户目录
/root root 用户目录
/etc 配置文件
/var/log 日志文件
/opt 第三方应用安装目录
/usr/bin 常用命令
/tmp 临时文件
项目常放在:
/opt/myapp
/home/ubuntu/myapp
日志常放在:
/var/log/myapp
【三、常用文件命令】
pwd # 查看当前目录
ls -lah # 查看文件列表
cd /opt/myapp # 进入目录
mkdir logs # 创建目录
cp a.txt b.txt # 复制文件
mv a.txt b.txt # 移动或重命名
rm file.txt # 删除文件
删除命令要小心,尤其是:
rm -rf
不要在不确定路径时乱用。
【四、查看日志】
日志排查常用:
tail -f app.log
tail -n 100 app.log
less app.log
grep "ERROR" app.log
`tail -f` 会实时追踪日志,非常适合看接口请求和报错。
如果你项目部署后访问失败,第一反应应该是看日志,而不是盲猜。
【五、进程管理】
查看进程:
ps aux | grep python
查看端口:
netstat -tunlp
或者:
ss -tunlp
杀进程:
kill PID
kill -9 PID
`kill -9` 是强杀,不要随便用,优先正常停止服务。
【六、端口是什么】
端口可以理解成服务器上的服务入口。
常见端口:
22 SSH
80 HTTP
443 HTTPS
3306 MySQL
6379 Redis
8000 常见后端开发端口
如果服务启动失败,可能是端口被占用。
查看 8000 端口:
lsof -i:8000
【七、后台运行服务】
开发时可能这样启动:
uvicorn main:app --host 0.0.0.0 --port 8000
但关闭终端后服务会停。
生产环境通常会用:
- systemd
- supervisor
- Docker
- pm2
systemd 服务示例概念:
systemctl start myapp
systemctl stop myapp
systemctl status myapp
【八、环境变量】
线上配置不要写死在代码里。
常见环境变量:
DATABASE_URL
REDIS_URL
JWT_SECRET
OPENAI_API_KEY
ENV
查看:
echo $DATABASE_URL
临时设置:
export ENV=production
【九、常见坑】
- 本地能跑,服务器路径不对。
- 忘记开放安全组或防火墙端口。
- 服务只监听 `127.0.0.1`,外部访问不到。
- 日志没有写文件,出错无法排查。
- `.env` 没配置,启动时报密钥错误。
- 用 root 跑所有服务,权限风险高。
【十、面试常问】
1. 线上服务访问不了,你怎么排查?
先看服务是否启动,再看端口是否监听,再看 Nginx 配置和安全组,最后看应用日志。排查顺序是进程、端口、网络、配置、日志。
2. 怎么查看某个端口被谁占用?
可以用 `lsof -i:端口`、`netstat -tunlp` 或 `ss -tunlp` 查看监听端口和进程信息。
3. 为什么生产环境不能直接用开发服务器?
开发服务器主要用于本地调试,不适合生产环境的并发、稳定性、进程管理和安全要求。生产一般使用 Gunicorn/Uvicorn workers、Nginx、systemd 或 Docker。