Ứng dụng Django quản lý thiết bị, công văn và nghiệp vụ xử lý kỹ thuật cho bộ phận CNTT.
- Tạo môi trường ảo
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate- Cài thư viện
pip install -r requirements.txt-
Cấu hình cơ sở dữ liệu
Mặc định dùng SQLite (db.sqlite3). Nếu muốn PostgreSQL, cập nhậtDATABASEStrongqlkt/settings.pyrồi chạy migrate. -
Tạo bảng & dữ liệu mẫu
python manage.py migrate
python manage.py seed_all # hoặc seed_data, seed_equipment, seed_documents, seed_operations- Chạy server
python manage.py runserver 0.0.0.0:8000Truy cập admin: http://127.0.0.1:8000/admin
- Kiểm tra quyền thực thi của file
setup.shnếu muốn chạy tập lệnh tự động. - Nếu dùng PostgreSQL, đảm bảo service đang chạy và thông tin kết nối đúng.
- Dữ liệu seed được viết bằng tiếng Việt, sát với nghiệp vụ CNTT (nhân sự, thiết bị, công văn, yêu cầu xử lý).
- Lỗi kết nối DB: kiểm tra
DATABASESvà service PostgreSQL/SQLite file path. - Lỗi migrate/seed: xóa file
db.sqlite3(nếu dùng SQLite) và chạy lạimigrate+seed_all. - Thiếu thư viện: đảm bảo đã kích hoạt đúng môi trường ảo trước khi
pip install. - Triển khai production: đặt
DEBUG=False, cấu hìnhALLOWED_HOSTS,CSRF_TRUSTED_ORIGINS(khớp domain/cổng reverse proxy, ví dụhttp://localhost:8080), cập nhậtSECRET_KEYvàDATABASEScho môi trường thật.
Phù hợp khi chạy trên 1 máy chủ Ubuntu/Debian và muốn quản lý bằng systemd.
- Cài đặt gói hệ thống
sudo apt update
sudo apt install -y python3-venv python3-pip nginx \
build-essential libpq-dev libcairo2 libpango-1.0-0 libpangocairo-1.0-0 \
libgdk-pixbuf-2.0-0 libffi-dev shared-mime-info fontconfig- Chuẩn bị mã nguồn
- Ví dụ dùng đường dẫn
/opt/qlktvà user chạy service làwww-data(tùy chỉnh theo môi trường). - Sửa
qlkt/settings.pycho production:DEBUG=False,ALLOWED_HOSTS=["ten-mien-hoac-ip"],CSRF_TRUSTED_ORIGINS=["https://ten-mien-hoac-ip"], cập nhậtSECRET_KEYvàDATABASES(SQLite có thể giữ nguyên, khuyến khích PostgreSQL).
- Thiết lập virtualenv và phụ thuộc
cd /opt/qlkt
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt gunicorn
python manage.py migrate
python manage.py collectstatic --noinput- Tạo service
systemdcho Gunicorn (ví dụ/etc/systemd/system/qlkt.service)
[Unit]
Description=Gunicorn for QLKT
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/opt/qlkt
Environment="PATH=/opt/qlkt/.venv/bin"
Environment="DJANGO_SETTINGS_MODULE=qlkt.settings"
RuntimeDirectory=qlkt
ExecStart=/opt/qlkt/.venv/bin/gunicorn qlkt.wsgi:application --bind unix:/run/qlkt/qlkt.sock --workers 3
Restart=on-failure
[Install]
WantedBy=multi-user.targetSau đó bật service:
sudo systemctl daemon-reload
sudo systemctl enable --now qlkt.service- Cấu hình Nginx (ví dụ
/etc/nginx/sites-available/qlktrồi symlink sangsites-enabled)
upstream qlkt {
server unix:/run/qlkt/qlkt.sock;
}
server {
listen 80;
server_name example.com; # đổi sang domain/IP của bạn
client_max_body_size 50M;
location /static/ {
alias /opt/qlkt/staticfiles/;
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
location / {
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;
proxy_pass http://qlkt;
}
}Kiểm tra và reload:
sudo nginx -t && sudo systemctl reload nginx- Tạo tài khoản admin:
sudo -u www-data /opt/qlkt/.venv/bin/python /opt/qlkt/manage.py createsuperuserPhù hợp khi muốn môi trường đóng gói sẵn. Yêu cầu Docker Engine và Docker Compose plugin.
-
Kiểm tra lại
qlkt/settings.py: đặtDEBUG=False,ALLOWED_HOSTS,CSRF_TRUSTED_ORIGINS(ví dụhttp://localhost:8080),SECRET_KEYvà cấu hình DB (mặc định compose dùng SQLite qua bind mountdb.sqlite3; nếu muốn PostgreSQL hãy cập nhật settings và thêm dịch vụ DB riêng). -
Build và chạy:
docker compose build
docker compose up -dTruy cập: http://localhost:8080 (Nginx reverse proxy tới Gunicorn trên container web).
- Quản trị container:
# Xem log
docker compose logs -f web
# Tạo superuser
docker compose exec web python manage.py createsuperuser
# Dừng dịch vụ
docker compose downMặc định static được collect vào volume static_volume và Nginx phục vụ tại /static/. Cổng host đang map 8080→80 trong container (http://localhost:8080). DB SQLite được bind mount từ file db.sqlite3 trong thư mục dự án. Nếu chuyển sang Postgres, thêm service Postgres trong docker-compose.yml, cập nhật biến kết nối trong qlkt/settings.py, và chạy lại docker compose up -d --build.