苏州 网站的公司哪家好,网站扩容需要多少钱,微信小程序源码提取工具,做电商平台网站目录
1、明确内容
2、apt
2.1、apt 语法
2.2、常用命令
2.3、更新apt
3、安装JDK17
4、安装MySQL
4.1、安装
4.2、检查版本及安装位置
4.3、初始化MySQL配置⭐
4.4、检查状态
4.5、配置远程访问⭐
4.6、登录MySQL
4.7、测试数据库
4.8、设置权限与密码⭐
5、安…目录
1、明确内容
2、apt
2.1、apt 语法
2.2、常用命令
2.3、更新apt
3、安装JDK17
4、安装MySQL
4.1、安装
4.2、检查版本及安装位置
4.3、初始化MySQL配置⭐
4.4、检查状态
4.5、配置远程访问⭐
4.6、登录MySQL
4.7、测试数据库
4.8、设置权限与密码⭐
5、安装redis
6、安装Nginx
6.1、相关存储位置
6.2、配置文件
第一部分全局块
第二部分events块
第三部分http块
完整配置文件
80端口占用
6.3、部署前端项目
6.4、测试效果
7、安装tomcat
7.1、报错
7.2、排错⭐
8、防火墙和安全组
8.1、防火墙放行
8.2、阿里云安全组
9、上传工程jar包
9.1、打包
9.2、上云
10、测试项目
10.1、运行
10.2、持续运行 作者介绍双非本科大三网络工程专业在读阿里云专家博主专注于Java领域学习擅长web应用开发、数据结构和算法初步涉猎Python人工智能开发和前端开发。 主页逐梦苍穹 所属专栏项目 您的一键三连是我创作的最大动力 Java项目开发完成之后想要给第三方访问则需要部署到公网上去阿里云/腾讯云是不错的选择这里以阿里云为例进行详细说明
1、明确内容
第一步需要明确好自己部署一个项目到云服务器的同时需要运行什么其他服务(这里以Java项目为例说明)。
①Java项目首先要部署JDK这里部署的是JDK17
②现在主流的Java项目都是以SpringBoot为主流SpringBoot内嵌了tomcat容器所以可以不额外部署tomcat服务
③项目当中涉及到数据存储需要部署数据库服务这里使用的是MySQL
④项目涉及到缓存操作需要部署redis
⑤如果项目是前后端分离项目还需要部署前端nginx服务器可以配置tomcat集群
2、apt
aptAdvanced Packaging Tool是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器。
apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令而且命令简洁而又好记。
apt 命令执行需要超级管理员权限(root)。 安装apt-get install name更新apt-get update name卸载apt-get remove name查找apt-cache search name 2.1、apt 语法
apt [options] [command] [package ...] options可选选项包括 -h(帮助)-y(当安装过程提示选择全部为yes)-q(不显示安装的过程)等等。 command要进行的操作。 package安装的包名。 2.2、常用命令 操作 命令 列出所有可更新的软件清单 sudo apt update 升级软件包 sudo apt upgrade 列出可更新的软件包及版本信息 apt list --upgradeable 升级软件包升级前先删除需要更新的软件包 sudo apt full-upgrade 安装指定的软件包 sudo apt install package_name 安装多个软件包 sudo apt install package_1 package_2 package_3 更新指定的软件包 sudo apt update package_name 显示软件包具体信息例如版本号安装大小依赖关系等 sudo apt show package_name 删除软件包 sudo apt remove package_name 清理不再使用的依赖和库文件 sudo apt autoremove 移除软件包及配置文件 sudo apt purge package_name 查找软件包 sudo apt search 列出所有已安装的包 apt list --installed 列出所有已安装的包的版本信息 apt list --all-versions
2.3、更新apt 3、安装JDK17
sudo apt install openjdk-17-jdk
当系统要求输入密码时请输入密码。然后键入 Y 并按 Enter 继续安装。 检查是否安装成功 运行个jar包试试看 正常运行环境配置无误
4、安装MySQL
4.1、安装
sudo apt-get install mysql-server 4.2、检查版本及安装位置 4.3、初始化MySQL配置⭐
输入命令sudo mysql_secure_installation 需要的配置项会比较多详细如下
1)这里输入N选择不进行密码的强校验 2)这里输入Y选择确认删除匿名用户 3)这里输入N选择允许root远程登陆 4)这里输入N选择不删除test数据库 5)这里输入Y选择修改的权限立即生效 6)至此初始化完成 4.4、检查状态
检查MySQL服务的运行状态systemctl status mysql.service 可以看到正常运行
4.5、配置远程访问⭐
在Ubuntu下MySQL缺省是只允许本地访问的使用远程连接工具是连不上的
如果要其他机器也能够访问的话需要进行配置
找到 bind-address 修改值为 0.0.0.0(如果需要远程访问)。
命令sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf 此处修改为0.0.0.0
修改完成记得重启服务sudo /etc/init.d/mysql restart 如果遇到vi编辑器不能正常的插入和保存的情况可以选择重新安装vim。
由于Ubuntu预装的是vim-tiny而我们需要使用vim-full步骤如下 ①卸载vim-tinyapt-get remove vim-common ②安装vim-fullapt-get install vim 4.6、登录MySQL
命令sudo mysql -uroot -p 输入用户和密码(按照上面的步骤此时的root用户是没有密码的直接回车即可) 4.7、测试数据库
show databases use mysql select User,authentication_string,Host from user select host,user,plugin from user 4.8、设置权限与密码⭐
命令 使用mysql_native_password修改加密规则 ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 密码; 更新用户的密码 ALTER USER rootlocalhost IDENTIFIED BY 密码 PASSWORD EXPIRE NEVER; 允许远程访问 UPDATE user SET host % WHERE user root; 刷新cache中配置刷新权限 flush privileges; 如图 到这里MySQL在Ubuntu上的配置和安装就完成了
5、安装redis
安装Redissudo apt install redis-server 安装完成后Redis将自动启动。
检查Redis服务状态sudo systemctl status redis-server 如果Redis未自动启动则手动启动Redissudo systemctl start redis-server
接下来为Redis设置密码 首先停止Redis服务sudo systemctl stop redis-server 然后编辑Redis配置文件vim /etc/redis/redis.conf 在配置文件中找到以下行# requirepass foobared 注释掉这行添加密码将 # requirepass foobared 修改为requirepass yourpassword其中 yourpassword 是需要设置的密码。保存并关闭文件。 最后重新启动Redis服务sudo systemctl restart redis-server 现在Redis已经安装并设置了密码。
使用以下命令测试连接Redisredis-cli -h localhost -p 6379 -a yourpassword ping 如果一切正常将看到回复 PONG。现在已经成功在Ubuntu上安装了Redis并设置了密码。
redis监听的是127.0.0.1:6379并不监听外网的请求因此想要远程连接还需要对redis.conf配置文件中的相关内容进行修改
①将 bind 127.0.0.1 ::1 注释掉 ②将 protected-mode 改成 no 6、安装Nginx
安装命令sudo apt-get install nginx 验证是否安装成功nginx -v 6.1、相关存储位置 默认安装位置 /usr/sbin/nginx主程序 /etc/nginx存放配置文件 /usr/share/nginx存放静态文件 /var/log/nginx存放日志 测试配置文件/etc/nginx/conf.d是否正确: 6.2、配置文件
nginx最重要的莫过于配置文件其中 主配置文件/etc/nginx/nginx.conf 其他配置文件/etc/nginx/conf.d/xxxx.conf 建议是一个主配置文件多个其他配置文件协同工作这样能更好的规范配置项显得更有条理性 进入/etc/nginx目录 主配置文件为nginx.conf。
可以将 nginx.conf 配置文件分为三部分
第一部分全局块 worker_processes auto; 从配置文件开始到 events 块之间的内容主要会设置一些影响 Nginx 服务器整体运行的配置指令主要包括配置运行 Nginx 服务器的用户组、允许生成的 worker process 数进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
上面这行 worker_processes 配置这是 Nginx 服务器并发处理服务的关键配置该值越大可以支持的并发处理量也越多但是会受到硬件、软件等设备的制约。
第二部分events块 events {worker_connections 768;} events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接常用的设置包括是否开启对多 work process下的网络连接进行序列化是否允许同时接收多个网络连接选取哪种事件驱动模型来处理连接请求每个 wordprocess 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024。这部分的配置对 Nginx 的性能影响较大在实际中应该灵活配置。
第三部分http块 http {sendfile on;tcp_nopush on;types_hash_max_size 2048;# server_tokens off;# server_names_hash_bucket_size 64;# server_name_in_redirect off;include /etc/nginx/mime.types;default_type application/octet-stream;ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLEssl_prefer_server_ciphers on;access_log /var/log/nginx/access.log;error_log /var/log/nginx/error.log;gzip on;# gzip_vary on;# gzip_proxied any;# gzip_comp_level 6;# gzip_buffers 16 8k;# gzip_http_version 1.1;# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xmlrss text/javascript;### Virtual Host Configs##server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {root html/sky;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location /50x.html {root html;}# 反向代理,处理管理端发送的请求location /api/ {proxy_pass http://localhost:8080/admin/;#proxy_pass http://webservers/admin/;}# 反向代理,处理用户端发送的请求location /user/ {proxy_pass http://localhost:8080/user/;}# WebSocketlocation /ws/ {proxy_pass http://localhost:8080/ws/;}}include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;
} 这部分是 Nginx 服务器配置中最频繁的部分代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是http 块也可以包括 http 全局块、server 块。
下面的反向代理、动静分离、负载均衡都是在这部分中配置。
①、http 全局块
http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
②、server 块
这块和虚拟主机有密切关系虚拟主机从用户角度看和一台独立的硬件主机是完全一样的该技术的产生是为了节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块以及可以同时包含多个 locaton 块
全局 server 块最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
location 块一个 server 块可以配置多个 location 块。这块的主要作用是基于 Nginx 服务器接收到的请求字符串例如 server_name/uri-string对虚拟主机名称也可以是 IP 别名之外的字符串例如 前面的 /uri-string进行匹配对特定的请求进行处理。地址定向、数据缓存和应答控制等功能还有许多第三方模块的配置也在这里进行。
反向代理
在server中配置 完整配置文件
主配置文件内容如下 user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;events {worker_connections 768;# multi_accept on;
}http {sendfile on;tcp_nopush on;types_hash_max_size 2048;# server_tokens off;# server_names_hash_bucket_size 64;# server_name_in_redirect off;include /etc/nginx/mime.types;default_type application/octet-stream;ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLEssl_prefer_server_ciphers on;access_log /var/log/nginx/access.log;error_log /var/log/nginx/error.log;gzip on;# gzip_vary on;# gzip_proxied any;# gzip_comp_level 6;# gzip_buffers 16 8k;# gzip_http_version 1.1;# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xmlrss text/javascript;### Virtual Host Configs##server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {root html/sky;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location /50x.html {root html;}# 反向代理,处理管理端发送的请求location /api/ {proxy_pass http://localhost:8080/admin/;#proxy_pass http://webservers/admin/;}# 反向代理,处理用户端发送的请求location /user/ {proxy_pass http://localhost:8080/user/;}# WebSocketlocation /ws/ {proxy_pass http://localhost:8080/ws/;}}include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;
} 80端口占用
在部署的过程中可以发现当nginx.conf配置监听端口为非80端口时访问nginx服务器的80端口依旧生效会自动跳转到欢迎页面(welcome to nginx!) 这是因为
在/etc/nginx/sites-enabled这个目录下面有一个default文件这个文件是默认加载的而配置文件 编辑这个default文件打开以后是这样的 listen端口默认就是80把它改为非80端口就不会出现80端口被欢迎页面占用的情况。
6.3、部署前端项目
打包好的前端项目可以放在自定义的文件夹下面 记得配置好相关路径 监听端口默认80端口。
6.4、测试效果
部署完成可以开始测试
在本地访问localhost在阿里云则访问对应的ip地址 可以看到测试没有问题
7、安装tomcat
这个步骤可以不需要只是为了完善整套环境。
因为在第一部分明确内容的时候提到过现在主流的都是SpringBoot项目而SpringBoot是内嵌了tomcat容器的如图 项目使用的是SpringBoot2.X版本所以内嵌的是tomcat9.0.65版本。
这里就安装对应的版本来测试一下即可。
安装sudo apt install tomcat9 7.1、报错
这个环境下同时装了JDK17和tomcat9不出意外的话启动服务的时候是要报错的 报错信息显示找不到JDK但是实际上有JDK 7.2、排错⭐
不出意外的话这应该是一个老生常谈的错误了就是tomcat9的某些配置文件不识别JDK17。
先查看tomcat9的安装路径(whereis tomcat9) 根据上面的报错信息可以看到加载/lib/systemd/system/tomcat9.service失败。
下面进入/lib/systemd/system/查看tomcat9.service文件 可以看到Tomcat9的启动脚本是/usr/libexec/tomcat9/tomcat-start.sh下面查看该脚本的内容 可以发现这里有一个脚本/usr/libexec/tomcat9/tomcat-locate-java.sh是用来寻找Java环境的下面查看该脚本 成功发现问题这个脚本的内容不包括Java17
解决方案加上Java17如下 像这样加入17然后重启服务就可以了。
7.3、测试 systemctl restart tomcat9 systemctl status tomcat9 成功运行 地址栏测试(访问8080端口)出现如下页面表示成功 如果你在浏览器看到此页面则表示tomcat成功运行 8、防火墙和安全组
根据上面的七个步骤整个项目的环境部署已经完成了但是外部依旧无法访问。
此处有两个关键要点①操作系统防火墙开放对应端口②阿里云外部设置安全组策略
8.1、防火墙放行 放行命令ufw allow [端口号] 查看防火墙ufw status 8.2、阿里云安全组
进入云服务器ECS控制台找到安全组 点击管理规则 点击手动添加入站规则 至此项目环境部署完成
9、上传工程jar包
9.1、打包
打开开发工具IntelliJ IDEA
第一步跳过测试 第二步在父模块下执行clean 第三步在父模块执行compile编译 第四步根据依赖关系依次执行install(依赖的内容越多越慢执行install)
这里的顺序就应该是先install模块sky-pojo再模块sky-common最后install最核心的服务模块sky-server。最后打开install模块sky-server的jar包路径 找到路径的target目录 把这个jar包上传到阿里云服务器即可。
9.2、上云
利用远程连接工具连接阿里云服务器(如finalshell或Xshell) 10、测试项目
10.1、运行
连上阿里云操作系统 在阿里云的Ubuntu系统上运行jar包即可效果如图 10.2、持续运行
由于springboot内置了tomcat容器我们通常会把项目打成jar或者war后直接使用java -jar xxx.jar命令去运行程序但是当前ssh窗口被锁定或者按下ctrlc又或者关闭了ssh窗口那么程序就会被终止。
一旦退出操作系统即使操作系统依旧在运行中但是项目却无法访问了。
这是因为java -jar的命令只能在当前进程运行我们需要的是在后台单独开一个进程让它持续运行。
解决方案一 java -jar xxx.jar 代表在后台运行。 特点当前ssh窗口不被锁定但是当窗口关闭时程序中止运行。 解决方案二 nohup java -jar SpringBootDemo.jar nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行 当用 nohup 命令执行时缺省情况下该进程的所有输出被重定向到nohup.out的文件中除非另外指定了输出文件。 解决方案三 nohup java -jar SpringBootDemo.jar out.txt out.txt是将command的输出重定向到out.txt文件即输出内容不打印到屏幕上而是输出到out.txt文件中 推荐使用方案二或方案三 这里只是做一个简单的样例展示具体可以根据springBoot的日志技术分层级分大小的去记录日志到本地文件