Comments (5)
Since you're deploying to /srv/tools/<last-build-id>
, does that mean you're just using overseer for graceful restarts? Or do you want to use it for upgrades (i.e. deploys) too?
from overseer.
In the past, I've just used S3 with versioning enabled to store binaries, and an S3 rollback will result in an overseer "upgrade" (actually a downgrade). #19 will add a File Fetcher, though it also just checks a single path so it still wouldn't match your workflow. Maybe the easiest thing to do is make a custom Fetcher
the interface is quite simple.
from overseer.
yes, I'm only using overseer as a graceful restart that plays well with upstart/systemd/etc
I'll look into the Fetcher idea, I assume it means, I keep deploying to /.../<build-id
, but instead of using a symlink that is created by our deployment scripts (ansible in our case), I let overseer make the actual copy of the file, interesting. I'll try it and if I run into any issues I'll post back, thanks!
from overseer.
Okay no worries. Note: you can also omit the fetcher
to just use graceful restarts:
overseer.Run(overseer.Config{
Program: prog,
Address: ":3000",
})
Then in your app, you could poll the symlink for changes, or you could expose an HTTP endpoint, and then call overseer.Restart()
.
from overseer.
I remembered that the way our servers are setup, the actual go binary doesn't have write access to the path where it is deployed, which means I cannot go with the Fetcher idea (unless I update our folder permissions, which I would like to avoid).
Because our go app isn't the only app we run, we would like to keep ansible as the one place where deployments happen from, and keep our apps away from the deployment logic.
I ended up making these changes to proc_master.go
func (mp *master) checkBinary() error {
// If you run your app from a synlink, you can
// pass this env variable to set where overseer should
// look for the binary to start a new instance
binPath := os.Getenv(envBinPath)
var err error
if os.Getenv(envBinPath) == "" {
//get path to binary and confirm its writable
binPath, err = osext.Executable()
if err != nil {
return fmt.Errorf("failed to find binary path (%s)", err)
}
}
mp.binPath = binPath
and now upstart passes the env variable to our go app telling it to always run from /srv/tools/web/current/<binary name>
I can keep this in our own fork if it doesn't seen aligned with your original idea for overseer.
Thanks for a great tool!
from overseer.
Related Issues (20)
- graceful restart failed
- graceful restart can not achieve zero-down HOT 3
- How to fetch the same binary again at a later time by HTTP fetcher?
- Feature Request: Dont show user [OPTION] HOT 1
- Error with windows build HOT 3
- REQUEST: Report an issue
- Operational inquiries
- Windows HOT 1
- Request: pause fetching files when Filesystem usage is about X
- How can overseer integrate with go-daemon HOT 1
- Can I not set Address And Addresses? My app isn't used to listen any port. HOT 1
- Failed to retreive fd for: :5001 (file tcp [::]:5001: not supported by windows) HOT 6
- restart server : accept tcp 127.0.0.1:9507: use of closed network connection HOT 3
- HTTP responsed but associated async tasks not finish, can release http conn after wait sometime?
- Overseer occupies port 80
- Can I set endpoint for s3 fetcher? HOT 2
- Whether the unioxsocket address is supported?
- compile a 32-bit LSB executable on arm and Execution error-> panic: unaligned 64-bit atomic operation
- How to introduce overseer in ListenAndServe in Gin HOT 1
- Unable to terminate the program by sending a TERM signal to the main process HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from overseer.