Skip to content

installation and config

Belikhun edited this page Mar 3, 2020 · 22 revisions

Cài đặt và hướng dẫn sử dụng


Tải về

Windows:

Bạn có thể tải trực tiếp bản có tích hợp sẵn UniServer tại đây (tệp có tên themis-web-interface_v0.6.0-rev1)

Sau khi tải xong, giải nén tệp vừa tải thành một thư mục và đặt ở vị trí tùy ý

Linux:

  • Yêu cầu:
    • Git
    • PHP/7 trở lên
    • Apache/2 trở lên

Sử dụng lệnh sau để tải toàn bộ tệp tin của dự án:

git clone https://github.com/belivipro9x99/themis-web-interface.git

Hoặc vào phần releases và tải tệp Source Code.zip hoặc Source Code.tar.gz

Sau khi tải xong, giải nén tệp vừa tải thành một thư mục và đặt ở vị trí tùy ý

Khởi động máy chủ

Windows:

Để khởi động máy chủ, chạy tệp UniController.exe có trong thư mục vừa giải nén, sau đó nhấn vào nút Start Apache để khởi động máy chủ.

Nếu khởi động UniServer gặp lỗi, vui lòng cài Microsoft Visual C++ 2015 Redistributable và thử lại.

Lần đầu chạy Windows firewall sẽ popup lên một cửa sổ để hỏi quyền được vượt firewall. Nhấn vào Allow access để cho phép apache vượt qua firewall như hình dưới.

Mở trình duyệt bất kì và đi đến localhost:80 để kiểm tra, nếu trang web hiện ra là bạn đã thành công.

Để dừng máy chủ, nháy đúp chuột vào icon chữ U nền xanh trên thanh biểu tượng, chọn Stop Apache.

Linux:

Tiến hành cài đặt Apache và PHP bằng câu lệnh:

sudo apt-get update
sudo apt-get install apache2 php php-xml

Bật các module cần thiết cho apache:

sudo a2enmod rewrite actions fastcgi alias mime headers reqtimeout

Sau khi cài đặt xong, đi tới thư mục /etc/apache2 và chỉnh sửa tệp apache2.conf.

cd /etc/apache2
sudo nano apache2.conf

Thay đổi tệp apache2.conf như sau:

Lưu ý: Thay thế (document root) thành vị trí thư mục của mã nguồn.

# Thay thế (document root) thành vị trí thư mục của mã nguồn.
# Ví dụ:
#   Define THEMIS_ROOT "/home/jeff/themis-web-interface"

Define THEMIS_ROOT (document root)

<VirtualHost *:80>
	ServerAdmin someone@localhost
	ServerName localhost
	ServerAlias themisweb.lan
	DocumentRoot ${THEMIS_ROOT}

	ErrorDocument 400 /lib/error.php
	ErrorDocument 401 /lib/error.php
	ErrorDocument 403 /lib/error.php
	ErrorDocument 404 /lib/error.php
	ErrorDocument 405 /lib/error.php
	ErrorDocument 406 /lib/error.php
	ErrorDocument 408 /lib/error.php
	ErrorDocument 414 /lib/error.php
	ErrorDocument 500 /lib/error.php
	ErrorDocument 502 /lib/error.php

	<Directory "${THEMIS_ROOT}">
		Options -Indexes
		AllowOverride All
		Order allow,deny
		Allow from all
		Require all granted
	</Directory>

	<Directory "${THEMIS_ROOT}/api">
		Options +FollowSymLinks -Indexes
		AllowOverride All
		Order allow,deny
		Allow from all
		Require all granted

		<IfModule headers_module>
			Header set Access-Control-Allow-Origin "*"
		</IfModule>

		# Rewrite url
		RewriteEngine on
		RewriteCond %{REQUEST_FILENAME} !-f
		RewriteRule ^([^\.]+)$ $1.php [NC,L]
	</Directory>

	<Directory "${THEMIS_ROOT}/public">
		Options +Indexes
		Order allow,deny
		Allow from all
		Require all granted
	</Directory>

	<Directory "${THEMIS_ROOT}/data">
		<Files "logs.json">  
			Order Allow,Deny
			Deny from all
		</Files>

		<Files "config.json">  
			Order Allow,Deny
			Deny from all
		</Files>
	</Directory>

	<Directory "${THEMIS_ROOT}/data/xmldb">
		Options -Indexes
		Deny from all
	</Directory>

	<Directory "${THEMIS_ROOT}/data/problems">
		Options -Indexes
		Deny from all
	</Directory>

	<IfModule mod_reqtimeout.c>
		RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
	</IfModule>

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Sau khi chỉnh sửa xong lưu tệp lại và sử dụng câu lệnh sau để khởi động lại Apache:

sudo systemctl restart apache2

Sau khi khởi động xong, nếu không gặp lỗi thì truy cập đến địa chỉ của máy chủ trong trình duyệt. Nếu trang web hiện ra, bạn đã thành công.

Kết nối tới phần mềm chấm bài Themis

Windows:

Nếu máy bạn chưa cài đặt phần mềm Themis, bạn có thể tải về tại đây

Tạo một thư mục để themis-web-interface lưu lại bài nộp lên.

Ở đây, mình sẽ lấy thư mục tại D:/UploadDir làm ví dụ.

Vào trang web của themis-web-interface, đăng nhập với tài khoản admin:admin, đi tới bảng cài đặt và thay đổi ô nhập THƯ MỤC LƯU BÀI LÀM thành vị trí thư mục vừa tạo. Ví dụ như hình dưới:

Sau khi thay đổi xong, nhấn nút Lưu thay đổi ở phía dưới bảng cài đặt.

Khởi động phần mềm chấm Themis, đi tới Thiết lập môi trường hoặc nhấn F11 để hiện bảng cài đặt. Chọn thư mục vừa tạo và nhấn nút Ghi nhận. Ví dụ như hình dưới:

Sau khi hoàn tất, bạn có thể muốn đọc qua Một số lưu ý cho Admin

Linux:

Do phần mềm Themis hiện tại chỉ có cho hệ điều hành Windows nên bạn có thể sử dụng wine hoặc sử dụng 1 máy tính khác chạy Windows (sử dụng samba để 2 máy có thể trao đổi tệp tin với nhau)

Cấu hình

Trực tiếp bằng bảng cài đặt

Bạn có thể thay đổi cấu hình, chỉnh sửa đề bài tại tab cài đặt dành cho admin

  • Yêu cầu: ID của tài khoản (không phải username) là admin, nếu không sẽ không có quyền truy cập.

Đặt thời gian làm bài là 0 sẽ tắt thời gian làm bài

config.json

Cấu hình được lưu tại tệp data/config.json, bao gồm:

  • Tên kì thi
  • Mô tả kì thi
  • Thư mục lưu bài
  • Thời gian bắt đầu kì thi
  • Thời gian làm bài
  • Thời gian bù
  • Công bố kết quả sau khi chấm
  • Cho phép nộp bài
  • Cho phép thay đổi thông tin
  • Cho phép xem nhật ký chấm

Tài khoản

Dữ liệu tài khoản được lưu tại data/xmldb/account.xml. Có thể sử dụng các trình soạn thảo như Excel để chỉnh sửa.

Cách tạo Test

Ở phần mềm Themis

Hướng dẫn cách chuẩn bị một kì thi đã được nêu rõ tại trang Hướng dẫn sử dụng trong phần mềm Themis (có thể mở bằng cách nhấn vào biểu tượng dấu ? ở góc trên phải của phần mềm hoặc nhấn phím F1).

Ở đây mình sẽ lấy ví dụ cách tạo đề bài cho một bài toán đơn giản. Ta có đề bài:

Tính tổng một dãy số gồm n phần tử cho trước.
Tên tệp: SUM.pas

Test ví dụ:

INP OUT
3
1 2 3
6
4
2 2 2 2
8

Tạo test thủ công

  1. Tạo thư mục chứa các test. Mình sẽ lấy ví dụ thư mục này có tên là Task.
  2. Trong thư mục này tạo thêm một thư mục là tên của bài. Ở ví dụ trên thì tên thư mục này sẽ là SUM
  3. Trong thư mục bài đó tạo thêm n thư mục với tên là testn (Với n là số lượng test mà bạn muốn tạo). Trong mỗi thư mục test chứa 2 tệp là tên bài.inptên bài.out.
  • tên bài.inp chứa 1 hoặc nhiều dòng là Input cho bài làm.
  • tên bài.out chứa 1 hoặc nhiều dòng là Output cho bài làm.

Ví dụ mình tạo 2 test cho bài trên thì thư mục Task sẽ có cấu trúc giống như sau:

  • Task
    • SUM
      • test01
        • SUM.inp
        • SUM.out
      • test02
        • SUM.inp
        • SUM.out

Tệp SUM.inp trong test01:

4
1 3 4 2

Tệp SUM.out trong test01:

10

Tệp SUM.inp trong test02:

7
5 4 2 6 8 9 12

Tệp SUM.out trong test02:

46

Tạo test tự động

Nguyên lý làm việc của tạo test tự động là sử dụng một ngôn ngữ lập trình để tạo các test với Input là các số ngẫu nhiên và qua thuật toán của đề bài đã cho để tìm ra Output từ Input ban đầu, sau đó tự động tạo thư mục cho test và ghi Input Output ra các tệp .inp.out.

Sử dụng Tiện ích sinh test tự động của Thầy Nguyễn Tô Sơn sẽ giúp bạn nhanh chóng tạo các test cho phần mềm Themis. Xem thêm chi tiết tại đây

Hoặc tạo test tự động bằng cách viết một chương trình nhỏ:

Ví dụ về tạo test của bài trên sử dụng ngôn ngữ Python:

# Hàm để lấy số ngẫu nhiên
from random import randint

# Hàm để tạo thư mục
from os import mkdir

# Lấy số lượng test cần tạo
l = int(input())

# Chạy vòng lặp từ 1 -> l để tạo các test từ test1 -> testl
for i in range(1, l+1):

		# Lấy số n ngẫu nhiên từ 1 -> 100
		n = randint(1, 100)
		
		# biến lưu danh sách các phần tử
		p = []

		# biến đếm tổng n phần tử
		s = 0

		# chạy một vòng lặp từ 1 đến n
		for j in range(1, n+1):
			# lấy 1 số ngẫu nhiên từ 1 -> 1000
			t = randint(1, 1000)

			# thêm phần tử ngẫu nhiên t vào danh sách phần tử p
			p.append(t)

			# thêm phần tử t vào tổng
			s += t

		# tạo thư mục testi
		mkdir("test" + str(i))

		# bắt đầu viết Input ra tệp sum.inp trong thư mục testi
		with open("test" + str(i) + "/sum.inp", "w") as f:
				# in ra số lượng phần tử của test
				f.write(str(n) + "\n")

				# chuyển các phần tử của p sang dạng string để có thể nối
				p = map(str, p) 
				# nối các phần tử của p thành 1 chuỗi string và ngăn cách bởi dấu cách
				f.write(" ".join(p))

		# bắt đầu viết Output ra tệp sum.out trong thư mục testi
		with open("test" + str(i) + "/sum.out", "w") as f:
				f.write(str(s))

Đoạn mã trên sẽ tự động tạo n thư mục test từ test1 đến testn với Input hoàn toàn là các số ngẫu nhiên và Output được tính ra qua Input ngẫu nhiên đó.

Lưu đoạn mã đó với tên testgen.py và chạy trong thư mục Task/SUM, sau khi chạy thư mục SUM sẽ trông giống như sau:

  • SUM
    • testgen.py
    • test1
      • SUM.inp
      • SUM.out
    • test2
      • SUM.inp
      • SUM.out
    • test3
      • SUM.inp
      • SUM.out
    • ...
    • testn
      • SUM.inp
      • SUM.out

Ở trang web

1. Đăng nhập vào tài khoản có quyền admin
2. Chuyển sang tab cài đặt
3. Tại bảng `Đề Bài`, nhấn vào biểu tượng dấu `+` ở góc phải trên để thêm một đề bài
4. Nhập `Tên Tệp` với giá trị là tên của bài nộp. Với ví dụ trên thì tên tệp sẽ là `SUM`
5. Tiếp tục nhập các trường khác cho phù hợp với bài
6. Nhấn biểu tượng hình chữ `V` ở góc trên phải để lưu đề bài.

* Lưu ý:
	* Nếu có thể nộp nhiều loại tệp cho bài thì ngăn cách đuôi tệp bằng kí kí hiệu `|`. VD: `pas|py|java|cpp`
	* Những bài đã có trong phần mềm `Themis` nhưng chưa được thêm vào trang web thì sẽ không nộp được bài đấy.

Nạp danh sách bài thi và Cấu hình bài thi

2 phần này đã được nói rõ trong hướng dẫn của phần mềm Themis nên ở đây mình sẽ nói lại.

Nạp danh sách bài thi:

1. Tại phần mềm `Themis`, click vào biểu tượng Thư mục là `Nạp danh sách bài thi` (hoặc nhấn `F2`), sau đó chọn thư mục chứa các test đã nêu ở trên. Chương trình sẽ tự động quét và liệt kê danh sách các test có trong thư mục.
2. Tạo một thư mục để chứa các bài làm của thí sinh sau khi chấm (thường là `Contestants`), sau đó nhấn vào biểu tượng `Nạp danh sách thí sinh` (hoặc nhấn `F3`), sau đó chọn tới thư mục vừa tạo.

Cấu hình bài thi:

Trên thanh phía trên của bảng điểm sẽ xuất hiện danh sách các test. Để thay đổi cấu hình của test, `phải chuột` vào test đó và chọn `Cấu hình bài thi`.

<p align="center"><img src="https://lh3.googleusercontent.com/Pwaq2K12SCe0a4YNH-p7q6RnwfzBzxiKFjF1aLApuFDgMZIqGXiYfZzGbxktwDojxo5TmvtS7zoMK-ACht-hwJ-Q3G4A9X50raiEkEfU1iZ63QMbALWjlG1YWiuP_tfiaBvJogxHug=w2400"></p>

* Dùng luồng vào chuẩn (`stdin` / `Standard input`): Input sẽ được đưa vào như nhập bình thường trong `cửa sổ dòng lệnh` (`terminal/console`)
* Dùng luồng ra chuẩn (`stdout` / `Standard output`): Dữ liệu in ra trong `cửa sổ dòng lệnh` (`terminal/console`) sẽ dùng làm output sau khi chương trình kết thúc
> Với các bài yêu cầu lấy Input và Output từ tệp thì không cần phải tích 2 ô này.
* Điểm của test: Điểm sẽ nhận được nếu test chạy đúng
* Giới hạn thời gian: Thời gian tối đa để chương trình chạy 1 test
* Giới hạn bộ nhớ: Bộ nhớ tối đa được cho phép sử dụng trên RAM.
> Nhập giá trị vào `Thiết lập chung` sẽ áp dụng giá trị đó cho từng test.

Sau khi cấu hình xong, nhấn vào nút `ghi nhận` để lưu lại thay đổi.

Thêm tệp vào thư mục Public

Trong thư mục themis-web-interface\ có một thư mục có tên là public. Toàn bộ các tệp tin trong thư mục này (trừ 2 tệp index.php.htaccess) đều có thể được tải xuống bởi mọi người.

  • Để thêm tệp, chỉ cần copy tệp đó vào thư mục public
  • Để xóa tệp, xóa tệp cần xóa ở trong thư mục public

Lưu ý: Không được xóa hai tệp index.php.htaccess ở trong thư mục này.

Cập nhật lên phiên bản mới

⚠ Lưu ý: Sử dụng tệp cài đặt cũ có thể làm cho hệ thống hoạt động không bình thường.

Sau khi tải về và giải nén phiên bản mới, thay thế các tập tin cài đặt/thư mục sau đây từ phiên bản cũ sang phiên bản mới:

  • Tệp: data\config.json
  • Tệp: xmldb\account.xml
  • Toàn bộ các thư mục trong thư mục: data\problems\

Một số lưu ý cho Admin

  • Nội dung của đề bài chấp nhận mã HTML. Có thể sử dụng chức năng này để định dạng đề bài, hướng dẫn cụ thể có thể xem tại W3S:HTML Basic
  • Tài khoản với idadmin sẽ có các quyền:
    • Truy cập vào Admin Control Panel, Problems EditorSysLogs
    • Bypass kiểm tra thời gian, cho phép xem danh sách đề bài, nộp bàitải các tệp đính kèm có trong đề bài kể cả khi kì thi chưa bắt đầu hoặc đã kết thúc.
  • Ratelimit vẫn sẽ áp dụng với tài khoản admin, vì vậy hãy cẩn thận khi thay đổi các thông số của ratelimit. Nếu bạn bị chặn truy cập bởi Ratelimit vì thay đổi sai thông số, bạn sẽ phải thay đổi thủ công trong tệp /data/config.json
  • Nếu gặp lỗi khi đăng nhập hoặc chỉnh sửa thông tin tài khoản, hãy kiểm tra xem excel hiện có đang mở tệp account.xml không. Nếu có hãy tắt tiến trình excel hiện đang mở tệp account.xml và thử lại. Nếu lỗi vẫn tiếp diễn, hãy gửi một báo cáo lỗi và mình sẽ cố gắng fix trong thời gian sớm nhất.