我正在使用下面添加的部署脚本部署我的NuxtJS应用程序。我使用本教程中的一些说明:https://www.digitalocean.com/community/tutorials/how-to-automate-deployment-using-circleci-and-github-on-ubuntu-18-04
如果我使用SSH访问我的液滴并手动运行deploy.sh
脚本,它似乎可以正常工作。但是,一旦CircleCI启动一个docker实例(请参阅下面的config.yml(,如果幸运的话,它至少需要5分钟来运行脚本。在这样做的时候,我的液滴的CPU会飙升,尝试从本地机器使用SSH重新连接我的液流需要很大的耐心。
奇怪的是,只有在通过CircleCI运行脚本时才会出现这种情况。为了以防万一,我试着构建一个中等规模的docker实例,而不是一个小的,但运气不好。大多数情况下,部署在10分钟后就终止了,所以大多数时候我的部署都失败了。
如果CircleCI失败,液滴的CPU将保持在100%以上,node_modules/.bin/nuxt build
将继续运行。重新启动液滴是最简单的解决方案(有时是必要的,如果无法使用SSH重新连接,或者已经连接的终端不再响应(。重新启动后,第一次CircleCi部署成功,其余部署再次失败。
我看了htop,似乎kswapd0
占用了40%的CPU,snapd
占用了30,其余的都用于节点等。
deploy.sh
#!/bin/bash
#move to project folder
cd /var/www/mywebsite.nl
#pull from the branch
git pull origin main
# build nuxt project and run pm2
npm install
npm run build
pm2 start
circleci配置yml
version: 2.1
jobs:
deploy:
docker:
- image: buildpack-deps:trusty
resource_class: small # we use a small docker instance to use as little credits as possible
steps:
- add_ssh_keys:
fingerprints:
- "xx:xx:xx:xx:xx:xx:xx:xx"
- run:
name: Deploy Over SSH
command: |
ssh -oStrictHostKeyChecking=no -v $SSH_USER@$SSH_HOST "./deploy.sh"
workflows:
build-and-deploy:
jobs:
- deploy:
filters:
branches:
only:
- main # only deploy on the main branch
nuxt.config.js
import webpack from 'webpack'
export default {
// Disable server-side rendering: https://go.nuxtjs.dev/ssr-mode
ssr: false,
// Target: https://go.nuxtjs.dev/config-target
target: 'server',
// Global page headers: https://go.nuxtjs.dev/config-head
head: {
title: 'myapp',
htmlAttrs: {
lang: 'en'
},
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{ hid: 'description', name: 'description', content: '' }
],
link: [
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
]
},
// Global CSS: https://go.nuxtjs.dev/config-css
css: [
'@/assets/sass/main'
],
// Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
plugins: [{
src: '~plugins/vue-scrollmagic.js',
ssr: false
}],
// Auto import components: https://go.nuxtjs.dev/config-components
components: true,
// Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules
buildModules: [
['nuxt-fontawesome', {
component: 'fa', //customize component name
imports: [{
set: '@fortawesome/free-brands-svg-icons',
icons: ['fab']
},
]
}]
],
build: {
loaders: {
vue: {
prettify: false
}
}
},
// Modules: https://go.nuxtjs.dev/config-modules
modules: [
'@nuxtjs/sitemap'
],
sitemap: {
hostname: 'https://mydomain.nl'
}
}
有什么想法吗?
我的飞沫:1 GB内存/25 GB磁盘/AMS3-Ubuntu 20.04(LTS(x64
通过在package.json
中的构建进程上设置--max-old-space-size
参数,为其他进程节省一些内存似乎可以解决这个问题。我的应用程序不到一分钟就部署好了。
"build": "node --max-old-space-size=600 node_modules/nuxt/bin/nuxt.js build"
有时,当我的机器在某个时候实际使用更多内存时,这还不够,所以我想最安全的选择是使用2GB。
另一方面,这种情况只发生在应用程序的构建过程中,所以我想我可能会在GitHub上报告一个问题,以防万一。