申明:这是我第一次独立残缺的实现一次阿里云的单台服务器,docker-compose 部署,我不能保障我的做法是合乎最佳实际的,有可能还是谬误的,所以请各位辩证对待,帮忙纠正!

首先去申请了一台收费的阿里云服务器,期限为一个月

地址:
https://free.aliyun.com/?spm=5176.15218677.J\_3610715980.3.da8265ddqqlV3e
类型截图:

在ECS装置docker

参考文章:
https://help.aliyun.com/document_detail/51853.html

在ECS装置docker-compose

这里有个坑,个别举荐办法是
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
然而因为网络问题很难胜利。所以这里举荐用第二种办法,通过pip来装置。

$pip install --upgrade pip$pip install docker-compose 

如果装置不胜利,请尝试装置pip3并通过pip3来装置
pip install docker-compose

部署

这里首先分享下我本地的docker-compose的配置:

version: "3.9"services:  web:    build: .    environment:      - MONGO_HOSTNAME=mongo      - MONGO_PORT=27017    command: npm start    ports:      - "3600:3600"    links:      - mongo  mongo:    image: mongo    ports:      - "27017:27017"

在本地通过docker-compose up就能不便的启动服务,并能失常工作。
然而我不确定,在阿里云的单台ECS部署线上利用的最佳实际,所以我做了

第一个尝试:

  • 首先在本地build利用,docker-compose build
mongo uses an image, skippingBuilding webStep 1/6 : FROM node:latest ---> 35ccd3263923Step 2/6 : WORKDIR /usr/src/app ---> Using cache ---> a0ef79dd5c84Step 3/6 : COPY package*.json ./ ---> Using cache ---> f588ed7c91fdStep 4/6 : RUN npm install ---> Using cache ---> 46b2e77171b8Step 5/6 : COPY . . ---> 3daa6029fb4eStep 6/6 : EXPOSE 3600 ---> Running in 7b73e44ccbb5Removing intermediate container 7b73e44ccbb5 ---> 15dbff2e656cSuccessfully built 15dbff2e656cSuccessfully tagged topics-api_web:latest

而后把build进去的image,打上本人想要的标签:
docker tag topics-api_web:latest hiveer/topics-api:0.0.3

而后把打好标签的image部署到docker hub(默认的docker registry):
docker push hiveer/topics-api:0.0.3

  • 在服务器拉取镜像

docker pull hiveer/topics-api:0.0.3

  • 在服务器启动镜像

docker run hiveer/topics-api:0.0.3

很遗憾,利用启动不起来,起因是docker run hiveer/topics-api:0.0.3只启动了web利用,并没有启动mongo利用。我的第一个idea到此宣告失败。

第二个尝试

我在服务器装置了docker-compose,而后通过git clone把我的项目代码拉取到了服务器,而后通过docker-compose up来启动服务,我的预期是应该可能像本地一样启动服务,然而还是失败了,起因是在启动web服务的时候报错了。这里比拟纳闷,为啥本地没问题,这里有问题呢?

思考了一番,我感觉应该是环境起因。依据docker-compose.yml文件中web服务的设置是,依据本地文件build服务,那么因为服务器环境和本地环境的不统一导致了这个谬误。我这时候有了第三个想法。

第三个尝试

我新建了一个docker-compose-production.ymml文件,而后我把其中的
build . 改成了
image hiveer/topics-api:0.0.3
这个改变的作用是,让咱们在build web服务的时候,应用咱们打包好的镜像,而不是从新去build,这个就防止了环境差别。
finally,胜利了!

最初我到阿里云的控制台,在平安组中关上了我想要的3600端口给tcp服务。我如愿以偿的拜访到了我的API服务!

我不确定,我的计划是不是最佳实际,然而我确定我分享进去必定能够帮忙到某些敌人。无论成功失败,经验都是一种财产。