手把手教你部署项目
手把手教你部署项目
01、服务器准备
- 阿里云/华为云/腾讯云等平台购买服务器一台 配置如下:
规格 通用计算型 | s3.xlarge.2 | 4vCPUs | 8GiB
镜像 CentOS 7.8 64bit | 公共镜像
系统盘 高IO | 40 GiB
带宽大小 5Mbit/s
公网IP 139.159.88.88 - 购买域名指向服务器,并备案
主域名:huwujie.com,www.huwujie.com 用于前端项目
解析域名:api.huwujie.com 用户后端项目
购买免费证书,申请证书,下载证书(nginx格式)- huwujie.com.key
- huwujie.com.pem
- api.huwujie.com.key
- api.huwujie.com.pem
- 配置安全组,开放端口
- 80、443、8080等常用web端口
- 3306(mysql),6379(Redis)端口
- 22远程连接端口
02、本地windows准备
- 软件
安装Xshell7,用于远程连接服务器
安装Xftp7,用于服务器上传下载文件 - 前端项目
创建project-web,创建index.html, 编辑HTML文本Hello world!
- 后端,项目
创建一个springboot项目,简单提供个Get接口 /getText,返回字符串"It's OK!",打包project-api.jar
03、安装Java环境
- 下载jdk-8u161-linux-x64.tar.gz,上传到/data
- 解压到/usr/local/
tar zxvf jdk-8u161-linux-x64.tar.gz -C /usr/local/java
- 配置环境变量,在vim文件下添加如下配置
export JAVA_HOME=/usr/local/java/jdk1.8.0_161 export JRE_HOME=$JAVA_HOME/jre export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
- 重新编译
source /etc/profile
- 检查JDK安装是否成功
java -version
04、安装nginx
- 安装依赖包
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
- 下载nginx-1.17.10.tar.gz,上传到/data,或者直接
wget https://nginx.org/download/nginx-1.17.10.tar.gz
- 解压,进入nginx目录
tar -zxvf nginx-1.17.10.tar.gz -C /usr/local/ cd /usr/local/nginx-1.17.10
- 配置,安装
./configure --prefix=/usr/local/nginx --with-http_ssl_module ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module make make install
- 测试
/usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
- 启动
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
- 关闭,两种方式
/usr/local/nginx/sbin/nginx -s stop
ps -ef | grep nginx (获得进程号PID) kill -QUIT PID kill -TERM PID kill -9 PID
- 重启
/usr/local/nginx/sbin/nginx -s reload
05、安装tomcat(跳过)
springboot项目跳过此步骤
- 下载apache-tomcat-8.5.57.tar.gz,上传到/data
- 解压到/usr/local/
tar zxvf apache-tomcat-8.5.57.tar.gz -C /usr/local/java mv /usr/local/java/apache-tomcat-8.5.57 /usr/local/java/tomcat8
- 启动tomcat
sh /usr/local/java/tomcat8/bin/startup.sh
- 关闭tomcat
sh /usr/local/java/tomcat8/bin/shutdown.sh
- 查看实时运行日志
tail -f /usr/local/java/tomcat8/logs/
- 查看是否运行
ps -ef|grep java
- 查看tomcat端口号
ps -ef|grep tomcat(获得进程号44609) netstat -anop | grep 44609
- 部署项目
war包上传/usr/local/java/tomcat8/webapps
06、安装mysql
- 下载:mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz,上传/data
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz wget https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
- 解压、移动并重命名
tar -zxvf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.31-linux-glibc2.12-x86_64 /usr/local/mysql
- mysql用户组、权限配置,创建mysql目录,并赋予权限
groupadd mysql useradd -r -g mysql mysql mkdir -p /data/mysql #创建目录 chown mysql:mysql -R /data/mysql #赋予权限
- 配置/etc/my.cnf
[mysqld] bind-address=0.0.0.0 port=3306 user=mysql basedir=/usr/local/mysql datadir=/data/mysql socket=/tmp/mysql.sock log-error=/data/mysql/mysql.err pid-file=/data/mysql/mysql.pid #character config character_set_server=utf8mb4 symbolic-links=0 explicit_defaults_for_timestamp=true sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
- 初始化数据库可能问题:./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
cd /usr/local/mysql/bin/ ./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize
rpm -qa | grep libaio yum install libaio-devel.x86_64
- 查看初始密码
cat /data/mysql/mysql.err #(ovduoYRwg9>g)
- 将mysql.server放置到 /etc/init.d/mysql
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
- 启动:关闭:查看进程:
service mysql start #启动 service mysql stop #关闭 ps -ef|grep mysql #查看进程
- 修改密码
./mysql -u root -p密码 set password = password('mysql123456'); alter user 'root'@'localhost' password expire never; flush privileges;
- 远程连接
use mysql; # 访问 mysql 库 update user set host = '%' where user = 'root'; # 使 root 能再任何 host 访问 flush privileges; # 刷新 quit; # 退出 mysql
- 将mysql bin添加的系统bin中
ln -s /usr/local/mysql/bin/mysql /usr/bin ln -s /usr/local/mysql/bin/mysqldump /usr/bin
- mysql备份
# 备份数据库: mysqldump -uroot -p platform > /backup/mysql/platform0729.sql mysql123456 # 备份所有数据库: mysqldump -uroot -p --all-databases > /backup/mysqldump/all.db # 备份指定数据库: mysqldump -uroot -p test > /backup/mysqldump/test.db # 备份指定数据库指定表(多个表以空格间隔) mysqldump -uroot -p mysql db event > /backup/mysqldump/2table.db # 备份指定数据库排除某些表 mysqldump -uroot -p test --ignore-table=test.t1 --ignore-table=test.t2 > /backup/mysqldump/test2.db
- mysql导入
# 系统行命令 mysqladmin -uroot -p create db_name mysql -uroot -p db_name < /backup/mysqldump/db_name.db # soure 方法 mysql > use db_name mysql > source /backup/mysqldump/db_name.db
- 定时备份mysql 定时任务脚本设置定时任务
#!/bin/bash db_name='mydb' backup_dir='/opt/logs/mysql/' current_time=$(date +'%Y%m%d') filepath=$backup_dir$db_name$current_time'.sql.gz' echo '开始导出数据库...' mysqldump -uroot -pmysql123456 $db_name | gzip > $filepath echo '导出成功,文件名为: '$filepath find $backup_dir -name '*.gz' -mtime +30 -exec rm -rf {} \; echo '清除30天以上文件!'
查看定时任务列表crontab -e #输入: 0 23 * * * sh /data/mysql_backup/backup.sh > /dev/null 2>&1
crontab -l
07、安装redis
- 下载:redis-5.0.8.tar.gz,上传到/data,或者
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
- 解压、移动并重命名
tar -zvxf redis-5.0.8.tar.gz redis-5.0.8 mv /data/redis-5.0.8 /usr/local/redis
- 编译、安装,安装完成后出现bin文件夹
cd /usr/local/redis make make PREFIX=/usr/local/redis install
- 配置文件,复制redis.conf到bin目录下
cp redis.conf bin/redis.conf cd bin vi redis.conf #1、注释绑定 #bind 127.0.0.1 #2、关闭保护模式 protected-mode no #3、设置密码 requirepass redis123456 #4、设置后台启动 daemonize yes
- 启动
./redis-server ./redis.conf(显示启动,如果daemonize 属性为yes = 后台) ./redis-server & ./redis.conf (后台进程)
- 关闭
./redis-cli shutdown ./bin/redis-cli -h 127.0.0.1 -p 6379 -a redis123456 shutdown
- 查看进程、查看目录、关闭
ps -aux | grep redis netstat -lanp | grep 6379 netstat -antpl| grep redis ls -l /proc/15104/cwd kill -9 15104
- 建立软连接
ln -s /usr/local/redis/bin/redis-server /usr/bin/redis-server ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis-cli
- 连接redis,启动 ,关闭
redis-cli -h 127.0.0.1 -p 6379 -a redis123456 redis-server /usr/local/redis/bin/redis.conf redis-cli -a redis123456 shutdown
项目部署
创建/opt路径,上传project-web,project-api,目录如下:
/opt ├── project-web │ └── index.html └── project-api ├── project-api.jar ├── start.sh └── shutdown.sh
start.sh启动脚本代码如下:
#!/bin/sh nohup java -jar -Xmx512m -Xms256m /opt/project-api/project-api.jar --spring.profiles.active=test >> /opt/project-api/log.txt 2>&1 & tail -100f /opt/project-api/log.txt
start.sh关闭脚本代码如下:
#!/bin/sh /bin/kill -9 `ps -ef | grep java | grep "/opt/project-api/project-api.jar" | awk -F" " '{print $2}'`
nginx下创建vhost目录存放站点域名配置,创建certificate目录存放站点域名证书,目录如下:
/usr/local/nginx ├── conf │ └── nginx.conf ├── vhost │ ├── huwujie.com.conf │ └── api.huwujie.com.conf └── vhost ├── huwujie.com.key ├── huwujie.com.pem ├── api.huwujie.com.key └── api.huwujie.com.pem
huwujie.com.conf代码如下:
server{ listen 80; server_name huwujie.com www.huwujie.com; rewrite ^(.*)$ https://$host$1 permanent; } server { listen 443 ssl; server_name huwujie.com www.huwujie.com; ssl_certificate /usr/local/nginx/certificate/huwujie.com.pem; ssl_certificate_key /usr/local/nginx/certificate/huwujie.com.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { try_files $uri $uri/ /index.html; index index.html index.htm; root /opt/html/ydtk; } }
api.huwujie.com.conf代码如下:
server { listen 80; server_name api.huwujie.com; rewrite ^(.*)$ https://$host$1 permanent; } server { listen 443 ssl; server_name api.test.onetuoke.com; ssl_certificate /usr/local/nginx/certificate/api.huwujie.com.pem; ssl_certificate_key /usr/local/nginx/certificate/api.huwujie.com.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { client_max_body_size 20m; proxy_pass http://127.0.0.1:8080; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
修改nginx配置后,重启nginx
/usr/local/nginx/conf/nginx.conf 在http中加一行http { #....... include /usr/local/nginx/vhost/*.conf; }
启动后端项目
sh /opt/server/project-api/start-8081.sh
浏览器访问
- https://www.huwujie.com
显示 Hello world! - https://api.huwujie.com/getText
显示 It's OK!
- https://www.huwujie.com
快捷搭建环境
创建镜像,直接用镜像搭建服务器