使用感受

## 买服务器


首先先买个服务器,什么云自己选择,我买的是阿里云。经过我几天的体验,感觉阿里云里,按量付费的服务器是比较亏的,只要我时不时点开看几下,几乎每个小时都会扣0.25元,这样算下来比包年肯定是贵的,我配置两天就花了十几块。所以不如包年好。服务器的选择上,1g内存就不要考虑了,我配置好以后后台常驻1g多内存,所以直接考虑2g或者更高的就行了。一般根据情况,2g内存里比较便宜的就够用了,根据需求来。不过后来我计划转战腾讯云了,因为感觉腾讯云明显便宜而且不麻烦,阿里云太麻烦了,又得考试又得写心得,关键是不直白,我找了半天学生优惠还是一脸懵逼,腾讯云比较直白,一年100,能买4年。阿里云的优点是控制台做的比较好,有可视化界面,用户提示也好,但是这些其实都是无关紧要的东西。阿里云还有个比较坑的地方在于他竟然没有开80端口,这点对很多不太熟悉阿里云的用户很不友好,腾讯云就默认开了。


<hr>


::: hljs-center


<img src="http://47.113.201.101:8081/upload/img/20211116/af49b6b9-b354-4653-8f7b-548abf98abdc_Screenshot2021-11-16at10.35.35AM.png" width = "270" height = "100" alt="图片名称"/>


![Screenshot 20211116 at 10.39.58 AM.png](http://47.113.201.101:8081/upload/img/20211116/9b771764-a235-48ad-aba8-46f63bb75692_Screenshot2021-11-16at10.39.58AM.png)


我买的这个


:::


<hr>


反正我感觉基本没什么选择,阿里云想买最低配只能买这个。


## Nginx


Nginx的文件目录这样编排:


<img src="http://47.113.201.101:8081/upload/img/20211116/febd98b9-f650-4186-af41-b570904a991b_Screenshot2021-11-16at10.43.12AM.png" width = "180" height = "300" alt="图片名称"/>


先把前端用:


```

npm run bulid

```


进行打包,打完包以后把dist文件夹压缩,发送到root/nginx/html下,mac在终端一顿操作:


```

scp -P 22 ./dist.zip root@x.x.x.x:/root/nginx/html  

```


然后输服务器进入终端的密码,输完密码就可以发送过去了。


到了服务器以后解压,弄成图片里这样就好了。


.conf文件:


```

#user  root

worker_processes  1;


events {

   worker_connections  1024;

}


http {

   include       mime.types;

   default_type  application/octet-stream;


   sendfile        on;

   keepalive_timeout  65;


   server {

       listen       80;

       server_name  localhost;


       location / {

           root   /usr/share/nginx/html;

           try_files $uri $uri/ /index.html last;

           index  index.html index.htm;

       }

       error_page   500 502 503 504  /50x.html;

       location = /50x.html {

           root   html;

       }

   }

}

```


让Nginx监听80端口,因为http协议默认就是这个端口。这里是把前端交给了Nginx进行管理,同时Nginx被Docker管理。Docker类似于一个虚拟机,有他自己的一套文件系统,/usr/share/nginx/html就是Docker虚拟机里的目录,要挂载(映射)到宿主机(即服务器)的相应路径,就是/root/nginx/html。


## Docker


目录结构:


<img src="http://47.113.201.101:8081/upload/img/20211116/8141cd46-db6f-4aeb-8288-27f03f70c15f_Screenshot2021-11-16at10.53.36AM.png" width = "180" height = "300" alt="图片名称"/>


docker-compose:


```yml

version: '3'



services:

 nginx: # 服务名称

   image: nginx:latest

   ports:

     - 80:80

   volumes:

     - /root/nginx/html:/usr/share/nginx/html

     - /root/nginx/nginx.conf:/etc/nginx/nginx.conf

   privileged: true #解决nginx文件调用的权限

 mysql:

   image: mysql:latest

   #ports:

     #- 3306:3306   不需要暴露mysql的端口

   environment:

     - MYSQL_ROOT_PASSWORD=xxx

     - TZ=Asia/Shanghai

 redis:

   image: redis:latest

   command: redis-server --requirepass xxx

 vueblog:

   image: vueblog:latest

   build: .

   volumes:

     - /usr/local/vueblogresources/img:/usr/local/vueblogresources/img

   ports:

     - 8081:8081

   depends_on:

     - mysql

     - redis

```


Dockerfile:


```

FROM openjdk:11.0.13


EXPOSE 8081


ADD vueblog-0.0.1-SNAPSHOT.jar app.jar

RUN bash -c 'touch /app.jar'


ENTRYPOINT ["java", "-jar", "/app.jar"]

```


对于文件上传,注意在这里,要把vueblog项目挂载到宿主机里,否则上传的文件会上传到虚拟机里,功能不影响,但你会找不到图片在哪里,就没法统一管理静态资源了。


## 启动


把这些文件配置好以后,下载Docker和docker-compose。注意docker-compose版本不要太高,否则会出问题,参见<https://*.com/questions/67010408/unable-to-start-docker-container-from-docker-compose-unknown-flag-iidfile>。


下载完以后,启动Docker,再运行:


```

docker-compose up -d

```


会自动去Docker仓库拉取镜像。Docker里的镜像类似于java中的类的概念,而容器类似于对象的概念。最好不要提前下载java,mysql之类的东西,而是交给docker统一管理。


因为我用的是jdk11和mysql8,所以版本和老师项目是有所区别的。mysql需要设置:


```sql

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

```


去更改加密规则,否则会出问题。用mysql5.x的版本就不用改了。但是mysql8官方说速度快,所以用8还是好一些。


然后访问IP地址就可以正常显示了。记得把前后端需要改的地方都改掉,不要用localhost了。


当需要更新项目的时候,把vueblog这个**镜像**删除掉,重新构建这个镜像就好了,这样如果配置文件和代码有所更改,就能立即生效。


```

docker-compose up -d

```


## 潜在的问题


由于jre被docker管理,所以用的是格林尼治那个时间,不是东八区的时间。出现这个博客创建时间早8小时的问题,注意,不一定是数据库没设置对,而很可能是jre的问题!!!我找了一些网上的思路都没有解决这个问题。我自己采取的方法是文章写入数据库的时候手动加8小时。这个问题先搁置了。


## 总结


自此前端、后端、运维就基本都完成了。前端和上线花了我很大的功夫,都是查资料,修bug,而后端虽然Mybatis-plus我不会用,但是实现相关功能并没有花多少时间。其实仅仅后端的话,不需要把前端和运维搞到很熟悉,但是要是想自己做个东西,还是必须要会的。因为这个博客我自己要用,写一些读书笔记之类的,所以还是自己硬着头皮搭起来了。成就感当然是有的,审美也是符合了自己的预期。当然,前端上面,有很多很出色的开源项目,这个还是要一直的学习。


::: hljs-right


2021.11.16


:::





上一篇:ENode框架Conference案例分析系列之 - 订单处理减库存的设计


下一篇:ENode 2.0 - 深入分析ENode的内部实现流程和关键地方的幂等设计