I recently set up a zero-downtime deploy pipeline for my Meteor app using GitHub Actions and Galaxy and honestly, it was way simpler than I expected.
In this post, I’ll walk you through how I did it step by step. You’ll have a fully working push-to-deploy setup in minutes using secrets for safety, pinned Meteor versions for consistency, and Galaxy’s infrastructure for smooth deploys.
Galaxy is Meteor’s official cloud hosting platform designed for simple, reliable deployments with integrated monitoring.
Today, beyond Meteor, Galaxy also supports Node.js, Python, and databases like MongoDB.
🚀 What we’re building
- A GitHub Actions workflow that deploys your Meteor app to Galaxy automatically on every
main
push - Secure configuration using GitHub Secrets (no plain text credentials in the repo)
- Reliable, reproducible builds with a pinned Meteor release for consistency
⚡ Why CI/CD with Actions helps
If you’ve ever deployed Meteor locally, you know how resource-hungry the build process can be high CPU load, memory spikes, and your laptop fans going full throttle.
Running this through GitHub Actions takes that pain away:
- Builds run entirely on GitHub’s hosted runners (Ubuntu VMs).
- Your machine stays free for real work no waiting around for Meteor to compile.
- Every run happens in a clean, isolated environment, so you avoid “works on my machine” problems.
The result: faster, more consistent deploys, no local slowdowns, and zero babysitting during the build.
🔗 Useful links
- Galaxy CLI deploy docs
- Galaxy regions
- GitHub Action:
aquinoit/simpletasks-ghactions
✅ Prerequisites
You’ll need:
- A live Galaxy app (e.g.
myapp.meteorapp.com
) - MongoDB configured via your app settings
- A GitHub repo with Actions enabled
1️⃣ Create a Meteor session (local, one-time)
Meteor’s CLI deploy requires a valid session. We’ll create one locally and convert it to base64 to use securely in GitHub.
METEOR_SESSION_FILE=./meteor_session.json meteor login
base64 -w0 meteor_session.json > meteor_session.b64
Save the base64 string output — we’ll add this as a GitHub Secret.
2️⃣ Add your GitHub Secrets
Go to your repo → Settings → Secrets and variables → Actions → New repository secret
Add the following two secrets:
Secret Name | Description |
---|---|
METEOR_SESSION_B64 |
Paste the contents of meteor_session.b64
|
METEOR_SETTINGS |
Your app’s settings JSON (as a single line) |
Tip: use jq -c
to compress your settings file into one line:
jq -c . settings.json
3️⃣ Add the deploy workflow
In your project, create a file at .github/workflows/deploy.yml
with:
name: Build & Deploy to Galaxy
on:
push:
branches: ["main"]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: meteorengineer/setup-meteor@v2
with:
meteor-release: '2.14' # Use your exact Meteor version
- run: meteor npm install
- name: Write settings.json
run: |
printf '%s' '${{ secrets.METEOR_SETTINGS }}' > settings.json
- name: Show Settings
run: cat settings.json
- name: Deploy to Galaxy
uses: aquinoit/galaxy-ghactions@0.0.2
with:
meteor_session_base64: ${{ secrets.METEOR_SESSION_B64 }}
app_hostname: myapp.meteorapp.com
region: galaxy.meteor.com
settings_file: ./settings.json
deploy_flags: '--free'
npm_install: 'true'
npm_install_args: ''
4️⃣ Push and deploy
Now commit and push to main
. The workflow will run automatically and deploy your app to Galaxy.
git add .
git commit -m "ci: automatic deploy to Galaxy"
git push origin main
Then on GitHub:
- Go to the Actions tab
- Click on Build & Deploy to Galaxy
- Watch the logs in real time!
🔐 Secrets & best practices
-
Never commit
settings.json
. The workflow writes it at runtime. - Use a Meteor account with the minimum necessary access for deployment.
- Consider separate workflows for production and staging environments.
🧯 Common issues & fixes
Meteor “superuser” warning
You can ignore this. The action already includes --allow-superuser
internally.
Deploying to the wrong region?
Use the correct region hostname:
- US:
galaxy.meteor.com
- EU:
eu-west-1.galaxy.meteor.com
- APAC:
ap-southeast-2.galaxy.meteor.com
“Can’t find action” error?
Make sure:
- You have
uses: aquinoit/galaxy-ghactions@0.0.2
- You’ve included the
checkout
step at the top
🧪 Production tips
- Pin your Meteor version in the workflow to avoid surprises
- Add a second workflow for
develop
→ staging app - You can also enable manual deployments with workflow_dispatch in your workflow. This allows you to trigger a deploy from the GitHub Actions UI, without pushing a commit.
✅ Final thoughts
That’s it! You now have a clean, secure CI/CD pipeline that deploys your Meteor app to Galaxy automatically — with zero downtime. Just push to main
and watch it go live in seconds.
🔗 More resources
🔮 Coming soon: GitLab CI and Bitbucket Pipelines
This guide focused on GitHub Actions, but I’ll soon publish versions tailored for GitLab CI and Bitbucket Pipelines.
So if your team uses those platforms, stay tuned the same zero-downtime deployment approach applies, just with different syntax.
Let me know if this was helpful or if you hit any issues while setting it up happy to help!
Top comments (0)