草庐IT

手把手教你在Linux系统进行项目部署

望不秃 2023-07-24 原文

手把手教你在Linux系统进行项目部署

百度网盘:https://pan.baidu.com/s/11wMIXT68GX7banf3Gaflrw (提取码:lzt1)

GitHub:https://github.com/Newbie-Rookie/Project-deployment

已经将项目部署需要用到的工具放到网盘中和GitHub上

在进行项目部署前,你先需要拥有一台服务器、XShell软件、XFtp软件

(1) 服务器

上阿里云、腾讯云租一台即可,可以看看官网的最新活动的限时秒杀(腾讯云),每天固定时间有优惠活动。

我目前用的是腾讯云的云服务器,学生有优惠https://cloud.tencent.com/act/campus(需要学生认证)

用购买服务器的账号登录服务器控制台(腾讯云控制台),找到购买的云服务器,进入实例

我们需要记住服务器初始登录名为root,密码我们进行重置密码,更改为我们容易记住的密码,用于登录XShell和XFtp

我们还要记住公网IP

(2) XShell和XFtp

XShell是命令操作服务器上资源的软件,XFtp是可视化操作服务器上资源的软件。

官网下载XShell 7和XFtp 7即可,但目前不知道为什么进不去官网,我把软件放网盘和github上,需要的自取。

① XShell连接云服务器:

点击该连接进行连接,需要再次输入登录名root和你所重置的密码即可连接成功。

② XFtp连接云服务器:

填写云服务器公网IP、登录名和密码,进行连接即可

以上将服务器、XShell和XFtp准备好后,我们就需要搭建项目运行环境,分四个步骤。

1、Linux安装jdk8(或其他版本)

1.1 下载jdk8.0

Oracle官网:https://www.oracle.com/java/technologies/downloads/#java8

需要Oracle账户(百度搜索Oracle账户,嫖一个下载就ok)

下载:jdk-8u321-linux-x64.tar.gz(已为你们准备了jdk-8u311-linux-x64.tar.gz在网盘和GitHub中)

1.2 源代码解压

XFtp进入/usr/local,将jdk-8u311-linux-x64.tar.gz进去

以下在XShell中进行:

进入/usr/local,即jdk源代码压缩包位置:

cd /usr/local

解压jdk源代码压缩包:

tar -zxvf jdk-8u311-linux-x64.tar.gz

删除jdk源代码压缩包:

rm -f jdk-8u311-linux-x64.tar.gz

解压成功:

1.3 配置jdk环境变量

/etc/profile文件的改变会涉及到系统的环境,也就是有关Linux环境变量的东西

所以,我们要将jdk配置到/etc/profile,才可以在任何一个目录访问jdk

vim /etc/profile

按i进入编辑,在profile文件尾部添加如下内容:

export JAVA_HOME=/usr/local/jdk1.8.0_311  #jdk安装目录
 
export JRE_HOME=${JAVA_HOME}/jre
 
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
 
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
 
export PATH=$PATH:${JAVA_PATH}

添加后如下:

然后按Esc退出编辑,按:wq退出配置文件即可

通过命令source /etc/profile让profile文件立即生效:

source /etc/profile

1.4 测试jdk是否安装成功

javac

java -version

2、Linux安装Tomcat

2.1 下载安装包

我部署的项目中使用的是apache-tomcat-9.0.56,所以网盘和GitHub为你们准备了apache-tomcat-9.0.56.tar.gz

项目中使用的9及9以下版本都可以用,如果使用的是10以上版本,需要自己到官网下载,因为10以上版本的包名已经和9及9以下版本的包名不同,9及9以下版本

2.2 上传文件/解压

XFtp进入/usr/local,将apache-tomcat-9.0.56.tar.gz进去

解压:

tar -zxvf apache-tomcat-9.0.56.tar.gz

重命名:

mv apache-tomcat-9.0.56 tomcat

删除压缩包:

rm -f apache-tomcat-9.0.56.tar.gz

解压成功:

2.3 启动tomcat

进入目录tomcat的bin目录:

cd /usr/local/tomcat/bin/

启动:

./startup.sh

查看tomcat启动效果:

在浏览器输入公网IP + 8080 (8080默认端口)

这就表示成功在Linux上安装了Tomcat。

3、Linux安装MySQL

我的项目使用的是MySQL8.0,所以我安装MySQL8.0

3.1 安装前清理工作(卸载mysql)

3.1.1 清理原有的mysql数据库

使用以下命令查找出安装的mysql软件包和依赖包:

rpm -qa | grep mysql

可能显示结果如下:

mysql80-community-release-el7-1.noarch
mysql-community-server-8.0.11-1.el7.x86_64
mysql-community-common-8.0.11-1.el7.x86_64
mysql-community-libs-8.0.11-1.el7.x86_64
mysql-community-client-8.0.11-1.el7.x86_64

使用以下命令依次删除上面的程序:

yum remove 名字

删除mysql的配置文件,卸载不会自动删除配置文件,首先使用如下命令查找出所用的配置文件:

find / -name mysql

可能显示结果如下:

/etc/selinux/targeted/active/modules/100/mysql
/usr/share/mysql
/usr/lib64/mysql

使用以下命令依次删除上面的程序:

rm -rf 名字

3.1.2 删除MariaDB的文件

由于MySQL在CentOS 7中收费了,所以已经不支持MySQL了,取而代之在CentOS7内部集成了mariadb,而安装MySQL的话会和MariaDB的文件冲突,所以需要先卸载掉MariaDB.

使用rpm命令查找出要删除的mariadb文件:

rpm -qa | grep mariadb

可能的显示结果如下:
mariadb-libs-5.5.56-2.el7.x86_64  

rpm -e mariadb-libs-5.5.56-2.el7.x86_64  #删除上面的程序

可能出现错误提示如下:

依赖检测失败:

libmysqlclient.so.18()(64bit)(已安裝) postfix-2:2.10.1-6.el7.x86_64 需要

libmysqlclient.so.18(libmysqlclient_18)(64bit)(已安裝) postfix-2:2.10.1-6.el7.x86_64 需要

libmysqlclient.so.18(libmysqlclient_18)(64bit)(已安裝) postfix-2:2.10.1-6.el7.x86_64 需要

使用强制删除:

rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

至此就将原来有的mysql 和mariadb数据库删除了。

3.2 安装MySQL

目前我用的是腾讯云CentOS 7.6 64位,将安装MySQL8.0

由于从CentOS 7系统开始,MariaDB成为yum源中默认1的数据库安装包,如果我们的Linux操作系统为CentOS 7及以上版本,使用yum命令安装MySQL包时可能将无法启动MySQL,且自己从官网下载Linux系统的MySQL安装包到Linux系统中也一样,也会出现无法启动MySQL服务的问题,我尝试了许多方法,暂时没有找到解决方法。

直到我发现了一篇博文的方法比较靠谱,而且尝试可行:CentOS 7.6 安装MySQL8.0

即手动下载mysql的Yum Repository

3.2.1 下载Yum Repository

到MySQL官网下载mysql的Yum Repository:MySQL Yum Repository

根据不同版本的CentOS系统进行下载,点击Download,我的是Linux 7

使用XShell,连接服务器,用wget下载mysql的rpm包:

wget https://repo.mysql.com//mysql80-community-release-el7-5.noarch.rpm

如上图,则下载成功。

3.2.3 安装MySQL(官网最新)

yum -y install mysql-community-server

最后结果如上图,则安装成功。

3.2.4 启动mysql服务并查看mysql状态

启动mysql服务:

systemctl start mysqld.service

查看mysql状态:

systemctl status mysqld.service

active表示mysql服务已启动。

3.2.5 获取mysql的root用户初始密码并修改

获取root用户初始密码:

grep "password" /var/log/mysqld.log 

初始密码先记住,最好复制,第一次登陆时要用,如果忘记,可以百度一下怎么无密码登录(在这里我就不讲了)

因为安装了Yum Repostiory,以后每次yum操作都自动更新,需要把这个卸载掉:

yum -y remove mysql80-community-release-el7-5.noarch

关闭和重启mysql:

systemctl stop mysqld.service   #关闭mysql
service mysqld restart		    #重启mysql

登录root用户并修改密码:

mysql -uroot -p

回车后将刚刚生成的初始密码复制进去,再回车即可

修改密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

如果出现以下错误:是密码安全性未达到要求,你可以先设置比较复杂,你容易记的密码先,因为第一次登陆必须先修改密码才能进行其他操作

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

登陆之后,可查看MySQL完整的初始密码规则:

SHOW VARIABLES LIKE 'validate_password%';

可以临时修改validate_password.length和validate_password.policy的值,再设置较为简单的密码:

set global validate_password_length=4;
set global validate_password_policy=0;

这样就可以通过上面的修改密码语句将密码修改为较为简单的密码。

3.2.6 设置远程连接(Navicat)

use mysql;                   # 使用mysql数据库
select user,host from user;  # 查看用户及用户登录权限

上面表示的的四个用户均只能本地登录,不允许远程登录,所以我们需要新增用户,并赋予远程连接权限

(1)新增远程连接用户:

# CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';
CREATE USER 'lzt'@'%' IDENTIFIED BY 'lzt';

(2)设置远程连接权限

grant all privileges on *.* to 'lzt'@'%';

(3)刷新权限

flush privileges;

很多用户在使用Navicat Premium 12(我就是用这个版本,不用破解,即下即用)连接MySQL数据库时会出现Authentication plugin ‘caching_sha2_password’ cannot be loaded的错误。

出现这个原因是MySQL8.0之前的版本中加密规则是mysql_native_password,而MySQL8.0之后,加密规则是caching_sha2_password, 解决问题方法有两种,一种是升级Navicat驱动(太麻烦),一种是把mysql用户登录密码加密规则还原成mysql_native_password

# 修改加密规则 
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;

# 更新用户密码 
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
ALTER USER 'lzt'@'%' IDENTIFIED WITH mysql_native_password BY '密码';

4、项目部署

上面我们已将项目部署所需要的东西都准备好,现在我们只需要将我们的项目进行打包,由于我的项目使用了Maven,我将项目打包成war文件,然后将文件使用XFtp软件放到Linux中/usr/local/tomcat/webapps中,即可通过 公网IP/端口(默认8080)/资源名 进行访问:

到此项目部署完成(不同类型的项目进行部署会有差别,此项目部署较适用于JavaWeb项目、Maven项目)

有关手把手教你在Linux系统进行项目部署的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby-on-rails - 按天对 Mongoid 对象进行分组 - 2

    在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev

  3. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  4. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  5. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  6. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  7. ruby - 如何进行排列以有效地定制输出 - 2

    这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][

  8. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  9. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  10. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

随机推荐