Using Custom Domains
Instead of using the codeberg.page
Domain, you can also purchase your own domain from your internet service provider of your choice and configure it to serve content from Codeberg Page.
Currently known pitfalls for failed certificates:
- you must either not have a CAA record, or explicitly allow LetsEncrypt there
For custom domains, two things are required:
-
a
.domains
file in the repository and branch where your files reside which you want to publish via Codeberg Pages. The file should contain a list of all domains that shall be usable to access that repository, according to the following rules:- One domain per line, you can leave lines empty and comment out lines with
#
. - The first domain is the main domain, all other domains in the file will be redirected to the first one.
- The rest of the list includes also all relevant
*.codeberg.page
domains for the specific repository.
- One domain per line, you can leave lines empty and comment out lines with
-
a DNS record pointing to one of the following targets, depending on where your static files reside:
Why do I need all these DNS records?
To understand how the Pages Server serves content, you need to know that a user browsing your custom domain just sends "Hey, I want to seeyourdomain.com
" to the server. But the server might not know, that it is responsible foryourdomain.com
and it cannot just server all domains in the world. So to find out if the server is responsible foryourdomain.com
it will check the DNS entries ofyourdomain.com
. If it returns something withcodeberg.page
(according to the domain schemes mentioned below) then it knows, which respository to check for the.domains
file and your content.
Setting the DNS record
There are several ways on how DNS records for your website can be setup in order to tell the Pages server your repository location. For all of the options it is important, that the Pages server knows where to look for the .domains
file and your content. Depening on from where you want to serve your files, there is a naming scheme for the domain:
Domain Scheme | Pages URL | |
---|---|---|
username.codeberg.page |
https://username.codeberg.page which will serve codeberg.org/username/pages |
|
reponame.username.codeberg.page |
https://username.codeberg.page/reponame which will serve codeberg.org/username/reponame |
|
branchname.reponame.username.codeberg.page |
https://username.codeberg.page/reponame/@branchname/ which will serve codeberg.org/username/reponame/src/branch/branchname |
Domain | Type | Data |
---|---|---|
yourdomain.com | CNAME | reponame.username.codeberg.page |
www.yourdomain.com | CNAME | reponame.username.codeberg.page |
⚠️ Caution
With a CNAME record everything on this domain is delegated to codeberg.page, which means you cannot setup your own e-mail adress with this method. If you need e-mail or others services, you have to use one of the remaining options.
Option 2: ALIAS record
If you cannot use a CNAME record to configure the target you can use this method, which needs two entries instead of one.
- First you need to specify, which server should be serving your website. Similar to CNAME you can use an
ALIAS record
. The difference between an CNAME record is, that the DNS server directly responds with the ip address and not thecodeberg.page
domain. Therefore you need to add a second entry, so that the pages server knows, what to serve under this domain. - Second, you need to setup a
TXT record
which contains the information from theCNAME entry
which is your repository location as mentioned above. For example[[branch.]repo.]user.codeberg.page
.
In the end it should look like this:
Domain | Type | Data |
---|---|---|
yourdomain.com | ALIAS | codeberg.page |
yourdomain.com | TXT | reponame.username.codeberg.page |
www.yourdomain.com | CNAME | yourdomain.com |
Option 3: A/AAAA record
If your service provider does not support ALIAS records
you can also use A records
and AAAA records
instead.
- First you need to specify, which server should be serving your website. You can do this, by setting an
A record
for IPv4 and anAAAA record
for IPv6 which contains the ip address of the Codeberg Page server. The servers ip addresses are:A record
which contains the IPv4 value217.197.91.145
AAAA record
which contains the IPv6 value2001:67c:1401:20f0::1
- Second, you need to setup a
TXT record
which contains the information from theCNAME entry
which is your repository location as mentioned above. For example[[branch.]repo.]user.codeberg.page
.
In the end, it should look like this:
Domain | Type | Data |
---|---|---|
yourdomain.com | A | 217.197.91.145 |
yourdomain.com | AAAA | 2001:67c:1401:20f0::1 |
yourdomain.com | TXT | reponame.username.codeberg.page |
www.yourdomain.com | CNAME | yourdomain.com |
Examples
The following sub-sections include a few examples of the different alternatives, assuming the following:
- we can add/modify DNS records in domain
example.com
. - Our Codeberg username is
frida
, and we want to publish pages for:frida/pages
, with a Personal static site inside branchpages
;frida/colormix
, with a Project site (again, inside branchpages
).
All considerations regarding a Personal site also apply to an Organization site, so these two cases will be addressed together.
Personal (or Organization) site, third level domain
In this case, we want our Personal pages available at the URL https://myself.example.com
.
The .domains
file contains the following:
myself.example.com
frida.codeberg.page
pages.frida.codeberg.page
pages.pages.frida.codeberg.page
For the DNS configuration:
-
if CNAME can be used, one single DNS record will suffice:
- name
myself.example.com
, typeCNAME
, datafrida.codeberg.page
- name
-
otherwise, if ALIAS can be used, two DNS records will be needed:
- name
myself.example.com
, typeALIAS
, datacodeberg.page
- name
myself.example.com
, typeTXT
, datafrida.codeberg.page
- name
-
otherwise, A/AAAA records must be used, together with one TXT record:
- name
myself.example.com
, typeA
, data217.197.91.145
- name
myself.example.com
, typeAAAA
, data2001:67c:1401:20f0::1
- name
myself.example.com
, typeTXT
, datafrida.codeberg.page
- name
Personal/Organization site, apex domain
In this case, we want our Personal/Organization pages available at the URL https://example.com
.
The .domains
file contains the following:
example.com
frida.codeberg.page
pages.frida.codeberg.page
pages.pages.frida.codeberg.page
For the DNS configuration, the CNAME SHOULD NOT be used, so:
-
if ALIAS can be used, two DNS records will be needed:
- name
example.com
, typeALIAS
, datacodeberg.page
- name
example.com
, typeTXT
, datafrida.codeberg.page
- name
-
otherwise, A/AAAA records must be used, together with one TXT record:
- name
example.com
, typeA
, data217.197.91.145
- name
example.com
, typeAAAA
, data2001:67c:1401:20f0::1
- name
example.com
, typeTXT
, datafrida.codeberg.page
- name
Project site, third-level domain
In this case, we want our Project pages available at the URL https://colormix-app.example.com
.
The .domains
file contains the following:
colormix-app.example.com
colormix.frida.codeberg.page
pages.colormix.frida.codeberg.page
For the DNS configuration:
-
if CNAME can be used, one single DNS record will suffice:
- name
colormix-app.example.com
, typeCNAME
, datacolormix.frida.codeberg.page
- name
-
otherwise, if ALIAS can be used, two DNS records will be needed:
- name
colormix-app.example.com
, typeALIAS
, datacodeberg.page
- name
colormix-app.example.com
, typeTXT
, datacolormix.frida.codeberg.page
- name
-
otherwise, A/AAAA records must be used, together with one TXT record:
- name
colormix-app.example.com
, typeA
, data217.197.91.145
- name
colormix-app.example.com
, typeAAAA
, data2001:67c:1401:20f0::1
- name
colormix-app.example.com
, typeTXT
, datacolormix.frida.codeberg.page
- name
Project site, apex domain
In this case, we want our Project pages available at the URL https://example.com
.
Note: this would be incompatible with using the apex
example.com
for other purposes, e.g. for the Personal/Organization example discussed before.
The .domains
file contains the following:
example.com
colormix.frida.codeberg.page
pages.colormix.frida.codeberg.page
For the DNS configuration, CNAME SHOULD NOT be used:
-
if ALIAS can be used, two DNS records will be needed:
- name
example.com
, typeALIAS
, datacodeberg.page
- name
example.com
, typeTXT
, datacolormix.frida.codeberg.page
- name
-
otherwise, A/AAAA records must be used, together with one TXT record:
- name
example.com
, typeA
, data217.197.91.145
- name
example.com
, typeAAAA
, data2001:67c:1401:20f0::1
- name
example.com
, typeTXT
, datacolormix.frida.codeberg.page
- name
Hey there! 👋 Thank you for reading this article!
Is there something missing, or do you have an idea on how to improve the documentation? Do you want to write your own article?
You're invited to contribute to the Codeberg Documentation at its source code repository, for example, by adding a pull request or joining in on the discussion in the issue tracker.
For an introduction on contributing to Codeberg Documentation, please have a look at the Contributor FAQ.
© Codeberg Docs Contributors. See LICENSE