2020.2 syzoj 配置记录 & 教程

SYZOJ 安装记录

前言

时间: 2020.2.17

系统:Ubuntu 18.04.2 LTS

服务器:阿里云轻量应用服务器

登录用户:root

本记录仅供参考,最权威安装指南请认准官方wiki

安装宝塔面板 (可选)

因为网上说宝塔面板管理器来比较方便,而且配置 LNMP 很方便,所以我个人选择安装。

wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh
sudo bash install.sh

中途会提示是否重启,先选择 No,以后再说。

其他的选择 Yes就可以。

安装完成会显示

=================================================================
Congratulations! Installed successfully!
==================================================================
Bt-Panel: http://服务器ip:8888/安全入口
username: 初始用户名
password: 初始密码
Warning:
If you cannot access the panel, 
release the following port (8888|888|80|443|20|21) in the security group
==================================================================

记录下来你的初始用户名、密码,由安全入口登录。如果无法登录,按照上面的提示开放相关端口。

进入面板,自动弹出窗口,我选择安装 LNMP环境,你可以自行选择相关软件版本。

安装过程对于 1核 2GB的服务器来说还是有点慢的。

安装完成后建议在宝塔管理页面里的软件商店检查 mysql是否正常运行,这里可能因为权限原因导致 mysql无法启动,我们需要执行:

chmod 644 /etc/my.cnf
chmod 644 /www/server/mysql/my.cnf 

然后重启 mysqld服务:

service mysqld restart

安装系统依赖

首先执行

apt update

惊奇地发现阿里云家的服务器已经自己换上了阿里云的软件源,速度很快。

有些软件包在阿里云的镜像中已经自带了,因此我没有在这里写,它们包括但不限于: git, curl, nginx(如果没有安装宝塔面板的话)。

上述软件包使用 apt install <软件包名>即可安装。

Node.js 和 npm 的安装

经过测试可用的 Node.js 版本为 8 和 10,更低的版本不受支持,更高的版本可能有未知的兼容性问题。

命令行输入

apt install nodejs
apt install npm

等待安装完成之后检查版本:

node -v

这里我安装之后显示版本为 v8.10.0,不用更新。

如需更新请参考博文:Ubuntu16.04安装最新版nodejs(2018)

注意在上面的博文中,安装 nodejs那句命令应该为:

n v10.19.0

以安装版本 10。

Yarn 的安装 (可选,可由 npm 代替)

请参考官方文档进行安装。

检测是否安装完成:

yarn --version

目前最新版本为 1.21.1

安装 MariaDB 10.3 与 Redis 5

注:如果安装了宝塔面板,并且配置过 mysql, 需要先卸载mysql,再安装时选择mysql-mariadb-10.3,而 Redis 5可以轻松地在软件商店里安装。

首先为了使用 add-apt-repository命令,需要安装 software-properties-common

apt install software-properties-common

依次执行命令:

apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mirrors.tuna.tsinghua.edu.cn/mariadb/repo/10.3/ubuntu bionic main'
add-apt-repository ppa:chris-lea/redis-server
apt update
apt install -y mariadb-server redis-server

注意在第二行命令中 bionicUbuntu 18.04 LTS的代号,使用 Ubuntu 16.04 LTS的读者可改成 xenial。(博主未进行实验,不确定是否可行)

而第三行命令需要按 Enter确定。

安装 MariaDB 10.3的时候会让你设置用户密码,可以自行设置。

安装命令行工具

另外需要安装命令行工具 7z、pygmentize 和 clang-format。

安装 7z(解压缩)和 clang-format(代码格式化)

apt install p7zip-full clang-format python-pygments

详情请参考这篇博客:Ubuntu 安装 clang-format、7z、pygmentize

网站端部署

注:

其中如果需要你填写密码/密钥之类的,为了安全起见,可以使用命令:

echo $(dd if=/dev/urandom | base64 -w0 | dd bs=1 count=20 2>/dev/null)

生成一个 20 个字符的随机密钥,并记录下来。

下载 syzoj

我们将把 syzoj安装在 /opt/syzoj中。

依次执行:

mkdir -p /opt/syzoj
cd /opt/syzoj
git clone https://github.com/syzoj/syzoj
mv syzoj web
cd web

其中使用 git那一行国内服务器下载较慢,请耐心等候。(阿里云华北服务器下载速度 30 KiB/s,真是醉了…,我家电脑都有 680 KiB/s

如果觉得慢,可以自行下载,并上传至 /opt/syzoj目录。

使用 npm安装:

npm install

使用 yarn安装:

yarn

注:
如果国内服务器在安装时,yarn卡在了 Fetching packages部分,因为无法下载某一个软件包。可以尝试:(参考博客包管理工具安装速度慢或许是 lock 文件的坑

rm yarn.lock

但是不保证可行。

配置 syzoj

这一部分官方文档中介绍地很详细:

从配置文件模板创建用于 SYZOJ 网站端的配置文件。

mkdir -p /opt/syzoj/config
cp /opt/syzoj/web/config-example.json /opt/syzoj/config/web.json
ln -s ../config/web.json /opt/syzoj/web/config.json

编辑 /opt/syzoj/web/config.json,如下是您可能需要修改的一些配置项。其中名称加粗的配置项是您很有可能需要修改的。

  • title:网站的标题。显示在网站每个页面的左上角与标题栏中。
  • hostname:网站端监听的 IP地址。如果您按照本教程配置 Nginx反向代理,请保留默认值 127.0.0.1,否则,如果您希望 SYZOJ网站能够从本机之外访问,请改为 ::
  • port:网站端监听的 TCP端口。
  • db:数据库的连接方式。
  • session_secret:为安全起见,请使用随机密钥填写。
  • judge_token:为安全起见,请使用随机密钥填写。
  • google_analytics:如果您使用 Google Analytics统计您的 SYZOJ网站访问数据,请设置为 Google提供的形如 UA-XXXXXXXX-X的字符串。保留默认值将禁用 Google Analytics

创建独立的目录用于存放数据和临时文件,这将便于您对网站的维护:

mv /opt/syzoj/web/uploads /opt/syzoj/data
ln -s ../data /opt/syzoj/web/uploads
mkdir /opt/syzoj/sessions
ln -s ../sessions /opt/syzoj/web/sessions

创建 syzoj 用户

为安全起见,我们不推荐在生产环境中使用 root 账户运行 SYZOJ 网站端。建议为 SYZOJ 单独创建一个用户运行,该用户必须能够写入 sessions 和 data(uploads)文件夹

输入命令

adduser --disabled-password --gecos "" syzoj
chown -R syzoj:syzoj /opt/syzoj/data /opt/syzoj/sessions /opt/syzoj/config/web.json

(这段原来官方wiki中有,不知为何被删减了)

创建数据库

输入命令

mysql

进入 mysql数据库。
依次执行

CREATE DATABASE `syzoj` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON `syzoj`.* TO "syzoj"@"localhost" IDENTIFIED BY "<password>";
FLUSH PRIVILEGES;

注意 <password>需要换成你刚才填写的数据库密码。

使用 systemd

创建 /etc/systemd/system/syzoj-web.service文件:

touch /etc/systemd/system/syzoj-web.service

填入如下内容

[Unit]
Description=SYZOJ web service
After=network.target mysql.service rc-local.service
Requires=mysql.service rc-local.service

[Service]
Type=simple
WorkingDirectory=/opt/syzoj/web
User=syzoj
Group=syzoj
ExecStart=/usr/bin/env NODE_ENV=production /usr/bin/node /opt/syzoj/web/app.js -c /opt/syzoj/config/web.json
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

执行命令:

systemctl start syzoj-web
systemctl enable syzoj-web

使用 Nginx

如果安装了宝塔面板,执行以下步骤:
创建一个网站,网站名为你需要的域名,不需要数据库和 ftp

接下来配置 Nginx
nginx.conf文件的位置:

  • nginx.conf文件路径:/www/server/nginx/conf/nginx.conf
  • 多域名Nginx配置文件:/www/server/panel/vhost/nginx/你的域名.conf

修改成如下内容:

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

server {
    listen 80;
    listen [::]:80;
    
    server_name syzoj.example.com;

    location / {
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Host $host;
        proxy_set_header Connection $connection_upgrade;
        proxy_pass http://127.0.0.1:5283;
    }
}

或者在宝塔面板里为你的站点添加反向代理,指向 http://127.0.0.1:<你的端口,默认为5283>

现在可以输入你的域名进入 syzoj了。

如果出现问题,请使用

cd /opt/syzoj/web && node app.js

观察错误信息。

测评端部署

准备沙箱

这一部分官方文档中介绍地很详细:

SYZOJ的评测全部在沙箱中进行。其沙箱实现基于 Linux内核中一些不默认开启的特性,您需要在引导器中添加一些参数来开启这些特性,以 Ubuntu的默认引导器 GRUB 2为例,编辑 /etc/default/grub

在其中

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

之后加入 cgroup_enable=memory swapaccount=1,变为:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash cgroup_enable=memory swapaccount=1"

运行以下命令更新 GRUB 2的配置,然后重新启动。

update-grub && reboot

PS:如果你是用宝塔面板,建议在面板里设置重启

然后下载沙箱:

wget -O /sandbox-rootfs.tar.xz https://github.com/syzoj/sandbox-rootfs/releases/download/181202/sandbox-rootfs-181202.tar.gz

如果是国内服务器建议自己本地下好后再上传。

解压沙箱文件:

mkdir -p /opt/syzoj/sandbox/rootfs
cd /opt/syzoj/sandbox/
tar xvf /sandbox-rootfs.tar.xz

建立需要的文件夹:

mkdir -p /opt/syzoj/sandbox/{bin,tmp1}

安装系统依赖

执行

apt install build-essential libboost-all-dev
apt install rabbitmq-server redis-server

下载、配置、使用 systemd

这一部分请阅读官方wiki, 教程很详细。

至此,进入你的域名,你可以进入你自己搭建的 syzoj,并且注册了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值