任务简述 虽然一直在 Windows 进行编码,但最终项目是要部署到 Linux 服务端上的,本次将演示在 Linux 上部署简单项目的过程,本次服务器端为使用 Hype-V 装的 Ubuntu 18.04.6 LTS,如果使用云服务提供商的产品,部分步骤可以被省略。
安装 JDK 更新 1 2 sudo apt-get update sudo apt-get upgrade
注意更换 apt-get 源(修改 /etc/apt/sources.list 中的内容为国内镜像源)
安装 JDK 8 1 sudo apt install openjdk-8-jdk
完成后 java -version
能输出版本信息,表示安装成功
配置环境变量 虽然此种方法不需要配置环境变量就可以使用,但由于别的程序的需要,保险起见,还是进行配置
1 2 user@user-Virtual-Machine:~$ whereis java java: /usr/bin/java /usr/share/java /usr/lib/jvm/java-8-openjdk-amd64/bin/java /usr/share/man/man1/java.1.gz
通过 whereis java
的返回结果观察到 JDK 的安装目录为 /usr/lib/jvm/java-8-openjdk-amd64
在 /etc/profile 文件末尾加上
1 2 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export JRE_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
通过 source /etc/profile
重新加载配置文件
开放端口 systemctl status firewalld
查看防火墙运行状态
1 2 3 4 5 6 7 8 9 10 11 12 user@user-Virtual-Machine:~$ systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-05-18 14:19:43 CST; 1h 56min ago Docs: man:firewalld(1) Main PID: 558 (firewalld) Tasks: 2 (limit: 1033) CGroup: /system.slice/firewalld.service └─558 /usr/bin/python3 -Es /usr/sbin/firewalld --nofork --nopid May 18 14:19:42 user-Virtual-Machine systemd[1]: Starting firewalld - dynamic firewall daemon... May 18 14:19:43 user-Virtual-Machine systemd[1]: Started firewalld - dynamic firewall daemon.
后续需要用到 80、3306 和 8080 端口,此处提前打开
1 2 3 4 firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=6379/tcp --permanent
重启防火墙并查看开放的端口
1 2 3 4 user@user-Virtual-Machine:~$ sudo firewall-cmd --reload success user@user-Virtual-Machine:~$ sudo firewall-cmd --zone=public --list-ports 8080/tcp 3306/tcp 80/tcp 6379/tcp
安装 MySQL 安装服务端和客户端 1 2 sudo apt-get install mysql-server sudo apt-get install mysql-client
安装完成后检查状态 service mysql status
1 2 3 4 5 6 7 8 9 10 11 12 13 user@user-Virtual-Machine:~/my$ systemctl status mysql.service ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-05-18 14:51:33 CST; 1h 34min ago Process: 8801 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid (code=exited, status=0/SUCCESS) Process: 8792 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 8803 (mysqld) Tasks: 31 (limit: 1033) CGroup: /system.slice/mysql.service └─8803 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid May 18 14:51:33 user-Virtual-Machine systemd[1]: Starting MySQL Community Server... May 18 14:51:33 user-Virtual-Machine systemd[1]: Started MySQL Community Server.
配置远程登录 MySQL 的配置文件位于 /etc/mysql/mysql.conf.d/mysqld.cnf
打开配置文件,将 bind-address = 127.0.0.1 改为 bind-address = 0.0.0.0
常用 MySQL 命令 设置服务开机自启动
1 sudo service mysql enable
启动服务
1 sudo service mysql start
重启服务
1 sudo service mysql restart
停止服务
创建用户与授权 初次安装完成 root 用户没有密码,直接登入
修改密码并开放权限
1 2 3 4 5 set global validate_password_length= 4 ;set global validate_password_policy= LOW;set password = password("1234");grant all on * .* to 'root' @'%' identified by 'root' ;flush privileges;
创建用户 1 CREATE USER 'username' @'%' IDENTIFIED BY 'password' ;
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用 localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符 %
用户授权 1 GRANT privileges ON databasename.tablename TO 'username' @'%' ;
privileges:用户的操作权限,如 SELECT,INSERT,UPDATE 等,如果要授予所的权限则使用 ALL databasename:数据库名 tablename:表名 如果要授予该用户对所有数据库和表的相应操作权限则可用 *.*
注意:用以上命令授权的用户不能给其它用户授权,如果想让被授权的用户可以将他的拥有的权限授给其他用户,用以下命令
1 GRANT privileges ON databasename.tablename TO 'username' @'host' WITH GRANT OPTION;
刷新授权
导入 SQL 文件
部署项目 手动部署 使用 mvn package
,将本机项目打包成 jar 包传输到服务器中,使用 nohup java -jar name.jar &> hello.log &
后台运行 jar 包并将日志输出到指定文件。
本机在浏览器中输入服务器端 IP 地址和 8080 端口号访问。
自动部署 准备一个 git 仓库
安装 Git
安装 Maven
获取代码 1 2 cd usr/local git clone https://github.com/***/***.git
编写自动部署脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 # !/bin/sh echo 启动 echo 准备停止正在运行的项目 APP_NAME=xxx tpid=`ps -ef | grep $APP_NAME | grep -v grep | grep -v kill | awk '{print $2}'` if [ ${tpid} ]; then echo 正在停止 kill -15 $tpid fi sleep 2 tpid=`ps -ef | grep $APP_NAME | grep -v grep | grep -v kill | awk '{print $2}'` if [ ${tpid} ]; then echo 正在强制停止 kill -9 $tpid else echo 已停止 fi echo 正在从仓库拉取代码 git pull echo 拉取完成 echo 开始打包 output=`mvn clean package -Dmaven.test.skip=true` cd target echo 正在启动项目 nohup java -jar xxx.jar &> hello.log & echo 启动完成
运行脚本即可自动打包部署
配置 Nginx 1 sudo apt-get install ngnix
nginx文件结构
1 2 3 4 5 6 /usr/sbin/nginx/ #主程序 /etc/nginx/ #配置文件 /etc/nginx/conf.d/*.conf; #配置文件 /etc/nginx/sites-enabled/*; #配置文件 /usr/share/nginx/ #静态文件 /var/log/nginx/ #日志文件
将前端打包的文件复制到 dist 目录下
在 /etc/nginx/sites-available/default 中编辑
1 2 3 4 5 6 7 8 9 10 11 12 13 upstream targetserver { server 172.27 .134 .45 : 8080 ; server 172.27 .134 .46 : 8080 ; } server { listen 80 ; root html/dist; index index.html; location ^~ /api/ { rewrite ^/api/(.*)$ /$1 break; proxy_pass http: } }
重新加载配置文件
本机在浏览器中输入服务器端 IP 地址和 80 端口号访问。