部署运维
将项目运行部署在阿里云服务器上面运行
Cfeng之前分享打包部署的时候,只是介绍了几种部署方式,比如jar、war、yum、docker等,现代化打包方式当然还是docker,docker部署需要编写dockerFile,进行镜像的构建;
接下来为了内容的完整性,补充云服务器的运维部署
Cfeng使用的是阿里云服务器,所以这里就使用阿里云进行介绍: 首先就是购买服务器,这个看个人选择不同的价位的服务器, 购买之后, 一般就会阿里就会发短信提示购买成功,并且会给出公网的IP,之后we可以进入修改信息:
云服务器管理控制台 (aliyun.com) : 次要的可以修改服务器实例ECS的实例的名称或者密码, 可以选择修改一下host名称, Cfeng还是选择的Centos系统,所以host名称会显示在控制台上面
其余的部署情况和之前是相同的,但是为了能够成功的访问,需要配置安全组规则; 在控制台中选择手动新增安全组规则,选择新增一个所有的, 或者固定port的规则
配置完成之后,就可以使用Xshell进行远程连接, 默认的端口就是22,连接的IP就是公网IP, 输入登录名称和密码即可建立连接远程操作
Connecting to 8.130.34.133:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last failed login: Thu Sep 8 14:30:10 CST 2022 from 3.82.192.156 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Thu Sep 8 13:49:09 2022 from 61.185.207.95
Welcome to Alibaba Cloud Elastic Compute Service !
[root@cfengAli ~]#
之后就进入了云服务器的LInux系统, 按照之前的步骤进行打包部署即可
参照Cfeng之前的文章 配置mysql、java、 redis、docker的环境
因为之前linux部分和之后的博客均给出了配置的过程,下面就直接列出简单的命令,装配redis、java、mysql、docker等环境
redis环境
mkdir cfeng/software -p
xftp 上传redis安装包
tar -zxvf redis-6.2.6.tar.gz -C /usr/local/
yum install wget
/etc/yum.repos.d目录下 cp CentOS-Base.repo CentOs-Base.repo.backup
wget http://mirrors.aliyun.com/repo/Centos-7.repo
mv Centos-7.repo CentOS-Base.repo
yum clean all
yum makecache
yum -y install gcc
cd /usr/local/redis-6.2.6
make install
touch /usr/lib/systemd/system/redis.service
vim 中 ctrl + ins
[Unit]
Description=The redis-server Process Manager
After=syslog.target network.target[Service]
Type=simple
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/local/redis-6.2.6/src/redis-server /usr/local/redis-6.2.6/redis.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID[Install]
WantedBy=multi-user.target
systemctl enable redis
vim /usr/local/redis-6.2.6/redis.conf
修改bind 为 bind 0.0.0.0 指定的ip为统一网段或者localhost监听ip, 配置内网其他网段或者公网ip重启都会失败 【直接使用firewalld进行处理】
daemonize 改为yes
protected-mode 改为 yes
requirepass 设置为强密码
logfile 为 /var/log/redis/redis-server.log
##### 防火墙设置firewalld firewall-cmd
systemctl status/stop/start/enable XX
firewall-cmd 【选项】
-h , --help 帮助信息
-v , --version 显示版本信息 【不组合】
-q, --quiet 不打印状态
--state 显示firewalld状态
--reload 不中断服务重新加载
--conmplete-reload 终端服务重新加载
--runtime-to-permanent 防火墙规则永久保存
--check-config 检查配置正确性
rich rule是对于开放端口更加详细的设置,一般直接无限制开放端口使用add-port, 设置情况下使用rich rule
firewall-cmd --get-active-zones 查看区域 【默认接口都在public区域】
firewall-cmd --add-port=6379/tcp --permanent 开放端口永久
firewall-cmd --zone=public --remove-port=6379/tcp --permanent
firewall-cmd --zone=public --query-port=6379/tcp
firewall-cmd --zone=public --list-ports 查看所有的add-ports
firewall-cmd --zone=public --list-all 查看所有的规则(port、rich rule等)
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="61.185.207.95" port protocol="tcp" port="22" accept"
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.142.166" port protocol="tcp" port="11300" accept"
systemctl restart firewalld rich rule生效
- firewall-cmd --state 查看状态
- firewall-cmd --add-port=6379/tcp --permanent 【bind绑定只是本机访问】
- firewall-cmd --query-port=6379/tcp
- firewall-cmd --reload 之后查询yes
进入/etc/selinux/config 查看selinux的状态,一般都是disabled
Docker环境
cat < /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.ip_forward = 1
EOF
modprobe br_netfilter
sysctl -p /etc/sysctl.d/docker.conf
curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
curl -o /etc/yum.repos.d/CentOS-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum list docker-ce --showduplicates | sort -r
yum install docker-ce-20.10.6 -y (卸载remove)
mkdir -p /etc/docker
touch /etc/docker/daemon.json (vim)
{
“registry-mirrors”: [“https://registry.docker-cn.com”,“http://hub-mirror.c.163.com”,“https://docker.mirrors.ustc.edu.cn”,“https://pee6w651.mirror.aliyuncs.com”],
“live-restore”: true
}
Docker中 MinIO
公网IP的拉取可能会报错:Error response from daemon: Head https://registry-1.docker.io/v2/minio/minio/manifests/latest: TLS handshake timeout
解析ip不可用,可以使用dig工具
yum install bind-utils
dig @114.114.114.114 registry-1.docker.io
vi /etc/hosts 找到上面的一组IP
54.83.42.45 registry-1.docker.io
同时修改一下镜像加速源,可以同时配置多个(上面)
systemctl restart docker
docker images
mkdir /data
docker run -p 9000:9000 -p 9001:9001 -v /data/minio/data:/data -e “MINIO_ROOT_USER=cfeng” -e “MINIO_ROOT_PASSWORD=fjVEALXufI23H2aOrZTC” 7f4aefb1a8d6 server /data --console-address “:9001”
docker ps -a 【docker start XXX】 开放给本机端口9001【安全组】,本机可可视化操作
JAVA 环境
java -version 【查看】
cd /usr/local
mkdir java
cd java
xftp 传输java安装包 到java文件夹
tar -zxvf jdk-17.0.2_linux-x64_bin.tar.gz
rm -f jdk-17.0.2_linux-x64_bin.tar.gz
vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk-17.0.2
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:/usr/local/mysql/mysql8/bin
source /etc/profile
java -version
MySQL
配置环境变量 vim /etc/profile source /etc/profile
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:/usr/local/mysql/mysql8/bin
直接以冒号结尾,添加新的 linux中使用$XXX引用 环境变量, windows中也可以echo输出
【cd /usr/local/mysql/mysql8/】 mkdir data
groupadd mysql
useradd -g mysql cfeng
chown -R cfeng /usr/local/mysql/mysql8
chgrp mysql /usr/local/mysql/mysql8
vim /usr/local/etc/myMysql.conf
[mysql]
default-character-set=utf8mb4
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
server-id = 3306
user = cfeng
socket = /tmp/mysql.sock
# 安装目录
basedir = /usr/local/mysql/mysql8
# 数据存放目录
datadir = /usr/local/mysql/mysql8/data
log-bin = /usr/local/mysql/mysql8/data/mysql-bin
innodb_data_home_dir =/usr/local/mysql/mysql8/data
innodb_log_group_home_dir =/usr/local/mysql/mysql8/data
# 日志及进程数据的存放目录
log-error =/usr/local/mysql/mysql8/data/mysql.log
pid-file =/usr/local/mysql/mysql8/data/mysql.pid
# 服务端字符集
character-set-server=utf8mb4
lower_case_table_names=1
autocommit =1
##### 配置相关的数据量
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 1024
sort_buffer_size = 4M
net_buffer_length = 8K
read_buffer_size = 4M
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 64M
thread_cache_size = 128
#query_cache_size = 128M
tmp_table_size = 128M
explicit_defaults_for_timestamp = true
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535
binlog_format=mixed
binlog_expire_logs_seconds =864000
# 创建表时使用的默认存储引擎
default_storage_engine = InnoDB
innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 1024M
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
transaction-isolation=READ-COMMITTED
[mysqldump]
quick
max_allowed_packet = 16M
[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 4M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
云服务器操作系统很干净,里面很多依赖都没有, 这里可能报错缺少libaio.so.1
使用yum安装即可
yum install -y libaio
mysqld_safe --defaults-file=/usr/local/etc/myMysql.conf &
mysql -u root --skip-password
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘GZmCfk6fkKkMA5I6IDgs’;
FLUSH PRIVILEGES;
CREATE user ‘cfeng’@‘%’;
ALTER USER ‘cfeng’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘y84PbgfwzC1to2DiJqie’;
GRANT ALL PRIVILEGES ON . TO ‘cfeng’@‘%’;
FLUSH PRIVILEGES;
touch /usr/lib/systemd/system/mysql.service
vim
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=cfeng
Group=mysql
ExecStart=/usr/local/mysql/mysql8/bin/mysqld_safe --defaults-file=/usr/local/etc/myMysql.conf
LimitNOFILE = 5000
#Restart=on-failure
#RestartPreventExitStatus=1
#PrivateTmp=false
MongoDB依赖 【本地运行,不开放外部连接】
若需要密码,uri方式yml
uri: mongodb://cfeng:a1234567890b@localhost:27017/XiaohuanChat
现实果然残酷,刚把服务器的安全组开放了redis和jar的端口,马上就被美国内华达的IP攻击了, CPU一下子就爆满了; 首先直观的感受: 远程的连接一下子就非常慢,卡住了, 云服务器端观察CPU从攻击时刻开始高居不下 【 不要随便开放端口, 数据库的密码设置强密码, 并且开放的IP不要让任何IP都访问,现在的黑客技术 ~ 】
首先检查占用情况
杀了进程,查看定时任务,结果没有【又被伪装了emmm…】
将写入的相关的sh文件删除, 如果没有权限就设置权限
如果和Cfeng一样后面因为卡爆了,命令执行不了,只能 — 重装初始化系统 ---- 血泪教训,不要开放端口了,只给自己开了…
需要注意ipconfig得到的是在自己无线网络中的ip地址,内网,不是公网的IP,安全组的授权对象是公网IP,61.185.207.95
进入网络与安全 --> 密钥对 【创建密钥对】 设置密钥对名称、创建密钥,下载.pem文件到指定位置
将生成的.pem文件复制到本地的 C盘下面的.ssh文件夹
再在页面中选择密钥绑定,就与本地建立联系,这里就不能使用Xshell凭密码登录,必须通过密钥
chmod 400 /etc/ssh/*
不是所有的应用都需要上云的,作为个人开发者,很多小的测试Demo是没有必要专门买一台服务器进行部署的,这里Cfeng简单分享cpolar的内网穿透的解决方案,平时的小demo可以使用 【防火墙等安全防护措施做好,不然直接压垮】
进入cpolar的官方网站免费注册: cpolar - 安全的内网穿透工具
注册之后选择普通的0元免费套餐就OK了呀, 只是分配的域名地址是随机的,但是只要不关闭应用,那么就可以一直访问
这里先下载Windows版本进行客户端进行介绍
这里Cfeng执行后Authtoken saved to configuration file: /root/.cpolar/cpolar.yml,在这里面就是令牌
解压之后的文件夹里就是命令cpolar, 直接通过./cpolar version可以查看版本
还可以直接下载
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
installed: /usr/local/bin/cpolar
installed link: /usr/bin/cpolar
installed: /usr/local/etc/cpolar/cpolar.yml
installed: /var/log/cpolar/
installed: /var/log/cpolar/access.log
installed: /var/log/cpolar/error.log
installed: /etc/systemd/system/cpolar.service
installed: /etc/systemd/system/[email protected]
removed: /tmp/tmp.rSr29Zsun2
下载之后就可以直接使用cpolar命令
Authtoken saved to configuration file: /usr/local/etc/cpolar/cpolar.yml
coplar会默认安装两个样例通道,一个website通道,指向8080端口,一个ssh指向22端口, 在本地浏览器访问: http://localhost:9200/ 使用用户名密码访问即可
访问之后就可以点击隧道管理,新建隧道,这里默认的两个隧道其实可以关了,避免网络攻击
创建隧道之后,点击状态 —> 在线隧道列表列表,就可以看到映射,这里Cfeng的映射为:
http://6bc22e18.r2.cpolar.cn http://localhost:8083
后面Cfeng会继续更新关于ICP备案和 云服务器故障处理的内容(本篇文章)