舟山档案培训系统搭建与部署全流程实操指南

环境准备与基础依赖安装

在开始构建舟山档案培训报名系统之前,我们需要准备一台干净的服务器环境。本指南基于 Ubuntu 20.04 LTS 编写,其他 Linux 发行版命令略有不同。执行以下命令更新系统源并安装核心依赖。

1. 更新系统并安装 Python 及 Nginx

直接在终端执行以下命令,这将安装 Python 3、pip、虚拟环境工具以及 Nginx 服务器:

```bash sudo apt-get update && sudo apt-get upgrade -y sudo apt-get install python3 python3-pip python3-venv nginx -y ```

2. 创建项目目录

为了规范管理,我们在 /var/www 下创建项目目录:

```bash sudo mkdir -p /var/www/zs_archives_training sudo chown -R $USER:$USER /var/www/zs_archives_training cd /var/www/zs_archives_training ```

Python 虚拟环境与依赖配置

为了避免污染系统全局 Python 环境,必须使用虚拟环境来隔离项目依赖。

1. 初始化虚拟环境

在项目根目录下执行:

```bash python3 -m venv venv source venv/bin/activate ``>

2. 创建 requirements.txt

使用 nanovim 创建 requirements.txt 文件,并写入以下精确的依赖版本号,防止版本兼容性问题:

```text Flask==2.3.3 Flask-SQLAlchemy==3.0.5 Werkzeug==2.3.7 gunicorn==21.2.0 ```

3. 安装依赖包

执行安装命令,确保所有包安装无误:

```bash pip install -r requirements.txt ```

后端核心代码实现

我们将使用 Flask 框架构建一个轻量级的后端服务,包含数据库模型、报名接口和管理列表接口。

1. 数据库模型设计

创建 app.py 文件。首先定义数据库模型,用于存储培训学员的信息。我们将使用 SQLite 数据库,无需额外安装数据库服务,零门槛落地。

```python from flask import Flask, render_template, request, redirect, url_for, flash from flask_sqlalchemy import SQLAlchemy from datetime import datetime app = Flask(__name__) app.config['SECRET_KEY'] = 'change_this_to_a_random_secret_key' app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///training.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) class Trainee(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), nullable=False) department = db.Column(db.String(100), nullable=False) phone = db.Column(db.String(20), nullable=False) created_at = db.Column(db.DateTime, default=datetime.utcnow) def __repr__(self): return f'' ```

2. 路由与业务逻辑实现

继续在 app.py 中添加路由处理逻辑。我们需要三个主要路由:首页(报名表单)、提交处理页、管理列表页。

```python 初始化数据库 with app.app_context(): db.create_all() @app.route('/') def index(): return render_template('index.html') @app.route('/submit', methods=['POST']) def submit(): name = request.form.get('name') department = request.form.get('department') phone = request.form.get('phone') if not name or not department or not phone: flash('所有字段都必须填写', 'error') return redirect(url_for('index')) 简单的防重复提交检查(根据手机号) existing_trainee = Trainee.query.filter_by(phone=phone).first() if existing_trainee: flash('该手机号已报名,请勿重复提交', 'error') return redirect(url_for('index')) new_trainee = Trainee(name=name, department=department, phone=phone) db.session.add(new_trainee) db.session.commit() flash('报名成功!请准时参加舟山档案培训。', 'success') return redirect(url_for('index')) @app.route('/admin') def admin(): trainees = Trainee.query.order_by(Trainee.created_at.desc()).all() return render_template('admin.html', trainees=trainees) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) ```

前端页面开发

创建 templates 目录存放 HTML 文件。我们需要一个简洁的报名页面和一个后台管理页面。

1. 创建目录

```bash mkdir templates ```

2. 编写报名页面 (templates/index.html)

这是一个包含 Bootstrap 样式的单页应用,用于展示报名表单和提示信息。

```html 舟山档案培训报名

舟山档案培训报名系统

{% with messages = get_flashed_messages(with_categories=true) %} {% if messages %} {% for category, message in messages %}
{{ message }}
{% endfor %} {% endif %} {% endwith %}
```

舟山档案培训系统搭建与部署全流程实操指南

3. 编写管理页面 (templates/admin.html)

用于查看已报名人员的列表。

```html 培训报名管理

舟山档案培训 - 报名名单

返回报名页 {% for trainee in trainees %} {% endfor %}
ID 姓名 单位 电话 报名时间
{{ trainee.id }} {{ trainee.name }} {{ trainee.department }} {{ trainee.phone }} {{ trainee.created_at.strftime('%Y-%m-%d %H:%M') }}
```

生产环境部署配置

开发服务器性能不足,我们需要使用 Gunicorn 作为 WSGI 服务器,并配置 Nginx 作为反向代理。

1. 配置 Systemd 服务

创建一个 systemd 服务文件,让系统能够自动管理 Flask 应用的启动和重启。

```bash sudo nano /etc/systemd/system/zs_training.service ```

在文件中写入以下内容,注意 UserGroup 需要填写你当前服务器的用户名,WorkingDirectory 必须指向项目目录:

```ini [Unit] Description=Gunicorn instance to serve zs_archives_training After=network.target [Service] User=www-data Group=www-data WorkingDirectory=/var/www/zs_archives_training Environment="PATH=/var/www/zs_archives_training/venv/bin" ExecStart=/var/www/zs_archives_training/venv/bin/gunicorn -w 4 -b 127.0.0.1:5000 app:app [Install] WantedBy=multi-user.target ```

2. 修正文件权限并启动服务

为了防止权限问题,我们将项目所有者赋予 www-data(Nginx 运行用户),然后启动服务:

```bash sudo chown -R www-data:www-data /var/www/zs_archives_training sudo systemctl start zs_training sudo systemctl enable zs_training ```

3. 配置 Nginx 反向代理

编辑 Nginx 默认配置文件,将外部请求转发给 Gunicorn:

```bash sudo nano /etc/nginx/sites-available/default ```

找到 server { ... } 块,将其修改为如下配置。这里假设使用 80 端口,如果有域名,请修改 server_name

```nginx server { listen 80; server_name your_server_ip_or_domain; location / { proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ```

4. 测试并重启 Nginx

检查 Nginx 配置是否有语法错误,并重启服务:

```bash sudo nginx -t sudo systemctl restart nginx ```

功能验证与故障排查

至此,所有代码和配置已完成。最后一步是验证系统是否正常运行。

1. 检查服务状态

执行以下命令查看 Gunicorn 服务是否处于 active (running) 状态:

```bash sudo systemctl status zs_training ```

2. 访问测试

打开浏览器,访问服务器的 IP 地址。你应该能看到“舟山档案培训报名系统”的表单。尝试填写数据并提交,若提示“报名成功”,则后端逻辑正常。

3. 查看管理列表

在浏览器地址栏后追加 /admin,查看刚才提交的数据是否出现在列表中。

4. 常见故障排查

  • 502 Bad Gateway:通常是 Gunicorn 未启动或端口冲突。请检查 sudo systemctl status zs_training 并查看日志 journalctl -u zs_training
  • 数据库锁定:SQLite 在高并发下可能锁定。本教程适用于中小规模培训(几百人并发),若规模更大,建议将数据库 URI 替换为 MySQL 或 PostgreSQL。
  • 权限错误:确保 /var/www/zs_archives_training 目录下的 training.db 文件可被 www-data 用户读写。
AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统