下面是一些安装+访问数据库+部署到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!
一般利用该语言自带的安装工具可以自动安装
如:
python的pip
go的go get
还有些语言自带数据库驱动,如php
编程访问数据库、输出到控制台
要部署到web,就要提供http服务。把程序的内容输出到客户端的网页上。
比如:
java利用tomcat
php利用php-fpm
部分语言自带http服务,如:go
因为我不是很了解,就不多提了
可以利用对应语言的web框架,较快的实现http服务
如:
python的flask
利用该语言自带的安装工具,安装web框架
根据对应语言web框架,编程
什么是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中的守护进程,并且在系统开机的时候自动启动。
java的tomcat和php的php-fpm,可以作为一个server,挂在后台一直执行。
node、python、go可以利用linux中的nohup+&命令实现后台执行
例如:
nohup python xxxx.py&
注:此时,需要利用exit退出终端,后台任务才能一直执行
但这种方法实现不了,开机启动。而且我实操的时候,发现就算用exit退出终端,node脚本任务也会跟着关闭。所以下面采用另一种办法实现守护进程。
在linux创建service文件,利用systemctl启动,关闭。这时候就需要自己编写启动和关闭的shell脚本。
[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
#!/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脚本。
#!/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
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