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

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


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


1.4 Workbench 远程连接实例



1.5 SSH 命令行连接
ssh root@xxx.xxx.xxx.xxx
ssh newuser@xxx.xxx.xxx.xxx
1.6 添加安全组/端口号配置
打开云服务器管理控制台,进入实例详情,选择本实例安全组即可添加。 如需在服务器上搭建 SQL、Redis、MongoDB 数据库等,需配置相应的端口号。
阿里云官方文档:云服务器 ECS > 安全 > 安全组 > 添加安全组规则


已添加安全组示例:

1.7 SSH 连接工具推荐
Termius


goPanel

2. 域名购买和解析
阿里云官方文档:云解析 DNS > 操作指南 > 解析生效测试方法
2.1 命令查询
dig www.xxx.com
dig www.xxx.com @1.1.1.1
2.2 注意事项
TTL:为缓存时间,数值越小,修改记录各地生效时间越快,默认为10分钟。
2.3 图片示例




3. 网站备案
4. 搭建 vsftpd 服务
阿里云官方文档:云服务器 ECS > 建站教程 > 搭建应用 > 搭建FTP站点 > 手动搭建FTP站点(CentOS 8)
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

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

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

4.6 Termius 连接配置示例


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

5. Nginx 部署 HTTP 静态服务
本模块命令多来自以上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

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


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

5.4 修改 nginx.conf 配置
# 编辑文件
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;

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

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

6. 安装Jenkins并部署项目
使用 Jenkins 实现前端自动化发布和通知,让你的发布只需要 git push
jenkins 工作流程(摘自推荐阅读文章第三篇)
- 本地:push 代码;
- 服务端:jenkins 拉取代码;
- 服务端:复制代码到 web 访问目录;
- 发送通知:邮件、钉钉;
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 安装成功了 🌹🎉。


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 插件;

6.4.2 新建自由风格项目


6.4.3 配置:General

6.4.4 配置:源码管理



6.4.5 配置:构建触发器

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

6.4.7 配置:构建

6.4.8 配置:构建后操作
6.4.9 Coding 仓库配置 WebHook


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

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

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

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

# 修改 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 就可以查看网页内容了🎉🎉。 
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插件;

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

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

图中标有数字的邮箱说明:
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接入自定义服务) -> 添加;



第二步:
jenkins-> 系统管理 -> 管理插件 -> 安装DingTalk插件;
第三步:
jenkins-> 系统管理 -> 系统配置 ->钉钉项配置项;

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

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