(总结)Linux利用动态开发语言访问数据库+部署到web

下面是一些安装+访问数据库+部署到web的实况,仅供参考
安装MySQL8.0.20
安装Java14+Tomcat9.0.34
安装php7.4.5+nginx1.10.3
安装Golang1.14.2
安装python3.8.1
安装Nodejs12.16.3
安装Ruby2.7.1(没有部署到web)

系统环境: Linux:CentOS Linux release 7.3.1611 x86-64
数据库:MySQL-8.0.20

下载、安装动态开发语言

可以选择手动安装或者利用yum自动安装
部分需要自己再设置环境变量
如何查看JAVA_HOME环境变量

下面介绍的是手动安装的过程
可以去官网看看,然后复制下载链接,然后利用linux的wget下载

wget 下载链接

解压下载的【安装包】

tar -xvf 【安装包】

移动

mv 【安装包】 /usr/local/
cd /usr/local/【安装包】

有些语言可能需要编译,安装,需要先安装c编译器

#已安装就跳过
yum install -y gcc gcc-c++

编译(不需要编译安装就跳过这步)

#安装到/usr/local目录下
./configure --prefix=/usr/local/【该语言+版本号】

make && make install

添加软链接或者添加环境变量

linux环境变量介绍

添加软链接

ln -s /usr/local/【该语言+版本号】/bin/【该语言】 /usr/bin/【该语言】

添加软链接要使用绝对路径,否则无法使用

添加环境变量

添加如下环境变量
可以用export临时添加
可以在/etc/profile文件最后一行添加

export PATH=${PATH}:/usr/local/【该语言+版本号】/bin

查看版本号是否安装成功

一般来说,
输入

【该语言】 -v

或者

【该语言】

注:退出方法,可以尝试
.exit
quit
ctrl + c
ctrl + d

如果有输出的话,就安装成功了

编程第一个程序

创建工程

#创建对用的工程目录
mkdir $HOME/【该语言】
cd $HOME/【该语言】
#创建一个文件,编程
vim yyyy.xx

如何运行?一般来说
【该语言】 yyyy.xx
(部分语言需要先编译,后运行)

编程输出hello world

hello world!

编程访问数据库

安装对应语言的数据库驱动

一般利用该语言自带的安装工具可以自动安装
如:
python的pip
go的go get
还有些语言自带数据库驱动,如php

编程

编程访问数据库、输出到控制台

部署到web

要部署到web,就要提供http服务。把程序的内容输出到客户端的网页上。
比如:
java利用tomcat
php利用php-fpm
部分语言自带http服务,如:go

因为我不是很了解,就不多提了

可以利用对应语言的web框架,较快的实现http服务
如:
python的flask

安装web框架

利用该语言自带的安装工具,安装web框架
根据对应语言web框架,编程

部署到nginx

什么是nginx(百度百科)
nginx反向代理1
nginx反向代理2
nginx配置反向代理

我们可以利用nginx的反向代理功能。好像只需要访问同一个端口,就可以访问到不同的服务。
类似地,在nginx的配置文件中添加如下片段。
当访问nginx监听的端口时,匹配url parttern后,由nginx重定向到另一个地址。

location ~ \.go$ {
	proxy_set_header X-Forwarded-For $remote_addr;
	proxy_set_header Host            $http_host;
	proxy_pass   http://127.0.0.1:9001;
} 
location ~\.py$ {
	proxy_set_header X-Forwarded-For $remote_addr;
	proxy_set_header Host            $http_host;
	proxy_pass   http://127.0.0.1:9002;
}  

把编好的程序挂后台执行

linux后台执行任务
linux创建自定义服务
linux自定义服务参数
linux的systemctl命令

我们需要把我们写好的web程序挂在后台一直执行,有点类似于linux中的守护进程,并且在系统开机的时候自动启动。

“nohup+&”挂后台执行

java的tomcat和php的php-fpm,可以作为一个server,挂在后台一直执行。
node、python、go可以利用linux中的nohup+&命令实现后台执行
例如:

nohup python xxxx.py&

注:此时,需要利用exit退出终端,后台任务才能一直执行

但这种方法实现不了,开机启动。而且我实操的时候,发现就算用exit退出终端,node脚本任务也会跟着关闭。所以下面采用另一种办法实现守护进程。

linux自定义服务

在linux创建service文件,利用systemctl启动,关闭。这时候就需要自己编写启动和关闭的shell脚本。

my-service.service

[Unit]
#服务描述
Description=my-service.Consist of node\python\go
[Service]
#类型
Type=forking
#启动时,执行的脚本
ExecStart=/bin/bash /root/start-my-service.sh
#关闭时,执行的脚本
ExecStop=/bin/bash /root/stop-my-service.sh
StandardOutput=syslog
StandardError=inherit
[Install]
WantedBy=multi-user.target

start-my-service.sh

#!/bin/bash
echo "starting all.go"
#启动go
nohup /root/go/src/book/book&
#如果启动失败
if [ $? != 0 ];
then echo "start go fail!"
fi
echo "starting all.py"
#启动python
nohup python3 /root/python/book/all.py&
#如果启动失败
if [ $? != 0 ];
then echo "start python fail!"
fi
echo "starting all.js"
#启动node
nohup node /root/node/all.js&
#如果启动失败
if [ $? != 0 ];
then echo "start node fail!"
fi

这里go程序的执行,是执行编译之后的可执行文件。

我尝试过
go run go脚本
或者
go run go工程
这两条命令在shell中是可以正常执行的。
但是到了服务,这条命令,总是报错,无法启动go脚本。

stop-my-service.sh

#!/bin/bash
killall book
killall python3
killall node

由于我的进程这个三个是unique,所以直接killall

复制文件

#复制文件
cp my-service.service /usr/lib/systemd/system

注册开机启动

#注册到系统,相当于开启启动了
systemctl enable my-service.service

一些命令

启动:
systemctl start my-service.service
结束:
systemctl stop my-service.service
重启:
systemctl restart my-service.service
状态:
systemctl status my-service.service

nodejs掉线

2020/5/9
发现nodejs的脚本还是会退出,没有一直在线
linux-node后台启动

#安装PM2
npm install pm2

start-my-service.sh

nohup node /root/node/all.js& 替换为->
/usr/local/node/bin/pm2 start /root/node/all.js

stop-my-service.sh

killall node 替换为-> 
pm2 stop all

猜你喜欢

转载自blog.csdn.net/LittleSeedling/article/details/105931039
今日推荐