Write the Code. Change the World.

分类目录
3月 10

服务器快到期了,所以在阿里云又从新买了一台。这两天一直在忙新服务器环境的搭建,和数据迁移的处理。

购买的服务器

部署服务器环境

  1. 在阿里云控制台初始化,设置好 root 密码后。用终端连接服务器。先进行安全更新,并重启。连带 yum 也更新了。
dnf upgrade-minimal --security

dnf update

//  记得这样重启,要不登录系统后,还是会提醒你进行安全更新
reboot
  1. 在服务端设置连接心跳。防止终端连接服务器后,一段时间不操作,会断开连接。(也可以在客户端电脑上设置)
vim /etc/ssh/sshd_config

// 末尾追加(数字自己定义合适的)
ClientAliveInterval 60
ClientAliveCountMax 5

// 重启 ssh
service sshd restart
  1. 如果登录进去,显示的主机名是一堆字母数字组成的杂乱的名字。你可以通过阿里云控制台进行设置主机名。也可以在服务器,通过命令行来完成。这么做,一方面是好看,二方面如果服务器多,好知道是哪台服务器。

  2. 禁用 root 用户远程登录服务器。使用密匙+密码的方式进行登录。这样可以增加服务器的安全。

  3. 做好这些,记得进行做镜像。方便后边出错了,不好解决的时候,进行回滚处理。

  4. 安装开发环境。

安装开发环境

  1. 安装 git(yum 安装即可。如果版本不够,可以源码编译安装。比如新的命令 git init -b main。 这个命令是新版本才支持的)。
  2. 安装 composer。 直接 wget 下载,然后移动到 /usr/bin/ 下,并设置权限。或建立软链到这里,设置权限也可以。
  3. 安装 ftp 工具。 需要设置。用来方便上传文件到服务器或从服务器下载文件。为了安全性,我仅设置 /var/ftp/xxx 目录,只有该目录的权限。
  4. 源码编译安装最新版本的 nginx。安装前需要装一堆的依赖,有的 yum 安装,有的也需要源码安装。编译报错需要啥就装啥。
  5. 源码编译最新版本的 php。当前是 php8.2.3。安装前需要装一堆的依赖,有的 yum 安装,有的也需要源码安装。编译报错需要啥就装啥。
  6. 源码编译安装最新版本的 mysql。当前是 8.0.32。
  7. 源码安装 redis。 当前最新版本是 redis7 了。
  8. 安装 node.js,安装 pnpm。

暂时先装了这么多。为了性能以及可靠性,数据库也可以单独阿里云购买。只是这个要单独花钱啊。

wordpress 博客系统迁移

wordpress 用来做博客和cms系统都还不错。这些年,虽然也想着自己用 laravel 写一个博客系统起来。后来还是搁浅了。 wordpress 可以很方便使用主题和插件。一个好的主题的好,用过就知道。

不得不换服务器了。在做迁移之前在想,我现在的服务器环境安装的开发环境都是最新的,曾经的 wordpress 还能迁移过来吗。之前一种思路是只要把数据弄过来就行。其实,还真行。后来尝试了下,在旧的服务器上,将 wordpress 直接更新到最新版本,也就是当前的 6.1 版本。再做迁移也是可以的。

操作。

方式一(对于不是太旧的 wordpress 系统)

  1. 在旧的服务器上,通过控制台将 wordpress 版本直接升级到最新版本。
  2. 将升级后的文件(就是整个站点文件)压缩。通过各种方式(我这里使用 ftp)将文件移到新的服务器,解压。
  3. 将旧的服务器上的数据库数据复制到新的服务器的数据库里。这里使用的 navicat。
  4. 在新的服务器上修改配置 nginx。
  5. 在域名运营商后台那修改域名解析。解析到新的服务器地址。
  6. 如果数据库相关配置有更改,请在项目跟目录的 wp-config.php 中进行修改配置。
  7. 然后访问域名,进行测试。如果有错误,可以修改 wp-config.php 的 debug 模式为 true。进行跟踪修改。一般修修错误就行,警告啥的可以忽略。

方式二(对于太旧的 wordpress 系统)

我有两套博客。最久的那套是 2013 年左右安装的。太旧没更新了。以为更新不了,没想到更新几次竟然能更新成功。于是按照上边的方法进行操作,结果有好几个地方修改不好。于是就有这个方式。

https://wordpress.org/download/

  1. 在新服务器对应的位置,去wordpress 官网下载最新的 wordpress。当前是 6.1, 对 php 版本要求最低是 7.4。解压。
  2. 在新的服务器上修改配置 nginx。
  3. 在域名运营商后台那修改域名解析。解析到新的服务器地址。
  4. 将旧的服务器上的数据库数据复制到新的服务器的数据库里。这里使用的 navicat。
  5. 项目跟目录准备 wp-config.php 文件。 就是从 wp-config-sample.php 复制过去就可以。
  6. 这里在浏览器中打开 'wp-admin/install.php',填入数据库信息,下一步就好了。

后来想想。wordpress 的更新应该不是所有的代码都更新。要不也不会出现之前的错误还需要修复。既然方式二能实现版本更新,那方式一似乎不是很有用。

不过很重要一点。要备份好文件和数据库。这样方便多次试错。还有如果域名有更换了,媒体文件或某些链接会失效。这个方面的确做不好。不过好在是很容易升级更新。

debug、多语言、主题、ftp相关

如果遇到错误,可以在 wp-config.php 中打开 debug 模式,进行查看跟踪。

如果后台只有英文,可以在 wp-config.php 中增加 define('WPLANG', 'zh_CN') 配置,然后在后台多语言那设置下就好。

对于主题,可以去网上找,觉得好看的好用的都可以,不过代码都是别人的,也要注意安全性相关的东西。还有代码是别人的,也要注意别人的使用说明。下载好主题后,将主题文件包放在 wp-content/themes 下,然后在后台中设置激活,再进行细致化设置就好。

还有,如果对主题部分不满意,你也可以修改源码。如果仅仅是样式方面的问题,可以通过增加 css,来覆盖样式来解决。比如隐藏一些不需要 div,修改某些div 的布局等等。

对于插件更新,默认是要你配置 ftp。这个不是太方便也不太安全。单独给它配个有点麻烦,把权限大的给它又觉得不放心。干脆就不使用 ftp 的方式来安装更新就好了。在配置文件 wp-config.php 中增加 define('FS_METHOD','direct'); 配置。然后将项目的用户和组都是设置成 php 对应的用户组。比如我的php 和 nginx 都公用 nginx:nginx 用户组。 使用 chown nginx:nginx xxx 就好了。

laravel 项目迁移

博客是一方面,我的主要服务端逻辑,都是通过 laravel 开发的。 laravel 的依赖包比较多,对 php 的版本都有很严格的控制。我之前的 php 版本是 7.4 不是太古老,但也是不好使。现在都是 php8.2.3。是大版本的更新。不过好在,一般的功能语法都会有向下兼容。开始吧。

# 将代码拉到新的服务器对应位置

git clone xxx

composer install

这个时候,如果遇到 Your lock file does not contain a compatible set of packages. Please run composer update. 可以加上 --ignore-platform-reqs 参数来忽略版本的匹配。但只是尝试,如果即使安装成功了,并不一定能使用成功。

composer install --ignore-platform-reqs

这次是成功安装了。

但发现报个错误。

Carbon\Carbon::setLastErrors(): Argument #1 ($lastErrors) must be of type array

果然某些依赖还是有改变。这个单独更新 carbon 包就可以。

composer update nesbot/carbon

composer install --ignore-platform-reqs

到此,框架算是安装好了。

cp .env .example .env

php artisan key:generate

php artisan migrate --seed

laravel 常规安装流程操作是上边边这样的。而我们这里都是完整的项目,里边配置很多,通过上边边这种方式要修改的太多了。我是直接创建一个 .env 文件,然后将旧的文件内容复制过来就好。

vim .env

# 复制配置过来就行

先进行不需要历史数据的迁移

.env 中数据库的配置正确后

php artisan migrate --seed

对相关报错进行处理。

composer update facade/ignition --ignore-platform-reqs

文件权限操作

chmod 777 storage -R
chmod bootstrap/cach -R

安装前端脚手架

yarn
yarn dev

发现有版本等相关信息报错。一种方式是直接删除 yarn.lock 文件,删除 node_modules 文件夹。再进行安装。

安装后台环境。

cd resources/admin

yarn 

error @achrinza/node-ipc@9.2.2: The engine "node" is incompatible with this module. Expected version "8 || 10 || 12 || 14 || 16 || 17". Got "18.14.2"

我们直接设置 yarn config set ignore-engines true 忽略。再继续。

yarn 

yarn run build:prod

发现报错 Building for production...Error: error:0308010C:digital envelope routines::unsupported。出现这个错误是因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响。

再继续

export NODE_OPTIONS=--openssl-legacy-provider

yarn run build:prod

然后又是 *These dependencies were not found: core-js/modules/es.array.push.js** 错误。

yarn add core-js --dev

yarn run build:prod

到此,总算是好了。凡是遇到问题解决问题就好。

配置 nginx,修改域名映射。检查测试。

其实,还有一种方式

就是将整个项目打包,复制过去,解压。然后配置下。

3月 07

服务器安装好 mysql 后。需要先初始化。初始化后,需要创建用户以及分配权限。默认 root 用户是禁用远程登录的。这个时候创建一个远程登录用户就比较重要。对远程登录用户看需要,可以在多个纬度来进行控制。比如限定 ip,就是在指定的 ip 下,才可以访问。然后对权限进行控制,对表进行控制等等。

历史记录: https://blog.vini123.com/382

开始

先创建一个远程可登录用户看看

# 内网登录 mysql
mysql -u root -p

# 创建一个远程可登录用户
create user shenqi@'%' identified by '33441314';

创建用户后,该用户只能连接到数据库服务器,但并没有操作该数据库服务器的权限。

mysql8 以后,必须先创建用户,才可以授权。这里创建用户最好限定ip,这样远程连接必须在该ip下进行。提高数据库的安全性。大多时候,使用 localhost 连接更好。

相关文章

https://www.cnblogs.com/cqdxwjd/p/9925051.html

3月 06

阿里云轻量应用服务器和s6/c6/g6/r6/c7/g7/r7实例云服务器如何选择

https://developer.aliyun.com/article/1132514

带宽相关

https://zhuanlan.zhihu.com/p/356488732

阿里云活动中的通用型G5、G6、G7实例云服务器有什么区别?如何选择

阿里云服务器活动中的通用型实例有G5、G6、G7这三个实例规格可选择,虽然通用型实例价格比共享型实例价格要高,但由于通用型实例是独享型实例,而且活动价格比计算型和内存型实例的价格又要便宜一点,而且通用型实例的云服务器通常cpu与内存的比例都是1:4,内存资源非常充足,因此很多企业级用户都通过活动购买云服务器都会选择通用型实例,那么阿里云服务器活动中的通用型G5、G6、G7实例如何选择呢?

通过活动价格、网络带宽、网络收发包PPS等指标数据这几个方面来详细说下阿里云服务器活动中的通用型G5、G6、G7实例规格价格及性能差别,以供大家参考选择。

从价格高低上来说,相同配置的云服务器,通用型G7实例是最便宜的,其次是通用型G5实例,G5与G7实例的公网带宽都是1M,其实这个带宽通常都是不够用的,因此需要我们在购买之后,通过升降配功能来升级到想要的带宽值,需要支付差价。

虽然通用型G5、G6、G7实例均是企业级独享型云服务器,但是通用型G5是第五代云服务器;通用型G6是第六代云服务器;ECS通用型G7是第七代ECS实例,使用的是第三代至强®可扩展处理器(代号"IceLake") ,网络、存储IO性能都有大范围提升,其实收费标准最高的是通用型G7,只是因为最近阿里云将第七代云服务器ECS价格做了下调,因此,现在选择通用型G7实例是最划算的。

详细对比下三款云服务器的CPU处理器。

  1. 通用型G5:2.5 GHz主频的Intel ® Xeon ® Platinum 8163(Skylake)或者8269CY(Cascade Lake),计算性能稳定。
  2. 通用型G6:2.5 GHz主频的Intel ® Xeon ® Platinum 8269CY(Cascade Lake),睿频3.2 GHz,计算性能稳定。
  3. 通用型G7:采用第三代Intel® Xeon®可扩展处理器(Ice Lake),基频2.7 GHz,全核睿频3.5 GHz,计算性能稳定。

通用型G5、G6、G7实例各自的适用场景

虽然这三种实例规格都能用于高网络包收发场景、中小型数据库系统、缓存、搜索集群和网站和应用服务器等场景,但是具体的适用场景还是有所区别的,例如区块链场景和安全可信计算场景就应该选择通用型G7实例更好,下面是阿里云官方公布的通用型G5、G6、G7实例各自的适用场景,如下表所示:

实例规格 适用场景
通用型G5 高网络包收发场景,例如视频弹幕、电信业务转发等。各种类型和规模的企业级应用。中小型数据库系统、缓存、搜索集群。数据分析和计算。计算集群、依赖内存的数据处理
通用型G6 高网络包收发场景,例如视频弹幕、电信业务转发等。各种类型和规模的企业级应用。网站和应用服务器。游戏服务器。中小型数据库系统、缓存、搜索集群。数据分析和计算。计算集群、依赖内存的数据处理
通用型G7 高网络包收发场景,例如视频弹幕、电信业务转发等。游戏服务器。中小型数据库系统、缓存、搜索集群。各种类型和规模的企业级应用。网站和应用服务器。数据分析和计算。安全可信计算场景。区块链场景

文章来源

https://www.jianshu.com/p/86109b24f98e

2月 01

先下载 mysql8,这里我们选择社区免费版。

https://dev.mysql.com/downloads/

版本选择
https://www.jianshu.com/p/d038a139ba9f

cmake 完整选项列表参考: https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html

其实,下载按照下边这个链接里边的地址就可以。更换一下版本号,都是源码包下载安装的。这个是带 boost 的。
https://blog.vini123.com/380

cmake 选项表:

cmake ../ -DCMAKE_INSTALL_PREFIX=/alidata/service/mysql/mysql -DMYSQL_DATADIR=/alidata/service/mysql/data -DWITH_BOOST=boost -DSYSCONFDIR=/etc -DFORCE_INSOURCE_BUILD=1 -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DENABLED_LOCAL_INFILE=ON -DWITH_INNODB_MEMCACHED=ON -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1

在 mysql8 源码包下,另建 build 文件夹,然后执行 camke 操作。

可能会有的错误信息。根据输出信息,安装非常不建议在源码包下面直接编译。如果在其他目录下,对于同一份源码,你可以执行和生成多份cmake builds。并且可以简易地cleanup,即删除build目录即可。这个错误在MySQL5.7和MariaDB的源码编译过程中并不会碰到,应该是新的8.0版本的改进之一了。其用意感觉应该是为了方便系统管理员在一份源码下灵活地安装多份配置各异的MySQL实例。但在本地自己安装用的时候,并不需要考虑这么多,cmake时按照提示添加“ -DFORCE_INSOURCE_BUILD=1 ”选项即可。

后边继续:

1月 30

参考旧的文章,稍作修改

安装个 python

cd /usr/local/src/

wget https://www.python.org/ftp/python/3.9.15/Python-3.9.15.tgz

当前 php 最新版本 8.2.1

配置这里

./configure  --prefix=/alidata/service/php --with-config-file-path=/alidata/service/php/etc --with-config-file-scan-dir=/alidata/service/php/etc/php.d --with-fpm-user=nginx --with-fpm-group=nginx --with-curl --with-gettext --with-kerberos --with-libdir=lib64 --with-mysqli --with-openssl --with-external-pcre --with-pdo-mysql --with-pdo-sqlite --with-pear  --with-xsl --with-zlib --with-bz2 --with-mhash --with-ldap-sasl --enable-bcmath --with-libxml --enable-mbregex --enable-mbstring --enable-exif --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-sysvshm --enable-xml --with-zip --enable-fpm --enable-gd --enable-pdo --enable-intl --enable-calendar --enable-static --enable-mysqlnd --with-jpeg=/usr/local/lib/jpeg --with-freetype=/usr/local/lib/freetype PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig/

https://blog.vini123.com/681

https://blog.vini123.com/378

https://blog.vini123.com/303

处理错误

configure: error: Package requirements (oniguruma) were not met:

那就安装: https://blog.vini123.com/379

error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met:

php8 对 libzip有要求。编译安装 libzip 就可以。博客内已有说明。

致命错误:已杀死 signal terminated program cc1

阿里云安装程序时,出现这个是服务器内存太小。通过增加服务器的swap大小来处理。

解决方法

先重新配置 php,在编译时增加一项 --disable-fileinfo 。记住,这个很重要。

#获取要增加的2G的SWAP文件块
dd if=/dev/zero of=/swapfile bs=1k count=2048000
#创建SWAP文件
mkswap /swapfile 
#激活SWAP文件
swapon /swapfile   
#查看SWAP信息是否正确
swapon -s  
#添加到fstab文件中让系统引导时自动启动
echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab

删除交换区

swapfile文件的路径在/var/下,编译完后, 如果不想要交换分区了, 可以删除。

swapoff /swapfile
rm -rf /swapfile

参考

https://www.cnblogs.com/huojing/articles/15824136.html
https://www.jianshu.com/p/a4ad05a51456

1月 29

先更新yum并安装依赖

尽可能的安装最新版本。如果 yum 安装的不是最新版本,可以先卸载掉,再下载源码编译安装。yum 安装新包之前,可以先查看下该包是否是最新版本。编译安装后,可以 ls -l 建立软链接,下次有新包,可以再覆盖安装。

# 更新 yum 包
yum update

# 查看某个安装,比如 gcc。 它会显示是否存在该安装,该安装的版本,是否已经安装等信息。
yum list gcc

需要安装:

  1. gcc gcc-c++。它可以编译 C,C++,Ada,Object C和Java等语言。
  2. pcre pcre-devel。PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。
  3. nginx 使用 zlib 对 http 包的内容进行 gzip。可是,不是用 Brotli 么。两个都装,装了也没事。gzip 编译安装来个。如果不编译,使用 yum 安装,版本达不到要求。
  4. bbzip2 是一个基于Burrows-Wheeler 变换的无损压缩软件,压缩效果比传统的LZ77/LZ78压缩算法来得好。
yum install gcc gcc-c++

yum install pcre pcre-devel

yum install zlib zlib-devel

yum install bzip2

手动安装 openssl3

https://www.openssl.org/source/

当前最新版本是 openssl-3.0.7.tar

cd /usr/local/src/openssl

wget https://www.openssl.org/source/openssl-3.0.7.tar.gz

tar -xzvf openssl-3.0.7.tar.gz

mkdir /usr/local/openssl

cd openssl-3.0.7

# 指定安装路径为 /usr/local/openssl
./config --prefix=/usr/local/openssl

如果出现如下这样的报错信息,需要安装 perl-CPAN

This is perl 5, version 26, subversion 3 (v5.26.3) built for x86_64-linux-thread-multi
(with 57 registered patches, see perl -V for more detail)

Copyright 1987-2018, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

安装 perl-CPAN

# 安装perl-CPAN
 yum install -y perl-CPAN
 # 进入CPAN的shell模式,不懂的,遇到确认就直接回车(3+1次),一切默认
 # 过程可能有点慢,需要下载相关依赖,耐心等待执行结果
 perl -MCPAN -e shell
 # 出现 cpan[1]> 提示,输入下边命令继续,时间会有点久
 install IPC/Cmd.pm
 # 出现 cpan[2]>提示,输入 exit 退出
 exit

再重新执行

./config --prefix=/usr/local/openssl

然后,你会发现出现 OpenSSL has been successfully configured 的提示。如果中间环节有问题,请查找解决。

编译安装(这个环节有点久)

make && make install

# 安装完成后,进入 bin 目录
cd /usr/local/openssl/bin
# 查看版本号(发现会报错)
./openssl version

报错如下:

./openssl: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory

libssl.so.3文件在/usr/local/openssl/lib64目录下面,需要配置到共享库中:

vim /etc/ld.so.conf
# 换行尾部添加
/usr/local/openssl/lib64

# 保存退出,执行下边命令使生效
ldconfig

建立软链接

ln -s /usr/local/openssl/bin/openssl /usr/bin/openssls

# 查看版本号
openssl3 version 

安装 cmake

https://blog.vini123.com/289

当前最新版本 https://github.com/Kitware/CMake/releases/download/v3.25.2/cmake-3.25.2-linux-x86_64.tar.gz

编译安装 zlib (可以先 yum,如果版本不合适,再回来编译按装)

https://blog.vini123.com/299

编译安装zlib2 (可以先 yum,如果版本不合适,再回来编译按装)

https://blog.vini123.com/300

编译安装 libzip (可以先 yum,如果版本不合适,再回来编译按装)

这里还是编译安装吧。php8 对 libzip 要求有点特殊。

https://blog.vini123.com/290

安装 ngx_brotli

https://blog.vini123.com/302

cd /tmp
git clone https://github.com/google/ngx_brotli.git
cd /tmp/ngx_brotli/deps
rm -rf brotli
git clone https://github.com/google/brotli.git
cd /tmp/ngx_brotli
git submodule update --init

方法一: 重新编译
通过nginx -V查看原有的编译参数,在编译的时候通过--add-module=把模块编译进去。
比如:

./configure [nginx -V 原有的configure arguments] --add-module=/tmp/ngx_brotli
make && make install

方法二:动态编译

./configure --with-compat --add-dynamic-module=/tmp/ngx_brotli
make modules

https://blog.csdn.net/zyy247796143/article/details/125539223
https://juejin.cn/post/7060352308718075935

安装 nginx more_clear_headers 模块

https://github.com/openresty/headers-more-nginx-module/tags

https://github.com/openresty/headers-more-nginx-module

https://blog.vini123.com/385

安装 nginx

最终的配置,上边做的那么多就是为了这个。

./configure --user=nginx --group=nginx --prefix=/alidata/service/nginx --pid-path=/alidata/service/nginx/run/nginx.pid --with-http_stub_status_module --with-threads --with-file-aio --with-pcre-jit --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_realip_module --with-http_addition_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-stream_realip_module --with-http_slice_module --with-pcre --with-openssl=/usr/local/src/default/openssl-3.0.8 --with-openssl-opt=enable-tls1_3 --add-module=/usr/local/src/nginx/ngx_brotli --add-module=/usr/local/src/nginx/headers-more-nginx-module-0.34

https://blog.vini123.com/298

1月 29

设置主机名一是为了好看,二是方便多台服务器之间好区分。禁用 ssh 使用 root 用户登录,而是使用秘钥登录是增加安全性。

设置主机名

禁用root用户登录,使用公钥和密码一起登录

ssh 连接长时间不操作自动断开的处理

服务端处理

vim /etc/ssh/sshd_config

# 添加 (意思是向客户端每60秒发一次保持连接的信号)
ClientAliveInterval  60

# 添加 (意思是如果客户端60次未响应就断开连接,依据你期望的时间来设定)
ClientAliveCountMax  60

# 重启
systemctl restart sshd

注意

每一个步骤最好去验证一下。验证通过后,对一些阶段性的设置安装进行镜像备份。走一点备份一点。也记得删除之前的镜像。

1月 29

想做一个完整的项目。服务器是不可缺少的一部分。服务器选什么环境呢,用的比较多的是 centos 和 ubuntu。阿里云基于龙蜥操作系统(Anolis OS)打造的阿里云第三代发行版操作系统 Alibaba Cloud Linux 3(以下简称 Alinux 3) 的 CIS 安全基线(Alinux 3 CIS benchmark v1.0.0 版本)正式完成了 CIS 认证。 Alinux 3 全面兼容 RHEL / CentOS 8 生态。随着 CentOS 8 的停服,使用 Alibaba Cloud Linux 3 来替代 CentOS 也成为部分企业的选择。这里就用 Alibaba Cloud Linux 3 吧。

选配购买好服务器后。在阿里云控制台设置好密码和常用安全组,就可以通过 ssh 进入操作系统了。

常规操作

https://help.aliyun.com/document_detail/416274.html

# 安全更新提醒
dnf upgrade-minimal --security

# 查看服务器环境
lsb_release -a

# 结果如下
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: AlibabaCloud
Description:    Alibaba Cloud Linux release 3 (Soaring Falcon)
Release:    3
Codename:   SoaringFalcon

# 更新 yum 源
yum update

Alibaba Cloud Linux release 3 中 yum 指向了 dnf-3

dnf 和 yun 的区别

相关文章

https://zhuanlan.zhihu.com/p/438572784

https://baijiahao.baidu.com/s?id=1725178032789531647&wfr=spider&for=pc

11月 06

不想用 sftp,就自己装个 ftp。

阿里云这片文章就够了

vsftpd(very secure FTP daemon)是Linux下的一款小巧轻快、安全易用的FTP服务器软件。本教程介绍如何在Linux实例上安装并配置vsftpd。

https://help.aliyun.com/document_detail/182263.html

背景信息

FTP(File Transfer Protocol)是一种文件传输协议,基于客户端/服务器架构,支持以下两种工作模式:

  • 主动模式:客户端向FTP服务器发送端口信息,由服务器主动连接该端口。
  • 被动模式:FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接。

FTP支持以下三种认证模式:

  • 匿名用户模式:任何人无需密码验证就可以直接登录到FTP服务器。这种模式最不安全,一般只用来保存不重要的公开文件,不推荐在生产环境中使用。
  • 本地用户模式:通过Linux系统本地账号进行验证的模式,相较于匿名用户模式更安全。
  • 虚拟用户模式:FTP服务器的专有用户。虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问Linux系统的其它资源,进一步增强了FTP服务器的安全性。

    这里主要介绍被动模式下,使用本地用户访问FTP服务器的配置方法。

操作一波

1.1 安装

yum install  vsftpd

2.1 开启服务

systemctl start vsftpd

3.1 设置开机启动

  1. 先查看是否开机启动:
systemctl list-unit-files | grep vsftpd
  1. 我的系统显示这样:
systemctl list-unit-files | grep vsftpd
vsftpd.service                              disabled
vsftpd@.service                            indirect
vsftpd.target                               disabled

这里是未开通。

  1. 开启自启。
chkconfig vsftpd on
  1. 查看 ftp 服务监听的端口
netstat -antup | grep ftp

4.1 配置 vsftpd

为保证数据安全,本文主要介绍被动模式下,使用本地用户访问FTP服务器的配置方法。

# 创建用户 ftplin
adduser ftplin

# 给 ftplin 设置密码
passwd ftplin

# 创建一个供 ftp 使用的目录
mkdir /var/ftp/lin

# 创建一个测试文件
vim /var/ftp/lin/test.txt
# 填入 hello 保存退出

# 给 /var/ftp/lin 设置所有者
chown -R ftplin:ftplin /var/ftp/lin

再去修改 vsftpd.conf 配置文件:

vim /etc/vsftpd/vsftpd.conf

4.1 修改配置文件

vim /etc/vsftpd/vsftpd.conf

按照以下要求修改

注意 修改和添加配置文件内的信息时,请注意格式问题。例如,添加多余的空格会造成无法重启服务的结果。

#除下面提及的参数,其他参数保持默认值即可。

#修改下列参数的值:
#禁止匿名登录FTP服务器。
anonymous_enable=NO
#允许本地用户登录FTP服务器。
local_enable=YES
#监听IPv4 sockets。
listen=YES

#在行首添加#注释掉以下参数:
#关闭监听IPv6 sockets。
#listen_ipv6=YES

#在配置文件的末尾添加下列参数:
#设置本地用户登录后所在目录。
local_root=/var/ftp/test
#全部用户被限制在主目录。
chroot_local_user=YES
#启用例外用户名单。
chroot_list_enable=YES
#指定例外用户列表文件,列表中用户不被锁定在主目录。
chroot_list_file=/etc/vsftpd/chroot_list
#开启被动模式。
pasv_enable=YES
allow_writeable_chroot=YES
#本教程中为Linux实例的公网IP。
pasv_address=FTP服务器公网IP地址
#设置被动模式下,建立数据传输可使用的端口范围的最小值。
#建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
pasv_min_port=port number
#设置被动模式下,建立数据传输可使用的端口范围的最大值。
pasv_max_port=port number

创建chroot_list文件,并在文件中写入例外用户名单。

# 输入例外用户名单。此名单中的用户不会被锁定在主目录,可以访问其他目录。及时没有例外用户,该文件也必须创建,内容为空。
# 个人建议该文件为空最好,不必去访问其他目录,世界一片安静多好呀。
vim /etc/vsftpd/chroot_list

重启服务

systemctl restart vsftpd.service

到此为止, ftp 的配置已经完了。但阿里云还得配置安全组。21 端口入方向必须打开以及上边配置的访问的最小到最大端口也要配置。

设置安全组

规则方向 授权策略 协议类型 端口范围 授权对象
入方向 允许 TCP 21/21 所有要访问FTP服务器的客户端公网IP地址,多个地址之间用逗号隔开。允许所有客户端访问时,授权对象为0.0.0.0/0。
入方向 允许 TCP pasv_min_port/pasv_max_port。例如:50000/50010 所有要访问FTP服务器的客户端公网IP地址,多个地址之间用逗号隔开。允许所有客户端访问时,授权对象为0.0.0.0/0。

可以测试了

使用 ftp 工具。比如 win 的 ftpx, mac 的 forklift 。输入公网 ip 地址,选择 ftp 连接方式(端口号不用管),填入用户名和密码。点击连接。是不是马上就好了,并进入到指定的目录了哈。