服务器环境准备:

**服务器IP地址**:192.168.XXX.XXX
**域名地址**:XXXXX.com
**DNS绑定解析**
**链接到服务器的用户名**
**链接到服务器的密码**

项目准备:

**前端项目**:这里使用前端工程化的build包推送到服务器
**后端项目**:这里使用git远程地址推送到服务器
**数据库**:这里使用Pgsql数据库演示
**Shell工具**:Xschell、SecureCRTPortable等

链接到服务器

ssh username@your-server-ip
说明
将 username 替换为您的服务器用户名
将 your-server-ip 替换为您的服务器IP地址
如果使用密钥登录,添加 -i /path/to/your/private/key
输入链接地址后后需要提供password(非明文输入)

服务器基本状态检查

# 查看操作系统版本
cat /etc/os-release

# 查看内核版本
uname -a

# 查看系统运行时间和负载
uptime
说明
显示Linux发行版信息,了解服务器的操作系统类型和版本,确保兼容性

# 查看内存使用情况(详细)
free -h

# 查看内存详细信息
cat /proc/meminfo | head -10
说明
确保有足够内存
# 查看磁盘使用情况
df -h

# 查看当前目录磁盘使用
du -sh .

# 查看磁盘IO情况
iostat -x 1 3
说明
确保有足够磁盘空间存储应用数据
# 检查网络接口
ip addr show

# 检查网络连通性
ping -c 4 8.8.8.8

# 检查DNS解析
nslookup google.com

# 查看开放的端口
netstat -tlnp
说明
确保网络配置正确,可以访问外部资源
# 查看当前用户
whoami

# 查看用户组
groups

# 检查sudo权限
sudo -l
说明
确认当前用户名有足够的权限执行部署操作
# 检查Git版本
git --version

# 如果没有Git,安装它
sudo apt update
sudo apt install git -y

# 查看Git配置
git config --list

# 配置Git(可选,用于提交记录)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# 测试Git连接(如果使用GitHub)
ssh -T git@github.com(或者你的项目存放地址)
说明
确保可以从远程仓库拉取代码

在服务器创建项目目录

# 创建项目根目录
sudo mkdir -p /opt/server-folder

# 设置目录所有者
sudo chown -R $USER:$USER /opt/server-folder
说明
sudo 获取创建权限,如果有管理员权限则不需要使用sudo
mdkir 创建目录命令
-p
/ 服务器根目录
opt 目录名,可根据自己需求进行定义,或者在已有目录下创建
server-folder 服务器上项目目录的名称
在服务器的根目录的opt目录下创建项目根目录server-folder
# 进入项目目录
cd /opt/server-folder
# 创建必要的子目录
mkdir -p static logs Server_folder
说明
cd 进入项目目录
在服务器的项目目录下简历文件夹,前端项目文件夹、后端项目文件夹、log日志文件夹等

推送前端项目到服务器,直接上传文件方法

# 进入服务器存放前端文件目录
cd /opt/server-folder/static

# 上传到服务器
scp 前端build文件.zip绝对路径 username@your-server-ip:opt/server-folder/static

# 查看当前文件夹下是否已上传.zip
ll或者ls

# 解压
unzip 前端build文件.zip

推送后端项目到服务器,使用git拉取方法

# 进入服务器存放后端文件目录
cd /opt/server-folder/Server_folder

# 克隆项目(替换为您的仓库地址)
git clone https://github.com/yourusername/Server_folder.git

# 如果需要运行指定分支,则使用git命令进行切换
git branch # 查看
git checkout # 切换

在服务器进行后台服务配置

# 清除yum缓存命令
sudo yum clean all
sudo yum makecache


# 安装 Python 3 和 pip
sudo wget https://www.python.org/ftp/python/3.11.0/python-3.11.0.tgz
sudo tar xzf Python-3.11.0.tgz
cd Python-3.11.0.tgz

# 验证安装
python3 --version
pip3 --version

# 安装pgspl服务
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum -y module disable postgresql

# 启动 PostgreSQL 服务
sudo systemctl start postgresql
sudo systemctl enable postgresql
sudo systemctl restart postgresql

# 安装 Nginx
sudo yum install nginx -y

# 启动 Nginx 服务
sudo systemctl start nginx
sudo systemctl enable nginx

# 检查 Nginx 状态
sudo systemctl status nginx

server {
listen 80;
server_name your-domain.com;  # 替换为你的域名

# 前端静态文件
location / {
    root /opt/static/build;
    try_files $uri $uri/ /index.html;
    index index.html index.htm;
}

# 后端 API 代理
location /api/ {
    proxy_pass http://127.0.0.1:18001;
    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 /uploads/ {
    proxy_pass http://127.0.0.1:18001;
}

location /export_file/ {
    proxy_pass http://127.0.0.1:18001;
}
}

# 重启后检查服务状态
sudo systemctl status postgresql
sudo systemctl status nginx

在服务器启动服务

# 进入服务器服务代码目录
cd /opt/server-folder/Server_folder

pyhon -m venv venv

# 激活虚拟环境(如果有)
source venv/bin/activate

# 下载项目依赖
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

# 数据迁移
alembic revision --autogenerate -m  "init" 
alembic upgrade head

# 执行初始化脚本
python3.11 脚本.py

启动服务

# 启动服务
nohup python3 main.py > backend.log 2>&1 &
uvicorn main:app --host=0.0.0.0 --port=8900
# 如果有celery
nohup celery -A settings.celery_config:celery_app worker --loglevel=info -c 1 >> celery-worker.log 2>&1 &
celery -A settings.celery_config:celery_app worker --pool=solo -c 1 --loglevel=info 
windows环境需要加--pool=solo 单线程执行(Windows 不支持默认的 prefork 多进程)

# 查看运行状态:
ps aux | grep python

# 停止服务
kill <进程ID>
说明
nohup:让进程在后台运行,即使关闭终端也不停止
backend.log:将输出重定向到日志文件
2>&1:将错误输出也重定向到日志文件
&:在后台运行
tail -n 50 backend.log 查看日志

ClearBoth
25 声望3 粉丝

Hello World!