游戲服務器部署和開服准備


購買阿里雲ECS (CenterOS 7.6 )

香港節點作為游戲服務器准備上線開服

示例規格 ecs.hfc6.large

鏡像 centos_7_06_64_20G_alibase_20190711.vhd

 

配置安全組

開放端口 22(公司遠程) 7920(web) 7911/7914(gameserver)   443(https)   3389 -1

備選?? 30000/30100  20/21 ( Ftp) 3306(mysql) 80(nginx)

 

配置運行環境

 

1 安裝java 

參考 https://www.cnblogs.com/wjup/p/11041274.html

命令 yum install java-1.8.0-openjdk.x86_64

vi /etc/profile

在文件最后加入:

#set java environment JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre PATH=$PATH:$JAVA_HOME/bin CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME CLASSPATH PATH

修改/etc/profile之后讓其生效

. /etc/profile (注意 之后應有一個空格)

 

java -version

openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)

 

2 安裝 rz

yum -y install lrzsz

 

3 安裝SCP

yum install openssh-clients -y

游戲運行包 打包傳輸

tar zcvf server.tar.gz config/ log/ start.sh  unzip_start.sh  sts-0.0.1-SNAPSHOT.jar 

scp -p 47.100.197.xxx:/game/server.tar.gz /game

 

4 支持簡體中文顯示

改寫文件

vi /etc/sysconfig/i18n

LANG="zh_CN.UTF-8" 
SYSFONT="latarcyrheb-sun16" 
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"

編輯 /etc/profile配置文件,添加如下一行 
export LANG="zh_CN.UTF-8"
# 重新載入 
# . /etc/profile 
  
## 查看當前的字符集 
# echo $LANG

 

在終端 SecureCRT 設置Session Options  - Terminal-Appearance 設置charcter encoding  [UTF-8]

 

 

5.安裝php7.2.9(編譯安裝make)

wget http://cn2.php.net/distributions/php-7.2.9.tar.gz ./

解壓到 /usr/local/src/

安裝前置包

yum -y install libxml2

yum -y install libxml2-devel
yum -y install openssl
yum -y install openssl-devel
yum -y install curl
yum -y install curl-devel
yum -y install libjpeg
yum -y install libjpeg-devel
yum -y install libpng
yum -y install libpng-devel
yum -y install freetype
yum -y install freetype-devel
yum -y install pcre
yum -y install pcre-devel
yum -y install libxslt
yum -y install libxslt-devel
yum -y install bzip2
yum -y install bzip2-devel
 
cd  /usr/local/src/php-7.2.9 #進入目錄 
./configure    #編譯參數帶入 --enable-fpm  參考 https://www.cnblogs.com/lxdd/p/5633810.html     //補充更多完整的參數 https://www.cnblogs.com/sentangle/p/12054332.html
make           #編譯 等等等...
make install   #安裝
安裝完畢默認目錄 /usr/local/php 版本如下

 

 

php --version
PHP 7.2.9 (cli) (built: May 26 2020 16:00:49) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

 

 

6 .配置php-fpm

 

創建 www  用戶組

#/usr/sbin/groupadd -f www

#/usr/sbin/useradd -g www www 

 

find / -name 'php-fpm.conf.default'
/usr/local/etc/

find / -name 'www.conf'
/usr/local/etc/php-fpm.d/

 

cd /usr/local/etc/

cp php-fpm.conf.default    php-fpm.conf #拷貝模板文件為php-fpm配置文件

vi /etc/php-fpm.conf #編輯 修改include內容 "include=NONE/etc/php-fpm.d/*.conf"  => "include =/usr/local/etc/php-fpm.d/*.conf"   

將 ;pid = run/php-fpm.pid  前面的分號去掉

 

 

 

復制並改寫/usr/local/etc/php-fpm.d/  php-fpm.conf(來自??) www.conf(來自www.conf.default)

 

相關配置文件位置

/usr/local/etc/php-fpm.d/

-rw-r--r-- 1 root root 22147 5月 26 16:33 php-fpm.conf
-rw-r--r-- 1 root root 10012 5月 26 18:48 www.conf

 

vi /usr/local/etc/php-fpm.d/php-fpm.conf #編輯
user = www #設置php-fpm運行賬號為www   需要與nginx user配置完全對應
group = www #設置php-fpm運行組為www  需要與nginx user配置完全對應
pid = run/php-fpm.pid #取消前面的分號

vi /usr/local/etc/php-fpm.d/www.conf #編輯

user = www #設置php-fpm運行賬號為www   需要與nginx user配置完全對應
group = www #設置php-fpm運行組為www  需要與nginx user配置完全對應

 

啟動報錯  Failed to start php-fpm.service: Unit not found.

參考 https://www.cnblogs.com/starfish29/p/10570728.html  將php-fpm添加至service服務

超級坑的改名 很容易出錯(爬坑3小時)

  
設置 php-fpm開機啟動
cp /usr/local/src/php-7.2.9/sapi/fpminit.d.php-fpm.in   /etc/init.d/php-fpm    #拷貝php-fpm到啟動目錄
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on

 

php-fpm 啟動命令

systemctl start php-fpm.service

 

php-fpm 運行成功 注意啟動用戶是www

  

 

默認啟動端口9000 查看成功

 

 

7.配置php.ini

cp php.ini  /usr/local/lib/php/php.ini #復制php配置文件到安裝目錄
rm -rf /etc/php.ini #刪除系統自帶配置文件
ln -s /usr/local/lib/php/php.ini /etc/php.ini #添加軟鏈接

 

這一項默認被注釋並且值為1,根據官方文檔的說明,這里為了當文件不存在時,阻止Nginx將請求發送到后端的PHP-FPM模塊,從而避免惡意腳本注入的攻擊,所以此項應該去掉注釋並設置為0

強制重定向關閉

cgi.force_redirect = 0

 

vi /usr/local/php5/etc/php.ini #編輯配置文件
找到:;open_basedir =
修改為:open_basedir = .:/tmp/ #防止php木馬跨站,重要!!
找到:disable_functions =
修改為:disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname
#列出PHP可以禁用的函數,如果某些程序需要用到這個函數,可以刪除,取消禁用。
找到:;date.timezone =
修改為:date.timezone = PRC #設置時區
找到:expose_php = On
修改為:expose_php = OFF #禁止顯示php版本的信息
找到:display_errors = On
修改為:display_errors = OFF #關閉錯誤提示

 

 

 

8.Nginx安裝

yum -y install nginx

 

9.配置nginx.conf

修改nginx配置

/etc/nginx/nginx.conf  修改配置項目 user nginx -> www  www 

 

然后執行 vim /usr/local/nginx/nginx.conf 編輯nginx配置文件,具體路徑根據實際的nginx.conf配置文件位置編輯,下面主要修改nginx的server {}配置塊中的內容,修改location塊,追加index.php讓nginx服務器默認支持index.php為首頁:

  

 

 

修改php目錄所有者和權限避免 "nginx no input file specified" "空白頁面"錯誤

[root@games000001 login]# chown www.www /login -R
[root@games000001 login]# chmod 700 /login -R

 

 

nginx啟動命令

 sudo systemctl start nginx.service

 

注意啟動用戶是 www

 

  

 
Access denied.報錯
nginx error.log

PHP message: PHP Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0
Unable to open primary script: /login//index.php (Permission denied)" while reading response header from upstream, client: 125.120.15.158, server: _, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "sts.qiheshe.cn"

解決辦法  fastcgi_params 配置中增加一行

fastcgi_param  PHP_VALUE  "open_basedir=$document_root:/tmp/";

 

 

 

在默認html目錄 /usr/share/nginx/html 可以測試test.php

<?php

     phpinfo();
?>
 
重啟nginx測試php
 
大功告成

 

 

 10.TP5跟Nginx 配置 nginx.conf

https://www.cnblogs.com/houweijian/p/11391313.html

server {
    listen       80;
    server_name s.huailaixx.com;
    charset utf-8;

    location ~ \.php {
        root   /data0/www/test_hlxx/public;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;

        fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$; 
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;


        fastcgi_param  PATH_INFO  $fastcgi_path_info;                                    
        fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
        include        fastcgi_params;
    }

    location / {
        root   /data0/www/test_hlxx/public;
        index  index.html index.htm index.php;

        if (!-e $request_filename) {
            rewrite ^/(.*)$ /index.php/$1 last;  
            break;
        }
    }
}

  

 

設置服務器時區

 

修改profile文件,添加以下兩行:

TZ='Asia/Shanghai'

export TZ

[root@lyn ~]# vim /etc/profile

[root@lyn ~]# source /etc/profile

[root@lyn ~]# date

2020年 05月 26日 星期二 21:56:17 CST

由此發現,時區由AST 變成了CST。CST :中國標准時間

 

增加SSH訪問時間

1、設置服務器向SSH客戶端連接會話發送頻率和時間 

#vi /etc/ssh/sshd_config,添加如下兩行 
ClientAliveInterval 60 
ClientAliveCountMax 86400 
注:ClientAliveInterval選項定義了每隔多少秒給SSH客戶端發送一次信號;ClientAliveCountMax選項定義了超過多少秒后斷開與ssh客戶端連接 
2、重新啟動系統SSH服務 
#service sshd restart


 

雲數據庫RDS配置

 

雲數據庫PolarDB Mysql5.6

自動讀寫分離

 

 

設置白名單.允許香港區gameserver訪問權限  & 公司內網訪問權限

創建集群賬號

 

設置mysql 時區 (PolarDB Access denied)

修改方法

  1. 輸入show variables like "%time_zone%";,顯示當前時區。
  2. set global time_zone = '+8:00'; 設置全局時間為東八區(+8個小時)。
  3. set time_zone = '+8:00'; 修改當前會話的時區。
  4. flush privileges; 刷新一下使改動立即生效。
作者:Luvoratorrrrry鏈接:https://www.jianshu.com/p/adbcb34d71c2來源:簡書著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

 

 

同步游戲數據庫結構

 

 

Mybatis數據庫鏈接使用時區設置

&serverTimezone=GMT%2B8

 


 

解析域名

sts.qhs.cn 綁定 IPV4 游戲服務器地址

 

 


 

使用properties配置文件實現多環境配置

 

 

分別創建application-dev.properties,application-test.properties,application-pro.properties配置文件,分別代表dev,test和product環境的配置文件。 

主配置文件application.properties中添加配置激活選項,例如激活dev環境的配置為:

spring.profiles.active=dev

這時application-dev.properties配置文件生效,如果主配置文件application.properties和dev配置文件application-dev.properties中有相同的配置信息,那么application-dev.properties中的生效。

啟動指定dev配置文件生效

java  -jar  *.jar   --spring.profiles.active=dev (雙橫杠--)

java -jar *.jar dev|pro


————————————————
版權聲明:本文為CSDN博主「碼農code之路」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/woniu211111/article/details/54292824

 

 

 

7.31 補充

使用HTTP上傳用戶日志是遇到的問題 

1. Upload 返回http /1.1 500 報錯. 通過配置nginx server日志    sts_php_error.log .觀察到這個nginx報錯 *1 open() "/var/lib/nginx/tmp/client_body/0000000001" failed (13: Permission denied), client: xxx.xx.x.xxx, server: _, request: "POST /uploadLog HTTP/1.1", 

解決辦法 參考  http://www.cqywc.com/2018/12/10/open-var-lib-nginx-tmp-client_body-0000000001-failed-13-permission-denied/

使用www用戶對目錄 /var/lib/nginx 具有完整的權限. 才能使用tmp目錄存放過大的文件. 

 

2.Upload 2M文件返回報錯 HTTP/1.1 413 Payload Too Large. 在 sts_php_error.log .觀察到 [error] 16115#0: *1008 client intended to send too large body: 2384593 bytes, client: xx.xx.xxx.xxx, server: _, request: "POST /uploadLog HTTP/1.1", 

解決辦法 1 在nginx配置中增加 配置 client_max_body_size 20M;並重啟

      2 php 自己的 上傳大小限制 upload_max_filesize 默認為2M 超過會報出     "$_FILES["files"]["error"] = 1 "   UPLOAD_ERR_INI_SIZE 值為 1,上傳的文件超過了 php.ini 中 upload_max_filesize選項限制的值。

    3 php.ini 配置沒有生效的問題 https://blog.csdn.net/qq_36663951/article/details/83344293  配置的php.ini路徑始終沒找到 

Loaded Configuration File (none)

 * php-fpm -c /usr/local/bin/php.ini

*  解決辦法 copy了一個php.ini過來 .  open("/usr/local/bin/php.ini", O_RDONLY) = 3      .  再重啟

又遇到了 頁面無法打開的問題 No input file specified.

注意到 /usr/local/var/log  顯示  

[31-Jul-2020 18:30:24 PRC] PHP Warning: Unknown: open_basedir restriction in effect. File(/login/WeChatPub/public/info.php) is not within the allowed path(s): (.:/tmp/) in Unknown on line 0
[31-Jul-2020 18:30:24 PRC] PHP Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0
[31-Jul-2020 18:30:24] WARNING: [pool www] child 19714 said into stderr: "ERROR: Unable to open primary script: /login/WeChatPub/public/info.php (Operation not permitted)"
[31-Jul-2020 18:32:08] NOTICE: Finishing ...

參考  https://www.cnblogs.com/godfather007/p/11007852.html  編輯 /etc/nginx/fastcgi_param [很重要]  [fastcgi_paramPHP_VALUE  "open_basedir=$document_root/../:/tmp/";] 再使用php-fpm -c /usr/local/bin/php.ini 成功訪問到有效的info.php配置

新問題  疑似 引出了PHP編譯缺少bcmatch擴展的問題

 Call to undefined function lang() in /login/WeChatPub/thinkphp/tpl/think_exception.tpl:82

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM