作者:小傅哥
❝沉淀、分享、成长,让自己和他人都能有所收获!😜 ❞
在几年前刚入手 Mac 电脑的时候,有不少伙伴问过我,这电脑有什么优势吗?又不能打游戏!是呀,能想到的就是没有广告、APP安装简单、UI风格细腻。但这些和 Windows 电脑好像也没有太大的差别,各有所好罢了。而且同等配置 Mac 还要贵不少。
但直到深入编程开发以后,一会搞后端、一些写前端、一会安装Docker环境。Mac 电脑是真的好用,你已经写了一天的代码了,Windows 伙伴还在适配环境。我觉得直到这会它的优势才体现出来,因为 Mac == 云服务器(Linux)!
那么本文,就是为了 Windows 伙伴所写,提供一套非常容易的,在云服务器就能搭建出来的开发环境和构建前后端项目的方案。让大家可以少一些折腾就能快速启动开发,完成项目的构建和部署操作。—— 其实你早晚也需要使用Linux环境!
本文涉及的工程;
文末有加入学习方式,提供了8个Java实战项目,非常有东西可以学!
在折腾工程中提供了开发必备的环境安装,可以通过执行脚本的方式安装和卸载 Java、Maven 以及通过 Docker Compose 安装 Redis、MySQL。
推荐使用 termius 工具连接你的云服务,这个工具自带 SFPT 可以方便的上传文件。
把 dev-ops 文件夹上传到云服务器上。
在你把 xfg-dev-tech-linux 克隆到本地以后,把 dev-ops 整个文件夹上传到云服务器的根目录即可。之后就可以执行下面的环境安装操作了。
常用命令;
rm -rf ...
删掉文件夹。安装的文件会进入 /user/local/java
、/user/local/maven
,可以进入后删掉旧版的文件。cat /etc/profile
查看配置文件vim /etc/profile
进入后输入 i 后开始编辑,编辑后点击 esc 之后输入 :wq 退出。如果你有安装多次,但这里 Java、Maven 配置有多份,可以删掉。git clone https://xxx.git
检出项目git branch
列出项目分支git checkout master
检出 master 分支sudo yum install git
安装后通过 git --version
查看版本
cd /dev-ops/java
chmod +x install-java.sh
./install-java.sh
java -version
此时会输出 Java 的版本。source /etc/profile
./remove-java.sh
cd /dev-ops/maven
chmod +x install-maven.sh
./install-maven.sh
mvn -version
此时会输出 maven 的版本。source /etc/profile
./remove-maven.sh
cd /dev-ops
docker-compose -f docker-compose-environment.yml up -d
以上这些环境的安装就可以支撑我们部署项目了,这里以小傅哥最近带着大家做的大营销平台项目(前后端)进行打包构建举例。
开始执行之前进入到 /dev-ops 通过命令创建 github 文件夹 mkdir github
,后续把项目检出到这个文件夹。
[root@lavm-aqhgp9nber dev-ops]# cd github/
[root@lavm-aqhgp9nber github]# ls
[root@lavm-aqhgp9nber github]# git clone https://gitcode.net/KnowledgePlanet/big-market/big-market.git
Cloning into 'big-market'...
Username for 'https://gitcode.net': Yao__Shun__Yu
Password for 'https://Yao__Shun__Yu@gitcode.net':
remote: Enumerating objects: 424, done.
remote: Counting objects: 100% (424/424), done.
remote: Compressing objects: 100% (222/222), done.
remote: Total 1494 (delta 113), reused 283 (delta 71), pack-reused 1070
Receiving objects: 100% (1494/1494), 229.88 KiB | 0 bytes/s, done.
Resolving deltas: 100% (418/418), done.
[root@lavm-aqhgp9nber big-market]# cd /dev-ops/
[root@lavm-aqhgp9nber dev-ops]# ls
docker-compose-app.yml docker-compose-environment.yml github java maven mysql redis
[root@lavm-aqhgp9nber dev-ops]# cd github/
[root@lavm-aqhgp9nber github]# ls
big-market
[root@lavm-aqhgp9nber github]# cd big-market/
[root@lavm-aqhgp9nber big-market]# ls
big-market-api big-market-domain big-market-trigger docs README.md
big-market-app big-market-infrastructure big-market-types pom.xml
[root@lavm-aqhgp9nber big-market]# mvn clean install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] big-market [pom]
[INFO] big-market-types [jar]
[INFO] big-market-domain [jar]
[INFO] big-market-api [jar]
[INFO] big-market-trigger [jar]
[INFO] big-market-infrastructure [jar]
[INFO] big-market-app [jar]
[INFO]
[INFO] -----------------------< cn.bugstack:big-market >-----------------------
[INFO] Building big-market 1.0-SNAPSHOT [1/7]
[INFO] Reactor Summary for big-market 1.0-SNAPSHOT:
[INFO]
[INFO] big-market ......................................... SUCCESS [ 0.594 s]
[INFO] big-market-types ................................... SUCCESS [ 4.069 s]
[INFO] big-market-domain .................................. SUCCESS [ 2.759 s]
[INFO] big-market-api ..................................... SUCCESS [ 0.775 s]
[INFO] big-market-trigger ................................. SUCCESS [ 3.834 s]
[INFO] big-market-infrastructure .......................... SUCCESS [ 2.423 s]
[INFO] big-market-app ..................................... SUCCESS [ 3.730 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18.696 s
[INFO] Finished at: 2024-03-31T13:22:04+08:00
[INFO] ------------------------------------------------------------------------
mvn clean install
命令先构建项目。[root@lavm-aqhgp9nber big-market]# cd big-market-app/
[root@lavm-aqhgp9nber big-market-app]# ls
build.sh Dockerfile pom.xml src target
[root@lavm-aqhgp9nber big-market-app]# chmod +x build.sh
[root@lavm-aqhgp9nber big-market-app]# ./build.sh
[+] Building 2.1s (8/8) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 372B 0.0s
=> [internal] load metadata for docker.io/library/openjdk:8-jre-slim 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/3] FROM docker.io/library/openjdk:8-jre-slim 0.0s
=> [internal] load build context 0.5s
=> => transferring context: 64.71MB 0.5s
=> CACHED [2/3] RUN ln -snf /usr/share/zoneinfo/PRC /etc/localtime && echo PRC > /etc/ 0.0s
=> [3/3] ADD target/big-market-app.jar /big-market-app.jar 1.2s
=> exporting to image 0.3s
=> => exporting layers 0.3s
=> => writing image sha256:aee0181546cccf3e6677aa8de6fae13d87c4cf812f0871a994c2ba1eaca 0.0s
=> => naming to docker.io/fuzhengwei/big-market-app:1.0 0.0s
fuzhengwei/big-market-app:1.0
的镜像已经打包出来来了。[root@lavm-aqhgp9nber big-market-app]# cd /dev-ops/github/
[root@lavm-aqhgp9nber github]# ls
big-market
[root@lavm-aqhgp9nber github]# git clone https://gitcode.net/KnowledgePlanet/big-market/big-market-front.git
Cloning into 'big-market-front'...
Username for 'https://gitcode.net': Yao__Shun__Yu
Password for 'https://Yao__Shun__Yu@gitcode.net':
remote: Enumerating objects: 93, done.
remote: Counting objects: 100% (93/93), done.
remote: Compressing objects: 100% (49/49), done.
remote: Total 93 (delta 33), reused 87 (delta 31), pack-reused 0
Unpacking objects: 100% (93/93), done.
[root@lavm-aqhgp9nber github]# cd big-market-front/
[root@lavm-aqhgp9nber big-market-front]# ls
next.config.js package-lock.json public src tsconfig.json
package.json postcss.config.js README.md tailwind.config.ts
[root@lavm-aqhgp9nber big-market-front]# ll
total 328
-rw-r--r-- 1 root root 92 Mar 31 13:26 next.config.js
-rw-r--r-- 1 root root 587 Mar 31 13:26 package.json
-rw-r--r-- 1 root root 299024 Mar 31 13:26 package-lock.json
-rw-r--r-- 1 root root 82 Mar 31 13:26 postcss.config.js
drwxr-xr-x 2 root root 4096 Mar 31 13:26 public
-rw-r--r-- 1 root root 1383 Mar 31 13:26 README.md
drwxr-xr-x 3 root root 4096 Mar 31 13:26 src
-rw-r--r-- 1 root root 507 Mar 31 13:26 tailwind.config.ts
-rw-r--r-- 1 root root 599 Mar 31 13:26 tsconfig.json
[root@lavm-aqhgp9nber big-market-front]# git branch
* 240211-xfg-init-project
[root@lavm-aqhgp9nber big-market-front]# git checkout main
Branch main set up to track remote branch main from origin.
Switched to a new branch 'main'
[root@lavm-aqhgp9nber big-market-front]# ls
build.sh next.config.js package-lock.json public src tsconfig.json
Dockerfile package.json postcss.config.js README.md tailwind.config.ts
[root@lavm-aqhgp9nber big-market-front]# chmod +x build.sh
[root@lavm-aqhgp9nber big-market-front]# ls
build.sh next.config.js package-lock.json public src tsconfig.json
Dockerfile package.json postcss.config.js README.md tailwind.config.ts
[root@lavm-aqhgp9nber big-market-front]# ./build.sh
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 697B 0.0s
=> [internal] load metadata for docker.io/library/node:18-alpine 37.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build context 0.1s
=> => transferring context: 599.89kB 0.1s
=> [base 1/1] FROM docker.io/library/node:18-alpine@sha256:c698ffe060d198dcc6647be78e 63.1s
=> => resolve docker.io/library/node:18-alpine@sha256:c698ffe060d198dcc6647be78ea16833 0.0s
=> => sha256:2694e4502e2414f1f0ecb8d3216bd3dd8fdd19fc9edeef31ac653b 39.81MB / 39.81MB 60.7s
=> => sha256:f8ecf2fb4bd9a228128a2638a8bd59e1a2b1348019ff7d4ea6de2431 2.34MB / 2.34MB 16.8s
=> => sha256:d3da4a73e4df700cd719baa5e2d175a2cda03f72b893c73a4c7063ae89685 450B / 450B 0.3s
=> => sha256:c698ffe060d198dcc6647be78ea1683363f12d5d507dc5ec9855f1c55 1.43kB / 1.43kB 0.0s
=> => sha256:62ce0df0c57930a42a9f6025b33f165c73217159dcf7681148ecee10c 1.16kB / 1.16kB 0.0s
=> => sha256:ed7d7e5a958009e493ebfa4f476c77dcb03013caa7730a0fef7e6aa3a 7.14kB / 7.14kB 0.0s
=> => extracting sha256:2694e4502e2414f1f0ecb8d3216bd3dd8fdd19fc9edeef31ac653b250fe11e 2.0s
=> => extracting sha256:f8ecf2fb4bd9a228128a2638a8bd59e1a2b1348019ff7d4ea6de2431a76179 0.1s
=> => extracting sha256:d3da4a73e4df700cd719baa5e2d175a2cda03f72b893c73a4c7063ae896855 0.0s
=> [deps 1/5] RUN apk add --no-cache libc6-compat 230.3s
=> [builder 1/4] WORKDIR /app 0.7s
=> [deps 2/5] WORKDIR /app 0.0s
=> [deps 3/5] COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ 0.1s
=> [deps 4/5] RUN yarn config set registry 'https://registry.npmmirror.com/' 0.7s
=> [deps 5/5] RUN yarn install 151.6s
=> [builder 2/4] COPY --from=deps /app/node_modules ./node_modules 9.9s
=> [builder 3/4] COPY . . 0.2s
=> [builder 4/4] RUN yarn build 47.4s
=> [runner 2/5] COPY --from=builder /app/public ./public 0.1s
=> [runner 3/5] COPY --from=builder /app/.next/standalone ./ 0.5s
=> [runner 4/5] COPY --from=builder /app/.next/static ./.next/static 0.1s
=> [runner 5/5] COPY --from=builder /app/.next/server ./.next/server 0.1s
=> exporting to image 0.4s
=> => exporting layers 0.4s
=> => writing image sha256:cdaae841aad5a14c8e8befbdab54827a4005a42bbe7904b9b0291e46342 0.0s
=> => naming to docker.io/fuzhengwei/big-market-front-app:1.4 0.0s
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://h1log1d5.mirror.aliyuncs.com",
"http://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
https://registry-1.docker.io/v2/: net/http: request canceled
可以安装下镜像。完成第3步以后,你的镜像文件就已经在云服务上了。按照你自己的项目进行docker compose 编写,部署就可以了。如果你学习了小傅哥星球「码农会锁」的大营销实战项目,可以按照以下文件进行部署。
version: '3.8'
# 命令执行 docker-compose -f docker-compose-app.yml up -d
services:
big-market-app:
image: fuzhengwei/big-market-app:1.0
container_name: big-market-app
restart: always
ports:
- "8091:8091"
environment:
- TZ=PRC
- SERVER_PORT=8091
- APP_CONFIG_API_VERSION=v1
- APP_CONFIG_CROSS_ORIGIN=*
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=123456
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/big_market?serverTimezone=UTC&characterEncoding=utf8&autoReconnect=true&serverTimezone=Asia/Shanghai
- SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.cj.jdbc.Driver
- SPRING_HIKARI_POOL_NAME=Retail_HikariCP
- REDIS_SDK_CONFIG_HOST=redis
- REDIS_SDK_CONFIG_PORT=6379
volumes:
- ./log:/data/log
networks:
- my-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
big-market-front-app:
container_name: big-market-front-app
image: fuzhengwei/big-market-front-app:1.4
restart: always
networks:
- my-network
ports:
- 3000:3000
environment:
- PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
healthcheck:
test: [ "CMD", "wget", "--spider", "-q", "http://0.0.0.0:3000/" ]
interval: 1m
timeout: 10s
retries: 3
networks:
my-network:
driver: bridge
执行;docker-compose -f docker-compose-app.yml up -d
脚本即可完成部署。