appkata-gogs
Deploying Gogs using Fly. Read this guide on Fly.Rationale
Appkata: The application fighting style - and a series of application-centric examples for Fly.io. The fundamental tool of modern development is a version control system, most often Git. Let’s get some Git on Fly. If we just skip past creating a bare Git server because that’s no fun, we find Gogs. Gogs bills itself as “a painless self-hosted Git service” and comes ready-packed as an easier to install, and complete Git service, including a web front end for issues and pull requests. Let’s get Gogs going on Fly. Our starting point is gogs/docker which has all the configuration and files related to the official Gogs docker image. It’s that image we are going to build with. We are going to use that image to deploy on Fly.Databases
Gogs needs the support of a database, typically MySQL or Postgres, which would involve deploying a whole separate process. But it also supports using SQLite3 as a local database. The database will need persistent disk space. We’ll use the Fly Volumes feature to give our application that disk space.Ports
Gogs runs a web service on port 3000 and an SSH service on port 22. We’ll get Fly to redirect the web service to port’s 80 and 443, and put SSH on port 10022. First though, some initializationfly.toml file with the basic components for configuring our gogs:
fly.toml:
Persistent Disks
With the other port set up, we then move to the persistent data storage. Make a Fly volume in the region where the app will be running. When we “inited” the app, it told us it would initially be deployed to London, LHR region. Let’s create a default (10GB) sized volume calleddata there:
fly.toml to add a mounts section for our new volume:
Deploying
We can now deploy Gogs using the commandfly deploy.
fly.toml.
Gogs is now up and running and you can use fly open to go straight to the site where you’ll be greeted by the first time run screen. Now it’s time to configure our Gogs deployment.
Custom Domains
If you have a custom domain you want to use for your Gogs server, now is the time to set it up. You’ll need to edit some DNS records so kick off the process withfly certs add yourdomain and it’ll give you instructions as you go.
Configuring Gogs
The first stop on the install screen for Gogs is the database settings. As mentioned at the start, we want to set this to SQLlite3, which is nicely self-contained. We’ll also want to make sure that the path is/data/gogs.db (an absolute path, not a relative one).
Scroll down and you’ll come the application settings. We’ll want to change the domain to the Fly domain (or your custom domain name). You’ll also want to change the ssh port to the one we set in the fly.toml services (10022). The HTTP port doesn’t need to change but the application URL should change to the same domain as the application URL and there’s no need to set a port in the URL.
Finally, make sure to create your admin account otherwise anyone logging in first to the server will get access and thats not good.
Click to install Gogs and it’ll be set up with this configuration. You can now go back to the front page - run fly open if you can’t remember the URL - and log in. You now have your own Git repository, issues tracker and more.
Notes
- Once set up, the configuration is effectively frozen - remember this when setting up. The clear the data and configuration,
fly suspendthe app, destroy the existing volume and create a new similarly named volume, thenfly resumethe app.
Discuss
- You can discuss this example on the community.fly.io topic.