申明:这是我第一次独立残缺的实现一次阿里云的单台服务器,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服务!
我不确定,我的计划是不是最佳实际,然而我确定我分享进去必定能够帮忙到某些敌人。无论成功失败,经验都是一种财产。