从零开始搭建一个军团(联盟)SeAT——EVE Online军团管理系统

零:引言

在加入FRT后,我很好奇联盟的SeAT管理系统到底是怎么搭建的,于是便萌生出了自己搭建一个SeAT的想法。我原本以为这个平台的搭建会十分复杂,但在查阅了相关资料后,才发现在github上很早就有了相关项目。然而令人苦恼的是相关的教程基本都是英文的,且有些地方的描述模糊不清,在爬出数不清的坑后,我终于算是初步理解了相关的内容。提前声明,作者并非是计科相关专业,纯属兴趣爱好,这篇教程也比较初级和笼统,如在任何地方有错误或疏忽,欢迎指正。

本教程面向的是懂得一定的Linux基础的开发者。同时,如果各位在看完教程后仍觉得麻烦的话,可以联系我帮忙部署。游戏内id为Jerry Scintilla

什么是SeAT?

SeAT是一个由玩家创建的开源项目,基于EVE官方ESI接口提供服务。SeAT可为军团的管理提供很大的便利,包括但不限于自助补损,军团活跃度统计,集结分的发放等等功能。SeAT在github上开源共享,同时也有相关的部署教程。本教程仅作为中文的补充。注意:由于eve国服暂未开放ESI接口,所以很抱歉,本教程仅适用于欧服(宁静服)。

github项目地址:https://github.com/eveseat/seat

原作者的部署教程(英文):https://eveseat.github.io/docs/

搭建好的SeAT

 一:购买用于SeAT的服务器和域名

当然,部署SeAT的大前提是拥有一台服务器。由于CCP(eve开发商)与网易的协议,国内的ip无法正常访问eve服务器以及任何esi接口,同时,由于大陆的服务器提供网页服务需要ICP备案,而ICP备案又卡的非常严,因此建议在选择服务器时尽量优先考虑港澳地区以及新加坡等东南亚地区。服务器规格请选择2核2g内存或以上的规格,带宽3m以上。域名则没有地区限制。

二:搭建环境

截至目前,SeAT已经发展到 5.X,并且提供了裸机部署以及docker部署两种方法。但综合各种因素,本教程将提供基于ubuntu 20.04系统SeAT 4.X的裸机部署教程,具体原因将在下文中说明。

首先,获取root权限,更新apt源(本教程全程需root权限)

sudo -i
apt-get update

安装数据库

SeAT使用的数据库为MariaDB,首先添加MariaDB下载源

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash

安装MariaDB

apt-get install mariadb-server

运行MariaDB初始化指令,设置密码

mysql_secure_installation

这条指令运行后首先会要求你设置一个密码,接着是一系列初始化设置,基本上全部选Y(yes)就行

[...]

Enter current password for root (enter for none):  IF ONE WAS SET, IGNORE THIS
OK, successfully used password, moving on...

[...]

Set root password? [Y/n] y
New password:             SET A STRONG PASSWORD HERE
Re-enter new password:    SET A STRONG PASSWORD HERE
Password updated successfully!
Reloading privilege tables..
 ... Success!

[...]

Remove anonymous users? [Y/n] y
 ... Success!

[...]

Disallow root login remotely? [Y/n] y
 ... Success!

[...]

Remove test database and access to it? [Y/n] y

[...]

Reload privilege tables now? [Y/n] y
 ... Success!

[...]

接下来,我们需要创建一个用户和数据库,供 SeAT 使用。首先以root模式启动MariaDB客户端

mysql -uroot -p

这会提示输入密码。密码正确后会有如下提示

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 16
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

创建一个新数据库

create database seat;

输出应类似于以下内容:

Query OK, 1 row affected (0.00 sec)

接着创建一个用于SeAT连接的用户

GRANT ALL ON seat.* to seat@localhost IDENTIFIED BY '此处替换为你需要的密码';

输出类似如下:

Query OK, 0 rows affected (0.00 sec)

刷新数据库服务器权限并退出数据库

FLUSH PRIVILEGES;
exit

注意:请记住数据库用户的密码,因为我们稍后将需要它来配置 SeAT。

安装PHP

注意,在这一步之前,请检查系统内是否预安装了php,特别是7.3以上版本的,如有,请先彻底卸载后再执行下一步,否则在最后SeAT运行时会报错

导入储存库url

echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu focal main" >> /etc/apt/sources.list.d/php.list
echo "deb-src http://ppa.launchpad.net/ondrej/php/ubuntu focal main" >> /etc/apt/sources.list.d/php.list

下载新的存储库 GPG 签名密钥并将其添加到密钥链中

apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 4F4EA0AAE5267A6C

更新包列表

apt-get update

安装所需的PHP包

apt-get install libpng-dev libfreetype6-dev libjpeg-dev
apt-get install curl openssl zip php7.3-bz2 php7.3-cli php7.3-curl php7.3-dom php7.3-gd php7.3-gmp php7.3-intl php7.3-mbstring php7.3-mysql php7.3-opcache php7.3-redis php7.3-zip

安装Redis

SeAT 利用 Redis 作为队列后端的缓存和消息代理

安装redis

apt-get install redis-server

注意:在特殊情况下有可能会需要对redis进行设置,包括限制内存用量以及禁用redis的自动备份(SeAT不会将任何关键数据储存在redis中)

三:SeAT安装

安装git

apt-get install git

安装composer

composer可以方便的安装seat及插件

curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && hash -r

部署SeAT

创建目录并进入

mkdir -p /var/www
cd /var/www

通过composer下载seat4.0项目

composer create-project eveseat/seat:4.0 --no-dev --no-interaction

下载完成后,应该可以看到类似如下输出:

Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: darkaonline/l5-swagger
Discovered Package: eveseat/api
Discovered Package: eveseat/console
Discovered Package: eveseat/eveapi
Discovered Package: eveseat/notifications
Discovered Package: eveseat/services
Discovered Package: eveseat/web
Package manifest generated successfully.
> @php artisan key:generate
Application key [base64:CmhqYNkaIcHo8nYC8LiEWa3U5/+BiTLih5dZftxlV2k=] set successfully.

修复下载文件的权限

chown -R www-data:www-data /var/www/seat
chmod -R guo+w /var/www/seat/storage/

下载SeAT后,我们需要对其进行配置。seat项目的配置文件位于/var/www/seat/的.env文件中

vim /var/www/seat/.env

找到其中的DB_(即数据库)开头的代码,并将其中的密码改为在第二步中为seat用户设置的密码,如下:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=seat
DB_USERNAME=seat
DB_PASSWORD=s_p3rs3c3r3tp455w0rd #将这里的密码更改为为seat用户设置的密码
DB_DEBUG=false

注意,在.env文件中我们还需配置其中的ESI设置,这部分将放在后面讲

发布数据库迁移

使用以下命令发布资产和数据库迁移:

sudo -H -u www-data bash -c 'php /var/www/seat/artisan vendor:publish --force --all'

使用以下命令运行数据库迁移:

sudo -H -u www-data bash -c 'php /var/www/seat/artisan migrate'

使用以下方法播种 SeAT 计划:

sudo -H -u www-data bash -c 'php /var/www/seat/artisan db:seed --class=Seat\\Console\\database\\seeds\\ScheduleSeeder'

(这一段是机翻过来的,可能有些用语会比较奇怪,只需运行命令就行)

配置 Horizon 进程监控器

安装supervisor

apt-get install supervisor

创建配置文件

cat > /etc/supervisor/conf.d/seat.conf << EOL
[program:seat]
command=/usr/bin/php /var/www/seat/artisan horizon
process_name = %(program_name)s-80%(process_num)02d
stdout_logfile = /var/log/seat-80%(process_num)02d.log
stdout_logfile_maxbytes=100MB
stdout_logfile_backups=10
numprocs=1
directory=/var/www/seat
stopwaitsecs=600
user=www-data
EOL

注意:上面的代码不应直接复制到文件中。它是一个脚本,应该直接粘贴到 linux 终端中。它将创建supervisor配置。

重新加载 supervisor 以应用新配置

systemctl restart supervisor.service

配置crontab条目

echo '* * * * * php /var/www/seat/artisan schedule:run >> /dev/null 2>&1' > /tmp/seat-crontab.tmp
crontab -u www-data /tmp/seat-crontab.tmp

四:安装Nginx作为web服务器

安装nginx php7.3-fpm

apt-get install nginx php7.3-fpm

创建配置文件

cat > /etc/nginx/sites-available/seat << EOL
server {

    listen 80;
    listen [::]:80;

    # 将购买的域名填写在下面(注意:域名需提前设置好解析到服务器的公网ip地址)
    server_name  XXX.XXX.XXX;

    # SeAT public directory. This is the only directory that
    # should be exposed by the webserver. If one has to expose
    # the parent directory then things like the .env file will
    # be available for anyone to download.
    root /var/www/seat/public;

    index index.php;

    location / {
       try_files \$uri \$uri/ /index.php?\$query_string;
    }

    # PHP-FPM configuration.
    location ~ \.php\$ {
       try_files \$uri /index.php =404;
       fastcgi_pass unix:/run/php/php7.3-fpm.sock;
       fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
       include fastcgi_params;
    }

    # Even though .htaccess rules mean nothing in the nginx
    # world, prevent those from being downloaded anyways.
    location ~ /\.ht {
       deny all;
    }

    # In case someone messes up, prevent .env files from
    # being downloaded as well.
    location ~ /\.env {
       deny all;
    }
}
EOL

注意:上面的代码不应直接复制到文件中。它是一个脚本,应该直接粘贴到 linux 终端中。它将创建 nginx 配置。

将配置文件链接并删除默认配置文件

ln -s /etc/nginx/sites-available/seat /etc/nginx/sites-enabled/seat
rm /etc/nginx/sites-enabled/default

重新加载并让配置生效

systemctl restart nginx.service
systemctl restart php7.3-fpm.service

五:配置ESI

注册为eve开发人员

登录EVE Online Developers(可能需要科学)并创建新的应用程序

同意条款(如第一步显示不行,可能需要欧米茄账号)

填写名字和说明,用户在查看第三方应用程序对其帐户的访问权限时将看到此名称

添加所有的API权限并按要求设置回调url,如https://XXX.XXX/auth/eve/callback

创建完成后,保存给的id和key还有url

在.env中添加ESI设置

打开.env文件,找到其中的ESI相关设置

EVE_CLIENT_ID=
EVE_CLIENT_SECRET=
EVE_CALLBACK_URL=

将上一步中保存的代码填进去,第一个填id,第二个填key,第三个填url

退出并保存,完成设置

六:添加ssl证书,启用https

这一步就不详细赘述了,可以使用certbot自动添加证书,网上有教程

七:完成设置,登录SeAT并获取管理员权限

完成上述几步后,seat已经可以运行了,你可以通过在.env文件中添加的域名信息访问seat网站,也可以在ubuntu终端中输入以下代码获得一个管理员登录链接,链接在一分钟内有效

cd /var/www/seat/
sudo -H -u www-data bash -c 'php /var/www/seat/artisan seat:admin:login'

附录:我在部署时遇到的坑

拓展包问题

在安装好SeAT后,我们还可以选择安装一些拓展包以获得更多功能,例如HR拓展包可以让SeAT获得更强大的军团人事管理功能,而日历拓展包则可以为SeAT添加集结分统计的功能等等,这部分内容我也会更新相应的教程,同时相关的拓展包信息也可以在官方的帮助文档中找到

https://eveseat.github.io/docs/community_packages/

请注意,拓展包的安装对SeAT的版本有限制,而现阶段很多好用的拓展包在官方文档中并没有SeAT 5.0的版本,这也是为什么我并不推荐SeAT 5.0(第一次部署5.0后结果发现拓展包不可用,给我气的半死,又重装系统重新开始)

Docker方式安装SeAT 4.0可能存在bug

在SeAT的官方文档中提供了SeAT 4.0的docker版本安装教程,熟悉docker的都知道docker部署起来简直不要方便太多,但是在我尝试使用该方法部署SeAT时遇到了很多恶性bug,包括但不限于部署好后启动卡死,traefik(docker版本使用traefik作为web服务器)循环提交获取证书请求导致 Let's Encrypt证书获取达到上限等等,这些bug会导致无法正常使用,除非非常熟悉docker以及docker compose工具,否则不建议使用官方教程里的SeAT4.0 docker部署教程。

PHP版本问题

正如一开始提醒的,SeAT 4.0使用的是7.3版本的PHP,而在官方文档中在一开始会有一条获取全量更新包的指令:

apt-get full-upgrade

请注意,该指令可能会使系统预安装的php版本(如果有的话)升级到8.x,从而导致部署完成后php语法报错,因此在开始部署前需确认完全卸载php,同时该指令建议跳过不运行

seat缓存清理问题(重要)

在配置好seat服务器后,带有管理员权限登录SeAT面板可以在SeAT设置中找到计划任务,建议在其中加入定时清理缓存

同时服务器终端也可以通过命令直接清理缓存(须在seat路径下运行)

sudo -H -u www-data bash -c 'php artisan seat:cache:clear'

注意:非常建议设置定时清理缓存,否则在服务器运行一段时间后可能会出现cpu占用在某个时间段突然涨到100%,同时内存也会爆炸,这时如果服务器自动启用了kswapd进程很可能导致服务器彻底卡死,seat无响应,连ssh都登不上去的那种(这部分我排查到崩溃,一开始top看占用以为是redis的问题,限制内存后还会出现问题,又怀疑到Horizon有问题,结果重新Horizon也没用,最后实在没法了试着清除缓存才恢复正常)

附录二:一些想说的话

首先由衷的感谢和敬佩这些开发大佬们能开发出seat项目,然后就是在我最开始查找资料时发现在中文社区居然没有任何相关的资料,只能通过机翻硬啃github上的帮助文档,也采了不少坑才完成了部署并写出了这篇文章。同时,我计划还会更新更多相关教程,包括安装拓展包,美化seat页面等等,这部分就看缘分了(嘿嘿),等不及的也可以去官方文档中自行了解,写的还是非常详细的,就是机翻有些术语可能会看不懂,需要一定的英语基础。

附录三:seat系列文章

从零开始搭建一个军团(联盟)SeAT——EVE Online军团管理系统icon-default.png?t=N7T8http://t.csdnimg.cn/Z73nT如何给seat添加拓展包——EVE Online军团管理系统icon-default.png?t=N7T8http://t.csdnimg.cn/YLegoseat故障排除——EVE Online军团管理系统icon-default.png?t=N7T8http://t.csdnimg.cn/eghYf

创建一个电影院管理系统需要以下几个步骤: 1. 设计数据库结构:根据电影院管理系统的需求,设计相关数据表和字段,包括电影信息、场次信息、座位信息、订单信息等。 2. 创建数据库:在SQL Server中创建一个新的数据库,命名为“Cinema”。 3. 创建数据表:根据设计好的数据库结构,在“Cinema”数据库中创建相关数据表,包括“Movie”(电影信息)、“Session”(场次信息)、“Seat”(座位信息)、“Order”(订单信息)等。 4. 添加数据:向各个数据表中添加相关数据,包括电影信息、场次信息、座位信息等。 5. 编写存储过程:使用SQL Server中的存储过程功能,编写相关存储过程,包括查询电影信息、查询场次信息、查询座位信息、查询订单信息等。 6. 设计用户界面:使用常见的开发工具(如Visual Studio)设计用户界面,包括电影列表、场次列表、座位图、订单页面等。 7. 编写代码:根据用户界面的设计,编写相关代码,与数据库进行交互,实现电影院管理系统的各项功能,如查询电影信息、查询场次信息、选择座位、提交订单等。 8. 测试和调试:在完成电影院管理系统的开发后,进行测试和调试,确保系统能够正常运行,并且满足用户需求。 以上是创建一个电影院管理系统的大致步骤,具体实现需要根据实际情况进行调整和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值