纯流水账记录: 问:今天干了什么?学到了什么?还差什么? 答: 今天干了什么? 今天主要用最原始的方式,从购买阿里云,到搭建nginx,安装各种所需要的服务,搭建了前端和后端,让前端react 能和后端go的api交互。涉及到下面这些centos8、nginx、nodejs、react nextjs、go、git、mysql8、mongodb。 今天学到了: 1,如何最原始的方式安装各种软件 2,nginx 配置react (见第5部分) 3,reactnextjs 如何发布运行 ,不同环境怎么区分 还差什么? 如何用docker 还有jenkins来使得这些更加自动化些?nginx的配置太简单了
======================================================
1,购买阿里云(试用,此处省略)并配置密码,可以让ssh登录
2,安装nginx
yum update
yum info nginx
yum install nginx
systemctl start nginx
systemctl status nginx
3,安装nodejs,yarn
curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -
yum install -y nodejs
wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
yum install yarn
4,安装git,在需要安装代码的目录下git clone 前端的代码库
yum install git
git clone git@github.com:xyxyxyx/ababab.git
然后可以在代码目录下运行 可以执行
yarn install
安装好后,如果运行 yarn dev ,没有错,基本上应该没问题了,毕竟本地已经测试过了。 我react 是基于nextjs的。
5,那么开始搞nginx的配置,让打开阿里云的ip(没有钱买域名)的时候 直接显示这个react的站点。
这里我是这样改的,首先备份原来的nginx.conf(一般在 /etc/nginx/目录下),然后修改他, 在http 这个块下面添加下面的
upstream stockdemo {
server localhost:3000;
}
然后删掉原来http块里的server 80那段默认的。 然后在conf.d目录下 我建一个新的conf文件 比如stockdemo.conf,此处配置最简单的,什么配置都没有相当于,后续会来更新优化。
server {
listen 80;
location / {
proxy_pass http://stockdemo;
}
}
保存完后重启nginx
systemctl restart nginx
这时如果你打开你的ip地址,那么就应该出现了简单的前端页面:
6,开始搞后端的,先装go 吧
wget https://golang.google.cn/dl/go1.18.4.linux-amd64.tar.gz
tar -zxf go1.18.4.linux-amd64.tar.gz -C /usr/local
vim /etc/profile
然后在文件的最后添加
export GO111MODULE=on
export GOROOT=/usr/local/go
export GOPATH=/home/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
保存完后,退出,然后重新载入profile 查看go version
source /etc/profile
go version
7,安装mysql mongodb
wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
rpm -ivh mysql80-community-release-el7-1.noarch.rpm
yum install mysql-server
systemctl start mysqld.service
ps -ef|grep mysqld
mysql -uroot -p
create database stock;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newrootpassword';
create user 'stock'@'localhost' identified by 'stock123';
grant all privileges on stock.* to 'stock'@'%' ;
然后导入本地的sql,此处不说了 开始安装mongodb 我按照这个文章mongodb.com/docs/manual/tutorial/install-mongodb-on-red-hat/ 摘抄如下 Create a /etc/yum.repos.d/mongodb-org-6.0.repo file so that you can install MongoDB directly using yum: 我们要vim /etc/yum.repos.d/mongodb-org-6.0.repo 里面写上下面这段:
mongodb-org-6.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
保存后,就可以用 yum install了 如下:
sudo yum install -y mongodb-org
sudo systemctl start mongod
sudo systemctl status mongod
这样就安装好mongodb了 这里有个地方要注意,centos上装好的mongodb 的client端 命令是mongosh 而不是 本地mac上的 mongo 然后我再导入本地的mongdb文件 此处也不赘述。
8,go 的站点启动 遇到了些问题
go build 的时候总是出现: Go get 太慢, 然后到这个页面看到解决方法https://goproxy.io/zh/
export GOPROXY=https://proxy.golang.com.cn,direct
速度提高多了。 因为我用了比较老的orm: xorm,之前本地调试都没问题,不知道为啥在正式服务器上就老是显示:
common/db.go:6:2: reading github.com/go-xorm/xorm/go.mod at revision v0.7.9: git ls-remote -q origin in /home/gopath/pkg/mod/cache/vcs/516cff95263076be8ff66fbbae295f8235963b00c4f114bcea50f99a51def272: exit status 128:
ERROR: Repository `go-xorm/xorm' is disabled.
Please ask the owner to check their account.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
以上这段错误,说明xorm 换地址了? 于是我baidu了下,最后发现 xorm 真的换地址了 https://gitea.com/xorm/xorm 我把代码中之前用到import github 下的xorm改成了xorm.io的,然后就ok了。
go get xorm.io/xorm
然后我
nohup go run
go 服务就起好了。然后我再打开我的ip地址,现在api里都能访问到go的api了,也能返回数据了。
9,react nextjs中配置env 的问题
我不是全职做前端的,所以其实这都是我自己瞎摸的,可能真正的方法不是这样。 得装下 "cross-env": "^7.0.3"
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"build-next-prd": "cross-env ENV=next-prd next build"
}
这样的话,可以在next.config.js中来配置env process.env.ENV 这个就是 next-prd,根据这个来判断到底应该用那个apihost 就可以了
const apiHostMapping = {
'next-prd': 'xxx.xxx.2xx.xxx',
'next': 'localhost'
};
env: {
APIHOST: process.env.ENV ? apiHostMapping[process.env.ENV] : 'localhost'
},
这样 yarn build-next-prd 再 yarn start ,这时候 服务器上调用的api 就是xxx.xxx.xxx.xxx了 而不是我们之前测试的localhost。
======================================== 障碍太多了,今天只扫了一个地方。 还差的地方,要看下次再补上。
|