--- title: "00-项目上线" created: 2025-12-02 tags: - 项目 aliases: - 项目上线 --- # 项目上线 ## 连接与基础配置 ### 连接 给服务器注册一个acs用户(可选 直接root用户也行 还更省事) ```bash adduser acs usermod -aG sudo acs ``` 把祖传配置文件和docker镜像传到服务器 我本地也留了一份 以后不需要去acterminal里拿了 ![[image-16be1665.png]] acterminal ![[image-714ccda4.png]] ![[image-471d6158.png]] 解压挂载容器 myserver ![[image-54adf454.png]] ![[image-59c89e7b.png]] ```bash docker run -p 20000:22 -p 443:443 -p 80:80 -p 3000:3000 -p 3001:3001 -p 3002:3002 -itd --name kob_server django_lesson:1.0 ``` (开安全组 20000、80、22、443、8000) ```bash [root@iZ0jla2j0b9ocfhtozveqqZ ~]# docker attach kob_server root@b854591d8a3b:/# adduser acs Adding user `acs' ... Adding new group `acs' (1000) ... Adding new user `acs' (1000) with group `acs' ... Creating home directory `/home/acs' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for acs Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y root@b854591d8a3b:/# usermod -aG sudo acs ctrl+p 再 ctrl+q退出 ``` 配置免密连接容器 local ```ssh-config Host springboot_server HostName 8.130.142.189 User acs Port 20000 IdentityFile C:\Users\zv041\.ssh\wei_01.pem ``` ```bash ssh springboot_server ``` ### mysql 安装: sudo apt-get update sudo apt-get install mysql-server 启动: sudo service mysql start 设置root用户的密码: sudo mysql -u root ALTER USER 'root'@'localhost' IDENTIFIED WITH caching\_sha2\_password BY 'zw200495'; 创数据库kob ![[image-f28d6500.png]] idea将建表命令复制出来 ![[image-118f19cd.png]] ```sql create table bot ( id int auto_increment primary key, user_id int not null, game varchar(50) not null, language varchar(50) not null, title varchar(100) null, description varchar(300) null, content varchar(10000) null, create_time datetime default CURRENT_TIMESTAMP null, update_time datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP ) engine = InnoDB; create table post ( id int auto_increment primary key, username varchar(255) not null, photo varchar(255) null, user_id int null, content text not null, create_time timestamp default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP ) engine = InnoDB; create table record ( id int auto_increment primary key, game varchar(255) not null, a_id int not null, a_sx int not null, a_sy int not null, b_id int not null, b_sx int not null, b_sy int not null, a_steps text null, b_steps text null, map text null, loser varchar(255) null, create_time datetime default CURRENT_TIMESTAMP null ) engine = InnoDB; create table user ( id int auto_increment primary key, username varchar(100) not null, password varchar(100) not null, photo varchar(1000) null, rating int default 0 null, openid varchar(255) null, constraint user_pk_2 unique (id) ) engine = InnoDB; ``` 在服务器建一个create\_table.sql 把代码粘贴进去 记录文件路径 在mysql中用soure执行 mysql> source /home/acs/create\_table.sql; ![[image-6e6bd611.png]] ![[image-e9fc9922.png]] ![[image-46f40d82.png]] user目录里kob\_localhost-2024\_11\_08\_18\_58\_30-dump.sql 传到服务器 在命令行(不是mysql)中执行 ```bash acs@b854591d8a3b:~$ sudo mysql -u root -p kob < /home/acs/kob_localhost-2024_11_08_18_58_30-dump.sql Enter password: acs@b854591d8a3b:~$ ``` ### java环境 根据项目配置下载 这里下java21 ```bash sudo apt install openjdk-21-jdk -y java -version ``` ## 本地打包项目 ### 打包后端 在打包之前 先修改后端代码 把请求都改成api开头 后面会解释 三个pom.xml中分别添加配置: 说明打包成jar包 jar ![[image-53573497.png]] 上面的三个都一样 下面的要改成真正的入口 三个都不一样 ```xml org.springframework.boot spring-boot-maven-plugin com.zwnsyw.backend.BackendApplication repackage ``` 打开maven bankendcloud 生命周期 clean ![[image-c0588483.png]] 修改: ![[image-eb581d1d.png]] ```java package com.zwnsyw.backend; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) class BackendApplicationTests { @Test void contextLoads() { } } ``` 点package ![[image-5834a1ea.png]] ![[image-5ab6e9c1.png]] 最终的结果在target 中 xxx.jar 包含了整个项目所需的所有东西 (依赖、配置文件、代码) ![[image-5ae21f78.png]] 接下来要做的事情就是把jar包传到云服务器里 ![[image-c9dc12be.png]] 为方便管理 在容器中建好文件夹 ![[image-ea3409f9.png]] ![[image-06befdd5.png]] 把jar包移到bankendcloud ```bash acs@b854591d8a3b:~/kob$ cd bankendcloud/ acs@b854591d8a3b:~/kob/bankendcloud$ cp ~/*.jar . acs@b854591d8a3b:~/kob/bankendcloud$ ls bankend-3.1.1.jar botrunningsystem-3.1.1.jar matchingsystem-3.1.1.jar acs@b854591d8a3b:~/kob/bankendcloud$ ``` ![[image-0b1075b3.png]] tmux打开三个终端 使用java -jar 分别执行三个jar包 ![[image-d5cc714c.png]] 配置nginx.conf /etc/nginx/nginx.conf ```nginx user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; # multi_accept on; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; # 监听HTTP 80端口的请求 server { listen 80; server_name www.zwnsyw.top; # 将API请求代理到本地3000端口的服务 location /api { proxy_pass http://127.0.0.1:3000; } # WebSocket代理配置 location /websocket { proxy_pass http://127.0.0.1:3000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 36000s; } # 默认根路径设置 location / { root /home/acs/kob/web; index index.html; try_files $uri $uri/ /index.html; } } } ``` 解释: 如果是api开头的请求 就会保留到springboot项目 如果是websocket开头的 也会保留在springboot项目 而如果是/开头的 就会保留到前端项目 所以后端的请求要给它改成api开头 注意 location / { root /home/acs/kob/web; 千万别放在root目录下 不然nginx无权访问 执行 ```bash root@b854591d8a3b:/etc/nginx# /etc/init.d/nginx start * Starting nginx nginx [ OK ] ``` 打开网页输入域名能看到403就是成功了(需要在阿里云把域名解析) ![[image-a8383d9c.png]] ### 打包前端 对应修改所有与后端接口的api 注意 一定别用localhost 后端与后端的交互就全用127.0.0.1 前端与后端的交互(客户端传来的请求) 全都用域名替换127.0.0.1 因为没配置证书 所以无需修改http和ws为https和wss ![[image-69149ee7.png]] 得到一个dist文件夹 整个传到服务器上去 ![[image-65b0fa80.png]] ```bash scp -r dist springboot_server:kob/web/ ``` ![[image-ee82076e.png]] 上传到服务器后需要把dist里面的全都拿到外面去(web下) ![[image-8645ffd0.png]] ```bash mv dist/* . ``` ![[image-a8f3c440.png]] 无端口冲突的话 不出意外就能成功访问了 ## 备份成功版本 取出当前成功部署的版本 熟悉docker镜像的用法 ```bash [root@iZ0jla2j0b9ocfhtozveqqZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b854591d8a3b django_lesson:1.0 "bash" 8 hours ago Up 7 hours 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:3000-3002->3000-3002/tcp, :::3000-3002->3000-3002/tcp, 8000/tcp, 0.0.0.0:20000->22/tcp, :::20000->22/tcp kob_server [root@iZ0jla2j0b9ocfhtozveqqZ ~]# docker commit b854591d8a3b kob_server_image:v1.0 sha256:a3c8029777d5e846d9aabf375c805508da8bb977009037ac2df84d02bcec5522 [root@iZ0jla2j0b9ocfhtozveqqZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE kob_server_image v1.0 a3c8029777d5 22 seconds ago 2.92GB django_lesson 1.0 58e383d3fa92 3 years ago 1.5GB docker_lesson 1.0 a2015e41937f 3 years ago 304MB [root@iZ0jla2j0b9ocfhtozveqqZ ~]# docker save -o kob_server_image_v1.0.tar kob_server_image:v1.0 [root@iZ0jla2j0b9ocfhtozveqqZ ~]# ls install.sh kob_server_image_v1.0.tar readme.txt thrift_lesson welcome.sh ``` --- **项目分区导航**: [[08-微服务-匹配逻辑细化|微服务-匹配逻辑细化]] ⬅️ | 00-项目上线 | ➡️ [[01-都24年了还有人不懂docker吗?一问 - 编程导航 - 程序员编程学习交流社区|都24年了还有人不懂docker吗?一问 - 编程导航 - 程序员编程学习交流社区]]