赞
踩
在加入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的大前提是拥有一台服务器。由于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,特别是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
SeAT 利用 Redis 作为队列后端的缓存和消息代理
安装redis
apt-get install redis-server
注意:在特殊情况下有可能会需要对redis进行设置,包括限制内存用量以及禁用redis的自动备份(SeAT不会将任何关键数据储存在redis中)
apt-get install git
composer可以方便的安装seat及插件
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && hash -r
创建目录并进入
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'
(这一段是机翻过来的,可能有些用语会比较奇怪,只需运行命令就行)
安装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
echo '* * * * * php /var/www/seat/artisan schedule:run >> /dev/null 2>&1' > /tmp/seat-crontab.tmp
crontab -u www-data /tmp/seat-crontab.tmp
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
登录EVE Online Developers(可能需要科学)并创建新的应用程序
同意条款(如第一步显示不行,可能需要欧米茄账号)
填写名字和说明,用户在查看第三方应用程序对其帐户的访问权限时将看到此名称
添加所有的API权限并按要求设置回调url,如https://XXX.XXX/auth/eve/callback
创建完成后,保存给的id和key还有url
打开.env文件,找到其中的ESI相关设置
- EVE_CLIENT_ID=
- EVE_CLIENT_SECRET=
- EVE_CALLBACK_URL=
将上一步中保存的代码填进去,第一个填id,第二个填key,第三个填url
退出并保存,完成设置
这一步就不详细赘述了,可以使用certbot自动添加证书,网上有教程
完成上述几步后,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后结果发现拓展包不可用,给我气的半死,又重装系统重新开始)
在SeAT的官方文档中提供了SeAT 4.0的docker版本安装教程,熟悉docker的都知道docker部署起来简直不要方便太多,但是在我尝试使用该方法部署SeAT时遇到了很多恶性bug,包括但不限于部署好后启动卡死,traefik(docker版本使用traefik作为web服务器)循环提交获取证书请求导致 Let's Encrypt证书获取达到上限等等,这些bug会导致无法正常使用,除非非常熟悉docker以及docker compose工具,否则不建议使用官方教程里的SeAT4.0 docker部署教程。
正如一开始提醒的,SeAT 4.0使用的是7.3版本的PHP,而在官方文档中在一开始会有一条获取全量更新包的指令:
apt-get full-upgrade
请注意,该指令可能会使系统预安装的php版本(如果有的话)升级到8.x,从而导致部署完成后php语法报错,因此在开始部署前需确认完全卸载php,同时该指令建议跳过不运行
在配置好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——EVE Online军团管理系统http://t.csdnimg.cn/Z73nT如何给seat添加拓展包——EVE Online军团管理系统http://t.csdnimg.cn/YLegoseat故障排除——EVE Online军团管理系统http://t.csdnimg.cn/eghYf
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。