最后由 Tabing010102 更新于 2019年12月15日
190914更新:s3重装,在MuZhou大佬的钦点下,我通过前几天的重装滚过来更新这篇文章。
本片的指南,,或者说“指南”全部是基于我的垃圾服务器s3的配置而写成的,基本可以说是个人的习惯,而且有很多仅仅是Linux的约定俗成,有经验的人士大概不用看这个东西,如果要看的话,也请仅作为参考,而不是照搬照抄,这样可能会产生意料之外的问题。
首先是操作系统,由于我用不太惯apt包管理器,于是就选择了免费的CentOS
作为服务器的长期操作系统,但是有一些软件仅支持Ununtu
(如MC基岩版的服务端),可以用docker
解决,,系统的话也只是个人偏好,请根据自己的习惯进行选择。以下全部操作均根据CentOS7
作为主操作系统。
(我现在都开始怀疑这到底是不是一个教程了,,)
刚开始从运营商那里拿到装好基本系统的服务器的时候,一般需要经过如下配置:
关闭SELinux
(当然你会用的话可以不关),若配置不当可能导致各种Permission Denied
或Web服务器报5xx,各种Web如PHP等无法正常运行
#查看当前SELinux状态
getenforce
#Enforcing是启用
#Disabled是禁用
#临时关闭,立即生效
setenforce 0
#永久关闭:修改/etc/sysconfig/selinux中SELINUX项更改为disabled
#注意:此操作需要重新启动服务器才能生效
更改sshd
运行端口及其他安全设置,请确保防火墙已经开启相应端口
#更改/etc/ssh/sshd_config文件
...
Port xxxxx #xxxxx为你需要的端口号
PasswordAuthentication yes #允许使用密码登录
PermitRootLogin yes #允许root登录
...
systemctl restart sshd #重启sshd以使配置文件生效
更改密码 :passwd [user]
,若不填[user]
,则是当前账户
防火墙(我用的FirewallD
)开放新的sshd
和其他需要的端口,此外,可能需要禁用默认启用的iptables
和ip6tables
,请根据实际情况操作,如没有该软件包可以通过yum install firewalld
安装
systemctl stop iptables ip6tables #关闭iptables和ip6tables
systemctl disable iptables ip6tables #停止iptables和ip6tables的开机自启
************************
警告:请确保您有其他访问终端的权限(如主机运营商提供的网页shell或者实时终端等),否则直接开FirewallD可能导致您无法登录服务器
************************
systemctl start firewalld #启动FirewallD
systemctl enable firewalld #配置FirewallD开机自启
#注意,该操作后请重新启动docker类需要本地nat的应用程序,否则可能导致容器/虚拟机内的系统无法访问网络
#FirewallD管理命令
#注意:带--permanent参数的操作会永久保存并在重启/重新载入规则后生效,而无此参数的操作会在重启/重新载入规则后失效
#注:--zone=public指域,若无特殊情况请使用public域
firewall-cmd --zone=public --add-port=12345/xxx [--permanent] #[临时/永久]添加端口为12345,类型为xxx(tcp/udp)的端口开放
firewall-cmd --zone=public --remove-port=12345/xxx [--permanent] #[临时/永久]移除端口为12345,类型为xxx(tcp/udp)的端口开放
firewall-cmd --zone=public --list-ports [--permanent] #查看[现在/规则表中永久]生效的规则
firewall-cmd --reload #重新载入FirewallD规则
除此之外我一般会把root
禁用(防止暴力破解),然后开一个自己的账号授予root
身份(伪root
账户),具体操作的话,先建立账户,设置密码,然后编辑"/etc/passwd"
文件如下:
#/etc/passwd 修改前
root:x:0:0:root:/root:/bin/bash
...
YourAccount:x:1???:1???::/home/YourAccount:/bin/bash
#1???指一个数字,不确定是多少
#修改后
root:x:0:0:root:/root:/sbin/nologin
#/sbin/nologin是不能登录的
...
YourAccount:x:0:0:root:/root:/bin/bash
#把uid改成0就和root账户没什么区别
这样,root
账户便不能登录,新建的YourAccount
账户就有了全套的root
权限(事实上就是root
账户),这样可以进一步避免被暴力破解root
(高权限,账户名已知)密码的风险。读者还可以仅使用秘钥验证来进一步增加安全性。
至于Web那一套服务器,我使用的是LNMP(Nginx+MySQL+PHP)
,安装的话,我使用的是lnmp.org所制作的一个一键安装/管理脚本,原因是方便管理和升级之类的操作。
脚本的话使用的是编译安装,所以在ARM设备上也是可以使用的(armv6-armv8
均可),理论上可以在任何平台使用(前提是有相应的编译器),建议开一个screen
(虚拟终端)进行安装,整个过程花费一小时到数小时不等,下面贴上来screen
的基本使用方法以及安装时的可配置项:
yum install screen #安装screen
screen -S xxx #开启一个别名为xxx的screen
screen -r xxx #恢复(连接)一个别名为xxx的终端,若只有一个screen,则可以省略xxx参数
#注:若不确定,则请通过提示输入完整名称
#注2:在screen内,可使用先按Ctrl+A再按Ctrl+D返回上一终端(detached),直接Ctrl+D退出当前screen
#注3:screen支持嵌套,虽然不建议这么做
在解压出的lnmp脚本根目录中,有"lnmp.conf"
,这个文件可以自定义Nginx
和PHP
的编译参数,例如:若我想直接将nginx_rtmp_module
编译进nginx
,则可以在"lnmp.conf"
文件中的"Nginx_Modules_Options"
参数加上"--add-module=/path/to/nginx-rtmp-module"
,PHP同理,具体请查阅configure help
另外,PHP还支持编译后动态添加扩展(动态编译扩展而不需要重新编译php,php编译时间太长),方法如下:
yum groupinstall "Development Tools" #安装必要编译工具
#解压php源代码至/path/to/phpsrc/,并进入/path/to/phpsrc/ext/文件夹中
#现以fileinfo扩展举例:
cd ./fileinfo
/path/to/php/bin/phpize #配置configure
./configure --with-php-config=/path/to/php/bin/php-config #配置Makefile
#注:部分module有其他configure参数
#注2:phpize以及php-config在lnmp一键安装脚本中默认位置为/usr/local/php/bin/
make && make install
#修改php.ini
...
extension=fileinfo
...
注:lnmp一键脚本中php.ini的默认位置为/usr/local/php/etc/php.ini
#重启php-fpm
lnmp php-fpm restart
然后下面是基本的默认存放地址(Web相关,LNMP脚本版本1.6):
/home/wwwroot/ #网站根目录
/usr/local/nginx/ #nginx相关目录
/usr/local/nginx/conf/vhost/ #虚拟主机配置文件目录
/usr/local/nginx/conf/ssl/ #脚本自带证书申请默认存放目录
/usr/local/php/ #php相关目录
其他的说实话我也不记得了,,不怎么用,需要的话直接去lnmp.org查就好了。个人建议用vhost
实现多个不同功能的网页/网站,不推荐写到一个配置文件或一个server
块下。
顺带说一句,这个脚本创建虚拟主机(vhost)的时候,会在"/home/wwwroot/"
相应文件夹内添加一个".user.ini"
,这个玩意还不能直接删除,需要执行chattr -i [file]
解锁,如果只是修改的话,改完了记得加上锁(虽然我也不知道这个干什么用的)chattr +i [file]
。至于升级的话,,参见这篇博客,,(注:lnmp1.6
默认添加了TLS1.3
的支持)
补充:一般为了避免网页编码问题,我会在nginx
配置文件的server
块后加"charset utf-8;"
,实现强制使用https
的方法是在监听80端口的server
后加入"rewrite ^(.*)$ https://$host$1 permanent;"
对于很多没有预编译包但提供源代码的软件,可以尝试加入epel
源再试试yum安装(主要为x86平台),方法如下:
yum -y install epel-release
yum update
然后再尝试yum安装你需要安装的软件。
也可以采用编译安装的方法(更通用,适用所有处理器架构),一般情况下系统提供的gcc/c++
或其他语言的库都足够进行编译,但也不排除glibc
或其他依赖库版本不够的情况,这种情况就比较麻烦了,,
一般情况下编译安装的软件"/usr/local/"
路径下(可能是约定俗成),一般软件的默认路径也都是这样,若不是,一般也手动指定到"/usr/local/
“中,编译安装的一般指令如下:
cd /path/to/source_code/
./configure --prefix=/path/to/install_dir
#--prefix是指定安装路径的,可选。也可以加其他参数,具体看软件说明。也可能是其他配置指令
make -j4 #4线程编译,可指定。若编译失败请使用单线程(去掉-j选项)
make install #安装
一般编译安装时间较长,建议开一个screen
或其他类似工具让他待在后台。还有时会出现编译配置不正确,出现某个文件编译不过去(编译选项少了-liconv
等),这是可以手动编译相关文件,再试试继续执行make指令。
如果在安装或进行其他操作时提示无权限(Permission Denied
),请使用sudo指令或使用更高权限账户。若还有问题,请检查相关文件/服务的操作权限。
关于ownCloud
的搭建及各种问题(虽然后来用的NextCloud),参见这篇博客
关于ngrok
开源版的搭建方法,参见这篇博客
关于CentOS
中的使用Docker
搭建Ubuntu
环境并运行MineCraft
基岩版服务器,参见这篇博客
关于Seafile
的搭建(x86,armv7)及各种问题,参见这篇博客
关于OpenTracker
的编译安装,参见这篇博客
若有任何意见或建议,请在评论区评论
Views: 67
贤哥yyds!