根据学到的 Linux 操作系统知识、以及从我菜鸟的角度来看,梳理了一下:在安装 LNMP 环境搭建 WordPress 之前,一个新建的 VPS 服务器该做好哪些基本的配置?

本文环境:

# 服务器: Linode
# 发行版: CentOS 7
# 系统环境:LNMP (Linux + Nginx + Mysql + PHP)
# 系统环境一键安装包:https://lnmp.org/install.html

一、配置服务器

登陆终端,开始下面的基本设置:

1.更新系统:

yum -y update

2.设置系统自动更新:

# 安装 dnf-automatic 和 Cockpit
yum -y install dnf-automatic cockpit

# 修改 dnf-automatic 配置文件
vim /etc/dnf/automatic.conf
apply_updates = yes # 将 no 改为 yes

# 启用 dnf-automatic
systemctl enable --now dnf-automatic.timer
systemctl start --now dnf-automatic.timer

# 启用 cockpit.socket
systemctl enable --now cockpit.socket
systemctl start cockpit.socket

浏览器访问 IP:9090 即可网页管理系统!

配置通过域名访问 cockpit(可选非必要)

项目wiki:https://github.com/cockpit-project/cockpit/wiki/Proxying-Cockpit-over-nginx

步骤:

  • 先把域名解析好;
  • 接着 LNMP 环境用一键脚本装好后:直接lnmp vhost add,顺便申请let's encrypted 证书;
  • 最后修改虚拟主机配置文件,保留 ssl 部分,结合文档,最终如下所示即可。
server {
    listen         80;
    listen         443 ssl;
    server_name    cockpit.你的域名.xxx;

    location / {
        # Required to proxy the connection to Cockpit
        proxy_pass https://127.0.0.1:9090;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Required for web sockets to function
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # Pass ETag header from Cockpit to clients.
        # See: https://github.com/cockpit-project/cockpit/issues/5239
        gzip off;
    }
    # 把这段 ssl 加进来就可以了
    ssl_certificate /usr/local/nginx/conf/ssl/cockpit.你的域名.xxx/fullchain.cer;
    ssl_certificate_key /usr/local/nginx/conf/ssl/cockpit.你的域名.xxx/cockpit.你的域名.xxx.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;

}

3.修改主机名:

# 把 sgq 替换为你想要的名字
hostnamectl set-hostname sgq

4.设定系统时区/时间:

# 把现有的时区都列出来:
timedatectl list-timezones

# 比如找到 Asia/Shanghai,设置为中国时区:
timedatectl set-timezone 'Asia/Shanghai'

5.关闭 SElinux:

# 临时关闭,执行命令:setenforce 0
# 这里直接修改配置文件将其永久关闭
vim /etc/selinux/config
# 把 enforcing 改为 disabled
SELINUX=disabled

6.新建普通用户:

# 把 new 更改为你想要的用户名
useradd new
# 为 new 设置登陆密码
passwd new

7.(强化SSH)设置密钥认证的方式来远程登陆服务器:

# 使用软件比如 Xshell 生成密匙,将其复制到以下文件,保存退出
vim ~/.ssh/authorized_keys
#设置权限
chmod 700 ~/.ssh

8.(强化SSH)关闭密码认证的方式登陆服务器 + 修改默认端口防止恶意登陆:

vim /etc/ssh/sshd_config
# 将 yes 改为 no 即可禁止使用密码登陆
PasswordAuthentication yes
# 将 yes 改为 no 即可禁止使用root登陆(可选操作)
PermitRootLogin yes

# 将默认端口 22 改为 任意数字比如 222
Port 222

在重启 ssh 之前,务必修改 iptables 放行自定义的端口以及禁用默认端口!

# 打开 iptables 文档,修改如下:
vim /etc/sysconfig/iptables
# 放行刚设置的自定义端口 222
-A INPUT -p tcp -m tcp --dport 222 -j ACCEPT
# 禁用默认端口22,前面加上 # 注释掉即可
# -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

以上修改好,就可以重启 ssh 了:

systemctl restart sshd.service
# 检查下自定义端口是否在运行
netstat -tulpn | grep sshd
# 最后再重启 iptables 即可
systemctl restart iptables

9.(强化SSH)安装 fail2ban,参考教程:Using Fail2ban to Secure Your Server

# 安装
yum install fail2ban

# 复制两份默认配置文件为 .local,后面修改它们即可 override 默认配置文件
cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

修改 jail.local,保护 sshd,验证失败超过3次即封禁60分钟:

vim /etc/fail2ban/jail.local

# 修改如下

# Note: if systemd backend is chosen as the default but you enable a jail
#       for which logs are present only in its own log files, specify some other
#       backend for that jail (e.g. polling) and provide empty value for
#       journalmatch. See https://github.com/fail2ban/fail2ban/issues/959#issuecomment-74901200
backend = systemd

[sshd]
enabled = true

# "bantime" is the number of seconds that a host is banned.
bantime  = 60m

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = 60m

# "maxretry" is the number of failures before a host get banned.
maxretry = 3

以上修改完毕,开启服务:

systemctl start fail2ban
systemctl enable fail2ban

10.安装实时监控软件 netdata

bash <(curl -Ss https://my-netdata.io/kickstart.sh) --disable-telemetry

还可以再配置下通过域名访问 netdata(可选非必要),看项目wiki:running behind nginx

二、搭建LNMP

配置让网站跑起来的 LNMP 环境的方法有:

安装

在终端上敲命令是一件很 NB 的事情,于是我折衷选择了第2条不归路!

# 下载一键脚本需要用到命令 wget
# 安装一键脚本大概得至少40分钟才能安装完成
# 为避免远程登陆中因网络中断或误关闭xshell窗口导致任务丢失
# 最好使用 screen
# 如果中途断开连接的话,登陆上去后运行 screen -r lnmp 即可恢复
yum install -y screen wget && screen -S lnmp

# 开始安装
# 如果需要安装 LNMPA 或 LAMP,将./install.sh 后面的参数 lnmp 替换为 lnmpa 或 lamp 即可
wget http://soft.vpser.net/lnmp/lnmp1.7.tar.gz -cO lnmp1.7.tar.gz && tar zxf lnmp1.7.tar.gz && cd lnmp1.7 && ./install.sh lnmp

安装成功之后在浏览器输入服务器IP确认下能否访问~

优化

1.确认可以访问的话,就可以删除欢迎界面的文件了:

cd /home/wwwroot/default && rm -rf *.php *.html *.gif

2.修改访问数据库的页面路径(可选操作):

# 将当前目录下的 phpmysql 文件夹重命名为一个只有你知道的名字
mv phpmyadmin examplename
# 修改之后的管理界面地址就是:http://ip/examplename/

在网页上登陆不了phpmyadmin ?

提示:配置文件权限错误,不应任何用户都能修改?

原因:phpmyadmin 目录权限过高,系统设置了 777 访问权限。

解决方法:chmod -R 755 phpmyadmin

3.安 装 memcached

memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。

# 通过一键脚本自带的扩展脚本来安装:
cd ~/lnmp1.7 && ./addons.sh install memcached
# 选择 php-memcached,输入 2,回车开始编译安装

memcached 成功安装在服务器上之后,还需要做多几步配置:

  1. 按照WordPress 如何启用 Memcached 缓存:将object-cache.php 文件复制到wp-content 目录;
  2. 修改wp-config.php ,加入这行:define('WP_CACHE', true);

WP站点只有这样才算启用了 memcached 缓存,最后参考这里的“查看效果”的方法

4.安 装 opcache

opcache通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能,存储预编译字节码的好处就是省去了每次加载和解析 PHP 脚本的开销。

# 通过一键脚本自带的扩展脚本来安装:
cd ~/lnmp1.7 && ./addons.sh install opcache

三、安装 WordPress

1.首先做好 域名解析,然后用脚本命令新建一个虚拟机 lnmp vhost add,该步骤能同时申请到 let's encrypted 证书以便后面开启 HTTPS,接着下载WP:

# 进入网站根目录
cd /home/wwwroot/www.你的网站.com
# 下载WP安装包
wget https://wordpress.org/latest.zip
# 解压到当前目录
unzip latest.zip
# 移动到网站目录下
mv wordpress/* .

2.接着修改好网站目录权限,防止主题插件等安装使用不了等情况:

chattr -i /home/wwwroot/www.你的网站.com/.user.ini
chown -R 755 /home/wwwroot/你的网站.com
chown -R www:www /home/wwwroot/你的网站.com

3.然后再设置下301重定向https,参考原文教程

# 添加到该网站/虚拟机的配置文件下
# 比如我要跳转 www.shenguanqun.com 到 shenguanqun.com
vim /usr/local/nginx/conf/vhost/shenguanqun.com.conf
#修改添加如下
server_name shenguanqun.com www.shenguanqun.com ;
if ($host = 'www.shenguanqun.com') {
return 301 https://shenguanqun.com$request_uri;
}

4.最后访问网站域名,WordPress安装引导界面就出来了~

Last modification:December 29, 2020
如果觉得我的文章对你有用,请随意赞赏