在VPS上安装配置OOI系统 - acgx/ooi2 GitHub Wiki

欢迎各位提督关注使用OOI系统!本文将以VPS上常见的Ubuntu 14.04操作系统为例,一步一步指导如何安装、配置OOI系统以供使用。

VPS

首先你需要拥有一个在日本国内的VPS,其公网IP能够被DMM网站识别成日本国内的用户,然后这个VPS到DMM网站的网速和到你目标人群的网速应该都比较快,否则会有很糟糕的使用体验。VPS的配置不需要很高,基本上各个厂商最低档的配置就能服务很多人了,但是相应的OOI系统对主机的带宽要求比较高,因为有大量的静态文件需要转发。根据作者目前的经验,带宽足够的情况下(使用了CDN),3000左右的用户每天可能要用掉100~200G的流量,请根据目标人群的数量酌情选择合适的VPS带宽和流量配置。

VPS的操作系统请务必使用Linux或者FreeBSD而不是Windows,因为Windows下Tornado的运行效率非常低。

安装、更新依赖软件

本系统开发时使用了Python 3.4、PyCurl 7.19和Tornado 4.2,因此请尽量保持这些软件处于最新版本。

以Ubuntu 14.04系统为例,请以root权限运行以下命令安装所有的依赖软件:

apt-get update && apt-get upgrade
apt-get install python3-pip python-virtualenv git nginx supervisor libcurl4-openssl-dev

然后运行如下命令获取OOI系统的源代码:

cd /srv
git clone https://github.com/kitakamiooi/ooi2.git

接下来创建一个Python 3.4的virtualenv:

virtualenv -p /usr/bin/python3 --no-site-packages ooi2

激活virtualenv,更新并安装相关的依赖包:

source /srv/ooi2/bin/activate
pip install -U pip
pip install -U setuptools
pip install pycurl
pip install tornado
deactivate

获取必须的舰娘游戏文件

舰娘系统中有极少数静态文件不适合直接转发,需要OOI系统处理一下再发送给客户端,这部分文件我们需要下载到VPS上。运行以下命令下载相关文件到/srv/_kcs目录中:

mkdir /srv/_kcs
cd /srv/_kcs
wget http://203.104.209.102/kcs/resources/image/world/125_006_184_015_l.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_184_015_s.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_184_016_l.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_184_016_s.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_187_205_l.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_187_205_s.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_187_229_l.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_187_229_s.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_187_253_l.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_187_253_s.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_188_025_l.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_188_025_s.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_189_007_l.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_189_007_s.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_189_039_l.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_189_039_s.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_189_071_l.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_189_071_s.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_189_103_l.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_189_103_s.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_189_135_l.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_189_135_s.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_189_167_l.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_189_167_s.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_189_215_l.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_189_215_s.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_189_247_l.png
wget http://203.104.209.102/kcs/resources/image/world/125_006_189_247_s.png
wget http://203.104.209.102/kcs/resources/image/world/203_104_105_167_l.png
wget http://203.104.209.102/kcs/resources/image/world/203_104_105_167_s.png
wget http://203.104.209.102/kcs/resources/image/world/203_104_209_023_l.png
wget http://203.104.209.102/kcs/resources/image/world/203_104_209_023_s.png
wget http://203.104.209.102/kcs/resources/image/world/203_104_209_039_l.png
wget http://203.104.209.102/kcs/resources/image/world/203_104_209_039_s.png
wget http://203.104.209.102/kcs/resources/image/world/203_104_209_055_l.png
wget http://203.104.209.102/kcs/resources/image/world/203_104_209_055_s.png
wget http://203.104.209.102/kcs/resources/image/world/203_104_209_071_l.png
wget http://203.104.209.102/kcs/resources/image/world/203_104_209_071_s.png
wget http://203.104.209.102/kcs/resources/image/world/203_104_209_102_l.png
wget http://203.104.209.102/kcs/resources/image/world/203_104_209_102_s.png
wget http://203.104.209.102/kcs/resources/image/world/203_104_248_135_l.png
wget http://203.104.209.102/kcs/resources/image/world/203_104_248_135_s.png
wget http://203.104.209.102/kcs/mainD2.swf

配置supervisor

配置之前先了解一下OOI系统的基本配置。

首先ooi.py是程序的入口,它可以接受4个参数:--port、--mp、--debug和--maintain。

  • --port用于指定OOI系统监听的端口号,默认为8000;
  • --mp用于开启多进程模式,进程数将视VPS的CPU核心数而定,即VPS有两个核就会开两个子进程,有四个核就会开四个子进程,不指定改参数时默认为单进程模式;
  • --debug用于开启Tornado的调试模式,指定该参数时前述--mp参数将失效,强制使用单进程模式;
  • --maintain用于开启站点维护模式,用户将不能登录和游戏,可用于舰娘游戏维护时,自定义维护页面的内容请看本文最后的“定制页面内容”部分。

举例说明:

ooi.py --port=9999 --mp

该命令会启动OOI系统,在9999端口上监听,同时开启多个子进程处理请求。

同时OOI系统还可以接受一下环境变量的参数来配置一些运行过程中需要的值:

  • OOI_SECRET:用于设定安全cookie的密钥,请务必设置该值以确保安全性;
  • OOI_KCS_DOMAIN:如果你需要为舰娘游戏的静态文件使用不同的域名(通常是做CDN的需要),请设置该参数,该参数只对普通HTTP连接有效;
  • OOI_KCS_HTTPS_DOMAIN:同上,但只对安全连接有效,需要注意的是即使在普通和安全连接下要使用同一个域名,你也需要同时设置这两个参数;
  • OOI_PROXY_HOST:指定OOI系统的代理服务器主机名,通常在本地调试的时候使用,比如你在国内调试OOI系统但没法直接登录DMM网站,想用岛风go代理一下;
  • OOI_PROXY_PORT:指定代理服务器的端口号;
  • OOI_API_START2_PATH:指定一个缓存api_start2结果的路径,默认为/srv/_kcs/api_start2.json。2015年10月9日舰娘更新后增加了对api_start2请求的时间判断,超过一定时间后同一个token再请求api_start2就会猫。所以我们将api_start2的结果缓存起来就不会再向舰娘的服务器发送这个请求,避免了刷新就猫的问题。因为要向这个路径写入内容,所以这个文件所在的目录必须可写。如果使用默认路径的话,可以使用如下命令:chown www-data:www-data /srv/_kcs,或者chmod 777 /srv/_kcs。

了解了上述内容之后我们来设置supervisor,先新建一个配置文件:

vim /etc/supervisor/conf.d/ooi2.conf

不会用vim的也可以用别的什么编辑器,然后输入以下内容:

[program:ooi2]
command=/srv/ooi2/bin/python3 /srv/ooi2/ooi.py
environment=OOI_SECRET="引号里请改成一段随机的字母数字,务必要改!"
directory=/srv/ooi2
autostart=true
autorestart=true
user=www-data

其中command行就是运行OOI系统的命令,可以跟上面说的三个参数,例如需要多进程的就在后面加入--mp。

environment行包含了运行OOI系统时的环境变量,可以根据需要增加,多个环境变量都写在这一行,变量之间用分号隔开,例如:

environment=OOI_SECRET="引号里请改成一段随机的字母数字,务必要改!";OOI_KCS_DOMAIN="my_cdn_domain.com"

配置好这个文件之后就可以重启supervisor服务运行OOI系统了:

service supervisor restart

运行过程中OOI系统的错误日志会输出到形如/var/log/supervisor/ooi2-stderr---supervisor-2Uzl3L.log这样的文件中。

因为supervisor不能很好地管理ooi.py启动的子进程,因此如果使用了多进程模式,重启OOI服务时需要使用下面三条命令才行:

service supervisor stop
killall python3
service supervisor start

如果是单进程模式的话直接用service supervisor restart就可以了。

Nginx配置

Nginx部分的配置过程就是建立多个配置文件的过程,一共需要3个文件。

/etc/nginx/kcs_upstream.conf文件定义了舰娘静态文件的源,内容如下:

upstream kcs_backend {
  server 203.104.209.71:80;
  server 125.6.184.15:80;
  server 125.6.184.16:80;
  server 125.6.187.205:80;
  server 125.6.187.229:80;
  server 125.6.187.253:80;
  server 125.6.188.25:80;
  server 203.104.248.135:80;
  server 125.6.189.7:80;
  server 125.6.189.39:80;
  server 125.6.189.71:80;
  server 125.6.189.103:80;
  server 125.6.189.135:80;
  server 125.6.189.167:80;
  server 125.6.189.215:80;
  server 125.6.189.247:80;
  server 203.104.209.23:80;
  server 203.104.209.39:80;
  server 203.104.209.55:80;
  server 203.104.209.102:80;
}

/etc/nginx/ooi2_proxy.conf文件定义了OOI系统代理,内容如下:

proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 2m;
proxy_read_timeout 5m;
proxy_pass http://127.0.0.1:8000;

这里各种超时时间设定得相对比较长,有需要的提督可以自行修改。

/etc/nginx/sites-enabled/ooi2.conf定义了一个网站,内容如下:

include /etc/nginx/kcs_upstream.conf;

server {
  listen 80;
  server_name 这里填你的域名;

  location = /favicon.ico {
    alias /srv/ooi2/static/img/favicon.ico;
  }
  location ^~ /static/ {
    alias /srv/ooi2/static/;
  }
  location ^~ /_kcs/ {
    alias /srv/_kcs/;
  }

  location /kcs/ {
    proxy_pass http://kcs_backend;
  }
  location ~ /kcs/resources/image/world/(.*)\.png$ {
    include /etc/nginx/ooi2_proxy.conf;
  }
  location = /kcs/mainD2.swf {
    include /etc/nginx/ooi2_proxy.conf;
  }

  location / {
    include /etc/nginx/ooi2_proxy.conf;
  }

  access_log /var/log/nginx/ooi2-access.log;
  error_log /var/log/nginx/ooi2-error.log;
}

以上给出了一个最基本的nginx配置,各位提督可以自行添加各种高级功能,不再赘述。

完成配置后重启nginx服务:

service nginx restart

默认安装的Ubuntu 14.04系统并没有打开防火墙,此时打开你的浏览器访问你在nginx中配置的域名,即可使用OOI系统了!

多说一些关于防火墙的内容,通常Ubuntu系统都会自带ufw防火墙,但是并不开启,你可以使用以下语句打开SSH和HTTP端口,然后打开防火墙保护你的VPS:

ufw allow ssh
ufw allow http
ufw enable

定制页面内容

OOI系统提供了有限的不修改源码而定制页面的功能,在customize目录中建立一些文件能够改变页面上的部分内容:

  • title.html:该文件的内容将替代页面的标题;
  • info.html:该文件的内容将显示在登录页面右侧的提示内;
  • copyright.html:该文件的内容将替代页面最低端的版权信息;
  • notice.html:该文件的内容将显示在浏览器模式下游戏Flash的下方,用于给用户提供某些信息、提示,如系统维护时间等;
  • maintain.html:该文件的内容将在网站维护的时候显示;
  • statistic.html:可将CNZZ、Google Analytics等统计访问量的JS代码放在这里。

舰娘游戏维护后的处理

舰娘游戏维护后一般mainD2.swf文件都会修改,所以请删掉原来的/srv/_kcs/mainD2.swf文件,重新手动下载一次。

同时api_start2的结果也会改变,所以维护后也请删掉缓存的结果文件,让系统重新缓存。

(完)