English | Tiếng Việt
Repository này chứa các file Docker để chạy LCOJ.
Dựa trên dmoj-docker và vnoj-docker.
Bạn cần cài đặt Docker và Docker Compose trước khi bắt đầu.
git clone --recursive https://github.com/luyencode/lcoj-docker.git
cd lcoj-docker/dmojTừ giờ, tất cả các lệnh đều chạy trong thư mục dmoj.
Chạy script khởi tạo để tạo các thư mục cần thiết:
./scripts/initializeTạo các file cấu hình từ file mẫu:
cp environment/mysql-admin.env.example environment/mysql-admin.env
cp environment/mysql.env.example environment/mysql.env
cp environment/site.env.example environment/site.envSau đó, chỉnh sửa các file này:
- Đặt mật khẩu MySQL trong
mysql.envvàmysql-admin.env - Đặt host và secret key trong
site.env - Cấu hình
server_nametrongdmoj/nginx/conf.d/nginx.conf
docker compose builddocker compose up -d site db redis celery./scripts/migrate./scripts/copy_static./scripts/manage.py loaddata navbar
./scripts/manage.py loaddata language_small
./scripts/manage.py loaddata demoLưu ý: Lệnh trên tạo tài khoản admin với username và password đều là admin. Bạn nên đổi mật khẩu hoặc xóa tài khoản này.
Hoặc tạo tài khoản admin của riêng bạn:
./scripts/manage.py createsuperuserKhởi động tất cả dịch vụ:
docker compose up -dDừng tất cả dịch vụ:
docker compose downJudge server không có trong Docker setup này. Vui lòng tham khảo Hướng dẫn cài đặt Judge.
Bridge instance đã được bao gồm và sẽ tự động chạy khi bạn khởi động.
Khi cập nhật hệ thống, bạn có thể cần chạy migration:
./scripts/migrateNếu static files thay đổi, bạn cần rebuild:
./scripts/copy_staticTùy vào phần nào thay đổi, bạn cần rebuild hoặc restart:
Nếu thay đổi dependencies:
docker compose up -d --build base site celery bridged wseventNếu chỉ thay đổi code:
docker compose restart site celery bridged wseventNếu bạn đã có Nginx chạy trên máy host, bạn có thể đổi port trong docker-compose.yml và cấu hình proxy pass.
Ví dụ cấu hình Nginx trên máy host:
server {
listen 80;
listen [::]:80;
add_header X-UA-Compatible "IE=Edge,chrome=1";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
location / {
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
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://127.0.0.1:10080/;
}
}Trong trường hợp này, bạn cần đổi port trong Docker container thành 10080.
Mặc định, tất cả dịch vụ chạy trên cùng một máy. Để xử lý nhiều người dùng hơn, bạn có thể phân tán dịch vụ ra nhiều server:
- Server trung tâm: nginx, db, redis, bridged, wsevent
- Các worker: nginx, site, celery
Chỉnh sửa dmoj/nginx/conf.d/nginx.conf để phân phối traffic đến các worker. Tham khảo Nginx docs.
Ví dụ:
upstream site {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
listen [::]:80;
location / {
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
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://site/;
}
location /event/ {
proxy_pass http://wsevent:15100/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
location /channels/ {
proxy_read_timeout 120;
proxy_pass http://wsevent:15102/;
}
}Mở các port sau trong dmoj/docker-compose.yml:
- db: 3306
- redis: 6379
- bridged: 9998, 9999
- wsevent: 15100, 15101, 15102
Khởi động dịch vụ:
docker compose up -d nginx db redis bridged wseventChỉnh sửa dmoj/environment/site.env và dmoj/environment/mysql.env để trỏ đến server trung tâm.
Khởi động dịch vụ:
docker compose up -d nginx site celeryXem tài liệu đầy đủ tại: https://docs.luyencode.net
Nếu gặp vấn đề:
- Tạo issue tại GitHub Issues
- Nếu bạn quá mệt mỏi để tự mình cài đặt, LCOJ sẽ hỗ trợ bạn cài đặt miễn phí: https://luyencode.net/about/#lien-he