阿里云服务折腾记 🔥

本来想找一篇服务器配置较全面的教程来学习,结果搜索到的多是某一知识点的文章,遂决定边折腾边记录一篇从购买服务器、域名到搭建 ftp、nginx 等的文章。文中涉及的知识点、命令等多是从网上众多文章教程整合而来,图片是本人配置过程中的截图。

1. 云服务器购买和配置

1.1 购买云服务器

初学服务配置,先买个小配置的云服务随意折腾一下😄。

购买服务器

1.2 Root 用户登陆密码修改

最开始用 VNC 远程登陆输入 root 用户名和密码时,总是登陆失败提示 login incorrect,后来发现密码弄错了,所以重置 root 用户的密码后 VNCWorkbench 2种方式均可正常登陆。

yun04

yun05

1.3 VNC 远程连接修改登陆密码

yun02

yun03

1.4 Workbench 远程连接实例

yun07

yun06

yun08

1.5 SSH 命令行连接

ssh root@xxx.xxx.xxx.xxx
ssh newuser@xxx.xxx.xxx.xxx

1.6 添加安全组/端口号配置

打开云服务器管理控制台,进入实例详情,选择本实例安全组即可添加。 如需在服务器上搭建 SQL、Redis、MongoDB 数据库等,需配置相应的端口号。

阿里云官方文档:云服务器 ECS > 安全 > 安全组 > 添加安全组规则open in new window

ip06

ip07

已添加安全组示例:

aliyun01

1.7 SSH 连接工具推荐

Termius

yun11

yun09

goPanel

yun10

2. 域名购买和解析

详解什么是域名解析/如何解析域名open in new window

阿里云官方文档:云解析 DNS > 快速入门 > 新手引导open in new window

阿里云官方文档:云解析 DNS > 操作指南 > 解析生效测试方法open in new window

网站诊断分析open in new window

2.1 命令查询

dig www.xxx.com

dig www.xxx.com @1.1.1.1

2.2 注意事项

TTL:为缓存时间,数值越小,修改记录各地生效时间越快,默认为10分钟。

2.3 图片示例

ip01

ip02

ip03

ip04

3. 网站备案

阿里云备案网址open in new window

4. 搭建 vsftpd 服务

阿里云官方文档:云服务器 ECS > 建站教程 > 搭建应用 > 搭建FTP站点 > 手动搭建FTP站点(CentOS 8)open in new window

linux搭建ftpopen in new window

阿里云的ecs服务器创建ftp站点open in new window

4.1 安装后 vsftpd 相关文件目录说明

/usr/sbin/vsftpd # vsftpd 的主程序

/etc/rc.d/init.d/vsftpd # 启动脚本
/etc/pam.d/vsftpd # pam 认证文件
/etc/vsftpd/vsftpd.conf # 主配置文件
/etc/vsftpd.ftpusers # 禁止使用 vsftpd 的用户列表文件
/etc/vsftpd.user_list # 禁止或允许使用 vsftpd 的用户列表文件(黑名单 or 白名单)

/var/ftp # 匿名用户主目录
/var/ftp/pub # 匿名用户的下载目录

4.2 vsftpd 相关命令

# 安装 vsftpd
yum install -y vsftpd

# 进入 vsftpd 目录
cd /etc/vsftpd

# 查看文件命令
ls

# 防火墙开启21端口(可跳过)
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload

# 云服务器设置开机自启动
systemctl enable vsftpd.service

# 启动 vsftpd 服务
systemctl start vsftpd.service

# 关闭 vsftpd 服务
systemctl stop vsftpd.service

# 重启 vsftpd 服务
systemctl restart vsftpd.service

# 检查 vsftpd 状态
systemctl status vsftpd.service

# 查看 ftp 端口号
netstat -antup | grep ftp

# 卸载命令
rpm -qa |grep vsftp
rpm -e vsftpd-xxxxxxxxx

ftp01

4.3 配置本地用户访问FTP服务器

# 新建一个账号用于 ftp 登陆和上传
sudo useradd iamftp
sudo passwd iamftp

# 创建一个供FTP服务使用的文件目录
mkdir /home/iamftp/ftpdata

# 更改 /home/iamftp/ftpdata 目录的拥有者为 iamftp
chown -R iamftp:iamftp /home/iamftp/ftpdata

4.4 修改相关配置

1、修改 vsftpd.conf 配置

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/iamftp
# 全部用户被限制在主目录
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=xxx.xxx.xxx.xxx
# 设置被动模式下,建立数据传输可使用的端口范围的最小值
pasv_min_port=50000
# 设置被动模式下,建立数据传输可使用的端口范围的最大值
pasv_max_port=50100

2、创建 chroot_list 文件

# 此名单中的用户不会被锁定在主目录,可以访问其他目录,没有也要创建
vim /etc/vsftpd/chroot_list

3、重启 vsftpd 服务

systemctl restart vsftpd.service

ftp03

4.5 端口添加安全组

参照 1.6 将端口 21vsftpd.conf 文件中的端口最大最小值加入安全组规则;

ftp04

4.6 Termius 连接配置示例

ftp06

ftp07

4.7 本地 ftp 测试

Google Chrome 地址栏输入 ftp://xxx.xxx.xxx.xxx:21 回车,输入用户名 iamftp 和密码后可正常显示 /home/iamftp/ftpdata 里的文件,则表示配置正确。

ftp08

5. Nginx 部署 HTTP 静态服务

Nginx 部署线上服务器(Liunx)open in new window

CentOS 7 安装 Nginxopen in new window

本模块命令多来自以上2篇文章,感谢🙏作者大大。

5.1 安装前置软件

# 检查 gcc、openssl、pcre、zlib 等是否安装
yum list installed | grep gcc
yum list installed | grep openssl
yum list installed | grep pcre
yum list installed | grep zlib

# 一次安装命令,本次购买服务器经检查已安装故跳过此步骤
yum install gcc openssl openssl-devel pcre pcre-devdl zlib zlib-devel -y

nginx01

5.2 安装启动 nginx

安装前请先按照 1.6 步骤在服务端将 80 端口加入安全组规则。

# 安装
yum -y install nginx

# 卸载
yum remove nginx

# 设置开机启动
systemctl enable nginx

# 启动 nginx 服务
service nginx start

# 停止 nginx 服务
service nginx stop

# 重启 nginx 服务
service nginx restart

# 查看 nginx 状态
systemctl status nginx.service

# 重新加载配置,在修改过 nginx 配置文件后执行
service nginx reload

# 附:另一种启动方式
cd sbin/
./nginx

# 查看启动进程
ps -ef | grep nginx

nginx02

nginx03

5.3 测试是否安装成功

浏览器输入网址 http://xxx.xxx.xxx.xxx 或者 http://www.xxx.com 后回车,出现如下画面则表示ngnix安装成功。

nginx04

5.4 修改 nginx.conf 配置

Nginx 中文文档open in new window

# 编辑文件
vim /etc/nginx/nginx.conf

# :wq 保存修改后,重新加载配置
service nginx reload

个人配置示例(请关注带😊的几个位置)

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

# 😊 所属用户,一般为 nginx | nobody
user iamftp;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
  worker_connections 1024;
}

http {
  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

  access_log  /var/log/nginx/access.log  main;

  sendfile            on;
  tcp_nopush          on;
  tcp_nodelay         on;
  keepalive_timeout   65;
  types_hash_max_size 2048;

  # 开启文件压缩
  # gzip                on;
  # gzip_types    
  #   text/plain 
  #   text/css
  #   text/xml
  #   text/javascript
  #   application/javascript
  #   application/x-javascript
  #   application/json
  #   application/xml
  #   application/xml+rss
  #   application/xhtml+xml
  #   application/x-font-ttf
  #   application/x-font-opentype
  #   image/svg+xml
  #   image/x-icon;


  include             /etc/nginx/mime.types;
  default_type        application/octet-stream;

  # 😊 解决中文乱码
  charset utf-8;

  # Load modular configuration files from the /etc/nginx/conf.d directory.
  # See http://nginx.org/en/docs/ngx_core_module.html#include
  # for more information.
  include /etc/nginx/conf.d/*.conf;

  server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    
    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    # 😊 有域名则配置,没有则配置服务器公网IP
    server_name  111.xxx.xxx.111;

    # 😊 解决中文乱码
    charset utf-8;

    # 😊 存放静态页面的目录
    # root /usr/share/nginx/html;
    root /home/iamftp/ftpdata;

    # 😊 首页设置
    location / {
      root /home/iamftp/ftpdata;
      index index.html index.htm;
    }

    # 😊 404、40x错误页设置
    error_page 404 /404.html;
    location = /40x.html {
      root /home/iamftp/ftpdata;
    }

    # 😊 50x错误页设置
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
      root /home/iamftp/ftpdata;
    }

    # 禁止访问根目录下以 ht 结尾的文件
    location ~ /\.ht {
      deny all;
    }
  }


  # Settings for a TLS enabled server.
  #
  # server {
  #   listen       443 ssl http2 default_server;
  #   listen       [::]:443 ssl http2 default_server;
  #   server_name  _;
  #   root         /usr/share/nginx/html;
  #
  #   ssl_certificate "/etc/pki/nginx/server.crt";
  #   ssl_certificate_key "/etc/pki/nginx/private/server.key";
  #   ssl_session_cache shared:SSL:1m;
  #   ssl_session_timeout  10m;
  #   ssl_ciphers PROFILE=SYSTEM;
  #   ssl_prefer_server_ciphers on;
  #
  #   # Load configuration files for the default server block.
  #   include /etc/nginx/default.d/*.conf;
  #
  #   location / {
  #   }
  #
  #   error_page 404 /404.html;
  #     location = /40x.html {
  #   }
  #
  #   error_page 500 502 503 504 /50x.html;
  #     location = /50x.html {
  #   }
  # }
}

5.5 测试 html 静态网页部署成功

第一步:通过 ftp 方式添加文件到上面 4.3 中创建的 ftp 数据存储目录 /home/iamftp/ftpdata

nginx05

第二步:浏览器测试首页是否可正常访问

nginx07

第三步:浏览器测试404错误页是否可正常访问

nginx06

6. 安装Jenkins并部署项目

jenkins 中文文档open in new window

好玩的Jenkins(讲解很详细的一篇文章👍)open in new window

使用 Jenkins 构建 Coding 项目open in new window

使用 Jenkins 实现前端自动化发布和通知,让你的发布只需要 git pushopen in new window

jenkins 工作流程(摘自推荐阅读文章第三篇)

  1. 本地:push 代码;
  2. 服务端:jenkins 拉取代码;
  3. 服务端:复制代码到 web 访问目录;
  4. 发送通知:邮件、钉钉;

6.1 安装命令汇总

# 先确认 jenkins 依赖的 java 是否安装
yum install java
java -version

# 获取 jenkins 依赖库
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key

# 安装 jenkins
yum -y install jenkins

# 查看 jenkins 安装目录
rpm -ql jenkins

# 启动 jenkins
systemctl start jenkins

# 关闭 jenkins
systemctl stop jenkins

# 重启 jenkins
systemctl restart jenkins

6.2 初始化 jenkins(省略步骤图)

第一步:参照 1.6 将 jenkins 使用的 8080 端口加入到安全组规则中; 第二步:在浏览器端输入 http://xxx.xxx.xxx.xxx:8080 后打开页面; 第三部:执行命令 cat /var/lib/jenkins/secrets/initialAdminPassword 获取密码并输入至页面管理员密码处; 第四步:选择并安装插件,等待约二十分钟后安装成功; 第五步:创建第一个管理员账号,并记住账号和密码; 恭喜你,Jenkins 安装成功了 🌹🎉。

jenkins01

jenkins02

6.3 服务器安装 git

# 安装命令
yum install git

# 查看版本
git --version

# 查看 git 安装位置
whereis git

Jenkins 确认 Git 可执行文件路径

Jenkins -> 系统管理 -> 全局工具配置 -> Git区域 -> 确认Git可执行文件的路径正确

6.4 新建项目并构建

6.4.1 Jenkins 安装插件

Github仓库:jenkins -> 系统管理 -> 管理插件 -> 安装 Generic Webhook Trigger 插件; Coding仓库:jenkins -> 系统管理 -> 管理插件 -> 安装 Coding Webhook 插件; nvm插件安装:jenkins -> 系统管理 -> 管理插件 -> 安装 nvm wrapper 插件;

jenkins05

6.4.2 新建自由风格项目

jenkins14

jenkins15

6.4.3 配置:General

jenkins00

6.4.4 配置:源码管理

jenkins08

jenkins09

jenkins07

6.4.5 配置:构建触发器

jenkins10

6.4.6 配置:构建环境(NVM Setting)

jenkins11

6.4.7 配置:构建

jenkins12

6.4.8 配置:构建后操作

6.4.9 Coding 仓库配置 WebHook

jenkins03

jenkins04

6.4.10 测试是否生效

修改代码并上传至仓库,刷新 jenkins 主界面可看到左下方项目已经在构建。

jenkins13

第一次构建 test 项目失败,查看构建记录提示 python2g++ 命令不存在,解决方案在服务器上执行相应的安装命令后,jenkins 重新点击立即构建即可。

# 安装 python2
yum install python2

# 安装 g++
yum install gcc gcc-c++

jenkins16

6.5 jenkins 发布项目

jenkins 将打包后的 dist 目录发布,只需要在项目配置构建区域的执行 shell 里添加几行命令即可,注意 /home/iamftp/ftpdata/ 是前面配置 ftp 和 nginx 时可访问的目录,tools 是放置打包后文件的目录,这里先判断 tools 是否存在,不存在的情况下先创建目录,然后执行 cp 命令,同时输出构建成功后的访问地址。

jenkins17

添加命令并成功保存后点击立即构建,发现构建失败,查看构建记录发现,执行 cp 命令时没有目标目录的访问权限,解决方案如下:

jenkins18

# 修改 jenkins 用户
vim /etc/sysconfig/jenkins

# 将 JENKINS_USER 改成 root
JENKINS_USER="root"

# 修改 jenkins 所有者
cd /var/lib
chown -R root:root jenkins

# 查看 jenkins 目录所有者是否修改为 root
ll -a

# 重启 jenkins
service jenkins restart

成功修改 jenkins 所有者后,再次点击立即构建,等待一分钟后构建成功,打开 http://xxx.xxx.xxx.xxx/tools/index.html 就可以查看网页内容了🎉🎉。 jenkins19

6.6 jenkins 邮件通知

邮件模版

<hr/>Jenkins构建结束通知,请及时处理!(本邮件是程序自动下发,请勿回复!) <br/><hr/>

项目名称:$PROJECT_NAME <br/>
构建编号:$BUILD_NUMBER 次构建 <br/>
构建状态:$BUILD_STATUS <br/>
触发原因:${CAUSE} <br/>
Git  分支:${GIT_BRANCH} <br/>
Git  版本:${GIT_REVISION} <br/>
Git  路径:<a href="${GIT_URL}">${GIT_URL}</a> <br/>
构建地址:<a href="$BUILD_URL">$BUILD_URL</a> <br/>
构建日志:<a href="${BUILD URL}console">${BUILD_URL}console</a> <br/>
变更集:${JELLY_SCRIPT,template="html"} <br/>

配置步骤

第一步:jenkins -> 系统管理 -> 管理插件 -> 安装 Email Extension Plugin 插件;

email01

第二步:jenkins -> 系统管理 -> 系统配置 -> Jenkins LocationExtended E-mail Notification邮件通知 三个配置项;

email02

第三步:jenkins -> 项目配置 -> 构建后操作 配置;

email03

图中标有数字的邮箱说明: 1、2、4:邮件管理员和发送者,是开通了 smtp 服务的邮箱,保持一致; 3:这里是邮件接收者,可以配置一个或多个接收用户,多个邮箱地址以逗号空格隔开; 5:这里是 jenkins 自带邮箱通知的测试区域,可随意填写邮箱测试; 6:这里可默认为空,如果构建时报“503”错误,在保证其他配置无误时可尝试配置为和 1、2、4 相同的邮箱地址查看问题是否解决;

在保证邮箱相关配置正确情况下,其他配置可参考图片进行修改或使用默认字段即可;

6.7 jenkins 钉钉通知

通知模版

- Git分支:
${GIT_BRANCH}
- Git路径:
${GIT_URL}
- 测网地址:
http://xxx.xxx.xxx.xxx/tools/index.html

配置步骤

第一步:电脑端钉钉 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义(通过webhook接入自定义服务) -> 添加;

jenkins01

jenkins02

jenkins03

第二步:jenkins -> 系统管理 -> 管理插件 -> 安装 DingTalk 插件;

第三步:jenkins -> 系统管理 -> 系统配置 -> 钉钉 项配置项;

Jenkins04

第四步:jenkins -> 项目配置 -> General 配置;

jenkins05

第五步:项目 -> 立即构建 -> 钉钉收到构建通知;

jenkins06