Ghost is a publishing platform for blogs, newsletters, and online publications.
This stack runs Ghost with a Tailscale sidecar, as described in the standard setup.
| Item | Value |
|---|---|
| Web interface | https://ghost.<tailnet>.ts.net (site) and https://ghost.<tailnet>.ts.net/ghost (administration) |
| Service port | 2368 |
| Images | ghost:5-alpine |
mysql:8.0 |
|
| Data | ./ghost-data/ghost (themes, images, and settings) |
./ghost-data/db (MySQL database) |
- Set
GHOST_URLin.env. Use the address of the site,https://ghost.<tailnet>.ts.net. Ghost does not start with the sample value and reportsInvalid URL. - Set
MYSQL_ROOT_PASSWORDin.env. The password of the MySQLrootuser, which Ghost uses to connect to the database. Compose stops with an error if it is empty.
- Extra container. The stack runs a
dbcontainer with MySQL, nameddb-ghost. It uses the default Compose network, and Ghost reaches it by its service name through Docker's DNS. KeepTS_ACCEPT_DNSdisabled, because MagicDNS cannot resolve that name. - Service port. Ghost listens on port
2368.SERVICEPORTin.envis only the host port of the optionalportsblock.
Open https://ghost.<tailnet>.ts.net/ghost and create the first account, which becomes the owner of the site.
Earlier versions of this stack had the password example for the MySQL root user in compose.yaml. The password is now MYSQL_ROOT_PASSWORD in .env. It is empty, and Compose stops with an error until you set it. If you already run the stack, set it to the password that you use now, because the database applies it only at the first start. If you kept the sample value, set MYSQL_ROOT_PASSWORD=example again. The database still uses it.