记录一次ubuntu16.4离线部署java项目

一、前言

甲方总共提供了两个服务器。第一台我用来部署web项目对外开放,第二台用来持久化数据。登陆服务器需要借助梯子上堡垒机,然后再通过工具登录服务器。如标题所示,两台都不能访问外网,所以在部署上带来一定的困难,特此记录。

二、部署服务器需要做的事情

  1. 检查分区情况,没用到的分区进行挂载
  2. 检查CPU信息,防止安装错软件包,x86 | arm架构
  3. WEB服务器、存储服务器安装必要的软件
  4. 异机备份
  5. 日志管理
  6. 严格控制目录的权限。应新增一个账号用于以后维护,避免或者减少使用root账号的使用,防止误操作,产生生产环境的事故。
  7. 防火墙。尤其注意ssh端口,默认22。

三、服务器部署

分区查看、挂载
lsblk ###列出本系统下的所有磁盘与磁盘内的分区信息
blkid ###UUID可以拿来作为挂载或者是使用这个装置/文件系统使用
parted ### parted /dev/vda print 列出/dev/vda磁盘的相关数据,包括分区表格式
sudo mount -t ext4 /dev/nvme0n1p4 / # 挂载文件系统 `ext4`:文件系统类型,`/dev/nvme0n1p4`设备名,`/`挂载点
umount /dev/sdXY #卸载挂载的文件系统
file -s /dev/sdX #检查文件系统设备
mkfs.ext4 /dev/vdb #格式化数据盘成ext4类型
echo '/dev/vdb /project/ ext4 defaults 0 0' >> /etc/fstab ##挂载,这边不建议直接使用虚拟设备名称,建议使用UUID
mount -a #重新挂载所有分区
账号与安全
useradd -g root Heaven -m #-g 指定账户所在组 -m指定用户家目录,否则无法登录
passwd Heaven
usermod -s /bin/bash Heaven #为用户指定命令解释程序,必要
UFW(ubuntu自带的防火墙)

web服务器放行端口:80、443、22、20、21
存储服务器放行端口:22、3306、6379、20、21
这边存储服务器的3306以及6379的端口我只允许了web服务器的访问,不允许其他内网及外网的访问,按需设置。

sudo ufw allow 22 #放行ssh端口,务必放在第一位,确认服务器的ssh的端口
ufw enable #启动
systemctl enable ufw #开机自启
sudo ufw allow <port> # 放行端口
sudo ufw allow <port>/<protocol> # 放行指定协议端口
sudo ufw allow <start-port>:<end-port>/<protocol> # 放行一个范围的端口
sudo ufw status numbered # 查看ufw当前状态以及规则
sudo ufw delete [rule_number] # 删除指定规则
sudo ufw delete allow 80/tcp # 通过放行条件删除
sudo ufw deny from [ipv4] #阻止某个特定的IP
sudo ufw allow from [ip_address] to any port [port_number]/[protocol] # 允许特定IP
异机备份(rsync)

存储服务器中mysql中的数据以及系统日志,备份到了web服务器当中
web服务器当中的用户文件以及系统日志,备份到了存储服务器当中

### 以下操作避免每次备份需要输入密码,这边不建议使用root账号
ssh-keygen -t rsa
rsync /root/.ssh/rsync_id_rsa.pub root@192.168.1.40:/root/.ssh
### 在远程主机上将得到的公钥写入对应账号的authorized_keys文件中
cd /root/.ssh
cat rsync_id_rsa.pub >> authorized_keys
# 无需输入密码
rsync -re "ssh -i /root/.ssh/rsync_id_rsa" /etc root@192.168.1.40:/tmp
脚本
  1. 启动脚本:redis、mysql、java、前端、nginx
  2. 应用日志清理脚本,放到crontab中定时执行
存储服务器:MySQL
1. wget https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz
2. 解压
3. 将解压后的目录移到`/usr/local/`下,并重命名为`mysql`,进入该目录
4. ./scripts/mysql_install_db --user=mysql #--user指定用户,由谁安装
5. ./bin/mysqld_safe --user=mysql &
6. ./bin/mysql -u root -p
7. create user 'my_mysql'@'web服务器IP' IDENTIFIED by 'my_mysql@10917!'; # 创建本地用户`my_mysql`,by后面跟着的是密码,也可以指定IP,只允许该地址登录
8. grant all privileges on *.* to 'testserverdbuser'@'localhost';
9. FLUSH PRIVILEGES;

如果需要修改MySQL的目录,则需要修改跟目录当中的basedir路径与datadir路径,并且后面跟上–defaults-file=./my.cnf

存储服务器Redis
1. wget http://download.redis.io/releases/redis-5.0.8.tar.gz
2. #解压
3. #进入该目录
4. make PREFIX=/home/Heaven/softwares/redis-5 install #安装至指定目录,也可以直接`make install`默认挂到`/usr/local/bin`下
5. # 拷贝源码中的配置文件放到安装后的目录当中,并将配置文件中的`daemonize` 配置从`no`改成`yes`,配置项`requirepass` 密码修改
6. # 进入到安装目录
7. 
8. cd ./bin
9. ./redis-server ../redis.conf # 启动
10. ./redis-cli # 进入管理界面
11. auth 123456 # 输入密码
12. ./redis-cli -a 123456 shutdown # 停止服务
web服务器:Java(这个就不赘述了,下载解压后只需要配置环境变量就行)

https://www.oracle.com/cn/java/technologies/javase/javase8-archive-downloads.html

web服务器:Nginx

下载所需要的nginx-1.18.0、zlib-1.3、pcre-8.45、openssl-1.0.1k

### 编译安装zlib、pcre、openssl,三者都是一样的操作方式,不重复赘述了
1. cd zlib || pcre || openssl
2. ./configure # 编译前配置,默认安装到/usr/local/bin下,可以使用--prefix指定安装目录
3. make && make install # 编译安装
### nginx编译安装
4. cd nginx
5. ./configure --prefix=/project/run/softwares/nginx --with-http_ssl_module --with-http_secure_link_module --with-http_stub_status_module --with-openssl=/usr/local/ssl # `--prefix`指定nginx安装目录,`--with`需要安装的模块,ssl为必须。最后这边`--with-openssl=/usr/local/ssl`是我在编译安装openssl目录出现了问题,所以需要指定其目录

四、末尾

这次部署花了近半个月的时间,当然中间也有参杂其它的事情。走了很多弯路,磕磕碰碰的。中间有想过使用apt-mirror搭载一个离线源,预估200G左右,奈何因为网速及磁盘大小问题,所以没用此方法。或许用该方法能省下不少时间?下边是此次部署用到的软件包,分享给有需要的人。
链接:https://pan.baidu.com/s/11uh5VOYIanr7yDdYRNmbEA
提取码:8rvl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值